自然言語処理の研究に悩む 卒業編

前置き

 2020年3月に博士課程を修了しました。ちょうどよいタイミングなので、自分がここまでやってきたことと・これからやっていったほうがよさそうなことの簡単なまとめを書こうと思います。関心の核心は 自然言語処理の研究に悩む その3 - Reproc.pnz からあまり変わっておらず、恥ずかしながら特に新しい内容を書いているわけではありません。どちらかと言うと年に一度くらいこういう考え直しを繰り返して自分の立ち位置を振り返る、という感覚かもしれません。

理解を説明するということ

 「言語を理解している」という状態について形式的な定義を与えることは簡単ではありません。それを観測する人によって「これはわかっているでしょ」「これはわかっているとは言えないでしょ」と解釈が異なることがありえます。したがって、社会的に必要な場合は何らかのタスクを用意してある一定の基準をクリアしているときに「わかっている」と言ったりするかもしれません。たとえば国語の試験や失語症の検査などでは「これがクリアできたらわかっていると言うことにしよう」と決めて利用しているように思えます。より即時的な会話では会話の内容が伝わって必要な行動を起こしてもらえたら・対話が破綻せずに続いたら「わかっている」と言うかもしれません。状況に応じた理解の度合いがあり、かなり抽象的には「その記号のやりとりを成立させることが共同体の存続に寄与する」ときに「理解している」と言う、という考え方もあります。蛇足ですが、この考え方の延長では「機械が言語を理解している」はあるタスクの上で人間の意図した振る舞いをして人間の生活が便利になってくれるような状態を指すかもしれません(人間目線では)。 SF 風に機械目線で言うなら、機械同士でやりとりする自然言語に限らない記号列で彼らの集団の存続がうまくいくのであればそれが「言語を理解している」ことだと言えそうです(そのような記号の体系が言語の定義と言えるかもしれません)。それはそれ。

 自然言語処理あるいは広く人工知能分野のひとつの目標は「言語を理解するシステムを作る」ことだと思われます(最近は断定するのも憚られる気持ちになっています)。機械の「わかっている」を測る手段のひとつに読解問題を解かせるタスクがあり、クラウドソーシングで集めた大規模なデータセット上で昨今の機械学習モデルを訓練・評価するということが行われています。ここで研究上の課題になるのは、あるデータセットで良い成績を示したシステムが具体的にどのような点で優れているのかを説明することです。そのような説明は、新規な状況でそのシステムがどのように振る舞うかを予測する材料になります。そのためには読解の仕方や対象について一般性をもつ単位を説明のために探す必要があります。たとえば「このトピックの話だったらちゃんと読める」「常識的な推論が必要な問題に答えることができる」などです。このような特徴付けは学術的な理論化においても実応用の性能保証においても重要になります(「解けるなら別に説明がなくてもよいという考え方もあるのでは?」のようなことを博士論文の審査で質問されましたが、特に中身がわからず動くものに対して何らの説明も与えないのは研究者・開発者の倫理としてマズいのではないか、という返答をした記憶があります。わからん)。最近のデータセットは大規模(10K-100K くらいのオーダーです)ですが、すべての問題が限定的なトピックだったり特定の処理に偏っていたり簡単だったりしたらそれ以外の問題については何も言えないわけです。言語理解についての説明が欠落していることによる「なにもわからん」感が自分の研究的な関心の中心にあります。

これまでの取り組み

 言語を処理する過程では様々なことが行われます。それを基礎的なタスクとして切り出したのが自然言語処理における構文解析や文関係の認識、知識推論などだと言えます(たぶん)。そうした基礎的処理が読解問題を解く過程で具体的にどのように必要になっているかを確認していって評価の結果(説明)の単位にすればよさそう、というのが(修士2年の頃の)最初の取り組みでした。理解の過程をなるべく分解して分類するというイメージです。ひとつの問題にラベルを貼っていくような雰囲気で人手で見ていきましたが、いまいち納得感が得られませんでした。その後、実際に人間が解く際に使う情報が必ずしも機械が解く際に使う情報と一致していないのではという話が出てきます。人間が意図したとおりに解いてくれなければ、良い成績が出せた場合でもそのシステムの性能について何も言えなくなってしまいます。それを防ぐためには「意図した解き方でしか解けない」となるべく言えるような問題を作る必要があるわけですが、あまりその方法は自明ではありません。そこで博士課程ではデータセットの分析手法に取り組んで、既存の問題について人間では解けなくなってしまいかねない変形を加えて(問題文を 5W1H だけにするとか、課題文の語順をシャッフルするとか)、システムがそれでも解けてしまうのは「意図した解き方でしか解けない」とは言えないよね、という指摘をするような話をしました。実際にデータセットを作るところまでは間に合わなかったので、これから取り組もうとしているところです(この1年は実際に手を動かすような仕事がほとんどできませんでした。情けないです)。

就職活動と博士論文

 せっかくなので書きます。就職活動。海外のポジションにチャレンジしてみようかなと考えてはいたのですが、まず国内のポジションに内定をもらってからだなと思い、アルバイトに行っていた研究所に研究員として入れないか交渉しました(2019年(D3)の5月中旬くらい)。しかしなかなか雲行きが怪しいらしく、すぐに内定をもらうのは無理っぽいという話をされました(油断していた)。このままだとアカデミックなポジションで最終的にどこにも通らない可能性がありえるので(公募の時期も一般的に遅いので)、先に企業の研究職を受けようということで人づてにウェブ系?の国内企業の選考を1社受けました。6月上旬くらいから話をして3回くらい面接をして8月上旬に内定をもらいました(でもテーマ的に大学でがんばったほうが良いのではと心配していただきました)。他の企業も考えましたが、どうにも難しそうだったので結局受けませんでした。アカデミックなポジションについては、条件としては現職の研究所が国内ではもっとも良いように見えたのですが、それゆえ非常に選考が厳しいらしく期待していませんでした。6月下旬に応募締切で8月上旬に面接があり、最終的に内定が確定したのは11月の頭くらいでした。その他は大学の助教や別の研究所の研究員なども公募を教えていただきましたが、結局応募はしない形で終わりました(様々な方に親身に相談に乗っていただきました。ありがとうございました)。それでも国内だけで燻ぶったりせずにがんばろうということで、その後アメリカの研究者と夏に共同研究やろうという話も立ってビザの申請を始めていたところだったのですが、この情勢で渡航中止になってしまいました。しょうがないけど残念。

 博士論文。イントロを書き、関連研究パートは2017年後半に書いて失敗したサーベイ論文を再利用、修論で微妙にまとまりきらなかった1本と博士課程中の2本の論文がメインで、最後に議論パート( position paper としてまとめて ACL2020 に投稿しましたが rejected でした。どうしようかな)を書いて足しました。気持ちとしてはロングペーパー5本分くらい(そのうちちゃんとどこかに採択されているのは3本分)で構成されている感じです。基本的に同じテーマを執拗に続けていたので、一貫した起承転結にまとめるのはそこまで大変ではなかった気がします。いやどうなんだろう、意味もなく苦しかった気はする。少なくともエピグラフを考える心の余裕はありませんでした。論文の提出は12月頭で、そこからいろいろ発表したり審査のスライドを作ったりして、12月末〜1月上旬に審査の先生に個別に説明に行き、1月中旬に本審査という感じでした。 論文スライドです。本審査が終わってすぐに PS4 を買い、国際会議に発表に行った以外は3月中旬くらいまで基本的にずっと家でゲームをしていました(気付いたら世界が滅んでいた)。

ちゃんと説明するために

 博士論文の議論パートでは、読解とは何であるか・それをどのように測るべきか(測定の妥当性をどう確保するか)、について勉強したことをまとめました。「何であるか」については心理学における text comprehension 、とくに situation model の話。「どう測るか」は心理測定学における validity の話を勉強しました。話題そのものはふわっとしており、自然言語処理の文脈で実証的に研究を進めることに直接の示唆を与えるものではないのですが(だから査読で不評だったようで……)、なるほどこういうことを考えるよねという勉強になりました。たとえば後者について、 Messick (1989) の construct validity の議論では妥当性を構成する側面を6種類挙げて論じています(それぞれが読解のタスクの何に相当するかなどを書きました)。そういえば、さいきん因果推論(効果検証)の話を少しだけ読んでみて思ったのですが、 randomized controlled trial は機械学習モデルへの介入の検証には使えるんですよね(特に推論時の入力の特徴の部分集合の寄与)。同じ気持ちで学習データの影響について解釈を試みる話はここ数年で出てきていると思いますが、どれくらい推定がうまくいくのかちょっとよくわかっていません([1703.04730] Understanding Black-box Predictions via Influence Functions とか)。また instance レベルで入力の部分集合の重要度を推定する話もありますが([1802.07814] Learning to Explain: An Information-Theoretic Perspective on Model Interpretation とか)、言語理解のタスクの文脈でどれほど使える話なのかもまだ考えきれていません。

 いずれにせよこの「自然言語理解における説明」については、自然言語処理的には(人間相手に取り組むよりも)もうすこし形式的な話ができるはずだと思っています。今まで自分は「何であるか」について能力を単位とする分類で見通しを良くすることを提案していました。この能力の定義は厳密でなく気持ちが強いので、入出力の情報の型や最低限必要な処理で形式的な分類を与えたい気がします。ただ内部的にどのような処理を行うかについては立ち入らないようにしたいのと、形式的な表現が難しい処理も存在するように思われるので、言うは易しで一筋縄ではいきません。「どう測るか」については、そもそも入力の情報のどの部分が真に正答を導くかについて特定しなければ「何であるか」を確定させることができません。しかしその特定は簡単ではなく、理想的には入力情報の部分集合のすべての介入を検証しなければならないかもしれません。しかも正答から誤答へのある種の counterfactual も考える必要がありそうなので、単純なクラウドソーシングのデザインではうまくいかないように思えます。対して、昨年の記事(再掲)でも触れたのですが、問題形式を工夫することで理解をなるべく細かく説明できるようにする手段もありえます。アイディアとしてはそっちのほうがストレートなので、今後はそのような方針のデータセットが増えると思われます。そうした精緻化を経て初めてシステムができることについてある程度の説明を与えることができ、振る舞いの検証や未知のデータに対する予測が可能になりそう、という感じです(タスク的な観点からのデータセット間の距離を測れたらよさそう、というのはずっと考えています)。しかしよくよく考えてみると未知のデータについて形式的な分析ができるならその時点で「解ける」気もするので、未知のデータについて〜のくだりは転倒している気がしなくもないです。「解けない」問いについて「解けない理由」が説明できるならほぼ答えがわかっているようなものな気がしますが、「何がわかれば解けるか」という意味での知識の補完をやる話は知識ベース的な semantic parsing / question rewriting みたいな文脈では存在するはずなので、 unstructured text から問いに答える流れと合流していって進展があるかもしれないです。その他もうちょっと真面目な議論と関連研究に興味のある方は議論の論文(再掲)を眺めていただければ嬉しいです。

気持ち

 自分は自然言語理解について理論と呼べるものがちゃんと立ってほしいと思っています。それは何かなるべく意義のあるものが残ってほしいという高慢な願いなわけですが、しかし何についての理論が立ち得るのかいまいち判然としません。そもそも自分がこれまで取り組んできたのは「言語理解とは具体的に何であるか」というよりも「複雑で多様な過程を含む振る舞いの評価をどのように行うか」である気がしてなりません。言語理解と呼んでいるものの内実に踏み込めていない・どのような踏み込み方をするのが自分の納得につながるのかわからない、というのが現状の自分の(おそらく致命的な)課題です。「具体的に何であるか」の説明はひとまず人間の認知的な機構に対応付けたほうがよいと思っていますが、どのレイヤーの何にどう対応付けるのが良さそうかもわかりません。少なくとも感じているのは、(これも博士論文の審査で答えて印象に残っていることなのですが、)その理論が何らかの公理から数理的な体系を積み上げるようなものになりえない以上(言い回しは適切ではない)、それらしい概念を組み合わせて共同体の構成員の合意のもとで練り上げる形になりそうだということです。強迫的かもしれませんが、それを目指さなければ「わかっていることの総量」という観点から自分に何が残せるのだろうかと感じます。

最後に

 このような記事を書くのはこれで最後にしようかなと思っていますが、引き続き自分がやったことの発信を論文だけではない何らかの形でしていくつもりでいます。粛々とやっていきますが、任期もありますし、生き残れるかすごく不安です(このご時世ですし)。共同研究などのお誘いもお気軽にお願いします。