Descripción de cómo compilar proyectos de clasificación de texto
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
- 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.