Абстракт

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

Мотивация

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

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

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

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

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

База знаний

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

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

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

оформить.Штамп_успеваемости => 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 чатбота; в свою очередь, процесс реализации первого подхода более трудоемкий, но при этом его поддержка проще и доступна для неспециалистов в области математики или программирования.

Комментарии (0)