小町守先生インタビュー(その2)

自然言語処理におけるディープラーニングのインパクト

【ーー】  いまのお話は、もう少し一般的な話としては、事前に用意した2番目と3番目の質問とも関係します。ディープラーニングが出てきたことで、自然言語処理においては、過去10年、15年のあいだにどのくらい大きな変化があったのでしょうか。方法としての変化もあるでしょうし、パフォーマンスがどの程度向上したのかということもあると思いますが、どのくらい変わってきているのでしょうか。
【小町】  アプリケーションのレベルでは、先ほども申しましたけど、変わってきているのは言語生成ですね。出力がテキストになっているものは本当にこれまでと全然違って、これまでは明らかに、人間が見たら、これは機械の出力だなと分かっていたんです。なぜかというと、それぞれの入力出力を単語とかフレーズみたいなもののパッチワークでつくっているので、文全体からすると何か怪しいなというところが何個かあって、これはおかしいなって人間はすぐ分かるみたいなところがあったんです。
それが、深層学習をはじめとするニューラルネットワークって全部連続の世界になっていて、出力されるテキストはそれぞれの単語を選んで出しているんですけど、裏側にあるのは連続の滑らかな世界なんです。だから人間が見ても、これは人間が出しているなと思っちゃうような、むしろ人間が手で書いたほうが何か怪しいところがあるぐらいの出力は出せるようになっているというのは、アプリケーションとしては大きなインパクトがあります。
 何でこの違いが起きるのかというところは、いろんな理由があると思うんですけど、データも大量に入れているというものもあります。データを単に大量に入れてできるんだったら簡単じゃんと思うかもしれませんが、データを大量に入れて、ちゃんとそれが動くようにできるようにするいろんな仕掛けがあって、ハードウエアの進歩だとか、最適化の進歩だとか、単純に「これができたからできるようになった」という話ではなく、幾つかの障害が解消されながら今のディープラーニングブームに至るという感じです。でも、これまでの統計的な手法とそんなにパラダイム的に大きく違うかというと、そんなに大きくは違いません。アプリケーションが結構変わっているのですごく違うように見えるかもしれませんが、地続きだとは思います。
【ーー】  実際の研究の中では、ディープラーニング以前の統計的な手法とディープラーニングを組み合わせることもあるのでしょうか。
【小町】  はい、あり得ます。ただ、あまり広く使われていません。単純に組み合わせるのが難しいというのが一つの問題です。
ニューラルネットワーク以前のアプローチだと、ここの部分はこのモジュールで、みたいな感じで一個一個独立していて、入力を入れたら何か処理して出力をぽんと出し、それが次のシステムの入力になってと、パイプラインを組んでつくっていました。そのため、この部分に問題があったらこの部分を直そうとか、この部分の出力を人間が見て、おかしいなとなったらそこを直す、みたいに組み合わせやすかったし直しやすかったです。
他方、ニューラルの場合には全部が1個になっているので、「この部分」というのがないんですよね。エンドツーエンドと言うんですけど、入力から出力まで全部がネットワークの中に入っているんですね。変えようと思うと全体を何とかしなくちゃいけませんし、しかも、中がどうなっているのかというのも巨大なニューラルネットワークになっていて、10層重ねた層のこの部分の層がとかいう話になるんですけど、もうよく分からないので、構文解析モジュールが間違っているから直そうみたいな形にはなっていないし、できないですね。最終的な精度は高いんだけど、この部分がいいからいい、というのはなかなか言えないです。
【ーー】  そういう意味では、従来の統計的なモジュール型の手法だったら、そこに文法的な知識を一部取り入れるというようなことはやりやすかったわけですね。
【小町】  やりやすいです。やりやすいし、なおかつ、入れてよくなることが多かったんです。
 言語学的な知識を入れてよくなるのは、ルールベースのものは明らかによくなるんですけど、統計的な手法も、統計度が上がれば上がるほど、よくならないことのほうが多かったんですね。音声認識なんかでは、「音声学者を1人クビにするごとに精度が上がる」って有名な研究者が言ったとされるみたいな逸話があるんですけど、機械翻訳でも、翻訳者を1人クビにすると翻訳性能が上がるみたいにもじって言う人もいたぐらいです。統計とか機械学習とかを入れ始めると、素朴な直感に反することが起き始めます。
 なぜかというと、ルールとか辞書とかいった言語知識って、人間が頑張って作るんですけど、我々が事前に想定し得ないようなものが現実のデータの中に入っていてうまく動かない、といったことがあります。また、作るのにむちゃくちゃ時間かかるせいもあるんですけど、ある時点ではいい辞書でも、継続的にメンテナンスしないと、20年後にはちょっとこれはという辞書になっていることもあるんです。たとえば、NTT が作った翻訳用の辞書で、『日本語語彙大系』ってすごくいい辞書があるんですけど、その中には電話の意味の「携帯」って単語が入ってないんですよね。でも今、何か解析しようと思っても、「携帯」は未知語になったら困るとか思うんですけど、時間とともに新しい単語が入ってきたり新しい語義が生まれたりするのを、常に同じようなクオリティーで更新し続けたりするのが結構難しいので、アプリケーションとしては統合するのはやっぱり難しいですね。
 あとは語義曖昧性解消というんですけど、銀行という意味と土手という意味を持つ bank という英語の単語があったら、これは文脈によって銀行なのか土手なのか分かれば語義曖昧性解消して入れてあげたほうが訳し間違いが減るだろうと直感的には思いますよね。ルールベースでは当然そうなんですけど、統計的機械翻訳ではこの語義曖昧性解消をやったところで必ずしもそれは上がらなかったんです。これは、いろんな人がやってみんな失敗して、何とかうまく行く方法が見つかったのは結構後で、統計的機械翻訳が登場して10年以上経ってからですね。なので、データに基づくアプローチでは、直感に反することが起きることもあります。
【ーー】  人間の発見した知識をどのくらい入れたほうがいいのかというのは非常に興味深いところで、教科書によっては、純粋に統計的な情報、例えば語と語の相関だけだとうまくいかないときに、例えば意味論的な情報を少し足してやると曖昧性が解消するというような説明がされていることもあると思いますが、いまのお話だと、必ずしもそうではない場合もあるわけですね。
【小町】  そうですね。基本的には例外とか未知の事象にどうするかって話につながるんですけど、既知のものは全部情報を書き尽くして入れたら上がるんですよ。だから、世界を限って、このシステムは旅行会話しか対象としないみたいなのを決めてやると、そこに関して作り込んだら、明らかによくなるんですね。ただ、あらゆる場面を想定した対話システムを作るとなったときには、旅行の場面だけ頑張って言語資源を用意したところで、ほかの場面での精度が下がったりするんですよね。汎用的なシステムを作るとなると、そういう未知の事例をちゃんと扱えるようにするというのは、アプリケーションとしてはすごく大事なので、システムをデザインする際のバランス感覚だと思います。あと、やっぱり人間が見てこれは上がるだろうという入れ方と、機械にとってこれを教えてもらったらうれしいというのが、どうも違うんですよね、往々にして。なので、機械の気持ちが分からないと必ずしも精度向上にはつながらないというところかなと。
 人間って、辞書もそうなんですけど、それぞれの単語の意味なんかを記述しようとするのは単語ごとにやれるんですけど、機械って、こういうような記号的な知識って使いにくくて、特に機械学習とか深層学習では、事例ベースなんですよね。つまり用例。それぞれの単語が文の中でどう使われているのかみたいなものを大量にばーっと入れるとよくなるんですけど、人間はそんなふうによくならないですよね。人間は1億文、同じ単語を見たりしないし、そんなことはできません。それまでに何となく知っている知識から、用例を見ながら書いたりするんでしょうけど、何人かが書いたりすると、やっぱり人によってクオリティーが違うんですよね。そして、この単語はむちゃ詳しいけど、この単語は全然駄目とか、そういうふうなのが混在していると、機械からすると混乱するんです。辞書が大きくなればなるほど全体のクオリティーを保つのが難しくなって、全体としては使ってもよくならないというのが結構ありますね。理想的には手間暇かけて作った資源を使ったら効果が出てほしいけど、プラクティカルな問題が結構そこには潜んでいるといいますか。

【ーー】  なるほど。非常に大きい流れで見ると、初期の人工知能における自然言語処理の構想というのは、かなりトップダウンで、人間がいま持っている文法や意味論の知識をそのままルールベースに落とし込めば自然言語処理システムができるだろうというものだったと思いますが、ある意味、そこからだんだん離れていっているわけですね。
【小町】  そうですね。
【ーー】  すでに統計的な言語モデルの段階で、ある意味では、言語哲学は言語学の視点からすると、えっ、このやり方でやれちゃうのという感じなのではないかと思います。表面的な手がかりというか、語の出現の頻度だけである程度やれてしまうというのは、かなりラディカルな感じがします。でも、大きな流れとしては、人間が事前に用意した枠組みにあまりとらわれない方向に進めば進むほどパフォーマンスが上がってきているという感じでしょうか。
【小町】  そうですね。60年代ぐらいまでは、人間のやっているように何か知識を入れればよくなるだろうと思ってずっとやってきたと思います。最初は自然言語処理自身も機械翻訳からスタートしていて、ちょうど冷戦下なのでロシア語と英語の翻訳をしていたんですけど、ロシア語と英語の辞書や文法を入れればできるだろうと思っていたら全然できなくて、機械翻訳はその時点ではすぐに使えるような精度にはならないという報告書が1965年に出て、アメリカでは一気に機械翻訳のテンションが下がったんです。ヨーロッパはヨーロッパで、歴史的に多言語と共生するモチベーションがあったので、ヨーロッパのほうでは続いてたんですけど。
 結局、今の主流の自然言語処理をやっている人は、人間と同じようなやり方で言語処理をすべきだとは特に思っていないと思いますね。人間と同じようなやり方で言語処理をしたいとやっていらっしゃる方も、それは解析精度を上げるためにやるというよりは、どういうふうに人間が情報処理しているのかというのを解明したいというようなモチベーションでやっているんじゃないかなという気がします。
【ーー】  現在主流の人たちは、そうではなくて、機械翻訳だったら機械翻訳という目標を設定したときに、よいパフォーマンスを出すにはという課題設定でやっていると。
【小町】  そうですね。ぼくは2005年に奈良先端大に行ったんですけど、最初にショックを受けたのは、N-gram 言語モデルと bag-of-words という考え方です。N-gram 言語モデルというのは、例えば入力として単語列が来るとすると、2単語とか3単語とかの連続する単語のみを見て、フレーズや文の流暢性をモデル化する仕組みです。みなさんご存知のように、言語には明らかに長距離の依存関係があるのに、こんないいかげんなモデルで解析できるわけがない、と思いました。あと、bag-of-words というのは、単語連続の情報すら使わなくて、この単語がこのドキュメントの中にあったかなかったかという情報だけを使って文書の意味を表現するモデルです。これも、言語には文法があるのに、文法を全く無視して意味を決めるなんておかしいじゃん、とか思ってたんですけど、こんな非常に乱暴かつ単純なモデルでも結構なことができるんですよね。
 言語現象が複雑であるのは事実として、言語モデルというのは、複雑にしたらよくなるかというと、必ずしもよくならないんですよ。なぜかというと、複雑にすればするほど、データに基づくアプローチでやろうと思ったら、学習するためのデータが必要なんです。レアな現象ってたくさんデータがないと出てこなくて全然学習できないので、モデルを複雑にしたから複雑な言語現象を解析できるかというと、複雑な現象をちゃんと処理できるぐらいのデータが必要になります。それを我々が生きている時間中に集めないといけない、もしくはこれぐらいの予算内で作らないといけない、というような制約の中で実現する、というのは工学の問題であり、制約を考慮すると単純なモデルのほうが最終的な性能がいい。だから、複雑なモデルは、研究ではいろいろ提案されても実用的にはあんまり使えないというのがありますね。
 たとえば N-gram 言語モデルだと、言語の流暢性のほとんどは周辺の単語で決まるんですよ。確かに、遠く離れたところに文頭のこれが効いてというのもあるんですけど、実際には影響がほとんどないか、稀な現象です。それで、わざわざ遠くを見るようにしたら、逆にこれがノイズになって性能が下がったりするんですよね。あるいは bag-of-words だと、最終的にやりたいことがスパムフィルタリングであれば、スパムっぽい単語が入っているか入っていないかくらいが分かるだけで十分で、複雑な構文解析はほとんど必要ないし、構文木を考えると逆に出現頻度が極端に少なくなってしまって、分類性能が下がってしまうのです。もちろん文によっては否定表現があって意味を反転させなければいけない、みたいな場合もありますが、文書全体で見ると全てが否定形で書かれていたりはしないので、文単位で少し間違っているくらいでは、スパムフィルタリングの最終的な結果には影響しないのです。
 そういう、現実のノイジーなデータと言語のモデルの複雑さとの間に多分トレードオフがあって、適度なところで止まっているというか、実用的にはこんなもん、というのがあるんじゃないかなと思います。
【ーー】  なるほど。でも、そうすると、機械翻訳があるやり方で非常にうまくいったからといって、翻訳をするときに人間が同じやり方でやっているとは限らないし、実際に研究者もそう思ってやっているわけではないわけですね。
【小町】  ないですね、はい。ニューラルネットワークが神経細胞を模している、というふうに思ってやっている人は工学的にはほぼゼロだと思っていて、微分ができる何かでかい行列のかたまり、ぐらいに思ってるんじゃないでしょうか。勾配が決まれば最適化できるので、最適化すれば何かちゃんと精度が上がるみたいな、そういうノリだと思いますね。
 それに、ニューラルネットワークが神経だと思っていたら、最近の巨大言語モデルのようなむちゃでっかいネットワークありえないですよ。視覚なんかでは畳み込みニューラルネットワークのような構造を生物が持っているというのがあるので、同じような構造を模してやるのは理由があると思うんですけど、言語処理でつくられているものについては、人間がこういう構造をしているわけではありません。
【ーー】  逆に言うと、それはある意味謎で、よくよく考えると不思議なことではあるわけですね。
【小町】  そうですね。今、ニューラル機械翻訳とか、今は画像とか音声とかでも使われるようになった Transformer というニューラルネットワークがあるんですけど、これは基本的には集合から集合に変換するという演算をする構造を持っているんです。ちょっとは位置を考慮する仕組みもあるんですけど、基本的には集合から集合の変換なんです。だから語順とかほぼ意識しないけど、これぐらい――bag-of-words に毛が生えたぐらいの構造で、今のニューラル機械翻訳は達成できているんですよね。これはかなりすごいことだと思います。ただ、「深層学習」と言うくらい何層も層を積んでいるので、単純に単語が出たか出なかったかではなく、学習されたネットワークの層をつぶさに見てみると、実は下のほうのレイヤーには単語の意味的なものが学習されて、そのちょっと上のところには品詞みたいなものが学習されて、もうちょっと上には何か構文木みたいなものが学習されて、もうちょっと上には意味的なものが学習されるみたいな、そういうそれぞれの層が何を学習しているのかというのを分析してみると、人間がやっているような処理が観測されるんです。だから、人間と学習のやり方は全然違うのに、学習されたモデルは人間の分析と同じようなモデルがなぜか学習できている、という少し不思議な感じです。
【ーー】  そこは、実際にパフォーマンスのよいシステムをつくる人にとっては、ある意味どうでもよいことなのかもしれないですけど、より理論的な、とくに言語学との接点に関心のある人にとっては、結構重要な問題になりますね。
【小町】  そうですね。それこそ Transformer で学習されているモデルが何を学習しているのかというのも、盛んに研究されています。
【ーー】  なるほど。そこで、従来の言語学の枠組みとうまくつながりそうだというふうに考えている人もいるわけですね。
【小町】  そうですね。人間が決めた品詞だとか、そういうシンタックスみたいなものが、実際に品詞が何かとか文法が何かとか全く教えていないのに、ひたすらデータを食わせたらそれが出てくる。これはかなりすごいことだと思うんですけど、これを面白がる人か面白がらない人かは、多分、工学の人なのか言語が好きな人なのかの違いだとは思います。(笑)
【ーー】  そういった議論では、従来の言語学理論と接続しようとしてもうまくつながらない、よく分からないけどとにかくうまくいってしまうのだという可能性も、依然としてあるのでしょうか。
【小町】  そうですね、ありますね。先ほど言ったように、人間が処理しているやり方と、機械にとってこれがうれしいというやり方は、必ずしも同じじゃないので……。全体をカバーする大原則を抽出する、みたいな処理は人間のほうが得意なんですよね。なので、何かそういうふうな汎化したくなるようなものは人間のほうが多分、詳しくやっているんだと思います。
 結局、ニューラルネットワークにしろ統計的な手法にしろ、事例ベースなので、たくさん出てくる事例に引っ張られるんですよね。それによってパフォーマンスが上がっているんですけど、あんまり出てこない事例は苦手なんですよね。ただ人間は、すごいレアでもルールが決まっていればできるじゃないですか。だから、ここが大きな違いですね。

その3に続く

その1
その4