概要
文法誤り訂正に関して思うところをつらつらと書きます。
アドベントカレンダーを書いてみて
色々とこの10年を振り返ることができたので、参加してとても良かったです。先日のGECのタスク説明はなぜ難しいのかという記事によくまとまっていますが、「文法誤り訂正」というタスクは(当初は文法誤りのみを対象としていたのに対し)変遷を遂げました。この10年を振り返ってみて、実は昔のメールを読み返したら特に自分も「文法誤り訂正」とは書いておらず(他の人もそうは書いていなくて)、名前が決まったら多くの人が研究するようになったのかな、と思ったりしました。あるいは、深層学習の登場以降に研究を始めた人は深層学習以前の研究はあまり追わない、ということかもしれませんが、これにはいい面悪い面両方あると思うので、一概に悪いことだとは考えていません(ちなみに「文法誤り訂正」タスクであれば、深層学習以前以後より Lang-8 登場以前と以後で分かれている気がします)。
あと、色々な人が GEC アドベントカレンダーに寄稿していて、話題の豊富さや人材の多様さに驚くとともに、一読者としても楽しく読ませてもらいました。うちの研究室の人はもっと書けるんじゃないかと思っていましたが、最初あまり埋まっていなかったのでたくさん埋めてしまいましたが、最終的には在学生・卒業生(修士、博士)とそれぞれの立場の人が書いてくれたので、よかったです。
GEC の現状
この分野の研究に取り組みはじめたときは、文法誤り訂正の精度はかなり低く、しばらく研究フェーズかと思っていましたが、参加者が少なかっただけで、共通タスクとして設定されてからは参入者が一気に増え、あれよあれよという間に訂正精度が上がりました。訂正精度が高いというのはどういう意味があるのか?という問題意識も考える必要のあることですが、英語の GEC に関しては、ほぼ研究フェーズを離れて開発フェーズに移行しつつある、という気がしています。日本語入力(かな漢字変換)も、昔は「そんなことは不可能だ(アルファベットはともかく漢字をコンピュータに表示させるだけでも難しい)」と思われていたタスクなのですが、今や日本語入力が不可能だと思っている人はおらず、幼稚園児でも使いこなしている子がいるくらい普及しています。(狭義の)文法誤り訂正は、遅かれ早かれそういう技術になると思っています(音声入力も同様だと考えています)。
では、どういうタスクができるようになるか?ということですが、入力と出力が文で、ほぼ同じ長さで、かつ文内の情報だけで解けるような問題は、遅かれ早かれ解けるようになる、と考えています。なぜそう考えるか、理由はいくつかあります。まず、入力が文である、というのは、文に対するマスク言語モデルを使って事前学習したエンコーダを用いることができる、ということです。入出力がほぼ同じ長さ、というのは、Transformer を用いたエンコーダ・デコーダでパターン同士の変換が学習できる、ということです(入出力がほぼ同じ長さのタスクの場合は、自然なタスクだと基本的には monotone つまり先頭からほぼ順番にアラインメントが取れるタスクになっている、というのもあります)。そして、文内の情報だけで解ける、というのは、事前学習モデルが文内の情報だけしか使えない(かつ文内の分布仮説に基づいて学習されている)ので、文外の情報を参照するようなタスクは(データのマジョリティに従って偶然解けることはあり得ますが)原理的に解けない、ということです。GEC に関しては上記のように入出力が文であり、かつほぼ同じ長さで、そして狭義の GEC は文内の情報で解けるものが大半なので、解けるタスクである、と思っています(広義の GEC はその限りではありません)。
GEC のその先へ
GEC 研究に取り組み始めて10年になりますが、GEC の範囲を拡大して研究のフロンティアを探すより、2つの方向で研究を発展させたいと考えています。自分(たち)がやらなくてもいいので、他の人がやってくれてもいいかなあと思ってここに書いてみます。
一つは、GEC で得た知見を他の研究に活用する、という取り組みです。フレーズベースの統計的機械翻訳を可算名詞の誤り検出に適用する、という研究を2006年にやった Chris Brockett さんは、自分が Microsoft Research でインターンシップをしていた時 (2007年) に同じグループにいましたが、当時の MSR は統計的機械翻訳そのものの研究はかなり閉塞感があり、社内でツールとして使えるようになっていた(開発的には使いやすくなっていた)フレーズベース SMT を他のタスクに適用する、というのが流行っていた、と聞きました(ご本人から直接聞いたのではなく、インターンのメンターであった鈴木久美さんから聞いたかもしれません)。機械翻訳のように明らかにメジャーなタスクと比べると GEC はマイナーなタスクだとは思いますが、まだ GEC で学んだ(MT とも微妙に違う)知見が役に立つことがありそうに思っています。
もう一つは(言語)学習者の誤り方自体に関する分析で、どうも自然に発生する誤りというのは擬似的な誤りと違う振る舞いを示しているようで、何が違って何が同じであるか(疑似誤りを生成する際、何が本質的な情報なのか)、ということを深掘りしたいです。古くは単語分散表現の学習で negative sampling といって擬似負例を選択していて、最近は対照学習といって擬似負例を選択していますが、どのように擬似負例を選択すればいいのか、ということに興味があります(直観的には本物の負例っぽいものを用意した方が良さそうなのですが、どうやらそうでもないようなのです)。特に事前学習のときの擬似負例の作成方法(事前学習の手法とも関係)と、それぞれのタスクの関係、それが深層学習のアーキテクチャとどのような関係にあるのか、ということが気になっています。Transformer が出現したとき、ある程度ニューラルな意味づけのできる LSTM と異なり、こんな構造のものが NLP でうまく行くのは変だ、どうせ三日天下だろう、みたいに自分は考えていたのですが(深層学習についても最初は同じように考えていたので、どうやら自分の直観はあまりあてになりません)、どうやらそうではなくて Transformer は他のアーキテクチャと異なることができるようだと今は考えています。ただ、どこが Transformer に特異な部分か(他の手法と異なり、Transformer でなければならない部分か)、というのがよく分かっていないなあ、と感じています。最近は検索ベースの手法も復権したりして、これはまた類似度(カーネル)が注目されたりするのでは、と期待していたりします。
まとめ
1ヶ月 GEC ネタを毎日見ることができて楽しかったです。@gotutiyanさん@chemical_treeさん、企画ありがとうございました!