Расширение приложения во время прогнозирования

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

В схему среды выполнения прогнозирования внесены два изменения.

Внешние сущности

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

Клиентское приложение предоставляет собственное средство извлечения сущностей, управляя сопоставлением сущностей, определяя расположение соответствующей сущности в речевом фрагменте и затем отправляя эту информацию с запросом.

Внешние сущности — это механизм для расширения любого типа сущности, который по-прежнему используется в качестве сигналов для других моделей.

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

Внешние сущности являются частью API разработки версии 3. Узнайте больше о переходе на эту версию.

Сущность уже существует в приложении

Значение entityName для внешней сущности, передаваемое в теле POST запроса к конечной точке, должно уже существовать в обученном и опубликованном приложении во время выполнения запроса. Тип сущности не имеет значения, поддерживаются все типы.

Первый цикл в беседе

Рассмотрим первый речевой фрагмент в рамках беседы в чат-боте. Пользователь вводит следующую неполную информацию.

Send Hazem a new message

В теле запроса POST от чат-бота к LUIS могут передаваться сведения о Hazem, что напрямую соответствует одному из контактов пользователя.

    "externalEntities": [
        {
            "entityName":"contacts",
            "startIndex": 5,
            "entityLength": 5,
            "resolution": {
                "employeeID": "05013",
                "preferredContactType": "TeamsChat"
            }
        }
    ]

В ответ операции прогнозирования эта внешняя сущность включается вместе со всеми остальными спрогнозированными сущностями, так как она определена в запросе.

Второй цикл в беседе

В следующем речевом фрагменте пользователя в чат-боте используется более расплывчатый термин.

Send him a calendar reminder for the party.

В этом цикле беседы в речевом фрагменте под him имеется в виду Hazem. Чат-бот может сопоставить him в теле запроса POST со значением сущности, извлеченным из первого речевого фрагмента, Hazem.

    "externalEntities": [
        {
            "entityName":"contacts",
            "startIndex": 5,
            "entityLength": 3,
            "resolution": {
                "employeeID": "05013",
                "preferredContactType": "TeamsChat"
            }
        }
    ]

В ответ операции прогнозирования эта внешняя сущность включается вместе со всеми остальными спрогнозированными сущностями, так как она определена в запросе.

Переопределение существующих прогнозов модели

Свойство preferExternalEntities определяет, какую сущность должно выбрать приложение LUIS, когда пользователь отправляет внешнюю сущность, которая пересекается с прогнозируемой сущностью с тем же именем: переданную сущность или сущность, имеющуюся в модели.

В качестве примера рассмотрим запрос today I'm free. LUIS определяет today как datetimeV2 со следующим ответом.

"datetimeV2": [
    {
        "type": "date",
        "values": [
            {
                "timex": "2019-06-21",
                "value": "2019-06-21"
            }
        ]
    }
]

Пользователь отправляет внешнюю сущность.

{
    "entityName": "datetimeV2",
    "startIndex": 0,
    "entityLength": 5,
    "resolution": {
        "date": "2019-06-21"
    }
}

Если свойство preferExternalEntities имеет значение false, LUIS возвращает такой ответ, как если бы внешняя сущность не отправлялась.

"datetimeV2": [
    {
        "type": "date",
        "values": [
            {
                "timex": "2019-06-21",
                "value": "2019-06-21"
            }
        ]
    }
]

Если для preferExternalEntities задано значение true, LUIS возвращает ответ, который включает следующее.

"datetimeV2": [
    {
        "date": "2019-06-21"
    }
]

Решение

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

Основной целью является расширение предварительно созданных сущностей, но этим типом сущностей она не ограничивается.

Свойство resolution может быть числом, строкой, объектом или массивом.

  • "Dallas"
  • {"text": "value"}
  • 12345
  • ["a", "b", "c"]

Динамические списки

Динамические списки позволяют расширить существующий обученный и опубликованный объект списка уже в приложении LUIS.

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

  • во время запроса к конечной точке прогнозирования запросов;
  • для одного запроса.

Сущность списка может быть пустой в приложении LUIS, но она должна существовать. Сущность списка в приложении LUIS не изменяется, но возможности прогнозирования в конечной точке расширяются до двух списков с 1000 элементами.

Тело запроса JSON динамического списка

Отправьте следующее тело запроса JSON, чтобы добавить в список новый вложенный список с синонимами и спрогнозировать сущность списка для текста LUIS с запросом прогнозирования POST.

{
    "query": "Send Hazem a message to add an item to the meeting agenda about LUIS.",
    "options":{
        "timezoneOffset": "-8:00"
    },
    "dynamicLists": [
        {
            "listEntity*":"ProductList",
            "requestLists":[
                {
                    "name": "Azure Cognitive Services",
                    "canonicalForm": "Azure-Cognitive-Services",
                    "synonyms":[
                        "language understanding",
                        "luis",
                        "qna maker"
                    ]
                }
            ]
        }
    ]
}

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

Дальнейшие действия