Про ИИ

ПРО ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ – КАК КОМПЬЮТЕР ЕСТЕСТВЕННЫЙ ЯЗЫК ОБРАБАТЫВАЕТ. ЧАСТЬ 3, ЧАТ-БОТЫ


Владислав Январев, 16 июня 2020

Обзорные статьи про обработку естественного языка в искусственном интеллекте.

Первая часть здесь
Вторую часть сожрал кадавр, не ищите :)

Автор – программист, когнитивист, занимается исследованиями в области формального моделирования глубинной семантики текста.

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

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

Мы рассмотрим три варианта чат-ботов:
  1. Чат-боты общего назначения (Сири, Алиса и пр.)
  2. Чат-боты отдельных компаний, предназначенные для решений конкретных вопросов
  3. Чат-боты, использующие нейросети в качестве обработчика.


Начнем с Сири, Алисы и им подобных. Безусловно, точно сказать, как устроены эти системы внутри, сложно (поскольку это закрытая разработка), но принципы угадать можно – они часто похожи в современных системах.

Наибольшей проблемой, как вы понимаете, для подобных систем является ведение диалога. Потому что диалог испытывает способность систем к пониманию фактов и их взаимосвязей – например, референций (ссылки на упомянутые прежде объекты), понимание контекста (например, что значит «коса», учитывая предыдущий диалог) и т.д.

Поэтому часто системы упрощенно предполагают, что в фразе пользователя будет содержаться «команда» – например, «открыть сайт X» или «позвонить Y». Если быть более точным – действие (intent) и объект действия (параметр), иногда несколько. Под эту формулу попадают много навыков Сири – например «позвонить X» или «поставить таймер на 10 минут». На самом деле сложностей хватает и здесь – команды можно формулировать разным образом, или сложно идентифицировать параметр или даже два (например «напоминание на завтра на 10 утра» – это всё надо отследить и перевести в формальную запись времени). Разработчики Алисы также подтверждают подобный процесс – см. рис 1 из [1].

 (310 Кб)

Отмечу, что подобная структура (команда + параметры команды) вполне себе соответствует изложенной в первой части идее фреймов Минского. Фрейм – это модель некоторой стандартной ситуации; программа, сталкиваясь с пользователем, старается эту ситуацию идентифицировать и заполнить все слоты фрейма. (Нужна «погода завтра»? Слоты (когда=завтра, где=неизвестно, подставим текущую локацию или запросим у пользователя).

Алиса, кроме того, предлагает некие более сложные варианты за счет реализуемых сторонними разработчиками «навыков». Фактически, первой фразой кроме команд вы можете активировать взаимодействие с навыком – некоторой программой стороннего разработчика, который на основании отдельного алгоритма обрабатывает то, что вы говорите. Конечно, непонимание реального мира будет и здесь – так что вряд ли даже со сторонним навыком получится содержательный диалог. Но есть и исключения – например, с Алисой можно поиграть в «города». Реализация подобной игры возможна, потому что понятно, как формализовать её диалог – от пользователя всегда будет ожидаться только одна фраза – название города (корректность которой, кстати, можно проверить по базе данных).

Наконец, еще один интересный момент – как подобные Сири боты общего назначения обрабатывают фразы, в которых нельзя понять команду пользователя?
Тут есть три классических варианта:
  1. Сказать «я не поняла» и пр.
  2. Отшутиться или сказать что-то своё, симулируя перехват разговора и, в каком-то смысле, игнорирование собеседника.
  3. (Известно для Алисы) В случае оскорбления – обидеться, завершить разговор.
Про генерацию ответов типа 2 в Алисе ([1]):

«Болталка — на самом деле fallback. В Алисе это работает так, что если классификатор интентов [команд] не может уверенно определить, чего хочет пользователь, то другой бинарный классификатор сперва пытается решить — может, это поисковый запрос и мы найдем что-то полезное в поиске и туда отправим? Если классификатор говорит, что нет, это не поисковый запрос, а просто болтовня, то срабатывает fallback на болталку. Болталка — система, которая получает текущий контекст диалога, и ее задача — сгенерировать максимально уместный ответ.»

Интересно, откуда взялся вариант 3 – даже в Избе был один раз вопрос «почему Алиса огрызается». Ответ такой – к сожалению, на практике очень много людей начинают проверять ИИ «на прочность». Может, им нравится, что она не может дать сдачи или что-то в этом духе. Постоянные ответы «я не поняла» ещё больше их распаляют. Одна из стратегий – учитывать подобное поведение и пресекать. Возможно, оскорбления, если на них не реагировать, также могут создать негативный пиар продукту.



2 случай – чат-боты для решения частных проблем. Бывают на сайтах разных компаний. Редко обрабатывают фразы любого типа, потому что подразумевается, что к ним пользователь обращается в случае проблем, а не просто «пообщаться». Дальше алгоритмов два – либо уже упомянутое распознавание «команда-параметр» (реже), либо еще более простой алгоритм – ищем совпадение фразы с вопросом из базы данных «вопросов-ответов» и выводим наиболее подходящий ответ. Как оценивать схожесть предложений – это отдельный технический вопрос, важный, но в этой статье мне бы не хотелось его детально касаться. Можно, например, создать ряд шаблонов и отслеживать их появление; или переводить текстовые предложения в векторы (наборы чисел) с помощью определенных процедур, а дальше оценивать дистанцию между векторами и пр.

Кстати, из истории. Для относительно формального описания пар «вопрос-ответ» в диалоге для разных реализаций чат-ботов был придуман язык AIML. Вот пример описания:


<category>
<pattern>КАКОЕ ВАШЕ ИМЯ</pattern>
<template>Моё имя – <bot name="имя"/>.</template>
</category>

Учитывается, что, возможно, бот уже что-то знает и сохранил это в памяти программы. Также интересной особенностью было то, что какая-то фраза, например «Что ты знаешь о футболе» могла активировать переменные внимания – т.е. бот начинал далее учитывать, что вроде как мы погружены в тему футбола, и обрабатывать фразы с учетом этого. К сожалению, на практике бот с трудом понимает момент смены темы, знает не все факты и т.д. – т.е. мы натыкаемся на классическую проблему «непонимания», несмотря на подобный обходной путь. Но и такой подход есть.

3 случай – чат-боты на нейросетях. Это интересно.
В современном IT были придуманы архитектуры нейросетей, которые позволяют тренировать их на последовательную генерацию текста предложений. Очень упрощенно: «В настоящее время актуальной…» далее можно почти точно сказать, что будет идти слово «задачей».
Подобные нейросети тренируются на гигантском наборе пар «вход-выход». В качестве базы для тренировки можно, например, взять пары реплик из фильмов. «Вы.. кто? – Вы что, меня не знаете?». Готовая база для чат-бота – вопрос пользователя, ответ бота. (Кстати, если мы возьмем субтитры на одном языке и на втором, мы получим параллельные тексты на разных языках и по похожему принципу сможем сделать переводчик)

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

В качестве примера можно взять представленного Google AI чат-бота на нейросетях Meena [2]. Авторы упоминают о том, что если взять оценку «разумности и конкретность», то их бот выигрывает у множества других. «Разумность» определяется как «имеет ли смысл реплика в данном контексте», «конкретность» – «отвечает ли реплика на предыдущую реплику, или же она является скорее общей фразой»

Безусловно, авторы проделали большую работу по тренировке нейросети и созданию процедуры оценки для ботов. Но если посмотреть детально – что именно оценивается? Нейросеть может работать, определяя тематику вопроса. Далее, используя нейросети-декодеры, можно давать ответы, привязанные к вопросу, ответы, которые будут гладко следовать из заданного вопроса. Т.е. надо понимать, что, даже несмотря на то, что данный бот будет выдавать реплики с высокими параметрами разумности и корректности (как показывают авторы – достаточно близким к значениям в человеческом диалоге), это всего лишь означает, что диалог приятен для уха и относительно связен в пределах 1–2 фраз. Это далеко не означает, что «машина начала мыслить»!

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

[1] https://habr.com/ru/company/yandex/blog/349372/
[2] https://habr.com/ru/news/t/486102/, по материалам https://ai.googleblog.com/2020/01/towards-conversational-agent-that-can.html


Было опубликовано здесь и здесь