したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

NN系機械翻訳の調査

1karino2:2017/02/26(日) 12:07:16
Google Translateの論文を眺めていたら意外と読めそうだったので、関連する文献から真面目に見てみよう、と思い立つ。
少し調べてみると日本語のブログも結構あって、Google Translateに限らずNN機械翻訳全般で必要な事を学んでいく方が良さそう、と思い、そういう趣旨のスレを建てる事に。

2karino2:2017/02/26(日) 12:13:42
最初にして最終目標はこれ。

https://arxiv.org/abs/1609.08144
Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation


ざっと眺めた所、


1. Neural Machine Translationというのが基礎
2. attentionという改善を組み込むのが大きなステップだった
3. 使ってる要素技術としてはLSTMとTensorflow


という感じ。1だけ真面目に見ればどうにかなりそうかな、と思った。
でもその前に関連しそうな日本語ブログとかも眺めてみる。

3karino2:2017/02/26(日) 12:17:08
twitterで流れてきたのがこちら

http://deeplearning.hatenablog.com/entry/neural_machine_translation_theory
【前編】深層学習による自然言語処理 - ニューラル機械翻訳への理論 -

中編はChainer実装で後編が結果の分析的な内容っぽい。前編だけで良さそう。

で、なんとなく眺めているとRNNくらいまではまぁいいか、という気になる。
HMMとかこの前までPGMで散々やってた身としてはだいたい想像はつくので。
BPTTという計算手法がありこれは重要そうだけど、まぁなんかのアルゴリズムで計算出来るって事か、で先に進む。

で、LSTMあたりで良く分からなくなったので、リンクをたどる事にする。

4karino2:2017/02/26(日) 12:36:12
RNNの言語モデルのブログ記事へのリンクがあったので見てみる。

http://kiyukuta.github.io/2013/12/09/mlac2013_day9_recurrent_neural_network_language_model.html
これもある意味Deep Learning,Recurrent Neural Network Language Modelの話 [MLAC2013_9日目]

N-gramとかはトピックモデルでやったので前置き3はだいたい分かる。
前置き2のWord Embeddingsがもうちょっと良く知っておいた方が良さそうだな、と思う所。
word2vecとかの話でも似たようなの聞いたが、単純な単語をベクトル化するのではなく、似た物をそばに置くように学習する、という話。
間に行列を挟んでその行列をうまい事学習させると、ある程度単語が固まったような辞書が出来るのだろう。イメージは湧く。
これを次に調べよう、と心のスタックに積んで先に進む。

肝心のRNNLMの所が式がTeXの生テキストになってて心の中でコンパイルするのが辛い。
ただ上の図と式だけでだいたい意味は分かるので、まぁいいか。

さて、これは何か、というと、2-gramっぽいが、一つ前の単語の代わりに一つ前のhidden unitを使う訳だな。
こうする事で、これまでの記憶がなんとなく入る、という事になる。
このhidden unitが更新されていく事でなんとなく文脈的な系列が出来るのだと思うが、、、そんなうまく行くの?というのが率直な感想。
このhidden unitがどういう感じか、まったく想像出来ないな。

Analysisの先の文献にあたるのが良いかもな。
ただ、このブログは分かりやすいね。だいたい何をしているかは理解。

5karino2:2017/02/26(日) 12:47:04
Word Embeddingsを学ぶのは何を読むのか、良く分からない。
とりあえず先のブログでWord Embeddingsを学習する方法として参照されていた論文を眺めてみる。

http://machinelearning.wustl.edu/mlpapers/paper_files/BengioDVJ03.pdf
A Neural Probabilistic Language Model

6karino2:2017/02/26(日) 20:31:55
2のA Neural Modelを見てるが開幕から良く分からない。
nがunboundな気がするが、このnとはなんぞや?
右辺は厳密な言語モデルに見えるが、なんでそれがnグラム的な物で表現出来るのか。

7karino2:2017/02/27(月) 00:10:23
2を一通り理解。

式(1)は理解。本当に単なる行列の演算だね。
で、普通にここから尤度を微分して最尤法でパラメータを解く。
うへぇ、ちょー簡単。

で、単純に最適化の結果として行列Cが得られる。
これでdistributed featureとやらがいい感じになる、というのは驚きだなぁ。

3から先はまぁいいでしょう、という事でResultとFuture workだけ眺めて終わりとする。

この論文は素晴らしいね。
ニューラルネットで翻訳を扱う時のスタート地点だろう。

8karino2:2017/02/27(月) 00:21:55
次はLSTMについて軽く見ておくか。
以前軽く勉強した事があるが忘れたので、もう一回見直すくらいで。
まずこのブログを読んでみる。

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

9karino2:2017/02/27(月) 01:27:05
ざっと読んだ。学習の事とか無いが、だいたい想像はつくしいいか。
2TBNを展開してDBNを解釈する練習を結構やった後なので、以前読んだ時よりは理解度が上がっているなぁ。

この辺の実際の計算は今はそんなに興味が無いので、必要になったら真面目に追う事にして今は先に進む。

10karino2:2017/02/27(月) 01:36:16
次は41と2のどっちを読むか悩む所だが、とりあえず2014年だしGoogleから出てる方読むか、という事で41を選ぶ。

https://arxiv.org/abs/1409.3215
Sequence to Sequence Learning with Neural Networks

11karino2:2017/02/27(月) 02:23:45
beam searchって何?と思ってWikipedia見ている。

https://en.wikipedia.org/wiki/Beam_search

なるほど、次の単語候補を少数だけ持って次に進むのね。
当然これがMAPアサインメントになる保証は無い訳だが。

12karino2:2017/02/27(月) 03:58:09
epochってなんぞや?と思ってググる。

https://deeplearning4j.org/glossary

ようするにトレーニングセットを一回全部回すと1epochという事ね。

13karino2:2017/02/27(月) 04:08:17
うーむ、読んでみたが、実際のモデルがこれじゃ分からんな。
もう一つの方見てみるか。

https://arxiv.org/abs/1409.0473
Neural Machine Translation by Jointly Learning to Align and Translate

14karino2:2017/02/27(月) 04:33:54
うーむ、これは >>10 のseq2seqの改善案だなぁ。
seq2seqの具体的なアーキテクチャをもっと知りたかったのだが。

とりあえずどこを改善したのか眺めておくか…

15karino2:2017/02/27(月) 14:34:41
やっぱり基礎の部分をちゃんと理解するのが先だな、という事で、seq2seqの前の奴を読んでみる。

https://arxiv.org/abs/1406.1078
Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation

この論文はseq2seqでは無いのだが、基本的なアイデアはほとんど詰まっているので、とても良い。
hidden unitを更新していって、最後にEOSが来た時のhidden unitがcになって、ここから今度はデコードする、というのが良く分かる。
このcで文が生成出来る、というのは信じがたいが、>>5 の続きと考えると自然なアイデアではある。

この論文とseq2seqの内容を合わせると、自分で実装出来そうな程度は理解出来たので先に進むか。

16karino2:2017/02/27(月) 23:02:55
という訳で>>13 に戻るぞ(゚Д゚)ゴルァ!

17karino2:2017/02/28(火) 20:37:32
3を読んだ。式を見た時は何を言っているんだ?と思ったが、その後に説明があって、これが分かりやすい。

まずh_iは各単語を読んで行く時のhidden stateだ。
学習は知らないが、生成モデルとして同じ文が出るようにするのでも十分だし対訳を考慮すればもっと良さそう。

で、h_iとs_jの間のalignmentをニューラルネットで学習する。
encoderのhidden unitとdecoderのhidden unitの対応付けの強さみたいなのを学ぶニューラルネットだ。

で、あとはこの値をコンテキストとしてdecoderがデコードする。
これはようするにhidden unitを文全体じゃなくてその単語周辺ごとに用意して、必要に応じたhidden unitを選択して使う訳だ。
なるほど〜。これは凄い!いけそう!

18karino2:2017/02/28(火) 20:49:26
という訳で>>13 が一番決定的だったものっぽい。
これが噂のattentionか。凄い。

19karino2:2017/02/28(火) 21:38:13
うーむ、トレーニングの所を理解しようと思ったが、コスト関数の具体的な形が書いていないなぁ。
word embeddingsを一緒に計算するか前もって別に計算するか、とかが知りたかったのだが。
まぁこの辺は本番のオプティマイズという事でいいか。

20karino2:2017/02/28(火) 21:56:41
そろそろTensowflowとは何かを学んでおくか、という事で公式のGetting started読み始め。

https://www.tensorflow.org/get_started/get_started

別に使う気は無くてattentionモデルがどの位分散しそうかが理解出来るようになるのが目的なので、計算モデルのあたりに集中して調べたい。

21karino2:2017/02/28(火) 22:46:03
軽く眺めたらだいたい分かったからもういいや、という気持ちになった。
という事でついに最初の論文、 >>2 に戻る事にする。

22karino2:2017/02/28(火) 23:28:23
4の冒頭くらいまで読んでみた。さすがに大分理解度は増している。
3のstacked layerの解説の所で[31]は読んだ方が良さそう。
3.1の最後の方でresidualなコネクションがレイヤー数増やすのに有効という話が[45]であるらしい。
これもDeep Learningとか勉強するなら読む価値はある気がする。

4のWordpiece Modelは結構大切そうなので[35]を読むのが良さそう。[38]でそのNMTへの応用の話があるらしいのでこちらも見ても良いかも。
先に進む前に[35]を読むかな。

23karino2:2017/03/01(水) 19:32:32


うーむ、[35]の論文読んでたが、全然分からん。
word inventoryを作ってる所の操作あたりから何をやってるのかいまいちしっかり書いていない気がする。

あとから説明が出てくるのかなぁ、と少し読み進めたがそのまま先に進んでしまっているし。
似ているとの記述がある[38]の方読むかなぁ。

[38]
https://arxiv.org/abs/1508.07909
Neural Machine Translation of Rare Words with Subword Units

24karino2:2017/03/02(木) 01:48:24
いまいちBPEのアルゴリズムを正確に理解した、とは言い切れないが、だいぶ[35]よりは分かった。
unknownな単語は何らかの方法でsub wordに分割して翻訳する訳だ。
どう分割するかはいろいろあるが、ようするに語源とかを元に意味を類推するのに近いのだろう。

sub wordをトレーニング時に作るのかとかはいまいち良く分からなかったが、その辺は最終的なシステムがどうなっているのかを見る時に調べられるからいいか。

25karino2:2017/03/02(木) 02:02:18
>>2 の論文に戻って5のTraining Criteriaまで読んだ所で、objective functionが単なる尤度では無いという話が。
良く分からないが[34]に書いてあるらしい。読むか。

[34] https://arxiv.org/abs/1511.06732
Sequence Level Training with Recurrent Neural Networks

26karino2:2017/03/03(金) 01:41:25
3.2.1くらいから全然分からないなぁ。
これは強化学習を別途学んでおく必要がありそう。

ただ、単語一つを生成してトレーニングするのではなく文を生成させてBLEUでロス関数を作らないとまずい、という主張は良く分かる。
ちょうど以前似たようなトレーニングと実際の問題設定の違いでリコメンドがうまく行かない、という現象に実務でぶちあたった事があるので。

27karino2:2017/03/03(金) 01:44:39
元のGoogleTranslateに戻ると、(8)は理解出来るようになっていた。
rはBLEUとかのスコアで求める報酬だね。
GoogleTranslateではGLUEという変形した物を使っているとか。
まぁそこは重要では無かろう。

と言う訳で5は理解出来るようになっていた。
これで十分か。6に進もう。

28karino2:2017/03/03(金) 02:16:31
6、LSTMのc の精度を絞る!
これは細かいチューニングだなぁ。
いかにもプロダクションらしい良い話だね。

7章の枝狩りとかも面白いね。全部理解出来た訳でも無いが、cpで翻訳漏れをなくすのと、尤度が長いセンテンスほど低くなるのでなんかノーマライズしたい、というのは理解出来るから、まぁいいか。

8章は読まなくてよかろう。

29karino2:2017/03/03(金) 02:19:04
以上で一通り基本的な部分は理解出来た気がする。
まだ実際のニューラルネットのアーキテクチャというかどう多層化してるか、とかはそんなにしっかり消化出来てる気はしないが、まぁそこは些細な問題だろう。

大分GoogleTranslate世代の翻訳は理解出来た気がする。
なかなか面白いね。2015年あたりから一気に進んだなぁ。

30karino2:2017/03/13(月) 20:53:26
word embeddingsのその後のレビュー的なブログ。

http://sebastianruder.com/word-embeddings-1/index.html
On word embeddings - Part 1

詳しく書けていて素晴らしい。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板