이 repo는 우리 논문의 소스 코드 및 데이터를 제공합니다 : 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 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를 사용합니다. 오류는 위에서 설명한 콘다 환경 (errant200)에 설정되며 M^2Scorer는 다운로드 스크립트에 설정됩니다.