Evaluar modelos

Después de entrenar un modelo, AutoML Natural Language utiliza elementos del conjunto de PRUEBA para evaluar la calidad y exactitud del nuevo modelo.

AutoML Natural Language proporciona un conjunto agregado de métricas de evaluación que indican el desempeño general del modelo, así como métricas de evaluación para cada etiqueta de categoría, que indican el desempeño del modelo para esa etiqueta.

  • AuPRC: Área bajo la curva de Precisión/Recuperación, también denominada "precisión promedio". Por lo general, es entre 0.5 y 1.0. Valores más altos indican modelos más exactos.

  • Las Curvas del umbral de confianza muestran de qué manera los diferentes umbrales de confidencia podrían afectar las tasas de precisión, recuperación, y de verdaderos y falsos positivos. Lee acerca de la precisión y recuperación.

  • Matriz de confusión: solo está presente en modelos de una sola etiqueta por documento. Representa el porcentaje de veces que se predijo cada etiqueta para cada etiqueta en el conjunto de entrenamiento durante la evaluación. Idealmente, la etiqueta one se asigna solo a documentos clasificados con la etiqueta one, etc., por lo que una matriz perfecta se vería de la siguiente manera:

    100  0   0   0
     0  100  0   0
     0   0  100  0
     0   0   0  100
    

    En el ejemplo anterior, si un documento se clasificó como one, pero el modelo predijo two, entonces la primera fila se verá de la siguiente manera:

    99  1  0  0
    

    Puedes encontrar más información si buscas "aprendizaje automático de la matriz de confusión".

    AutoML Natural Language crea la matriz de confusión para hasta 10 etiquetas. Si tienes más de 10 etiquetas, la matriz incluye las 10 etiquetas con mayor confusión (predicciones incorrectas).

Usa estos datos para evaluar la preparación de tu modelo. La confusión alta, la puntuación baja de AUC o las puntuaciones de precisión y recuperación bajos pueden indicar que tu modelo necesita datos de entrenamiento adicionales o tiene etiquetas incoherentes. Una puntuación AUC muy alta y una precisión y recuperación perfectas pueden indicar que los datos son demasiado fáciles y pueden no generalizarse bien.

Si no estás satisfecho con los niveles de calidad, puedes volver a realizar los pasos anteriores para mejorar la calidad:

  • Considera agregar más documentos a cualquier etiqueta de calidad baja.
  • Es posible que necesites agregar diferentes tipos de documentos. Por ejemplo, documentos más largos o más cortos, o documentos de diferentes autores que utilizan diferentes palabras o estilos.
  • Puedes limpiar las etiquetas.
  • Considera eliminar las etiquetas por completo si no tiene suficientes documentos de entrenamiento.

Una vez que hayas hecho los cambios, entrena y evalúa un nuevo modelo hasta que alcances un nivel de calidad lo suficientemente alto.

IU web

  1. Abre la IU de AutoML Natural Language y haz clic en el ícono de la bombilla en la barra de navegación izquierda para mostrar los modelos disponibles.

    Para ver los modelos de un proyecto diferente, selecciónalo de la lista desplegable en la parte superior derecha de la barra de título.

  2. Haz clic en la fila del modelo que deseas evaluar.

  3. Si es necesario, haz clic en la pestaña Evaluate (Evaluar) justo debajo de la barra de título.

    Si completaste el entrenamiento para el modelo, AutoML Natural Language mostrará las métricas de evaluación.

    Evaluar página

  4. Para ver las métricas de una etiqueta específica, selecciona el nombre de la etiqueta de la lista que aparece en la parte inferior de la página.

Línea de comandos

  • Reemplaza model-name con el nombre completo de tu modelo, según la respuesta que obtuviste cuando creaste el modelo. El nombre completo tiene el formato: projects/{project-id}/locations/us-central1/models/{model-id}
curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" \
  https://automl.googleapis.com/v1beta1/model-name/modelEvaluations

La respuesta incluye el recurso ModelEvaluation para cada etiqueta (identificado por su annotationSpecId), además de uno para el modelo en su totalidad (identificado con un annotationSpecId vacío).

{
  "modelEvaluation": [
    {
      "name": "projects/434039606874/locations/us-central1/models/7537307368641647584/modelEvaluations/9009741181387603448",
      "annotationSpecId": "17040929661974749",
      "classificationMetrics": {
        "auPrc": 0.99772006,
        "baseAuPrc": 0.21706384,
        "evaluatedExamplesCount": 377,
        "confidenceMetricsEntry": [
          {
            "recall": 1,
            "precision": -1.3877788e-17,
            "f1Score": -2.7755576e-17,
            "recallAt1": 0.9761273,
            "precisionAt1": 0.9761273,
            "f1ScoreAt1": 0.9761273
          },
          {
            "confidenceThreshold": 0.05,
            "recall": 0.997,
            "precision": 0.867,
            "f1Score": 0.92746675,
            "recallAt1": 0.9761273,
            "precisionAt1": 0.9761273,
            "f1ScoreAt1": 0.9761273
          },
          {
            "confidenceThreshold": 0.1,
            "recall": 0.995,
            "precision": 0.905,
            "f1Score": 0.9478684,
            "recallAt1": 0.9761273,
            "precisionAt1": 0.9761273,
            "f1ScoreAt1": 0.9761273
          },
          {
            "confidenceThreshold": 0.15,
            "recall": 0.992,
            "precision": 0.932,
            "f1Score": 0.96106446,
            "recallAt1": 0.9761273,
            "precisionAt1": 0.9761273,
            "f1ScoreAt1": 0.9761273
          },
          {
            "confidenceThreshold": 0.2,
            "recall": 0.989,
            "precision": 0.951,
            "f1Score": 0.96962786,
            "recallAt1": 0.9761273,
            "precisionAt1": 0.9761273,
            "f1ScoreAt1": 0.9761273
          },
          {
            "confidenceThreshold": 0.25,
            "recall": 0.987,
            "precision": 0.957,
            "f1Score": 0.9717685,
            "recallAt1": 0.9761273,
            "precisionAt1": 0.9761273,
            "f1ScoreAt1": 0.9761273
          },
        ...
        ],
      },
      "createTime": "2018-04-30T23:06:14.746840Z"
    },
    {
      "name": "projects/434039606874/locations/us-central1/models/7537307368641647584/modelEvaluations/9009741181387603671",
      "annotationSpecId": "1258823357545045636",
      "classificationMetrics": {
        "auPrc": 0.9972302,
        "baseAuPrc": 0.1883289,
      ...
      },
      "createTime": "2018-04-30T23:06:14.649260Z"
    }
  ]
}

Para obtener solo las métricas de evaluación para una etiqueta en particular, agrega /{modelEvaluation-name} a la solicitud anterior, con el valor completo de "name" obtenido en la respuesta.

Python

Antes de que puedas ejecutar este ejemplo de código, debes instalar las bibliotecas cliente de Python.

  • El parámetro model_id es el ID de tu modelo. El ID es el último elemento del nombre de tu modelo. Por ejemplo, si el nombre de tu modelo es projects/434039606874/locations/us-central1/models/3745331181667467569, entonces el ID de tu modelo es 3745331181667467569.
# TODO(developer): Uncomment and set the following variables
# project_id = 'PROJECT_ID_HERE'
# compute_region = 'COMPUTE_REGION_HERE'
# model_id = 'MODEL_ID_HERE'
# filter_ = 'filter expression here'

from google.cloud import automl_v1beta1 as automl

client = automl.AutoMlClient()

# Get the full path of the model.
model_full_id = client.model_path(project_id, compute_region, model_id)

# List all the model evaluations in the model by applying filter.
response = client.list_model_evaluations(model_full_id, filter_)

print("List of model evaluations:")
for element in response:
    print(element)

Java

/**
 * Demonstrates using the AutoML client to display model evaluation.
 *
 * @param projectId the Id of the project.
 * @param computeRegion the Region name.
 * @param modelId the Id of the model.
 * @param filter the Filter expression.
 * @throws IOException on Input/Output errors.
 */
public static void displayEvaluation(
    String projectId, String computeRegion, String modelId, String filter) throws IOException {
  // Instantiates a client
  AutoMlClient client = AutoMlClient.create();

  // Get the full path of the model.
  ModelName modelFullId = ModelName.of(projectId, computeRegion, modelId);

  // List all the model evaluations in the model by applying.
  ListModelEvaluationsRequest modelEvaluationsrequest =
      ListModelEvaluationsRequest.newBuilder()
          .setParent(modelFullId.toString())
          .setFilter(filter)
          .build();

  // Iterate through the results.
  String modelEvaluationId = "";
  for (ModelEvaluation element :
      client.listModelEvaluations(modelEvaluationsrequest).iterateAll()) {
    if (element.getAnnotationSpecId() != null) {
      modelEvaluationId = element.getName().split("/")[element.getName().split("/").length - 1];
    }
  }

  // Resource name for the model evaluation.
  ModelEvaluationName modelEvaluationFullId =
      ModelEvaluationName.of(projectId, computeRegion, modelId, modelEvaluationId);

  // Get a model evaluation.
  ModelEvaluation modelEvaluation = client.getModelEvaluation(modelEvaluationFullId);

  ClassificationEvaluationMetrics classMetrics =
      modelEvaluation.getClassificationEvaluationMetrics();
  List<ConfidenceMetricsEntry> confidenceMetricsEntries =
      classMetrics.getConfidenceMetricsEntryList();

  // Showing model score based on threshold of 0.5
  for (ConfidenceMetricsEntry confidenceMetricsEntry : confidenceMetricsEntries) {
    if (confidenceMetricsEntry.getConfidenceThreshold() == 0.5) {
      System.out.println("Precision and recall are based on a score threshold of 0.5");
      System.out.println(
          String.format("Model Precision: %.2f ", confidenceMetricsEntry.getPrecision() * 100)
              + '%');
      System.out.println(
          String.format("Model Recall: %.2f ", confidenceMetricsEntry.getRecall() * 100) + '%');
      System.out.println(
          String.format("Model F1 Score: %.2f ", confidenceMetricsEntry.getF1Score() * 100)
              + '%');
      System.out.println(
          String.format(
                  "Model Precision@1: %.2f ", confidenceMetricsEntry.getPrecisionAt1() * 100)
              + '%');
      System.out.println(
          String.format("Model Recall@1: %.2f ", confidenceMetricsEntry.getRecallAt1() * 100)
              + '%');
      System.out.println(
          String.format("Model F1 Score@1: %.2f ", confidenceMetricsEntry.getF1ScoreAt1() * 100)
              + '%');
    }
  }
}

Node.js

  const automl = require(`@google-cloud/automl`);
  const util = require(`util`);

  const client = new automl.v1beta1.AutoMlClient();

  /**
   * TODO(developer): Uncomment the following line before running the sample.
   */
  // const projectId = `The GCLOUD_PROJECT string, e.g. "my-gcloud-project"`;
  // const computeRegion = `region-name, e.g. "us-central1"`;
  // const modelId = `id of the model, e.g. “ICN12345”`;
  // const modelEvaluationId = `Id of your model evaluation, e.g “ICN12345”

  // Get the full path of the model evaluation.
  const modelEvaluationFullId = client.modelEvaluationPath(
    projectId,
    computeRegion,
    modelId,
    modelEvaluationId
  );

  // Get complete detail of the model evaluation.
  const [response] = await client.getModelEvaluation({
    name: modelEvaluationFullId,
  });
  console.log(util.inspect(response, false, null));

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

AutoML Natural Language
¿Necesitas ayuda? Visita nuestra página de asistencia.