Descripción de cómo compilar proyectos de clasificación de texto

Completado

Los proyectos de clasificación de texto personalizado son el área de trabajo en el que puede compilar, entrenar, mejorar e implementar el modelo de clasificación. Puede trabajar con el proyecto de dos maneras: a través de Language Studio y a través de la API de REST. En el laboratorio se usará la GUI Language Studio, pero la API de REST tiene la misma funcionalidad. Independientemente del método que prefiera, los pasos para desarrollar el modelo son los mismos.

Ciclo de vida del proyecto de Lenguaje de Azure AI

Diagram that shows a life cycle with steps to define labels, tag data, train model, view model, improve model, deploy model, and classify text.

  • Definir etiquetas: tras comprender los datos que desea clasificar, identifique las etiquetas posibles en las que desea clasificarlos. En el ejemplo de videojuego, las etiquetas serían "Acción", "Aventura", "Estrategia", etc.
  • Etiquetar los datos: etiquete los datos existentes y especifique la etiqueta o las etiquetas en las que se encuentra cada archivo. El etiquetado de datos es importante, ya que es cómo el modelo aprende a clasificar archivos futuros. El procedimiento recomendado es tener diferencias claras entre las etiquetas para evitar la ambigüedad y proporcionar buenos ejemplos de cada etiqueta para que el modelo aprenda. Por ejemplo, etiquetaríamos el juego "Quest for the Mine Brush" como "Aventura", y "Flight Trainer" como "Acción".
  • Entrenar el modelo: entrene el modelo con los datos etiquetados. El entrenamiento enseñará a nuestro modelo en qué género se debe etiquetar cada tipo de resumen de videojuegos.
  • Ver modelo: tras entrenar el modelo, vea sus resultados. El modelo se puntúa entre 0 y 1, según la precisión y la coincidencia de los datos probados. Tenga en cuenta qué género no funcionó bien.
  • Mejorar el modelo: para mejorar el modelo, vea qué clasificaciones no se pudieron evaluar en la etiqueta correcta, consulte la distribución de etiquetas y averigüe qué datos agregar para mejorar el rendimiento. Por ejemplo, podría encontrar que el modelo combina juegos de "Aventura" y "Estrategia". Intente encontrar más ejemplos de cada etiqueta para agregar al conjunto de datos para volver a entrenar al modelo.
  • Implementación del modelo: una vez que el modelo funcione como se desea, implemente el modelo para que esté disponible a través de la API. El modelo puede denominarse "GameGenres" y, una vez implementado, se puede usar para clasificar los resúmenes del juego.
  • Clasificar texto: use el modelo para clasificar texto. En el laboratorio se explica cómo usar la API y puede ver la referencia de API

Cómo dividir conjuntos de datos para el entrenamiento

Al etiquetar los datos, puede especifique qué conjunto de datos quiere que sea cada archivo:

  • Entrenamiento: el conjunto de datos de entrenamiento se usa para entrenar realmente el modelo. Los datos y etiquetas proporcionados se introducen en el algoritmo de aprendizaje automático para enseñar al modelo qué datos se deben clasificar en qué etiqueta. El conjunto de datos de entrenamiento será el mayor de los dos conjuntos de datos, que se recomienda que sea aproximadamente el 80 % de los datos etiquetados.
  • Pruebas: el conjunto de datos de prueba se etiqueta con los datos que se usan para comprobar el modelo después de entrenarlo. Azure toma los datos del conjunto de datos de prueba, los envía al modelo y compara la salida con la forma en que etiquetó los datos para determinar el rendimiento del modelo. El resultado de esa comparación es cómo se puntúa el modelo y le ayuda a saber cómo mejorar el rendimiento predictivo.

Durante el paso Entrenar el modelo, hay dos opciones para entrenar el modelo.

  • División automática : Azure toma todos los datos, los divide de forma aleatoria en los porcentajes especificados y los aplica en el entrenamiento del modelo. Esta opción es mejor cuando tiene un conjunto de datos mayor, los datos son naturalmente más coherentes o la distribución de los datos abarca las clases ampliamente.
  • División manual: se especifica de forma manual qué archivos deben estar en cada conjunto de datos. Cuando envíe el trabajo de formación, el servicio de lenguaje de Azure AI le indicará la división del conjunto de datos y la distribución. Esta división se usa mejor con conjuntos de datos más pequeños para asegurar que la distribución correcta de clases y variaciones en los datos están presentes para entrenar el modelo de forma correcta.

Para usar la división automática, coloque todos los archivos en el conjunto de datos de entrenamiento al etiquetar los datos (esta opción es el valor predeterminado). Para usar la división manual, especifique qué archivos deben estar en pruebas frente al entrenamiento durante el etiquetado de los datos.

Opciones de implementación

Lenguaje de Azure AI permite a cada proyecto crear tanto múltiples modelos como múltiples implementaciones, cada una con su propio nombre único. Las ventajas incluyen las capacidades siguientes:

  • Probar dos modelos en paralelo
  • Comparar el impacto de la división de conjuntos de datos en el rendimiento
  • Implementar varias versiones del modelo

Nota

Cada proyecto tiene un límite de diez nombres de implementación

Durante la implementación, puede elegir el nombre del modelo implementado, que se puede seleccionar al enviar una tarea de clasificación:

<...>
  "tasks": [
    {
      "kind": "CustomSingleLabelClassification",
      "taskName": "MyTaskName",
      "parameters": {
        "projectName": "MyProject",
        "deploymentName": "MyDeployment"
      }
    }
  ]
<...>

Mediante la API de REST

La API de REST disponible para el servicio de Lenguaje de Azure AI permite el desarrollo de la CLI de proyectos de Lenguaje de Azure AI del mismo modo que Language Studio proporciona una interfaz de usuario para crear proyectos. Language Studio se explora aún más en el laboratorio de este módulo.

Patrón de uso de la API

La API del servicio del lenguaje de Azure AI funciona de forma asíncrona para la mayoría de las llamadas. En cada paso se envía primero una solicitud al servicio y, después, se vuelve a comprobar con el servicio a través de una llamada posterior para obtener el estado o el resultado.

Con cada solicitud, se requiere un encabezado para autenticar la solicitud:

Clave Value
Ocp-Apim-Subscription-Key Clave para el recurso de lenguaje de Azure AI

Envío de la solicitud inicial

La dirección URL para enviar la solicitud varía según el paso en el que se encuentre, pero todas están prefijadas en el punto de conexión proporcionado por el recurso Lenguaje de Azure AI.

Por ejemplo, para entrenar un modelo, crearía una solicitud POST en la dirección URL que tendría un aspecto similar al siguiente:

<YOUR-ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/:train?api-version=<API-VERSION>
Marcador de posición Valor Ejemplo
<YOUR-ENDPOINT> El punto de conexión para su solicitud de API https://<your-custom-resource>.cognitiveservices.azure.com
<PROJECT-NAME> El nombre del proyecto (el valor distingue mayúsculas de minúsculas) myProject

El siguiente cuerpo se adjuntaría a la solicitud:

    {
        "modelLabel": "<MODEL-NAME>",
        "trainingConfigVersion": "<CONFIG-VERSION>",
        "evaluationOptions": {
            "kind": "percentage",
            "trainingSplitPercentage": 80,
            "testingSplitPercentage": 20
        }
    }
Clave Value
<YOUR-MODEL> Nombre del modelo.
trainingConfigVersion Versión del modelo que se va a usar para entrenar el modelo.
runValidation Valor booleano para ejecutar la validación en el conjunto de pruebas.
evaluationOptions Especifica las opciones de evaluación.
kind Especifica el tipo de división de datos. Puede ser percentage si usa una división automática o set si divide de forma manual el conjunto de datos
testingSplitPercentage Campo entero obligatorio si type es porcentaje. Especifica la división de pruebas.
trainingSplitPercentage Campo entero obligatorio si type es porcentaje. Especifica la división de entrenamiento.

La respuesta a la solicitud anterior será 202, lo que significa que la solicitud se realizó correctamente. Tome el valor location de los encabezados de respuesta, que tendrá un aspecto similar a la siguiente dirección URL:

<ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/train/jobs/<JOB-ID>?api-version=<API-VERSION>
Clave Value
<JOB-ID> Identificador de la solicitud

Esta dirección URL se usa en el paso siguiente para obtener el estado del entrenamiento.

Obtención del estado del entrenamiento

Para obtener el estado de entrenamiento, use la dirección URL del encabezado de la respuesta de solicitud para enviar una solicitud GET, con el mismo encabezado que proporciona nuestra clave de servicio de lenguaje de Azure AI para la autenticación. El cuerpo de respuesta será similar al siguiente JSON:

{
  "result": {
    "modelLabel": "<MODEL-NAME>",
    "trainingConfigVersion": "<CONFIG-VERSION>",
    "estimatedEndDateTime": "2023-05-18T15:47:58.8190649Z",
    "trainingStatus": {
      "percentComplete": 3,
      "startDateTime": "2023-05-18T15:45:06.8190649Z",
      "status": "running"
    },
    "evaluationStatus": {
      "percentComplete": 0,
      "status": "notStarted"
    }
  },
  "jobId": "<JOB-ID>",
  "createdDateTime": "2023-05-18T15:44:44Z",
  "lastUpdatedDateTime": "2023-05-18T15:45:48Z",
  "expirationDateTime": "2023-05-25T15:44:44Z",
  "status": "running"
}

El entrenamiento de un modelo puede tardar algún tiempo, por lo que, periódicamente, vuelva a comprobar esta dirección URL de estado hasta que la respuesta status devuelva succeeded. Una vez que el entrenamiento se haya realizado correctamente, puede ver, comprobar e implementar el modelo.

Consumo de un modelo implementado

El uso del modelo para clasificar texto sigue el mismo patrón descrito anteriormente, con una solicitud POST que envía el trabajo y una solicitud GET para recuperar los resultados.

Envío de texto para su clasificación

Para usar el modelo, envíe una solicitud POST al punto de conexión de análisis en la siguiente dirección URL:

<ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
Marcador de posición Valor Ejemplo
<YOUR-ENDPOINT> El punto de conexión para su solicitud de API https://<your-custom-resource>.cognitiveservices.azure.com

Importante

No olvide incluir la clave de recurso en el encabezado para Ocp-Apim-Subscription-Key

La siguiente estructura JSON se adjuntaría a la solicitud:

{
  "displayName": "Classifying documents",
  "analysisInput": {
    "documents": [
      {
        "id": "1",
        "language": "<LANGUAGE-CODE>",
        "text": "Text1"
      },
      {
        "id": "2",
        "language": "<LANGUAGE-CODE>",
        "text": "Text2"
      }
    ]
  },
  "tasks": [
     {
      "kind": "<TASK-REQUIRED>",
      "taskName": "<TASK-NAME>",
      "parameters": {
        "projectName": "<PROJECT-NAME>",
        "deploymentName": "<DEPLOYMENT-NAME>"
      }
    }
  ]
}
Clave Value
<TASK-REQUIRED> La tarea que solicita. La tarea es CustomMultiLabelClassification para proyectos de varias etiquetas o CustomSingleLabelClassification para proyectos de etiqueta única.
<LANGUAGE-CODE> El código del lenguaje, como en-us.
<TASK-NAME> Nombre de la tarea.
<PROJECT-NAME> Nombre del proyecto.
<DEPLOYMENT-NAME> Nombre de la implementación.

La respuesta a la solicitud anterior será 202, lo que significa que la solicitud se realizó correctamente. Busque el valor operation-location en los encabezados de respuesta, que tendrá un aspecto similar a la siguiente dirección URL:

<ENDPOINT>/language/analyze-text/jobs/<JOB-ID>?api-version=<API-VERSION>
Clave Value
<YOUR-ENDPOINT> El punto de conexión para su solicitud de API
<JOB-ID> Identificador de la solicitud

Esta dirección URL se usa para obtener los resultados de la tarea.

Obtención de los resultados de clasificación

Envíe una solicitud GET al punto de conexión de la solicitud anterior, con el mismo encabezado para la autenticación. El cuerpo de respuesta será similar al siguiente JSON:

{
  "createdDateTime": "2023-05-19T14:32:25.578Z",
  "displayName": "MyJobName",
  "expirationDateTime": "2023-05-19T14:32:25.578Z",
  "jobId": "xxxx-xxxxxx-xxxxx-xxxx",
  "lastUpdateDateTime": "2023-05-19T14:32:25.578Z",
  "status": "succeeded",
  "tasks": {
    "completed": 1,
    "failed": 0,
    "inProgress": 0,
    "total": 1,
    "items": [
      {
        "kind": "customSingleClassificationTasks",
        "taskName": "Classify documents",
        "lastUpdateDateTime": "2022-10-01T15:01:03Z",
        "status": "succeeded",
        "results": {
          "documents": [
            {
              "id": "<DOC-ID>",
              "class": [
                  {
                      "category": "Class_1",
                      "confidenceScore": 0.0551877357
                  }
              ],
              "warnings": []
            }
          ],
          "errors": [],
          "modelVersion": "2022-04-01"
        }
      }
    ]
  }
}

El resultado de la clasificación está dentro del objeto results de la matriz de elementos para cada documento enviado.