Posted at

Chainerでシンプルな熊本弁翻訳

More than 3 years have passed since last update.


背景

ある日,私は機械翻訳に興味を持った.

(英語に苦しむ日本の研究者の声を聞いたからかもしれないし,勉強会の準備に追われていたからかもしれない.)

しかし私は門外漢なので,encoder-decoderモデルの "あの" 図を読むことができなかった.

先日気持ちを掴むことができたので,自分なりに噛み砕いたものを記録・共有するためにこの記事を書いた.

先人の詳細な記事

http://qiita.com/odashi_t/items/a1be7c4964fbea6a116e


RNNの図を翻訳

翻訳までの流れを別視点から描いた.

encoder-decoderモデルによって「彼 は 走る」を「He runs」と翻訳するまでの流れは,以下のようになっている.

SS 25.png

SS 26.png

encode側の図において,日本語の登場順序がodashi_tさんの図とは逆になっている.

逆順に入力すると実験的に良い結果が得られているらしいので,実験を行う際はodashi_tさんの例に従うと良さそうだ.

理解できたような気がしたところで,Chainerを用いて実装した.

- TensorFlowのサンプルプログラムには,機械翻訳が含まれているらしい.

- ChainerにもシンプルなSeq2Seqのサンプルがあると良い?


実装

https://github.com/g329/seq2seq/blob/master/seq2seq.py

なるべくencoder-decoderの気持ちが伝わるように書いたつもりだ.

先人の記事を読みながらソースコードを眺めて欲しい.

python seq2seq.py

と実行し,しばらくすると以下のような出力が得られるはずである.

teacher :  黄昏に天使の声響く時,聖なる泉の前にて待つ

-> 5時に 噴水の前で 待ってます

熊本弁から日本語への翻訳の他,英語から日本語など様々応用が効く.

学習の様子を観察していると,あっという間に時間が過ぎてしまうので注意して欲しい.

データが沢山あれば "A Neural Conversational Model"に載っているようなこともできるらしい.夢が広がる.


その他

Seq2Seqは,少しアレンジするだけで様々な面白い動きを見せてくれる.

そのあたりに関しては,LTの準備が終わったあたりにまた書くつもりだ.