Generator Pertanyaan adalah sistem NLP untuk menghasilkan pertanyaan gaya pemahaman membaca dari teks seperti artikel berita atau halaman kutipan dari buku. Sistem ini dibangun menggunakan model pretrain dari transformator huggingface. Ada dua model: generator pertanyaan itu sendiri, dan evaluator QA yang memberi peringkat dan menyaring pasangan tanya jawab berdasarkan penerimaan mereka.
Buku catatan pelatihan telah diperbarui dengan skrip pelatihan. Untuk menjalankan:
python question_generator/training/qg_train.pypython question_generator/training/qa_eval_train.pyHyperparameters dapat diubah menggunakan argumen Commandline. Lihat skrip untuk daftar argumen yang tersedia.
Dataset telah diunggah ke hub Huggingface:
Cara termudah untuk menghasilkan beberapa pertanyaan adalah dengan mengkloning repo github dan kemudian menjalankan qg_run.py seperti ini:
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
Ini akan menghasilkan 10 pasangan tanya jawab gaya campuran (kalimat penuh dan pilihan ganda) berdasarkan artikel yang ditentukan dalam --text_file dan mencetaknya ke konsol. Untuk informasi lebih lanjut, lihat buku catatan QG_Commandline_Example.
Kelas QuestionGenerator juga dapat dipakai dan digunakan seperti ini:
from questiongenerator import QuestionGenerator
qg = QuestionGenerator ()
qg . generate ( text , num_questions = 10 ) Ini akan menghasilkan 10 pertanyaan gaya campuran dan mengembalikan daftar kamus yang berisi pasangan tanya jawab. Dalam hal pertanyaan pilihan ganda, jawabannya akan berisi daftar kamus yang berisi jawaban dan nilai boolean yang menyatakan apakah jawabannya benar atau tidak. Output dapat dengan mudah dicetak menggunakan fungsi print_qa() . Untuk informasi lebih lanjut, lihat buku catatan pertanyaan_generation_example.
Jumlah pertanyaan yang diinginkan dapat disahkan sebagai argumen baris perintah menggunakan --num_questions atau sebagai argumen ketika memanggil qg.generate(text, num_questions=20 Jika jumlah pertanyaan yang dipilih terlalu besar, maka model tersebut mungkin tidak dapat menghasilkan cukup banyak hal yang akan dikenakan dalam jumlah yang dikemukakan. Kurangi untuk jumlah pertanyaan yang lebih besar, karena peringkat evaluator QA menghasilkan pertanyaan dan mengembalikan yang terbaik.
Sistem ini dapat menghasilkan pertanyaan dengan jawaban kalimat penuh ( 'sentences' ), pertanyaan dengan jawaban pilihan ganda ( 'multiple_choice' ), atau campuran keduanya ( 'all' ). Ini dapat dipilih menggunakan argumen --answer_style atau qg.generate(answer_style=<style>) .
Model generator pertanyaan mengambil teks sebagai input dan menghasilkan serangkaian pasangan tanya jawab. Jawabannya adalah kalimat dan frasa yang diekstraksi dari teks input. Frasa yang diekstraksi dapat berupa kalimat penuh atau entitas yang disebutkan diekstraksi menggunakan spacy. Entitas yang disebutkan digunakan untuk jawaban pilihan ganda. Jawaban yang salah adalah entitas lain dari jenis yang sama yang ditemukan dalam teks. Pertanyaan -pertanyaan dihasilkan dengan menggabungkan jawaban yang diekstraksi dengan teks lengkap (hingga maksimum 512 token) sebagai konteks dalam format berikut:
answer_token <extracted answer> context_token <context>
String gabungan kemudian dikodekan dan dimasukkan ke dalam model generator pertanyaan. Arsitektur model adalah t5-base . Model pretrained diakhiri sebagai model urutan-ke-urutan pada dataset yang membentuk beberapa dataset QA yang terkenal (Skuad, Race, Coqa, dan Msmarco). Kumpulan data direstrukturisasi dengan menggabungkan jawaban dan bidang konteks ke dalam format yang disebutkan sebelumnya. Jawaban dan konteks gabungan kemudian digunakan sebagai input untuk pelatihan, dan bidang pertanyaan menjadi target.
Dataset dapat ditemukan di sini.
Evaluator QA mengambil pasangan jawaban pertanyaan sebagai input dan mengeluarkan nilai yang mewakili prediksinya tentang apakah inputnya adalah pasangan pertanyaan dan jawaban yang valid atau tidak. Model ini bert-base-cased dengan kepala klasifikasi urutan. Model pretrained diuraikan pada data yang sama dengan model generator pertanyaan, tetapi konteksnya dihapus. Pertanyaan dan jawabannya digabungkan 50% dari waktu. Dalam 50% lain dari waktu operasi korupsi dilakukan (baik menukar jawaban untuk jawaban yang tidak terkait, atau dengan menyalin bagian pertanyaan ke dalam jawaban). Model tersebut kemudian dilatih untuk memprediksi apakah urutan input mewakili salah satu pasangan QA asli atau input yang rusak.
Input untuk evaluator QA mengikuti format untuk BertForSequenceClassification , tetapi menggunakan pertanyaan dan jawaban sebagai dua urutan. Ini adalah format berikut:
[CLS] <question> [SEP] <answer [SEP]