History広告を非表示にするもっと読むコメントを書く2016-10-17ニューラル機械翻訳と記号幻想の死ネタニューラル機械翻訳が最近ひどいことになっている。科学技術論文の中日翻訳の結果を見て、ボスの中では機械翻訳はできてしまったことになっている。長年開発してきた用例ベース機械翻訳システムもあっさりお払い箱。既存研究の再実装にいろんなチューニングを加えただけで、論文にできるような新規性は何一つないにも関わらず。そのぶん、機械翻訳以外をやっている私たちへの風当たりがきつい。そんなある日、AIが翻訳の不可能性に気付く日というブログ記事を見つけた。率直に言えば、懐かしさすら覚えるひどい代物。ここ2、3年ほどの機械翻訳研究をまったく追わないまま、聞きかじった話を適当に組み合わせるとこうなるのだろう。いままでぼんやりと考えていたことが、いい感じにツッコミどころとして配置されている。この機会に言語化してみようという気になった。ブログ記事で引用されている文献は一切確認していない。教師あり学習としての機械翻訳ニューラル機械翻訳に限らず、機械翻訳の入出力は単純明快。源言語のテキストを入力として受け取り、目的言語のテキストを出力する。テキストといっても、現在のシステムの処理単位は基本的に文。したシステムをどうやって作るか。翻訳に必要な知識をどうやって計算機に教えるか。人間が翻訳規則を直接書いていた大昔ならいざしらず、現在は計算機自身に翻訳のための知識を獲得させる。そのために、源言語と目的言語の文ペアを大量に計算機に与える。日英や日中なら百万のオーダ。その大量の文ペアから、どういう入力に対してどういう出力をするかという対応を計算機が学習する。教師データと完全一致する文しか翻訳できないようでは困るので、ある程度汎化した形で対応を学習する。教師データから学習するので教師あり学習といえる。*1では、教師データである源言語と目的言語のペアは誰が作ったのか。計算機は人間が翻訳した結果から学習し、その結果をもとに未知の源言語テキストを翻訳するのである。翻訳不可能性もへったくれもない。人間が、目的言語に等価な表現がなくて困り、適当な近似的表現を編み出していたなら、計算機はそれを学習する。それが計算機に期待された動作。源言語のテキストが表現しているものが、いままで人間が目的言語で表現したことないもので、翻訳に苦労することなんていくらでもあると思う。そんなものを機械翻訳が魔法のように翻訳してくれるわけがない。与えて学習した中日翻訳システムは、「你好」すらまともに訳せない。中身も基本的にはこれ。いわゆる深層学習とは無縁だったはず。機械翻訳はそれなりに大掛かりなタスクであり、ニューラルネットワークが華麗に復活したあとも、しばらくはニューラルネットワークの使いみちはサブタスクを解くことだった。源言語から目的言語への翻訳をニューラルネットワークで一気に行うモデルが提案されるようになった。2014年が当たり年で、これとこれは、精度的には従来手法を下回っていたものの、唖然とするほど単純なモデルでそれなりの精度を叩き出したことで衝撃を与えた。それまでは、機械翻訳といえば、頭の良い人が計算量の爆発と戦いながら、精緻なモデルを頑張って作る分野だった。今までの苦労は何だったのか。これらのモデルには長い文に弱いという欠点があったが、同じく2014年に提案された改良版で解消軽減されている。現在定番となっているのはこの手法。発表したニューラル機械翻訳もこの流れ。中英翻訳がニューラル機械翻訳に置き換えられている。他の言語対もそのうち置き換えられるだろう。言語は少なくとも表層的には記号列でできている。記号への思い入れが強い人がいて、記号だけで一つの業界ができていたりする。記号の背後にある意味についてはいまだに誰も正しい扱い方を知らない。意味についても記号の操作だけで何とかできると考える人がいた。ように別の記号の組み合わせに分解して表現するとか。少なくとも昔の人工知能研究はそんな感じだった。人間のような天然知能は記号操作だけを行っているわけではない。結局、記号操作だけで完結する実用的なシステムが作られることはついになかった。ニューラル機械翻訳はそうした記号幻想に引導を渡そうとしている。定番化した手法の時点で記号排除が進んでいるうえに、最近の流行はより一層暴力的に記号を扱うこと。ニューラル機械翻訳であっても、入出力は源言語と目的言語の文、つまりは記号列。記号列なのは入り口と出口だけで、その間をつなぐ経路からは記号が徹底的に排除されている。(seq2seq)、つまり系列から系列へ変換する手法の一種として実現されている。源言語系列は一度に全部受け取るが、目的言語側では記号を一つ一つ出力する。システム自身が途中まで吐いた目的言語記号列。これらをもとにシステムは目的言語の次の記号を出力する。(ことが期待される)。(ことが期待される)。システムの中身を直感的に説明するのは難しい。御大の例えをもじって、ノブを使った説明を試みる。機械翻訳というブラックボックスには、上部と下部に大量の穴があいていて、それぞれ入力と出力に対応する。上部の適切な穴に水を注ぐと、下部の適切な穴から水が出てくる。したり合流したりするし、途中に水を貯めている箇所があったりもする。いう箇所にはノブがあって、水の流れを制御する。実際には、量が増幅されたり、負の値をとったりするので、水で例えるのは微妙だけど。上部と下部の穴は何を表すか。いま、源言語と目的言語の語彙をそれぞれ3万に制限するとする。いう特殊記号に変換してしまう。すると、源言語の各単語に対して、3万個の穴を用意し、そのうちの一つだけに水を注げばよい。「私」なら42番目の穴、「は」なら3番目の穴といった具合。6x3万=18万個の穴に対応する。出力済みの単語も同じように上部の穴に対応していて、水を注ぎ込む。下部の穴は、次の単語を表す3万個の穴。そのうちの一つから水が流れ出す。802番の穴なら「student」といった具合。学習とはノブを調整すること。ノブを適切に調整していないと、別の穴からちょろちょろと水が漏れたりする。正しい穴だけから水が出るようにノブを調整する。いった階層の深いシステムであっても、充分な教師データを与えれば適切にノブを調整できることがわかった。それが深層学習とよばれているもの。ノブの例えが厳しくなってきたのでここでやめにするが、最後に一つ付け加える。システム内部は、水の流れが多いか少ないかという数量で制御されている。確かに入り口と出口は離散的だけど、中は連続値で支配されている。おいて、意味はどのように扱われているのだろうか。ニューラル以前は、記号同士を直接結びつけようとしていた。素朴には、例えば、英語の「cat」と日本語の「猫」を結びつけておけばよい。単純にいかないからシステムが複雑化していく。正確だ」のように単語単位では扱えない対応など。単語ではなく句を単位にする。スコアによって曖昧性を解消する。フレーズベース統計的機械翻訳は、句単位での源言語と目的言語との対応にスコアを紐付ける。翻訳時には、とにかく候補を列挙して、スコアが最大となる訳を選んでいた。スコアのような非記号的要素が加わったとはいえ、記号同士を直接結びつけていた。ニューラル機械翻訳は記号同士を直接結びつけるのをやめてしまった。システムの中で何が起きているのかよくわからないが、入力直後と出力直前の処理であればまだ想像できる範囲内。ような、500次元くらいの実数値の羅列。した数値列が「私」、「は」といった単語タイプごとに辞書に格納されていて、入力単語は辞書引きによって連続空間表現に変換される。源言語の語彙を3万に制限していたので、3万x500で1500万個の実数値。目的言語も同じだけある。この数値列が実際のところ何を表しているのかよくわからない。「私」の連続空間における近傍を探すと「僕」が見つかったりする。意味的に似た単語が近くにくる傾向は確認できるので、何らかの意味を表しているのだろうと推測できる。ニューラルネットワークの特徴量と意味論の素性は全然別物。前者は連続値で後者は離散的。素性」という連想ゲームをやるのは無意味。入力は置いておいて、出力直前の処理を見よう。出力単語の候補も辞書に格納されている。例によって語彙が3万で、500次元とする。似た意味の単語は近くに集まっている。システムはこの数値列と出力候補の3万語各々との内積をとり、一番大きな値を返した候補を出力する。システムが作った500次元の数値列に一番近い連続空間表現を持つ単語を選んでいると解釈できる。これは面白くて、システムはまず次に出力したい「意味」を作って、次にそれを一番うまく近似する単語を選んでいることになる。出力直前の処理は、ニューラル機械翻訳が犯す誤りを見るとよくわかる。英日翻訳で、「Tunisia」を「ノルウェー」と翻訳するといった不思議な間違いが生じる。「チュニジア」も「ノルウェー」も地名としてテキスト中で同じように振る舞うから、連続空間上で近くに配置され、つい間違えてしまうのだろう。要素還元主義のおわり「bank」が「銀行」と「土手」に対応するといった曖昧性はどのように解消されているのだろうか。わからないので以下は単なるクソポエムだが、源言語文の文脈によって解消されているのではないかと想像する。入力単語はまず連続空間表現に変換されると言ったが、この数値列から出力の意味を直接作ろうとするのではない。変換をかませた結果を使う。この変換は、源言語の系列を前から後ろに流れてくる数値列と自身の数値列を合成することで実現される。同じように、後ろから前に流れてくる数値列と自身の数値列を合成しており、最終的には前向き版と後ろ向き版を結合したものを使う。想像するに、この前向きと後ろ向きの流れが文脈を表していて、例えば源言語文で「deutsche」が「bank」の前に来ていたら、前向き文脈に引っ張られて「銀行」の方の意味が活性化するのではないか。本当にそんなことが起きているのか検証したいところ。ニューラル機械翻訳以前は、文をどうやって翻訳に有効な構成要素に分解するかに頭を悩ましていたのだが、文脈の数値列によって、ふわっと解消されてしまったように見える。文法よいずこへ翻訳においては、訳語の選択だけでなく、語順の変換も難しい。これは単なる列の並べ替えだが、それでは駄目で、統語構造をちゃんと考えましょうという研究も流行っていた。ニューラル機械翻訳が来て、時計の針が巻き戻されてしまった。系列を見ているだけで、統語構造を陽には扱わない。陽には扱っていないのに、語順を適切に並べ替えたように見える結果を出力してくる。並べ替えができるということは、この巨大なモデルの膨大なパラメータのどこかに語順に関する情報が保持されているはずである。それがどう表現されているか以前に、どのあたりにあるのかすらよくわからない。再帰性は実は難しくない人間が他の動物と異なるのは言語を持つことであり、言語を特徴づけるのは再帰性だと思っていた。人間と他の動物との知能にはそれなりの断絶がありそうだから、再帰性を扱うのはそれだけ難しいと推測してもおかしくない。再帰性はそんなに難しくないらしい。単なる系列モデルで再帰性が扱えることが実証されてしまった。