Descripción de cómo compilar proyectos de clasificación de texto
Los proyectos de clasificación de texto personalizados son el área de trabajo para 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 rest. Language Studio es la GUI que se usará en el laboratorio, pero la API 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
- Definir etiquetas: comprender los datos en los que desea clasificar, identifique las etiquetas posibles en las que desea clasificar. En nuestro ejemplo de videojuegos, nuestras etiquetas serían "Acción", "Aventura", "Estrategia", etc.
- Etiquetar datos: Asigna una etiqueta o etiquetas a los datos existentes, especificando bajo qué etiqueta o etiquetas se clasifica cada archivo. El etiquetado de datos es importante, ya que es cómo el modelo aprenderá a clasificar archivos futuros. El procedimiento recomendado es tener diferencias claras entre etiquetas para evitar ambigüedad y proporcionar buenos ejemplos de cada etiqueta del modelo para aprender. Por ejemplo, etiquetaríamos el juego "Quest for the Mine Brush" como "Adventure" y "Flight Trainer" como "Action".
- Entrenar modelo: entrene el modelo con los datos etiquetados. El entrenamiento enseñará a nuestro modelo qué tipos de resúmenes de videojuegos deben etiquetarse como qué género.
- Ver modelo: Después de 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. Tome nota de 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ías encontrar que tu modelo confunde los juegos "aventura" y "estrategia". Intente encontrar más ejemplos de cada etiqueta para agregar al conjunto de datos para volver a entrenar el modelo.
- Implementar modelo: una vez que el modelo realice el rendimiento deseado, implemente el modelo para que esté disponible a través de la API. Es posible que el modelo se llame "GameGenres" y, una vez implementado, se puede usar para clasificar resúmenes de juego.
- Clasificar texto: use el modelo para clasificar texto. El laboratorio 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 especificar qué conjunto de datos desea 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 tomará los datos del conjunto de datos de prueba, lo enviará al modelo y comparará la salida con la etiqueta de 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 modelo , hay dos opciones para entrenar el modelo.
- División automática : Azure toma todos los datos, los divide en los porcentajes especificados aleatoriamente y los aplica al 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 ampliamente las clases.
- División manual : especifique manualmente qué archivos deben estar en cada conjunto de datos. Al enviar el trabajo de entrenamiento, el servicio de lenguaje de Azure 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 asegurarse de que la distribución correcta de las clases y la variación de los datos están presentes para entrenar correctamente el modelo.
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 y entrenamiento al etiquetar los datos.
Opciones de implementación
El lenguaje de Azure permite a cada proyecto crear varios modelos y varias implementaciones, cada una con su propio nombre único. Entre las ventajas se incluyen la capacidad de:
- Prueba de dos modelos en paralelo
- Comparación del impacto de la división de conjuntos de datos en el rendimiento
- Implementación de 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"
}
}
]
<...>
Uso de la API REST
La API REST disponible para el servicio de lenguaje de Azure permite el desarrollo de la CLI de proyectos de lenguaje de Azure de la misma manera que Language Studio proporciona una interfaz de usuario para compilar proyectos. Language Studio se explora más a fondo en el laboratorio de este módulo.
Patrón de uso de la API
La API del servicio de lenguaje de Azure funciona de forma asincrónica para la mayoría de las llamadas. En cada paso, primero se envía una solicitud al servicio y, a continuación, 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 | Importancia |
|---|---|
Ocp-Apim-Subscription-Key |
Clave del recurso de lenguaje de Azure |
Enviar solicitud inicial
La dirección URL para enviar la solicitud varía según el paso en el que te encuentres, pero todas tienen el prefijo con el endpoint proporcionado por tu recurso de Azure Language.
Por ejemplo, para entrenar un modelo, crearía un 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 | Importancia | Ejemplo |
|---|---|---|
<YOUR-ENDPOINT> |
Punto de conexión de la 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 contenido se adjuntaría a la solicitud.
{
"modelLabel": "<MODEL-NAME>",
"trainingConfigVersion": "<CONFIG-VERSION>",
"evaluationOptions": {
"kind": "percentage",
"trainingSplitPercentage": 80,
"testingSplitPercentage": 20
}
}
| Clave | Importancia |
|---|---|
<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 manualmente el conjunto de datos. |
testingSplitPercentage |
Campo entero obligatorio solo si type es porcentaje. Especifica la división de pruebas. |
trainingSplitPercentage |
Campo entero obligatorio solo si type es porcentaje. Especifica la división de entrenamiento. |
La respuesta a la solicitud anterior será , 202lo que significa que la solicitud se realizó correctamente. Tome el location valor 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 | Importancia |
|---|---|
<JOB-ID> |
Identificador de la solicitud |
Esta dirección URL se usa en el paso siguiente para obtener el estado de entrenamiento.
Obtener estado de 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 para la autenticación. El cuerpo de la 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.
Enviar texto para la 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 | Importancia | Ejemplo |
|---|---|---|
<YOUR-ENDPOINT> |
Punto de conexión de la 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 | Importancia |
|---|---|
<TASK-REQUIRED> |
Qué tarea estás solicitando. La tarea es CustomMultiLabelClassification para varios proyectos de etiqueta 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á , 202lo que significa que la solicitud se realizó correctamente. Busque el operation-location valor 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 | Importancia |
|---|---|
<YOUR-ENDPOINT> |
Punto de conexión de la 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 resultados de clasificación
Envíe una solicitud GET al punto de conexión desde la solicitud anterior, con el mismo encabezado para la autenticación. El cuerpo de la 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 de results la matriz de elementos, para cada documento enviado.