يوفر هذا الريبو الكود المصدر وبيانات ورقتنا: 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) للتنبؤ بما إذا كانت الجملة نحوية ، والتي نسميها LM-Critic . يمكنك اللعب مع هذا الانتقاد LM كما هو موضح في القسم 1. أدناه. والفكرة هي اعتبار الجملة أن تكون نحوية إذا قام نموذج اللغة بتعيين احتمال أعلى من المرشحين في حيه المحلي.
نستخدم بعد ذلك LM-Critic لإنشاء بيانات تدريب لتصحيح الخطأ النحوي (GEC) من النص الخام غير المُفصلين ، باستخدام خوارزمية BIFI. هذا يسمح لنا بتدريب نماذج GEC بطريقة غير خاضعة للإشراف. انظر القسم 2. أدناه.
كيف تعمل LM الناقلة

LM-Critic لـ GEC : نستخدم 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 punktلاستخدام هداف خاطئ لتقييم GEC ، قم بإنشاء بيئة أخرى على حدة ، على النحو التالي:
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/ . أولاً ، قم بتنزيل جميع البيانات (معايير 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للتقييم ، نستخدم Mrant و M^2 2scorer. تم إعداد Errant في بيئة Conda الموضحة أعلاه (Errant200) ويتم إعداد M^2corer في البرنامج النصي للتنزيل.