3階のマルコフ連鎖で文章を生成してみた(1)
それっぽい日本語を出すプログラムを作ろうとしています。botみたいな。
この手のプログラムにしばしば使われるマルコフ連鎖。
マルコフ連鎖については、id:antipopやProject STAPAINがわかりやすいです。
一番難しくて挫折しかけたのは、検索するとトップに来るこれですね^^;
上記以上にわかりやすい説明を書ける自信が無いので、やったことをつらつらと書く。
DB
こんなテーブルで大丈夫か?
wordが単語のテーブルで、chainが連鎖のテーブル。
学習
夏目漱石先生のBL小説「こころ」を学習させようと思っていたのですが、想像以上に時間が掛かったので、以下を学習。
テラカオスw
結果
- ハースーハー!スーハー!あぁああああああああああ!!!はぁあああああああ…小説もアニメ2期決まってこったいだけちゃうんかと思ったら、150円だよ、ボケが。これが、大恥かくでしょうう!ルイズたんかわいかった時の俺から店員に来て欲しい・・
- からその席空けろと次からその席空けろと信号待ちで並ばれたよケティ!!!あ、コミックのルイズぅぅぅうがww
- バーベキューとかで迎えにこられた時なんか垂れ幕下がっててったら・・・もうね、近所のかとかもアニメもいるし。一家4人で吉野家か。これ。これ。ボケがいる!あぁぁぁあ、コミック2巻のルイズへ届け!
- だけなんっ!髪髪髪モフモフ!カリカリモフモフ…きゅいやっほぉおおおおお!モフモフしたいお!!
- でノコノコついてっ!!!僕を見たらなんかやめ…きゅんきしょーな。一家4人で来るわけじゃない。
- ああああああああ…世の中まだまだ捨てた時の想いよケティ!!
- ゅい!!コミックなんて現実じゃないんです!
- !!う!!!
- だと信号待ちで、よく見たら、隣の奴といつ喧嘩が、大恥かくでしょう!!ちきゅいやっほぉおおお!!僕に話しかけてるぞー、だ。そん代わり肉が少なめ。これ。問い詰めたいのか書いて良かったいだけちゃうんかと。小150円やるからその席空けろと。もう見てらんないやっほぉおおおおおめでてもおかしくない、だ。おめでてー、とかで迎えにこられた時なんか垂れ幕下がっててーなんです!
テラカオスw
まだまだお馬鹿だな。
ようやくbot界のスタートラインに立ったってとこですかね…。
その他、感想
言語はJava、DBはMySQL、ORマッパにActiveObjects、形態素解析にSenを使いました。
ついでにサクッ!と使えそうなDBを覚えてみよう! と思ってHSQLDB(とH2)を試してみたんだけど、MySQL育ちの僕には、SQLの構文の違いがきつかった…。
ORマッパのHibernateもCoC(テーブル定義に従ってコードを書くことでテーブル設定のファイルが要らない)らしいので、使ってみたい。
SQLメモ
select word1.word, word2.word, word3.word from chain
inner join word word1 on word1.word_id = chain.prefix01
inner join word word2 on word2.word_id = chain.prefix02
inner join word word3 on word3.word_id = chain.suffix
limit 5;