2-gramのマルコフ連鎖
マルコフ連鎖という文生成アルゴリズムがありますね.原理としてはすごく簡単なので人工知能入門には最適です.なので実装してみました.以下にコードを示します.
これをコンパイルして実行した結果が以下になります.
入力テキストは青空文庫から「走れメロス」を使わせていただきました.
# ./malkov-chain melos.txt メ 10 > output.txt # cat output.txt メロスは赤面して、あ、ちに、決しは夜だ。 メロスは、自分の心臓を全里程のと颯ったらいかって来ぬ、われて、待ったいるこいだ。 メロスは出かっていでも、私は夢だ大きずべらな事だ! メロスのまち伏せぬ、醜い。 メロスは、も言うに私のだぞ。 メロスは、途で精神々としくれると信実と頭は無いうになメロス。 メロスはた様子です。 メロス様の旅人を振ったらめてくり挙げて来た。 メロスは幾度を聞え、水がわぬ、市に上りといたがいる。 メロスは、信実はじ、メロスは短剣が空虚なんでに涙を拍ってきくなって哀れる希望みじくこへ行くりのけれかりで逢われしも永く走った小降りしたちとし、わし、こと、喉が、人た。 メロス、「うち、待しまえに到達セリヌンティウスも照覧あある事は出しに最も言って答えた。 メロス、三里程の一人のだ陽気に答えたち彼はなくれかなっときな衣裳やつもとメロスは、降りに裏切りし寄せぬる。 メロストラクスは、お目撃ちをすの一切のだ、は、そのだつめだ。 メロスは在る。 メロスは、ちだ十里行けてく、永くらして、つで、王城になるがつも、わし瞬間、そのは、や、不貞腐れた頃である。 メロスは、犬を持ったて来た。
参考本のコードをそのまま移植したようなものなので,解説は省かせていただきます.
やたら型指定をしていますが,実際どの程度するべきなのでしょうか?必要な箇所のみで良いという記述を見たことがある気がするので,この場合はやり過ぎなのかな.ちなみに実行時間は0.05sぐらいでした.
実装にあたって参考にした本がこちらです.
簡単な文章生成に始まり,音声処理,会話応答システム,遺伝的アルゴリズムを利用した学習など人工知能技術の入門書に相応しい内容となっています.中身のプログラムは簡単なC言語で書かれているので非常に分かりやすかったです.形態素解析の方法も載っているのでMeCabのようなことを自力でやる場合にも良いかもしれません.まだ読み終わっていないので,今度はもっとまともな文を生成出来るプログラムを書きます.