社内の機械学習勉強会で最近話題になった機械学習関連のエントリを取り上げているのですが、ここ一ヶ月ではGoogle Neural Machine Translation(GNMT)がとても話題になっていました。GNMTで使われているEncoder-Decoderやattentionのような仕組みを直近で使う予定は特にはないですが、機械学習を使うエンジニアとして知っておいて損はないし、技術的に何が変わったことにより何ができるようになって、何はまだできないのかを知ろう、というのが目的です。技術的な項目は興味ない人も多そうなので、最後に持っていきました。
Google Neural Machine Translation(GNMT)の最近の進化について
後述するようにまだまだ問題はあるけど、体感的に変化がありました。GNMTが公開された3日後くらいにはMSも翻訳をNMTにしていて、業界の変化の速さに青ざめました...。特に流暢性が上がったようです。
- Google Japan Blog: Google 翻訳が進化しました。
- Google AI Blog: Zero-Shot Translation with Google’s Multilingual Neural Machine Translation System
- Microsoft Translator launching Neural Network based translations for all its speech languages – Translator
- 機械翻訳と意味 - アスペ日記
- ニューラル機械翻訳と記号幻想の死 - murawaki の雑記 - rekkenグループ
できるようになったこと
いやこれどう見てもニューラル翻訳でしょ… pic.twitter.com/l5jMQ0WAgn
— Yusuke Oda (@odashi_t) 2016年11月12日
GNMTに関する新しい論文。入力文の先頭に翻訳先言語を示すマークをつけて、多言語訓練データを全部同時に使って訓練するだけで、様々な言語間で翻訳できるようになる。複数言語が混じった文でも翻訳できるし、複数言語が混じった出力も可能 https://t.co/wLxVJqlmIX
— Toshiaki Nakazawa (@Tzawa) 2016年11月15日
定量的な評価
Googleの論文から引用しますが、これまでの機械翻訳のシステム(Phrase-Based MT)と人手評価で比較すると、かなり改善しているのが分かります(0(complete nonsense)から6(perfect translation)で高いほうがいい翻訳を表わしている)。日本語⇔英語だとChinese⇔Englishと近い進化なのかな...?
I tried translating WAT's ASPEC-JE task with GNMT, and BLEU was 16.91 (old Google translated) -> 21.63 (GNMT) (translated by GNMT)
— Toshiaki Nakazawa (@Tzawa) 2016年11月14日
GNMTのBLEU
— Toshiaki Nakazawa (@Tzawa) 2016年11月16日
ASPEC JE 16.91→22.04 EJ 18.28→26.19 JC 11.16→15.94 CJ 11.56→18.75
JPC JE 35.77→49.35 EJ 36.88→50.60 JC 23.02→33.04 CJ 26.99→42.66
- 第3回アジア翻訳ワークショップの人手評価結果の分析
- Google翻訳やntmについてかなり言及があるスライド
- WAT Evaluation
- コーパスへのチューニングなしで16位(組織的には3組織くらい)はすごい
- BLEUなどの評価の話についてはこの辺を読んでください
まだまだ難しいこと
言語選択ミスったら吹いたw pic.twitter.com/24OT3gTRI9
— kakiraちゃん@飯テロリスト (@kakira9618) 2016年11月13日
- 同じ単語を吐きまくる。GMTならではの問題といえそう。なぜこういうことが起きるかは技術的詳細のところを見てください
AIが割合変えてきた pic.twitter.com/B4DT6gN0Hp
— 小山浩之™ (@0yama) 2016年11月12日
- 数字や固有名詞をアグレッシブに変えてくる
— ビーム | Seiya Tokui (@beam2d) 2016年11月12日
- GNMTに限らないけど、tokenizerの問題。形態素解析まではまとめてやっていない様子
- 文字単位の論文はすでにある様子
やっぱりGNMTでも主語が落ちると色々崩壊しますね。 pic.twitter.com/YMSjZ05Lj6
— Yusuke Oda (@odashi_t) 2016年11月20日
- 主語が落ちている文の翻訳。主語を補完するとうまくできるようにはなる
- 語順はそれほど問題にならなくなってきたというのはすごい
GNMTで久しぶりに意味不明なレベルの英文を見た。翻訳としておかしい以前に文としておかしい。 pic.twitter.com/nQe1K26nlO
— Yusuke Oda (@odashi_t) 2016年11月20日
なるほど pic.twitter.com/4MBaEFpPTK
— Yusuke Oda (@odashi_t) 2016年11月20日
技術的な詳細
ここからが本題。より詳しく知りたい方は以下のarXivに上がっている論文を見るのが適切かと思います。今回はおおざっぱに知りたかったので、NMTの仕組みを段階的に説明しているこちらのブログを参考にしました。
- [1611.04558] Google's Multilingual Neural Machine Translation System: Enabling Zero-Shot Translation
- [1609.08144] Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation
- G社のNMT論文を読んでみた
- 京大中澤さんの解説
Encoder-decoder
- RNN: 現在の入力とこれまでの履歴から次の出力を決めるモデル
- 単語はword2vecのような技術を使って低次元の密ベクトルに埋め込む
- LSTM: RNNは学習時に勾配消失問題があったが、Forget Gateなど導入することによりこれを回避
- Encoder-decoderモデル: RNNの最後の出力を隠れ状態Sとして保持。SとNULLからDecoderを走らせて、1つ目の単語と次の隠れ状態を生成。それら2つを入力とし、さらに次の単語と次の隠れ状態を生成というのを繰り返す。EOS(文末記号)がくるまでこれを繰り返す
- NMTが同じ単語を吐きまくる原因はこの辺からきてる?
- decoderで吐くのは低次元密ベクトル。低頻度語や未知語はこのベクトルがきちんと学習されていないため、固有名詞が書き変わるような問題が起こる
- Encoder-decoder 翻訳 (TISハンズオン資料)
Encoder-decoderモデルの問題点としては、文長が長くなるにつれて後ろの履歴を表現するベクトルが怪しくなり、精度がどんどん落ちてしまうという問題がありました。
Attention based encoder-decoder
文長が長くなったときに、次に訳するのは元文のどこに注目(attention)すればいいかを陽に取り込んだのが、Attention based encoder-decoderです。図は論文より引用。
単語のインデックス毎にencoderの出力がありますが、それを重み付きで足し合わせることにより、どの単語を重視するべきかという情報をdecoder側は取り込むことができます。この重みは出力結果を解析する際にも訳に立ち、どの単語がどの単語に(ソフトに)訳出されているかが分かるというメリットがあります。図は再び論文より引用。
Bi-directional encoder layer
Encoder-decoderモデルは文を左から右に見る(Forward方向)ことにより文全体を表現するような隠れベクトルSを作っていました。文末に近いencoderの出力は文頭の情報を取り込むことはできますが、文頭のencoderの出力では文末の情報を取り込むことはできません。この問題を解決するためにLSTMで文を右から左になめていき(Backword方向)、2つの隠れベクトル(+attention)でdecoderを走らせればよさそうです。この方法は両方向からやるので、Bi-directional encoderと呼ばれます。attention + Bi-directional (+ビームサーチ)により、文長が長くなっても精度はあまり下がらず翻訳できるようになってきました。図は再び論文より引用。
"The deep is for deep learning"
いわゆるdeepにするアレです。encoder側に8層、decoder側に8層と積むことによって実現されているようです。その他、residual等々ありますが、おおざっぱに説明するにはこの辺でいいかなと思うので、終わります(疲れた)。
感想
これまでの自然言語処理の基礎技術(係り受け解析や固有表現抽出、照応解析、言語モデルなど)は翻訳に代表される応用技術で役に立つ!ということで頑張ってきた部分が大きかったと思いますが(私も談話構造解析を少しやっていたので...)、応用側がencoder decoderのようなend2endで現実的に解かれるようになると自然言語処理でこれまで作られてきたエコシステムがうまく回らなくなる部分も出てくるのかなと思うところもありました。
- 作者: 奥野陽,グラム・ニュービッグ,佐藤敏紀,萩原正人,前澤敏之,小町守,イノウ
- 出版社/メーカー: 翔泳社
- 発売日: 2015/05/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る