マルコフ連鎖
広義ではn+1の事象はnしか関わりがなく、n-1,n-2は関係がない的な意味?
人工知能に関するとこだとn-gram法だったり形態素解析などで分割された文章を繋ぎ合わせ文章を生成する方法として用いられてる。 例えば、「私はトマトが好きです。」と「私は休みが欲しい。」という2つの文を2-gramで分割します。
"(文頭)私""私は""はト""トマ""マト""トが""が好""好き""きで""です""す。""。(文末)"
と、
"(文頭)私""私は""は休""休み""みが""が欲""欲し""しい""い。""。(文末)"
という様に分割でき、これを繋げようとすると、
"(文頭)私"ー"私は"ー
と繋げ、この次に来るのは"は"から始まる単語で、この場合、
"はト"と "は休"があるので、50-50の確率でどちらかに繋げる。
今回は"はト"に繋がった事にすると、
"(文頭)私"ー"私は"ー"はト"ー"トマ"ー"マト"ー"トが"ー
となり、ここでまた"が好"と"が欲"が存在し、どちらかに派生する。
今回は"が欲"に派生したとすると、
"(文頭)私"ー"私は"ー"はト"ー"トマ"ー"マト"ー"トが"ー"が欲"ー"欲し"ー"しい"ー"い。"ー"。(文末)"
この様な文章が出来上がり、これを結合すると、
「私はトマトが欲しいです。」という文章ができあがる。
これが所謂、マルコフ連鎖による文章生成らしい。
参考にしたブログによると最近はDNN(RNNやLSTMなど)を用いた文章生成が盛んらしいぞ!
追記
じゃあどうやってマルコフ連鎖を作るの?って話
こういう辞書を作り、
code:js
Object['_BOS_']から初めて、配列の中身をランダムに取得し、それをkeyにして'_EOS_'に辿り着くまで繰り返す
これでランダムな文章が作れるはず
参考