Как стать автором
Обновить

Антиципации при разработке диалога с чат-ботом

Время на прочтение7 мин
Количество просмотров2.8K


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

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

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

Диалог человека и чат-бота: человек что-то говорит, чат-бот должен ответить разумно. Кажется, что основная трудность программирования в непредсказуемости того, что будет сейчас произнесено человеком, ведь человек может произнести буквально что угодно. А если что угодно, то подобрать разумный ответ затруднительно: список ответов на непредсказуемые вопросы должен быть бесконечен, но бесконечность технически неосуществима. Следовательно, чат-бот должен «понимать», что сообщил ему собеседник – далее по накатанной разработчиками ИИ колее, далеко за границы объявленной темы…

Юмор ситуации в том, что добиваться от чат-бота «понимания», «осмысливания» фразы собеседника нет не только возможности, но и особой необходимости, по той причине, что… сами люди так не общаются. Если вы считаете, что люди анализируют услышанное при помощи мыслительного аппарата – мозга, затем на основе анализа озвучивают ответ, то общение происходит не совсем так, оно происходит иначе.

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

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

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

В реальности общение между людьми происходит немного не так, как предполагается по умолчанию:

  • собеседник что-то говорит,
  • вы анализируете услышанную фразу и выдаете ответ.

В реальности общение между людьми происходит так:

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

Это и есть антиципация, и ее законы применимы не только к разговорам с людьми, отношение к которым определено (позитивное либо негативное), но и к любым разговорам в принципе.

Допустим, вы встречаете знакомого и говорите ему: «Привет».

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

Однако в ответ можно услышать что-то другое, например: «Да иди ты…». Ранее запланированный разговор свернул на иной путь, сценарий круто изменился. Что ж, бывает и такое. В этом случае ваш мозг выдает стандартный ответ типа: «Сам иди ты!», — всего на мгновение позже фразы, которая прозвучала бы в случае неизменности запланированного сценария. Мгновение – это, строго говоря, не время на размышление, а время на обращение к библиотеке ситуативных заготовок. Какое там размышление, когда все совершается «на автомате», практически на бессознательном уровне!

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


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

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

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

Подобно автомобилям на автодроме, разговоры тоже движутся по кругу. Приятели получают кайф от замусоленной темы, подружки сплетничают между собой не менее увлеченно. Если между неприязненно настроенными людьми возникает спор, то аргументы противоположной стороны пропускаются между ушей. В последнем случае говорят: «Он меня не слышит». Ушами слышит, наверное, да только ваша реакция в антиципированным собеседником плане разговора не предусмотрена, потому собеседник отвечает стандартной заготовкой, которая не устраивает уже вас. Движение по кругу – безвыходная ситуация.


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

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

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

Если собеседник поздоровался как-то нестандартно, чат-бот может «не догадаться» о приветствии, соответственно отреагирует иным образом (вариативность человеческой речи – вот проблема из проблем, черт ее подери). А ведь приветствие – простейший случай: антиципировать последующие реплики намного сложней.

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

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

В связи с антиципацией и библиотекой ситуативных заготовок вспоминается курьезный случай. К нам с женой приехала знакомая. Через некоторое время упомянула своего мужа, который вечно забывает выключить свет: принялась увлеченно рассказывать, как его чехвостит, и прочее. «Ну конечно! Разумеется! Ты совершенно права, дорогая!» — слышались сострадательные реплики моей супруги. Прикол был в том, что у меня в семье ровно наоборот. Жена принципиально не выключает свет: через минуту после ее прихода домой свет горит везде – в комнатах, коридоре, на кухне, в туалете и в ванной. Проходя мимо, я автоматически его выключаю, а жена не менее автоматически включает, и ничего поделать с этим нельзя. Но разговор с подругой был именно таким. Жена использовала приличествующие встрече индивидуальные заготовки немного невпопад, при этом общению ничто не мешало. Женщины, что называется, пели в унисон – были совершенно единодушны и счастливы.

Постскриптум
Данная статья написана в рамках цикла о разработке мной синтаксического чат-бота Ваня Разумный.

Предыдущие статьи:

  1. Создание ИИ методом «глокой куздры». Интеллектуальная одиссея;
  2. Чат-бот обретает слух, или страдания дилетанта.

Если кто-то захочет познакомиться с Ваней в его текущем состоянии, релиз 2.0 находится здесь: bitbucket.org/mikejum/intellectualivan/downloads

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

В связи с переходом с Access на PostgreSQL появились проблемы с установкой: теперь разархивировать файл недостаточно, придется установить PostgreSQL и развернуть дамп, инструкции прилагаются.

На неизбежный вопрос, а насколько антиципация реализована в версии 2.0, отвечу так. Реализована частично, на начальном уровне, однако заметить ее в ходе диалога проблематично. Как было сказано ранее, антиципация – одна из множества фич, необходимых при разработке ИИ, далеко не самая существенная.
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+1
Комментарии22

Публикации

Изменить настройки темы

Истории

Работа

Ближайшие события

PG Bootcamp 2024
Дата16 апреля
Время09:30 – 21:00
Место
МинскОнлайн
EvaConf 2024
Дата16 апреля
Время11:00 – 16:00
Место
МоскваОнлайн
Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн