WikiDer > ChatScript
ChatScript это комбинация Естественный язык двигатель и система управления диалогами изначально предназначен для создания чат-боты, но в настоящее время также используется для различных форм обработки NL. Это написано в C ++. Движок - это проект с открытым исходным кодом на SourceForge.[1] и GitHub.[2]
ChatScript был написан Брюс Уилкокс и первоначально выпущен в 2011 году, после того как Сюзетт (написанная на ChatScript) выиграла в 2010 году Премия Лебнера, обманывая одного из четырех человеческих судей.[3]
Функции
В целом ChatScript стремится к тому, чтобы автор был предельно лаконичным, поскольку ограничивающая масштабируемость чат-ботов, созданных вручную, зависит от того, насколько быстро можно написать сценарий.
Поскольку ChatScript разработан для интерактивного общения, он автоматически поддерживает состояние пользователя при нескольких залпах. Залп - это любое количество предложений, которые пользователь вводит одновременно, и ответ чат-бота.
Основным элементом сценария является правило. Правило состоит из типа, метки (необязательно), шаблона и вывода. Есть три типа правил. Гамбиты - это то, что может сказать чат-бот, когда он контролирует беседу. Реплики - это правила, которые отвечают на замечание пользователя, связанное с тем, что только что сказал чат-бот. Респонденты - это правила, которые реагируют на произвольный ввод пользователя, который не обязательно привязан к тому, что только что сказал чат-бот. Шаблоны описывают условия, при которых правило может сработать. Шаблоны варьируются от чрезвычайно упрощенных до очень сложных (аналогичных Regex, но нацеленных на NL). Обычно широко используются концептуальные наборы, которые представляют собой списки слов, имеющих общее значение. ChatScript содержит около 2000 предопределенных концепций, и разработчики сценариев могут легко написать свои собственные. Выходные данные правила смешивают буквальные слова, которые должны быть отправлены пользователю вместе с обычным программным кодом в стиле C.
Правила объединены в коллекции, называемые темами. Темы могут иметь ключевые слова, что позволяет механизму автоматически искать в теме соответствующие правила на основе ввода данных пользователем.
Пример кода
Тема: ~ еда (~ фрукты, фрукты, еда, еда) t: Какая ваша любимая еда? a: (~ фрукты) Я тоже люблю фрукты. a: (~ металл) Я предпочитаю слушать хэви-метал, а не есть его.?: WHATMUSIC (<< какую музыку ты ~ любишь >>) Я предпочитаю рок музыку. s: (Мне * ~ нравится * _ ~ music_types) ^ if (_0 == country) {Мне не нравится страна.} else {Я тоже.}
Слова, начинающиеся с ~, являются концептуальными наборами. Например, ~ фрукт - это список всех известных фруктов. Простой шаблон (~ фрукт) реагирует, если какой-либо фрукт упоминается сразу после того, как чат-бот запрашивает любимую еду. Немного более сложный шаблон для правила WHATMUSIC требует наличия всех слов, что, музыка, вы, а также любых слов или фраз, которые имеют значение, чтобы понравиться, но они могут встречаться в любом порядке. Респонденты бывают трех типов. ?: правила реагируют на вопросы пользователей. s: правила реагируют на утверждения пользователя. u: правила реагируют на любой из них.
Код ChatScript поддерживает стандартные if-else, циклы, пользовательские функции и вызовы, а также присвоение переменных и доступ.
Данные
Некоторые данные в ChatScript являются временными, то есть они исчезнут в конце текущего залпа. Остальные данные являются постоянными, хранятся вечно, пока явно не будут удалены. Данные могут быть локальными для одного пользователя или совместно использоваться всеми пользователями на уровне бота.
Внутри все данные представлены в виде текста и при необходимости автоматически преобразуются в числовую форму.
Переменные
Пользовательские переменные бывают нескольких видов. Переменные, локальные для темы или функции, временны. Глобальные переменные могут быть объявлены как временные или постоянные. Обычно переменная объявляется просто с ее помощью, а ее тип зависит от префикса ($, $$, $ _).
$ _local = 1 - это временная локальная переменная, которой присвоено значение 1 $$ global1.value = «hi» - временная глобальная переменная, которая является объектом JSON. $ global2 + = 20 - постоянная глобальная переменная.
Факты
Помимо переменных, ChatScript поддерживает факты - тройки данных, которые также могут быть временными или постоянными. Функции могут запрашивать факты, имеющие определенные значения некоторых полей, заставляя их действовать как база данных в памяти. Извлечение фактов происходит очень быстро и эффективно, количество доступных фактов в памяти в значительной степени ограничено доступной памятью машины, на которой работает движок ChatScript. Факты могут представлять собой структуры записей, и именно так ChatScript представляет JSON внутри. Таблицы информации могут быть определены для создания соответствующих фактов.
таблица: ~ изобретатели (^ кто ^ что) createfact (^ кто изобрел ^ что) ДАННЫЕ: «Иоганнес Гутенберг» «печатный станок» «Альберт Эйнштейн» [«Теория относительности» фотон «Общая теория относительности»]
Приведенная выше таблица связывает людей с тем, что они изобрели (по одному в строке), а Эйнштейн получает список того, что он сделал.
Внешнее общение
ChatScript включает в себя библиотеку Curl и может напрямую читать и записывать факты в JSON на веб-сайт.
Сервер
Механизм ChatScript может работать в локальном или серверном режиме.
Pos-теги, парсинг и онтология
ChatScript поставляется с копией английского WordNet встроены в, в том числе онтология, и создает и расширяет свою собственную онтологию с помощью объявлений концептов. Он имеет англоязычный pos-tagger и parser и поддерживает интеграцию с TreeTagger для pos-тегирования ряда других языков (требуется коммерческая лицензия TreeTagger).
Базы данных
В дополнение к внутренней базе данных, ChatScript поддерживает PostgreSQL и MongoDB как для доступа с помощью сценариев, так и при желании в качестве центральной файловой системы, чтобы ChatScript можно было масштабировать по горизонтали. Типичным вариантом использования является использование централизованной базы данных для размещения пользовательских файлов и нескольких серверов для запуска движка ChatScript.
JavaScript
ChatScript также включает DukTape, совместимость с ECMAScript E5 / E5.1, с некоторой семантикой, обновленной с ES2015 +.
Поток управления
Поток управления чат-бота управляется сценарием управления. Это просто еще одна обычная тема правил, которая вызывает API-функции движка. Таким образом, управление полностью настраивается сценарием (и существуют функции, позволяющие осуществлять самоанализ в движке). Для специальной обработки доступны параметры потока управления предварительной обработки и потока управления постобработкой.
Рекомендации
- ^ ChatScript, SourceForge
- ^ [1], GitHub
- ^ Чат-бот, отмеченный наградами, ведет беседу, Новый ученый, 27 октября 2010 г.