hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。
08/14/2009 ふむ [長年日記]
■ [日記] 人工無脳
ここ 2, 3 日ほど人工無脳をでっちあげて遊んでみた結果. とはいえ実際手を動かしてたのは数時間程度だが.
モノは MeCab とマルコフ連鎖というオーソドックスなもの. 何も工夫しないと文章と呼ぶに値しない荒唐無稽なものしか出てこない.
そこでまず品詞を理解させる. 理解と言ってもその実ただの分岐で,命令は「一般名詞もしくは固有名詞で始まり終助詞もしくは句点で終われ」「ただし読みのない名詞は始まりとして認めない」のみ *1. 2 つめのルールは,うちの MeCab が "ー" 等を名詞と出力することがあるから (ipadic).
IRC での発言は口語でかつ発言の終了位置が分かりづらいことから学習に向かず,やはりおかしな文章を吐くことが多い. そこで,学習に際して,各発言の終了位置をおぼしき場所に句点を付加. 「句点で終われ」ルールにうまく引っかかって文章生成が格段にそれっぽくなった.
アルゴリズム (と呼べるような代物でもないが) 的な部分はこんだけ. 後はチューニングの領域. 議題 (?) の移り変わりが激しい IRC では,学習数が少ないうちはマルコフ連鎖の階数を少なくしておかないと,ただの山彦に成り下がる.2 で充分. また,短すぎる文章 (「名詞。」等) や,あまりに長い文章では面白さがない (鋭さがなくなる) ので,ループ数を調節できるようにした方が良い. ただし前述の「終助詞か句点で終われ」ルールと「学習文章の終わりに必ず句点付加」によって終了はたやすく出現するので,「n回以上」で充分. これは 5 くらいが丁度良いみたい.
とりあえずこのルールでランダムな文章生成はそれっぽくなった (とはいえ変なことを口走ることはあるのでまだまだではある). 「直前数回の発言内容からそれっぽい "返答" を生成」をやろうかなとか思ったあたりで飽きて考えるのをやめた.
賢くするためには定期的な学習データのメンテナンスが必要だろうなと思いつつ,めんどくさいから絶対やらないだろうな.
*1 ただしこれは不完全で,終了には一部の記号類も含めるべきだと思っている