Создание системы ответов на вопросы

За три месяца у нас была возможность разработать и реализовать проект с ответами на вопросы с помощью Serviceware SE.
Ответы на вопросы - распространенная задача в обработке естественного языка («НЛП») - подполе машинного обучения, в котором обрабатывается система вопрос и получает ответ для пользователя.

Идея состоит в том, что пользователю не нужно искать свой ответ в длинном тексте или каталоге статей («набор данных»), как в обычной поисковой системе, а скорее он получает предпочтительно короткий ответ на свой вопрос. Это прекрасная возможность для клиентов, а также для компаний: клиенты могут сэкономить время, не обращаясь в колл-центры, обслуживая себя, и компании могут сосредоточить свои усилия на более сложных запросах.

Эта область НЛП является предметом обширных исследований, и за последние несколько лет был достигнут значительный прогресс. Последние модели от Google, такие как BERT, при правильном обучении превосходят человеческий уровень точности ответов на вопросы.
Но все же: эта проблема еще далека от решения. Например, недостатком решения Google является то, что оно работает только с отдельными абзацами. Только если известен абзац, в котором вероятен ответ, модель может ответить на вопрос.

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

Как это работает

Но как это работает? Мы разделили наше приложение на три части:

Сначала мы сравниваем наш вопрос с каждым документом в используемом наборе данных и определяем 20 наиболее вероятных документов, которые содержат ответ.
Во-вторых, мы объединяем все абзацы этих 20 документов и снова сравниваем их с вопросом и определите 20 абзацев, которые, вероятно, содержат ответ.

Наконец, мы берем BERT (модель от Google) и пытаемся извлечь ответ для каждого абзаца и выбрать ответ, в котором показатель достоверности самый высокий - ответ, при котором модель с наибольшей уверенностью нашла правильный ответ.
Первые два шага называются извлечением, а последний - чтением.

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

Но почему это работает?

Поскольку эти векторы и их направление представляют разные функции: они могут указывать, какие слова или какое значение / содержание имеет данный текст. Например, одно направление может означать бейсбол, а другое - обработку естественного языка. «Машинное обучение», например, определенно больше походило бы на «НЛП», чем на «бейсбол».

Для следующего шага мы выбираем те документы / абзацы, которые имеют наибольшее сходство.

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

Заключение

В результате мы можем отвечать на вопросы по данной базе данных на нескольких языках. Результаты были многообещающими. Оно работает более точно и даже быстрее, чем существующие решения (например, cdQA от PNB Paribas).
Но, обеспечивая многообещающие результаты, наше решение сталкивается с некоторыми проблемами. В ситуации с клиентом нужно было сократить количество ложных срабатываний до (почти) нуля, потому что ложный ответ клиенту может иметь экономическое значение.

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

Это захватывающий и многообещающий путь, который мы смогли изучить благодаря Serviceware и TU Darmstadt. Мы были поражены, как далеко мы смогли продвинуться всего за три месяца. Вероятно, из-за хорошей поддержки Serviceware и их замечательной команды.

Особая благодарность Никласу и Адриану, а также Луизе.

И, конечно же, Джи Юне Ван, Джошуа Бодеманн, Марсель Наврат, Себастьян Маркус Майер и Владислав Мирецкий - мы действительно были отличной командой.