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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Комментарии 22

      +8
      антиципации… автор, ты на каком, прости его все боги, языке пишешь?!
      простите, не сдержался.
        –6
        Вы так переживаете по поводу каждого встреченного незнакомого термина? Не стоит, право слово…
        +1
        Вот вопрос: а зачем вам контактировать с друзьями, если вам заранее известно, что они скажут? Нет, я понимаю и разделяю: приятно провести время, расслабиться… однако желание получить новую информацию тут явно на последнем месте.

        Что-то с этой предпосылкой явно не так, потому что основное содержание контактов с друзьями заключается в обсуждении кто чего нового сделал-узнал. Какой фильм посмотрел, какой телефон купил и каков опыт его использования, куда ездил отдыхать, и так далее. Это именно обмен новой информацией.
          –2
          А в чем тогда отличие общения с друзьями от общения с врагами? Неужели в том, что в первом случае мы получаем новую информацию, а во втором случае не получаем? Мне представляется, что узнать фильм, который просмотрел друг, не самое важное. Фильм вообще ни при чем. При чем — отреагировать на «знание» репликами типа: «Правда?», «Не может быть!», «Ух ты!», «Ну ты молодец!» и т.п. Используем позитивные реплики — получаем позитивный психологический заряд. Но даже в вашем примере реплики однотипны: фильм, телефон, отпуск… И так из года в год, десятилетиями. Это и есть общение в цикле.
            0
            Вы транслируете ваш персональный опыт общения на всех, делая из этого далеко идущие выводы об устройстве человеческого общения, и в этом определённо есть проблема. Нет, не для всех важен именно психологический заряд. Нет, некоторым людям фильм действительно причём — потому что до этого они вместе им заинтересовались, начали ожидать, это стало точкой соприкосновения, и далее обмен впечатлениями. Нет, мой пример никаким образом не показывает однотипность общения в разрезе десятилетий. Жизнь идёт, меняются сами люди, меняются темы для разговоров. Каждый разговор и его содержание вполне себе уникальны.
              –1
              меняются сами люди, меняются темы для разговоров

              Вот именно, тема разговора меняется с собеседником. С кем-то только об отпуске поговорить и можно, с кем-то — о фильме. Однотипность, однако… А если вы хотите узнать что-то о телефоне последней модели, логичней читать профессиональные обзоры.
              Извините, но ваши аргументы не убеждают. Все разговоры с друзьями обычно проходят единому сценарию — исключения редки. Персональный опыт здесь ни при чем, это единый общечеловеческий опыт, насколько мне известно.
                0
                Меняются люди во времени. Один человек.
                  –1
                  Да, меняются. Постепенно, обычно со взрослением. Соответственно, шаблон общения с этим человеком соответствующим образом корректируется. Против этого никто и не возражает.
          0
          «Антиципации»? Серьёзно?
            +1
            ru.wikipedia.org/wiki/%D0%90%D0%BD%D1%82%D0%B8%D1%86%D0%B8%D0%BF%D0%B0%D1%86%D0%B8%D1%8F
            Чем вам термин не приглянулся? Термин как термин.
              +1
              Думаю, дело в том что антиципация в русском языке не совсем то же самое что anticipation в английском. Вы явно ведёте речь о предвкушении событий, в смысле об их (пред)угадывании, а не о преждевременном наступлении событий.
              На сколько я понимаю, anticipation (англ.) в первую очередь используется как именно предвкушение и предугадывание.
              А вот антисипация (рус.) — в первую очередь жаргон в узкоспециализированной среде (например в налогообложении), о наступлении событий заранее. В вашу статью это слово не подходит (по крайней мере мне так кажется).
              Хоть эти слова и похожи и значения у них почти одинаквые, они не одинаковы и всегда заменять одно на другое неправильно.

              На всякий случай приведу простой похожий пример:
              киллер по русски и killer по английски — не одно и то же, хоть и является заимствованием.
              Киллер — более «узкий» термин, наёмный убийца.
              Killer — просто убийца, не обязательно наёмный.
              При заимстованииподобные вещи (использование в более узком смысле) происходят часто.
                +2
                В каком значении употреблен термин, указано в самом начале статьи:
                В процессе работы над чат-ботом я столкнулся с необходимостью антиципировать (то есть предвосхищать) развитие диалога.

                Замечу, что в Википедии правописание именно «антиципация» — см. ссылку прямо над вашим комментарием. Прочие значение термина указаны там же.
                  0
                  Замечу, что в Википедии правописание именно «антиципация»

                  О, да, опечатался, поправить уже не могу :-/
                0
                Вот только этим термином никто не пользуется, как и английским его аналогом. Говорите лучше «предугадывание», что ли (predict/prediction/guessing) — в области ML/DL (куда относятся специалисты такое предугадывание реализовывать) привыкли к чему-то такому.
                  0
                  Если бы заранее знал, как болезненно публика отреагирует на антиципацию, так бы и поступил. Просто по привычке употребил «антиципацию». Какая, в сущности, разница: предугадывание, предвосхищение, антиципация?
                    0
                    Ага, могли бы весь текст англицизмами или на хинди написать. Какая разница?)
                    Но вообще, дело в другом. Это обсуждается, потому что обсуждать больше нечего.
                    Текст несколько капитанский, и тему совершенно не раскрывает.
                    Здесь инженеры, которые привыкли проблемы решать и изучать способы решения проблем, а здесь текст прерывается сразу после обозначения проблемы.
                      0
                      Ну это вы напрасно… Какое там хинди? Термин употребляется редко, но употребляется: согласно Википедии, в философии, психологии, экономике, медицине, астрономии и лингвистике. Вам этого мало?
                      По поводу инженеров. Как показал данный пост, здесь тусуются не только инженеры, но и психически неустойчивые личности, впадающие в истерику при виде «неправильного» термина. Отделяю инженеров от таких личностей, поскольку, по моим представлениям, инженер должен бы погуглить термин и принять к сведению, что он используется в таком-то и таком-то значении.
                      Ну и о капитанском тексте. Во-первых, некоторые решения все же предлагаются, хотя, не исключено, недостаточные. Во-вторых, правильно поставить проблему — почти решить задачу. Вы бы меня уязвили, если бы написали: «Да кому это не известно? Вот в таких-то книгах вопрос абсолютно раскрыт, на страницах таких-то. А здесь таблица умножения, кому она нужна в миллионный раз?». Вы бы меня уязвили, если бы, удовлетворяя инженерное любопытство, потестировали чат-бота, ссылку на которого я дал в постскриптуме, и не оставили от него камня на камне. Вот тогда бы я был пристыжен (и то более в первом случае, потому что я профессиональный писатель и непрофессиональный программист, тут с меня взятки гладки). А пока ваши слова пролетают мимо ушей, уж извините. Не вижу никакого греха и в употреблении термина «антиципация», и в постановке малоизученной (а может, и вовсе неизвестной) проблемы.
                        0
                        Не увидел ссылки, увидел «посткриптум», в котором, как мне показалось, повторение. Недоглядел, да. О том что умеет ваш чат бот, вы писали, и я даже комментировал, то есть, вроде бы, уже разбираюсь, да?
                        А насчёт «малоизученной» проблемы — это вы зря, «малополезной» — более верное слово, ведь современным чат-ботам не имеет смысла готовиться к определённому ответу собеседника.
                        Но зачем вообще это может быть нужно компьютеру?
                        Точнее, почему вы считаете, что если это нужно человеку, то это нужно компьютеру по той же причине? Видите, я вам даже подсказку дал на то место, где вы совсем неправы. Так что не поставили вы правильно проблему.
                        Иначе бы и решение было бы совсем другое. Так что если вы хотели, чтобы я вас пристыдил, думаю, повод постыдиться у вас теперь есть.
                          0
                          О чат-боте я писал, да. Правда, это вторая версия, она продвинутая, но не важно. В любом случае данный упрек лично к вам не относится. О чем мы в прошлый раз беседовали, уже не помню, но свой плюс вам в карму вижу — значит, плодотворно поговорили.
                          Зачем антиципация предвосхищение нужно компьютеру, написано. Хотя бы для того, чтобы размышлять во время ответа собеседника. Экономия времени. Но проблема неоднозначная и решение неотчетливое, поэтому ваше недоумение принято к сведению. Благодарю за критику, это без всякого ехидства.
                          А все-таки она вертится предвосхищения могут быть использованы в диалоге. И еще смешно наблюдать, как айтишники упрекают гуманитария в употреблении англицизма. Ну ё-моё…
                            0
                            По-прежнему не понимаю, почему компьютеру нужно размышлять во время ответа собеседника (на практике проблема экономии времени ожидания ответа компьютера не стоит), но да ладно.
                            Подумайте вот о чём.
                            Значит, вы говорите, что диалог — он как шахматы?
                            Но почему тогда ограничиваться предсказанием лишь одного следующего ответа?
                            Даже древние шахматные боты предсказывают где-то на 8 полу-ходов вперёд.
                            Только вот какой будет критерий наилучшей ветки диалога с точки зрения компьютера?

                            p.s. А по поводу айтишников — не обобщайте, пожалуйста. Я в первую очередь за понятность и логичность, а не за любовь к англицизмам. Их используют вынуждено или когда они действительно употребляются специалистами в предметной области. В компьютерных чат-ботах вместо этого термина употребляется другой, вот и всё.
                              0
                              Но почему тогда ограничиваться предсказанием лишь одного следующего ответа?
                              Даже древние шахматные боты предсказывают где-то на 8 полу-ходов вперёд.
                              Только вот какой будет критерий наилучшей ветки диалога с точки зрения компьютера?

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

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

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

            Самое читаемое