Расширенные настройки NLU
При создании и редактировании проекта вы можете задать новые параметры для настройки NLU. Параметры передаются в виде JSON-объекта в текстовом представлении.
Важно указывать параметры, которые соответствуют алгоритму классификатора в проекте.
Общие настройки
К общим настройкам относятся параметры, не зависящие от алгоритма классификатора в проекте:
{
"patternsEnabled": true,
"tokenizerEngine": "udpipe",
"dictionaryAutogeneration": true
}
Параметры:
patternsEnabled
— при активном параметре в тренировочных фразах доступно использование паттернов.tokenizerEngine
— токенизатор, который будет выполнять токенизацию и лемматизацию текста.dictionaryAutogeneration
— при активном параметре осуществляется заполнение пользовательского словаря согласно содержимому сущностей.
tokenizerEngine
Для разных языков NLU доступны разные движки токенизации.
Язык NLU | Токенизаторы | Примечания |
---|---|---|
Русский | udpipe mystem morphsrus |
Токенизаторы mystem и morphsrus предназначены для миграции проектов на CAILA. |
Китайский | pinyin |
|
Португальский | udpipe |
|
Казахский | kaznlp |
Для всех языков, не перечисленных в таблице, доступен токенизатор spacy
.
STS
Параметры для STS классификатора:
{
"patternsEnabled": true,
"namedEntitiesRequired": true,
"tokenizerEngine": "udpipe",
"allowedPatterns": [],
"stsSettings": {
"exactMatch": 1.0,
"lemmaMatch": 0.95,
"jaccardMatch": 0.5,
"jaccardMatchThreshold": 0.82,
"acronymMatch": 1.0,
"synonymMatch": 0,
"synonymContextWeight": 0.0,
"patternMatch": 1,
"throughPatternMatch": 0,
"wordSequence1": 0.8,
"wordSequence2": 0.9,
"wordSequence3": 1.0,
"intermediateAlternativesLimit": 5,
"finalAlternativesLimit": 5,
"idfShift": 0.0,
"idfMultiplier": 1.0,
"namedEntitiesRequired": true
}
}
Параметры
allowedPatterns
— список сущностей, для которых включен параметр Автоматически расширять интенты.exactMatch
— вес точного совпадения слов в предложениях.lemmaMatch
— вес совпадения слов по леммам.jaccardMatchThreshold
— вес посимвольного сравнения слов мерой Жаккара.acronymMatch
— вес сравнения слов как акронимов.synonymMatch
— вес для синонимов.synonymContextWeight
— вес, с которым применяется при ранжировании значениеweight
из справочника синонимов.patternMatch
— вес соответствия по паттернам.throughPatternMatch
— вес соответствия по найденным сущностям в примере и входном тексте.wordSequence1
— вес схожих последовательностей длины 1.wordSequence2
— вес схожих последовательностей длины 2.wordSequence3
— вес схожих последовательностей длины больше 2.intermediateAlternativesLimit
— порог отсечения промежуточных альтернатив, которые обрабатывает алгоритм.finalAlternativesLimit
— порог количества финальных результатов, по достижению которого алгоритм завершается.namedEntitiesRequired
— при активном параметре для попадания в интент во фразе должна быть найдена системная сущность.
namedEntitiesRequired
Подробнее рассмотрим параметр "namedEntitiesRequired": true
. Если в интент была добавлена фраза с системной сущностью, например:
Мне нужно @duckling.number яблок
То при запросе клиента Мне нужно яблок
— фраза не попадет в интент, так как системная сущность не была найдена.
Переопределите параметр namedEntitiesRequired
в расширенных настройках NLU, чтобы фразы без системных сущностей активировали интент.
Deep Learning
Параметры для Deep Learning классификатора:
{
"patternsEnabled": true,
"tokenizerEngine": "udpipe",
"cnnSettings": {
"lang": "ru",
"kernel_sizes": [
1,
2
],
"n_filters": 1024,
"emb_drp": 0.25,
"cnn_drp": 0.25,
"bs": 64,
"n_epochs": 15,
"lr": 0.001,
"pooling_name": "max"
}
}
Параметры
-
kernel_sizes
— список размеров свёрточных ядер. Свёрточное ядро — размер контекстного окна, на которое классификатор будет обращать внимание. Например,"kernel_sizes": [3]
означает, что модель будет находить признаки в тексте, основываясь на всех тройках соседних слов. Для одной модели может быть задано несколько свёрточных ядер. -
n_filters
— количество фильтров. Один фильтр — это определенный паттерн, выученный моделью. Для каждого ядра модель имеет свой набор паттернов. Например, если мы указали"kernel_sizes": [2,3]
и"n_filters": 512
, то всего фильтров будет1024
(на каждое ядро по512
). -
emb_drp
— вероятность дроп-аута на эмбеддинг слое. Дроп-аут — механизм, который искусственно отключает в сети часть весов в процессе тренировки. Дроп-аут помогает сети не переобучиться, то есть не просто запомнить весь набор данных, а обобщить информацию.emb_drp
принимает значение от 0 до 1. -
сnn_drp
— вероятность дроп-аута на свёрточных слоях сети. -
bs
— размер входного батча для тренировок. Это значение определяет какое количество тренировочных примеров будет подаваться на вход сети за один шаг в процессе тренировок. Если датасет составляет менее 3000 примеров, рекомендуемое значение 16-32. Для датасетов больших размеров это значение может составить 32-128. -
n_epochs
— количество эпох обучения, сколько раз модель увидит все тренировочные данные. -
lr
— learning rate. Множитель, с которым модель будет обновлять свои веса в процессе тренировки. -
pooling_name
— стратегия агрегации. После нахождения паттернов во входной строке модель должна их агрегировать (перед финальным классификационным слоем). Стратегии агрегации:max
,mean
,concat
.
Общие рекомендации
Параметры для Deep Learning классификатора при размере датасета:
- более 100 тысяч примеров
"kernel_sizes": [
2,
3,
4
],
"n_filters": 1024-2048,
"emb_drp": 0.3-0.4,
"cnn_drp": 0.3-0.4,
"bs": 64-128,
"n_epochs": 3,
"lr": 0.001,
"pooling_name": "max, concat"
- 30-100 тысяч примеров
"kernel_sizes": [
2,
3,
4
],
"n_filters": 1024-2048,
"emb_drp": 0.3-0.4,
"cnn_drp": 0.3-0.4,
"bs": 32-128,
"n_epochs": 3,
"lr": 0.001,
"pooling_name": "max, concat"
- 10-30 тысяч примеров
"kernel_sizes": [
2,
3,
4 // или [2,3]
],
"n_filters": 1024,
"emb_drp": 0.3-0.5,
"cnn_drp": 0.3-0.5,
"bs": 32-64,
"n_epochs": 3-5,
"lr": 0.001,
"pooling_name": "max"
- 3-10 тысяч примеров
"kernel_sizes": [
2,
3,
4 // или [2,3]
],
"n_filters": 1024,
"emb_drp": 0.4-0.5,
"cnn_drp": 0.4-0.5,
"bs": 32,
"n_epochs": 4-7,
"lr": 0.001,
"pooling_name": "max"
- 1-3 тысячи примеров
"kernel_sizes": [
2,
3
],
"n_filters": 512,
"emb_drp": 0.5,
"cnn_drp": 0.5,
"bs": 16-32,
"n_epochs": 7-15,
"lr": 0.001,
"pooling_name": "max"
Classic ML
{
"patternsEnabled": true,
"tokenizerEngine": "udpipe",
"classicMLSettings": {
"C": 1,
"lang": "ru",
"word_ngrams": [
1,
2
],
"lemma_ngrams": [
0
],
"stemma_ngrams": [
1,
2
],
"char_ngrams": [
3,
4
],
"lower": true
}
}
Параметры
-
С
— коэффициент регуляризации, с помощью которого можно контролировать переобучение модели. Используется для контроля за большими значениями коэффициентов целевой функции, штрафует их на величину параметра. Принимает значения в диапазоне:[0.01, 0.1, 1, 10]
. -
word_ngrams
— количество слов, которые будут объединены в словосочетания. Например, при значении"word_ngrams": [2, 3]
будут использованы словосочетания из двух и трех слов.
Например для фразы я люблю зеленые яблоки
будут составлены словосочетания:
[
"я люблю",
"люблю зеленые",
"зеленые яблоки",
"я люблю зеленые",
"люблю зеленые яблоки"
]
Не рекомендуется использовать значение параметра больше 3.
lemma_n_grams
— количество слов, которые будут приведены в нормальную форму и объединены в словосочетания. Например, при значении"lemma_n_grams": [2]
будут использованы словосочетания из двух слов.
Например для фразы я люблю зеленые яблоки
будут составлены словосочетания:
[
"я любить",
"любить зеленый",
"зеленый яблоко"
]
Не рекомендуется использовать значение параметра больше 3.
stemma_ngrams
— количество стемм, которые будут объединены в словосочетания. Стемма — основа слова для заданного исходного слова, не обязательно совпадает с морфологическим корнем слова. Например, при значении"stemma_ngrams": [2]
будут использованы словосочетания из двух стемм.
Например для фразы я люблю зеленые яблоки
будут составлены словосочетания:
[
"я любл",
"любл зелен",
"зелен яблок"
]
Не рекомендуется использовать вместе параметры lemma_n_grams
и stemma_ngrams
из-за возможности переобучения модели. Также не рекомендуется использовать значение для stemma_ngrams
больше 3.
char_n_grams
— количество символов, которые будут объединены и рассматриваться в качестве отдельной единицы фразы.
Например, при значении "char_n_grams": [5]
фраза зеленые яблоки
преобразуется в набор:
[
"зелен",
"елены",
"леные",
...
]
lower
— при значенииtrue
все фразы приводятся к нижнему регистру.
Внешний NLU-сервис
Платформа JAICP поддерживает возможность подключения внешнего NLU-сервиса, который соответствует спецификации Model API. Вам также будут доступны создание и настройка интентов, сущностей, паттернов.
Model API позволяет использовать сторонние токенизаторы, а также NLU-сервисы распознавания именованных сущностей и интентов в проектах JAICP.
Для того чтобы использовать внешний NLU-сервис в проекте, в расширенных настройках используйте externalNluSettings
:
...
"externalNluSettings": {
"nluProviderSettings": {
"markup": {
"nluType": "external",
"url": "http://example.com"
},
"ner": {
"nluType": "external",
"url": "http://example.com"
},
"classification": {
"nluType": "external",
"url": "http://example.com"
}
},
"language": "ja",
"nluActionAdditionalProperties": {
"markup": null,
"ner": null,
"classification": {
"modelId": "123",
"classifierName": "example",
"properties": null
}
}
}
...
Параметры
Параметр | Описание |
---|---|
classifierName |
Имя классификатора. |
classification |
Параметры для запросов классификации интентов. |
language |
Язык внешнего NLU. Если не установлен, будет использован язык из настроек проекта. |
markup |
Параметры для запросов разметки. |
modelID |
ID модели классификатора. |
ner |
Named entity recognition. Параметры для запросов распознавания именованных сущностей. |
nluActionAdditionalProperties |
Дополнительные настройки для внешнего NLU-сервиса. |
nluProviderSettings |
Объект, определяющий, где будет выполняться действие NLU. |
nluType |
Тип NLU. Может быть установлен внешний external или внутренний caila NLU. |
Использование
Обратите внимание, что в проекте нельзя одновременно использовать интенты или сущности от внешнего NLU-сервиса и от CAILA .
В проекте JAICP вы можете:
-
Использовать сущности и интенты внешнего NLU-сервиса.
-
Использовать сущности внешнего NLU-сервиса и интенты CAILA.
- Установите
"nluType": "external"
для параметраner
и"nluType": "caila"
дляmarkup
иclassification
. - Использование сущностей внешнего NLU-сервиса при настройке интентов и слотов не будет доступно.
- В сценарии сущности доступны по тегу
q
.
- Установите
-
Использовать интенты внешнего NLU-сервиса и сущности CAILA.
- Установите
"nluType": "external"
для параметраclassification
и"nluType": "caila"
дляmarkup
иner
. - В сценарии интенты доступны по тегу
intent
.
- Установите
-
Использовать разметку внешнего NLU-сервиса с сущностями и интентами CAILA.
- Установите
"nluType": "external"
для параметраmarkup
и"nluType": "caila"
дляclassification
иner
. - В разделе CAILA > Интенты вы можете использовать Тренировочные фразы на языках, которые не поддерживаются платформой, но они будут распознаны в сценарии.
- Установите
Вы можете ознакомиться с примером внешнего NLU-сервиса в репозитории на GitHub.