ตัวสร้างคำถามเป็นระบบ NLP สำหรับการสร้างคำถามการอ่านสไตล์ความเข้าใจจากข้อความเช่นบทความข่าวหรือหน้าตัดผมที่ตัดตอนมาจากหนังสือ ระบบถูกสร้างขึ้นโดยใช้โมเดลที่ผ่านการฝึกอบรมจาก Transformers HuggingFace มีสองรุ่น: ตัวสร้างคำถามเองและผู้ประเมิน QA ซึ่งจัดอันดับและกรองคู่ตอบคำถามตามการยอมรับของพวกเขา
สมุดบันทึกการฝึกอบรมได้รับการปรับปรุงด้วยสคริปต์การฝึกอบรม วิ่ง:
python question_generator/training/qg_train.pypython question_generator/training/qa_eval_train.pyHyperParameters สามารถเปลี่ยนแปลงได้โดยใช้อาร์กิวเมนต์ Commandline ดูสคริปต์สำหรับรายการอาร์กิวเมนต์ที่มีอยู่
ชุดข้อมูลได้รับการอัปโหลดไปยัง HuggingFace Hub:
วิธีที่ง่ายที่สุดในการสร้างคำถามบางอย่างคือการโคลน gitHub repo จากนั้นเรียกใช้ qg_run.py เช่นนี้:
git clone https://github.com/amontgomerie/question_generator
cd question_generator
pip install -r requirements.txt -qq
python run_qg.py --text_file articles/twitter_hack.txt
สิ่งนี้จะสร้าง 10 คู่ตอบคำถามแบบผสม (เต็มประโยคและตัวเลือกแบบปรนัย) ตามบทความที่ระบุไว้ใน --text_file และพิมพ์ลงในคอนโซล สำหรับข้อมูลเพิ่มเติมดูสมุดบันทึก QG_CommandLine_example
คลาส QuestionGenerator สามารถสร้างอินสแตนซ์และใช้เช่นนี้:
from questiongenerator import QuestionGenerator
qg = QuestionGenerator ()
qg . generate ( text , num_questions = 10 ) สิ่งนี้จะสร้างคำถาม 10 ข้อของสไตล์ผสมและส่งคืนรายการพจนานุกรมที่มีคู่ตอบคำถาม ในกรณีของคำถามแบบปรนัยคำตอบจะมีรายการพจนานุกรมที่มีคำตอบและค่าบูลีนที่ระบุว่าคำตอบนั้นถูกต้องหรือไม่ เอาต์พุตสามารถพิมพ์ได้อย่างง่ายดายโดยใช้ฟังก์ชัน print_qa() สำหรับข้อมูลเพิ่มเติมดูสมุดบันทึก question_generation_example
จำนวนคำถามที่ต้องการสามารถส่งผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่งโดยใช้ --num_questions หรือเป็นอาร์กิวเมนต์เมื่อโทรหา qg.generate(text, num_questions=20 ถ้าจำนวนคำถามที่เลือกมีขนาดใหญ่เกินไปแบบจำลองอาจไม่สามารถสร้างได้มากพอที่จะลดลง จำนวนคำถามตามที่ผู้ประเมิน QA จัดอันดับคำถามที่สร้างขึ้นและส่งคืนคำถามที่ดีที่สุด
ระบบสามารถสร้างคำถามด้วยคำตอบเต็มประโยค ( 'sentences' ) คำถามที่มีคำตอบแบบปรนัย ( 'multiple_choice' ) หรือการผสมผสานของทั้งสอง ( 'all' ) สิ่งนี้สามารถเลือกได้โดยใช้ --answer_style หรือ qg.generate(answer_style=<style>) อาร์กิวเมนต์
โมเดลตัวสร้างคำถามใช้ข้อความเป็นอินพุตและส่งออกชุดคำถามและคำตอบคู่ คำตอบคือประโยคและวลีที่สกัดจากข้อความอินพุต วลีที่สกัดสามารถเป็นประโยคเต็มหรือเอนทิตีที่มีชื่อที่สกัดโดยใช้เครื่องราง เอนทิตีที่มีชื่อจะใช้สำหรับคำตอบแบบปรนัย คำตอบที่ไม่ถูกต้องจะเป็นเอนทิตีอื่น ๆ ที่พบในข้อความ คำถามถูกสร้างขึ้นโดยการเชื่อมต่อคำตอบที่สกัดด้วยข้อความเต็ม (สูงสุด 512 โทเค็น) เป็นบริบทในรูปแบบต่อไปนี้:
answer_token <extracted answer> context_token <context>
สตริงที่ต่อกันจะถูกเข้ารหัสและป้อนเข้าสู่โมเดลตัวสร้างคำถาม สถาปัตยกรรมแบบจำลองคือ t5-base แบบจำลองที่ผ่านการฝึกอบรมนั้นได้รับการแก้ไขเป็นแบบจำลองลำดับต่อลำดับบนชุดข้อมูลที่สร้างขึ้นเป็นชุดข้อมูล QA ที่รู้จักกันดีหลายชุด (Squad, Race, Coqa และ Msmarco) ชุดข้อมูลถูกปรับโครงสร้างโดยการเชื่อมต่อคำตอบและฟิลด์บริบทเป็นรูปแบบที่กล่าวถึงก่อนหน้านี้ คำตอบและบริบทที่ต่อกันถูกนำมาใช้เป็นอินพุตสำหรับการฝึกอบรมและฟิลด์คำถามกลายเป็นเป้าหมาย
ชุดข้อมูลสามารถพบได้ที่นี่
ผู้ประเมิน QA ใช้คำตอบคำถามเป็นคู่เป็นอินพุตและส่งออกค่าที่แสดงถึงการทำนายว่าอินพุตเป็นคำถามและคำตอบที่ถูกต้องหรือไม่ โมเดลเป็น bert-base-cased ที่มีหัวการจำแนกลำดับ แบบจำลองที่ผ่านการฝึกอบรมนั้นถูกส่งไปยังข้อมูลเดียวกันกับแบบจำลองเครื่องกำเนิดคำถาม แต่บริบทถูกลบออก คำถามและคำตอบถูกต่อกัน 50% ของเวลา ในอีก 50% ของเวลาดำเนินการทุจริต (ไม่ว่าจะเป็นการแลกเปลี่ยนคำตอบสำหรับคำตอบที่ไม่เกี่ยวข้องหรือโดยการคัดลอกบางส่วนของคำถามลงในคำตอบ) จากนั้นโมเดลได้รับการฝึกฝนเพื่อทำนายว่าลำดับอินพุตแสดงหนึ่งในคู่ QA ดั้งเดิมหรืออินพุตที่เสียหาย
อินพุตสำหรับผู้ประเมิน QA เป็นไปตามรูปแบบสำหรับการจัด BertForSequenceClassification แต่ใช้คำถามและคำตอบเป็นสองลำดับ เป็นรูปแบบต่อไปนี้:
[CLS] <question> [SEP] <answer [SEP]