ささみろぐ

チラシの裏

天海春香さんと会話したい 17

こう言われたらこう返すというデータを蓄積して返答させる方法を考えてきた。その方法だと、返答を選びとるにあたって「今話しかけられた文章」というデータしか手がかりにならない。そこで、文脈を読み取る仕組みを考えてみた。

入力とSSをどこまで比較するかの問題なのだが、「こう言われたらこう返す」の「こう言われたら」の部分だけ比較するのではなく、「こう言われてこう言ってこう言われてこう返す」の「こう言われてこう言ってこう言われて」ぐらいの部分までより深く比較することで、少しでも文脈を読み取らせることができるのではないかと考えた。

 

どういうデータ形式でSSを保存しておけばスピーディに文脈を比較できるかについて考えてみる

Neo4jというグラフデータベースを使って会話の繋がりをグラフにしてみる

f:id:sasamijp:20150321220537p:plain

こう言われたらこう返す、の連続で繋がった線になる。これだけでも従来の仕組みでいくなら割と充分なのだが、どの単語がどの発言に属しているかみたいな情報も参照できるようにしたかったのでもう少し複雑にしてみる。

f:id:sasamijp:20150321223340p:plain

mecabに文章をパースさせて単語につく情報を木にしてみた。この部分だけを生成するのに4分ぐらいかかった ちょっと必要以上に複雑にしすぎた感がある。もう少しシンプルにいきたい。

 

 

ちくわ大明神

ちくわ大明神とその他について書いていく

ちくわ大明神

f:id:sasamijp:20141210145352p:plain

はるアイコン鯖ちくわ建築のパイオニアであり、ちくわの神様が祀ってある

我々はるアイコン鯖民のちくわに対する溢れんばかりのリスペクトを感じさせられる 本殿の屋根に設置されたちくわは気品さえ漂わせる

ギョエー鳥

f:id:sasamijp:20141210145446p:plain

らこさんに手伝ってもらい3羽作った

f:id:sasamijp:20141210145456p:plain

口から卵を発射する機構がある ちくわは発射できない

自宅

f:id:sasamijp:20141210145642p:plain

緑豊かだがちくわはない ちくわは植物じゃない

ちくわエクスプレス

f:id:sasamijp:20141210150736j:plain

ちくわ色の路線、ちくわを走る鉄道、ちくわエクスプレス

役場前駅

f:id:sasamijp:20141210151451p:plain

始発駅 でかいけどちくわがない

ちくわ大明神前駅

f:id:sasamijp:20141210151537p:plain

ちくわ大明神の前に設置された駅

二本のちくわが織りなすちくわリズムが美しい、全てがちくわになってしまえばいい

ささみ温泉駅

f:id:sasamijp:20141210145751p:plain

大規模温泉 でかいがちくわはない

練馬駅

f:id:sasamijp:20141210145849p:plain

ちくわ型ホームが練馬という地に潤い、安らぎ、情緒をもたらしている

ちくわが一品あるだけでこうも影響を与えるのだ

雪見町駅

f:id:sasamijp:20141210145942p:plain

終点駅 巨大ちくわが雪見町の景観をぶち壊し、申し訳ないがこれもちくわのためである ちくわと調和しろ ちくわを作れ ちくわであれ

 

天海春香さんと会話したいシリーズ16

基本情報落ちた

作り直した

前々回ぐらいの記事で文章表現を増幅することで細かいニュアンスの変化に対応できるとかいうことを書いたが、色々とやり方が悪くて効果が出なかったのでそれを踏まえて作り直した

DB設計

f:id:sasamijp:20141118232518p:plain

f:id:sasamijp:20141118232523p:plain

f:id:sasamijp:20141118232527p:plain

 単語に対して品詞データを全て保存しておくよりも、助詞かどうか、接続語かどうかだけ、と使う分だけ保存しておいて方がよい気がした 厳密な測定をしてないので効果はなんとも言えない

返答部分

https://github.com/sasamijp/Amami16/blob/master/roid/responder.rb

Aと言われたらBと返すという会話コーパスの集合があって、入力が与えられた時それがAである確率が最も高いものを選んでBを返すという基本的な部分は変えない

入力がAである確率を出すにあたって、単語を1単位として編集距離を出すのが一番強い気がした 例えば

["今日","の","ごはん"]と

["今日","の","うんこ"]

の編集距離は1である 

しかしこれには弱点があって、例えば

["死ね"]と

["好き"]の編集距離が1である 意味が全然違うのに文章として近いと判定されてしまう

これを避けるため、助詞以外の品詞が最低1つ一致しない場合そのコーパスを除外する 残ったコーパスでそれぞれ入力との編集距離を算出する

効果

天海春香さんと会話したいシリーズ15

 

クソみたいなコーパス

つらみ

f:id:sasamijp:20141025170507p:plain

f:id:sasamijp:20141025170524p:plain

これは「トーク長え...」と言われたのに対して「久し振りに...」という返答があるコーパスなのだが、ラジオMC専用の対話システムでもない限り会話コーパスとしてはまず使い物にならない

こういった使い物にならない会話コーパスがとても多く滅茶苦茶な返答をする原因になっている

なんで

SSの種類っていうか内容を判別せずに収集させていたので使えないコーパスが大量に発生するっぽい

元のSSを読んでみるとラジオ番組の放送中という設定らしい、面白かった

どうすんの

ラジオSS、登場人物が多いSS、発言がいちいち長いSSなどを弾く基準を設定して会話コーパスを再収集する

どうやんの

パースされたSSがコーパスに適しているか判定するクラスを作った

https://gist.github.com/sasamijp/a997fcbef4e9c4c708a1

発言の平均の長さが20以下かつ一対一の会話が40%以上の場合と、発言の長さが20以上でも一対一の会話が80%以上の場合、コーパスとして適していると判断される

どうなの

まだちょっとしかテストしてないけど多分いい感じ

 

天海春香さんと会話したいシリーズ14

重い

18万件も会話コーパスがあるとDBから全部の文章を取り出してmecab分かち書きして数値出してみたいなことをやるとものすごい時間かかる 10分ぐらいかかる

1回の返答に10分かけるとかやってられないので事前に分かち書きしてDBに保存しておくことにする

かなり雑だけどテーブルはこんな設計になった

f:id:sasamijp:20141011130203p:plainf:id:sasamijp:20141011130218p:plain

f:id:sasamijp:20141011130226p:plainf:id:sasamijp:20141011130308p:plain

これに従来のコーパスを放り込める状態に変換して放り込むのに7時間ぐらいかかった 多分やり方が悪かった

文章表現の増幅

細かいニュアンスは違うけど、言いたいことは同じ、みたいな文を検知して正しい返答を返したい

文章中の名詞と助詞を置換可能なものに置換することで、より正確にその文章の言いたいことがわかるようにしたかった

置換可能名詞の推定

日本語 Wordnetという日本語の意味辞書を使う

入力した名詞に対する類義語、上位語、下位語を置換可能な名詞として扱う

「電車」を例にするとこんな感じで置換可能名詞がとれる

f:id:sasamijp:20141011131440p:plain

置換可能助詞の推定

もうマルコフ連鎖みたいな感じで置換可能な助詞とれるんじゃね?みたいなノリだった 甘かった

入力した文章中に含まれる助詞の前後の単語と品詞が一致する助詞をコーパスから検索し置換可能助詞として扱う

よくできた例

f:id:sasamijp:20141011132151p:plain

いい感じに語尾が置換されて表現が増幅されている

悪い例

f:id:sasamijp:20141011132236p:plain

「私は元気です」とは文章の意味自体が違うものが多く出てきている そもそも日本語として成り立ってないものも多い

調べてみると、格パターン分析とかいうことをやらないと置換可能な助詞はちゃんととれないらしい

 

ムビマスBD届いた

BD再生機器ないから本編とシャイニーフェスタ観れないんだけど特典CDが素晴らしかった 生きててよかった

 

天海春香さんと会話したいシリーズ13

戦いは数だよ兄貴

前々回の記事でノイズの少ない会話コーパスを集めるのが大事といった話を書いたが、それにしても会話コーパスの量が3000とかだと会話するには全然足りないと感じた

ノイズの少なさを保ったまま会話コーパスの量を増やすために適当なSSまとめサイトの記事を全部保存するスクリプトを書いてみた

記事のurl全部取得するやつ :

https://gist.github.com/sasamijp/b9c1f8a5f3f554060f1d

記事の内容を会話コーパスに変換して保存するやつ :

https://gist.github.com/sasamijp/c845f4784c050789a434

SSから会話コーパスへの変換をするクラス :

https://gist.github.com/sasamijp/4df8193b80c4007dd185

 

f:id:sasamijp:20140928203714p:plain

会話コーパスのテーブルはこんな感じで用意した

f:id:sasamijp:20140928203812p:plain

以前までは発言者が春香のコーパスのみを集めていたがほかのキャラの会話も色々と使いようがあるので保存しておくことにする

それでも大体18万ぐらいの会話コーパスが集まったので以前より600倍ぐらい強い春香さんができると思う

泣きそう

 大きさ18万のデータとなると今まで適当にループ回して2秒ぐらいで終わった処理に1分ぐらいかかったりするのであらかじめ文を分かち書きしておくなどといった工夫が必要になる

つらい

今日は、このへんに、しときます、それではみなさん、さよなら〜