問題生成器是一種NLP系統,用於從新聞文章或書籍摘錄等文本中產生閱讀理解式的問題。該系統是使用HuggingFace Transformers驗證的模型構建的。有兩個模型:問題生成器本身,以及根據其可接受性對問題解答對的質量檢查評估器。
培訓筆記本已通過培訓腳本進行了更新。運行:
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
這將基於--text_file中指定的文章並將其打印到控制台上,生成10對混合樣式(全句和多項選擇)的問題。有關更多信息,請參見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 )作為命令行參數傳遞所需的問題,或作為參數,如果所選的問題數太大。該模型可能無法生成足夠的問題。最大數量的問題將依賴於輸入文本的長度,或者在輸出的範圍內列出的範圍和更具體的文本數量,該句子的數量是詳細信息。問題,隨著質量檢查評估者對產生的問題進行排名並返回最好的問題。
該系統可以通過全句答案( 'sentences' ),具有多項選擇答案( 'multiple_choice' )或兩者的混合( 'all' )的問題產生問題。可以使用--answer_style或qg.generate(answer_style=<style>)參數選擇此方法。
問題生成器模型將文本作為輸入,並輸出一系列問答對。答案是從輸入文本中提取的句子和短語。提取的短語可以是完整的句子,也可以是使用Spacy提取的命名實體。命名實體用於多項選擇答案。錯誤的答案將是文本中發現的相同類型的其他實體。這些問題是通過以下格式將提取的答案與全文(最多512個令牌)的串聯(最多512個令牌)的連接來生成的:
answer_token <extracted answer> context_token <context>
然後對串聯字符串進行編碼並饋入問題生成器模型。模型架構是t5-base 。預處理的模型被列為一個序列到序列模型,該模型構成了幾個著名的QA數據集(小隊,種族,COQA和MSMARCO)。通過將答案和上下文字段連接到前面提到的格式中來重組數據集。然後將串聯的答案和上下文用作訓練的輸入,問題領域成為目標。
數據集可以在此處找到。
QA評估者將問題答案對作為輸入,並輸出一個代表其關於輸入是否是有效的問題和答案對的預測值的值。該模型是用序列分類頭bert-base-cased 。預處理的模型在與問題生成器模型相同的數據上進行了審核,但是刪除了上下文。問題和答案是在50%的時間內加入的。在其他50%的時間裡,進行腐敗操作(將答案換成無關的答案,或者通過將部分問題複製到答案中)。然後,對模型進行了訓練,以預測輸入序列是代表原始質量檢查對還是損壞的輸入。
QA評估器的輸入遵循BertForSequenceClassification的格式,但將問題和答案作為兩個序列。這是以下格式:
[CLS] <question> [SEP] <answer [SEP]