Google翻訳のアーキテクチャー(2) Encoder / Decoder

Google機械翻訳の基本的な論文


Googleの新しいニューラル機械翻訳システムについては、基本的な論文が二つある。

一つが、去年の10月にarXivに投稿された Yonghui Wuらの"Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation"(「Googleのニューラル機械翻訳システム:人間と機械のギャップを橋渡しするもの」)という論文である。https://arxiv.org/pdf/1609.08144.pdf

もう一つが、同じくarXivに11月に投稿された Melvin Johnsonらの"Google’s Multilingual Neural Machine Translation System: Enabling Zero-Shot Translation" (「Googleの多言語ニューラル機械翻訳システム:ゼロ・ショット翻訳が可能に」)https://arxiv.org/pdf/1611.04558.pdf

前者の論文は、新しいGoogle機械翻訳のニューラル機械翻訳システムの発展形としてのアーキテクチャにフォーカスしたもので、後者の論文は、このGoogle機械翻訳を多言語対応させた時に、翻訳システムとして、どのような特徴を持つかを、述べたものである。

Googleニューラル機械翻訳システムの概観


ここでは、まず前者の論文に依拠して、Googleニューラル機械翻訳システムのアーキテクチャーの概観を見てみようと思う。アーキテクチャーの概念図を下に示す。

左側に、LSTMを8段重ねにした Encoder LSTMがあり、右側には、同じくLSTMを8段重ねにした Decoder LSTMがある。


Googleニューラル機械翻訳 (GNMT : Google Neural Machine Translation )システムは、LSTMを利用したシステムであり、全体としては、Encoder-Decoderのアーキテクチャーを採用していることを確認しよう。

EncoderとDecoderの中間に、Attentionと記された領域がある。ここからの出力Attention Context は、Decoderのすべてのノードに供給されている。AttentionがDecoderの振る舞いをコントロールしていると思っていい。

細かく見ると、LSTMの段の積み重ねに、特徴があるのがわかる。積み重ねられたLSTMは、一つ下のLSTMからの出力を受け取るだけではなく、もう一つ下のLSTMからの出力をも受け取っている。これを Resudue Connectionと呼ぶ。一昨年のImageNetの画像認識のコンテストで優勝したMSRA(MicroSoft Research Asia)が、Convolution Neural Networkで利用した手法だ。

また、Encoder側の一番下の方の二つのLSTMの処理が、逆向きに走っている。

HintonのAutoencoder


こうした特徴を持つGNMTのうち、ここでは、まず、Encoder/Decoderの枠組みに注目しよう。

ニューラル・ネットワークの中で、Encoder-Decoderの枠組みを提案した基本的な論文は、Hintonの 2006年の ”Reducing the Dimensionality of Data with Neural Networks” である。https://goo.gl/Ki41L8

彼は、ニューラル・ネットワークを用いて、高次元のベクターの次元を減らすことができることを示し、それをAutoencoderと呼んだ。

「高次元の入力ベクターを再構成する小さな中央層を持つ多層のニューラル・ネットワークを訓練することで、高次元のデータを低次元のコードに変換することができる。このようなAuto Encoderネットワークの重みを調整するのに勾配降下法を利用できる。ただし、それは、重みの初期値が、良好な解に近い場合にのみうまく働く。我々は、 ディープAuto Encoderネットワークが、低次元のコードを学習することを可能にする重みの初期化の効率的な方法について述べる。この方法は、 データの次元を下げるツールとしての主成分分析より、ずっと優れている。」

次の図の中央、下の方の赤い枠がEncoderである。Encoderは、2000次元のベクトル(2000 pixelの画像データ)を、30次元のベクトルに変える。上の方の青い枠のDecoderは、この30次元のベクトルから、2000次元のベクトルを生成する。(こうして、画像が復元される)論文では、このAutoencoderを微調整する方法が示されているのだが(下図の右側。画質が改善されている)、それについては割愛する。



注目して欲しいのは、ここでは、入力に与えられたデータ自身が、教師用のデータの役割を果たすので、その意味では、ラベルづけられた教師用のデータを必要としないということ。Autoencoderとは、「自己エンコーダ」の意味である。

この例は、「画像圧縮技術」の一種として理解してもいいのだが、この論文で、Hintonは、もっと面白い例を紹介している。「書籍の分類」に、このAutoencoderを使おうというものである。

よく使われる単語を2000個ほど選ぶ。ある本にこれらの単語が何個含まれているかをカウントする。そうすると、ある本に2000次元の整数からなるベクトルを対応づけることができる。このベクトルをAutoencoderの入力に与えて、Autoencoderがこのベクトルを出力に再現できるように訓練をする。Autoencoderの中央のボトルネックの部分を、10次元のベクトルにすると、ある本に10個の数字を対応づけることができる。

Hintonは、40万冊のビジネス書を対象に、この方法で得られた10個の数字が、書籍の分類に有効かどうかを実験した。結果を、二次元に可視化したものが、次の図だ。見事に、分類に成功している。


同じデータを、主成分分析法で解析したものは、次のようになる。


明らかに、Autoencoderの方が、主成分分析より優れている。

重要なことは、「画像」と「書籍」では、対象のデータの性質はまるで異なるのだが、Autoencoderは、そのいずれに対しても、高次元のデータを低次元のデータに変換しているということである。別の言葉で言えば、それは、対象の高次元のデータから、低次元のデータを、元の情報のエッセンスとして取り出しているのである。

Hintonは、こうしたAutoencoderの働きを、Semantic hashing(意味的ハッシング)と呼んでいる。SHA-1のようなハッシングでは、ハッシュ化されたデータから元のデータを復元することは不可能なのだが、Semantic hashingされたデータは、データの次元は低いものの、元の情報の中核部分を保持している。

Encoder-Decoderの機械翻訳への応用


HintonのAutoencoderは、そのままの形では、機械翻訳に利用されることはなかったと思う。ただ、2014年に、Ilya Sutskever らは、RNN(ここでは多層のLSTM)の持つシーケンスをシーケンスに変換する能力が、機械翻訳に応用できるという論文 "Sequence to Sequence Learning with Neural Networks" https://goo.gl/U3KtxJ を発表する。

ディープニューラルネットワーク(DNN)は、難しい学習課題でも優れたパフォーマンスを達成する強力なモデルである。DNNは、ラベル付けられた訓練用のデータが利用可能な時には、いつもうまく機能するというものの、シーケンスをシーケンスにマップすることに、DNNを利用することはできない。我々は、この論文で、シーケンスを学習するエンド・ツゥ・エンドの汎用のアプローチを提示する。そこでは、シーケンスの構造に最小限の前提しか課していない。我々の方法では、入力のシーケンスを固定次元のベクトルにマップするのに、多層のLong Short-Term Memory(LSTM)を利用する。その後、別の深いLSTMが、このベクトルから目的のシーケンスをデコードする。

この論文の次の図を見て欲しい。



この図は、このシステムが、ABCというシーケンスが与えられた時、xyzというシーケンスを返すことを表している。<EOS>は、End of Sequence でシーケンスの終わりを表す特別な記号である。(これが、シーケンスの構造に課せられた「最小限の前提」である。)

これが、先に見たEncoder-Decorderのパターンであることは、次のようにしてわかる。
先行するLSTM群は、入力シーケンスABCを受け取って、それを固定長のベクトwに変換している。後行のLSTM群は、そのベクトルwを受け取って、それから出力シーケンスxyzを生成する。すなわち、先行のLSTM群をEncoder、後行のLSTM群をDecoderと考えることができる。中間に生成され、両者で共有されるwは、先のHintonのボトルネック部だと思えばいい。



次の図( https://goo.gl/JGckBP から)は、こうしたメカニズムで、RNNが、独文の "Echt dicke Kiste" を英文の"Awesome sauce" に翻訳する様子を表している。(ここでは、文章の終わりを表す<EOS>は、省略されている) 

ここでは、赤い色のEncoder部が、文章の最後にとるRNNの内部状態 $h_3$が、そのまま青い色のDecoder部に渡されることが示されている。入力シーケンスの情報のエッセンスが、この内部状態 $h_3$に凝縮されていると考えればいい。AutoencoderのDecoder部が、圧縮された情報から元の情報を復元しようとするように、ここでは、その情報から、「同じ意味」を持つ、別の言語の文章を復元しようとする。

Ilya Sutskever らは、このアーキテクチャーで、英語をフランス語に翻訳するシステムを作成し、BLEUのスコアで、34.81という高得点をたたき出した。

この時のシステムは、5段重ねのLSTMで構成され、それぞれが 8,000次元の状態からなる384M個のパラメーターを持つものだった。





コメント

このブログの人気の投稿

TensorFlow Foldについて

可微分ニューラルコンピュータとは何か(1) 概論

TPU論文の翻訳(1)