รูปที่ 1: แนวทาง QAG ที่แตกต่างกันสามวิธี
lmqg เป็นไลบรารี Python สำหรับคำถามและการสร้างคำตอบ (QAG) พร้อมรูปแบบภาษา (LMS) ที่นี่เราพิจารณา QAG ระดับวรรคซึ่งผู้ใช้จะให้บริบท (ย่อหน้าหรือเอกสาร) และโมเดลจะสร้างรายการคำถามและคำตอบคู่ในบริบท ด้วย lmqg คุณสามารถทำสิ่งต่อไปนี้ได้:
อัปเดต พ.ย. 2023: ตอนนี้รุ่น QAG จีน มีให้บริการทั้ง lmqg และ AutoQG!
อัปเดตพฤษภาคม 2023: เอกสารสองฉบับได้รับการยอมรับจาก ACL 2023 (QAG ในการค้นหา LMQG ที่การสาธิตระบบ)
อัปเดตตุลาคม 2022: กระดาษ QG ของเราได้รับการยอมรับจาก EMNLP Main 2022
โมเดล QAG ของเราสามารถจัดกลุ่มเป็นสามประเภท ได้แก่ Pipeline , Multitask และ End2end (ดูรูปที่ 1) ไปป์ไลน์ ประกอบด้วยแบบจำลองการสร้างคำถาม (QG) และคำตอบการสกัด (AE) อย่างอิสระโดยที่ AE จะแยกประโยคทั้งหมดในบริบทเพื่อแยกคำตอบและ QG จะสร้างคำถามเกี่ยวกับคำตอบ มัลติทาสก์ เป็นไปตามสถาปัตยกรรมเดียวกับ ไปป์ไลน์ แต่รุ่น QG และ AE นั้นมีการแชร์โมเดลที่ได้รับการปรับแต่งร่วมกัน ในที่สุดโมเดล End2End จะสร้างรายการคำถามและคำตอบคู่ในลักษณะแบบครบวงจร ในทางปฏิบัติ ท่อส่ง และ มัลติทาสก์ สร้างคำถามและคำตอบเพิ่มเติมในขณะที่ End2end สร้างเร็วขึ้น แต่เร็วขึ้นสองสามเท่าและคุณภาพของคำถามที่สร้างขึ้นและคำตอบนั้นขึ้นอยู่กับภาษา ทุกประเภทมีอยู่ใน 9 ภาษาที่หลากหลาย (EN/FR/JA/KO/RU/IT/ES/DE/ZH) ผ่าน lmqg และรุ่นทั้งหมดจะแชร์บน HuggingFace (ดูการ์ดรุ่น) หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ 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 เรายังสนับสนุน ITALIAN it , Spanish es , RUSSIAN ru , KOREAN ko , ja ญี่ปุ่น, GERMAN de , FRENCH fr และจีน zh คุณสามารถสลับภาษาได้โดยการระบุ ID ภาษาที่รูปแบบการโหลด (เช่น TransformersQG(language="es") สำหรับภาษาสเปน) สำหรับการใช้งานโดยละเอียดเพิ่มเติมโปรดอ่านหัวข้อถัดไป
ฟังก์ชั่นหลักของ lmqg คือการสร้างคำถามและคำตอบคู่ในบริบทที่กำหนดด้วย API ที่มีประโยชน์ รุ่นที่มีอยู่สำหรับแต่ละคลาส 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 ดู BG-BENCH ซึ่งเป็นเกณฑ์มาตรฐาน 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 เพื่อแสดงตัวเลือกทั้งหมด
แบบจำลองการปรับแต่งใน Python ดังต่อไปนี้
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 ตาม BG-bench จากบรรทัดคำสั่งเรียกใช้คำสั่งต่อไปนี้
lmqg-eval -m " lmqg/t5-large-squad-qg " -e " ./eval_metrics " -d " lmqg/qg_squad " -l " en " โดยที่ -m เป็นนามแฝงแบบจำลองบน HuggingFace หรือ Path ไปยังจุดตรวจสอบในท้องถิ่น -e เป็นโดยตรงในการส่งออกไฟล์เมตริก -d เป็นชุดข้อมูลเพื่อประเมินและ -l เป็นภาษาของชุดทดสอบ แทนที่จะใช้การทำนายแบบจำลองคุณสามารถจัดเตรียมไฟล์การทำนายแทนเพื่อหลีกเลี่ยงการคำนวณในแต่ละครั้ง
lmqg-eval --hyp-test ' {your prediction file} ' -e " ./eval_metrics " -d " lmqg/qg_squad " -l " en " ไฟล์การทำนายควรเป็นไฟล์ข้อความของการสร้างโมเดลในแต่ละบรรทัดในลำดับของการแยก test ในชุดข้อมูลเป้าหมาย (ตัวอย่าง) ตรวจสอบ lmqg-eval -h เพื่อแสดงตัวเลือกทั้งหมด
ในที่สุด lmqg ให้ API REST ซึ่งเป็นเจ้าภาพการอนุมานแบบจำลองผ่านการอนุมาน API ของ HuggingFace คุณต้องใช้โทเค็น API HuggingFace เพื่อเรียกใช้ API ของคุณเองและติดตั้งการอ้างอิงดังต่อไปนี้
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 HuggingFace ผ่านตัวแปรสิ่งแวดล้อม API_TOKEN จุดสิ้นสุดหลักคือ question_generation ซึ่งมีพารามิเตอร์ต่อไปนี้
| พารามิเตอร์ | คำอธิบาย |
|---|---|
| input_text | ข้อความอินพุตย่อหน้าหรือประโยคเพื่อสร้างคำถาม |
| ภาษา | ภาษา |
| qg_model | รูปแบบการสร้างคำถาม |
| คำตอบ _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",
}