Практические руководства

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

Вступление

99% виртуальных помощников, которых мы можем найти на рынке, следуют парадигме «обнаружения намерений». Если мы внимательно подумаем об этой номенклатуре, она имеет смысл, поскольку наш виртуальный помощник пытается зафиксировать (или обнаружить) намерение пользователя с помощью естественного языка (текста или голоса). После того, как намерение пользователя было зафиксировано, наш виртуальный помощник может отреагировать и отправить разговор в соответствующий диалог.

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

В этих случаях имеет смысл иметь своего рода резервный механизм, который помогает виртуальному помощнику предоставить возможный и точный ответ пользователю, вместо того, чтобы разочаровывать: «Я не могу вас понять, вы можете написать это другими словами?» предложение применимо к большинству помощников.

Обнаружение намерений и НЛП

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

Техники NLP / NLU позволяют решать эту задачу по-разному. В рамках парадигмы обнаружения намерений нам необходимо определить темы, о которых может говорить виртуальный помощник. Мы называем каждую тему «намерением». После того, как мы определили эти намерения, следующим шагом будет обучение текстового классификатора машинного обучения (ML), где каждое намерение будет классом.

Таким образом, основная задача будет заключаться в том, чтобы попытаться присвоить вероятность предложения пользователя каждому классу. Класс (или намерение) с большей вероятностью будет выбранным.

После этого объяснения слова приобретают больше смысла. Обнаружение намерения - это «просто» классификатор текста ML (для очень короткого текста - ввод пользователя). Когда мы говорим, что виртуальный помощник учится или что нам нужно его обучить, это потому, что нам нужно обучить классификатор машинного обучения. И, конечно, нам нужно его измерить.

Если мы не можем классифицировать предложение…

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

В не очень-очень-редком случае, когда модель обнаружения намерений не сможет правильно определить намерение, пользовательский ввод будет классифицирован как «по умолчанию »намерение / класс.

Если это произойдет, мы можем использовать несколько способов для отправки ответа виртуального помощника пользователю:

  1. Отправка удобного предложения, такого как «Я не понимаю вас (человек), вы можете написать это другими словами?»… Ммм, конечно, мне нравится, когда это делают чат-боты!

2. Использование первого варианта плюс «и помните, что я могу говорить только о…»

3. Пытаться найти возможный ответ в других местах.

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

Эти пары вопросов и ответов могут очень помочь бедному виртуальному помощнику, улучшив его знания и возможности. Как это может быть сделано? Легко: попробуйте сопоставить вводимые пользователем данные с любым вопросом в списке, например, используя любой вид нечеткого поиска. Если вы обнаружите какое-либо совпадение, отправьте наилучший ответ пользователю.

Эта простая стратегия оказалась очень хорошей для уменьшения ошибок обнаружения намерений. Однако есть некоторые проблемы. Главный? Мы пытаемся найти наилучшее соответствие между вводом пользователя и нашим списком вопросов с помощью «ключевых слов», и, конечно, в некоторых случаях этот подход терпит неудачу.

Давайте посмотрим на несколько примеров:

Семантический поиск и преобразователи предложений

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

Как это реализовать в наших виртуальных помощниках? Вспомните нашу запасную стратегию (с использованием FAQ) самое слабое место: мы ищем соответствие, используя ключевые слова. Было бы неплохо сделать то же самое и найти вопрос, совпадающий по смыслу!

Возможно, вы слышали что-то о «новых» моделях естественного языка машинного обучения, основанных на Transformers. Короче говоря, эти новые модели могут предсказывать условную вероятность слова (или последовательности слов) в контексте. Если у нас есть такая модель, мы сможем решить очень длинный список общих задач НЛП, представленных в нескольких статьях за последний год.

Очень важной особенностью этих моделей является то, что, хотя они были обучены решать конкретную задачу, после завершения обучения путем удаления «слоев головы» (или определенной части модели для решения задачи) остальная часть модель может быть использована для других. Как это работает?

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

Однако мы можем пойти еще дальше. Если у нас есть хорошее и умное представление последовательности (в данном случае текста) в виде вектора, мы можем найти расстояния между ними, и, следовательно, мы можем найти сходство !!

Таким образом, стратегия ясна:

  1. Представьте все вопросы из нашего FAQ в виде векторов, используя хорошую модель машинного обучения на основе Transformers, а затем,

2. сделайте то же самое с вводным вопросом и

3. Найдите вектор вопроса, наиболее похожий на вектор пользовательского ввода.

Если векторное представление достаточно хорошее, мы найдем наиболее похожее на основе семантики текста.

Теоретически это имеет смысл. Однако, как всегда, дьявол кроется в деталях реализации. У наших невероятных трансформеров есть предостережение для этой задачи. Это модели от последовательности к последовательности, поэтому на выходе модели будет последовательность векторов, по одному для каждого токена (или слова), поэтому нам нужен способ суммирования всех векторов в только тот, который представляет полную последовательность (предложение).

Например, я рекомендую вам взглянуть на статью Sentence BERT Sentence-BERT: вложения предложений с использованием сиамских BERT-сетей [1]. Идея состоит в том, чтобы обучить модель, которая сможет научиться лучше всего резюмировать предложения, используя сиамские сети.

Вы можете найти реализацию Sentence BERT в красивой библиотеке Sentence Transformer (посетите репозиторий Github и документацию библиотеки).

Посмотрите, как легко использовать библиотеки с помощью нескольких строк кода:

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

Заключение

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

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

использованная литература

[1] Реймерс, Нильс и Гуревич, Ирина, Sentence-BERT: Вложения предложений с использованием сиамских BERT-сетей (2019), Труды конференции 2019 года по эмпирическим методам обработки естественного языка