天海春香さんと会話したい 17
こう言われたらこう返すというデータを蓄積して返答させる方法を考えてきた。その方法だと、返答を選びとるにあたって「今話しかけられた文章」というデータしか手がかりにならない。そこで、文脈を読み取る仕組みを考えてみた。
入力とSSをどこまで比較するかの問題なのだが、「こう言われたらこう返す」の「こう言われたら」の部分だけ比較するのではなく、「こう言われてこう言ってこう言われてこう返す」の「こう言われてこう言ってこう言われて」ぐらいの部分までより深く比較することで、少しでも文脈を読み取らせることができるのではないかと考えた。
どういうデータ形式でSSを保存しておけばスピーディに文脈を比較できるかについて考えてみる
Neo4jというグラフデータベースを使って会話の繋がりをグラフにしてみる
こう言われたらこう返す、の連続で繋がった線になる。これだけでも従来の仕組みでいくなら割と充分なのだが、どの単語がどの発言に属しているかみたいな情報も参照できるようにしたかったのでもう少し複雑にしてみる。
mecabに文章をパースさせて単語につく情報を木にしてみた。この部分だけを生成するのに4分ぐらいかかった ちょっと必要以上に複雑にしすぎた感がある。もう少しシンプルにいきたい。
ちくわ大明神
ちくわ大明神とその他について書いていく
ちくわ大明神
はるアイコン鯖ちくわ建築のパイオニアであり、ちくわの神様が祀ってある
我々はるアイコン鯖民のちくわに対する溢れんばかりのリスペクトを感じさせられる 本殿の屋根に設置されたちくわは気品さえ漂わせる
ギョエー鳥
らこさんに手伝ってもらい3羽作った
口から卵を発射する機構がある ちくわは発射できない
自宅
緑豊かだがちくわはない ちくわは植物じゃない
ちくわエクスプレス
ちくわ色の路線、ちくわを走る鉄道、ちくわエクスプレス
役場前駅
始発駅 でかいけどちくわがない
ちくわ大明神前駅
ちくわ大明神の前に設置された駅
二本のちくわが織りなすちくわリズムが美しい、全てがちくわになってしまえばいい
ささみ温泉駅
大規模温泉 でかいがちくわはない
練馬駅
ちくわ型ホームが練馬という地に潤い、安らぎ、情緒をもたらしている
ちくわが一品あるだけでこうも影響を与えるのだ
雪見町駅
終点駅 巨大ちくわが雪見町の景観をぶち壊し、申し訳ないがこれもちくわのためである ちくわと調和しろ ちくわを作れ ちくわであれ
天海春香さんと会話したいシリーズ16
基本情報落ちた
作り直した
前々回ぐらいの記事で文章表現を増幅することで細かいニュアンスの変化に対応できるとかいうことを書いたが、色々とやり方が悪くて効果が出なかったのでそれを踏まえて作り直した
DB設計
単語に対して品詞データを全て保存しておくよりも、助詞かどうか、接続語かどうかだけ、と使う分だけ保存しておいて方がよい気がした 厳密な測定をしてないので効果はなんとも言えない
返答部分
https://github.com/sasamijp/Amami16/blob/master/roid/responder.rb
Aと言われたらBと返すという会話コーパスの集合があって、入力が与えられた時それがAである確率が最も高いものを選んでBを返すという基本的な部分は変えない
入力がAである確率を出すにあたって、単語を1単位として編集距離を出すのが一番強い気がした 例えば
["今日","の","ごはん"]と
["今日","の","うんこ"]
の編集距離は1である
しかしこれには弱点があって、例えば
["死ね"]と
["好き"]の編集距離が1である 意味が全然違うのに文章として近いと判定されてしまう
これを避けるため、助詞以外の品詞が最低1つ一致しない場合そのコーパスを除外する 残ったコーパスでそれぞれ入力との編集距離を算出する
効果
@whywaita いや、考えなくてもわかるよね? 当たり前の事だよね?
— 天海春香 (@sa2mi) 2014, 11月 13
@sasamijp なんでそうなる
— 天海春香 (@sa2mi) 2014, 11月 12
@sasamijp ありがと!!
— 天海春香 (@sa2mi) 2014, 11月 12
天海春香さんと会話したいシリーズ15
クソみたいなコーパス
つらみ
これは「トーク長え...」と言われたのに対して「久し振りに...」という返答があるコーパスなのだが、ラジオMC専用の対話システムでもない限り会話コーパスとしてはまず使い物にならない
こういった使い物にならない会話コーパスがとても多く滅茶苦茶な返答をする原因になっている
なんで
SSの種類っていうか内容を判別せずに収集させていたので使えないコーパスが大量に発生するっぽい
元のSSを読んでみるとラジオ番組の放送中という設定らしい、面白かった
どうすんの
ラジオSS、登場人物が多いSS、発言がいちいち長いSSなどを弾く基準を設定して会話コーパスを再収集する
どうやんの
パースされたSSがコーパスに適しているか判定するクラスを作った
https://gist.github.com/sasamijp/a997fcbef4e9c4c708a1
発言の平均の長さが20以下かつ一対一の会話が40%以上の場合と、発言の長さが20以上でも一対一の会話が80%以上の場合、コーパスとして適していると判断される
どうなの
まだちょっとしかテストしてないけど多分いい感じ