الشكل 1: ثلاثة أساليب QAG متميزة.
lmqg عبارة عن مكتبة Python لسؤال وتوليد الإجابة (QAG) مع نماذج اللغة (LMS). هنا ، نعتبر QAG على مستوى الفقرة ، حيث سيوفر المستخدم سياقًا (فقرة أو مستند) ، وسيقوم النموذج بإنشاء قائمة بأزواج الأسئلة والإجابة على السياق. مع lmqg ، يمكنك القيام بأشياء متابعة:
تحديث نوفمبر 2023: نماذج QAG الصينية الآن متاحة على كل من lmqg و AutoQG!
تحديث مايو 2023: تم قبول ورقتين من قبل ACL 2023 (QAG في Finding ، LMQG في عرض النظام).
تحديث أكتوبر 2022: تم قبول ورقة QG الخاصة بنا بواسطة EMNLP Main 2022.
يمكن تجميع نماذج QAG الخاصة بنا في ثلاثة أنواع: خط أنابيب ، ومهام متعددة ، و End2end (انظر الشكل 1). يتكون خط الأنابيب من نماذج توليد الأسئلة (QG) ونماذج استخراج الإجابة (AE) بشكل مستقل ، حيث ستقوم AE بتحليل جميع الجمل في السياق لاستخراج الإجابات ، وسيقوم QG بإنشاء أسئلة على الإجابات. يتبع المهام المتعددة نفس الهندسة المعمارية مثل خط الأنابيب ، ولكن يتم تشكيل طرازات QG و AE بشكل مشترك. أخيرًا ، سيقوم End2end Model بإنشاء قائمة بأزواج الأسئلة والإجابة بطريقة من طرف إلى طرف. في الممارسة العملية ، يولد خطوط الأنابيب والمهام المتعددة المزيد من أسئلة وأزواج الإجابة ، في حين أن End2end يولد أقل ولكن بضع مرات أسرع ، وجودة أزواج السؤال والإجابة التي تم إنشاؤها تعتمد على اللغة. جميع الأنواع متوفرة باللغات 9 المتنوعة (EN/FR/JA/KO/RU/IT/ES/DE/ZH) عبر lmqg ، وتتم مشاركة جميع النماذج على Luggingface (انظر بطاقة النموذج). لمعرفة المزيد عن QAG ، يرجى التحقق من ورقة ACL 2023 التي تصف نماذج QAG وتقارير مقارنة الأداء الكامل لكل نماذج QAG في كل لغة.
الشكل 2: مثال على QAG (A) و QG (B).
جميع الوظائف تدعم توليد الأسئلة كذلك. يفترض نموذج QG الخاص بنا المستخدم لتحديد إجابة بالإضافة إلى سياق ، وسيقوم نموذج QG بإنشاء سؤال يُجبر على الإجابة بالنظر إلى السياق (انظر الشكل 2 لمقارنة QAG و QG). لمعرفة المزيد حول QG ، يرجى التحقق من ورقة EMNLP 2022 التي تصف نماذج QG أكثر بالتفصيل.
دعنا نثبت lmqg عبر PIP أولاً.
pip install lmqgقم بإنشاء أسئلة وإجابة أزواج في بضعة أسطر.
from lmqg import TransformersQG
model = TransformersQG ( language = "en" )
context = "William Turner was an English painter who specialised in watercolour landscapes. He is often known "
"as William Turner of Oxford or just Turner of Oxford to distinguish him from his contemporary, "
"J. M. W. Turner. Many of Turner's paintings depicted the countryside around Oxford. One of his "
"best known pictures is a view of the city of Oxford from Hinksey Hill."
qa = model . generate_qa ( context )
print ( qa )
[
( 'Who was an English painter who specialised in watercolour landscapes?' , 'William Turner' ),
( 'What is William Turner often known as?' , 'William Turner of Oxford or just Turner of Oxford' ),
( "What did many of Turner's paintings depict?" , 'the countryside around Oxford' ),
( "What is one of Turner's best known pictures?" , 'a view of the city of Oxford from Hinksey Hill' )
] بالإضافة إلى اللغة الإنجليزية en ، نحن ندعم it الإيطالية ، الإسبانية es ، روسي ru ، ko الكورية ، JANANES ja ، German de ، French fr ، و zh الصينية. يمكنك تبديل اللغة من خلال تحديد معرف اللغة في نموذج التحميل ( TransformersQG(language="es") سبيل المثال لمزيد من الاستخدام التفصيلي ، يرجى قراءة القسم التالي.
تتمثل الوظيفة الرئيسية لـ lmqg في إنشاء أسئلة وإجابة على أزواج في سياق معين مع واجهة برمجة تطبيقات مفيدة. يمكن العثور على النماذج المتاحة لكل فئة QAG في بطاقة النموذج.
from pprint import pprint
from lmqg import TransformersQG
# initialize model
model = TransformersQG ( 'lmqg/t5-base-squad-qag' ) # or TransformersQG(model='lmqg/t5-base-squad-qg-ae')
# paragraph to generate pairs of question and answer
context = "William Turner was an English painter who specialised in watercolour landscapes. He is often known "
"as William Turner of Oxford or just Turner of Oxford to distinguish him from his contemporary, "
"J. M. W. Turner. Many of Turner's paintings depicted the countryside around Oxford. One of his "
"best known pictures is a view of the city of Oxford from Hinksey Hill."
# model prediction
question_answer = model . generate_qa ( context )
# the output is a list of tuple (question, answer)
pprint ( question_answer )
[
( 'Who was an English painter who specialised in watercolour landscapes?' , 'William Turner' ),
( 'What is William Turner often known as?' , 'William Turner of Oxford or just Turner of Oxford' ),
( "What did many of Turner's paintings depict?" , 'the countryside around Oxford' ),
( "What is one of Turner's best known pictures?" , 'a view of the city of Oxford from Hinksey Hill' )
]model و model_ae هما نماذج QG و AE على التوالي. from pprint import pprint
from lmqg import TransformersQG
# initialize model
model = TransformersQG ( model = 'lmqg/t5-base-squad-qg' , model_ae = 'lmqg/t5-base-squad-ae' )
# paragraph to generate pairs of question and answer
context = "William Turner was an English painter who specialised in watercolour landscapes. He is often known "
"as William Turner of Oxford or just Turner of Oxford to distinguish him from his contemporary, "
"J. M. W. Turner. Many of Turner's paintings depicted the countryside around Oxford. One of his "
"best known pictures is a view of the city of Oxford from Hinksey Hill."
# model prediction
question_answer = model . generate_qa ( context )
# the output is a list of tuple (question, answer)
pprint ( question_answer )
[
( 'Who was an English painter who specialised in watercolour landscapes?' , 'William Turner' ),
( 'What is another name for William Turner?' , 'William Turner of Oxford' ),
( "What did many of William Turner's paintings depict around Oxford?" , 'the countryside' ),
( 'From what hill is a view of the city of Oxford taken?' , 'Hinksey Hill.' )
]model هو نموذج QG. شاهد مقر QG ، وهو معيار QG متعدد اللغات ، للاطلاع على قائمة نماذج QG المتاحة. from pprint import pprint
from lmqg import TransformersQG
# initialize model
model = TransformersQG ( model = 'lmqg/t5-base-squad-qg' )
# a list of paragraph
context = [
"William Turner was an English painter who specialised in watercolour landscapes" ,
"William Turner was an English painter who specialised in watercolour landscapes"
]
# a list of answer (same size as the context)
answer = [
"William Turner" ,
"English"
]
# model prediction
question = model . generate_q ( list_context = context , list_answer = answer )
pprint ( question )
[
'Who was an English painter who specialised in watercolour landscapes?' ,
'What nationality was William Turner?'
]model هو نموذج QG. from pprint import pprint
from lmqg import TransformersQG
# initialize model
model = TransformersQG ( model = 'lmqg/t5-base-squad-ae' )
# model prediction
answer = model . generate_a ( "William Turner was an English painter who specialised in watercolour landscapes" )
pprint ( answer )
[ 'William Turner' ]AutoQG (https://autoqg.net) هو تطبيق ويب مجاني يستضيف نماذج QAG الخاصة بنا.
يوفر lmqg أيضًا واجهة سطر الأوامر لضبط وتقييم نماذج QG و AE و QAG.
لضبط نموذج QG (أو AE ، QAG) ، نستخدم تحسينًا شديدًا على مرحلتين ، موصوفًا على أنه مخطط أعلاه. فيما يلي الأمر هو تشغيل الضبط مع تحسين المعلمة.
lmqg-train-search -c " tmp_ckpt " -d " lmqg/qg_squad " -m " t5-small " -b 64 --epoch-partial 5 -e 15 --language " en " --n-max-config 1
-g 2 4 --lr 1e-04 5e-04 1e-03 --label-smoothing 0 0.15 تحقق من lmqg-train-search -h لعرض جميع الخيارات.
نماذج الضبط الدقيقة في بيثون يلي أدناه.
from lmqg import GridSearcher
trainer = GridSearcher (
checkpoint_dir = 'tmp_ckpt' ,
dataset_path = 'lmqg/qg_squad' ,
model = 't5-small' ,
epoch = 15 ,
epoch_partial = 5 ,
batch = 64 ,
n_max_config = 5 ,
gradient_accumulation_steps = [ 2 , 4 ],
lr = [ 1e-04 , 5e-04 , 1e-03 ],
label_smoothing = [ 0 , 0.15 ]
)
trainer . run () تقوم أداة التقييم بالإبلاغ عن BLEU4 و ROUGE-L و METEOR و BERTScore و MoverScore بعد QG-BECK. من سطر الأوامر ، قم بتشغيل الأمر التالي
lmqg-eval -m " lmqg/t5-large-squad-qg " -e " ./eval_metrics " -d " lmqg/qg_squad " -l " en " حيث -m عبارة عن اسم مستعار للنموذج على Luggingface أو مسار إلى نقطة التفتيش المحلية ، -e هو مباشرة لتصدير الملف المتري ، -d هي مجموعة البيانات لتقييمها ، و -l هي لغة مجموعة الاختبار. بدلاً من تشغيل تنبؤ النموذج ، يمكنك توفير ملف تنبؤ بدلاً من ذلك لتجنب حسابه في كل مرة.
lmqg-eval --hyp-test ' {your prediction file} ' -e " ./eval_metrics " -d " lmqg/qg_squad " -l " en " يجب أن يكون ملف التنبؤ ملفًا نصيًا لتوليد النماذج في كل سطر بترتيب تقسيم test في مجموعة البيانات المستهدفة (عينة). تحقق من lmqg-eval -h لعرض جميع الخيارات.
أخيرًا ، توفر lmqg واجهة برمجة تطبيقات REST التي تستضيف الاستدلال النموذج من خلال واجهة برمجة تطبيقات الاستدلال المعانقة. تحتاج إلى رمز API Luggingface لتشغيل واجهة برمجة التطبيقات الخاصة بك وتثبيت التبعيات على النحو التالي.
pip install lmqg[api] يتوفر Swagger UI على http://127.0.0.1:8088/docs ، عند تشغيل التطبيق محليًا (استبدل العنوان بعنوان الخادم الخاص بك).
export API_TOKEN={Your Huggingface API Token}
uvicorn app:app --host 0.0.0.0 --port 8088docker build -t lmqg/app:latest . --build-arg api_token={Your Huggingface API Token}
docker run -p 8080:8080 lmqg/app:latestuvicorn app_local:app --host 0.0.0.0 --port 8088 يجب أن تمرر رمز API API عن طريق API_TOKEN البيئي. نقطة النهاية الرئيسية هي question_generation ، التي لديها معلمات التالية ،
| المعلمة | وصف |
|---|---|
| input_text | نص الإدخال أو الفقرة أو الجملة لإنشاء سؤال |
| لغة | لغة |
| qg_model | نموذج توليد الأسئلة |
| answer_model | نموذج استخراج الإجابة |
وإعادة قائمة القواميس مع question answer .
{
" qa " : [
{ " question " : " Who founded Nintendo Karuta? " , " answer " : " Fusajiro Yamauchi " },
{ " question " : " When did Nintendo distribute its first video game console, the Color TV-Game? " , " answer " : " 1977 " }
]
}يرجى الاستشهاد بالورق التالي إذا كنت تستخدم أي مورد ورؤية الكود لإعادة إنتاج النموذج إذا لزم الأمر.
@inproceedings{ushio-etal-2022-generative,
title = "{G}enerative {L}anguage {M}odels for {P}aragraph-{L}evel {Q}uestion {G}eneration",
author = "Ushio, Asahi and
Alva-Manchego, Fernando and
Camacho-Collados, Jose",
booktitle = "Proceedings of the 2022 Conference on Empirical Methods in Natural Language Processing",
month = dec,
year = "2022",
address = "Abu Dhabi, U.A.E.",
publisher = "Association for Computational Linguistics",
}
@inproceedings{ushio-etal-2023-an-empirical,
title = "An Empirical Comparison of LM-based Question and Answer Generation Methods",
author = "Ushio, Asahi and
Alva-Manchego, Fernando and
Camacho-Collados, Jose",
booktitle = "Proceedings of the 61th Annual Meeting of the Association for Computational Linguistics: Findings",
month = Jul,
year = "2023",
address = "Toronto, Canada",
publisher = "Association for Computational Linguistics",
}
@inproceedings{ushio-etal-2023-a-practical-toolkit,
title = "A Practical Toolkit for Multilingual Question and Answer Generation",
author = "Ushio, Asahi and
Alva-Manchego, Fernando and
Camacho-Collados, Jose",
booktitle = "Proceedings of the 61th Annual Meeting of the Association for Computational Linguistics: System Demonstrations",
month = Jul,
year = "2023",
address = "Toronto, Canada",
publisher = "Association for Computational Linguistics",
}