Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Взаимодействие робота и
человека
автор: Веселов В.В., к.т.н
Skolkovo Robotics International Conference
March 20-22, 2015
Методы взаимодействия робота и
человека
• речь
• текст
• звуковые сигналы
• световые сигналы
• жесты
Чатбот, виртуальный собеседник
это компьютерная программа, которая создана для имитации
речевого поведения человека при об...
План
• Известные чатботы
• Элиза
• Алиса
• Rose
• Cleverbot
• HeX
• Fred
• Eugene Goostman
• Построение русскоговорящего ч...
Модель чатбота
Текст (вопрос) Текст (ответ, действие)
Чатбот
Модель програмиста
Програмист
Текст (емейл, задание,
документ)
Текст (код, решение)
Кофе Сарказм (побочный продукт)
Алан Мэтисон Тьюринг (1912-1954)
Тест Тьюринга
"I believe that in about fifty years' time it will be
possible, to programme computers, with a storage
capac...
Loebner Prize
http://www.loebner.net/Prizef/loebner-prize.html
Eliza
• автор - Джозеф Вейзенбаум (1923-
2008)
Eliza: Hello, I am Eliza.
I am afraid.
Eliza: How long have you been afraid...
Eliza (source)
["* i remember *", [
• "Do you often think of (2) ?",
• "Does thinking of (2) bring anything else to mind ?...
ALICE
• автор: Richard S. Wallace
• http://www.alicebot.org/downloads/programs.htm
l
Пандоработс
Rosette (ChatScript)
автор: Брюс Уилкокс
http://chatscript.sourceforge.net/D
ocumentation/ChatScript_Tutorial
.pdf
http://...
Cleverbot/ Jabberwacky
• автор: Роло Карпентер
• статистический алгоритм
• "самообучение"
FRED
• автор: Робби Гарнер
HeX
• автор: Джейсон Хатченс
• https://github.com/jasonhutchens/megahal - самообучающийся
чатбот
• Как пройти Тест Тьюринг...
Elbot
• автор: Фред Робертс
Eugene Goostman 2001
• http://princetonai.com
Команда Густмана сегодня (слева направо):
И. Быковских, С. Уласень, В.Весело...
Eugene Goostman
• User: hi
• Eugene: Hi. I hope you'll enjoy our conversation!
• User: I hope so
• Eugene: My hopes also! ...
Создаем своего чатбота
Учим робота говорить
Архитектура
Препроцессор Процессор Постпроцессор
Память
Структура базы знаний
Знания о
собеседнике
Общие знания:
Энциклопедия
Определения
География
Политика
Литература
Биология
Ф...
Пре-процессор
• Коррекция ошибок
1. Создаем таблицу замены
извени=извини
пирвет=привет
2. Разбиваем текст на слова
3. Пров...
Аналитический и синтетический языки
A hunter saw a bear - Охотник увидел медведя
A bear saw a hunter - Медведь увидел охот...
Процессор. Поиск ответа
1. Регулярные выражения
* (привет|как дела) *
2. Lexer
3. Поиск по словам
Поиск по словам
Структура данных
Правило 0: {
Входы : [ "я хотел бы купить билеты", "мне нужен авиа билет”,”где купить бил...
Поиск ответа
Структура данных
Правило 0: {
Входы : [ "я хотел бы купить билеты", "мне нужен авиа билет”,”где
купить билеты...
Поиск ответа
купить
билет
где
посылка
билеты
банкомат
Правило 0, вход 0 Правило 0, вход 2
Правило 0, вход 1
Правило 0, вхо...
Процессор. Матчер
Текст (вопрос) Текст (ответ)
Матчер
Обработка контекста
• Как определить что / кого означают местоимения – он, она, оно,
это?
- Где ты живешь?
- В Москве
- Эт...
Обработка контекста
Правило 0: {
Входы : [“ты откуда?”],
Ответы : ["я из Москвы“],
Действие: function {
chatbot.context = ...
Диалоги Купить
авиа
билеты?
Смена
темы
Куда?
Когда?
Сколько
билетов?
Нет Да
Ответ получен, аэропорт
назначения не распозна...
Программируем диалог
Общий матчер
Контекстный
матчер
Москва
Контекстный
матчер
Семья
Контекстный
матчер
Друг Петя
Диалогов...
Программируем диалог
Правило 0: {
Входы : [“Хочу в отпуск”],
Ответы : [«Хотите заказать билет на
самолет?“],
Действие: fun...
Извлечение данных из фразы
chatbot.question = “меня зовут Джон”;
var myRegexp = /меня зовут (.*)/g;
var match = myRegexp.e...
Куда лететь?
var chatbot = new Object();
сhatbot.memory = new Object();
chatbot.question = "хочу полететь в Санкт Петербур...
Куда лететь?
var Правило3 = {
Входы : [ "хочу лететь в","Москву","Одессу","Нью Йорк",
"Санкт Петербург" , “default”],
dial...
Классы, объекты, онтологии, таксономии
Класс: Млекопитающее
Количество ног: не больше четырех
Класс: Собака Класс: Кошка
Ч...
Что больше, кто быстрее?
• Кто быстрее - кролик или черепаха?
• Что больше – яблоко или дыня?
Класс Размер, м Сокрость, км...
Что больше, кто быстрее?
Человек: что больше яблоко или дыня
Робот: яблоко меньше чем дыня
Человек: кто быстрее кролик или...
Используем подход Элизы
chatbot.question = “я думаю об искусстве”;
var myRegexp = / я думаю об (.*)/g;
var match = myRegex...
Сколько будет дважды два?
1. Заменяем числительные
expression = expression.replace(/дважды/g, '2 *');
expression = express...
Какой сегодня день?
var weekday = new Array(7);
weekday[0] = "воскресенье";
weekday[1]= "понедельник";
weekday[2] = "вторн...
Постпроцессор
Эмоции
1. Создаем правила для эмоций по словам, выражениям, знакам
препинания, смайликам
2. Анализируем отве...
Планировщик
Событие:
Ответ не найден
Раз в день
Случайно, но не чаще
чем раз в 5 минут
Действие:
Предложить тему разговора...
Планировщик
Сменить
тему
Поэзия
Пушкин Лермонтов
Профессия
Интересно
ли быть?
Тестирование
• Ручные тесты обычно никто не выполняет (максимум 1-2 раза)
• Тестирование – ответственность программиста, в...
Анализ логов
• Оценка качества беседы
• Создаем обучащий набор данных
• Создаем проверочный набор данных
• Создаем модель
...
Заключение
• Что мы узнали?
• Чему научились?
• Линк на примеры:
• https://github.com/goostmangroup/pushkin
• https://gith...
Демо - Пушкин
Вопросы?
Upcoming SlideShare
Loading in …5
×

[Skolkovo Robotics 2015 Day 2] Владимир Веселов Bot and humans "Взаимодействие робота и человека"

659 views

Published on

Skolkovo Robotics 2015 Презентация
Владимира Веселова на Robohack, одного из создателей чатбота Евгений Густман который в 2014 году прошел тест Тьюринга

Published in: Science
  • Be the first to comment

[Skolkovo Robotics 2015 Day 2] Владимир Веселов Bot and humans "Взаимодействие робота и человека"

  1. 1. Взаимодействие робота и человека автор: Веселов В.В., к.т.н Skolkovo Robotics International Conference March 20-22, 2015
  2. 2. Методы взаимодействия робота и человека • речь • текст • звуковые сигналы • световые сигналы • жесты
  3. 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. 4. План • Известные чатботы • Элиза • Алиса • Rose • Cleverbot • HeX • Fred • Eugene Goostman • Построение русскоговорящего чатбота • архитектура • поиск ответа • обработка контекста • диалоги • планировщик
  5. 5. Модель чатбота Текст (вопрос) Текст (ответ, действие) Чатбот
  6. 6. Модель програмиста Програмист Текст (емейл, задание, документ) Текст (код, решение) Кофе Сарказм (побочный продукт)
  7. 7. Алан Мэтисон Тьюринг (1912-1954)
  8. 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.
  9. 9. Loebner Prize http://www.loebner.net/Prizef/loebner-prize.html
  10. 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. 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
  12. 12. ALICE • автор: Richard S. Wallace • http://www.alicebot.org/downloads/programs.htm l
  13. 13. Пандоработс
  14. 14. Rosette (ChatScript) автор: Брюс Уилкокс http://chatscript.sourceforge.net/D ocumentation/ChatScript_Tutorial .pdf http://sourceforge.net/projects/ch atscript/files/
  15. 15. Cleverbot/ Jabberwacky • автор: Роло Карпентер • статистический алгоритм • "самообучение"
  16. 16. FRED • автор: Робби Гарнер
  17. 17. HeX • автор: Джейсон Хатченс • https://github.com/jasonhutchens/megahal - самообучающийся чатбот • Как пройти Тест Тьюринга с помощью обмана http://www.nyu.edu/gsas/dept/philo/courses/mindsandmachine s/Papers/hutchens96how.pdf
  18. 18. Elbot • автор: Фред Робертс
  19. 19. Eugene Goostman 2001 • http://princetonai.com Команда Густмана сегодня (слева направо): И. Быковских, С. Уласень, В.Веселов, А. Адащик
  20. 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
  21. 21. Создаем своего чатбота Учим робота говорить
  22. 22. Архитектура Препроцессор Процессор Постпроцессор Память
  23. 23. Структура базы знаний Знания о собеседнике Общие знания: Энциклопедия Определения География Политика Литература Биология Физика Цитатник ... Знания о себе Имя Откуда Семья Диалоги Приветствие Прощание Что ты любишь? Решатели Какого цвета? Сколько будет? Планировщик, управление беседой Ответы по умолчанию Специализированные знания, сервисы
  24. 24. Пре-процессор • Коррекция ошибок 1. Создаем таблицу замены извени=извини пирвет=привет 2. Разбиваем текст на слова 3. Проверяем есть ли слово в таблице автозамены 4. Делаем замену 5. Генерим фразу • Проверка наличия смысла 1. Создаем словарь 2. Разбиваем на слова 3. Проверям есть ли слово в словаре 4. Если слова нет, оцениваем близость к словарным словам с такой же длиной • Исправление ошибок - лучше не надо
  25. 25. Аналитический и синтетический языки A hunter saw a bear - Охотник увидел медведя A bear saw a hunter - Медведь увидел охотника A bear hunter saw - охотник на медведей увидел ... A hunter bear saw - медведь-охотник увидел ... Охотник увидел медведя Охотник медведя увидел Увидел медведя охотник Увидел охотник медведя Медведя охотник увидел Медведя увидел охотник
  26. 26. Процессор. Поиск ответа 1. Регулярные выражения * (привет|как дела) * 2. Lexer 3. Поиск по словам
  27. 27. Поиск по словам Структура данных Правило 0: { Входы : [ "я хотел бы купить билеты", "мне нужен авиа билет”,”где купить билеты?”], Ответ : ["куда вы хотите лететь?“] }, Правило 1: { Входы : [ "где моя посылка?“], Ответ : ["у вас есть номер заказа?“] } , Правило 2: [ Входы : [ "где ближайший банкомат?“], Ответ : [“где вы сейчас находитесь?”] } Правило 3: { Входы : [ “default“], Ответ : [“я вас не совсем понял, давайте лучше поговорим о погоде”] }
  28. 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. 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: [ Входы : [ "где ближайший банкомат?“], Ответ : [“где вы сейчас находитесь?”] }
  30. 30. Процессор. Матчер Текст (вопрос) Текст (ответ) Матчер
  31. 31. Обработка контекста • Как определить что / кого означают местоимения – он, она, оно, это? - Где ты живешь? - В Москве - Это большой город? - ?
  32. 32. Обработка контекста Правило 0: { Входы : [“ты откуда?”], Ответы : ["я из Москвы“], Действие: function { chatbot.context = “Москва”; } }, Правило 1: { Входы : [ “какое население Москвы?“,”Москва большой город?”], Контекстные Входы : [это большой город?“, “население”], Контекст: “Москва”, Ответ : [“Население Москвы составляет около 12,5 миллионов человек по данным 2014 года“] } Общий матчер Контекстный матчер Москва Контекстный матчер Семья Контекстный матчер Друг Петя - Ты откуда? - Я из Москвы chatbot.context = “Москва” - Это большой город? - Население Москвы составляет около 12,5 миллионов человек по данным 2014 года
  33. 33. Диалоги Купить авиа билеты? Смена темы Куда? Когда? Сколько билетов? Нет Да Ответ получен, аэропорт назначения не распознан Передумал Ответ получен, аэропорт назначения распознан Ответ получен, дата распознана Ответ получен, дата не распознана Передумал Ответ получен, количество пассажиров известно Заказ билета Ответ получен, количество пассажиров неизвестно Передумал
  34. 34. Программируем диалог Общий матчер Контекстный матчер Москва Контекстный матчер Семья Контекстный матчер Друг Петя Диалоговый матчер 1 Диалоговый матчер 2 Диалоговый матчер N 1. Если находимся в режиме диалога, делаем поиск соответствующим диалоговым матчером 2. Если контекст задан, то ищем в контекстном матчере 3. Если не нашли – тогда используем общий матчер 4. Default
  35. 35. Программируем диалог Правило 0: { Входы : [“Хочу в отпуск”], Ответы : [«Хотите заказать билет на самолет?“], Действие: function { chatbot.dialogueId = “КупитьБилетыДаНет”; } } Правило 1: { Входы : [ “да“,”купить”], dialogueId: “КупитьБилетыДаНет”, Ответ : [“Где хотите отдохнуть?“] Действие: function { chatbot.dialogueId = “КупитьБилетыКуда”; } } Правило 2: { Входы : [ “нет“,”не сейчас”], dialogueId: “КупитьБилетыДаНет”, Ответ : [“Может книжку почитать?“] }
  36. 36. Извлечение данных из фразы chatbot.question = “меня зовут Джон”; var myRegexp = /меня зовут (.*)/g; var match = myRegexp.exec(chatbot.question); chatbot.memory.username = match[1]; chatbot.response = "Привет " + chatbot.memory.username + "!";
  37. 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. 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. 39. Классы, объекты, онтологии, таксономии Класс: Млекопитающее Количество ног: не больше четырех Класс: Собака Класс: Кошка Чатботы работающие на онтологиях: ChatSript Evi Siri
  40. 40. Что больше, кто быстрее? • Кто быстрее - кролик или черепаха? • Что больше – яблоко или дыня? Класс Размер, м Сокрость, км/ч Вес, кг Кролик 0.3 20 2 Черепаха 0.2 0.07 0.5 Яблоко 0.1 0 0.1 Дыня 0.6 0 2
  41. 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. 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. 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. 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. 45. Постпроцессор Эмоции 1. Создаем правила для эмоций по словам, выражениям, знакам препинания, смайликам 2. Анализируем ответ чатбота с помощью матчера 3. Если необходимо, анализируем фразу пользователя 4. Меням изображение (либо махаем руками, моргаем, мигаем лампочками) 5. Можно использовать динамическую функцию: X(n) = X (n-1) * w, 0<=w<1
  46. 46. Планировщик Событие: Ответ не найден Раз в день Случайно, но не чаще чем раз в 5 минут Действие: Предложить тему разговора Рассказать новость Рассказать шутку Поинтересоваться планами Напомнить о планах на сегодня
  47. 47. Планировщик Сменить тему Поэзия Пушкин Лермонтов Профессия Интересно ли быть?
  48. 48. Тестирование • Ручные тесты обычно никто не выполняет (максимум 1-2 раза) • Тестирование – ответственность программиста, в первую очередь, а не тестировщика • Тесты должны быть автоматизированы Средства тестирования - • JUnut • Cucumber • Selenium • JMeter
  49. 49. Анализ логов • Оценка качества беседы • Создаем обучащий набор данных • Создаем проверочный набор данных • Создаем модель • Проверяем на проверочном наборе • Исправляем модель, если необходимо • Периодическая проверка модели • Методы • Principal Component Analysis, Partial Least Square • Neural Networks • Bayesian Networks • Правила
  50. 50. Заключение • Что мы узнали? • Чему научились? • Линк на примеры: • https://github.com/goostmangroup/pushkin • https://github.com/vladimirveselov/howtobuild_chatbot_examples • Линк на курс: https://www.kursoteka.ru/course/716 • Нужно ли организовать тест Тьюринга в России для русскоговорящих роботов?
  51. 51. Демо - Пушкин
  52. 52. Вопросы?

×