とりあえず文章を分解する形態素解析が出来るようになったはずなので、次は文章を組み立てる方法です。
ここでは人工無能に使われているもっとも一般的な方法の、マルコフ連鎖を使ってみましょう。
マルコフ連鎖自体は別に文章を作成する為の考え方ではなく、いわゆる数学の確率論です。
マルコフ連鎖を超簡単に説明すると「一番近い過去を基準に、次に来る物を予測する」と言った考え方です。
では、マルコフ連鎖の仕組みを文章生成に当てはめてみると
「文章を幾つかの接頭語と幾つかの接尾語に分解し、現在の接頭語から次に続く接尾語を選択する、そしてそれを繰り返す」といった感じです。
文章だけではややこしいので、具体的な例をあげて説明します。
例えば、「酢鶏は好きですが、鶏は嫌いかも。」を形態素解析します。
すると「酢/鶏/は/好き/です/が/、/鶏/は/嫌い/かも/。/EOS」と分解されます。
(EOS は End Of Sentence の頭文字で文の終わりと言う意味)
分解された文章から、マルコフ連鎖の為に参考テーブルを作ります。
(ここでは解かりやすいように、1語の接頭語と1語の接尾語のテーブルを作成します)
| 接頭語 | → | 接尾語 |
| 酢 | → | 鶏 |
| 鶏 | → | は |
| は | → | 好き |
| 好き | → | です |
| です | → | が |
| が | → | 、 |
| 、 | → | 鶏 |
| 鶏 | → | は |
| は | → | 嫌い |
| 嫌い | → | かも |
| かも | → | 。 |
| 。 | → | (EOS)文章の終わり |
マルコフ連鎖のアルゴリズムに当てはめる為に、とりあえず文章の出だしの「酢」を接頭語として選択します。
で、ここからがマルコフ連鎖のメインの部分です。
作成した参考テーブルから、接頭語が「酢」に当てはまるものを探し、そこから接尾語を選択します。
上記テーブルには「酢→鶏」しかありませんので、接尾語は「鶏」になります。
これで「酢鶏」と言う文章がとりあえず出来ます。
同じように、前回の接尾語の「鶏」を新しい接頭語とし、参考テーブルから次に来る接尾語を探します。
すると「鶏→は」と「鶏→は」と言う同じ内容の二つの結果が見つかります。
何らかの方法(ランダムなど)でどちらかを選択します。
今回は全く同じなのでどちらでも一緒です「鶏→は」になります。
すると「酢鶏は」と言う文章が出来ます。
繰り返すと「は→嫌い」「は→好き」の2つの結果が見つかるので、どちらかを選択します。
今回は「は→嫌い」を選択します。
ここまで続けると「酢鶏は嫌い」と言う文章ができます。
同じように「(EOS)文章の終わり」が出るまで続けて行くと「は→嫌い」「嫌い→かも」「かも→。」「。→EOS」と続き
最終的に「酢鶏は嫌いかも。」と言った文章が完成します。
これで、マルコフ連鎖による文章作成の一連の流れが完了です。
今回は「1語の接頭語+1語の接尾語」で解説しましたが、
「2語の接頭語+1語の接尾語」「1語の接頭語+2語の接尾語」「2語の接頭語+2語の接尾語」といった具合に接頭語や接尾語で扱う数を増やすと、
それに比例してより自然な流れの文章が生成されるようになります。
但し、接頭語や接尾語を増やしていくと、分解する前の文章とあまり変わり栄えしない文章が出来上がってしまうので、単純に増やせばよいと言ったものでもありません。
これで、マルコフ連鎖で文章を作る手法はなんとなく解かったのでは無いかと思います。
と言うか、解ってなくても話は進めますが・・・。