مولد الأسئلة هو نظام NLP لتوليد أسئلة على غرار القراءة من نصوص مثل المقالات الإخبارية أو صفحات مقتطفات من الكتب. تم تصميم النظام باستخدام نماذج مسبقة من محولات Luggingface. هناك نموذجان: مولد الأسئلة نفسه ، ومقيّم ضمان الجودة الذي يحتل وتصفية أزواج الإجابة على الأسئلة بناءً على قبولها.
تم تحديث دفاتر التدريب باستخدام البرامج النصية التدريبية. لتشغيل:
python question_generator/training/qg_train.pypython question_generator/training/qa_eval_train.pyيمكن تغيير أجهزة التحكم في فرط البارامات باستخدام وسيطات سطر الأوامر. راجع البرامج النصية للحصول على قائمة الحجج المتاحة.
تم تحميل مجموعات البيانات إلى 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 وطباعتها إلى وحدة التحكم. لمزيد من المعلومات ، راجع دفتر Notebook 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>) .
يأخذ نموذج مولد الأسئلة نصًا كمدخلات ويخرج سلسلة من أسئلة وأزواج الإجابة. الإجابات هي الجمل والعبارات المستخرجة من نص الإدخال. يمكن أن تكون العبارات المستخرجة إما جمل كاملة أو كيانات تسميها مستخرجة باستخدام Spacy. يتم استخدام الكيانات المسماة لإجابات الاختيار من متعدد. ستكون الإجابات الخاطئة هي كيانات أخرى من نفس النوع الموجود في النص. يتم إنشاء الأسئلة عن طريق تسلسل الإجابة المستخرجة مع النص الكامل (بحد أقصى 512 رمزًا) كسياق بالتنسيق التالي:
answer_token <extracted answer> context_token <context>
ثم يتم تشفير السلسلة المتسلسلة وتغذيتها في نموذج مولد الأسئلة. الهندسة المعمارية النموذجية هي t5-base . تم تحطيم النموذج المسبق كنموذج تسلسل إلى تسلسل على مجموعة بيانات تشكل العديد من مجموعات بيانات ضمان الجودة المعروفة (فرقة ، العرق ، CoQA ، و MSMarco). تمت إعادة هيكلة مجموعات البيانات عن طريق تسلسل الحقول الإجابة والسياق في التنسيق المذكور سابقًا. ثم تم استخدام الإجابة المتسلسلة والسياق كمدخل للتدريب ، وأصبح حقل الأسئلة هو الأهداف.
يمكن العثور على مجموعات البيانات هنا.
يأخذ مُقيِّم ضمان الجودة زوج إجابة أسئلة كإدخال ويؤدي إلى إخراج قيمة تمثل تنبؤها حول ما إذا كان الإدخال سؤالًا صحيحًا وزوجًا للإجابة أم لا. النموذج bert-base-cased مع رأس تصنيف تسلسل. تم تحطيم النموذج المسبق على نفس البيانات مثل نموذج مولد الأسئلة ، ولكن تمت إزالة السياق. تم تسلسل السؤال والإجابة 50 ٪ من الوقت. في الـ 50 ٪ الأخرى من الوقت ، تم إجراء عملية فساد (إما تبديل الإجابة لإجابة غير ذات صلة ، أو عن طريق نسخ جزء من السؤال إلى الإجابة). ثم تم تدريب النموذج على التنبؤ بما إذا كان تسلسل الإدخال يمثل أحد أزواج QA الأصلية أو إدخال تالف.
يتبع المدخلات الخاصة بتقييم ضمان الجودة تنسيق BertForSequenceClassification ، ولكن باستخدام السؤال والإجابة كتسلسين. هذا هو التنسيق التالي:
[CLS] <question> [SEP] <answer [SEP]