JAICP

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


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

Важно указывать параметры, которые соответствуют алгоритму классификатора в проекте.

Общие настройки

К общим настройкам относятся параметры, не зависящие от алгоритма классификатора в проекте:

{
    "patternsEnabled": true,
    "tokenizerEngine": "udpipe",
    "dictionaryAutogeneration": true
}

Параметры:

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 — количество эпох обучения, сколько раз модель увидит все тренировочные данные.

  • lrlearning 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 вы можете:

  1. Использовать сущности и интенты внешнего NLU-сервиса.

    • Установите "nluType": "external" для параметров markup, ner и classification.
    • В сценарии интенты и сущности доступны по тегам intent и q.
    • Визуальная настройка в разделе CAILA для интентов и сущностей внешнего NLU-сервиса не поддерживается.
  2. Использовать сущности внешнего NLU-сервиса и интенты CAILA.

    • Установите "nluType": "external" для параметра ner и "nluType": "caila" для markup и classification.
    • Использование сущностей внешнего NLU-сервиса при настройке интентов и слотов не будет доступно.
    • В сценарии сущности доступны по тегу q.
  3. Использовать интенты внешнего NLU-сервиса и сущности CAILA.

    • Установите "nluType": "external" для параметра classification и "nluType": "caila" для markup и ner.
    • В сценарии интенты доступны по тегу intent.
  4. Использовать разметку внешнего NLU-сервиса с сущностями и интентами CAILA.

    • Установите "nluType": "external" для параметра markup и "nluType": "caila" для classification и ner.
    • В разделе CAILA > Интенты вы можете использовать Тренировочные фразы на языках, которые не поддерживаются платформой, но они будут распознаны в сценарии.

Вы можете ознакомиться с примером внешнего NLU-сервиса в репозитории на GitHub.