AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

IBM Model 1 ' word based model'

 統計的機械翻訳のはじめの1歩のIBM model1を試してみました。
 本当は論文読んで自分で実装できれば良かったんですが、数式が難しく、ましてやコードにするのは今のところ無理ですんで、検索しまくってサンプルを見つけました

y-uti.hatenablog.jp

 上記のpythonのサンプルを動かしてみました。
 これは、
Book: Statistical Machine Translation
 で公開されているword based modelのスライドのP29にある擬似コードpythonにしたものです。

 英語から日本語への翻訳を、条件付き確率で表現して、通信路のノイズによって英語が日本語に変化した時に、その変化モデルを学習によって求めるみたいな感じです。

 対訳コーパスはtanakaコーパスというのを利用しました。
Tanaka Corpus - EDRDG Wiki

 以下の様な和文と英訳の対訳が5万文あります。

ムー リエル は 2 0 歳 に なり まし た 。 
Muiriel is 20 now.
すぐ に 戻り ます 。 
I will be back soon.
すぐ に 諦め て 昼寝 を する かも 知れ ない 。 
I may give up soon and just nap instead.
愛してる 。 
I love you.
ログアウト する ん じゃ なかった よ 。 
I shouldn't have logged off.

 上記ブログのサンプルコードに、tanakaコーパスの前半1万文を入れて学習した結果
 確率の上位20個の単語が以下のようにもとまっています。
 これは、英単語辞書なしに、対訳だけを教師に学習した結果で、単語同士の対応を学習するのがIBM Model1ということで。

 例えばAppleの和訳を知りたいなら、Appleを含む文章をすべて抽出して、和文に出てくる単語の出現回数を調べれば、リンゴが多くなるでしょうから、それで対応訳はわかるはず。
 ただ、語順とか、単語も複数の訳があったりするので、そのへんがまだよくわかってません。
 とりあえずperlに移植したいけど、python全然わからん。defaultdictってなんやねん

パン bread 0.957545370342
明日 tomorrow. 0.940249623559
も also 0.935351098629
予算 budget 0.922059857919
列車 train 0.904930265781
妹 sister 0.89621252802
娘 daughter 0.895353821025
例えば example, 0.894286875413
木 tree 0.890396814541
本 books 0.878504129333
嵐 storm 0.869120722565
まで until 0.868854744215
3 three 0.863493362033
両親 parents 0.855291321635
敵 enemy 0.849821453357
名前 names 0.846099829901
野球 baseball 0.845122232135
! up! 0.843278548489
今日 today 0.842393775161
壁 wall 0.840310418401