Translation(GNMT)がとても話題になっていました。GNMTで使われているEncoder-Decoderやattentionのような仕組みを直近で使う予定は特にはないですが、機械学習を使うエンジニアとして知っておいて損はないし、技術的に何が変わったことにより何ができるようになって、何はまだできないのかを知ろう、というのが目的です。技術的な項目は興味ない人も多そうなので、最後に持っていきました。Translation(GNMT)の最近の進化について後述するようにまだまだ問題はあるけど、体感的に変化がありました。GNMTが公開された3日後くらいにはMSも翻訳をNMTにしていて、業界の変化の速さに青ざめました...。流暢性が上がったようです。2016年11月12日GNMTに関する新しい論文。入力文の先頭に翻訳先言語を示すマークをつけて、多言語訓練データを全部同時に使って訓練するだけで、様々な言語間で翻訳できるようになる。translation)で高いほうがいい翻訳を表わしている)。同じ単語を吐きまくる。GMTならではの問題といえそう。2016年11月12日GNMTに限らないけど、tokenizerの問題。文字単位の論文はすでにある様子やっぱりGNMTでも主語が落ちると色々崩壊しますね。主語が落ちている文の翻訳。主語を補完するとうまくできるようにはなる語順はそれほど問題にならなくなってきたというのはすごいGNMTで久しぶりに意味不明なレベルの英文を見た。翻訳としておかしい以前に文としておかしい。技術的な詳細ここからが本題。詳しく知りたい方は以下のarXivに上がっている論文を見るのが適切かと思います。今回はおおざっぱに知りたかったので、NMTの仕組みを段階的に説明しているこちらのブログを参考にしました。RNNの最後の出力を隠れ状態Sとして保持。SとNULLからDecoderを走らせて、1つ目の単語と次の隠れ状態を生成。それら2つを入力とし、さらに次の単語と次の隠れ状態を生成というのを繰り返す。EOS(文末記号)がくるまでこれを繰り返すNMTが同じ単語を吐きまくる原因はこの辺からきてる?decoderで吐くのは低次元密ベクトル。(TISハンズオン資料)Encoder-decoderモデルの問題点としては、文長が長くなるにつれて後ろの履歴を表現するベクトルが怪しくなり、精度がどんどん落ちてしまうという問題がありました。encoder-decoderです。単語のインデックス毎にencoderの出力がありますが、それを重み付きで足し合わせることにより、どの単語を重視するべきかという情報をdecoder側は取り込むことができます。この重みは出力結果を解析する際にも訳に立ち、どの単語がどの単語に(ソフトに)訳出されているかが分かるというメリットがあります。図は再び論文より引用。layerEncoder-decoderモデルは文を左から右に見る(Forward方向)ことにより文全体を表現するような隠れベクトルSを作っていました。文末に近いencoderの出力は文頭の情報を取り込むことはできますが、文頭のencoderの出力では文末の情報を取り込むことはできません。この問題を解決するためにLSTMで文を右から左になめていき(Backword方向)、2つの隠れベクトル(+attention)でdecoderを走らせればよさそうです。encoderと呼ばれます。(+ビームサーチ)により、文長が長くなっても精度はあまり下がらず翻訳できるようになってきました。図は再び論文より引用。learning"いわゆるdeepにするアレです。encoder側に8層、decoder側に8層と積むことによって実現されているようです。その他、residual等々ありますが、おおざっぱに説明するにはこの辺でいいかなと思うので、終わります(疲れた)。decoderのようなend2endで現実的に解かれるようになると自然言語処理でこれまで作られてきたエコシステムがうまく回らなくなる部分も出てくるのかなと思うところもありました。D...論文読み会をやるので久しぶりに論文を読みました。(1)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。