Подключение сервисов Caila в JAICP
Caila — платформа от Just AI, которая предоставляет каталог NLP-сервисов и инструменты для полного управления их жизненным циклом: разработки, тестирования, развертывания, мониторинга.
JAICP имеет встроенную интеграцию с Caila. Вы можете использовать сервисы из каталога Caila, а также собственные обученные сервисы для выполнения таких задач NLU, как:
Ознакомьтесь с документацией Caila и каталогом сервисов, чтобы узнать больше.
Токен доступа к Caila
Для использования сервисов Caila в сторонних приложениях, в том числе JAICP, нужен персональный токен доступа. Чтобы выпустить токен:
-
Перейдите в Caila.
подсказкаCaila и Conversational Cloud использует общую базу аккаунтов, поэтому если вы зарегистрированы в Conversational Cloud, дополнительно регистрироваться в Caila не нужно.
-
Перейдите на страницу Мое пространство → API-токены.
-
В правом верхнем углу нажмите Создать токен.
-
Придумайте имя токена, сгенерируйте его и скопируйте в буфер обмена.
Подключение классификатора из каталога Caila
Все проекты JAICP поддерживают понимание естественного языка (NLU), в том числе классификацию интентов для распознавания запросов пользователей.
По умолчанию проекты используют классификатор STS. В настройках проекта вы можете сменить алгоритм классификации на Classic ML, Deep Learning или Transformer.
Все встроенные в JAICP классификаторы, кроме STS, уже работают на основе сервисов Caila:
Классификатор в JAICP | Сервис в Caila |
---|---|
Classic ML | text-classifier-logreg-bow |
Deep Learning | text-classifier-cnn |
Transformer | text-classifier-logreg-caila-roberta — для проектов на русском языке text-classifier-logreg-labse — для проектов на других языках |
Поэтому эти сервисы из каталога Caila нецелесообразно подключать в JAICP по инструкции ниже.
Допустим, вы хотите использовать в проекте своего бота другой классификатор из каталога Caila, например text-classifier-knn-caila-roberta. Чтобы это сделать:
-
В настройках проекта выберите классификатор Transformer.
-
Перейдите в расширенные настройки NLU.
-
По ключу
mlp
укажите следующее значение:{
// ...
"mlp": {
"restUrl": "https://caila.io/",
"mlpAccessKey": "<токен-доступа>",
"trainingModel": {
"account": "just-ai",
"model": "text-classifier-knn-rubert-light"
}
}
}Здесь:
mlpAccessKey
— токен доступа к Caila.trainingModel
— параметры сервиса: ID аккаунта его владельца и ID самого сервиса.
подсказкаПодробнее обо всех настройках читайте в статье Расширенные настройки NLU. -
В правом нижнем углу раздела NLU нажмите Тестировать, чтобы запустить обучение классификатора.
Теперь тестовый виджет NLU будет выдавать интенты, распознанные внешним классификатором.
При первом обучении в Caila будет автоматически создан датасет под названием jaicp-classifier-for-<id-проекта>
,
а также сервис классификации с таким же именем, обученный на этом датасете.
Когда вы в дальнейшем будете запускать переобучение, датасет будет формироваться заново с новым наполнением интентов из JAICP, а сервис в Caila будет переобучаться на этом новом датасете.
Подключение обученного классификатора
Теперь рассмотрим другой сценарий:
- Вы обучили различные сервисы классификации из Caila на своем датасете.
- Вы сравнили качество этих сервисов через сервис кросс-валидации.
- Вы установили, что классификатор
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. Чтобы это сделать:
-
Перейдите в расширенные настройки NLU.
-
Замените значения, которые соответствуют ключам
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"
.
-
В правом нижнем углу раздела 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}}.