Este repositorio proporciona el código fuente y los datos de nuestro documento: LM-Critic: Modelos de lenguaje para la corrección de errores gramaticales no supervisados (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) } ,
}Desarrollamos un nuevo método para utilizar un modelo de lenguaje previamente pracricado (por ejemplo, GPT2) para predecir si una oración es gramatical, que llamamos LM-Critic . Puedes jugar con este LM-Critic como se describe en la Sección 1. A continuación. La idea es considerar que una oración es gramatical si el modelo de idioma le asigna una probabilidad más alta que los candidatos en su vecindario local.
Luego usamos el LM-Critic para generar datos de entrenamiento para la corrección de errores gramaticales (GEC) del texto sin procesar sin etiquetar, utilizando el algoritmo BIFI. Esto nos permite entrenar modelos GEC de manera no supervisada. Consulte la Sección 2. A continuación.
Cómo funciona LM-Critic

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

Ejecute los siguientes comandos para crear un entorno de conda (suponiendo 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 el anotador errante para la evaluación de GEC, cree otro entorno de conda por separado, de la siguiente manera:
conda create -n errant200 python=3.6
conda activate errant200
pip3 install errant==2.0.0
python3 -m spacy download en El LM-Critic se define en critic/critic.py . Para jugar con él, puedes correr:
CUDA_VISIBLE_DEVICES=0 python3 critic/critic.pyEsto le impulsará una entrada de oración y devuelve el juicio (bueno: gramatical, malo: no gramatical) junto con el puntaje de probabilidad de la oración de entrada. Por ejemplo,
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 ejecutar una evaluación intrínseca de LM-Critic en un conjunto de pruebas, ejecute:
CUDA_VISIBLE_DEVICES=0 python3 eval_critic/eval_critic.py Puede importar la función Criticica LM ( from critic.critic import gpt2_critic ) para su propio código como se hace en este script.
Cambie el directorio de trabajo a gec/ . Primero, descargue todos los datos (puntos de referencia GEC y datos de capacitación) ejecutando ./download_data.sh .
Aquí entrenamos un fijador inicial sobre los datos sintéticos de GEC. Ejecute los comandos en src/run-round0.sh .
data/round0__synthetic/synthetic_paired_data_9M.json Aquí usamos el algoritmo BIFI y los datos de texto sin etiquetar para entrenar un fijador mejorado. Ejecute los comandos en src/run-round1.sh .
data/round1__BIFI/BIFI_paired_data_9M.jsonPara la evaluación, utilizamos Errant y M^2Scorer. Errant se configura en el entorno CondA descrito anteriormente (Errant200) y M^2Scorer se configura en el script de descarga.