マルコフ連鎖-1
マルコフ連鎖による文章生成についてです。
まず、みなさんはマルコフ連鎖というものをご存じですか?
マルコフ連鎖とは簡単に言うと、前の状態を考慮せずに、現在の状態のみで次の状態を決めていく確率のことです。
これを日本語の文章に対して使うことができます。
日本語は単語の組み合わせでできていますが、その単語にも相性みたいなものがあります。
例えば、”宇宙”という単語に対して、”不思議”や”広い”などの単語は続きやすいですが、”おいしい”などの単語は続きにくいでしょう。
実際の例について”リンゴは赤い。リンゴはおいしい。”、という2つの文で考えてみます。
それぞれを単語に分けてみると、”リンゴ/は/赤い。リンゴ/は/おいしい。”となります。
“リンゴ”という単語のあとには”は”という単語が100%きており、”は”という単語のあとには”赤い”、”おいしい”といった単語が50%ずつの確率で来ていますね。
この確率を利用して、データとなる文章を設定してあげれば、そのデータっぽい文章を作ることができます。
実際に作る時には、単語いくつかを1まとまりとしてこのマルコフ連鎖を行っていくと、より意味の通る文章は出来やすいです。
1まとまりの中の単語数を多くしすぎてしまうと、データとなる文章と似てきて面白みがなくなってしまう場合もありますが。
実際に芥川龍之介の羅生門でマルコフ連鎖を行ってみました。
単語3つを1まとまりとしています。
昼間見ると、門の下か、たくさん集って来た。
洛中がその始末である。
じゃが、ここにいる者は、味がよいと云う事は、大体こんな意味の事である。
せねば、今でも売りに往んだわ。
すると、幸い門の下を覗きこんだ。
申の刻下りからふり出した雨は、恐怖が少しずつ消えて行った。
これとてもやはりせねば、饑死をするか盗人になるほど、土を捏ねて造った人形のように身をちぢめて、それから、何をおいても差当り明日の暮しをどうにかしようとして――云わばどうにもならない事を忘れていたのを、その長い髪の毛を抜くかわからなかった。
何故かと云う事実さえ疑われるほど、見開いて、その気色が、無造作に棄てて行くと云う事を肯定しながら、知れるのは、その裸の死骸の中へはいって来た。
老婆が死骸につまずきながら、まだ燃えている。
どうにも書いた。
老婆が死人の髪の毛を抜くと云う事は、次の瞬間には誰か火をそこここと動かしているのである。
旧記によると、この女の死骸が、冷やかな侮蔑と一しょに、揺れながら映ったので、すぐにそれと知れたのも、結局すれば――下人のSentimentalismeに影響した火の光の及ぶ範囲が、適当である。
その髪の毛が、ほとんど、考える事さえ出来た、背の低い、痩せた、肉食鳥のように、やっとこの局所へ逢着した事が悪いとは思うていたと云う事実さえ疑われるほど、土を捏ねて造った人形のように気を つけながら、知れるのは、その男のほかにもならない事を、何をおいても、結局「すれば」のかたをつけるために、揺れながら映ったので、数は幾つともわからない。
わしは、手段を選んでいる遑はない。
わしは、老婆を見下しながら、聞いている。
pythonと、文章を単語に分割するのにMecabを(Mecabをpythonで使うためのmecab-pythonも)使いました。
要望があれば作り方についても公開します。あればですが。
お問い合わせ(googleフォームリンク)
間違えの指摘等はこちらにお願いします 気軽に送信できます