あたまがうにになる

2004年09月01日

人工無能を作ろう〜マルコフ連鎖(2接頭語と1接尾語の場合)

一般的な2語の接頭語と1語の接尾語のマルコフ連鎖の場合。

「酢鶏は好きですが、鶏は嫌いかも。」を形態素解析します。
すると「酢/鶏/は/好き/です/が/、/鶏/は/嫌い/かも/。/EOS」と分解されます。
(EOS は End Of Sentence の頭文字で文の終わりと言う意味)
分解された文章から、マルコフ連鎖の為に参考テーブルを作ります。

 
接頭語前/接頭語後接尾語
酢/鶏
鶏/は好き
は/好きです
好き/です
です/が
が/、
、/鶏
鶏/は嫌い
は/嫌いかも
嫌い/かも
かも/。(EOS)文章の終わり
すると、上記のようなテーブルが出来あがります。

マルコフ連鎖のアルゴリズムに当てはめる為に、とりあえず文章の出だしの「酢/鶏」を接頭語として選択します。

で、ここからがマルコフ連鎖のメインの部分です。
作成した参考テーブルから、接頭語が「酢/鶏」に当てはまるものを探し、そこから接尾語を選択します。
上記テーブルには「酢/鶏→は」しかありませんので、接尾語は「は」になります。
これで「酢鶏は」と言う文章がとりあえず出来ます。

同じように、前回の接頭語後ろの「鶏」と接尾語の「は」を組み合わせたもの「鶏/は」を新しい接頭語とし、参考テーブルから次に来る接尾語を探します。
すると「鶏/は→好き」と「鶏/は→嫌い」と言う二つの結果が見つかります。
何らかの方法(ランダムなど)でどちらかを選択します。
今回は「鶏/は→嫌い」を選択します。
すると「酢鶏は嫌い」と言う文章が出来ます。

同じように「(EOS)文章の終わり」が出るまで続けて行くと「は/嫌い→かも」「嫌い/かも→。」「かも/。→EOS」と続き
最終的に「酢鶏は嫌いかも。」と言った文章が完成します。
これで、マルコフ連鎖による文章作成の一連の流れが完了です。


ちなみに途中の選択で、もしも「鶏/は→好き」を選んでいると
「は/好き→です」「好き/です→が」「です/が→、」「が/、→鶏」「、/鶏→は」と続き
「酢鶏は好きですが、鶏は」まで生成した所で、又「鶏/は→好き」「鶏/は→嫌い」と言う選択肢にまた辿りつきます。
この参考テーブルを使うと、単純な選択をするマルコフ連鎖の場合、結果的に「鶏/は→嫌い」を選択しない限りループは終わりません。
「酢鶏は好きですが、鶏は好きですが、鶏は好きですが、鶏は好きですが、鶏は好きですが、鶏は嫌いかも。 」といった暗号みたいな文章になる場合もあります。

有限ではありますが、参考テーブルによっては無限に近いループになる事もあるので、プログラムを組む場合はループ回数の制御をしたほうが良いですね。

blank_space
投稿者 Lanタソ : 2004年09月01日 00:42 | トラックバック
 
blank_space
コメントする

名前を保存しますか?






blank_space
パーツ
blank_space

Adds

blank_space

カテゴリー
blank_space

Link
blank_space