Gambar 1: Tiga pendekatan Qag yang berbeda.
lmqg adalah perpustakaan Python untuk generasi tanya jawab (QAG) dengan model bahasa (LMS). Di sini, kami mempertimbangkan QAG tingkat paragraf, di mana pengguna akan memberikan konteks (paragraf atau dokumen), dan model akan menghasilkan daftar pasangan tanya jawab pada konteksnya. Dengan lmqg , Anda dapat melakukan hal -hal berikut:
UPDATE NOV 2023: Model QAG Cina sekarang tersedia di kedua lmqg dan AutoQG!
UPDATE Mei 2023: Dua makalah diterima oleh ACL 2023 (Qag at Find, LMQG di Demonstrasi Sistem).
UPDATE OCT 2022: Makalah QG kami diterima oleh EMNLP Main 2022.
Model QAG kami dapat dikelompokkan menjadi tiga jenis: Pipeline , Multitask , dan End2end (lihat Gambar 1). Pipa ini terdiri dari model generasi pertanyaan (QG) dan jawaban ekstraksi (AE) secara independen, di mana AE akan menguraikan semua kalimat dalam konteks untuk mengekstrak jawaban, dan QG akan menghasilkan pertanyaan pada jawaban. Multitask mengikuti arsitektur yang sama dengan pipa , tetapi model QG dan AE dibagikan model disesuaikan bersama. Akhirnya, Model End2end akan menghasilkan daftar pasangan tanya jawab dengan cara ujung ke ujung. Dalam praktiknya, pipa dan multitask menghasilkan lebih banyak pasangan tanya jawab, sementara End2end menghasilkan lebih sedikit tetapi beberapa kali lebih cepat, dan kualitas pasangan tanya jawab yang dihasilkan bergantung pada bahasa. Semua jenis tersedia dalam 9 bahasa yang beragam (EN/FR/JA/KO/RU/IT/ES/DE/ZH) melalui lmqg , dan semua model dibagikan di Huggingface (lihat kartu model). Untuk mengetahui lebih lanjut tentang QAG, silakan periksa makalah ACL 2023 kami yang menjelaskan model QAG dan melaporkan perbandingan kinerja yang lengkap dari setiap model QAG dalam setiap bahasa.
Gambar 2: Contoh QAG (A) dan QG (B).
Semua fungsi mendukung pembuatan pertanyaan juga. Model QG kami mengasumsikan pengguna untuk menentukan jawaban di samping konteks, dan model QG akan menghasilkan pertanyaan yang dapat dijawab dengan jawaban yang diberikan konteksnya (lihat Gambar 2 untuk perbandingan QAG dan QG). Untuk mengetahui lebih lanjut tentang QG, silakan periksa makalah EMNLP 2022 kami yang menjelaskan lebih banyak model QG secara detail.
Mari kita instal lmqg melalui PIP terlebih dahulu.
pip install lmqgHasilkan pasangan tanya jawab dalam beberapa baris.
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' )
] Selain bahasa en , kami mendukung it Italia, Spanyol es , RUS ru , ko Korea, Jepang ja , Jerman de , French fr , dan Chinese zh . Anda dapat mengganti bahasa dengan menentukan ID bahasa pada model pemuatan (mis. TransformersQG(language="es") untuk bahasa Spanyol). Untuk penggunaan yang lebih terperinci, silakan baca bagian berikutnya.
Fungsi utama lmqg adalah untuk menghasilkan pasangan tanya jawab pada konteks yang diberikan dengan API yang praktis. Model yang tersedia untuk setiap kelas QAG dapat ditemukan di kartu model.
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 dan model_ae masing -masing adalah model QG dan 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 adalah model QG. Lihat QG-Bench, tolok ukur QG multibahasa, untuk daftar model QG yang tersedia. 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 adalah 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) adalah aplikasi web gratis yang menampung model QAG kami.
lmqg juga menyediakan antarmuka baris perintah untuk menyempurnakan dan mengevaluasi model QG, AE, dan QAG.
Untuk menyempurnakan model QG (atau AE, Qag), kami menggunakan optimasi hiper-parameter dua tahap, yang digambarkan sebagai diagram di atas. Perintah berikut adalah menjalankan fine-tuning dengan optimasi parameter.
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 Periksa lmqg-train-search -h untuk menampilkan semua opsi.
Model fine-tuning di Python mengikuti di bawah ini.
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 () Alat evaluasi melaporkan BLEU4 , ROUGE-L , METEOR , BERTScore , dan MoverScore mengikuti qg-bench. Dari baris perintah, jalankan perintah berikut
lmqg-eval -m " lmqg/t5-large-squad-qg " -e " ./eval_metrics " -d " lmqg/qg_squad " -l " en " di mana -m adalah model alias pada huggingface atau jalur ke pos pemeriksaan lokal, -e adalah langsung untuk mengekspor file metrik, -d adalah dataset untuk dievaluasi, dan -l adalah bahasa dari set tes. Alih -alih menjalankan prediksi model, Anda dapat memberikan file prediksi sebagai gantinya untuk menghindari menghitungnya setiap kali.
lmqg-eval --hyp-test ' {your prediction file} ' -e " ./eval_metrics " -d " lmqg/qg_squad " -l " en " File prediksi harus berupa file teks pembuatan model di setiap baris dalam urutan test split dalam dataset target (sampel). Periksa lmqg-eval -h untuk menampilkan semua opsi.
Akhirnya, lmqg menyediakan API REST yang meng -host inferensi model melalui Huggingface Inference API. Anda memerlukan token API HuggingFace untuk menjalankan API Anda sendiri dan menginstal dependensi seperti di bawah ini.
pip install lmqg[api] Swagger UI tersedia di http://127.0.0.1:8088/docs , saat Anda menjalankan aplikasi secara lokal (ganti alamat dengan alamat server Anda).
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 Anda harus melewati token API Huggingface melalui variabel lingkungan API_TOKEN . Titik akhir utama adalah question_generation , yang memiliki parameter berikut,
| Parameter | Keterangan |
|---|---|
| input_text | input teks, paragraf atau kalimat untuk menghasilkan pertanyaan |
| bahasa | bahasa |
| qg_model | Model pembuatan pertanyaan |
| Jawaban_model | Jawab Model Ekstraksi |
dan kembalikan daftar kamus dengan question dan 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 " }
]
}Harap kutip makalah berikut jika Anda menggunakan sumber daya apa pun dan lihat kode untuk mereproduksi model jika diperlukan.
@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",
}