Расширенные настройки SmartApp Brain
При создании и редактировании проекта вы можете задать новые параметры SmartApp Brain.
Параметры передаются в виде валидного JSON-объекта.
danger
Параметры должны соответствовать алгоритму классификатора в проекте.
STS
Параметры для STS классификатора:
{
"patternsEnabled": true, // использование паттернов в тренировочных фразах
"namedEntitiesRequired": true, // для попадания в интент во фразе должна быть найдена системная сущность
"tokenizerEngine": "example", // токенизатор
"stsSettings": { // параметры для STS классификатора
"exactMatch": 0, // вес точного совпадения слов в предложениях
"lemmaMatch": 0, // вес совпадения слов по леммам
"jaccardMatch": 0,
"jaccardMatchThreshold": 0, // вес посимвольного сравнения слов мерой Жаккара
"acronymMatch": 0, // вес сравнения слов как акронимов
"synonymMatch": 0.0, // вес для синонимов
"synonymContextWeight": 0.0, // вес, с которым применяется при ранжировании значение weight из справочника синонимов
"patternMatch": 1.0, // вес соответствия по паттернам
"throughPatternMatch": 0.0, // вес соответствия по найденным сущностям в примере и входном тексте
"wordSequence1": 0, // вес схожих последовательностей длины 1
"wordSequence2": 0, // вес схожих последовательностей длины 2
"wordSequence3": 0, // вес схожих последовательностей длины больше 2
"intermediateAlternativesLimit": 5, // порог отсечения промежуточных альтернатив, которые обрабатывает алгоритм
"finalAlternativesLimit": 5, // порог количества финальных результатов, по достижению которого алгоритм завершается
"idfShift": 0.0,
"idfMultiplier": 1.0,
"namedEntitiesRequired": true
},
}
Подробнее рассмотрим параметр "namedEntitiesRequired": true
. Если в интент добавлена фраза с системной сущностью, например:
Мне нужно @duckling.number яблок
То при запросе «Мне нужно яблок» — фраза не попадет в интент, так как системная сущность не была найдена.
Переопределите параметр namedEntitiesRequired
на вкладке Настройки NLU, чтобы интент срабатывал при поступлении фраз без системных сущностей.
Deep Learning
Параметры для Deep Learning классификатора:
{
"patternsEnabled": true, // использование паттернов в тренировочных фразах
"tokenizerEngine": "example", // токенизатор
"cnnSettings": { // параметры для Deep Learning классификатора
"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,
"device": "cpu",
"pooling_name": "max"
},
}
Параметры:
kernel_sizes
— список размеров сверточных ядер. Сверточное ядро — размер контекстного окна, на которое классификатор обращает внимание. Например,"kernel_sizes": [3]
означает, что модель будет находить признаки в тексте, основываясь на всех тройках соседних слов. Для одной модели может быть задано несколько сверточных ядер.n_filters
— количество фильтров. Один фильтр — это определенный паттерн, выученный моделью. Для каждого ядра модель имеет свой набор паттернов. Например, если указать"kernel_sizes": [2,3]
и"n_filters": 512
, то всего фильтров будет1024
(на каждое ядро по512
).emb_drp
— вероятность исключения на встроенном слое. Исключение (англ. dropout) — механизм, который искусственно отключает в сети часть весов в процессе тренировки. Исключение помогает сети не переобучиться, то есть не просто запомнить весь набор данных, а обобщить информацию.emb_drp
принимает значение от 0 до 1.сnn_drp
— вероятность дроп-аута на сверточных слоях сети.bs
— размер входной пачки для тренировок. Это значение определяет какое количество тренировочных примеров будет подаваться на вход сети за один шаг в процессе тренировок. Если датасет составляет менее 3000 примеров, рекомендуемое значение 16-32. Для датасетов больших размеров это значение может составить 32-128.n_epochs
— количество эпох обучения, сколько раз модель увидит все тренировочные данные.lr
— learning rate. Множитель, с которым модель будет обновлять свои веса в процессе тренировки.device
— устройство, на котором будет обучаться модель. Принимает значениеcuda
, при отсутствии видеокартыcpu
.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": "example", // токенизатор
"classicMLSettings": { // параметры для Classic ML классификатора
"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]
будут использованы словосочетания из двух и трех слов.
Например для фразы я люблю зеленые яблоки
будут составлены словосочетания:
[
"я люблю",
"люблю зеленые",
"зеленые яблоки",
"я люблю зеленые",
"люблю зеленые яблоки"
]
caution
Не рекомендуется использовать значение параметра больше 3.
lemma_n_grams
— количество слов, которые будут приведены в нормальную форму и объединены в словосочетания. Например, при значении"lemma_n_grams": [2]
будут использованы словосочетания из двух слов.
Например для фразы я люблю зеленые яблоки
будут составлены словосочетания:
["я любить", "любить зеленый", "зеленый яблоко"]
caution
Не рекомендуется использовать значение параметра больше 3.
stemma_ngrams
— количество стемм, которые будут объединены в словосочетания. Стемма — основа слова для заданного исходного слова, не обязательно совпадает с морфологическим корнем слова. Например, при значении"stemma_ngrams": [2]
будут использованы словосочетания из двух стемм.
Например для фразы я люблю зеленые яблоки
будут составлены словосочетания:
["я любл", "любл зелен", "зелен яблок"]
caution
Не рекомендуется использовать вместе параметры lemma_n_grams
и stemma_ngrams
из-за возможности переобучения модели. Также не рекомендуется использовать значение для stemma_ngrams
больше трех.
char_n_grams
— количество символов, которые будут объединены и рассматриваться в качестве отдельной единицы фразы.
Например, при значении "char_n_grams": [5]
фраза зеленые яблоки
преобразуется в набор:
[
"зелен",
"елены",
"леные",
...
]
lower
— при значенииtrue
все фразы приводятся к нижнему регистру.
Заметили ошибку?
Выделите текст и нажмите Ctrl
+ Enter
, чтобы сообщить нам о ней