ニューラルネットの真髄は
意味を数で表現すること
秋山 文の意味が数値で表せる。
永田 順を追ってお話ししましょう。まず、入力された内部状態は、ベクトル表現で表されます。
秋山 ベクトル表現というのは、2次元なら、(x,y)=(1,1)なら、平面上の縦(y)軸の+1と横(x)軸の+1で表すみたいなものですよね。3次元なら(x,y,z)=(1,1,1)で、空間上の1点を表す。
永田 はい。これはペンです、の「これ」を入れ、内部状態を計算して出力を予測して、「は」が出てきて、出てきた「は」を入れるとまた内部状態を計算して出力を予測してそれを入力して……と内部状態は次々に更新される。つまり、更新状態が次の入力になって次の単語を予測するということを繰り返すことになるので、内部状態がどんどん変わっていきます。最後の内部状態は文の全体、つまり過去の入力と、そのときの内部状態と、それが更新された履歴などを全部見ているので、文の最後に到達したときには、入力文全体の情報が全部詰まったものが「内部情報」に入っていることになります。そして、その膨大な情報は1024次元の数値ベクトルという数の並びで表されているのです。
秋山 (1,1,1……)のベクトルが、約1000次元あって、それが文の意味になるのですか!その数の情報が次の文を作るんですね。
永田 そうです。語の意味はすべて1000次という多次元のベクトル空間の中のひとつの点として表されるのです。
秋山 ニューラルネット以前は数で表せなかったのですか。
永田 そうなんです。革新的なのはこれまでは単語の意味情報を文字で表現していたのをニューラルネットの世界では数字として表現できたということですね。たとえば語彙が5万語あったとすると、それらが1000次元のベクトル空間の中にばらまかれている。そして、男と女の関係性をベクトル空間上で平行移動させると「おじさん」と「おばさん」になったり「king」と「queen」になったりするんです。
秋山 相似性が見られるわけですね。
永田 はい。意味的に似たものが、ベクトル空間上でも近いところにある。それ以前のルールベース翻訳では、文字が1個でも違ったら、違う入力だと処理され、動かなかったのが、ベクトル表現であれば、きわめてアナログ的な動きをして、多少ずれた入力でもちゃんと動くんです。それによってニューラルネットを動かすときに滑らかさが出てくる。学習データになくても、なんとなく推論して動いていて「賢さ」を感じさせるのです。
秋山 浜崎あゆみにアメリカ人の要素を加えるとレディー・ガガになる、みたいなベクトル空間上の配置になっているんですね。
永田 はい。翻訳の場合は同じことが文の中で起こっています。最後の内部状態が過去の情報をすべて持つ意味表現になっていて、出力される文、翻訳した結果に対して合っているか合っていないかで内部状態の重みを変えるようトレーニングされるので、出力する文が似たようなものになっているなら、ベクトル空間上にあった入力する文の表現も似たようなところにあるということになります。
秋山 似たようなものが似たような位置にあると思うとは、人間の学習のようですね。頭の中で似ているものや、関係性をマッピングしていくみたいで。人間がベクトル表現に置き換えて理解しているとは思えませんが(笑)。
永田 これまでの統計翻訳では、単純に統計を取るだけだったので、重み付けのときに何に注目するかは、人間がコンピューターに教えてあげなければならなかった。画像認識の場合は、濃淡の値が大きく変わるところに注目してね、とか。ニューラルネットになると何に注目するか自体も自分で探すことができます。言語の場合は「予測するものがなんとなく似ている」というところに注目するわけです。ただ、内部状態にあるのは、画像の情報でも音声情報でも言語情報でもすべて数値ベクトルです。そしてその数値ベクトルが処理している対象の特徴を捉えていることになっているのです。
秋山 特殊な能力を持つ人間も同じようなものごとの捉え方の癖を持っているのではないかという気がします。たとえば優秀なコピーライターが「おいしい生活」という言葉を思いつくとか。おいしいってそういうところに使わなかったのを勝手にやっている。
永田 そうですね。旧来の統計翻訳は、単語をひとつずつ訳す先の言語に当てはめる逐語訳です。単語対応なのですが、ニューラル翻訳の場合は、一度ベクトル表現を作って、それを入力として文を作るので、ベクトルで単語の情報を表してしまえば、ある文章を訳したときに、入ってきた表現と出てきた表現が単語ごとに対応しているわけではない。思わぬ結果が出力されることもあり得ます。ある意味、創作ですね。意訳をしているということです。ニューラル翻訳は意味表現を出発点として表現を作っている点で、部分的な対応を見ている統計的機械翻訳とは全然つくり方が違うんですよ。
わずか300文で
高度な学習ができる
秋山 永田さんは学会で何度も賞を取っておられますが、ご研究の代表的なものをいくつか挙げていただけますか。
永田 93年に入社してすぐくらいのときにATRという研究所で音声翻訳の研究をしていました。初期のルールベースの自動翻訳を使って、日本、ドイツ、アメリカをつないで、通訳電話の共同実験をし、世界初の自動翻訳電話を作りました。これはNTTドコモのアプリ「はなして翻訳」の元になっています。総務省のプロジェクト「Voice Tra」の元でもあります。
その後NTTに戻り、日本語の「形態素解析」の研究をしました。日本語は英語やヨーロッパの言葉のように、単語の間に空白が入っていないので、単語に区切るのが難しいのですが、単語に分けるためのアルゴリズムを考えました。電報の申し込みで、電文を書いてFAXするとOCRで文字認識して電文にするというサービスがあったのですが、OCRはところどころ間違うのでその誤りをチェックするためのプログラムのために作ったものです。このアルゴリズムは、後にかな漢字変換に使われるようになりました。
20年には対訳文の単語対応を求めるプログラムを開発しました。統計翻訳では、単語対応に基づいて翻訳していたのですが、ニューラル翻訳では統計翻訳のように単語対単語の対応で訳さないので、元の文章の単語が、訳した後の文章の中のどの言葉に対応しているのかを求める方法がなく、翻訳が正しいかをチェックすることが難しい。絶対に間違いが許されない医療や特許に関する翻訳を人がチェックするために、異なる言語の文のどことどこが対応しているのかを見つける、世界最高精度のアルゴリズムを開発しました。
秋山 それはすごい技術ですね。
永田 背景にあるのは、多言語BERTです。BERT(Bidirectional Encoder Representations from Transformers)はGoogleによって開発された自然言語処理における調理済み食品のようなものです。先ほどお話ししたとおり、Googleは17年に16年の機械翻訳からさらに精度を上げた、トランスフォーマーというニューラルネットのしくみを発表しました。機械翻訳の精度が人間と同じようになったとさえ言われました。では、その超優秀なニューラルネットをどうやって鍛えるのか。スポーツでは、野球がうまくなるために、素振りをしたり、キャッチボールをしたりしますよね。それと同じで、機械学習にも基礎練習をさせてから、本来の目的の学習をさせる(これを転移学習という)とゼロから学習するより、飛躍的に学習効果が上がることがわかったのです。その基礎練習が事前訓練タスクで、それで学習して、できた重み付けを使って別のデータを入れるとても優秀なニューラルネットになるのです。自然言語処理では、事前タスクに穴埋めタスク(穴埋め問題)を使います。
秋山 英語や古文のテストでも穴埋め問題はよくありますよね。穴埋め問題は言葉を理解しているかどうかを判定するのに便利ですよね。
永田 テキストがあれば、いろいろなところを穴埋めにすれば、問題と答えの対はいくらでも作ることができます。たとえば、Wikipedia全体を学習させると、あたかもWikipedia全部を知っているかのようになる。
秋山 ちょっと訓練しただけで、全体がわかる。
永田 言語モデルでは、次の単語を予測していると言いました。自分の前にある情報で次を予測するのですが、穴埋めタスクだと、前も後ろも、もっと幅広く見て中を当てることになります。そういう基礎練習をひたすらやるとニューラルネットはそこそこ賢くなるんですよ。Googleはこれを多言語でやりました。たとえば、Wikipediaには100言語以上ある。それを使ってひとつのニューラルネットを学習させると、個々のページは対訳ではないのですが、数字やアルファベットの略称などはだいたい共通です。その結果、ベクトル空間の中に単語をばらまくときに、それぞれの言語は別々にばらまくのだけれど、意味的に似たもの同士が近くにくる。日本語のある単語と英語のある単語の対応関係を学習するニューラルネットも、このような多言語のベクトル空間の中では簡単にできるということに気づいて、そのために必要な対訳文は300程度でいいということを示しました。
秋山 穴埋め問題だけで言語が学習できるというのはおもしろいですね。次回は自動翻訳の社会へのインパクトについてお聞きしたいと思います。
23段落目:「フランスの国会議事録」→「
43段落目:「
(2022年2月21日22:18 ダイヤモンド編集部)