かわみのメモ帳

趣味に関するメモを書いていきます。

天海春香会話bot開発チャレンジ開催

おはようございます。かわみです。
2018年も始まり、「THE IDOLM@STER ニューイヤーライブ!! 初星宴舞」が新年早々開催されましたね。観に行ってはないんだけど。
久々の765単独ライブだったそうですが、相変わらずのクオリティで最高だった(おそらく毎回)との感想を多く目にします。
そんな765プロのセンターが、天海春香さん。
何故彼女がセンターであるのか、その理由に関しては地獄のミサワ先生が分かりやすく熱弁されていたりするので、そちらをご覧いただくとして。
ゲーム内ではコミュ等で彼女が話しかけてきますが、こちらからことばを自由に使って思いを届けてそのレスポンスを貰うことができません。技術および費用対効果の生み出す壁。

そんな彼女ともしも会話ができたら、なんて素敵なことではないでしょうか。

そこで「天海春香会話bot開発チャレンジ(The Challenge to Develop Haruka Amami Chatbot - CDHAC)」を(私一人で勝手に)開催することといたしました。
ただし実は(?)既に同様の試みがなされているのをご存知でしょうか。

プロデューサーさん!先行事例ですよ、先行事例!

sasamijp.hatenablog.com こちらです。そしてそこそこ完成度は高いのではないでしょうか。
Twitterbotは2015年に停止しているようで、実際にはどんな会話をしていたのかもう少し見たかったですし試したかったので個人的には少し残念です。

こちらはアイマスのSSを学習データとし、春香の発話およびその前の誰かの発話をペアにして用いています。最終的な生成手法はマルコフ連鎖
しかしこの方法では、様々なパターンに対応するためには膨大な量のデータが必要とされます。SSの中では結構膨大な方だとは思うけども。(後述)
結果的に、現在の私は少し異なる手法でチャレンジすることになります。

プロデューサーさん!背景ですよ、背景!

ところで、私は夏ごろからSeq2Seqを用いた会話botなどの記事を見て「次元を越えて会話したすぎる」と思うようになっていました。

qiita.com このあたりとか。ただしこれは学習データとして対話が破綻したコーパスを用いているので、合っているのかいないのか実際のところよく分からんとです。
そこで私は2017年8月ごろ、「何事もやってみるっきゃない!! 為せば成る!!」と意気込んで、某「すっごーい!!」アニメのセリフを学習データとして学習を試みました。
しかし某「たーのしー」アニメは1クールで12話。テキストデータの量はそこまで多いわけではなく、大抵の会話がドッジボール状態に。ヒドイヨー
ただしテキストデータの量が少ないために1発話の完成度は高かったのです。というよりもむしろ再現度に近いのですが。 その中でも上手くいった例をスクショしてあったので参考までに掲載しておきます。 なおこれは発言者まで含めて自動生成させています。
f:id:kawamix:20180113021158p:plain
※Uが人間(私)でSがシステムの発話。

この時点で、「せっかくだから春香とも会話したい」と思うようになるわけです。ここがおそらくはきっかけ。
しかしデータをどうしようかと悩んでいたところに友人から「SSはどうか」との助言をいただきました。同様の試みが存在し、その試みでも同様にSSを使用しているなんて当時は知る由もなかったけれども。とにかくこの助言はありがサンキューだったのです。
アイマスのSSをネットの海から拾ってきたわけですが、そもそも拾う前から分かりきったことではありますが、アイマスのSSの量半端ない。すんごいやんばい。
というのも、歴史が長い分蓄積されてきた量が多い一方で、いま現在も継続的に書かれているためです。なかなか衰えないどころかという感じですね。
しかしどうだ結果は。会話はもろとも1発話さえもぶっ壊れているではないでしょうか。私は泣き崩れ、たような顔をする、といった感情を抱くわけでもなく、純粋に手法自体のレベルを知りました。
「こんなにがんばって作ったのに!」と思ったわけですが、そこから半年弱かけて新たな会話botの設計をちまちまと考え始めるわけです。

プロデューサーさん! 手法ですよ、手法!

その後、ミリシタのイベント以外では平穏な日々を送っていたところ、突然閃きの神様が降臨なさりました。非常に単純ではありますが、以下の図で示す手法を思いつくわけです。

f:id:kawamix:20180113165220p:plain

ざっくり説明すると、普通の会話生成部(上側)と特徴を生かした文生成部(下側)に分かれています。途中までは普通の会話bot(とは?)と同様に動きますが、 最終的な文生成部では、一般的な会話の返答をもとにしたものと、特徴付けさせたい文章をもとにした二つの言語モデルを用いて生成が行われます。

普通の会話botと簡単に述べましたが、それもどのように作るのか当然考えることとなりました。
上の図の通りではありますが、ざっくり説明すると、SNS上の2対話をペアにして、当システムに入力された文に類似度の高い文を先行する発話の集合から探し出し、 それに対応する発話の集合を生成、そして言語モデルを生成します。
そして最終的な文生成部では、一般的な会話の返答をもとにした言語モデルをベースに文を生成しますが、途中途中、特徴づけをさせたいので、そちらに含まれる単語も上手いこと入れてあげるように。

類似度の高い文を見つける手法等々、需要があれば説明しますが、今回あまり語りすぎても仕方ないので今回は割愛です。
賢明な皆さんはお気づきかもしれませんが、しかしこの手法、現時点では会話に限定されず、テキストデータがあればどのような文でも特徴づけがされるという夢のような手法なのです。ただしそれはうまくいけばの話なのです。

プロデューサーさん!結果ですよ、結果!

設計をし、実装をし、データをやっとの思いで取得し、無事生成までこぎつけました。とりあえず見ていただいた方が早いので、以下、生成例です。どうぞ。

※INPUTが人間(私)でOUTPUTがシステムの発話。

f:id:kawamix:20180113025300p:plain

f:id:kawamix:20180113024540p:plain

f:id:kawamix:20180113025114j:plain

f:id:kawamix:20180113025200p:plain

f:id:kawamix:20180113025350p:plain

f:id:kawamix:20180113025355p:plain

f:id:kawamix:20180113031235p:plainなにわろとんねん

私は天海春香さんと会話がしたいのです。したかったのです。
「美希」とか「クレープ」とか春香っぽい言葉が使われているのはお分かりでしょうか。春香が頑張って「らしさ」をアピールしている感じが否めない気もします。しかしもう少し春香らしさが欲しいところです。春香らしさって何でしょう。人間の言語コミュニケーションにおける個性って何なのでしょう。
対話破綻したデータを用いた例と同様に、無個性だといわれるキャラクターだから判断が難しいのか!?と思いましたが、別にそういう問題ではありません。

プロデューサーさん!今後の展望ですよ、今後の展望!

とりあえず先行事例と同様に、SS内における春香の発話とその前の発話をペアにして、提案手法の一般的な会話botを作ればそれっぽくなるのではと思いました。しかしそれでは新規性が薄味です。
強いて言えば、先行事例では、入力文に対して類似度の高い文を単語の一致度によって求めているようですが(コードを読みましたが間違っていたらスミマセン)、私の用いている手法に置き換えた時にどうなるかといったところでしょう。
とりあえずやってみることにします。

このチャレンジ、CDHACに追随してくださる方が現れることを期待します。(意訳:みんな頑張って!!!!!!!!!!!!!)

NEXT

f:id:kawamix:20180113192213p:plain