Умение отвечать на фактоидные вопросы - ключевая особенность любой диалоговой системы. Формально, дать ответ, основанный на коллекции документов, охватывающей широкий круг тем, называется ответом на вопросы в открытой области (ODQA). Задача ODQA сочетает в себе задачи поиска документов (поиск соответствующих статей) с задачей машинного понимания текста (определение диапазона ответов из этих статей). Система ODQA может использоваться во многих приложениях. Чат-боты применяют ODQA для ответа на запросы пользователей, в то время как бизнес-ориентированные решения обработки естественного языка (NLP) используют ODQA для ответа на вопросы, основанные на внутренней корпоративной документации. На рисунке ниже показан типичный диалог с системой ODQA.

Существует несколько подходов к архитектуре системы ODQA. Модульная система ODQA состоит из двух компонентов: первый (средство ранжирования) должен иметь возможность находить соответствующие статьи в базе данных (например, Википедии), тогда как второй (читатель) извлекает ответ из отдельной статьи или небольшой сборник статей, полученных ранкером. В дополнение к строго двухкомпонентным системам ODQA существуют гибридные системы, основанные на нескольких средствах ранжирования, в которых последнее средство ранжирования в конвейере комбинируется с модулем извлечения ответов, обычно посредством обучения с подкреплением.

Далее я хотел бы показать, как можно использовать предварительно обученную систему ODQA DeepPavlov Wikipedia. Кроме того, я опишу, как можно обучить систему ODQA на ваших данных. Код, использованный в этой статье, доступен в Colaboratory по ссылке. Более того, вы можете развернуть модели ODQA (и многие другие) на Amazon Web Services с помощью виртуальной машины EC2, выполнив шаги из документации. Кроме того, вы можете ознакомиться с нашей демонстрацией.

Описание модели

Архитектура навыка ODQA DeepPavlov является модульной и состоит из двух компонентов: ранжер и считыватель. Чтобы ответить на любой вопрос, средство ранжирования сначала извлекает несколько релевантных статей из коллекции статей, а затем читатель внимательно их просматривает, чтобы определить ответ. Рейтинг основан на DrQA [1], предложенном Facebook Research. В частности, подход DrQA использует хеширование униграммы и биграммы и сопоставление TF-IDF, предназначенное для эффективного возврата подмножества релевантных статей на основе вопроса. Читатель основан на R-NET [2], предложенной Microsoft Research Asia, и ее реализации Wenxuan Zhou. Архитектура R-NET - это сквозная модель нейронной сети, цель которой - отвечать на вопросы, основанные на данной статье. R-NET сначала сопоставляет вопрос и статью через закрытые повторяющиеся сети, основанные на внимании, чтобы получить представление статьи с учетом вопроса. Затем механизм самосопоставления внимания уточняет представление, сопоставляя статью с самой собой, что эффективно кодирует информацию из всей статьи. Наконец, сети указателей определяют позиции ответов в статье. На схеме ниже показана архитектура системы DeepPavlov ODQA.

Система ODQA DeepPavlov имеет две предварительно обученные модели, основанные на Википедии. Первый основан на дампе английской Википедии за 2018–02–11 гг. (5 180 368 статей), а второй основан на дампе русской Википедии за 2018–04–01 (1 463 888 статей). Модели рассматривают Википедию как собрание статей и не полагаются на ее внутреннюю структуру графа. В результате наш подход является универсальным и может быть применен к другим собраниям документов, книг или даже ежедневных газет.

Модели ODQA описаны в отдельных конфигурационных файлах в папке deeppavlov / configs / odqa. Файлы конфигурации DeepPavlov определяют конвейер обработки данных и состоят из четырех основных разделов: dataset_reader, dataset_iterator, chainer и train . Более подробную информацию о файлах конфигурации можно найти в разделе Простое распознавание намерений и ответы на вопросы с помощью DeepPavlov.

Входными данными конфигурации en_odqa_infer_wiki является запрос пользователя (question_raw), а выходными данными - лучший_ответ модели. Выходные данные модели зависят от средства ранжирования, определенного как первый компонент канала ODQA, и считывающего устройства, определенного как последний компонент канала ODQA.

Конфигурация ранжера

Файлы конфигурации ранкера находятся в папке deeppavlov / configs / doc_retrieval.

Раздел dataset_reader конфигурации средства ранжирования определяет источник статей. Источник может иметь следующий формат_данных:

wiki - дамп Википедии, извлеченный wikiextractor,

txt - путь к разделенным текстовым файлам,

json - файлы JSON, которые должны быть отформатированы как список с dicts, содержащим ключевые слова title и doc.

Первый компонент конвейера ранжирования определяет векторизатор хеширования документа с параметрами токенизации:

lemmas = True - включить лемматизацию,

ngram_range = [1,2] - токенизировать документы в униграммы и биграммы.

В качестве выходных данных средство ранжирования возвращает список документа top_n.

Подробное описание параметров конфигурации ранкера можно найти в документации DeepPavlov.

Конфигурация считывателя

Конфигурационные файлы ридера находятся в папке deeppavlov / configs / squad. Компонент читателя стремится найти ответ на вопрос в заданных статьях, полученных компонентом ранжирования. Реализация читателя основана на системе понимания прочитанного R-NET, разработанной Microsoft Research. Подробное описание параметров конфигурации считывателя можно найти в документации DeepPavlov.

Требования к модели

Чтобы взаимодействовать с моделью, сначала установите требования к модели.

python -m deeppavlov install deeppavlov/configs/odqa/en_odqa_infer_wiki.json

Система DeepPavlov ODQA имеет две модели, основанные на Википедии. Для английской модели Википедии требуется 35 ГБ локального хранилища, тогда как для русской версии требуется около 20 ГБ. Дампы Википедии можно восстановить, выполнив действия, описанные в документации. Обе модели требуют около 24 ГБ оперативной памяти. Их можно запускать на машине с 16 ГБ, но размер подкачки должен быть не менее 8 ГБ.

Взаимодействие с моделью

Вы можете взаимодействовать с моделями через командную строку:

python -m deeppavlov interact deeppavlov/configs/odqa/en_odqa_infer_wiki.json -d

где -d означает загрузку всех файлов, требуемых моделями.

В качестве альтернативы вы можете запустить модель через код Python:

Обучение модели

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

В качестве учебного корпуса я буду использовать корпус PLoS Computational Biology [4]. Он состоит из 300 статей по вычислительной биологии, каждая из которых хранится в отдельном файле txt. Для простоты мы будем использовать те же файлы конфигурации, которые используются для системы ODQA на основе Википедии; однако мы настоятельно рекомендуем вам создавать собственные файлы конфигурации для ваших собственных моделей.

Сначала скачайте набор данных и распакуйте его в папку.

Список документов содержит 30 самых популярных статей по запросу cerebellum. Затем давайте построим модели ODQA и запустим запрос:

Заключение

В этой статье я описал ODQA-модель фреймворка DeepPavlov. Эта модель основана на двухкомпонентном подходе. При разработке архитектуры ODQA всегда следует искать баланс между производительностью модели и ее требованиями к ресурсам. Используя нашу систему, вы можете добиться хорошей производительности при разумных ресурсах. В настоящее время все наиболее эффективные модели основаны на архитектуре BERT (двунаправленные представления кодировщика от трансформаторов) [5]. Однако системы на основе BERT требуют огромных вычислительных ресурсов.

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

[1] Чен, Д., Фиш, А., Уэстон, Дж., И Бордес, А. (2017). Чтение википедии, чтобы ответить на вопросы открытого домена. Препринт arXiv arXiv: 1704.00051.

[2] Группа, Вычисления на естественном языке (2017). R-NET: Понимание машинного чтения с самосогласованными сетями.

[3] Раджпуркар, П., Чжан, Дж., Лопырев, К., и Лян, П. (2016). Команда: 100 000+ вопросов на машинное понимание текста. Препринт arXiv arXiv: 1606.05250.

[4] Тойфель, С., и Моэнс, М. (2002). Обобщение научных статей: эксперименты с актуальностью и риторическим статусом. Компьютерная лингвистика, 28 (4), 409–445.

[5] Девлин, Дж., Чанг, М. В., Ли, К., и Тутанова, К. (2018). Берт: Предварительная подготовка глубоких двунаправленных трансформеров для понимания языка. Препринт arXiv arXiv: 1810.04805.