該回購提供了我們論文的源代碼和數據: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)來預測句子是否是語法,我們稱之為LM-Critic 。您可以按照下面的第1節中所述使用此LM-Critic。如果語言模型比本地社區中的候選人分配了更高的概率,那麼想法是將句子視為語法。
然後,我們使用LM-Critic使用BIFI算法從未標記的原始文本生成訓練數據,以進行語法誤差校正(GEC)。這使我們能夠以無監督的方式訓練GEC模型。請參閱下面的第2節。
LM-Critic的工作原理

GEC的LM-Critic :我們使用LM-Critic學習GEC模型

運行以下命令來創建CONDA環境(假設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 punkt要使用錯誤的得分手進行GEC評估,請分別創建另一個CONDA環境,如下:
conda create -n errant200 python=3.6
conda activate errant200
pip3 install errant==2.0.0
python3 -m spacy download en LM-Critic在critic/critic.py中定義。要玩它,您可以運行:
CUDA_VISIBLE_DEVICES=0 python3 critic/critic.py這將提示您獲取句子輸入,並返回判斷(好:語法,壞:不語法)以及輸入句子的概率分數。例如,
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。