Этот репо содержит исходный код и данные нашей статьи: LM-критика: языковые модели для неконтролируемой коррекции грамматической ошибки (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 . Вы можете играть с этим критиком LM, как описано в разделе 1. Ниже. Идея состоит в том, чтобы считать предложение быть грамматическим, если языковая модель присворует ему более высокую вероятность, чем кандидаты в его местном районе.
Затем мы используем LM-критику для генерации обучающих данных для грамматической коррекции ошибок (GEC) из немеченых необработанного текста, используя алгоритм BIFI. Это позволяет нам обучать модели GEC неконтролируемым образом. См. Раздел 2. Ниже.
Как работает LM-критик

LM-критик для GEC : мы используем LM-критику для изучения моделей 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.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-критика в тестовом наборе, запустите:
CUDA_VISIBLE_DEVICES=0 python3 eval_critic/eval_critic.py Вы можете импортировать функцию критики LM ( from critic.critic import gpt2_critic ) для вашего собственного кода, как это сделано в этом сценарии.
Измените рабочий каталог на gec/ . Во -первых, загрузите все данные (контрольные показатели GEC и учебные данные), запустив ./download_data.sh .
Здесь мы тренируем первоначальный фиксатор на синтетических данных 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^2 -stercer. Ошибка установлена в среде Conda, описанной выше (Errant200), а M^2 -stercer установлен в сценарии загрузки.