O Gerador de Perguntas é um sistema PNL para gerar perguntas ao estilo de compreensão de leitura a partir de textos como artigos de notícias ou páginas de trechos de livros. O sistema é construído usando modelos pré -rastreados a partir de Transformers Huggingface. Existem dois modelos: o próprio gerador de perguntas e o avaliador de controle de qualidade que classifica e filtra os pares de perguntas-respostas com base em sua aceitabilidade.
Os cadernos de treinamento foram atualizados com scripts de treinamento. Para correr:
python question_generator/training/qg_train.pypython question_generator/training/qa_eval_train.pyOs hyperparameters podem ser alterados usando os argumentos de linha de comando. Consulte os scripts para obter a lista de argumentos disponíveis.
Os conjuntos de dados foram enviados para o hub de husggingface:
A maneira mais fácil de gerar algumas perguntas é clonar o repositório do GitHub e depois executar qg_run.py assim:
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
Isso gerará 10 pares de questões-respostas de estilo misto (plena frase e múltipla escolha) com base no artigo especificado em --text_file e os imprimirá no console. Para mais informações, consulte o notebook QG_Commandline_Example.
A classe QuestionGenerator também pode ser instanciada e usada assim:
from questiongenerator import QuestionGenerator
qg = QuestionGenerator ()
qg . generate ( text , num_questions = 10 ) Isso gerará 10 perguntas de estilo misto e retornará uma lista de dicionários contendo pares de perguntas e respostas. No caso de perguntas de múltipla escolha, a resposta conterá uma lista de dicionários que contêm as respostas e um valor booleano indicando se a resposta estiver correta ou não. A saída pode ser facilmente impressa usando a função print_qa() . Para mais informações, consulte o notebook question_generation_example.
The desired number of questions can be passed as a command line argument using --num_questions or as an argument when calling qg.generate(text, num_questions=20 . If the chosen number of questions is too large, then the model may not be able to generate enough. The maximum number of questions will depend on the length of the input text, or more specifically the number of sentences and named entities containined within text. Note that the quality of some of the outputs will decrease Para um número maior de perguntas, à medida que o avaliador de controle de qualidade classifica as perguntas e retorna as melhores.
O sistema pode gerar perguntas com respostas completas ( 'sentences' ), perguntas com respostas de múltipla escolha ( 'multiple_choice' ) ou uma mistura de ambos ( 'all' ). Isso pode ser selecionado usando os argumentos --answer_style ou qg.generate(answer_style=<style>) .
O modelo do gerador de perguntas leva um texto como entrada e produz uma série de pares de perguntas e respostas. As respostas são frases e frases extraídas do texto de entrada. As frases extraídas podem ser frases completas ou entidades nomeadas extraídas usando spacy. As entidades nomeadas são usadas para respostas de múltipla escolha. As respostas erradas serão outras entidades do mesmo tipo encontradas no texto. As perguntas são geradas concatenando a resposta extraída com o texto completo (até um máximo de 512 tokens) como contexto no seguinte formato:
answer_token <extracted answer> context_token <context>
A sequência concatenada é então codificada e alimentada no modelo do gerador de perguntas. A arquitetura do modelo é t5-base . O modelo pré-treinado foi finetunizado como um modelo de sequência a sequência em um conjunto de dados compunhado vários conjuntos de dados de controle de qualidade bem conhecidos (esquadrão, corrida, coqa e msmarco). Os conjuntos de dados foram reestruturados concatenando os campos de resposta e contexto no formato mencionado anteriormente. A resposta e o contexto concatenados foram então usados como uma entrada para o treinamento, e o campo de perguntas se tornou os alvos.
Os conjuntos de dados podem ser encontrados aqui.
O avaliador de controle de qualidade leva um par de respostas de perguntas como uma entrada e produz um valor que representa sua previsão sobre se a entrada era uma pergunta válida e um par de respostas ou não. O modelo é bert-base-cased com uma cabeça de classificação de sequência. O modelo pré -treinado foi fino nos mesmos dados que o modelo do gerador de perguntas, mas o contexto foi removido. A pergunta e a resposta foram concatenadas 50% das vezes. Nos outros 50% do tempo, foi realizada uma operação de corrupção (trocando a resposta por uma resposta não relacionada ou copiando parte da pergunta na resposta). O modelo foi então treinado para prever se a sequência de entrada representava um dos pares de controle de qualidade originais ou uma entrada corrompida.
A entrada para o avaliador de controle de qualidade segue o formato para BertForSequenceClassification , mas usando a pergunta e a resposta como as duas seqüências. É o seguinte formato:
[CLS] <question> [SEP] <answer [SEP]