This site is no longer updated.Go to new Conversational Cloud docs

Подключение классификатора к боту Устарело


Обратите внимание, что использование классификатора на примерах устарело начиная с версии 1.10.0. Подробнее о миграции проектов на CAILA.

Для того, чтобы подключить классификатор к боту, выполните следующие шаги:


  1. В конфигурационном файле бота chatbot.yaml задайте параметры для nlp-функций платформы:

morphology

Позволяет выбрать библиотеку для морфологического анализа слов. Используется при обработке паттернов ~, $lemma, $morph, а так же в функции $nlp.parseMorph.

Укажите одну из библиотек:

  • aot — используется библиотека от AOT.ru;
  • myStem — используется утилита myStem;
  • pyMorphy — используется библиотека pyMorphy, наиболее качественный анализатор для русского языка.

tokenizer

Токенизатор позволяет задать правила, используемые для разбиения текста на слова.

Поддерживаемые типы токенизаторов:

  • regexp — простой токенизатор на регулярных выражениях.
  • srx — конфигурируемый токенизатор на базе настраиваемых правил сегментации. При указании данного токенизатора потребуется указать файл грамматики в параметре srxPath.
  • myStem — сегментация посредством утилиты myStem. Является предпочтительным токенизатором при сипользовании паттернов и классификатора.

vocabulary

Словарь весов слов по ранжированию паттернов. По умолчанию: common-vocabulary.json.


lengthLimit, timeLimit

Позволяет изменить лимиты на размер входящего сообщения и на время обработки nlp-модуля.

Параметры по умолчанию:

nlp:
  lengthLimit:
    enabled: true
    symbols: 400
    words: 100000
  timeLimit:
    enabled: true
    timeout: 10000

Для lengthLimit:

  • symbols — устанавливает лимит на количество символов во входящем сообщении. При превышении этого лимита сработает событие lengthLimit, которое может быть обработано в сценарии бота тегом event: lengthLimit.
  • words — устанавливает лимит на количество слов во входящем сообщении. При превышении этого лимита сработает событие lengthLimit, которое может быть обработано в сценарии бота тегом event: lengthLimit.

Счетчик words приравнивает символы ! , . : ; ?" ' ( ) * / [ \ ] { | } к словам, учитывайте это при указании лимита.

Для timeLimit:

  • timeout — устанавливает максимальное время обработки запроса в nlp-модуле в миллисекундах. При превышении этого лимита сработает событие timeLimit, которое может быть обработано в сценарии бота тегом event: timeLimit.

Пример nlp-модуля:

nlp:                                    // параметры для nlp-функци платформы
  morphology: myStem                    // библиотека для морфологического анализа слов
  tokenizer: myStem                     // токенизатор, задает правила для разбиения текста на слова
  vocabulary: common-vocabulary.json    // словарь весов слов для ранжирования паттернов
  lengthLimit:
    enabled: true
    symbols: 400                        // лимит на количество символов во входящем сообщении
    words: 100000                       // лимит на количество слов во входящем сообщении
  timeLimit:
    enabled: true
    timeout: 10000                      // максимальное время обработки запроса в nlp-модуле в миллисекундах

  1. Далее задайте параметры классификации:
engine

Тип классификатора, по умолчанию sts.


noMatchThreshold

Значение нижнего порога похожести, при котором нужно считать фразы непохожими. В ходе разработки классификатора было эмпирически определено, что оптимальное значение этого параметра 0.2.


parameters: algorithm

Тип используемого алгоритма классификации. Используется match-aligner — основной тип для sts-классификатора. Также вы можете использовать aligner и aligner2 — альтернативная реализация алгоритма классификации.


  1. Далее сконфигурируйте алгоритм классификатора. Все параметры настроены по умолчанию. Необходимо только указать словарь весов, он совпадает со словарем, указанным в блоке nlp. По умолчанию: common-vocabulary.json.

Пример конфигурационного файла chatbot.yaml с подключенным классификатором:

name: demo

entryPoint:
  - main.sc

tests:
  exclude:
    - tests.xml

messages:
    onError: 
        defaultMessage: Ой, кажется, что-то пошло не так. 
        locales: 
            ru: Ой, кажется, что-то пошло не так.

nlp:                                    // параметры для nlp-функци платформы
  morphology: myStem                    // библиотека для морфологического анализа слов
  tokenizer: myStem                     // токенизатор, задает правила для разбиения текста на слова
  vocabulary: common-vocabulary.json    // словарь весов слов для ранжирования паттернов
  lengthLimit:
    enabled: true
    symbols: 400                        // лимит на количество символов во входящем сообщении
    words: 100000                       // лимит на количество слов во входящем сообщении
  timeLimit:
    enabled: true
    timeout: 10000                      // максимальное время обработки запроса в nlp-модуле в миллисекундах

classifier:                             // параметры для классификатора
  enable: true
  engine: sts                           // тип классификатора
  noMatchThreshold: 0.2
  parameters:
    algorithm: aligner2                 // алгоритм классификации

aligner:
  vocabulary: common-vocabulary.json

exampleGroups:
    - src/dictionaries/examples.json    // указывается при использовании группы примеров