52
Взаимодействие робота и человека автор: Веселов В.В., к.т.н Skolkovo Robotics International Conference March 20-22, 2015

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

Embed Size (px)

Citation preview

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

Взаимодействие робота и человека

автор: Веселов В.В., к.т.н

Skolkovo Robotics International Conference

March 20-22, 2015

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

Методы взаимодействия робота и человека

• речь

• текст

• звуковые сигналы

• световые сигналы

• жесты

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

Чатбот, виртуальный собеседник

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

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%B9_%D1%81%D0%BE%D0%B1%D0%B5%D1%81%D0%B5%D0%B4%D0%BD%D0%B8%D0%BA

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

План• Известные чатботы

• Элиза

• Алиса

• Rose

• Cleverbot

• HeX

• Fred

• Eugene Goostman

• Построение русскоговорящего чатбота• архитектура

• поиск ответа

• обработка контекста

• диалоги

• планировщик

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

Модель чатбота

Текст (вопрос) Текст (ответ, действие)Чатбот

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

Модель програмиста

Програмист

Текст (емейл, задание, документ)

Текст (код, решение)

Кофе Сарказм (побочный продукт)

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

Алан Мэтисон Тьюринг (1912-1954)

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

Тест Тьюринга

"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.

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

Loebner Prize

http://www.loebner.net/Prizef/loebner-prize.html

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

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?

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

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

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

ALICE• автор: Richard S. Wallace

• http://www.alicebot.org/downloads/programs.html

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

Пандоработс

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

Rosette (ChatScript)

автор: Брюс Уилкокс

http://chatscript.sourceforge.net/D

ocumentation/ChatScript_Tutorial

.pdf

http://sourceforge.net/projects/ch

atscript/files/

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

Cleverbot/ Jabberwacky• автор: Роло Карпентер

• статистический алгоритм

• "самообучение"

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

FRED

• автор: Робби Гарнер

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

HeX

• автор: Джейсон Хатченс

• https://github.com/jasonhutchens/megahal - самообучающийся чатбот

• Как пройти Тест Тьюринга с помощью обмана http://www.nyu.edu/gsas/dept/philo/courses/mindsandmachines/Papers/hutchens96how.pdf

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

Elbot

• автор: Фред Робертс

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

Eugene Goostman 2001• http://princetonai.com

Команда Густмана сегодня (слева направо):И. Быковских, С. Уласень, В.Веселов, А. Адащик

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

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

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

Создаем своего чатботаУчим робота говорить

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

Архитектура

Препроцессор Процессор Постпроцессор

Память

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

Структура базы знаний

Знания о собеседнике

Общие знания:ЭнциклопедияОпределения

ГеографияПолитика

ЛитератураБиологияФизика

Цитатник...

Знания о себеИмя

ОткудаСемья

ДиалогиПриветствиеПрощание

Что ты любишь?

РешателиКакого цвета?

Сколько будет?

Планировщик, управление беседой

Ответы по умолчанию

Специализированные знания, сервисы

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

Пре-процессор

• Коррекция ошибок1. Создаем таблицу замены

извени=извинипирвет=привет

2. Разбиваем текст на слова3. Проверяем есть ли слово в таблице автозамены4. Делаем замену5. Генерим фразу

• Проверка наличия смысла1. Создаем словарь2. Разбиваем на слова3. Проверям есть ли слово в словаре4. Если слова нет, оцениваем близость к словарным словам с такой же длиной

• Исправление ошибок - лучше не надо

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

Аналитический и синтетический языки A hunter saw a bear - Охотник увидел медведяA bear saw a hunter - Медведь увидел охотникаA bear hunter saw - охотник на медведей увидел ...A hunter bear saw - медведь-охотник увидел ...

Охотник увидел медведяОхотник медведя увидел Увидел медведя охотникУвидел охотник медведя Медведя охотник увиделМедведя увидел охотник

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

Процессор. Поиск ответа

1. Регулярные выражения

* (привет|как дела) *

2. Lexer

3. Поиск по словам

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

Поиск по словамСтруктура данных

Правило 0: {

Входы : [ "я хотел бы купить билеты", "мне нужен авиа билет”,”где купить билеты?”],

Ответ : ["куда вы хотите лететь?“]

},

Правило 1: {

Входы : [ "где моя посылка?“],

Ответ : ["у вас есть номер заказа?“]

} ,

Правило 2: [

Входы : [ "где ближайший банкомат?“],

Ответ : [“где вы сейчас находитесь?”]

}

Правило 3: {

Входы : [ “default“],

Ответ : [“я вас не совсем понял, давайте лучше поговорим о погоде”]

}

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

Поиск ответаСтруктура данных

Правило 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

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

Поиск ответакупить

билет

где

посылка

билеты

банкомат

Правило 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: [Входы : [ "где ближайший банкомат?“],Ответ : [“где вы сейчас находитесь?”]

}

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

Процессор. Матчер

Текст (вопрос) Текст (ответ)Матчер

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

Обработка контекста

• Как определить что / кого означают местоимения – он, она, оно, это?

- Где ты живешь?

- В Москве

- Это большой город?

- ?

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

Обработка контекстаПравило 0: {

Входы : [“ты откуда?”],

Ответы : ["я из Москвы“],

Действие: function {

chatbot.context = “Москва”;

}

},

Правило 1: {

Входы : [ “какое население Москвы?“,”Москва большой город?”],

Контекстные Входы : [это большой город?“, “население”],

Контекст: “Москва”,

Ответ : [“Население Москвы составляет около 12,5 миллионов человек по данным 2014 года“]

}

Общий матчерКонтекстный

матчерМосква

Контекстный матчерСемья

Контекстный матчер

Друг Петя

- Ты откуда?- Я из Москвы

chatbot.context = “Москва”- Это большой город?- Население Москвы составляет около 12,5

миллионов человек по данным 2014 года

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

Диалоги Купить авиа

билеты?

Смена темы

Куда?

Когда?

Сколько билетов?

Нет Да

Ответ получен, аэропорт назначения не распознан

Передумал

Ответ получен, аэропорт назначения распознан

Ответ получен, дата распознана

Ответ получен, дата не распознана

Передумал

Ответ получен, количество пассажиров известно

Заказ билета

Ответ получен, количество пассажиров неизвестно

Передумал

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

Программируем диалог

Общий матчерКонтекстный

матчерМосква

Контекстный матчерСемья

Контекстный матчер

Друг Петя

Диалоговый матчер 1

Диалоговый матчер 2

Диалоговый матчер N

1. Если находимся в режиме диалога, делаем поиск соответствующим диалоговым матчером

2. Если контекст задан, то ищем в контекстном матчере3. Если не нашли – тогда используем общий матчер4. Default

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

Программируем диалогПравило 0: {

Входы : [“Хочу в отпуск”],

Ответы : [«Хотите заказать билет на самолет?“],

Действие: function {

chatbot.dialogueId = “КупитьБилетыДаНет”;

}

}

Правило 1: {

Входы : [ “да“,”купить”],

dialogueId: “КупитьБилетыДаНет”,

Ответ : [“Где хотите отдохнуть?“]

Действие: function {

chatbot.dialogueId = “КупитьБилетыКуда”;

}

}

Правило 2: {

Входы : [ “нет“,”не сейчас”],

dialogueId: “КупитьБилетыДаНет”,

Ответ : [“Может книжку почитать?“]

}

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

Извлечение данных из фразы

chatbot.question = “меня зовут Джон”;

var myRegexp = /меня зовут (.*)/g;

var match = myRegexp.exec(chatbot.question);

chatbot.memory.username = match[1];

chatbot.response = "Привет " + chatbot.memory.username + "!";

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

Куда лететь?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 + "?";

Человек: хочу полететь в Санкт ПетербургЧатбот: Когда вы хотите лететь в Санкт Петербург?

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

Куда лететь?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 = "Не совсем вас понял. Уточните куда вы хотите лететь.";

}

}

}

Человек: хочу полететь в Санкт ПетербургЧатбот: Когда вы хотите лететь в Санкт Петербург?

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

Классы, объекты, онтологии, таксономии

Класс: МлекопитающееКоличество ног: не больше четырех

Класс: Собака Класс: Кошка

Чатботы работающие на онтологиях:ChatSriptEviSiri

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

Что больше, кто быстрее?

• Кто быстрее - кролик или черепаха?

• Что больше – яблоко или дыня?

Класс Размер, м Сокрость, км/ч Вес, кг

Кролик 0.3 20 2

Черепаха 0.2 0.07 0.5

Яблоко 0.1 0 0.1

Дыня 0.6 0 2

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

Что больше, кто быстрее?

Человек: что больше яблоко или дыня

Робот: яблоко меньше чем дыня

Человек: кто быстрее кролик или

черепаха

Робот: кролик быстрее чем черепаха

Человек: кто быстрее кролик или волк

Робот: не знаю

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);

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

Используем подход Элизы

chatbot.question = “я думаю об искусстве”;

var myRegexp = / я думаю об (.*)/g;

var match = myRegexp.exec(chatbot.question);

chatbot.memory.think_about = match[1];

chatbot.response = “Мне не интересно что ты

думаешь о “ +

chatbot.memory.think_about;

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

Сколько будет дважды два?

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

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

Какой сегодня день?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;

}

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

Постпроцессор

Эмоции

1. Создаем правила для эмоций по словам, выражениям, знакам препинания, смайликам

2. Анализируем ответ чатбота с помощью матчера

3. Если необходимо, анализируем фразу пользователя

4. Меням изображение (либо махаем руками, моргаем, мигаем лампочками)

5. Можно использовать динамическую функцию:X(n) = X (n-1) * w, 0<=w<1

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

Планировщик

Событие:

Ответ не найден

Раз в день

Случайно, но не чаще чем раз в 5 минут

Действие:

Предложить тему разговора

Рассказать новость

Рассказать шутку

Поинтересоваться планами

Напомнить о планах на сегодня

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

Планировщик

Сменить тему

Поэзия

Пушкин Лермонтов

Профессия

Интересно ли быть?

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

Тестирование

• Ручные тесты обычно никто не выполняет (максимум 1-2 раза)

• Тестирование – ответственность программиста, в первую очередь, а не тестировщика

• Тесты должны быть автоматизированы

Средства тестирования -

• JUnut

• Cucumber

• Selenium

• JMeter

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

Анализ логов

• Оценка качества беседы• Создаем обучащий набор данных• Создаем проверочный набор данных• Создаем модель• Проверяем на проверочном наборе• Исправляем модель, если необходимо• Периодическая проверка модели

• Методы• Principal Component Analysis, Partial Least Square• Neural Networks• Bayesian Networks• Правила

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

Заключение

• Что мы узнали?

• Чему научились?

• Линк на примеры:

• https://github.com/goostmangroup/pushkin

• https://github.com/vladimirveselov/howtobuild_chatbot_examples

• Линк на курс: https://www.kursoteka.ru/course/716

• Нужно ли организовать тест Тьюринга в России для русскоговорящих роботов?

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

Демо - Пушкин

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

Вопросы?