Пользовательский навык машинного обучения

Завершено

Применение пользовательского навыка машинного обучения ничем не отличается от добавления любого другого пользовательского навыка в индекс поиска.

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

Настраиваемая схема навыка Машинного обучения Azure

Когда вы обогащаете индекс поиска новым пользовательским навыком Машинного обучения Azure (AML), он применяется на уровне документа. Набор навыков, используемый индексатором документов, должен содержать AmlSkill. Схема для этого навыка выглядит так:

{
      "@odata.type": "#Microsoft.Skills.Custom.AmlSkill",
      "name": "AML name",
      "description": "AML description",
      "context": "/document",
      "uri": "https://[Your AML endpoint]",
      "key": "Your AML endpoint key",
      "resourceId": null,
      "region": null,
      "timeout": "PT30S",
      "degreeOfParallelism": 1,
      "inputs": [
        {
          "name": "field name in the AML model",
          "source": "field from the document in the index"
        },
        {
          "name": "field name in the AML model",
          "source": "field from the document in the index"
        },

      ],
      "outputs": [
        {
          "name": "result field from the AML model",
          "targetName": "result field in the document"
        }
      ]
    }

Внимание

Этот URI должен использовать конечную точку HTTPS. Это может быть управляемый пользовательский URL-адрес, предоставленный корпорацией Майкрософт, или ваше собственное доменное имя с собственным сертификатом.

Обратите внимание, что пользовательский навык не включает параметры, batchSize так как модель AML будет обрабатывать один документ одновременно. Кроме этого, производительностью навыка управляют параметры timeout и degreeOfParallelism. Предложенная выше схема задает время ожидания 30 секунд. Степень параллелизма должна иметь значение не ниже 1. В зависимости от вашей инфраструктуры вы можете увеличить это значение.

Лучший способ управления эффективностью навыка AML — увеличить масштаб кластера вывода Kubernetes в соответствии с требованиями рабочей нагрузки.

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

Для этого сопоставления полей выходных данных используется следующий код JSON:

"outputFieldMappings": [
    {
      "sourceFieldName": "/result field in the document",
      "targetFieldName": "result field from the AML model"
    }
  ]

Вы создаете модель Машинное обучение Azure с помощью средств разработчика, таких как пакет SDK для Python, REST API или Azure CLI. Другой вариант — воспользоваться преимуществами студии azure AI Машинное обучение, графическим пользовательским интерфейсом, который позволяет создавать, обучать и развертывать модели без написания кода.

Схема, показывающая шаги по обогащению индекса поиска с помощью модели Azure AI Машинное обучение Studio.

С помощью созданной модели вы изменяете способ, которым код оценки вызывает модель, чтобы разрешить ее использование вашим пользовательским навыком поиска.

Последним шагом является создание кластера Kubernetes для размещения конечной точки для модели.

Создание рабочей области AML

При создании рабочей области AML Azure также создаст учетные записи хранения, хранилище ключей и ресурсы Application Insights. Панель обзора рабочей области AML предоставляет ссылку для запуска Azure AI Машинное обучение Studio.

Создание и обучение модели в Студии машинного обучения Azure

Azure AI Машинное обучение Studio позволяет использовать конструктор для создания конвейеров, которые создают и обучают модели. Существует еще более простой способ создания моделей с помощью готовых шаблонов.

Снимок экрана: все предварительно созданные компоненты в Azure AI Машинное обучение Studio.

Однако вы решили создать модели, их необходимо зарегистрировать в Azure AI Машинное обучение Studio, чтобы можно было развернуть модель в веб-службе.

Измените способ работы модели, чтобы ее мог вызывать пользовательский навык AML

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

Ответ JSON из модели также должен содержать только прогноз по выходным данным.

Например, если данные являются массивом объектов JSON:

[ 
    {
        "attribute-1": null,
        "attribute-2": null
    },
    {
        "attribute-1": null,
        "attribute-2": null
    },
    {
        "attribute-1": null,
        "attribute-2": null
    }
]

Код оценки Python должен обрабатывать данные по одной строке за раз:

data = json.loads(data)
for row in data:
    for key, val in row.items():
        input_entry[key].append(decode_nan(val))

Чтобы изменить набор входных данных на одну запись, выполните следующие действия.

{
    "attribute-1": null,
    "attribute-2": null
}

Код Python должен измениться на следующий код:

data = json.loads(data)
for key, val in data.items():
    input_entry[key].append(decode_nan(val))

Для ответа из кода оценки код по умолчанию возвращает весь документ JSON:

return json.dumps({"result": result.data_frame.values.tolist()})

Пользовательский навык должен иметь возможность сопоставить один ответ из модели. Поэтому код должен возвращать JSON, который является просто последним атрибутом.

output = result.data_frame.values.tolist()
# return the last column of the the first row of the dataframe
return {
    "predicted_outcome": output[0][-1]
}

Создание конечной точки для используемой модели

Развертывание модели выполняется в конечной точке. Azure AI Машинное обучение Studio поддерживает развертывание модели в конечной точке реального времени, пакетной конечной точке или веб-службе. На данный момент пользовательский AmlSkill навык в поиске ИИ Azure поддерживает только конечные точки веб-службы.

Другое ограничение заключается в том, что конечная точка должна быть кластером Служба Azure Kubernetes (AKS). Экземпляры контейнеров не поддерживаются.

Если у вас есть опыт создания кластеров AKS и управления ими, вы можете вручную создать кластеры на портале Azure и ссылаться на них при создании конечной точки. Тем не менее проще разрешить Azure AI Машинное обучение Studio создавать кластер и управлять ими.

Если перейти к разделу вычислений в студии, можно создать кластеры вывода. Затем студия AML поможет вам выбрать размер кластера, а также включить HTTPS и создать доменное имя. Он будет иметь формат location.cloudapp.azure.com:443.

Подключение пользовательского навыка AML к конечной точке

При этом необходимо обновить служба azure AI. Эти действия похожи на примеры, показанные в этом модуле, поэтому мы не рассмотрим конкретные сведения здесь, но выведем список действий, которые необходимо выполнить.

  1. Во-первых, чтобы обогатить индекс поиска, вы добавляете новое поле в индекс, чтобы включить выходные данные для модели.
  2. Затем вы обновите набор навыков индекса и добавите пользовательский навык #Microsoft.Skills.Custom.AmlSkill.
  3. Затем вы измените индексатор, чтобы сопоставить выходные данные из пользовательского навыка с полем, созданным в индексе.
  4. Последний шаг — повторный запуск индексатора, чтобы дополнить индекс моделью AML.