Что потребуется
- Установленные на вашем компьютере NodeJS и NPM
- Знание Javascript
Цель
Создать чат-бота с системой NLP (Natural Language Processing). Мы будем использовать систему, встроенную в NewBot Framework, но мы увидим, как добавить свою собственную
Совместимость
Любые платформы, т.е.
- Facebook Messenger
- Google Assistant
- Amazon Alexa
- Slack
- Telegram
- Viber
- Skype
- etc.
и прямо в вашем браузере (офлайн)
Начнём новый проект
-
Установите NewBot CLI:
npm install -g newbot-cli
-
Создайте новый проект:
newbot new superbot
superbot — имя вашего файла
-
Перейдите к этому проекту:
cd superbot
-
Запустите локальный сервер:
newbot serve
-
откройте в браузере localhost:3000
Используем нативную систему
NewBot Framework использует модуль NLP.js. Поместите следующий код в файл .converse:
@Intent('booking', [
'I want book a room'
])
booking() {
> Ok, I book a room
}
Код очень прост:
@Intent()
— это декоратор, который определяет намерение. Первый параметр: имя намерения. Второй параметр: массив обучающих фраз.booking()
– это функция, представляющая диалог
Введите команду newbot serve
. Модель генерируется!
Извлечение сущностей
Можно восстановить уже существующие объекты. Например, число, дата, измерение и т.д.
@Intent('booking', [
'I want to book accommodation today',
'I get a room'
])
book() {
if (unknown :intent.date) {
> Start again by giving a date
return
}
> Ok, I take your order { :intent.date.value }
}
Для этого мы используем переменную с именем :intent
. Эта переменная, созданная средой, используемой после ситуации. Здесь, если пользователь ставит дату, то можно будет узнать ее с помощью :intent.date.value
Интеграция собственной системы NLP
Собственная система позволяет легко использовать NLP и систему классификации, не обладая особыми знаниями в области наук о данных. Кроме того, он позволяет вам легко создать чат-бота.
В собственной системе используется модуль «Microsoft.Recognizers.Text for JavaScript». Итак, вы интегрируете свою NLPсистему или стороннюю платформу, например DialogFlow или Wi.ai
Следуя приведенному ниже примеру, мы интегрируем платформу Wit.ai.
-
Создайте приложение:
-
Зайдите в настройки и восстановите Server Access Token
Кодинг NLP системы
Во-первых, надо установить модуль axios в нашем проекте для выполнения HTTP-запросов:
npm install axios
Затем, изменим файл main.js с помощью кода ниже:
import axios from 'axios'
import code from './main.converse'
const SERVER_ACCESS_TOKEN = ''
export default {
code,
nlp: {
async witAi(text) {
try {
const ret = await axios({
url: 'https://api.wit.ai/message?v=20200214&q=' + text,
headers: {
'Authorization': 'Bearer ' + SERVER_ACCESS_TOKEN
}
}).then(res => res.data)
const intentName = ret.entities.intent[0].value
return {
[intentName]() {
return true
}
}
}
catch (err) {
console.error(err)
}
}
}
}
Добавляем новое свойство с именем nlp
. Это часть системы NLP. Можно использовать регулярные выражения, а также асинхронную функцию для использования сторонней системы NLP. Это наш случай, здесь
-
Поместите токен, восстановленный на предыдущем шаге, в строку 4 здесь
-
С помощью
axios
делаем запрос для классификации текста на платформе wit.ai
Небольшое пояснение этих строк:
const intentName = ret.entities.intent[0].value
return {
[intentName]() {
return true
}
}
-
Получаем имя намерения, отправленного wit.ai. После создаем наше собственное намерение.
-
Отправляем список намерений, которые могут быть вызваны или не вызваны. Элемент объекта представлен ключом, являющимся именем намерения, его тип является функцией. Эта функция должна возвращать логическое значение, чтобы сказать, следует ли вызвать намерение в диалоговом сценарии.
Создаём намерение в wit.ai
-
Добавьте предложение и нажмите Add new entity.
-
Выберите намерение (intent) и создайте новое намерение
Назовём намерение greeting
Вернитесь в свой проект и измените файл main.converse
@Intent('greeting')
greeting() {
> Hello !
}
В декоратор @Intent
введите название намерения: greeting
.
Готово! Проверьте localhost:3000
(не забудьте запустить локальный сервер newbot serve
), чтобы протестировать вашу систему NLP
Замечание
NLP система будет работать только для текущего навыка. Если вы хотите использовать это в других навыках, вот два способа:
-
Поместите функцию
witAi
в другой файл и интегрируйте эту систему NLP в опциюnlp
каждого навыка. -
Или используйте свойство
propagateNlp
, чтобы система NLP работала со всеми дочерними навыками (здесь пример)
Далее
Соберите проект и запустите чат-бота на NodeJS или в браузере:
Building universal Chatbot with Natural Language Processing (in Javascript)