Перейти к содержанию

Что такое сущности

Что такое сущности

Содержание инструкции:


Определение

Сущность (от англ. "Entity") - ключевая информация, извлеченная из текста пользователя. Представляет собой конкретную информацию, необходимую для выполнения задачи.

В некоторых случаях для понимания намерения достаточно общего смысла высказывания, но часто требуется дополнительная информация. Именно здесь на помощь приходят сущности.

Рассмотрим пример:

  • Я хочу купить синюю рубашку
  • Я хочу купить красную рубашку

В обоих случаях намерение пользователя — покупка рубашки. Однако, различается дополнительная информация, такая как цвет. Это и есть сущность.

Note

Имейте в виду, что сущность не привязана к намерению. Вы можете использовать одну и ту же сущность с разными намерениями.

Чтобы помощник мог распознавать сущности в тексте, его необходимо обучить. Это можно сделать, выделив сущности в тренировочных фразах. В процессе обучения модели следует четко указать, какие слова или фразы в тексте являются сущностями.

За распознавание сущностей отвечает модель NLU (Natural Language Understanding). Эта модель позволяет помощнику понимать и анализировать естественный язык пользователей.

Чтобы модель NLU могла обобщать высказывания, не вошедшие в обучающие данные, необходимо добавить разнообразные примеры. Модель должна научиться выделять сущности в предложениях, которые она никогда раньше не встречала.

Для намерений важно добавить разнообразные формулировки тренировочных фраз, а не просто повторять одно и то же предложение с незначительными изменениями. Для сущностей же необходимо научить модель извлекать информацию из разных контекстов и предложений.


Формат записи сущностей в файлах проекта

Сущности записываются:

  1. В файле nlu.yml в примерах тренировочных фраз.

    Сущности выделяются с помощью синтаксиса [значение](тип_сущности).

    Пример записи:

    nlu:
      - intent: order_pizza
        examples: |
          - Закажи пиццу [пепперони](pizza_type)
          - Хочу [маргариту](pizza_type)
          - Дайте мне [гавайскую](pizza_type) пиццу
          - Мне нужна пицца [четыре сыра](pizza_type)
    
  2. В файле domain.yml в разделе entities.

    Пример записи:

    entities:
      - pizza_type
      - quantity
      - delivery_address
    
  3. В файлах stories.yml и rules.yml.

    Сущности могут использоваться в историях и правилах для управления диалогами. Например, если пользователь заказывает пиццу, бот может запросить дополнительную информацию, такую как тип пиццы или количество.

    Пример записи:

    stories:
      - story: Order pizza
        steps:
          - intent: order_pizza
            entities:
              - pizza_type: пепперони
          - action: utter_ask_quantity
          - intent: provide_quantity
            entities:
              - quantity: 2
          - action: utter_confirm_order
    

Параметры сущностей

Доступны следующие базовые параметры сущностей:

  • entity - имя сущности;
  • value - фактическое значение сущности;
  • role - роль сущности в тексте;
  • group - группа, к которой принадлежит сущность.

1. value (значение)

Это фактическое значение сущности, извлеченное из текста. Например, в фразе "Забронируй столик на 19:00" значение сущности time будет 19:00.

Пример:

nlu:
  - intent: book_table
    examples: |
      - Забронируй столик на [19:00](time)

Здесь:

  • Сущность: time.
  • Значение: 19:00.

2. role (роль)

Роль сущности указывает на её функцию в тексте. Это полезно, когда одно и то же значение может иметь разные роли в зависимости от контекста. Например, в фразе "Переведи 100 рублей с карты на счет" сущность 100 рублей может иметь роль amount_to_transfer.

Пример:

nlu:
  - intent: transfer_money
    examples: |
      - Переведи [100 рублей](amount:amount_to_transfer) с карты на счет

Здесь:

  • Сущность: amount.
  • Значение: 100 рублей.
  • Роль: amount_to_transfer.

3. group (группа)

Группа сущности используется для объединения нескольких сущностей в одну логическую группу. Это полезно, когда в тексте встречаются несколько сущностей, которые относятся к одному объекту или событию. Например, в фразе "Забронируй столик на 19:00 на завтра" сущности 19:00 и завтра могут быть объединены в группу booking_details.

Пример:

nlu:
  - intent: book_table
    examples: |
      - Забронируй столик на [19:00](time:booking_details) на [завтра](date:booking_details)

Здесь:

  • Сущности: time и date.
  • Значения: 19:00 и завтра.
  • Группа: booking_details.