问题生成器是一种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]