Перейти к основному содержимому

Подключение сервисов Caila в JAICP

Caila — платформа от Just AI, которая предоставляет каталог NLP-сервисов и инструменты для полного управления их жизненным циклом: разработки, тестирования, развертывания, мониторинга.

JAICP имеет встроенную интеграцию с Caila. Вы можете использовать сервисы из каталога Caila, а также собственные обученные сервисы для выполнения таких задач NLU, как:

Ознакомьтесь с документацией Caila и каталогом сервисов, чтобы узнать больше.

Токен доступа к Caila

Для использования сервисов Caila в сторонних приложениях, в том числе JAICP, нужен персональный токен доступа. Чтобы выпустить токен:

  1. Перейдите в Caila.

    подсказка

    Caila и Conversational Cloud использует общую базу аккаунтов, поэтому если вы зарегистрированы в Conversational Cloud, дополнительно регистрироваться в Caila не нужно.

  2. Перейдите на страницу Мое пространствоAPI-токены.

  3. В правом верхнем углу нажмите Создать токен.

  4. Придумайте имя токена, сгенерируйте его и скопируйте в буфер обмена.

Подключение классификатора из каталога Caila

Все проекты JAICP поддерживают понимание естественного языка (NLU), в том числе классификацию интентов для распознавания запросов пользователей.

По умолчанию проекты используют классификатор STS. В настройках проекта вы можете сменить алгоритм классификации на Classic ML, Deep Learning или Transformer.

к сведению

Все встроенные в JAICP классификаторы, кроме STS, уже работают на основе сервисов Caila:

Классификатор в JAICPСервис в Caila
Classic MLtext-classifier-logreg-bow
Deep Learningtext-classifier-cnn
Transformertext-classifier-logreg-caila-roberta — для проектов на русском языке
text-classifier-logreg-labse — для проектов на других языках

Поэтому эти сервисы из каталога Caila нецелесообразно подключать в JAICP по инструкции ниже.

Допустим, вы хотите использовать в проекте своего бота другой классификатор из каталога Caila, например text-classifier-knn-caila-roberta. Чтобы это сделать:

  1. В настройках проекта выберите классификатор Transformer.

  2. Перейдите в расширенные настройки NLU.

  3. По ключу mlp укажите следующее значение:

    {
    // ...
    "mlp": {
    "restUrl": "https://caila.io/",
    "mlpAccessKey": "<токен-доступа>",
    "trainingModel": {
    "account": "just-ai",
    "model": "text-classifier-knn-rubert-light"
    }
    }
    }

    Здесь:

    • mlpAccessKey — токен доступа к Caila.
    • trainingModel — параметры сервиса: ID аккаунта его владельца и ID самого сервиса.
    подсказка
    Подробнее обо всех настройках читайте в статье Расширенные настройки NLU.
  4. В правом нижнем углу раздела NLU нажмите Тестировать, чтобы запустить обучение классификатора.

Теперь тестовый виджет NLU будет выдавать интенты, распознанные внешним классификатором.

к сведению

При первом обучении в Caila будет автоматически создан датасет под названием jaicp-classifier-for-<id-проекта>, а также сервис классификации с таким же именем, обученный на этом датасете.

Когда вы в дальнейшем будете запускать переобучение, датасет будет формироваться заново с новым наполнением интентов из JAICP, а сервис в Caila будет переобучаться на этом новом датасете.

Подключение обученного классификатора

Теперь рассмотрим другой сценарий:

  1. Вы обучили различные сервисы классификации из Caila на своем датасете.
  2. Вы сравнили качество этих сервисов через сервис кросс-валидации.
  3. Вы установили, что классификатор my-little-wizard показывает наилучшие результаты.

Чтобы использовать этот обученный классификатор в проекте бота:

  • В расширенных настройках используйте derivedModel вместо trainedModel.
  • В account вместо "just-ai" укажите ID своего аккаунта со страницы Настройки аккаунта.
  • В model используйте название или ID сервиса из вашего пространства.
{
// ...
"mlp": {
"restUrl": "https://caila.io/",
"mlpAccessKey": "<токен-доступа>",
"derivedModel": {
"account": "1000005",
"model": "my-little-wizard"
}
}
}

Подключение сервиса распознавания сущностей

Для распознавания сущностей JAICP поддерживает ряд системных сущностей, например на базе Duckling, а также возможность создавать пользовательские сущности через справочники синонимов и паттернов.

Рассмотрим случай, когда вы хотите использовать в проекте своего бота другой сервис распознавания сущностей из каталога Caila, например ner-deeppavlov. Чтобы это сделать:

  1. Перейдите в расширенные настройки NLU.

  2. Замените значения, которые соответствуют ключам mlp и externalNluSettings:

    {
    // ...
    "mlp": {
    "nerModels": [
    {
    "account": "just-ai",
    "model": "ner-deeppavlov",
    "config": {}
    }
    ],
    },
    "externalNluSettings": {
    "nluProviderSettings": {
    "markup": {
    "nluType": "internal",
    "url": null
    },
    "ner": {
    "nluType": "mlp",
    "url": null
    },
    "classification": {
    "nluType": "internal",
    "url": null
    }
    }
    }
    }

    Здесь:

    • nerModels — список используемых сервисов для распознавания именованных сущностей.
    • externalNluSettings.nluProviderSettings.ner.nluType должен иметь значение "mlp".
  3. В правом нижнем углу раздела NLU нажмите Тестировать, чтобы запустить обучение классификатора.

Теперь тестовый виджет NLU будет выдавать сущности, распознанные внешним сервисом.

предупреждение
Пользовательские и системные сущности, настроенные в проекте через интерфейс NLU, больше работать не будут.

Использование внешних сущностей в сценарии

В JAICP к сущностям из внешних сервисов можно обращаться по имени @<source_type>_<entity_type>. Значения source_type и entity_type можно узнать путем тестирования сервиса на его странице в Caila.

Пример

Сервис ner-deeppavlov на запрос «Москва» возвращает результат:

{
"entities_list": [
{
"entities": [
{
"value": "Москва",
"entity_type": "TOPONYM",
"span": {
"start_index": 0,
"end_index": 6
},
"entity": "Москва",
"source_type": "DEEPPAVLOV"
}
]
}
]
}

Значит, в JAICP сущность для распознавания городов будет называться @DEEPPAVLOV_TOPONYM.

Как и обычные сущности JAICP, внешние сущности можно использовать:

  • В тренировочных фразах интентов.

  • В самом коде сценария через паттерны.

    state: City
    q!: * @DEEPPAVLOV_TOPONYM::city *
    a: Во фразе есть город {{$parseTree._city}}.