Repo ini menyediakan kode sumber & data dari makalah kami: LM-CRITIC: Model bahasa untuk koreksi kesalahan tata bahasa tanpa pengawasan (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) } ,
}Kami mengembangkan metode baru untuk menggunakan model bahasa pretrained (misalnya GPT2) untuk memprediksi apakah suatu kalimat bersifat tata bahasa, yang kami sebut LM-Critic . Anda dapat bermain dengan LM-Critic ini seperti yang dijelaskan dalam Bagian 1. Di bawah ini. Idenya adalah untuk menganggap kalimat sebagai tata bahasa jika model bahasa memberikan probabilitas yang lebih tinggi daripada kandidat di lingkungan setempat.
Kami kemudian menggunakan LM-Critic untuk menghasilkan data pelatihan untuk koreksi kesalahan tata bahasa (GEC) dari teks mentah yang tidak berlabel, menggunakan algoritma bifi. Ini memungkinkan kami untuk melatih model GEC dengan cara yang tidak diawasi. Lihat Bagian 2. Di bawah ini.
Bagaimana LM-Critic bekerja

LM-CRITIC UNTUK GEC : Kami menggunakan LM-Critic untuk mempelajari model GEC

Jalankan perintah berikut untuk membuat lingkungan Conda (dengan asumsi 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 punktUntuk menggunakan pencetak gol terberat untuk evaluasi GEC, buat lingkungan Conda lain secara terpisah, sebagai berikut:
conda create -n errant200 python=3.6
conda activate errant200
pip3 install errant==2.0.0
python3 -m spacy download en LM-Critic didefinisikan dalam critic/critic.py . Untuk bermain dengannya, Anda dapat menjalankan:
CUDA_VISIBLE_DEVICES=0 python3 critic/critic.pyIni akan mendorong Anda untuk input kalimat, dan mengembalikan penilaian (baik: tata bahasa, buruk: tidak kuas) bersama dengan skor probabilitas kalimat input. Misalnya,
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
Untuk menjalankan evaluasi intrinsik LM-Critic pada test suite, jalankan:
CUDA_VISIBLE_DEVICES=0 python3 eval_critic/eval_critic.py Anda dapat mengimpor fungsi kritik LM ( from critic.critic import gpt2_critic ) untuk kode Anda sendiri seperti yang dilakukan dalam skrip ini.
Ubah direktori kerja ke gec/ . Pertama, unduh semua data (tolok ukur GEC dan data pelatihan) dengan menjalankan ./download_data.sh .
Di sini kami melatih fixer awal tentang data GEC sintetis. Jalankan perintah di src/run-round0.sh .
data/round0__synthetic/synthetic_paired_data_9M.json Di sini kami menggunakan algoritma BIFI dan data teks yang tidak berlabel untuk melatih fixer yang lebih baik. Jalankan perintah di src/run-round1.sh .
data/round1__BIFI/BIFI_paired_data_9M.jsonUntuk evaluasi, kami menggunakan ERRANT dan M^2Scorer. Errant diatur dalam lingkungan CONDA yang dijelaskan di atas (errant200) dan m^2Scorer diatur dalam skrip unduhan.