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