内部状態を調整して
間違いが最小になるようにする
永田 ええ。このように画像は下から拾って上に行くのですが、これに対して言語は再起ニューラルネットといって、少し異なります。入力すると中間層というものができ、そこには「内部状態」が存在し、内部状態自体が次の入力になります。
秋山 入力からいきなり出力になるのではなく、最終的な出力に至るまでに、「内部状態」が次々存在して、「内部状態」のままで次の層の入力になるということですか。
永田 はい。ニューラルネットが言語を学習するとき、基本的には文章の中の次の単語を予測するということをやります。ある単語が入ってきたら内部状態を計算して、次の単語を予測して、その単語を入力して内部状態を更新し、また次の単語を予測していく、それを次々に繰り返すのが基本動作です。
たとえば、「これはペンです」という文をサンプルにすると、まず、入力で「これ」を入れたら、内部状態を計算して次は「は」が来そうだというので「は」が出できます。そして、「は」を次の入力に入れたら、やはり内部状態を更新して、次は「本」ではないかとAIが考え、「本」が出たとします。しかし、これはサンプル文とは違いますよね。サンプル文で次に来るのは「ペン」ですから。そこで「本」が出たら、正解のデータである「ペン」を入れてやります。次は内部状態で正しく予測して「です」が出て、サンプル文と同じ文章が完成します。このように入力していくとき、予測がどのくらい外れたかということを、「損失」といいます。この損失を計算して、損失が最小になるように、ニューラルネットを調整するのです(その調整方法を確率的勾配降下法という)。
具体的には、ニューラルネットは次の層に内部状態を伝える際の重みを変えると、出力をペンにするか本にするかや、その確率の値が変わるので、この重みの値によって損失がどう変化するかを求めます。何回も繰り返しサンプルを入力して、重み付けを工夫して、損失が小さくなり、正しい文が出やすくなるように、次の単語を予測するニューラルネットをトレーニングするのです。そのしくみを使って翻訳するのがニューラルネット翻訳です。
秋山 対訳データを参照しながら、次の単語としてふさわしい語を予測するようなトレーニングをひたすらするんですね。
永田 外れても、正解の文章を一通り入れて学習させれば、ある文の入力に対してどのくらい外れていたかという値が出てくるので、この値を小さくするように学習を続ければ最終的に必ず次の単語を予測できるようになるんです。
秋山 たとえば、法的に厳密な契約書を書くとき、このワードがあったら次に必ずこの語が来るということが決まっていて、ある意味予測しやすいんですが、そういう感じで覚えていくんですね。
永田 ええ。図式化するときはわかりやすいように、ニューラルネットを入力の単語と同じ数並べて書いて説明していますが、本当はニューラルネットは1個しかなくて、入力したらすぐ次を当てる動作を何回も繰り返しているだけなんです。そして、文には必ず終わりがあるので、特別な記号を作って文の終わりを示し、終わりにします。翻訳機の言語モデルは究極的には、「次の単語予測する機能を持ったニューラルネットワーク」を元の言語と訳す先の言語の2つつなげただけのものなんです。
秋山 次を予測するニューラルネットワークが1つあるだけ――。
永田 もう少し言うと、「これはペンです」を翻訳するとき、まず「これはペンです」までを次々入力していきます。「です」で文章が終わり、eos(end of sentence)という文が終わる合図の記号を入力します。入力文の単語に対する次の単語の予測は翻訳には関係ないので無視します。文の終わりを表す記号eosが入力されたら、今度はこの文全体の対訳になる先頭の単語を予測するのです。予測して、Thisという先頭の単語が出てきたら、これを次に入力してis、penを次々出していくのです。単語対応の辞書はありません。結果としての翻訳文に出してほしい各単語が来るかどうかだけを見ています。予測した結果This is a bookと出したら、bookが間違っているので、間違っているという点数を付け、翻訳誤りが減って満点に近づくように、ネットワークの重みを変えてトレーニングデータを翻訳することを何度も繰り返します。そうすると、ネットワーク全体が翻訳するネットワークに成長していきます。
秋山 つまり、入力文と、結果としての翻訳の出力文は対応しているけれど、単語単位で対応させているわけではないんですよね。その点がニューラルネットワークが画期的だということでしょうか。
永田 画期的なのは、文章や単語の意味内容をベクトルという数値で、つまり意味内容を完全に数として認識して処理している点です。