Генерация вопросов с использованием новейших методов обработки естественного языка

Ответ на вопрос - очень популярная задача при обработке естественного языка, но создание вопросов - это новинка, и она еще мало изучена.

Если вы хотите попробовать живую демонстрацию создания вопросов в действии, посетите https://questgen.ai/

У генерации вопросов есть множество вариантов использования, наиболее известным из которых является возможность генерировать быстрые оценки на основе любого заданного содержания. Это поможет школьным учителям быстро создавать рабочие листы из любой главы и уменьшить их рабочую нагрузку во время Covid-19.

Я вместе с двумя другими замечательными стажерами Партх Чохра и Вайбхав Тивари создали простую в использовании библиотеку с открытым исходным кодом, чтобы продвигать исследования в создание вопросов с помощью современной модели преобразователя T5 из библиотеки Hugging Face.

В настоящее время поддерживаются следующие возможности создания вопросов в библиотеке: MCQ, вопросы типа «да / нет», ответы на часто задаваемые вопросы, перефразирование и ответы на вопросы.

Без промедления давайте углубимся в детали.

Весь код и простой в использовании Google Colab можно найти здесь:



Установка

Установите библиотеки:

!pip install git+https://github.com/ramsrigouthamg/Questgen.ai
!pip install sense2vec==1.0.2
!pip install git+https://github.com/boudinfl/pke.git

!python -m nltk.downloader universal_tagset
!python -m spacy download en

Загрузите и распакуйте zip векторов слов Sense2vec, которые используются для генерации множественного выбора.

!wget https://github.com/explosion/sense2vec/releases/download/v1.0.0/s2v_reddit_2015_md.tar.gz
!tar -xvf  s2v_reddit_2015_md.tar.gz
!ls s2v_old

Запуск кода

1. Сгенерируйте логические (да / нет) вопросы

from pprint import pprint
from Questgen import main
qe= main.BoolQGen()
payload = {
            "input_text": "Sachin Ramesh Tendulkar is a former international cricketer from India and a former captain of the Indian national team. He is widely regarded as one of the greatest batsmen in the history of cricket. He is the highest run scorer of all time in International cricket."
        }
output = qe.predict_boolq(payload)
pprint (output)

Выход:

'Boolean Questions': ['Is sachin ramesh tendulkar the highest run scorer in '
                       'cricket?',
                       'Is sachin ramesh tendulkar the highest run scorer in '
                       'cricket?',
                       'Is sachin tendulkar the highest run scorer in '
                       'cricket?']

2. Создание вопросов для MCQ.

qg = main.QGen()
    output = qg.predict_mcq(payload)
    pprint (output)

Выход:

{'questions': [{'answer': 'cricketer',
                'context': 'Sachin Ramesh Tendulkar is a former international '
                           'cricketer from India and a former captain of the '
                           'Indian national team.',
                'extra_options': ['Mark Waugh',
                                  'Sharma',
                                  'Ricky Ponting',
                                  'Afridi',
                                  'Kohli',
                                  'Dhoni'],
                'id': 1,
                'options': ['Brett Lee', 'Footballer', 'International Cricket'],
                'options_algorithm': 'sense2vec',
                'question_statement': "What is Sachin Ramesh Tendulkar's "
                                      'career?',
                'question_type': 'MCQ'},
               {'answer': 'india',
                'context': 'Sachin Ramesh Tendulkar is a former international '
                           'cricketer from India and a former captain of the '
                           'Indian national team.',
                'extra_options': ['Pakistan',
                                  'South Korea',
                                  'Nepal',
                                  'Philippines',
                                  'Zimbabwe'],
                'id': 2,
                'options': ['Bangladesh', 'Indonesia', 'China'],
                'options_algorithm': 'sense2vec',
                'question_statement': 'Where is Sachin Ramesh Tendulkar from?',
                'question_type': 'MCQ'},
               {'answer': 'batsmen',
                'context': 'He is widely regarded as one of the greatest '
                           'batsmen in the history of cricket.',
                'extra_options': ['Ashwin', 'Dhoni', 'Afridi', 'Death Overs'],
                'id': 3,
                'options': ['Bowlers', 'Wickets', 'Mccullum'],
                'options_algorithm': 'sense2vec',
                'question_statement': 'What is the best cricketer?',
                'question_type': 'MCQ'}]}

3. Создавайте часто задаваемые вопросы.

output = qg.predict_shortq(payload)
pprint (output)

Выход :

{'questions': [{'Answer': 'cricketer',
               'Question': "What is Sachin Ramesh Tendulkar's career?",
               'context': 'Sachin Ramesh Tendulkar is a former international '
                          'cricketer from India and a former captain of the '
                          'Indian national team.',
               'id': 1},
              {'Answer': 'india',
               'Question': 'Where is Sachin Ramesh Tendulkar from?',
               'context': 'Sachin Ramesh Tendulkar is a former international '
                          'cricketer from India and a former captain of the '
                          'Indian national team.',
               'id': 2},
              {'Answer': 'batsmen',
               'Question': 'What is the best cricketer?',
               'context': 'He is widely regarded as one of the greatest '
                          'batsmen in the history of cricket.',
               'id': 3}]
}

4. Перефразирование вопросов

payload2 = {
    "input_text" : "What is Sachin Tendulkar profession?",
    "max_questions": 5
}
output = qg.paraphrase(payload2)
pprint (output)

Выход:

{'Paraphrased Questions': ["ParaphrasedTarget: What is Sachin Tendulkar's profession?",
                           "ParaphrasedTarget: What is Sachin Tendulkar's career?",
                           "ParaphrasedTarget: What is Sachin Tendulkar's job?",
                           'ParaphrasedTarget: What is Sachin Tendulkar?',
                           "ParaphrasedTarget: What is Sachin Tendulkar's occupation?"],
 'Question': 'What is Sachin Tendulkar profession?'}

5. Ответ на вопрос (простой)

answer = main.AnswerPredictor()
payload3 = {
    "input_text" : '''Sachin Ramesh Tendulkar is a former international cricketer from 
              India and a former captain of the Indian national team. He is widely regarded 
              as one of the greatest batsmen in the history of cricket. He is the highest
               run scorer of all time in International cricket.''',
    "input_question" : "Who is Sachin tendulkar ? "
    
}
output = answer.predict_answer(payload3)

Выход:

Sachin ramesh tendulkar is a former international cricketer from india and a former captain of the indian national team.

6. Ответ на вопрос (логический)

payload4 = {
    "input_text" : '''Sachin Ramesh Tendulkar is a former international cricketer from 
              India and a former captain of the Indian national team. He is widely regarded 
              as one of the greatest batsmen in the history of cricket. He is the highest
               run scorer of all time in International cricket.''',
    "input_question" : "Is Sachin tendulkar  a former cricketer? "
}
output = answer.predict_answer(payload4)
print (output)

Выход:

Yes, sachin tendulkar is a former cricketer.

Создание вопросов с помощью курса НЛП

Я запустил практический курс Udemy под названием Генерация вопросов с помощью НЛП, в котором подробно рассматриваются некоторые методы, обсуждаемые в этом сообщении в блоге. Если хотите посмотреть, вот ссылка.

Используемые модели НЛП

Для обеспечения осмысленности вопросов Questgen использует три модели T5. Один для генерации логических вопросов, один для MCQ, часто задаваемых вопросов, перефразирования и один для генерации ответов. Пары вопросов Quora, BoolQ, SQUAD и MSMarco - это наборы данных, используемые для обучения.

Вот несколько моих предыдущих статей, в которых объясняется, как построить эти модели генерации вопросов с нуля.

Создавать логические (да / нет) вопросы из любого контента, используя модель трансформатора T5

Перефразируйте любой вопрос, используя модель трансформатора Т5

Живой когортный курс: Практическое введение в НЛП

Я провожу 4-недельный когортный курс Практическое введение в НЛП с Maven, лучшей в мире платформой для когортного обучения. Если вы хотите превратиться из разработчика Python в младшего разработчика НЛП с практическим опытом работы в проектах за 4 недели, займите свое место прямо сейчас!

Удачного обучения!