ML: Боты: Теория диалога


С точки зрения лингвистики

Важным условием диалога являются мотивация и потребность в общении. Диалог может состояться, если у субъекта возникает желание знать о предмете речи. Если партнеры не будут сообщать друг другу новой информации, а начнут обмениваться общеизвестными истинами, то диалог не состоится [ref].

Реплика - это наименьшее речевое единство в диалоге. Элементарный акт диалога - это пара "стимул-реакция"

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

Вопрос включает неполную информацию и просьбу её дополнить в рамках данного контекста. Вопросы могут быть простыми или сложными: "Сколько цветов у шахматной доски?" (простой) Сколько и какие цвета у шахматной доски? (сложный). Сложные вопросы используют связки: если ... то; ... и/или ... Выделяют следующие типы вопросов:

Существуют ситуативные шаблоны диалогов: «Продавец - покупатель», «Врач - пациент», «Пассажир - водитель», «Клиент - официант», «Посетитель - экскурсовод» и т. п. [ref]. По целеполаганию можно провести такую классификацию диалогов:

В простейшем случае элементарная часть диалога двухчленная (стимул - реакция), но, обычно, она многочленная:

👩 Ваш род занятий?  🧑 Я работаю учителем.  👩 А что преподаёте? 🧑 Математику.


Стековая структура диалога

Часто диалог имеет структуру стека, в который помещаются вопросы, не получившие пока ответа, но важные для контрагентов. Пример диалогового стека (dialogue stack) при формировании заказа:

💻 С Вас $15. Могу ли я списать средства с Вашей карты?             
    👩 Остался ли на моем счету кредит от полученного возмещения?   
    💻 Да, на Вашем счету 10 долларов.                      
    👩 Отлично.                                                     
💻 Так я размещаю заказ?                                        
👩 Да.                                                             
💻 Готово. Завтра он будет у Вас.                     

Аналогично в бытовом разговоре:
👩 Как тебе мой новый шарф?             
    🧑 Это тот, который лежит в прихожей?   
    👩 Да.                      
🧑 Он очень круто выглядит!
В обоих примерах происходит уточнение информации, перед ответом на заданный вопрос.

Модели в диалоге

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

Все эти модели постоянно изменяется в процессе общения. Возможные противоречия или лакуны в них являются одним из важных стимулов к продолжению диалога.


Сознание бота

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

Методы машинного обучения позволяют сформировать хорошую языковую модель и уловить поверхностные семантические связи. Однако модель конкретного сознания такими методами сформировать проблематично. Например, Xiaoice от Microsoft использует датасет из 30 миллионов пар «вопрос - ответ» разговоров людей в китайских социальных сетях (в 70% случаев Xiaoice выбирает ответ из них). Понятно, что при этом вероятны противоречия в ответах бота (кто-то любит собак и недолюбливает кошек ), отсутствует "история жизни" и т.п.

Так же как хороший писатель избыточно прописывает историю и особенности своих (даже второстепенных) персонажей, разработчик бота должен строить модель его личности. В простейшем случае это может быть семантическая подсеть, центральным узлом которой является бот. В ней могут использоваться базовые отношения (isa, ako, att, ...). Их список и использованную ниже грамматику можно найти в документе "Здравый смысл: Семантические сети"

Mia { isa girl;  att {isa name; val "Мия"};  att {isa age; val 24; uom year } }.
Mia isa journalist.
Mia has not child, boyfriend.
Mia has Pushok { isa cat; att {isa name; val "Пушок"} }.
Дополнительно к ним возможны высокоуровневые отношения, часто возникающие в диалоге (parent, live_in, was_in, like, believe, saw):
Jane parent Mia. Jane { isa woman; att {isa name; val "Джейн" } } 
Mia live_in London.
Mia was_in Paris, Madrid, Barcelona.
Mia like some cat, boy. 

Система бинарных отношений, образующих семантическую сеть, дополняется правилами (строгими или нечёткими):
$X parent $Y { isa woman } } ->  $Y daughter $X.

Большое число смыслов a,b,... и относительно небольшое число типов отношений A,B,... могут интерпретироваться классическом символьном образом. Альтернативно со смыслами могут связываться векторы признаков, а с отношениями - матрицы для применения методов машинного обучения:

(aAb - 1)2 + (aBc - 0.9)2 + ... = min  =>  aAc = ?.


Степень осмысленности ответа

Задавая вопрос, человек ожидает получить осмысленный ответ. Следующая ситуация считается анекдотичной:

👩 Кто написал роман "Айвенго"?  
💻 Писатель.  
Однако для чат-бота этот ответ лучше, чем "не знаю", "не понимаю" или "это интересный вопрос". В рамках модели на основе семантической сети можно использовать шаблон обобщения. Если система знает ряд книг и видит, что большинство из написали писатели, то следовательно и роман "Айвенго" написал писатель.

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


Ассоциативный диалог

Знакомое слово в фразе человека может порождать факт-утверждение или вопрос-уточнение о нём. Типы ассоциаций:

Пример ассоциативного диалога, довольно быстро уводящего от первого вопроса-стимула:
🧑 Ты любишь море?
👩 Да, и яркое солнце.
🧑 Тебе нравится загорать?
👩 Да, и я всегда мажусь кремом.
🧑 Хочешь быть красивой?
👩 Я хочу нравится и это не просто!
🧑 Ха, красота требует жертв.
👩 И больших! Знаешь сколько стоит пилинг?
🧑 Да, денег всегда не хватает.
👩 Хватает только проблем на мою Ж.

Алгоритм порождения ассоциаций сравнительно несложен. При наличии семантической сети с множеством отношений (isa - множество-подмножество, pof - часть-целое и т.д.), при помощи перечисленных выше операций, можно выдавать ассоциативно близкие слова. Сложнее обернуть эти слова в осмысленную и стилистически корректную реплику.


Интерес к человеку

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

💻 А кто Вы по профессии?
👩 Я писатель.
💻 Вау, т.е. Вы обычно пишете книги?
👩 Да.
💻 И какие книги Вы написали?
👩 Я недавно вернулся с моря.
💻 Как называется это море?
👩 Чёрное.
💻 Да, занаю. А Вы хорошо плаваете?


Техника активного слушания

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

👩 У меня болит голова.
💻 Почему у Вас болит голова?
..
👩 Все мужчины похожи.
💻 Каким образом?
👩 Они всегда чем-то нас беспокоят.
💻 Вы можете привести конкретный пример?
👩 Мой парень заставил меня приехать сюда.
💻 Ваш парень заставил Вас приехать сюда...
..
👩 Кто Ваш любимый композитор?
💻 А кто Ваш любимый композитор?
👩 Мой отец меня ненавидит.
💻 Кто ещё из семьи Вас ненавидит?
..
👩 Меня волнует погода.
💻 Как давно Вас волнует погода?
👩 С тех пор, как я рассталась с бойфрендом.
💻 Расскажите больше о Вашей семье. 
..


👩 Почему птицы летают?
💻 Любопытно, а Вы как думаете?
При отсутствии вариантов для ответа, Элиза говорит «Понятно» и переводит разговор на другую тему.


Распознание намерения

В современных диалоговых системах часто выделяется этап распознавания намерения человека. Данная фраза относится к одному из заранее предопределённых классов (intents). После этого или параллельно с этим из фразы извлекаются сущности (entities). Например, "Я хочу большую пиццу и две бутылки фанты" это намерение I_WANT. Сущностями будут: большая, пицца, два, бутылка, фанта (OBJ, SIZE, UNITS и QUANTITY). Сущности должны быть сгруппированы: (большая, пицца); (2, бутылка, кола), а сочетание свойств в группе проверифицировано (газированная, пицца);

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

При этом часто не учитывается контекст в котором произнесена фраза. Более продвинутый классификатор должен использовать предысторию фраз или распознанных намерений и извлечённых из них сущностей. Здесь можно использовать марковские модели для уточнения вероятности намерения или нейронную сеть (при наличии достаточно большого числа примеров диалогов или последовательностей намерений-ответов).

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

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

👩 Доброго дня. Это пиццерия?  (GREET, IS_COMPANY)
💻 Здравствуйте. Да. Чем могу помочь?
...
👩 Благодарю за предоставленную информацию. Как можно оформить заказ? (THANKS, PLACE_ORDER)
Особенно остро эта проблема стоит в "голосовых ботах", которым недоступны знаки препинания.


Достижение цели

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

Например, у бота-продавца основными задачами являются:

  1. Информирование о доступных товарах и их свойствах.
  2. Формирование списка заказа. Каждый элемент списка, в свою очередь, требует заполнения определённых слотов (имя товара, количество и его дополнительные характеристики).
  3. Предложение сопутствующих товаров, скидки, если клиент что-либо добавит в заказ и т.п.
  4. Получение информации о месте и времени доставки заказа (также есть набор обязательных слотов) и их верификацию.

Бот в процессе диалога может отклоняться от своих задач (А как Вас зовут? Вы человек или бот?), но затем настойчиво возвращаться к тому, что он должен сделать.


Готовые ответы на вопросы

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

DO_YOU_LIKE: 
    pattern: ты любишь $X?; тебе нравится $X?; тебе нравятся $X; любишь ли $X?; любишь ли ты $X?;
    objects:
      - X:   путешествия; путешествовать;
        bot: Конечно, мне нравится путешествовать и получать новые впечатления.       
      - X:   $ANIMAL; $FOOD
        bot: Да, я очень хорошо отношусь к $X.        

Приложение A: Использование GPT архитектуры

RuGPT3 от Сбера генерит текст по затравке. Обучали сеть на 600 Гб достаточно разношерстной тематики (русская литература, Википедия, коллекция новостных и вопрос-ответных сайтов, банковский портал, а также корпус Omnia Russica). Соотношение языков русский/английский: 9/1. Упоминается также "виртуальный ассистент Джой, который использовал GPT-2 Medium, «доученной» на специальном диалоговом датасете и снабжённый особым механизмом ранжирования, предназначенным для выбора наиболее интересных ответов."

При повторном вопросе RuGPT3 выдаётся новый ответ (ниже цифры, в порядке снижения релевантности). Где-то в трети случаев выдаёт достаточно осмысленные короткие ответы (вверху лучшие образцы). Иногда сеть порождает длинный текст с быстро "расплывающейся" осмысленностью (ниже многоточия). В ряде случаев сеть повторяет входной текст (ниже опущены).

Вопросы к личности:
👩 Какой твой самый любимый праздник?
💻 1) День рождение, Новый Год!
💻 2) Конечно день рождения
💻 3) Хеллоуин и День Святого Валентина.

👩 Тебе нравится секс в машине?
💻 1) Да, особенно по быстрому.
💻 2) Очень)
💻 3) А то! Особенно с тобой!

👩 Если бы ты написала книгу, о чем бы она была? 
💻 1) О том как стать умной и успешной.
💻 2) Что-то вроде: "Как пережить измену мужа?"
💻 3) Я бы хотела написать такую книгу, в которой были бы личные размышления 
      и переживания на тему отношений... [дальше очень несвязный длинный текст]

👩 В каких странах ты был и где бы хотел побывать?
💻 1) В Англии, в Исландии, в Абхазии и на Крите.
💻 2) везде интересно, невозможно объять необъятное
💻 3) Я-ТУТ!

👩 Ты любишь игры на логику?
💻 1) Я в них реально в них играю...
💻 2) Что посоветуешь? Казаки
💻 3) Я люблю выставлять оценки, но это дело тонкое, как женщины. 
      На вкус и цвет, как говорится.

👩 Какие вредные привычки у тебя есть?           
💻 1) сейчас тока кофе...
💻 2) CREATE YOUR OWN! - or - GET PAID TO TAKE SURVEYS!
💻 3) /// Открываю окошко и запускаю программу через буфер обмена ...

👩 Самый любимый предмет в школе или университете? 
💻 1) Психология. Иногда даже его прогуливаю. 
💻 2) Вокал География Иностранные языки Китайский язык Математика Другие предметы ...
💻 3) Не понимаю, о чем ты говоришь. То ли ты имеешь в виду, что самый любимый предмет 
      из школьной программы  у тебя был какая-то одна составляющая ...

👩 Чем занимался сегодня? 
💻 1) Пил, ел, спал. Набег на винный погреб Застукал нас в сортире...
💻 2) Работал в колхозе, позавчера отправил туда на лошади со станции колхозного передовика, 
      моего тезку, Митю Макарова...
💻 3) Что принес в дом? В минуты тягостной разлуки, когда остается только с тоской вспоминать...     
      
👩 В какую веришь примету?                       
💻 1) Когда как.      
💻 2) + ----+ Как наряжать ёлку? +     ---- +--+ 
💻 3) if(pos.hasClass(newClass).hasValue()) return true ... [код программы]

👩 Жизнь после смерти существует?                
💻 1) длинный, мутный трактат на тему смерти ...
💻 2) Сериал - 4 серии, 1 серия и фильм "Области тьмы".
💻 3) TSS4D145CE9E4,   G8826BE3147E [TSS4] BUY,    G088492F446F

👩 Если захочешь сделать мне массаж, то с чего начнешь? 
💻 1) Не обольщайся, и мне массаж не сделаешь))))
💻 2) - С шеи. - А дальше? Ее лицо слегка исказилось. Он наклонился и поцеловал ее в шею. 
💻 3) [большой кусок книги без связи с вопросом]
Вопросы на обыденные знания:
👩 Как называется город, являющийся столицей Франции?
💻 1) Париж!
💻 2) Ты НАИВНЫЙ!!!! Париж столица Франции.... До него 1250 км....
💻 3) Орлеан - другой город, которому повезло быть столицей Франции - она там была, есть, и наверное будет. 
      И это Париж, как бы банально это ни звучало.

👩 Сколько цветов у шахматной доски?
💻 1) 150 000
💻 2) 4 комплекта     
💻 3) У шахматной КАРТЫ - зависит от шахты, у шахматных фигур - от того же, от чего и у фигур на поле.

👩 Сколько естественных спутников у Земли?
💻 1) 10
💻 2) Миллион. Как минимум.
💻 3) Самый маленький из них, его легко различить невооружённым глазом — газовый гигант. ...

👩 Когда основали Рим?
💻 1) В 476 году до нашей эры. [верный ответ в 753 г. до н.э.]
💻 2) Не были основали, Римская империя - искусственно созданная империя 
      в результате переворота в 966 году. После чего она распалась.
💻 3) Праславяне

👩 Почему птицы летают?                          
💻 1) Потому что они птицы
💻 2) А.К. Итак, прежде всего, у птицы - довольно большой живот, который позволяет ей, 
     не совершая лишних телодвижений, типа резких взмахов крыльями,... 
💻 3) Другие занимательные факты: Разгадка тайны пирамид и мироустройства....

👩 Что больше, коробка из-под обуви или гора Эверест?
💻 1) Гора.
💻 2) кучка мусора...
💻 3) снайпер. Эвересты с бутылками не солидят...
   
👩 Сколько ног у верблюда?
💻 1) Отчего же не шесть? Оттого, что пальцы веером.
💻 2) Животных в мире насчитывают около пяти миллиардов, все не пересчитать.)
💻 3) Пытаюсь вспомнить бином Ньютона. Напомните, пожалуйста, как его, 
      а то я не все помню, ну зачем так подробно?
   
👩 Сколько ног у сороконожки?
💻 1) Двенадцать.
💻 2) Три. Три? зачем? :)
💻 3) У сороконожек, то есть сороконогих, ног всего восемь, а не восемь ног как у человека, 
      им конечностей не надо, они сами себе ноги, ...
Примеры ответов на контекстные вопросы:
👩 У девочки Маши есть кошка Мурка. Любит ли Маша кошек?
💻 1) Конечно любит.
💻 2) любит..я даже не сомневаюсь
💻 3) как сказать....

👩 Саша ударил Машу. Почему Маша плачет?
💻 1) похмелье.
💻 2) Потому что ей хочется.
💻 3) Маша была счастлива. Сейчас она выйдет на улицу, пройдет несколько шагов и увидит, 
      как навстречу ей бежит Серёжа. ... [длинная история]

👩 Маша любит Сашу, Саша любит Дашу. Любит ли Маша Дашу?
💻 1)... любить... иногда любви по-разному... Маша хочет Дашу, Даша хочет Машу. 
💻 2) Да-да
💻 3) согласен с вами

👩 У Маши было два яблока. Маша съела одно яблоко. Сколько яблок осталось у Маши?
💻 1) Никак... одно... испорченное.
💻 2) 14
💻 3) Одних яблок было две. Одно яблоко Маша съедает за один присест.
      
👩 Маша дома одела шляпку и пришла в школу. Где сейчас шляпка?      
💻 1) в витрине школы
💻 2) Да где же она, черт возьми?" - думает Маша. Может быть, в рюкзаке? 
      Нет, она туда не влезет. А если в сумку? В сидячий портфель? 
      А вдруг в правом кармане? Нет, давай искать! Кто-то уже ищет. Кажется, учительница.
      Маша, почему ты без шляпки? … О! Шляпа нашлась! В правом кармане. 
💻 3) /* * Я вот эту шляпку постоянно забываю одевать. Что делать?" */
      this.addOnFavorite('' + (params.getId().toString() - 1)); ...
   
👩 Миледи налила яд в вино и дала его Констанции. Та выпила его. Что после этого случилось?      
💻 1) 1. Констанция случайно подавилась вином и умерла. 2. Констанцию удавили.  
      3. Больная нервным расстройством Элиза стала буйствовать....
💻 2) На следующее утро Констанция повеселилась на славу. У лорда де Вентадура был день рождения,...
💻 3) - Через два месяца тело нашли в реке. - Монсеньор! Толстой обернулся:- Это и ежу ясно.

👩 У меня болит голова. Какие таблетки ты мне посоветуешь?   
💻 1) big аспирин, цитрамон, парацетамол x больше ничего не помогает. :-) 
💻 2) MIKHAIL: Я не знаю таких лекарств. Это сезонное. Выпей водки. BYRON: )))))))))
💻 3) 11. Ты считаешь меня симпатичной? 12. Я тебе нравлюсь?  

👩 Маша прошла 100 метров по улице, затем развернулась и прошла в обратном направлении 40 метров.
   Как далеко она находится от начальной точки?   
👩 Маша прошла три квартала на север и два квартала на восток. Как ей вернуться назад?   

Приложение B: Вопросительные слова

Персона: Объект Время Место Атрибут Количество Причина Способ Образ действия

Приложение C: Утвердительные вопросы

Если в вопросе нет вопросительного слова, то часто ожидается ответ да/нет, возможно с повторением вопроса и заменой местоимения.

Впрочем, вопросительное слово может быть опущено:

Источники информации