Не успели прочитать книгу для большой викторины? Почему бы не создать систему, которая ответит на ваши вопросы?

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

[Статья по теме: 20 открытых наборов данных для обработки естественного языка]

Этот пост написан на очень высоком уровне, чтобы узнать больше о процессе, вы можете прийти на мое тренировочное занятие на ODSC West 2019. На этом занятии мы подробно рассмотрим, как работает каждый компонент. Примеры кода Python о том, как построить каждый компонент, и вы создадите свою собственную версию системы, используя выбранный вами набор данных.

Шаг 1

Первый шаг в нашей архитектуре - принять запрос в форме вопроса и вернуть соответствующие документы, которые могут содержать ответ. Этого можно добиться с помощью чистого Python, используя библиотеку Whoosh. Whoosh - это информационно-поисковая библиотека, которая ведет себя аналогично Elasticsearch. По умолчанию Whoosh использует функцию ранжирования Okapi BM25F для поиска документов, наиболее похожих на входной запрос. BM25 можно рассматривать как аналог TF-IDF, но в него встроены некоторые хитрые приемы, позволяющие добиться лучших результатов, чем его предшественник. Используя эту библиотеку с открытым исходным кодом, мы можем мгновенно получить соответствующие документы и перейти к заданию им серьезных вопросов.

Шаг 2

Как только у нас появятся соответствующие документы, мы можем использовать еще немного волшебства с открытым исходным кодом, чтобы начать задавать им вопросы. Для этого мы воспользуемся предварительно обученной моделью глубокого обучения, распространяемой пакетом Python DeepPavlov. Эта модель была обучена на наборе данных, известном как SQuAD (S tanford Вопрос A nswering D ataset), этот набор данных принимает в качестве входных данных статью и вопрос из Википедии и выводит лучший ответ на вопрос, найденный в статье. Конкретная модель, обученная и распространенная DeepPavlov, использует архитектуру, которая включает BERT (B двунаправленные представления E ncoder R для T ransformers). Модели, обученные с помощью BERT, и его преемник ALBERT (A L ite BERT) не новичок в первых позициях списков лидеров, таких как SQuAD.

Шаг 3

Наш последний шаг - связать воедино все, что мы уже сделали. Теперь у нас есть компонент поиска информации, который может принимать запросы и возвращать документы, и у нас есть компонент вопросов и ответов, который может принимать запрос и документ и возвращать лучший ответ. Чтобы связать эти 2 вместе, мы можем перебирать документы, возвращенные из Шага 1, и задавать каждому из этих документов вопрос, используя Шаг 2. Когда у нас есть список ответов, мы можем ранжировать их и возвращать лучший или отображать список возможных ответов для нашего пользователя и позволять его опыту в предметной области выбрать лучший.

Имея эту систему, мы можем немного повеселиться и просмотреть некоторые примеры ввода и вывода. Ниже приведены несколько реальных примеров из двух экземпляров системы, реализованных на двух разных наборах данных.

[Статья по теме: Введение в языковую обработку с помощью NLTK]

Пример из системы, построенной на корпусе статей Nasdaq:

Вопрос: «Кто такой Илон Маск?»

Популярный ответ: «эксцентричный генеральный директор»

Пример из системы, построенной на тексте Кодекса Давинчи Дэна Брауна:

Вопрос: «Какого предмета преподает Роберт Лэнгдон?»

Популярный ответ: «РЕЛИГИОЗНАЯ СИМВОЛОГИЯ»

Оригинальный пост здесь.

Прочтите больше статей по науке о данных на OpenDataScience.com, включая учебные пособия и руководства от новичка до продвинутого уровня! Подпишитесь на нашу еженедельную рассылку здесь и получайте последние новости каждый четверг.