?

Log in

No account? Create an account

October 23rd, 2008

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

Рассмотрим следующий пример.
Собеседник интересуется возрастом бота и задает вопрос: Сколько тебе лет? Для ответа на этот вопрос мы используем следующую конструкцию:

<category>
   <pattern>СКОЛЬКО ТЕБЕ ЛЕТ</pattern>
   <template> Больше, чем ты думаешь! </template>
 </category>

Теперь если собеседник спросит: Сколько тебе лет? наш бот непринужденно ответит: Больше, чем ты думаешь!
Но что будет если собеседник решит показаться более общительным и начнет свой вопрос с многозначительного И, вот так:
И сколько тебе лет?
или, еще красноречивее:
Ну, и сколько тебе лет?

Для нашего AIML-бота такой вопрос станет проблемой и он не сможет на него ответить, т.к. паттерн определен точно для фразы "СКОЛЬКО ТЕБЕ ЛЕТ".
Выходом из данной ситуации может стать добавление конструкции:

<category>
   <pattern>_ СКОЛЬКО ТЕБЕ ЛЕТ</pattern>
   <template><srai>СКОЛЬКО ТЕБЕ ЛЕТ</srai></template>
 </category>

В этом случае, на любой вопрос, который заканчивается словами "СКОЛЬКО ТЕБЕ ЛЕТ", в том числе и "Ну, и сколько тебе лет?" бот будет исправно отвечать "Больше, чем ты думаешь!".
Казалось бы, на этом можно остановиться. Но проблема в том, что наши общительные собеседники слишком часто начинают свои реплики с многозначительного "Ну", "И", или, еще хуже "Ну и ...". Дополнять каждую конструкцию дополнительным паттерном для отсечения этих слов-паразитов слишком трудоемко. Поэтому гораздо проще сразу "обрезать" эти слова, как будто их просто не было:

<category>
   <pattern>НУ *</pattern>
   <template><sr/></template>
 </category>

<category>
   <pattern>И *</pattern>
   <template><sr/></template>
 </category>

<category>
   <pattern>СКОЛЬКО ТЕБЕ ЛЕТ</pattern>
   <template> Больше, чем ты думаешь! </template>
</category>


Теперь, даже если фраза собеседника начинается с "Ну", "И", "Ну и" бот не будет обращать на это внимания, сосредотачиваясь непосредственно на самой фразе.
Рассмотренный способ подходит и для обрезания имени бота. Предположим, нашего бота зовут Алиса. Многие собеседники предпочитают обращаться к боту по имени: Алиса, сколько тебе лет? или Алиса, как твои дела?. Для корректной обработки данных паттернов используем уже знакомую конструкцию:

<category>
   <pattern>АЛИСА *</pattern>
   <template><sr/></template>
 </category>

<category>
   <pattern>НУ *</pattern>
   <template><sr/></template>
 </category>

<category>
   <pattern>И *</pattern>
   <template><sr/></template>
 </category>

<category>
   <pattern>СКОЛЬКО ТЕБЕ ЛЕТ</pattern>
   <template> Больше, чем ты думаешь! </template>
</category>

<category>
   <pattern>КАК ДЕЛА</pattern>
   <template> Все ок! </template>
</category>