Расширенные настройки NLU

При создании и редактировании проекта вы можете задать новые параметры для настройки NLU.

Параметры передаются в виде JSON-объекта в текстовом представлении.

Параметры должны соответствовать алгоритму классификатора в проекте.

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 — вероятность дроп-аута на эмбеддинг слое. Дроп-аут — механизм, который искусственно отключает в сети часть весов в процессе тренировки. Дроп-аут помогает сети не переобучиться, то есть не просто запомнить весь набор данных, а обобщить информацию. emb_drp принимает значение от 0 до 1.
  • сnn_drp — вероятность дроп-аута на свёрточных слоях сети.
  • bs — размер входного батча для тренировок. Это значение определяет какое количество тренировочных примеров будет подаваться на вход сети за один шаг в процессе тренировок. Если датасет составляет менее 3000 примеров, рекомендуемое значение 16-32. Для датасетов больших размеров это значение может составить 32-128.
  • n_epochs — количество эпох обучения, сколько раз модель увидит все тренировочные данные.
  • lrlearning 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] будут использованы словосочетания из двух и трех слов.

Например для фразы я люблю зеленые яблоки будут составлены словосочетания:

 [
  "я люблю",
  "люблю зеленые",
  "зеленые яблоки",
  "я люблю зеленые",
  "люблю зеленые яблоки"
]
Не рекомендуется использовать значение параметра больше 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 все фразы приводятся к нижнему регистру.

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней