このレポは、私たちの論文のソースコードとデータを提供します:LM-Critic:監視されていない文法エラー補正の言語モデル(EMNLP 2021)。
@InProceedings { yasunaga2021language ,
author = { Michihiro Yasunaga and Jure Leskovec and Percy Liang } ,
title = { LM-Critic: Language Models for Unsupervised Grammatical Error Correction } ,
year = { 2021 } ,
booktitle = { Empirical Methods in Natural Language Processing (EMNLP) } ,
}前処理された言語モデル(GPT2など)を使用して、文が文法的であるかどうかを予測する新しい方法を開発しました。以下のセクション1で説明されているように、このlm-criticで遊ぶことができます。言語モデルが地元の地域の候補者よりも高い確率を割り当てた場合、文は文法的であると判断することです。
次に、LM-Criticを使用して、BiFiアルゴリズムを使用して、無効な生のテキストから文法エラー補正(GEC)のトレーニングデータを生成します。これにより、監視されていない方法でGECモデルをトレーニングできます。以下のセクション2を参照してください。
lm-criticがどのように機能するか

GECのLM-Critic :LM-Criticを使用してGECモデルを学習します

次のコマンドを実行して、コンドラ環境を作成します(Cuda10.1を仮定):
conda create -n lm-critic python=3.8
conda activate lm-critic
pip install torch==1.6.0 torchvision==0.7.0
pip install transformers==4.3.3 datasets==1.3.0 absl-py rouge-score
pip install nltk wandb editdistance spacy==3.0.5
python3 -m nltk.downloader punktGEC評価に誤った得点者を使用するには、次のように別のコンドラ環境を個別に作成します。
conda create -n errant200 python=3.6
conda activate errant200
pip3 install errant==2.0.0
python3 -m spacy download enLM-Criticはcritic/critic.pyで定義されています。それで遊ぶには、実行できます:
CUDA_VISIBLE_DEVICES=0 python3 critic/critic.pyこれにより、文の入力が促され、入力文の確率スコアとともに判断(Good:Grammatical、Bad:非文法的)を返します。例えば、
Enter a sentence: I like apple.
Bad! Your sentence log(p) = -22.333
Neighbor sentence with highest log(p): I like apples. (= -19.570)
Enter a sentence: I like apples.
Good! Your sentence log(p) = -19.570
テストスイートでLM-Criticの固有の評価を実行するには、実行してください。
CUDA_VISIBLE_DEVICES=0 python3 eval_critic/eval_critic.pyこのスクリプトで行われているように、独自のコードにLM-Critic関数( from critic.critic import gpt2_critic )をインポートできます。
作業ディレクトリをgec/に変更します。まず、 ./download_data.shを実行して、すべてのデータ(GECベンチマークとトレーニングデータ)をダウンロードします。
ここでは、合成GECデータに関する最初のフィクサーをトレーニングします。 src/run-round0.shでコマンドを実行します。
data/round0__synthetic/synthetic_paired_data_9M.jsonで入手できますここでは、BiFiアルゴリズムと非標識テキストデータを使用して、改良されたフィクサーをトレーニングします。 src/run-round1.shでコマンドを実行します。
data/round1__BIFI/BIFI_paired_data_9M.jsonで入手できます評価には、誤ったものとm^2scorerを使用します。上記のConda環境(Errant200)に誤りが設定され、M^2Scorerがダウンロードスクリプトに設定されています。