ЧатСкрипт
ChatScript представляет собой комбинацию механизма естественного языка и системы управления диалогами , изначально разработанную для создания чат-ботов , но в настоящее время также используется для различных форм обработки NL . Он написан на С++ . Движок представляет собой проект с открытым исходным кодом на SourceForge . [1] и ГитХаб . [2]
ChatScript был написан Брюсом Уилкоксом и первоначально выпущен в 2011 году, после того как Сюзетт (написанная на ChatScript) выиграла премию Лебнера 2010 года , обманув одного из четырех судей-людей. [3]
Функции
[ редактировать ]В целом ChatScript стремится к предельно лаконичному написанию, поскольку ограничивающая масштабируемость чат-ботов, созданных вручную, заключается в том, насколько быстро/быстро можно написать сценарий.
Поскольку ChatScript предназначен для интерактивного общения, он автоматически сохраняет состояние пользователя во время залпов. Залп — это любое количество предложений, которые пользователь вводит одновременно, и ответ чат-бота.
Основным элементом сценария является правило. Правило состоит из типа, метки (необязательно), шаблона и вывода. Существует три типа правил. Гамбиты — это то, что может сказать чат-бот, когда он контролирует разговор. Ответы — это правила, которые отвечают на замечание пользователя, связанное с тем, что только что сказал чат-бот. Ответчики — это правила, которые реагируют на произвольный ввод пользователя, который не обязательно связан с тем, что только что сказал чат-бот. Шаблоны описывают условия, при которых правило может сработать. Шаблоны варьируются от чрезвычайно упрощенных до очень сложных (аналог Regex, но предназначенных для NL). Обычно интенсивно используются наборы понятий, которые представляют собой списки слов, имеющих общее значение. ChatScript содержит около 2000 предопределенных концепций, и авторы сценариев могут легко написать свои собственные. В выводе правила смешиваются буквальные слова, которые должны быть отправлены пользователю, вместе с общим программным кодом в стиле C.
Правила объединены в коллекции, называемые темами. Темы могут иметь ключевые слова, что позволяет системе автоматически искать в теме соответствующие правила на основе введенных пользователем данных.
Пример кода
[ редактировать ]Topic: ~food( ~fruit fruit food eat)
t: What is your favorite food?
a: (~fruit) I like fruit also.
a: (~metal) I prefer listening to heavy metal music rather than eating it.
?: WHATMUSIC ( << what music you ~like >>) I prefer rock music.
s: ( I * ~like * _~music_types) ^if (_0 == country) {I don't like country.} else {So do I.}
Слова, начинающиеся с ~, представляют собой наборы понятий. Например, ~fruit — это список всех известных фруктов. Простой шаблон (~фрукты) реагирует, если какой-либо фрукт упоминается сразу после того, как чат-бот спрашивает любимую еду. Немного более сложный шаблон правила, обозначенного как «ЧТО МУЗЫКА», требует наличия всех слов «что», «музыка», «ты» и любого слова или фразы, означающих «нравиться», но они могут встречаться в любом порядке. Респонденты бывают трех типов. ?: правила реагируют на вопросы пользователей. s: правила реагируют на высказывания пользователя. ты: правила реагируют и на то, и на другое.
Код ChatScript поддерживает стандартные if-else, циклы, определяемые пользователем функции и вызовы, а также назначение переменных и доступ к ним.
Данные
[ редактировать ]Некоторые данные в ChatScript являются временными, то есть исчезнут в конце текущего залпа. Другие данные являются постоянными и сохраняются до тех пор, пока они не будут явно удалены. Данные могут быть локальными для одного пользователя или общими для всех пользователей на уровне бота.
Внутри все данные представлены в виде текста и при необходимости автоматически преобразуются в числовую форму.
Переменные
[ редактировать ]Пользовательские переменные бывают нескольких видов. Переменные, локальные для темы или функции, являются временными. Глобальные переменные могут быть объявлены как временные или постоянные. Переменная обычно объявляется просто путем ее использования, а ее тип зависит от ее префикса ($, $$, $_).
$_local = 1 is a local transient variable being assigned a 1
$$global1.value = “hi” is a transient global variable which is a JSON object
$global2 += 20 is a permanent global variable
Факты
[ редактировать ]Помимо переменных, ChatScript поддерживает факты – тройки данных, которые также могут быть временными или постоянными. Функции могут запрашивать факты, имеющие определенные значения некоторых полей, что делает их похожими на базу данных в памяти. Извлечение фактов происходит очень быстро и эффективно: количество доступных фактов в памяти в значительной степени ограничено доступной памятью машины, на которой работает механизм ChatScript. Факты могут представлять структуры записей и являются тем, как ChatScript представляет JSON внутри себя. Таблицы информации могут быть определены для создания соответствующих фактов.
table: ~inventors(^who ^what)
createfact(^who invent ^what)
DATA:
"Johannes Gutenberg" "printing press"
"Albert Einstein" ["Theory of Relativity" photon "Theory of General Relativity"]
В приведенной выше таблице люди связаны с тем, что они изобрели (по одному в строке), а Эйнштейн получил список того, что он сделал.
Внешняя связь
[ редактировать ]ChatScript включает библиотеку Curl и может напрямую читать и записывать факты в формате JSON на веб-сайт.
Сервер
[ редактировать ]Механизм ChatScript может работать в локальном или серверном режиме.
Пост-теги, синтаксический анализ и онтология
[ редактировать ]копией английского WordNet ChatScript поставляется со встроенной , включая его онтологию , и создает и расширяет свою собственную онтологию посредством деклараций концепций. Он имеет pos-теггер и синтаксический анализатор на английском языке и поддерживает интеграцию с TreeTagger для пост-тегирования на ряде других языков (требуется коммерческая лицензия TreeTagger).
Базы данных
[ редактировать ]В дополнение к внутренней базе данных фактов ChatScript поддерживает PostgreSQL , MySQL , MSSQL и MongoDB как для доступа через сценарии, так и в качестве центральной файловой системы, если это необходимо, поэтому ChatScript можно масштабировать по горизонтали. Распространенным вариантом использования является использование централизованной базы данных для размещения пользовательских файлов и нескольких серверов для масштабирования механизма ChatScript.
JavaScript
[ редактировать ]ChatScript также включает DukTape, совместимость с ECMAScript E5/E5.1, с некоторой обновленной семантикой по сравнению с ES2015+.
Исправление орфографии
[ редактировать ]ChatScript имеет встроенную автоматическую проверку орфографии, которую можно дополнить в сценарии как простой заменой слов, так и контекстно-зависимыми изменениями. С помощью соответствующих простых правил вы можете заменить совершенные юридические слова другими словами или удалить их. Например, если у вас есть концепция ~electronic_goods и вы не хотите, чтобы ввод Radio Shack (название магазина) определялся как электронный товар, вы можете изменить ввод на Radio_Shack (одно слово) или разрешить слова останутся, но блокируют обнаружение концепции.
Это особенно полезно в сочетании с несовершенным кодом преобразования речи в текст, но вы знакомы с его типичными недостатками и можете компенсировать их в сценарии.
Поток управления
[ редактировать ]Поток управления чат-ботом управляется сценарием управления. Это просто еще одна обычная тема правил, которая вызывает API-функции движка. Таким образом, управление полностью настраивается сценаристом (и существуют функции, позволяющие осуществлять самоанализ движка). Для специальной обработки доступны варианты потока управления предварительной обработкой и потока управления постобработки.
Ссылки
[ редактировать ]- ^ Чатскрипт , SourceForge
- ^ [1] , GitHub
- ↑ Отмеченный призами чат-бот управляет беседой , New Scientist , 27 октября 2010 г.
Внешние ссылки
[ редактировать ]- Кроссплатформенное бесплатное программное обеспечение
- Кроссплатформенное программное обеспечение
- Бесплатные компиляторы и интерпретаторы
- Бесплатное программное обеспечение, написанное на C.
- Языки сценариев
- Синтаксический анализ естественного языка
- Обработка естественного языка
- Наборы инструментов для обработки естественного языка
- Бесплатные приложения искусственного интеллекта