Aptitud personalizada de Machine Learning

Completado

El uso de una aptitud personalizada de aprendizaje automático funciona igual que agregar cualquier otra aptitud personalizada a un índice de búsqueda.

Aquí verá cómo usar la aptitud personalizada AmlSkill es diferente y explorará las consideraciones sobre cómo usarla de forma eficaz.

Esquema de aptitudes de Azure Machine Learning personalizado

Al enriquecer un índice de búsqueda con una aptitud personalizada de Azure Machine Learning (AML), el enriquecimiento se produce en el nivel de documento. El conjunto de aptitudes utilizado por el indexador de documentos debe incluir un AmlSkill. El esquema de esta aptitud es:

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

El URI tiene que usar un punto de conexión HTTPS. Puede ser una dirección URL personalizada administrada proporcionada por Microsoft o su propio nombre de dominio y certificado.

Tenga en cuenta que la aptitud personalizada no incluye la configuración de batchSize ya que el modelo de AML procesará un solo documento a la vez. La configuración restante que controla el rendimiento de la aptitud es timeout y degreeOfParallelism. El esquema anterior ha establecido 30 segundos como valor de tiempo de espera. El grado de paralelismo debe comenzar en uno. En función de la infraestructura, es posible que pueda aumentar este número.

La mejor manera de administrar la eficacia de una aptitud de AML es escalar verticalmente el clúster de inferencia de Kubernetes de forma adecuada para administrar la carga de trabajo.

El índice del documento necesita un campo para almacenar los resultados del modelo AML. A continuación, agregará una asignación de campo de salida para almacenar los resultados del conjunto de aptitudes personalizado en el campo del documento del índice.

El JSON para realizar esta asignación de campo de salida es:

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

Cree un modelo de Azure Machine Learning mediante herramientas de desarrollo como el SDK de Python, las API de REST o la CLI de Azure. Otra opción es aprovechar el Estudio de Machine Learning de Azure AI, una interfaz gráfica de usuario que le permite crear, entrenar e implementar modelos sin necesidad de escribir código.

Diagrama que muestra los pasos para enriquecer un índice de búsqueda con un modelo de Azure AI Machine Learning Studio.

Con un modelo creado, se modifica la forma en que el código de puntuación llama al modelo para permitir que lo use la aptitud de búsqueda personalizada.

Los últimos pasos son crear un clúster de Kubernetes para hospedar un punto de conexión para el modelo.

Creación de un área de trabajo de AML

Al crear el área de trabajo de AML, Azure también creará cuentas de almacenamiento, un almacén de claves y recursos de Application Insights. El panel Información general del área de trabajo de AML proporciona un vínculo para iniciar el Estudio de Machine Learning de Azure AI.

Creación y entrenamiento de un modelo en Estudio de Azure Machine Learning

El Estudio de Machine Learning de Azure AI permite el uso de un diseñador para usar arrastrar y colocar para la creación de canalizaciones que crean y entrenan modelos. Hay una manera aún más fácil de crear modelos mediante plantillas precompiladas.

Recorte de pantalla de todos los componentes creados previamente en Azure AI Machine Learning Studio.

No importa cómo decida crear sus modelos, todos deben registrarse en el Estudio de Machine Learning de Azure AI para poder implementarlos en un servicio web.

Modificación del funcionamiento del modelo para permitir que la aptitud personalizada de AML lo llame

Los modelos que entrene normalmente usarán muchos ejemplos de los datos. Los conjuntos de datos tendrán muchas filas y se dividirán y usarán para entrenar y probar el modelo. El código que controla estos datos y los pasas al modelo debe cambiarse para que controle filas únicas.

La respuesta JSON del modelo también debe contener solo la predicción de salida.

Por ejemplo, si los datos son una matriz de objetos JSON:

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

El código de puntuación de Python tendrá que procesar los datos una fila a la vez:

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

Para cambiar el conjunto de datos de entrada a un único registro:

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

El código de Python tendrá que cambiar a lo siguiente:

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

Para la respuesta del código de puntuación, el código predeterminado devuelve todo el documento JSON:

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

La aptitud personalizada debe ser capaz de asignar una única respuesta del modelo. Por lo tanto, el código debe devolver JSON que sea solo el ú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]
}

Creación de un punto de conexión para el modelo que se va a usar

El modelo se implementa en un punto de conexión. El Estudio de Machine Learning de Azure AI admite la implementación de un modelo en un punto de conexión en tiempo real, un punto de conexión por lotes o un servicio web. Por el momento, la aptitud personalizada AmlSkill en Búsqueda de Azure AI solo es compatible con puntos de conexión de servicios web.

La otra restricción es que el punto de conexión debe ser un clúster de Azure Kubernetes Service (AKS). No se admiten instancias de contenedor.

Si tiene experiencia en crear y administrar clústeres de AKS, puede crear manualmente los clústeres en Azure Portal y hacer referencia a ellos al crear el punto de conexión. Sin embargo, una opción más sencilla es permitir que el Estudio de Machine Learning de Azure AI cree y administre automáticamente el clúster.

Si va a la sección de proceso del Estudio, puede crear clústeres de inferencia. El Estudio de AML le guiará en la elección del tamaño del clúster e incluso habilitará HTTPS y creará un nombre de dominio automáticamente. Tendrá el formato de location.cloudapp.azure.com:443.

Conexión de la aptitud personalizada de AML al punto de conexión

Con todo lo anterior en su sitio, necesita actualizar su servicio de Búsqueda de Azure AI. Los pasos para hacerlo son similares a los ejemplos que se muestran en este módulo, por lo que no detallaremos los detalles aquí, pero enumeraremos los pasos que se deben seguir.

  1. Primero, para enriquecer el índice de búsqueda, agregará un nuevo campo al índice para incluir la salida del modelo.
  2. Después, actualizará el conjunto de aptitudes de índice y agregará la aptitud personalizada #Microsoft.Skills.Custom.AmlSkill.
  3. Luego, cambiará el indizador para asignar la salida de la aptitud personalizada al campo que creó en el índice.
  4. El último paso es volver a ejecutar el indizador para enriquecer el índice con el modelo de AML.