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

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

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

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

Оглавление

  1. Постановка проблемы
  2. Языковые модели N-грамм
  3. Обнаружение намерений с использованием языковых моделей n-грамм

Постановка проблемы

Теперь, когда мы понимаем идею и мотивацию предложений о намерениях, давайте сформулируем список желаемых характеристик нашего будущего решения:

  1. Решение должно быть достаточно быстрым с низким потреблением ресурсов. Чаще всего ему придется делать прогнозы несколько раз для одного пользовательского запроса.
  2. Он должен оперировать частичными фразами и даже отдельными словами.
  3. Он должен отражать статистическую вероятность каждого подразумеваемого намерения. Нам часто приходится делать прогнозы на основе фраз, которые не имеют достаточного контекста, чтобы вывести намерение (например, «я не могу» может подразумевать несколько намерений). По этой причине мы хотим, чтобы намерения, чаще всего содержащие входную фразу в своих обучающих данных, считались наиболее вероятными.

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

Языковые модели N-грамм

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

Как правило, языковые модели с n-граммами рассчитывают относительную частоту слов, которые следуют за каждой (n-1)-граммой, найденной в обучающих данных. Другими словами, во время обучения он скользит по текстам в данных, используя окно размером n-1 слов, и запоминает, какие слова он видел после него и как часто.

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

В результате обучения у нас будет список всех найденных n-грамм с указанием их частоты. Или, что более удобно, словарь с (n-1)-граммами в качестве ключей и все найденные n-е слова с их частотой считаются значениями.

Во время вывода мы используем последние n-1 слов входной последовательности для поиска наиболее часто встречающегося следующего слова и возвращаем его в качестве нашего прогноза.

Вероятность того, что конкретное слово будет следующим словом, равна подсчету частоты соответствующего слова, деленному на сумму подсчетов частот всех слов, найденных после данной (n-1)-граммы.

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

Обнаружение намерений с использованием языковых моделей n-грамм

Теперь давайте обсудим фактический код. Мы рассмотрим основные части. Полную версию можно найти здесь".

Обозначение. Учитывая, что мы пытаемся определить намерение пользователя, а не следующее слово, мы будем использовать немного другое обозначение. N в нашем случае будет представлять количество слов, используемых для прогнозирования вероятностей намерений. То есть 3-граммовая (или триграммная) модель будет использовать три слова для предсказания.

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

Этот рекурсивный подход позволяет нам учитывать частотные подсчеты из меньших n-грамм в случае, если нет совпадения с родительской моделью.

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

Общий процесс обучения сводится к повторению следующего шага для каждого элемента данных — пары меток: мы скользим по текстовому элементу с помощью окна размером n (слов) и увеличиваем счетчик каждого n-грамма соответствующего намерения. Затем мы запускаем ту же процедуру с нашей дочерней моделью.

Это что касается обучения. Давайте теперь рассмотрим основы вывода. Наша цель — получить частоту от наших родительской и дочерней моделей для последней n-граммы входного контекста. Мы начинаем с непустого счетчика (чтобы предотвратить деление на ноль) и обновляем его частотными счетчиками родительской модели (если есть) и частотными счетчиками взвешенной дочерней модели.

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

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

Это будет все для предложений о намерениях. Небольшое напоминание: полная версия кода доступна здесь. Если вы сочтете это полезным, рассмотрите возможность поставить ⭐️.

Заключительные мысли

Дайте знать, если у вас появятся вопросы. Вы также можете связаться со мной через LinkedIn.

Чтобы узнать больше о продуктах Devexperts и услугах по разработке ИИ, посетите наш веб-сайт.