Este repositório fornece o código-fonte e os dados do nosso artigo: LM-Critic: Modelos de idiomas para correção de erro gramatical não supervisionado (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) } ,
}Desenvolvemos um novo método para usar um modelo de idioma pré-treinado (por exemplo, GPT2) para prever se uma frase é gramatical, que chamamos de LM-crítico . Você pode brincar com este LM-crítico, conforme descrito na Seção 1. Abaixo. A idéia é considerar uma frase como gramatical se o modelo de idioma atribuir uma probabilidade mais alta do que os candidatos em seu bairro local.
Em seguida, usamos o LM-crítico para gerar dados de treinamento para correção de erro gramatical (GEC) do texto bruto não marcado, usando o algoritmo BIFI. Isso nos permite treinar modelos GEC de uma maneira não supervisionada. Consulte a Seção 2. Abaixo.
Como funciona o LM-crítico

LM-CRITIC para GEC : Usamos LM-Critic para aprender modelos GEC

Execute os seguintes comandos para criar um ambiente de conda (assumindo 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 punktPara usar o artilheiro errante para avaliação do GEC, crie outro ambiente do CONDA separadamente, como segue:
conda create -n errant200 python=3.6
conda activate errant200
pip3 install errant==2.0.0
python3 -m spacy download en O crítico de LM é definido em critic/critic.py . Para brincar com ele, você pode correr:
CUDA_VISIBLE_DEVICES=0 python3 critic/critic.pyIsso solicitará uma entrada de frase e retornará o julgamento (bom: gramatical, ruim: não gramatical) junto com a pontuação de probabilidade da sentença de entrada. Por exemplo,
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
Para executar a avaliação intrínseca do LM-crítico em uma suíte de teste, execute:
CUDA_VISIBLE_DEVICES=0 python3 eval_critic/eval_critic.py Você pode importar a função Crítica LM ( from critic.critic import gpt2_critic ) para seu próprio código, conforme feito neste script.
Altere o diretório de trabalho para gec/ . Primeiro, faça o download de todos os dados (Benchmarks GEC e dados de treinamento) executando ./download_data.sh .
Aqui treinamos um fixador inicial em dados sintéticos do GEC. Execute os comandos em src/run-round0.sh .
data/round0__synthetic/synthetic_paired_data_9M.json Aqui, usamos o algoritmo BIFI e os dados de texto não marcados para treinar um fixador aprimorado. Execute os comandos em src/run-round1.sh .
data/round1__BIFI/BIFI_paired_data_9M.jsonPara avaliação, usamos Errant e M^2Scorer. Errant é configurado no ambiente do CONDA descrito acima (errant200) e M^2Scorer está configurado no script de download.