repo นี้ให้ซอร์สโค้ดและข้อมูลของบทความของเรา: 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-critic นี้ตามที่อธิบายไว้ในส่วนที่ 1 ด้านล่าง แนวคิดคือการเห็นว่าประโยคเป็นไวยากรณ์หากแบบจำลองภาษากำหนดความน่าจะเป็นที่สูงกว่าผู้สมัครในพื้นที่ใกล้เคียงในท้องถิ่น
จากนั้นเราใช้ LM-Critic เพื่อสร้างข้อมูลการฝึกอบรมสำหรับการแก้ไขข้อผิดพลาดทางไวยากรณ์ (GEC) จากข้อความดิบที่ไม่มีป้ายกำกับโดยใช้อัลกอริทึม BIFI สิ่งนี้ช่วยให้เราสามารถฝึกอบรมรุ่น GEC ในแบบที่ไม่ได้รับการดูแล ดูส่วนที่ 2 ด้านล่าง
LM-Critic ทำงานอย่างไร

LM-Critic สำหรับ GEC : เราใช้ LM-Critic เพื่อเรียนรู้แบบจำลอง 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/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สำหรับการประเมินผลเราใช้ Errant และ M^2Scorer Errant ถูกตั้งค่าในสภาพแวดล้อม conda ที่อธิบายไว้ข้างต้น (Errant200) และ M^2Scorer ถูกตั้งค่าในสคริปต์ดาวน์โหลด