Роль куратора в работе систем, основанных на семантических моделях

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

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

“Свободные слова”

Представьте себе, что к вам обратились с вроде бы «почти» понятной просьбой, и лишь несколько слов в предложении совершенно вам незнакомы. Были бы Вы на 100% уверены в том, что правильно интерпретировали просьбу собеседника?

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

Данная тема отчасти освещена в статье “Introduction Into Semantic Modelling for Natural Language Processing” (link)

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

Пример

Вы смоделировали систему, предназначенную для выдачи информации по котировкам криптовалют на заданную дату.

  • Вам хотят задать вопрос, вполне характерный для вашей модели:

“Какая цена на ripple была на рынке первого апреля”

(Ripple — популярная криптовалюта)

  • Но по-какой то случайности вводят текст

“Какая цена на rifle была на рынке первого апреля“?

Такой вопрос скорее всего поставит систему в тупик.

Сущности, которые вы наверняка ожидали и определили, а это «цена», «рынок», а также параметр ”дата” со значением “вчера“ распознаны. Но как интерпретировать в данном контексте совершенно неожиданное слово ”rifle”?

Примечание — конечно вы можете при определении синонимов для посвященного криптовалютам источника данных определить все возможные опечатки как синонимы валют с “похожими” названиями, но речь сейчас не об этом.

Многие системы проигнорируют нераспознанные данные и выдадут что-то вежливо нейтральное — например курс какой-либо валюты, скорее всего биткойна, на заданную дату.

Если вы не хотите быть как все в данном случае, или вам просто критично отреагировать правильно — вы не будете отвечать автоматически на подобные, содержащие “свободные слова“, вопросы.

Обработка “свободных слов”

Есть четыре пути обработки подобных ситуаций:

  • Игнорируем незнакомые слова и отвечаем как можем.

Не подходит при необходимости гарантированно точных ответов.

  • Переспрашиваем пользователя.

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

  • Сообщаем пользователю, что он не был понят.

“Ошибка — ваш запрос не может быть обработан“.

Честное решение, но не стоит слишком часто испытывать пользовательское терпение.

  • Перенаправляем запрос куратору.

Куратор — это администратор системы, получающий все вопросы, на которые, согласно конфигурации вашей модели невозможно ответить автоматически.

Остановимся подробнее на последнем пункте.

Процесс работы Куратора

Куратор может

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

Такой результат разумеется предпочтительней, чем общее обезличенное сообщение вроде “Ваш запрос не может быть обработан“

  • Вернуть короткий текстовый ответ.
  • Отредактировать запрос на ”правильный”, то есть на который система может сразу отреагировать.

В нашем примере куратору очевидно, что или была сделана опечатка, или проверка орфографии перестаралась при неправильном вводе, то есть слово “rifle должно быть заменено на “ripple“.

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

Разумеется, Куратор должен хорошо знать предметную область.

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

Пример

  • Пользователь спрашивает криптосистему:

“Выдай мне важные новости за сегодня”

Пусть модель не распознала вопрос.

  • Куратор может заменить текст на понятный системе:

“Курс BTC, XRP на сегодня”, если он считает это наиболее интересными новостями.

Работа Куратора, как отложенное обучение

Работу Куратора можно рассматривать как отложенное обучение модели.

  • Вы можете или сразу постараться определить максимальное количество поддерживаемых intents и составить максимально широкие списки синонимов и т.д. или
  • Обучать модель на ходу, ведь вопросы, перенаправленные Куратору и все “подобные“ им, будут обрабатываться автоматически при всех последующих обращениях.

Как распознаются “подобные“ обработанным запросы, то есть как осуществляется кеширование обработанных данных, обсуждается отдельно .

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

Режимы курирования

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

Решите для себя

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

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

  • от режима near realtime реагирования на нестандартные пользовательские запросы
  • до режима отложенных ответов на все накопившиеся вопросы за период, с последующим оповещением пользователей по мере готовности.

Выводы

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