Универсальный чат-бот с NLP на Javascript

Универсальный чат-бот с NLP на Javascript

Что потребуется

  • Установленные на вашем компьютере NodeJS и NPM
  • Знание Javascript

Цель

Создать чат-бота с системой NLP (Natural Language Processing). Мы будем использовать систему, встроенную в NewBot Framework, но мы увидим, как добавить свою собственную

Совместимость

Любые платформы, т.е.

  • Facebook Messenger
  • Google Assistant
  • Amazon Alexa
  • Slack
  • Telegram
  • Viber
  • Skype
  • etc.

и прямо в вашем браузере (офлайн)

Начнём новый проект

  1. Установите NewBot CLI:

    npm install -g newbot-cli
  2. Создайте новый проект:

    newbot new superbot

    superbot — имя вашего файла

  3. Перейдите к этому проекту:

    cd superbot
  4. Запустите локальный сервер:

    newbot serve
  5. откройте в браузере 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.

  1. Создайте приложение:

  2. Зайдите в настройки и восстановите 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. Это наш случай, здесь

  1. Поместите токен, восстановленный на предыдущем шаге, в строку 4 здесь

  2. С помощью axios делаем запрос для классификации текста на платформе wit.ai

Небольшое пояснение этих строк:

const intentName = ret.entities.intent[0].value
return {
   [intentName]() {
     return true
   }
}
  1. Получаем имя намерения, отправленного wit.ai. После создаем наше собственное намерение.

  2. Отправляем список намерений, которые могут быть вызваны или не вызваны. Элемент объекта представлен ключом, являющимся именем намерения, его тип является функцией. Эта функция должна возвращать логическое значение, чтобы сказать, следует ли вызвать намерение в диалоговом сценарии.

Создаём намерение в wit.ai

  1. Добавьте предложение и нажмите Add new entity.

  2. Выберите намерение (intent) и создайте новое намерение

Назовём намерение greeting

Вернитесь в свой проект и измените файл main.converse

@Intent('greeting')
greeting() {
    > Hello !
}

В декоратор @Intent введите название намерения: greeting.

Готово! Проверьте localhost:3000 (не забудьте запустить локальный сервер newbot serve), чтобы протестировать вашу систему NLP

Демка »

Замечание

NLP система будет работать только для текущего навыка. Если вы хотите использовать это в других навыках, вот два способа:

  1. Поместите функцию witAi в другой файл и интегрируйте эту систему NLP в опцию nlp каждого навыка.

  2. Или используйте свойство propagateNlp, чтобы система NLP работала со всеми дочерними навыками (здесь пример)

Далее

Соберите проект и запустите чат-бота на NodeJS или в браузере:

Демка »