El generador de preguntas es un sistema NLP para generar preguntas al estilo de comprensión de lectura a partir de textos como artículos de noticias o extractos de páginas de libros. El sistema se crea utilizando modelos previos a los transformadores de Huggingface. Hay dos modelos: el generador de preguntas en sí y el evaluador de control de calidad que clasifica y filtra los pares de preguntas y respuestas en función de su aceptabilidad.
Los cuadernos de capacitación se han actualizado con scripts de capacitación. Para correr:
python question_generator/training/qg_train.pypython question_generator/training/qa_eval_train.pyLos hiperparámetros se pueden cambiar utilizando argumentos de línea de comandos. Vea los scripts para la lista de argumentos disponibles.
Los conjuntos de datos se han subido al Hub Huggingface:
La forma más fácil de generar algunas preguntas es clonar el repositorio de GitHub y luego ejecutar qg_run.py así:
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
Esto generará 10 pares de cuestionamiento de estilo mixto (orientación completa y opción múltiple) basado en el artículo especificado en --text_file e imprimirlos en la consola. Para obtener más información, consulte el cuaderno QG_Commandline_Example.
La clase QuestionGenerator también se puede instanciar y usar así:
from questiongenerator import QuestionGenerator
qg = QuestionGenerator ()
qg . generate ( text , num_questions = 10 ) Esto generará 10 preguntas de estilo mixto y devolverá una lista de diccionarios que contengan pares de preguntas y respuestas. En el caso de las preguntas de elección múltiple, la respuesta contendrá una lista de diccionarios que contienen las respuestas y un valor booleano que indique si la respuesta es correcta o no. La salida se puede imprimir fácilmente utilizando la función print_qa() . Para obtener más información, consulte el cuaderno pregunta_generación_example.
El número deseado de preguntas se puede aprobar como un argumento de línea de comandos usando --num_questions o como argumento al llamar qg.generate(text, num_questions=20 Si el número de preguntas elegido es demasiado grande, entonces el modelo puede no poder generar lo suficiente. El número máximo de preguntas dependerá de la longitud de la entrada del texto, o más especificadamente, el número de oraciones y las entidades mencionadas contenidas dentro de la nota de la calidad. de preguntas, ya que el evaluador de control de calidad range generó preguntas y devuelve las mejores.
El sistema puede generar preguntas con respuestas de oración completa ( 'sentences' ), preguntas con respuestas de opción múltiple ( 'multiple_choice' ) o una mezcla de ambas ( 'all' ). Esto se puede seleccionar utilizando los argumentos --answer_style o qg.generate(answer_style=<style>) .
El modelo de generador de preguntas toma un texto como entrada y emite una serie de pares de preguntas y respuestas. Las respuestas son oraciones y frases extraídas del texto de entrada. Las frases extraídas pueden ser oraciones completas o entidades nombradas extraídas usando Spacy. Las entidades nombradas se utilizan para respuestas de opción múltiple. Las respuestas incorrectas serán otras entidades del mismo tipo que se encuentran en el texto. Las preguntas se generan concatenando la respuesta extraída con el texto completo (hasta un máximo de 512 tokens) como contexto en el siguiente formato:
answer_token <extracted answer> context_token <context>
La cadena concatenada se codifica y se alimenta al modelo de generador de preguntas. La arquitectura del modelo es t5-base . El modelo previo a la aparición fue FINETADO como un modelo de secuencia a secuencia en un conjunto de datos formó varios conjuntos de datos de control de calidad conocidos (Squad, Race, CoQA y Msmarco). Los conjuntos de datos se reestructuraron concatenando los campos de respuesta y contexto en el formato mencionado anteriormente. La respuesta y el contexto concatenados se usaron como un aporte para el entrenamiento, y el campo de la pregunta se convirtió en los objetivos.
Los conjuntos de datos se pueden encontrar aquí.
El evaluador de control de calidad toma un par de respuestas de la pregunta como una entrada y genera un valor que representa su predicción sobre si la entrada fue una pregunta válida y un par de respuestas o no. El modelo es bert-base-cased con un cabezal de clasificación de secuencia. El modelo previo a la aparición se fingió con los mismos datos que el modelo de generador de preguntas, pero se eliminó el contexto. La pregunta y la respuesta se concatenaron el 50% del tiempo. En el otro 50% del tiempo se realizó una operación de corrupción (ya sea intercambiando la respuesta por una respuesta no relacionada o copiando parte de la pregunta en la respuesta). Luego, el modelo fue entrenado para predecir si la secuencia de entrada representaba uno de los pares de control de calidad originales o una entrada corrupta.
La entrada para el evaluador de control de calidad sigue el formato para BertForSequenceClassification , pero utilizando la pregunta y la respuesta como las dos secuencias. Es el siguiente formato:
[CLS] <question> [SEP] <answer [SEP]