Декларативный и императивный подходы к построению QA чатбота

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Мотивация

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

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

Вторую причину назовем исследовательской. В некотором смысле описанный выше подход к построению чатбота можно назвать императивным: для работы чатбота в явном виде прописываются наборы инструкций, которые в своем объединение образуют сценарий, такие сценарии принято называть деревом диалога (на самом деле это не дерево в строгом понимании термина теории графов). Но что если мы будем только формулировать задачи (запросы) в корректной форме, а чатбот сам будет искать для них решение в заданной области? Если пренебречь конкретными деталями, то такой подход кажется очень привлекательным. Такой подход назовём декларативным.

Описание принципа работы

Принцип работы во многом основывается на идеи экспертной системы, которая впервые была использована ещё в 60-х [1]. В моей реализации чатбот состоит из трех модулей: база знаний, анализатор, решатель.

База знаний

База знаний формально описывает предметную область, относительно который чатбот дает ответы. Например, предметной областью может быть обучение и работа в университете. В качестве языка описания я использовал язык теории онтологий, который состоит из так называемых ролей и концептов, а также логических отношений (быть гипонимом, быть гиперонимом) между ними. Концепт это одноместный предикат, он выражает некоторый класс сущностей, например, "документ", "общежитие", "книга" и т.д. Роль описывает двухместный предикат — она связывает два концепта. Пример:

Как можно оформить свой штамп успеваемости?

Здесь роль "оформить" может связывать концепты "штамп успеваемости" и "оформленный штамп успеваемости". Логические отношение формулируются в виде правил. Выделим концепты специального вида — интенты, они выражают непосредственно намерение пользователя, именно по ним бот способен принять решение какой ответ дать. Примеру выше в базе знаний может соответствовать следующие правило:

оформить.Штамп_успеваемости => TRANSCRIPT_get

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

Анализатор

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

Дерево синтаксического разбора.
Дерево синтаксического разбора.

В качестве основы синтаксического разбора используется языковая модель UDPipe обученная на глубоко аннотированном корпусе русского языка SynTagRus. Качество такой модели недостаточно для качественного выполнения задачи диалоговой системы: синтаксические деревья генерируются нейронной сетью, и парсить деревья "налету" не удается, т.к. имеет место большой шанс нестабильности: заявленная авторами модели точность составляется 81-82%. Для парсинга дерева и обработки ошибок нейронной сети мною был написан специальный парсер, он осуществляет непосредственно парсинг udpipe-дерева и некоторый постпроцессинг, что делает погрешность модели пренебрежительной в условиях поставленной задачи.

Решатель

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

r.C_i  \sqcap [\hat{C}_{p_1} \sqcap ... \sqcap \hat{C}_{p_n}] \sqsubseteq  C_j r - роль, C_i - концепт[\hat{C}_{p_1}, ... ,\hat{C}_{p_n}] - \text{концепты-параметры}C_j - \text{концепт, выражающий намерение}.

Например,

\text{оплатить}.Проживание  \sqcap [Наличными] \sqsubseteq \text{room_payOffline}

Пользователь может задать неоднозначный вопрос. Однозначность может нарушиться если, пользователь 1) указал слишком широкий концепт; 2) не указал концепт-параметр для роли; 3) указал роль, но не указал концепт и наоборот. Во всех случаях неоднозначность разрешается путем диалога, т.е. бот уточняет ту или иную часть вопроса.

Декларативный чатбот в действии

Реализация описанного выше подхода была запущена как реальное приложение в начале 2021 года на базе НГУ в рамках студенческого проекта. Чатбот имел цель отвечать на вопросы, связанные с учёбой и работой в НГУ, а также с жизнью в Академгородке. Всего чатбот имел 142 ответа на различные вопросы, например, выдача инструкции (например, "как получить справку о доходах"), отправка расписания выбранного по группе, дню, преподавателю.

Отношения между концептами заданные через онтологию успешно использовались – в случае неоднозначности бот уточнял необходимую информацию. А в случае необходимости добавления новой пары "вопрос-ответ" новое правило формировалось, добавлялось в список правил, и оно автоматически интегрировалось в базу знаний бота. Таким образом, обновление чатбота происходит действительно быстро

Преимущества и недостатки

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

Рассмотрим преимущества.

1) Поддержка такого чатбота относительно простая. Если потребовалось добавить новую пару "вопрос-ответ", то достаточно описать правило в терминах ролей и концептов, добавить его в базу знаний чатбота, где оно автоматически "свяжется" с другими правилами по признаку отношений концептов и ролей.

2) Декларативный подход рассматривается как подход интерпретируемого ИИ, т.е. все решения чатбота могут быть объяснены. Действительно, все решения чатбота - это конечная последовательность правил логического вывода.

3) Расходы на построение такого чатбота меньше, чем расходы на построение чатбота на основе нейросетевых моделей. Во-первых, расходы на вычисления во время обучения моделей. Единственная нейросетевая модель, используемая в декларативном подходе - это модель синтаксического анализа, которая является универсальной для данного языка и поэтому не требует дополнительного дообучения. В императивном подходе, как правило, используются несколько моделей – одна модель для одной NLP задачи (классификация текста, выделение NER, smalltalk диалог и т.д.). Каждая из этих моделей должна быть обучена с нуля каждый раз когда требуется расширить возможности чатбота (например, добавить новую пару "вопрос-ответ"). Во-вторых, расходы на память, в силу вышенаписанного декларативный подход предлагает чатбот бота с меньшим потреблением памяти на диске. Например, размер чатбота НГУ в исполнение декларативного подхода составляет 440 мб, из которых 400 мб - это нейросетевая модель для синтаксического анализа. В свою очередь тот же чатбот в исполнение императивного подхода обычно весит в разы больше.

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

Теперь к недостаткам.

1) Чатбот принимает решение на основе базы знаний, которая включает в себя предметную и лингвистическую онтологии. Их полнота и корректность определяет качество работы бота. Построение предметной онтологии можно сделать полу-автоматической – на достаточно большом неаннотированном релевантном корпусе можно извлечь большинство часто встречаемых концептов и ролей с помощью синтаксического анализатора. Однако валидация такой онтологии всё ещё остается человеку-эксперту в данной предметной области. Основная трудность здесь — это сделать описание достаточно полным и при этом избежать неоднозначности.

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

Императивный чатбот в действии

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

Выбор технологий и разработка

Для императивного подхода требуется : языковые модели и сценарий диалога. Языковая модель получается в результате обучения нейронной сети некоторой архитектуры на датасете. В данной задаче чатбота требуется выполнения двух подзадач – классификация намерения пользователя по его сообщению, а так же классификация токенов для извлечения именованных сущностей (NER - Named Entity Recognition). Первая подзадача имеет особенность. Модель должна не только классифицировать, но и отказываться от классификации в том случае, если намерение пользователя не входит в список намерений из обучающей выборки. В этом случае чатбот мог бы сообщать, что он не может ответить на подобный вопрос. Однако как измерять степень уверенности модели? Наивный подход - это рассмотрение p-value, однако нейронные сети известны своей оптимистичностью относительно своих предсказаний, поэтому p-value почти всегда будет > 0.9, следовательно, мы не можем использовать это значение как показатель истинного правдоподобия предсказания. В силу данного обстоятельства, я буду использовать ансамбль небольших языковых моделей. Окончательное решение будет приниматься в случае если существует класс, за который проголосовало больше половины моделей. В противном случае отказываемся от принятия решения и сообщаем о неизвестном классе.

На сегодняшний день лучше результаты показывают архитектуры семейства BERT, однако размеры моделей на основе таких архитектур очень большие (начиная от 50 млн. параметров, т.е. 600 мб), и это осложняет использования ансамбля таких моделей. Поэтому я использую ансамбль более простых моделей (weak predictors) на основе архитектуры свёрточных сетей.

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

Преобразование правил онтологии в поддерево дерева диалога
Преобразование правил онтологии в поддерево дерева диалога

Сопоставление декларативного и императивного подходов

Выделим принципиальные различия в работе чатбота в двух подходах.

1) Форма представления знаний в декларативном случае - это экспертная система (онтология с логическим выводом), когда как в императивном случае — это только результат работы экспертной системы (аннотированные примеры данных). Другими словами, в первом случае имеет место дедуктивное обучение, а во втором — индуктивное.

2) Поиск решения задачи в случае императивного подхода явно пишется как программа (сценарий, дерево диалога), когда как в декларативном подходе поиск решения осуществляется самим чатботом при условии, что заданы основные логические блоки (онтология, правила вывода).

3) Анализ запроса на естественном языке в случае декларативного подхода предполагает выделение логических единиц, которые выражаются заранее определенным набором синонимических слов и словосочетаний (синсетом). Таким образом, такой чатбот работает на уровне словарных единиц. В свою очередь современные нейросетевые модели работают на уровне BPE, частей слов, выделенных по признаку частоты встречаемости. Такой подход делает анализ предложений языка более гибким, но менее интерпретируемым.

Заключение

Было рассмотрено как можно решить задачу предметно-орентированной диалоговой системы с помощью двух подходов. Первый подход предполагает использования предметной онтологии (экспертная база данных с набором правил), а второй — нейросети, обученные на специально собранном и размеченном датасете. Наиболее распространенным подходом является второй, так как он позволяет относительно быстро и легко построить относительно качественного QA чатбота; в свою очередь, процесс реализации первого подхода более трудоемкий, но при этом его поддержка проще и доступна для неспециалистов в области математики или программирования.

Источник: https://habr.com/ru/post/574916/


Интересные статьи

Интересные статьи

В прошлой части мы поговорили о советах директору по разработке бизнес-процесса в Битрикс24, сейчас же я постараюсь дать советы руководителям отделов, поскольку по моему опыту почти всегд...
Статья о том, как упорядочить найм1. Информируем о вакансии2. Ведём до найма3. Автоматизируем скучное4. Оформляем и выводим на работу5. Отчитываемся по итогам6. Помогаем с адаптацией...
Принято считать, что персонализация в интернете это магия, которая создается сотнями серверов на основе БигДата и сложного семантического анализа контента.
Вам приходилось сталкиваться с ситуацией, когда сайт или портал Битрикс24 недоступен, потому что на диске неожиданно закончилось место? Да, последний бэкап съел все место на диске в самый неподходящий...
В Челябинске проходят митапы системных администраторов Sysadminka, и на последнем из них я делал доклад о нашем решении для работы приложений на 1С-Битрикс в Kubernetes. Битрикс, Kubernetes, Сep...