ラベルなしデータだけでも高い精度で文法誤り訂正ができるLM-Criticの紹介

こんにちは。 リサーチャーの勝又です。 私はレトリバで自然言語処理、とくに要約や文法誤り訂正に関する研究の最新動向の調査・キャッチアップなどを行っております。

今回の記事では、LM-Critic: Language Models for Unsupervised Grammatical Error Correction.を紹介します。 この論文では、提案手法を用いることで、ラベルなしデータだけで文法誤り訂正が高い精度で達成できることが報告されています。

紹介論文の概要

今回紹介する論文は文法誤り訂正と呼ばれるタスクに関するものです。 文法誤り訂正は、主に言語学習者支援を目的として研究されているタスクです。 入力として誤りを含む文を想定し、この誤り文を文法的に正しく、より流暢なものに訂正する問題設定となっています。 たとえばThis is pen.が入力されたとき、This is a pen.のように、この例の場合でしたら冠詞に関する誤りを訂正できたら正解となります。

文法誤り訂正では、学習データとして前述のような誤り文と訂正文の対のデータが必要です。 今回紹介する論文では、ラベルなしデータ、つまりクローリングなどで取得できるテキストデータから既存の手法より精巧な手法で擬似的な学習データを作成します。 この擬似的な学習データを用いることで既存の誤り訂正システムより高い精度を達成できたとのことです。

今回の記事では上記内容について順を追って紹介します。

文法誤り訂正の学習データについて

多くの研究では、ニューラルネットワークを使って文法誤り訂正を行います。 ニューラルネットワークは精度が高い反面、大量の学習データが必要になります。 しかしながら、前述のような誤り文と訂正文の対を用意するのはかなり手間がかかります。

そこで、近年の研究では擬似的な学習データを作成し、そのデータを用いて文法誤り訂正モデルを作成することが多く行われています。 誤り文と訂正文の対のデータ(以下、本物の学習データと呼称)が使用可能であれば、最初に擬似的な学習データを用いて文法誤り訂正モデルを事前学習した後、本物の学習データでfine-tuningを行うことで高い精度が得られます。 また、本物の学習データが使用できない場合、擬似的な学習データのみを用いた文法誤り訂正モデルでも誤った文を正しい文に訂正できることが報告されています。

この擬似的な学習データの作り方にはいくつか種類があるので簡単に紹介します。

もっとも単純なものとしては、ラベルなしデータすべてが正しい文として考えて、その文に対して人工的に誤りを付与する方法1です。 たとえばI am a student.といった文がラベルなしデータにあったとして、ランダムに文中の文字や単語に置換や挿入、削除の操作を行いI have a sudent.のような誤り文を作成します。 この例のように、この誤り文の作成方法では誤り文としても現実に存在しないものが生まれることが多いのですが、それでも、この擬似的な学習データを用いることで文法誤り訂正の精度が改善することが報告されています。

また、他にも本物のデータの入出力をひっくり返して、訂正文を入力、誤り文を出力とした誤り生成モデルを学習し、そのモデルを用いてラベルなしデータの各文から対応する誤り文を作成する方法2も存在します。 こちらの論文によると前述の人工的な誤り付与よりは、この誤り生成モデルを用いて作成した擬似的な学習データの方が文法誤り訂正の精度を向上させるとのことです。

今回紹介する論文でも、同様にして擬似的な学習データを作成しています。 この擬似的な学習データに追加して、さらに別の手法を用いて、より現実的な擬似学習データを作成し、高い訂正精度を達成しました。

BIFIとLM-Critic

BIFI

この論文ではBIFI(Break-It-Fix-It)3と呼ばれる手法を用いて文法誤り訂正モデルを作成します。 このBIFIはラベルなしデータを元に、より現実的な擬似学習データを作成し、訂正モデルの学習を行う手法です。 BIFIは主に次の3つのモデルを用います。

  1. Critic
  2. Fixer
  3. Breaker

Criticは入力が文になっていて、その文が文法的に正しいか間違っているかの2値分類を行います。 また、Fixerは入力が誤り文、出力が訂正文、つまり誤り訂正モデルで、Breakerはその逆の誤り生成モデルとなっています。

BIFIは次のようにして学習を行います。

まずはラベルなしデータから、前述した人工誤りを利用した擬似学習データを用意し、それを用いてFixerを学習します(ラベルありデータを使用していい場合は、そのデータを使います)。 また、Criticを用いてラベルなしデータの各文が文法的に正しいかD _ {good}、誤っているかD _ {bad}を分類します。

その後、D _ {bad}に対して先ほど学習したFixerを用いて訂正を行い、D _ {bad}の各文に対応する訂正文を作成します。 この訂正文をそれぞれCriticに入力して、文法的に正しかった場合、対応する誤り文との対を残しますP^{fixer}。 このP^{fixer}は誤り文側はラベルなしデータが由来のデータで、訂正側がFixerで作成したものになります。 このデータを用いて誤り生成モデルであるBreakerを学習します。

次は上記の逆を行い、再度Fixerを作成します。 つまり、D _ {good}に対して先ほど学習したBreakerを用いて誤りを生成し、D _ {good}の各文に対応する誤り文を作成します。 この誤り文をそれぞれCriticに入力して、文法的に誤っていた場合、対応する訂正文との対を残しますP^{breaker}。 このデータP^{breaker}と、先ほど作成したP^{fixer}を利用して、再度Fixer _ {next}を学習します。 作成したFixer _ {next}を用いてD _ {bad}から訂正文を作り...といったように、この処理はループさせることが可能です。

この手法の肝は、Criticを用いることでラベルなしデータや作成した擬似的な訂正文、誤り文が本当に文法的に正しいのか、誤っているのかを区別している点です。 つまりこの手法はCriticを用いることで、できる限り現実的なデータセットを作成するようにしています。

LM-Critic

BIFIはCriticが重要な構成要素であることがわかりました。 それではどのようにCriticを作成すると良いのでしょうか。

一番簡単な方法は、本物の学習データを利用することです。 本物の学習データの各文を利用して、ある文が入力された時にその文の正誤を分類させれば良い...のですが、この方法は本物の学習データが必要になってしまいます。

そこで、この論文では本物の学習データを使用しない方法でCriticを用意しました。 具体的にはGPT24を利用し、言語モデルのスコアを元に、入力された文の正誤を判定しました。 この言語モデル(Language Model; LM)を用いたCriticを使用した、ということで今回のCriticはLM-Criticと呼称されています。

では、どのようにGPT2を用いて文の正誤を推定しているのでしょうか。 一番単純な方法は、入力された文に対してGPT2を用いてその文の確率を算出し、その確率が定めた閾値を超えた場合は正しい文、下回った場合は誤った文とすることです。 しかしながら、これは著者たちの事前実験ではうまくいかなかったとのことです。

そこで、この論文では別の方法を用いて文の正誤を判定しています。 具体的には、ある入力文に対して文字単位や単語単位の人工的なノイズを付与し、入力文についていくつかのバリエーション文を作成しました。 その後、入力文とそのバリエーション文すべてに対してGPT2を用いて文の確率を算出し、入力文の確率がもっとも高い場合は入力文が正しく、そうでない場合、入力文は誤っていると判定します。 この方法を用いた場合、正しい文の推定、誤り文の推定のどちらの場合でも閾値を用いた判定よりも高い精度を達成しました。

BIFIとLM-Criticを使った実験結果

ラベルなしデータのみの場合

ラベルありデータ、つまり本物の学習データは使用せず、ラベルなしデータのみで文法誤り訂正を行った結果が次の表となります。

f:id:ssskkk420:20210927201253p:plain
表1: ラベルなしデータのみの文法誤り訂正実験結果。表は紹介論文から引用。

論文では4つのデータセットで実験をしていて、一番上のTransformer5がラベルなしデータに対して人工的な誤りを付与して作成した擬似学習データで作成した訂正モデルとなっています。 この表から、どのデータセットについてもLM-Criticを利用したBIFIの精度がもっとも高いことがわかります。

ラベルありデータを使用する場合

論文ではラベルありデータを使用した場合についても実験をしていて、その結果が次の表となっています。

f:id:ssskkk420:20210927201436p:plain
表2: ラベルありデータを使用した文法誤り訂正実験結果。表は紹介論文より引用。

こちらは2つのデータセット(先ほどの表1のBEA-2019は開発データに対する結果でしたが、こちらは評価データに対する結果です)で実験をしています。 既存の手法でもっとも精度が高いGECToRをFixerとして、BIFIを用いることでさらに精度が改善していることがわかります。

まとめ

今回の記事では、ラベルなしデータのみで文法誤り訂正において高い性能を達成したBIFI + LM-Criticについて紹介しました。 このように、著者の提案手法BIFI + LM-Criticはあくまで擬似学習データ作成手法であり、任意のFixerを組み合わせることができる点でとても興味深いと感じました。

これまでの擬似学習データは、現実にとても存在するようなデータではなく、もっと現実的な擬似学習データを作成する方法はないか気になっていたため6、このような手法が出てきて大変面白かったです。 この擬似学習データ作成の分野についてはすごく興味があり、今回のように本物の学習データがなくても高い性能を出せることはとても重要なので今後の発展を期待したいです。


  1. Parallel Iterative Edit Models for Local Sequence Transduction. Abhijeet Awasthi, Sunita Sarawagi, Rasna Goyal, Sabyasachi Ghosh, Vihari Piratla. [paper]

  2. An Empirical Study of Incorporating Pseudo Data into Grammatical Error Correction. Shun Kiyono, Jun Suzuki, Masato Mita, Tomoya Mizumoto, Kentaro Inui. [paper]

  3. Break-It-Fix-It: Unsupervised Learning for Program Repair. Michihiro Yasunaga, Percy Liang. [paper]

  4. Language Models are Unsupervised Multitask Learners. Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, Ilya Sutskever. [paper]

  5. Attention Is All You Need. Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin. [paper]

  6. Grammatical Error Correction Using Pseudo Learner Corpus Considering Learner’s Error Tendency. Yujin Takahashi, Satoru Katsumata, Mamoru Komachi. [paper]