Введение

В настоящее время большая часть мира затронута пандемией COVID-19. Для многих из нас это означало домашний карантин, социальное дистанцирование, перебои в рабочей среде. Я очень увлечен использованием науки о данных и машинного обучения для решения проблем. Пожалуйста, свяжитесь со мной через здесь, если вы работаете в сфере здравоохранения и вам нужна помощь в области науки о данных в борьбе с этим кризисом.

Средства массовой информации по всему миру постоянно освещают пандемию - последние статистические данные, рекомендации вашего правительства, советы по обеспечению безопасности и т. Д. Сортировать всю имеющуюся информацию может быстро утомить.

В этом блоге я хочу поделиться тем, как вы можете использовать ответы на вопросы на основе BERT для извлечения информации из новостных статей о вирусе. Я даю советы по коду, как настроить это самостоятельно, а также рассказываю, где этот подход работает и когда он имеет тенденцию к сбою. Мой код тоже загружен на Github. Обратите внимание, что я не являюсь специалистом в области здравоохранения, и мнения, изложенные в этой статье, не следует интерпретировать как профессиональный совет.

Что такое ответ на вопрос?

Ответы на вопросы - это область компьютерных наук в рамках обработки естественного языка, которая включает создание систем, способных отвечать на вопросы из заданного фрагмента текста. Последние 2–3 года это была очень активная область исследований. Первоначальные системы ответов на вопросы были в основном основаны на правилах и ограничивались только определенными доменами, но теперь, с доступностью более совершенных вычислительных ресурсов и архитектур глубокого обучения, мы подходим к моделям, которые имеют обобщенные возможности ответа на вопросы.

Большинство наиболее эффективных моделей ответов на вопросы теперь основаны на архитектуре Transformers. Чтобы узнать больше о трансформерах, я рекомендовал это видео на YouTube. Преобразователи - это архитектуры на основе кодировщика-декодера, которые рассматривают проблему ответа на вопрос как проблему генерации текста; он берет контекст и вопрос в качестве триггера и пытается сгенерировать ответ из абзаца. BERT, ALBERT, XLNET и Roberta - все это широко используемые модели ответов на вопросы.

Отряд - наборы данных версий 1 и 2

Стэнфордский набор данных с ответами на вопросы (SQuAD) - это набор данных для обучения и оценки задачи с ответами на вопросы. На данный момент SQuAD выпустил две версии - v1 и v2. Основное различие между двумя наборами данных заключается в том, что SQuAD v2 также рассматривает образцы, на вопросы которых нет ответа в данном абзаце. Когда модель обучается в SQuAD v1, модель вернет ответ, даже если его не существует. В некоторой степени вы можете использовать вероятность ответа, чтобы отфильтровать маловероятные ответы, но это не всегда работает. С другой стороны, обучение на наборе данных SQuAD v2 - сложная задача, требующая тщательного контроля точности и настройки гиперпараметров.

Построение и тестирование модели SQuAD BERT

В связи со вспышкой этого вируса по всему миру появилось множество новостных статей, содержащих факты, события и другие новости о вирусе. Мы тестируем, как ответы на вопросы работают на статьях, которые модель никогда раньше не видела.

Чтобы продемонстрировать эту возможность, мы выбрали несколько информативных статей от CNN:

Репозиторий трансформаторов от huggingface - это потрясающее репозиторий на github, где они скомпилировали несколько конвейеров обучения и вывода на основе трансформаторов. Для этой задачи с ответом на вопрос мы загрузим предварительно обученную модель отряда с https://huggingface.co/models. Модель, которую мы будем использовать в этой статье, - bert-large-uncased-all-word-masking-finetuned-squad. Как видно из названия модели, модель обучается на большой модели с использованием словаря без регистра и маскирования всего слова. Для использования модели нам понадобятся три основных файла:

  1. Bert-large-uncased-all-word-masking-finetuned-squad-config.json: Этот файл представляет собой файл конфигурации, в котором есть параметры, которые код будет использовать для вывода.
  2. Bert-large-uncased-all-word-masking-finetuned-squad-pytorch_model.bin: Этот файл является фактическим файлом модели, который имеет все веса модели.
  3. bert-large-uncased-all-word-masking-finetuned-squad-tf_model.h5: этот файл содержит словарную модель, используемую для обучения файла.

Мы можем загрузить загруженную модель, используя следующие команды:

tokenizer = AutoTokenizer.from_pretrained(‘bert-large-uncased-whole-word-masking-finetuned-squad’, do_lower_case=True)
model = AutoModelForQuestionAnswering.from_pretrained(“bert-large-uncased-whole-word-masking-finetuned-squad”)

В целом, мы разделили наш код на два файла. На моем Github найди следующее:

  1. question_answering_inference.py
  2. question_answering_main.py

Файл question_answering_inference.py - это файл-оболочка, который имеет вспомогательные функции для обработки ввода и вывода. В этом файле мы загружаем текст из пути к файлу, очищаем текст (удаляем стоп-слова после преобразования всех слов в нижний регистр), преобразуем текст в абзацы и затем передаем его функции answer_prediction в файле question_answering_main.py. Функция answer_prediction возвращает ответы и их вероятности. Затем мы фильтруем ответы на основе порога вероятности, а затем отображаем ответы с их вероятностью.

Файл question_answering_main.py - это основной файл, в котором есть все функции, необходимые для использования предварительно обученной модели и токенизатора для прогнозирования ответа с учетом параграфов и вопросов.

Основной функцией драйвера в этом файле является функция answer_prediction, которая загружает файлы модели и токенизатора, вызывает функции для преобразования абзацев в текст, сегментации текста, преобразования функций в соответствующие объекты, преобразования объектов в пакеты и затем прогнозирования ответа с помощью вероятности.

Чтобы запустить сценарий, выполните следующую команду:

python question_answering_inference.py — ques ‘How many confirmed cases are in Mexico?’ — source ‘sample2.txt’

Программа принимает следующие параметры:

  • ques: Параметр вопроса, который ожидает вопрос, заключенный в одинарные (или двойные) кавычки.
  • источник: этот параметр имеет исходный путь к текстовому файлу, содержащему текст / статью.

Модель Выходы

Мы тестируем эту модель на нескольких статьях о коронавирусе. :





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

Приведенный выше ответ правильный. Модель умеет с большой уверенностью подобрать правильный ответ.

Это более сложный вопрос, поскольку в статье есть несколько статистических данных. Одно исследование из Исландии показывает, что около 50% носителей бессимптомны, тогда как CDC оценивает 25%. Удивительно видеть, что модель может выбрать и вернуть правильный ответ.

Позже в той же статье рассказывается об эффекте вмешательства и о том, сколько смертей можно предотвратить. Соответствующий текст скопирован ниже. Однако при запуске кода мы передаем всю статью, а не подмножество ниже. Поскольку модель SQUAD имеет ограничение на количество обрабатываемого текста, мы передаем полный текст несколькими циклами. Как вы видите ниже, это может означать, что модель возвращает несколько ответов. Здесь первый ответ с наибольшей вероятностью - правильный.

Другой пример, когда это происходит, представлен ниже. Здесь правильный ответ: Майк Райан - директор программы ВОЗ по чрезвычайным ситуациям в области здравоохранения. Модель может это уловить с вероятностью 96%. Однако он возвращает доктора Фаучи как маловероятный ответ. Здесь мы также можем использовать показатель вероятности, чтобы получить правильный ответ.

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

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

Проблемы

Некоторые проблемы с использованием Squad v1 для ответов на вопросы:

1) Часто модель дает ответ с достаточно высокой вероятностью, даже если ответа нет в тексте, что приводит к ложным срабатываниям.

2) Хотя во многих случаях ответы можно правильно ранжировать по вероятности, это не всегда пуленепробиваемое. Мы наблюдали случаи, когда неправильный ответ имеет такую ​​же или более высокую вероятность, чем правильный ответ.

3) Модель чувствительна к пунктуации во вводимом тексте. При подаче входных данных в модель текст должен быть чистым (без ненужных слов, символов и т. Д.), Иначе это может привести к неверным результатам.

Первые две проблемы можно до некоторой степени решить, используя модель SQuAD v2 вместо SQuAD v1. В наборе данных SQuAD v2 есть образцы в обучающем наборе, где нет ответов на заданный вопрос. Это позволяет модели лучше судить, когда не следует возвращать ответ. У нас есть опыт использования моделей SQuAD v2. Пожалуйста, свяжитесь со мной через мой веб-сайт, если вы заинтересованы в применении этого в вашем случае использования.

Заключение

В этой статье мы увидели, как можно легко реализовать ответ на вопрос для создания систем, способных находить информацию из длинных новостных статей. Я рекомендую вам попробовать это для себя и узнать что-то новое, пока вы находитесь в карантине.

Я очень увлечен НЛП, трансформерами и глубоким обучением в целом. У меня есть собственный консультант по глубокому обучению, и я люблю работать над интересными проблемами. Я помог многим стартапам внедрить инновационные решения на основе ИИ. Заходите к нам на - http://deeplearninganalytics.org/.

использованная литература