Habilidade personalizada de aprendizado de máquina

Concluído

Usar uma habilidade personalizada de aprendizado de máquina funciona da mesma forma que adicionar qualquer outra habilidade personalizada a um índice de pesquisa.

Aqui, você verá como usar a AmlSkill habilidade personalizada é diferente e explorará as considerações de como usá-la efetivamente.

Esquema de habilidades personalizado do Azure Machine Learning

Quando você enriquece um índice de pesquisa com uma habilidade personalizada do Azure Machine Learning (AML), o enriquecimento acontece no nível do documento. O conjunto de habilidades usado pelo indexador de documentos precisa incluir um AmlSkillarquivo . O esquema para esta habilidade é:

{
      "@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"
        }
      ]
    }

Importante

O URI tem que usar um ponto de extremidade HTTPS. Pode ser um endereço URL personalizado gerenciado fornecido pela Microsoft ou seu próprio nome de domínio e certificado.

Observe que a habilidade personalizada não inclui configurações batchSize , pois o modelo AML processará um único documento de cada vez. As configurações restantes que controlam o desempenho da habilidade são timeout e degreeOfParallelism. O esquema acima definiu 30 segundos como o valor de tempo limite. O grau de paralelismo deve começar por um. Dependendo da sua infraestrutura, você poderá aumentar esse número.

A melhor maneira de gerenciar a eficiência de uma habilidade AML é aumentar o cluster de inferência do Kubernetes adequadamente para gerenciar sua carga de trabalho.

O índice do documento precisa de um campo para armazenar os resultados do modelo AML. Em seguida, você adicionará um mapeamento de campo de saída para armazenar os resultados do conjunto de habilidades personalizado para o campo no documento no índice.

O JSON para fazer esse mapeamento de campo de saída é:

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

Você cria seu modelo do Azure Machine Learning usando ferramentas de desenvolvedor como o SDK do Python, APIs REST ou CLI do Azure. Outra opção é aproveitar o estúdio Azure AI Machine Learning, uma interface gráfica do usuário que permite criar, treinar e implantar modelos sem escrever nenhum código.

Diagrama mostrando as etapas para enriquecer um índice de pesquisa com um modelo do Azure AI Machine Learning Studio.

Com um modelo criado, você altera como o código de pontuação chama o modelo para permitir que ele seja usado por sua habilidade de pesquisa personalizada.

As últimas etapas são criar um cluster Kubernetes para hospedar um ponto de extremidade para seu modelo.

Criar um espaço de trabalho AML

Quando você cria o espaço de trabalho AML, o Azure também cria contas de armazenamento, um armazenamento de chaves e recursos do Application Insights. O painel Visão geral do espaço de trabalho AML fornece um link para iniciar o Azure AI Machine Learning Studio.

Criar e treinar um modelo no estúdio de Aprendizado de Máquina do Azure

O Azure AI Machine Learning Studio permite que você use um designer para usar o recurso de arrastar e soltar para criar pipelines que criam e treinam modelos. Há uma maneira ainda mais fácil de criar modelos usando modelos pré-construídos.

Captura de ecrã de todos os componentes pré-criados no Azure AI Machine Learning Studio.

Seja qual for a sua escolha para criar seus modelos, eles precisam ser registrados no Azure AI Machine Learning Studio para que você possa implantar o modelo em um serviço Web.

Alterar como o modelo funciona para permitir que ele seja chamado pela habilidade personalizada AML

Os modelos que você treina normalmente usam muitos exemplos dos dados. Os conjuntos de dados terão muitas linhas e serão divididos e usados para treinar e testar o modelo. O código que manipula esses dados e os passa para o modelo precisa ser alterado para lidar com linhas únicas.

A resposta JSON do modelo também deve conter apenas a previsão de saída.

Por exemplo, se seus dados forem uma matriz de objetos JSON:

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

O código de pontuação python terá que processar os dados uma linha de cada vez:

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

Para alterar o conjunto de dados de entrada para um único registro:

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

O código python precisará mudar para:

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

Para a resposta do código de pontuação, o código padrão retorna todo o documento JSON:

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

A habilidade personalizada precisa ser capaz de mapear uma única resposta do modelo. Portanto, o código deve retornar JSON que é apenas o último atributo.

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

Criar um ponto de extremidade para seu modelo usar

O modelo é implantado em um ponto de extremidade. O Azure AI Machine Learning Studio dá suporte à implantação de um modelo em um ponto de extremidade em tempo real, um ponto de extremidade em lote ou um serviço Web. No momento, a habilidade personalizada AmlSkill no Azure AI Search oferece suporte apenas a pontos de extremidade de serviço Web.

A outra restrição é que o ponto de extremidade deve ser um cluster do Serviço Kubernetes do Azure (AKS). Não há suporte para instâncias de contêiner.

Se você tiver experiência na criação e gerenciamento de clusters AKS, poderá criar manualmente os clusters no portal do Azure e fazer referência a eles quando criar seu ponto de extremidade. No entanto, uma opção mais fácil é permitir que o Azure AI Machine Learning Studio crie e gerencie o cluster para você.

Se você navegar até a seção de computação do estúdio, poderá criar clusters de inferência. O AML studio irá guiá-lo através da escolha do tamanho do cluster e até mesmo ativar HTTPS e criar um nome de domínio para você. O URL terá o formato location.cloudapp.azure.com:443.

Conecte a habilidade personalizada AML ao ponto de extremidade

Com tudo acima no lugar, você precisa atualizar seu serviço Azure AI Search. As etapas para fazer isso são semelhantes aos exemplos mostrados neste módulo, portanto, não detalharemos os detalhes aqui, mas listaremos as etapas a seguir.

  1. Primeiro, para enriquecer seu índice de pesquisa, você adicionará um novo campo ao seu índice para incluir a saída para o modelo.
  2. Em seguida, você atualizará seu conjunto de habilidades de índice e adicionará a #Microsoft.Skills.Custom.AmlSkill habilidade personalizada.
  3. Em seguida, você alterará o indexador para mapear a saída da habilidade personalizada para o campo criado no índice.
  4. A última etapa é executar novamente o indexador para enriquecer o índice com o modelo AML.