Интенты
Интент — ключевая единица NLU-ядра, представляющая намерение, которое может выразить клиент в запросе. Интент объединяет в себе:
- Метаинформацию о целевом намерении.
- Набор тренировочных фраз и/или паттернов для обучения классификатора распознавать намерение.
- Данные о слотах — сущностях, уточняющих намерение.
Создание интента
Войдите в проект, на панели управления нажмите NLU → Интенты. Вы перешли в справочник интентов проекта.
Нажмите Создать интент и заполните информацию об интенте. Обязательно для заполнения только поле Название.
Поле | Описание | Примечание |
---|---|---|
Название | Название интента. | Под полем ввода названия указан путь к интенту в общем дереве интентов. Путь рассчитывается автоматически и используется при обращении к интенту из сценария. |
Комментарий | Дополнительное описание к интенту. | |
Ответ | Стандартный ответ на интент. | Вы можете обратиться к тексту ответа из сценария через $context.intent.answer . |
Переключатель рядом с полем ввода названия позволяет включить или выключить интент. Выключенный интент не будет использован при формировании гипотез классификатора.
Тренировочные фразы
В разделе Тренировочные фразы вы можете задать примеры тренировочных фраз или паттернов, которые будут использованы при обучении классификатора распознавать намерение клиента.
Чтобы добавить новую тренировочную фразу в обучающую выборку, введите текст фразы в поле ввода и нажмите Enter. Далее вы можете искать необходимые фразы, нажав на иконку . При помощи флажков слева можно выбрать и удалить нужные фразы из выборки.
Если вас не устроило, как обученный классификатор распознал интенты:
- Повысьте качество выборки. Следуйте рекоммендациям из статьи Как обучать интенты.
- Задайте другие пороговые значения для фраз и паттернов в конфигурационном файле
chatbot.yaml
.
Использование паттернов
По умолчанию для обучения классификатора используются примеры фраз, однако вы также можете задавать паттерны для непосредственного описания шаблонов фраз, подходящих под интент.
Синтаксис паттернов в интентах поддерживает все базовые и большинство расширенных элементов паттернов, за небольшим числом исключений:
-
Не поддерживается паттерн
$morph
и маппинги —(один:1/два:2)
. -
Вместо именованных паттернов
$pattern
и сущностей$entity<>
используйте сущности NLU.предупреждениеНазвания сущностей NLU начинаются с символа@
.
Перефразирование тренировочных фраз
Если у вас нет готового набора данных для обучения, вы можете воспользоваться встроенным инструментом перефразирования. Он поможет подобрать фразы с похожим смыслом и сэкономить время на формирование обучающей выборки. Вам не придется придумывать фразы самостоятельно, учитывая в них много различных способов сказать одно и то же.
При вводе тренировочной фразы нажмите в правой части поля, чтобы сгенерировать ее парафраз. Если вам не понравился результат, вы можете попробовать еще раз — исходная фраза будет перефразирована заново. При этом если убрать курсор из формы ввода или отредактировать результат, в следующий раз будет перефразирован уже новый текст, а не исходный.
Групповое добавление фраз
Вместо того чтобы добавлять тренировочные фразы по одной, вы можете сформировать обучающую выборку в удобном для вас текстовом редакторе, после чего вставить всю выборку в форму ввода и нажать Enter.
Слоты
Слоты — сущности, которые клиент упоминает в запросе либо в процессе уточнения информации, необходимой для выполнения запроса. Этот процесс называется слот-филлинг.
Нажмите Добавить слот и заполните параметры:
- Название — имя слота.
- Сущность — системная либо пользовательская сущность, задающая тип данных, которые попадут в слот.
При необходимости настройте дополнительные параметры:
- Обязательно — переведите переключатель в активное положение, если слот обязателен для заполнения, чтобы обработать интент.
- Массив — переведите переключатель в активное положение, чтобы в слот помещались все сущности данного типа, оформленные как массив.
- Вопросы — укажите вопросы, которые будут задаваться в процессе уточнения незаполненных слотов.
Правила классификации
Правила классификации позволяют задать дополнительные условия распознавания интента. С помощью правил классификации вы можете выбрать сущности либо задать паттерны или синонимы, которые обязательно должны встречаться или отсутствовать во фразах клиента.
Правила классификации не являются заменой тренировочным фразам. Наиболее полезно их использовать в близких по смыслу интентах, которые обучены на похожем наборе фраз и часто путаются при распознавании. В этом случае правила могут помочь классификатору различать такие интенты.
Нажмите Добавить правило и заполните параметры:
- Содержит / Не содержит.
- Сущность / Паттерн / Синонимы.
В зависимости от выбранного типа правила появится поле, где вы можете:
- Выбрать сущность из списка сущностей, которые включены в данном проекте.
- Ввести паттерн или список синонимов без вынесения их в отдельную сущность.
Вложенные интенты
Интенты могут быть вложены друг в друга. Для этого нажмите иконку напротив названия интента → Создать вложенный интент. Уровень вложенности интентов не ограничен.
Обратите внимание, что вложенность никак не влияет на распознавание интентов. Используйте вложенность, чтобы организовать интенты в иерархическую структуру и сгруппировать вместе похожие интенты. Это поможет не запутаться при навигации и редактировании.
Интенты формируют дерево на левой панели.
Узлы дерева отсортированы по алфавиту.
Для каждого узла через символ /
указано число фраз в данном интенте и во всех вложенных.
Как использовать интенты в сценарии
Заполненные интенты можно использовать в сценарии в качестве способа активации стейтов.
Для этого воспользуйтесь тегами intent
/intent!
или intentGroup
/intentGroup!
:
state: Hello
intent!: /Приветствие
a: Здравствуйте! Чем могу помочь?
state: Courses
intentGroup: /Курсы
intent: /Курсы
a: Вас интересуют наши курсы? Я нашел такой ответ:
script: $faq.pushReplies();
state: NoHelpNeeded
intent: /Отрицание
a: Если будут вопросы, обращайтесь!
intent
или intent!
совместно с intentGroup
или intentGroup!
,
порядок срабатывания стейтов может измениться.