Skolkovo Robotics 2015 Презентация
Владимира Веселова на Robohack, одного из создателей чатбота Евгений Густман который в 2014 году прошел тест Тьюринга
3. Чатбот, виртуальный собеседник
это компьютерная программа, которая создана для имитации
речевого поведения человека при общении с одним или
несколькими пользователями
https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82
%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B
9_%D1%81%D0%BE%D0%B1%D0%B5%D1%81%D0%B5%D0%
B4%D0%BD%D0%B8%D0%BA
4. План
• Известные чатботы
• Элиза
• Алиса
• Rose
• Cleverbot
• HeX
• Fred
• Eugene Goostman
• Построение русскоговорящего чатбота
• архитектура
• поиск ответа
• обработка контекста
• диалоги
• планировщик
8. Тест Тьюринга
"I believe that in about fifty years' time it will be
possible, to programme computers, with a storage
capacity of about 10^9, to make them play the imitation
game so well that an average interrogator will not have
more than 70 per cent chance of making the right
identification after five minutes of questioning."
Turing, A.M. (1950). Computing machinery and
intelligence. Mind, 59, 433-460.
10. Eliza
• автор - Джозеф Вейзенбаум (1923-
2008)
Eliza: Hello, I am Eliza.
I am afraid.
Eliza: How long have you been afraid.
Since midterms.
Eliza: Tell me more...
User: I am afraid that I will fail my course.
Do you enjoy being afraid that you will fail your course?
11. Eliza (source)
["* i remember *", [
• "Do you often think of (2) ?",
• "Does thinking of (2) bring anything else to mind ?",
• "What else do you recollect ?",
• "Why do you remember (2) just now ?",
• "What in the present situation reminds you of (2) ?",
• "What is the connection between me and (2) ?",
• "What else does (2) remind you of ?"
• ]
https://github.com/isaacs/node-eliza/blob/master/elizabot.js
17. HeX
• автор: Джейсон Хатченс
• https://github.com/jasonhutchens/megahal - самообучающийся
чатбот
• Как пройти Тест Тьюринга с помощью обмана
http://www.nyu.edu/gsas/dept/philo/courses/mindsandmachine
s/Papers/hutchens96how.pdf
19. Eugene Goostman 2001
• http://princetonai.com
Команда Густмана сегодня (слева направо):
И. Быковских, С. Уласень, В.Веселов, А. Адащик
20. Eugene Goostman
• User: hi
• Eugene: Hi. I hope you'll enjoy our conversation!
• User: I hope so
• Eugene: My hopes also! Let's continue. And I forgot to ask you wher you are from...
• User: I am from Spain
• Eugene: Spain? Hope it's a good place to live.
• User: Yes it is
• Eugene: I am glad you agreed. Some another topic?
• User: There are the best climate of the world
• Eugene: And yes, do you make a secret of your name? I still don't know it!
• User: My name is Orio!
• Eugene: Orio? I don't really kown such a name, but OK - Let's be friends!
• User: It's not an English name
• Eugene: No? Well, it is up to you … Could you tell me about your job, but the way?
• User: I am studing at university
23. Структура базы знаний
Знания о
собеседнике
Общие знания:
Энциклопедия
Определения
География
Политика
Литература
Биология
Физика
Цитатник
...
Знания о себе
Имя
Откуда
Семья
Диалоги
Приветствие
Прощание
Что ты любишь?
Решатели
Какого цвета?
Сколько будет?
Планировщик,
управление беседой
Ответы по
умолчанию
Специализированные
знания, сервисы
24. Пре-процессор
• Коррекция ошибок
1. Создаем таблицу замены
извени=извини
пирвет=привет
2. Разбиваем текст на слова
3. Проверяем есть ли слово в таблице автозамены
4. Делаем замену
5. Генерим фразу
• Проверка наличия смысла
1. Создаем словарь
2. Разбиваем на слова
3. Проверям есть ли слово в словаре
4. Если слова нет, оцениваем близость к словарным словам с такой же длиной
• Исправление ошибок - лучше не надо
25. Аналитический и синтетический языки
A hunter saw a bear - Охотник увидел медведя
A bear saw a hunter - Медведь увидел охотника
A bear hunter saw - охотник на медведей увидел ...
A hunter bear saw - медведь-охотник увидел ...
Охотник увидел медведя
Охотник медведя увидел
Увидел медведя охотник
Увидел охотник медведя
Медведя охотник увидел
Медведя увидел охотник
27. Поиск по словам
Структура данных
Правило 0: {
Входы : [ "я хотел бы купить билеты", "мне нужен авиа билет”,”где купить билеты?”],
Ответ : ["куда вы хотите лететь?“]
},
Правило 1: {
Входы : [ "где моя посылка?“],
Ответ : ["у вас есть номер заказа?“]
} ,
Правило 2: [
Входы : [ "где ближайший банкомат?“],
Ответ : [“где вы сейчас находитесь?”]
}
Правило 3: {
Входы : [ “default“],
Ответ : [“я вас не совсем понял, давайте лучше поговорим о погоде”]
}
28. Поиск ответа
Структура данных
Правило 0: {
Входы : [ "я хотел бы купить билеты", "мне нужен авиа билет”,”где
купить билеты?”],
Ответ : ["куда вы хотите лететь?“]
},
Правило 1: {
Входы : [ "где моя посылка?“],
Ответ : ["у вас есть номер заказа?“]
} ,
Правило 2: [
Входы : [ "где ближайший банкомат?“],
Ответ : [“где вы сейчас находитесь?”]
}
Правило 3: {
Входы : [ “default“],
Ответ : [“я вас не совсем понял, давайте лучше поговорим о
погоде”]
}
купить
билет
где
посылка
билеты
банкомат
Правило 0, вход 0 Правило 0, вход 2
Правило 0, вход 1
Правило 0, вход 0 Правило 0, вход 2
Правило 1, вход 0 Правило 2, вход 0
Правило 1, вход 0
Правило 2, вход 0
default Правило 3, вход 0
29. Поиск ответа
купить
билет
где
посылка
билеты
банкомат
Правило 0, вход 0 Правило 0, вход 2
Правило 0, вход 1
Правило 0, вход 0 Правило 0, вход 2
Правило 1, вход 0 Правило 2, вход 0
Правило 1, вход 0
Правило 2, вход 0
Вес слова = 1 / количество входов
Пример:
Где мне найти банкомат?
Расчет весов:
Правило 1, вход 0 = 1 / 2 = 0.5
Правило 2, вход 0 = 1 / 2 + 1 = 1.5
Ответ - где вы сейчас находитесь?
default Правило 3, вход 0 Правило 2: [
Входы : [ "где ближайший банкомат?“],
Ответ : [“где вы сейчас находитесь?”]
}
31. Обработка контекста
• Как определить что / кого означают местоимения – он, она, оно,
это?
- Где ты живешь?
- В Москве
- Это большой город?
- ?
32. Обработка контекста
Правило 0: {
Входы : [“ты откуда?”],
Ответы : ["я из Москвы“],
Действие: function {
chatbot.context = “Москва”;
}
},
Правило 1: {
Входы : [ “какое население Москвы?“,”Москва
большой город?”],
Контекстные Входы : [это большой город?“,
“население”],
Контекст: “Москва”,
Ответ : [“Население Москвы составляет около 12,5
миллионов человек по данным 2014 года“]
}
Общий матчер
Контекстный
матчер
Москва
Контекстный
матчер
Семья
Контекстный
матчер
Друг Петя
- Ты откуда?
- Я из Москвы
chatbot.context = “Москва”
- Это большой город?
- Население Москвы составляет около 12,5
миллионов человек по данным 2014 года
33. Диалоги Купить
авиа
билеты?
Смена
темы
Куда?
Когда?
Сколько
билетов?
Нет Да
Ответ получен, аэропорт
назначения не распознан
Передумал
Ответ получен, аэропорт
назначения распознан
Ответ получен, дата
распознана
Ответ получен, дата не
распознана
Передумал
Ответ получен,
количество
пассажиров
известно
Заказ
билета
Ответ получен, количество
пассажиров неизвестно
Передумал
35. Программируем диалог
Правило 0: {
Входы : [“Хочу в отпуск”],
Ответы : [«Хотите заказать билет на
самолет?“],
Действие: function {
chatbot.dialogueId = “КупитьБилетыДаНет”;
}
}
Правило 1: {
Входы : [ “да“,”купить”],
dialogueId: “КупитьБилетыДаНет”,
Ответ : [“Где хотите отдохнуть?“]
Действие: function {
chatbot.dialogueId = “КупитьБилетыКуда”;
}
}
Правило 2: {
Входы : [ “нет“,”не сейчас”],
dialogueId: “КупитьБилетыДаНет”,
Ответ : [“Может книжку почитать?“]
}
36. Извлечение данных из фразы
chatbot.question = “меня зовут Джон”;
var myRegexp = /меня зовут (.*)/g;
var match = myRegexp.exec(chatbot.question);
chatbot.memory.username = match[1];
chatbot.response = "Привет " + chatbot.memory.username + "!";
37. Куда лететь?
var chatbot = new Object();
сhatbot.memory = new Object();
chatbot.question = "хочу полететь в Санкт Петербург";
var desitinationRegex = /.* в (Москву|Одессу|Нью Йорк|Санкт Петербург)/g;
var match = desitinationRegex.exec(chatbot.question);
chatbot.memory.airTicket_destination= match[1];
chatbot.response = "Когда вы хотите лететь в " + chatbot.memory.airTicket_destination + "?";
Человек: хочу полететь в Санкт Петербург
Чатбот: Когда вы хотите лететь в Санкт Петербург?
38. Куда лететь?
var Правило3 = {
Входы : [ "хочу лететь в","Москву","Одессу","Нью Йорк",
"Санкт Петербург" , “default”],
dialogueId: "КупитьБилетыКуда",
Действие: function () {
var destinationRegex =
/.* в (Москву|Одессу|Нью Йорк|Санкт Петербург)/g;
var match = destinationRegex.exec(chatbot.question);
if (match != null) {
chatbot.memory.airTicket_destination= match[1];
chatbot.response = "Когда вы хотите лететь в " +
chatbot.memory.airTicket_destination + "?";
chatbot.dialogueId = "КупитьБилетыКогда";
} else {
chatbot.dialogueId = "КупитьБилетыКуда";
chatbot.response = "Не совсем вас понял. Уточните куда вы хотите лететь.";
}
}
}
Человек: хочу полететь в Санкт Петербург
Чатбот: Когда вы хотите лететь в Санкт Петербург?
39. Классы, объекты, онтологии, таксономии
Класс: Млекопитающее
Количество ног: не больше четырех
Класс: Собака Класс: Кошка
Чатботы работающие на онтологиях:
ChatSript
Evi
Siri
40. Что больше, кто быстрее?
• Кто быстрее - кролик или черепаха?
• Что больше – яблоко или дыня?
Класс Размер, м Сокрость, км/ч Вес, кг
Кролик 0.3 20 2
Черепаха 0.2 0.07 0.5
Яблоко 0.1 0 0.1
Дыня 0.6 0 2
41. Что больше, кто быстрее?
Человек: что больше яблоко или дыня
Робот: яблоко меньше чем дыня
Человек: кто быстрее кролик или
черепаха
Робот: кролик быстрее чем черепаха
Человек: кто быстрее кролик или волк
Робот: не знаю
MyClass.prototype = {
compareTo: function(compareWith, propertyName) {
if (compareWith instanceof MyClass) {
if (this[propertyName] >
compareWith[propertyName]) {
return 1;
} else if (this[propertyName] <
compareWith[propertyName]) {
return -1;
}
return 0;
}
}
}
var database = new Object;
database["кролик"]=new MyClass("кролик",0.3,20,2);
database["черепаха"]=new
MyClass("черепаха",0.2,0.07,0.5);
database["яблоко"]=new MyClass("яблоко",0.1,0,0.1);
database["дыня"]=new MyClass("дыня",0.6,0,2);
42. Используем подход Элизы
chatbot.question = “я думаю об искусстве”;
var myRegexp = / я думаю об (.*)/g;
var match = myRegexp.exec(chatbot.question);
chatbot.memory.think_about = match[1];
chatbot.response = “Мне не интересно что ты
думаешь о “ +
chatbot.memory.think_about;
43. Сколько будет дважды два?
1. Заменяем числительные
expression = expression.replace(/дважды/g, '2 *');
expression = expression.replace(/трижды/g, '3 *');
…
expression = expression.replace(/один/g, '1');
expression = expression.replace(/два/g, '2');
…
expression = expression.replace(/умножить/g, '*');
expression = expression.replace(/прибавить/g, '+');
…
2. Фильтруем, оставляем цифры и операции
3. Пробуем вычислить
Сколько будет дважды два?
Вопрос: привет
Ответ: Не могу посчитать
Вопрос: сколько будет дважды два?
Ответ: 2*2 = 4
Вопрос: два плюс три умножить на два?
Ответ: 2+3*2 = 8
44. Какой сегодня день?
var weekday = new Array(7);
weekday[0] = "воскресенье";
weekday[1]= "понедельник";
weekday[2] = "вторник";
weekday[3] = "среда";
weekday[4] = "четверг";
weekday[5] = "пятница";
weekday[6] = "суббота";
var whatIsTheDayTodayExp = /.*какой сегодня
день(|?).*/g;
function whichDayToday() {
var match = whatIsTheDayTodayExp.test(question);
if (match) {
var today = new Date();
var weekdayToday = weekday[today.getDay()];
return new Response(70, “Сегодня – “ +
weekdayToday);
}
return 0;
}
function Response(score, response) {
this.score = score;
this.response = response;
}
45. Постпроцессор
Эмоции
1. Создаем правила для эмоций по словам, выражениям, знакам
препинания, смайликам
2. Анализируем ответ чатбота с помощью матчера
3. Если необходимо, анализируем фразу пользователя
4. Меням изображение (либо махаем руками, моргаем, мигаем
лампочками)
5. Можно использовать динамическую функцию:
X(n) = X (n-1) * w, 0<=w<1
46. Планировщик
Событие:
Ответ не найден
Раз в день
Случайно, но не чаще
чем раз в 5 минут
Действие:
Предложить тему разговора
Рассказать новость
Рассказать шутку
Поинтересоваться планами
Напомнить о планах на сегодня
48. Тестирование
• Ручные тесты обычно никто не выполняет (максимум 1-2 раза)
• Тестирование – ответственность программиста, в первую
очередь, а не тестировщика
• Тесты должны быть автоматизированы
Средства тестирования -
• JUnut
• Cucumber
• Selenium
• JMeter
49. Анализ логов
• Оценка качества беседы
• Создаем обучащий набор данных
• Создаем проверочный набор данных
• Создаем модель
• Проверяем на проверочном наборе
• Исправляем модель, если необходимо
• Периодическая проверка модели
• Методы
• Principal Component Analysis, Partial Least Square
• Neural Networks
• Bayesian Networks
• Правила
50. Заключение
• Что мы узнали?
• Чему научились?
• Линк на примеры:
• https://github.com/goostmangroup/pushkin
• https://github.com/vladimirveselov/howtobuild_chatbot_examples
• Линк на курс: https://www.kursoteka.ru/course/716
• Нужно ли организовать тест Тьюринга в России для
русскоговорящих роботов?
Здравствуйте.
Добро пожаловать на участие в мастер классе "Взаимодействие робота и человека"
Меня зовут Владимир Веселов, я являюсь одним из создателей чатбота Евгений Густман который в 2014 году прошел тест Тьюринга. Немного о себе - закончил Военный инженерно-космический институт им. А.Ф. Можайского, служил на Байконуре на УКСС. Поступил в адъюнктуру уже в академию Можайского, защитил кандидатскую диссертацию. Работал научным сотрудником, преподавателем, программистом. Сейчас работаю инженером-программистом в компании Амазон. В плане науки - занимался различными применениями нейронных сетей, машинного обучения, поисковой оптимизации. Роботы - мое хобби.
Тема нашего мастер класса - Взаимодействие робота и человека. Эта тема может включать в себя различные методы взаимодействия - речь, контакт, передача сигналов на расстоянии. В рамках данного мастеркласса мы рассмотрим аспекты речевого взаимодействия причем распознавание голоса и синтез речи мы рассматривать не будет. Только текстовые сообщения.
Говорящий робот без тела называется чатботом. Поэтому сегодня мы будем упоминать в основном чатботов.
Сначала я расскажу об известных чатботах, мы обсудим их разновидности. Потом перейдем к практическим вопросам создания диалоговой системы и конкретным алгоритмам. По некоторым вопросам я подготовил код на джаваскрипте, который вы сможете потом скачать с github и использовать без ограничений в том числе и для коммерческих приложений – Apache Open Source License.
Общая модель чатбота представлена на слайде. В принципе она очень похожа на модель человека. Для сравнения приведу модель инженера-программиста.
Как видно отличия небольшие. На входе также потребляется кофе, на выходе побочный подукт в виде сарказма.
Проведем небольшой исторический обзор.
Для начала вспомним знаменитую статью известного британского математика Алана Тьюринга, написанную в 1950-м году – Computing Machinery and Intelligence. В то время были горячие дискуссии на тему может ли машина думать. Алан Тьюринг сказал что машина думать не может, но может имитировать человека в процессе общения.
В статье он также сделал предположение что к 2000-му году компьютеры настолько хорошо смогут имитировать человека что у среднего собеседника будет не более 70% шансов правильного распознавания - человек или компьютер после 5 минут диалога. То есть, чтобы пройти тест Тьюринга нужно чтобы более 30-ти процентов собеседников приняли программу за человека. Так был определен всеми известный тест Тьюринга, который конечно же доказывает именно возможность имитации человека, но никак ни касается напрямую вопроса оценки мыслительной способности машины.
Тьюринг обосновал это тем, что за пять минут беседы с человеком о нем можно узнать все. А 70% - показывает что событие статистически значимо. В статье кстати описывается несколько практических рекомендаций о там как осуществить прохождение теста Тьюринга.
В 1990-м году нью-йоркский миллионер Хью Лобнер решил проверить сбылось ли предсказание Тьюринга. Хью кстати является доктором философии в компьютерных науках, занимался искусственным интеллектом, и сам умеет программировать. Хью решил конечно что тест Тьюринга устарел, и решил его организовать по-своему. Вместо 5-минут - 15. В финале было 10 собеседников (8 чатботов и 2 конфедерата) и 10 судей. После 10-ти раундов, судью ранжировали собеседников по похожести на человека. Правилиа меняются. Сейчас в финале 4 чатбота, 4 судьи, и 4 раунда. Правила постноянно меняются. Да была 5 минутная отметка Тьюринга после которой судья говорил является ли собеседник роботом или компьютером.
По началу тема беседы была предопределенной. Потом решили не ограничивать диалоги конкретной темой. С точки зрения практического использования, способность имитировать человека не особо интересна. Разве что для развлечений. Но приз Лобнера сыграл очень важную роль в популяризации чатботов. Каждый может написать свою программу и принять участие в этих соревнованиях. Не нужно иметь диплом, степень, принадлежность к учебному заведению или корпорации. Победители и большинство диалогов с приза Лобнера выложены на сайте Лобнера и доступны всем. Каждый может использовать диалоги с предыдущих конкурсов для разработки своих программ.
Также очень интересно обратить внимание на победителей приза Лобнера и посмотреть как чатботы эволюционировали.
В 1964 году Джзеф Вейзенбаум начал писать первого чатбота - Элизу. В 1966 году закончил. По сути это пародия на врачей психоаналитиков. Основная особенность Элизы в том что она использует фрагмент фразы пользователя для формирования ответа.
Исходный код Элизы выложен в открытом доступе. Элиза была очень популярна. Многие пациенты были уверены что они общаются с доктором.
Пример кода Элизы. Элиза является четырех кратным победителем Лобнер прайз.
Другой известный чатбот - Алиса.
Алиса является многократным победителем конкурса Лобнер Прайз. Была создана в 1995 году профессором Ричардом Валлесом. В проекте по созданию Алисы участвовало несколько сотен студентов. Робот Алиса написан на языке, который называется AIML. Построена на паттерн матчер алгоритме. Имеет возможности для конструирования диалогов. Алиса трех-кратный победитель Лобнер Прайз. AIML и его имплементации являются открытыми. К сожалению для построения русско-говорящего робота они не очень подходят. Почему - объясню позже.
На основе Алисы создан проект - Пандоработ, где каждый может создать своего робота он-лайн.
Розетта -создана Брюсом Вилкоксом в 2010-м году. Неоднократный победитель Лобнер Прайз. Основана на паттерн матчере, используются онтологии. Имеет очень продвинутый и в то же время компактный язык описания паттернов. Использует экспертную систему для нахождения ответов на сложные вопросы. Использует конструируемые диалоги. Брюс Вилкокс является трехкратным и действующим победителем Лобнер прайз. Брюс написал программу, которая называется ChatScript - код открыт, доступен, и может использоваться без всяких ограничений. У Брюса есть замечательные статьи, где он рассказывает как программировать чатботов, а также проводит сравнительный анализ с Алисой.
Отдельного внимания заслуживает CleverBot. Роло Карпентер - дважды победитель Лобнер Прайз. Клевер бот построен на использовании статистики. Его "обучают" пользователи, они говорят как он должен отвечать на какие либо вопросы. Основная проблема - при общении с ним возникает ощущение что говоришь с человеком, страдающим от раздвоения личности.
Робби Гарнер два раза выигрывал Лобнер прайз. Он написал чатбота - FRED. Который изображает из себя школьника, помешанного на сериале Стар Трек. Чатбот представляет из себя цельный персонаж. Кроме этого, он запоминает фразы собеседника, и, если не находит ответа, то ищет наиболее подходящую фразу из накопленной базы данных фраз пользователей.
Еще очень интересный победитель Лобнер прайз - Джейсон Хадченс. Он написал статью "Как пройти тест Тьюринга посредством обмана".
http://www.nyu.edu/gsas/dept/philo/courses/mindsandmachines/Papers/hutchens96how.pdf
Он использовал цепи Маркова для формирования ответа. Например, если есть начало фразы - The cat, то на основании статистической обработки текстов можно сгенерировать - the cat set. Насколько я помню Джейсон работал в израильской компании a-i, где был создан статистический способ создания чат бота. Причем бот может обучаться на любом языке. К сожалению он напоминал уровень пятилетнего ребенка и дальше не продвигался.
Еще очень интересный победитель Лобнер прайз - Джейсон Хадченс. Он написал статью "Как пройти тест Тьюринга посредством обмана".
http://www.nyu.edu/gsas/dept/philo/courses/mindsandmachines/Papers/hutchens96how.pdf
Он использовал цепи Маркова для формирования ответа. Например, если есть начало фразы - The cat, то на основании статистической обработки текстов можно сгенерировать - the cat set. Насколько я помню Джейсон работал в израильской компании a-i, где был создан статистический способ создания чат бота. Причем бот может обучаться на любом языке. К сожалению он напоминал уровень пятилетнего ребенка и дальше не продвигался.
Еще очень интересный победитель Лобнер прайз - Джейсон Хадченс. Он написал статью "Как пройти тест Тьюринга посредством обмана".
http://www.nyu.edu/gsas/dept/philo/courses/mindsandmachines/Papers/hutchens96how.pdf
Он использовал цепи Маркова для формирования ответа. Например, если есть начало фразы - The cat, то на основании статистической обработки текстов можно сгенерировать - the cat set. Насколько я помню Джейсон работал в израильской компании a-i, где был создан статистический способ создания чат бота. Причем бот может обучаться на любом языке. К сожалению он напоминал уровень пятилетнего ребенка и дальше не продвигался.
Наверное основная отличительная способность Густмана - это способность переводить тему разговора в нужное русло, в том случае если ему нечего сказать. Просто приведу пример диалога с Густманом
пример
У Густмана есть компонент, который мы называли - goal controller. Если был получен сигнал что ответ слабоват (например сработал паттер * yes * или *no *), то бот старается предложить новую тему для разговора. Причем их было запрограммировано только две - место жительства и где работаешь.
Подведем промежуточный итог - страница конкурса Лобнер прайз содержит множество полезной информации которую можно использовать при создании чатбота. Надеюсь что данный опыт будет учтен если подобный конкурс будет проводиться в Сколково.
Теперь, когда мы знаем уже довольно много про чатботов, давайте приступим к созданию своего.
Признаюсь сразу - я не силен в computational linguistics, поэтому некоторые методы могут показаться слишком примитивными или даже наивными. Но они работают. К тому же не требуют использования дополнительного программного обеспечения. Как говориться, чтобы вылечить пациента не обязательно делать вскрытие.
И так, приступим.
Для начала обсудим архитектуру чатбота.
Общая схема проста - предварительная обработка, нахождение наиболее подходящей фразы, и возможная до-обработка. На этапе предварительной обработки мы можем исправлять простейшие опечатки, определять язык, можем определить является ли данный текст осмысленным текстом или просто случайный набор символов. Так же на этом этапе мы можем распознавать емейлы, места, номера телефонов.
Дальше мы ищем наиболее подходящий ответ.
После этого, на основании предыдущих этапов, мы можем сформировать какое-либо дополнительное воздействие (помахать рукой) или даже попытаться перенаправить диалог в другое русло.
Евгений Густман, кстати, имеет примерно такую же архитектуру
Теперь рассмотрим структуру робота с точки зрения структуры знаний.
Робот должен знать о себе. Уметь рассказать откуда он, чем занимается кто друзья
Должен запоминать сведения о собеседнике