Artificial Intelligence Markup Language |
AIML (Artificial Intelligence Markup Language) — язык разметки для искусственного интеллекта. AIML — диалект XML для создания виртуальных собеседников. Файл AIML — содержит набор категорий (category). Категория открывается тегом <category> и закрывается тегом </category>. Каждому тегу открытия должен соответствовать тег закрытия. Категория(category) включает паттерны (pattern, обращения) и темплейты (template, ответные реплики). Паттерн пишется ЗАГЛАВНЫМИ буквами. Для определения произвольного слова или группы слов используется знак * Примеры паттернов:
Паттерн 1 подойдет только для входящей реплики содержащей единственное слово «Привет» — и ни для какой другой.
Паттерн 2 подойдет только для входящей реплики, начинающейся со слова
«Привет» и содержащей еще какие-нибудь слова после слова «Привет», например,
«Привет Бот!». Паттерн 4 подойдет только для входящей реплики, начинающейся с 1 или нескольких слов, за которым следует слово «Привет», например, «Бот, привет!». Темплейт может включать одну реплику, например:
Или несколько реплик. В этом случае необходимо использовать дополнительный тег <random>. Пример:
В этом случае в качестве ответной реплики будет произвольно выбрана одна из реплик, находящаяся между тегами <li> </li>. Рандом можно комбинировать с обычной репликой. Например:
В этом случае бот ответит «Добрый день! Как дела?» или «Здравствуйте Как
дела?» или «Приветик… Как дела?»
|
Простые примеры
Самый простой пример:
Бот сможет отвечать на слово "Привет" (независимо от регистра), произвольно выбирая в качестве варианта ответа либо "приветик ...", либо "Здравствуйте!". На реплику "Привет, бот!" наш бот уже не ответит, так как в нашем примере паттерн определен только для слова "Привет". Для того, чтобы бот реагировал на любую реплику, которая начинается со слова "Привет", дополним наш пример следующей конструкцией:
Вторая категория (<pattern>ПРИВЕТ *</pattern>) соответствует любой строке, которая начинается со слова "привет" и отправляет бота к категории "ПРИВЕТ" с помощью конструкции <srai>ПРИВЕТ</srai>. Таким образом, теперь, на реплику "Привет, бот!" наш бот ответит либо "приветик ...", либо "Здравствуйте!". |
Обрезаем слова - паразиты
Разговорная речь, как правило, содержит некоторое количество т.н. слов-паразитов, которые человеческий мозг воспринимает без проблем, в то время как для мозга бота, написанного на AIML, такие слова могут стать серьезной проблемой. Рассмотрим следующий пример. Собеседник интересуется возрастом бота и задает вопрос: Сколько тебе лет? Для ответа на этот вопрос мы используем следующую конструкцию:
Теперь если собеседник спросит: Сколько тебе лет? наш бот непринужденно ответит:
Больше, чем ты думаешь!
Для нашего AIML-бота такой вопрос станет проблемой и он не сможет на него
ответить, т.к. паттерн определен точно для фразы "СКОЛЬКО ТЕБЕ ЛЕТ".
В этом случае, на любой вопрос, который заканчивается словами "СКОЛЬКО ТЕБЕ
ЛЕТ", в том числе и "Ну, и сколько тебе лет?" бот будет исправно отвечать
"Больше, чем ты думаешь!".
Теперь, даже если фраза собеседника начинается с "Ну", "И", "Ну и" бот не будет
обращать на это внимания, сосредотачиваясь непосредственно на самой фразе.
|
Особенности русского языка
В английском языке
фиксированный порядок слов, сначала подлежащее, потом сказумемое и т.д.
Сказать эту фразу по-другому никому в голову не придет.
Даже если попробуешь прописать все варианты - то русский язык он
слишком могуч и непредсказуем - русский человек обязательно
способ сказать то же самое, только немножко по-другому. В AIML средства, позволяющие обрабатывать такие конструкции, очень неудобны и делать бота на этом языке трудоемко и сложно. |
Игорь Ашманов про AIML
Игорь Ашманов: «Речь и текст станут основным каналом общения с компьютерами и бытовыми устройствами» 29 Июля 2013
В 2001 году был довольно популярен «Элис» (A.L.I.C.E.), созданный американским профессором Ричардом Уоллесом (и названный, очевидно, в честь Элизы Вейценбаума). A.L.I.C.E. была open-source-проектом и написана на специальном диалекте XML – языке диалогов AIML (Artificial Intelligence Markup Language). Поскольку A.L.I.C.E. находился в открытом доступе, я попросил ребят-лингвистов из своей команды попытаться построить своих виртуальных собеседников на нём. Мы не стали использовать программное обеспечение «Алисы», разработали наскоро своё. Кроме того, нам крайне не понравился язык AIML, потому что он был неочевиден, сложен, перегружен синтаксисом тегов XML и служил источником трудностей для лингвистов и генератором трудноуловимых ошибок. Мы сделали некий свой более простой и прозрачный диалект с трансляцией в AIML, а потом просто придумали новый язык диалогов без наследия XML и AIML. В итоге меньше чем за два месяца наши разработчики сделали несколько виртуальных собеседников – в том числе малообразованную, но активную девушку лет 16, которая могла бойко поддерживать разговор, в основном на темы в рамках повседневного общения. Эффект «очеловечивания» программы сработал и здесь – люди легко принимали правила игры и общались с нашей героиней, как с живой.
У "инфов" Наносемантики Игоря Ашманова (http://help.iii.ru/) есть язык шаблонов. Знак ~ обозначает любое окончание или начало слова, * любое слово, {///} словарь синонимов, а <////> наличие или отсутствие слов.
Все варианты с мамой и рамой можно так же записать парой
шаблонов:
|