Upload
ainl-conferences
View
253
Download
4
Embed Size (px)
DESCRIPTION
Что будет рассмотрено: имитация диалога в простых конструкциях "вопрос-ответ" управление ходом диалога имитация реальной личности этапы разработки чатбота как тестируется база знаний как база знаний корректируется по результатам общения
Citation preview
Организация диалога с чатботом
Уласень С.Н., к.т.н.
Что такое чатбот
Чатбот - это компьютерная программа, которая общается с пользователем на естественном языке и имитирует человека
Возможности чатботаЧатбот “Евгений Густман”7 июня 2014 - на соревнованиях, организованных университетом Рединга в честь 60-й годовщины со дня смерти Алана Тьюринга, 33% судей после пятиминутного общения приняли чатбот “Eugene Goostman” за человека.
В соревновании принимали участие 5 чатботов и 30 судей. Каждый судья общался с каждым из 5 чатботов и c человеком.
Разпознование человекаВопрос: 299Ответ: Это что? Вывод: человек
Вопрос: 299Ответ: 10 Вывод: человек
Вопрос: 299Ответ: 66
Ну наконец-то, свой!
Этапы создания чатбота1. Создание базовой диалоговой системы
и базы знаний чатбота 2. Персонализация чатбота3. Непрерывное совершенствование:
улучшение - тестирование - исправление
Создание диалоговой системы● организация диалога в простых конструкциях
"вопрос-ответ"○ конструирование вопросов пользователя○ конструирование ответов чатбота
● учет темы разговора● конструирование мини-диалогов● управление диалогом
Диалоговая система: Конструирование вопросов пользователяПример 1: Простой шаблон с токеном<QAUnit name="Hi_hello" > <Pattern> (Hi|Hello) * </Pattern> <Text> Hi. I hope you'll enjoy our conversation! </Text></QAUnit>
Пример 2: Шаблон с составным токеном<MultiToken name="hello1" >(Hi|Hello)</MultiToken><MultiToken name="hello2" >(Privet|salute)</MultiToken><MultiToken name="hello" >(#(hello1)|#(hello2))</MultiToken>
<QAUnit name="Hi_hello" ><Pattern> #(hello) * </Pattern><Text>Hi. I hope you'll enjoy our conversation!</Text>
</QAUnit>
Пример 3: Анализ части фразы<QAUnit name="Hi_hello" >
<Pattern> #(hello) * my name is * </Pattern><!-- extract user name … --><Text>Hi #(user_name)!</Text>
</QAUnit>
Пример 4: Анализ фразы с получением имени и пола пользователя<QAUnit name="Hi_hello" >
<Pattern> #(hello) * my name is #(MaleName) </Pattern><Text>You said #(user_name)? Nice to meet you, sir!</Text>
</QAUnit>
Пример 5: Несколько шаблонов<QAUnit name="Hi_hello" > <Pattern> (Hi|Hello) * </Pattern> <Pattern> (Privet|Salut) * </Pattern> …</QAUnit>
Диалоговая система: Конструирование ответов чатботаПример 1: Простой ответ<QAUnit name="Hi_hello" > <Pattern> (Hi|Hello) * </Pattern> <Text> Hi. I hope you'll enjoy our conversation! </Text></QAUnit>
Пример 2: Несколько вариантов ответа<QAUnit name="Hi_hello" > <Pattern> #(hello) * </Pattern> <Random> <Text>Hi. I hope you'll enjoy our conversation!</Text> <Text>Hello, I'm really glad to have the chance to chat with you! </Text> <Text>Howdy pal! Today is a kind of never-ending talk-show, I'd say!</Text> <Text>Salute! </Text> </Random></QAUnit>
Пример 3: Несколько групп ответов<QAUnit name="Hi_hello" > <Pattern> #(hello) * </Pattern> <If hi_was EQ “NO”> <Random> <Text>Nice to meet you! </Text>
<Text>Hi. I hope you'll enjoy our conversation!</Text> </Random> <Else> <Random> <Text>Hi again! I hope you enjoy greetings.</Text> <Text>Hello again. I see you like greeting me.</Text> <Text>Salute again!</Text> </Random> </If></QAUnit>
Пример 5. Ответы с синонимами<QAUnit name="Hi_hello" >
<Pattern> #(hello) * </Pattern><Text>#(hello)! Nice to meet you!</Text>
</QAUnit>
Диалоговая система: Конструирование ответов чатбота-2Пример 4: Ответы с использованием полученной информации<QAUnit name="Hi_hello" >
<Pattern> #(hello) * my name is #(MaleName) </Pattern><Text>You said #(user_name)? Nice to meet you, sir!</Text>
</QAUnit>
<QAUnit name="Encyclopedia" > <Pattern>* #(qWhatAbout) (a|the|an|) #(dynEncyc) *</Pattern> <Pattern>* (what|tell me | explain|understand) * meaning of * #(dynEncyc) *</Pattern> <Variable name="term" type="String">=lasttoken</Variable> <!-- select definition from database… --> <Random> <Text>Ok, lets look up in my pocket encyclopedia. They say #(term) - #(definition).</Text> <Text>I remember it! #(definition)</Text> </Random></QAUnit>
Диалоговая система: Учет темы диалога
Пример диалогаUSER: what is a location of france RESPONSE: Buy a map and hang it over your desk! France - country in W Europe, on the Atlantic and the Mediterranean Sea.
USER: what is its population RESPONSE: Well, according to the latest secret data approximately 65 mln live in France.
Диалоговая система: Учет темы диалога2. Вложенная конструкция
<QAUnit name="hi_how_are_you_good_1">
<Pattern>* I * (am (doing|feeling|) | feel) *</Pattern>
<Text>Yeah, it's lovely day!</Text>
<QAUnit .../>
<QAUnit .../>
</QAUnit>
1. Контекстная конструкция
<Theme name="How_are_you">
<QAUnit …. />
<QAUnit …. />
<QAUnit name="hi_how_are_you_good_1">
<Pattern>* I * (am (doing|feeling|) | feel) *</Pattern>
<ContextPattern>* #(aGood) *</ContextPattern>
<ContextPattern>* (no|not |not that) #(aBad) *</ContextPattern>
<Random>
<Text>Yeah, it's lovely day!</Text>
<Text>Nice to hear that! </Text>
</Random>
</QAUnit>
</Theme>
Диалоговая система: Управление диалогомУправление внутри мини-диалогов
Ответы с неявным изменением темы диалога<QAUnit name="Hi_hello" > <Pattern> (Hi|Hello) * </Pattern> <Text>Hello, I'm really glad to have the chance to chat with you! My guinea pig Bill sends his regards too!</Text> <Text>Salute! How are you doing? </Text> <Text>Greetings! What would you like to talk about?</Text></QAUnit>
Ответы с явным изменением темы диалога<QAUnit name="Hi_hello" > <Pattern> #(hello) * my name is #(MaleName) </Pattern> <Text>Nice to hear that! Do you like the weather?</Text> <ChangeTheme>Weather</ChangeTheme></QAUnit>
Управление диалогом при помощи контроллера целей
1. Контроллер определяет возможность или необходимость изменения темы:
○ не распознана текущая тема диалога○ разговор давно не велся на целевые темы○ текущий контекст не находится ни в одном
из целевых диалогов○ фраза пользователя не является
контекстной2. Контроллер выбирает тему, на которую надо
переключиться.3. Ответная фраза чатбота включает ответ из базы
знаний и фразу, полученную от контроллера целей
4. Контроллер запоминает время активации цели и реакцию пользователя.
Диалоговая система: Конструирование диалогов
● Определение списка тем, по которым будет общаться чатбот
● Составление мини-диалогов по темам● Анализ проведенных диалогов● Составление мини-диалогов для тем, которые не
удалось определить
Персонализация чатбота - создание виртуальной личности
● Выбор имени, возраста, пола, ...● Персонализация диалогов:
○ Разработка характера (шутливый, строгий, ...)
○ Разработка персональных тем (семья, хобби, привычки, домашние питомцы, школа/работа,...)
● Добавление контроллера эмоций● Создание визуального образа
User: current date, plsBot: Today's date is ...
User: what is the date todayBot: Today is …
User: what is the capital of FinlandBot: Helsinki
User: what is the capital of FranceBot: Paris
Персонализация чатбота - создание виртуальной личности
User: current date, plsBot: Today's date is ..., if I remember it right.
User: what is the date todayBot: Do you think my name is Gregorian Calendar?;-)
User: what is the capital of FinlandBot: Possibly, Helsinki.
User: what is the capital of FranceBot: Every French fries know that French capital is Paris
Персонализация чатбота - примеры диалоговUSER: test
RESPONSE: Be..be...beep! P..p..power-on self-test f..f..finished suck... suck... suck... SUCCESSFULLY!
USER: What is the square root of a negative number?
RESPONSE: Sorry, I can't calculate myself, but my well-educated home-pet, guinea pig, says he got an overflow trying to obtain the result :-(
USER: Blah blah blah blah blah blah
RESPONSE: Click-click-click! Khhhrrrrrrr!
USER: I want a girl
RESPONSE: You want too much, I'd say.
USER: find a girl
RESPONSE: My guinea pig is very concerned about your last words.
USER: i am very poor.
RESPONSE: Do you live in the street then, poor geezer?
USER: no, but i have no job.
RESPONSE: The fact that you have no job won't change my attitude to you.
USER: i do not care. I just tell you something about me, ok?
RESPONSE: Well, you don't know, you don't care. And even the fact that crappy robots are going to capture the world, isn't your problem. OK then…
USER: Are you a freak?
RESPONSE: Bugger off, loser.
USER: Hahaha! Sorry i just had to test you.
RESPONSE: Beep-beep. Flash-flash. Self-testing is over.
USER: what is a location of france
RESPONSE: Buy a map and hang it over your desk! France - country in W Europe, on the Atlantic and the Mediterranean Sea.
USER: what is its population
RESPONSE: Well, according to the latest secret data approximately 65 mln live in France.
USER: is it greater than germany
RESPONSE: I'd say that Germany is smaller than France.
USER: what is a size of germany
RESPONSE: Well, if you want to conquier Germany, you'll have lots of work - its square is about 356.8 thsd sq. km.
USER: what is a currency of bahrain
RESPONSE: Do you want to rob their bank? Well, so you'll get lots of dinars.
USER: what is a capital of this country
RESPONSE: If you've studied geography at school better, you would have known the answer - Manama is a capital city in Bahrain.
USER: is it in the same region with panama
RESPONSE: I'm not sure about Bahrain and Panama, but I guess they belong to different world regions.
USER: is panama far from paraguay
RESPONSE: I am not a map for you, but I should say both Panama and Paraguay are South American countries so they should be close to each other.
USER: what countries in asia have population bigger than india
RESPONSE: China. Hope this settles down your inquisitive mind and sore brain.
Примеры диалогов
Совершенствование чатбота● Добавление препроцессора
○ коррекция ошибок○ нахождение синонимов○ определение повторяемых фраз○ выделение предложений○ нормализация текста
● Добавление контроллера эмоций○ определение эмоций пользователя○ формирование эмоций чатбота
● Анализ диалогов○ определение тем, которые робот не знает○ определение тем, которые робот знает, но они не сработали○ определение мини-диалогов для исправления
Тестирование чатбота1. Простой тест
<TestSet>
<Input>
<Variable name="input_phrase">
Any hobbies worth talking about?
</Variable>
</Input>
<Output>
<Variable name="TEXT_MATCHER" value="AboutHobbies" />
</Output>
</TestSet>
2. Расширенный тест
<TestSet>
<Input>
<Variable name="input_phrase" >
Are you a girl or boy?
</Variable>
</Input>
<Output>
<Variable name="TEXT_MATCHER" value="Gender"/>
<Variable name="IS_REPEATED" value="No"/>
<Variable name="SPELLING" value="Correct"/>
</Output>
</TestSet>
Заключение1. Системы, основанные только на правилах, могут обеспечить
успешное общение на уровне мини-диалогов2. Для обеспечения необходимого качества диалога надо совместно
использовать базу мини-диалогов, контроллеры и препроцессинг3. Персонализация чатбота очень важна для успешной коммуникации4. Создание чатбота носит итерационный характер. Должен быть
непрерывный процесс добавления новых диалогов, автоматического тестирования базы знаний, анализа состоявшихся диалогов с пользователями и улучшения диалогов
5. Необходимо искать пути для снижения трудоемкости разработки чатботов. Один и возможных вариантов - разделение базы знаний на мини-диалоги и контроллеры диалога
Вопросы, ответы