Генератор вопросов-это система НЛП для создания вопросов в стиле понимания прочитанного из таких текстов, как новостные статьи или выдержки страниц из книг. Система строится с использованием предварительных моделей от трансформаторов HuggingFace. Существует две модели: сам генератор вопросов и оценщик QA, который оценивает и фильтрует пары вопросов-ответов на основе их приемлемости.
Учебные ноутбуки были обновлены с помощью сценариев обучения. Запустить:
python question_generator/training/qg_train.pypython question_generator/training/qa_eval_train.pyГиперпараметры могут быть изменены с помощью аргументов командной линии. Смотрите сценарии для списка доступных аргументов.
Наборы данных были загружены в концентратор Huggingface:
Самый простой способ создать некоторые вопросы - клонировать репо 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
Это будет генерировать 10 пар вопросов-ответов смешанного стиля (полное предложение и множественное выбор) на основе статьи, указанной в --text_file , и печатайте их на консоли. Для получения дополнительной информации см. Записную книжку QG_COMMANDLINE_EXAMME.
Класс QuestionGenerator также может быть создан и использован так:
from questiongenerator import QuestionGenerator
qg = QuestionGenerator ()
qg . generate ( text , num_questions = 10 ) Это создаст 10 вопросов смешанного стиля и вернет список словарей, содержащих пары вопросов-ответов. В случае вопросов с множественным выбором, ответ будет содержать список словарей, содержащих ответы, и логическое значение, в котором говорится, правильный ответ или нет. Выход может быть легко напечатан с помощью функции print_qa() . Для получения дополнительной информации см. Записную книжку obstry_generation_example.
Желаемое количество вопросов может быть передано в виде аргумента командной строки с использованием --num_questions или в качестве аргумента при вызове qg.generate(text, num_questions=20 Если выбранное количество вопросов слишком велик, то модель может не сгенерировать достаточно. вопросов, поскольку оценщик QAS сгенерировал вопросы и возвращает лучшие.
Система может генерировать вопросы с помощью ответов на полную ценность ( 'sentences' ), вопросы с ответами с множественным выбором ( 'multiple_choice' ) или сочетанием обоих ( 'all' ). Это может быть выбрано с помощью аргументов --answer_style или qg.generate(answer_style=<style>) .
Модель генератора вопросов принимает текст в качестве ввода и выводит серию пар вопросов и ответов. Ответы - это предложения и фразы, извлеченные из входного текста. Извлеченные фразы могут быть либо полными предложениями, либо названными объектами, извлеченными с использованием Spacy. Названные сущности используются для ответов с несколькими вариантами ответов. Неправильные ответы будут другими сущностями того же типа, найденного в тексте. Вопросы генерируются путем объединения извлеченного ответа с полным текстом (максимум до 512 токенов) в качестве контекста в следующем формате:
answer_token <extracted answer> context_token <context>
Согласованная строка затем кодируется и подается в модель генератора вопросов. Архитектура модели-это t5-base . Предварительная модель была создана как модель последовательности к последовательности на наборе данных, состоящем из нескольких известных наборов данных QA (команда, гонка, Coqa и MSMarco). Наборы данных были реструктурированы путем объединения полей ответов и контекста в ранее упомянутый формат. Согласованный ответ и контекст использовались в качестве вклада для обучения, и поле вопроса стало целевым.
Наборы данных можно найти здесь.
Оценщик QA принимает пару ответов на вопрос в качестве ввода и выводит значение, представляющее его прогноз относительно того, был ли ввод допустимым вопросом и парой ответов или нет. Модель bert-base-cased с помощью головки классификации последовательностей. Предварительная модель была создана на тех же данных, что и модель генератора вопросов, но контекст был удален. Вопрос и ответ были объединены в 50% случаев. В остальные 50% случаев была выполнена операция по коррупции (либо обмениваясь ответом на несвязанный ответ, либо путем копирования части вопроса в ответ). Затем модель была обучена предсказать, представляла ли входная последовательность одна из исходных пар QA или поврежденный вход.
Вход для оценщика QA следует формату для BertForSequenceClassification , но используя вопрос и ответ в качестве двух последовательностей. Это следующий формат:
[CLS] <question> [SEP] <answer [SEP]