質問ジェネレーターは、ニュース記事や書籍からの抜粋などのテキストから読解スタイルの質問を生成するためのNLPシステムです。このシステムは、Huggingface Transformersの前提型モデルを使用して構築されています。 2つのモデルがあります。質問ジェネレーター自体と、許容性に基づいて質問回答ペアをランク付けおよびフィルターするQA評価者です。
トレーニングノートブックは、トレーニングスクリプトで更新されています。実行する:
python question_generator/training/qg_train.pypython question_generator/training/qa_eval_train.pyコマンドライン引数を使用して、ハイパーパラメーターを変更できます。利用可能な引数のリストについては、スクリプトを参照してください。
データセットはハグFaceハブにアップロードされました。
いくつかの質問を生成する最も簡単な方法は、githubリポジトリをクローンして、次のように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を呼び出すときの引数として渡すことができますqg.generate(text, num_questions=20 。選択した質問数が大きすぎる場合、モデルは十分に生成できない場合があります。 QA評価者は質問を生成し、最高の質問を返すため、より多くの質問の場合。
システムは、フルセンテンスの回答( 'sentences' )、複数選択回答( 'multiple_choice' )の質問、または両方( 'all' )の組み合わせで質問を生成できます。これは、 --answer_styleまたはqg.generate(answer_style=<style>)引数を使用して選択できます。
質問ジェネレーターモデルは、テキストを入力として採用し、一連の質問と回答ペアを出力します。答えは、入力テキストから抽出された文とフレーズです。抽出されたフレーズは、完全な文またはスペイシーを使用して抽出された名前の名前のいずれかです。指定されたエンティティは、複数選択回答に使用されます。間違った答えは、テキストにあるのと同じタイプの他のエンティティになります。質問は、抽出された答えを以下の形式のコンテキストとして完全なテキスト(最大512トークンまで)と連結することによって生成されます。
answer_token <extracted answer> context_token <context>
その後、連結された文字列がエンコードされ、質問ジェネレーターモデルに供給されます。モデルアーキテクチャはt5-baseです。事前に保護されたモデルは、データセット上のシーケンスからシーケンスモデルとして、いくつかのよく知られたQAデータセット(分隊、レース、コカ、およびMSMARCO)を構成したものとして微調整されました。データセットは、答えとコンテキストフィールドを前述の形式に連結することにより再構築されました。その後、連結された回答とコンテキストがトレーニングの入力として使用され、質問フィールドがターゲットになりました。
データセットはここにあります。
QA評価者は、質問の回答ペアを入力として受け取り、入力が有効な質問と回答のペアであるかどうかについての予測を表す値を出力します。このモデルは、シーケンス分類ヘッドを備えたbert-base-casedです。事前に保護されたモデルは、質問ジェネレーターモデルと同じデータで微調整されましたが、コンテキストは削除されました。質問と回答は、50%の確率で連結されました。他の50%の時間で、腐敗操作が実行されました(無関係な答えのために答えを交換するか、質問の一部を答えにコピーすることによって)。次に、モデルをトレーニングして、入力シーケンスが元のQAペアの1つを表すか破損した入力を表しているかを予測しました。
QA評価者の入力は、 BertForSequenceClassificationの形式に従いますが、質問と回答を2つのシーケンスとして使用します。次の形式です。
[CLS] <question> [SEP] <answer [SEP]