Envía solicitudes de etiquetado de texto

El Servicio de etiquetado de datos de AI Platform admite tres tipos de tareas de etiquetado de texto:

  • Tareas de clasificación: Los etiquetadores asignan una o más etiquetas a cada segmento de texto. Puedes especificar la cantidad de etiquetadores que etiquetan cada segmento de texto. Recomendamos que el número sea de cinco o menos. El Servicio de etiquetado de datos realiza una votación mayoritaria para determinar las etiquetas adecuadas.
  • Tareas de clasificación con opinión: La entrada de etiquetas general es la misma que en las tareas de clasificación de texto. Este tipo de etiquetado dejó de estar disponible en el Servicio de etiquetado de datos. Puedes ir a Cloud AI Platform unificado para aplicar este tipo de etiquetado.
  • Tareas de extracción de entidades: El etiquetador recibirá una lista de etiquetas y un segmento de texto (de hasta 100,000 caracteres), y seleccionará el lugar de inicio y fin de aquello a lo que hace referencia el texto para cada etiqueta. También tiene la opción de seleccionar “no incluido”. El Servicio de etiquetado de datos recopilará los índices del texto seleccionado para cada etiqueta.

La solicitud de etiquetado es una operación de larga duración. En la respuesta, se incluye el ID de la operación, que puedes usar para verificar el estado de la solicitud. Cuando se completa el etiquetado, la respuesta incluye el valor "done": true.

Ten en cuenta que ahora solo se admite texto en inglés.

Tareas de clasificación de texto

IU web

  1. Abre la IU del Servicio de etiquetado de datos.

  2. Selecciona Conjuntos de datos en el panel de navegación izquierdo.

    En la página Conjuntos de datos, se muestra el estado de los conjuntos de datos creados anteriormente para el proyecto actual.

  3. Haz clic en el nombre del conjunto de datos que deseas enviar para el etiquetado.

    Los conjuntos de datos con el estado Importación completa están disponibles para enviarse. En la columna Tipo de datos, se muestra si el conjunto de datos incluye imágenes, videos o texto.

  4. En la página Detalle del conjunto de datos, haz clic en el botón Crear tarea de etiquetado en la barra de título.

  5. En la página Nueva tarea de etiquetado, ingresa un nombre y una descripción para el conjunto de datos anotado.

    El annotated dataset es la versión de este conjunto de datos etiquetado de forma manual.

  6. En el menú desplegable Objetivo, selecciona el tipo de tarea de etiquetado que deseas realizar en este conjunto de datos.

    En la lista desplegable, se incluyen solo los objetivos disponibles para el tipo de datos de este conjunto de datos. Si no ves el objetivo que deseas, es probable que hayas seleccionado un conjunto de datos con un tipo de datos diferente. Cierra la página Nueva tarea de etiquetado y selecciona un conjunto de datos diferente.

  7. En el menú desplegable Conjunto de etiquetas, elige el conjunto de etiquetas que deseas que los etiquetadores apliquen a los elementos de datos de este conjunto.

    La lista desplegable incluye todos los conjuntos de etiquetas asociados con este proyecto. Debes elegir un conjunto.

  8. En el menú desplegable Instrucción, elige las instrucciones que deseas proporcionar a los etiquetadores que trabajen con este conjunto de datos.

    La lista desplegable incluye todas las instrucciones asociadas con este proyecto. Debes incluir instrucciones en la solicitud de etiquetado.

  9. En el menú desplegable Etiquetadores por elemento de datos, especifica cuántos etiquetadores revisarán cada elemento del conjunto de datos.

    El valor predeterminado es uno, pero puedes solicitar que tres o cinco etiquetadores etiqueten cada elemento.

  10. Haz clic en la casilla de verificación para confirmar que entiendes cómo se te cobrará por el etiquetado.

  11. Haz clic en Crear.

Línea de comandos

Configura las siguientes variables de entorno:
  1. La variable PROJECT_ID para el ID de tu proyecto de Google Cloud
  2. La variable DATASET_ID para el ID del conjunto de datos, a partir de la respuesta obtenida cuando creaste el conjunto de datos. El ID aparece al final del nombre completo del conjunto de datos:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME para el nombre del recurso de instrucción
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME para el nombre del recurso de conjunto de etiquetas
curl -X POST \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" \
  https://datalabeling.googleapis.com/v1beta1/projects/${PROJECT_ID}/datasets/${DATASET_ID}/text:label \
  -d '{
  "basicConfig": {
    "instruction": "${INSTRUCTION_RESOURCE_NAME}",
    "annotatedDatasetDisplayName": "curl_testing_annotated_dataset",
    "labelGroup": "test_label_group",
    "replica_count": 1
  },
  "feature": "TEXT_CLASSIFICATION",
  "textClassificationConfig": {
    "annotationSpecSet": "${ANNOTATION_SPEC_SET_RESOURCE_NAME}",
  },
}'

Deberías ver un resultado similar al siguiente. Puedes usar el ID de operación para obtener el estado de la tarea. Un ejemplo es obtener el estado de una operación.

{
  "name": "projects/data-labeling-codelab/operations/5c73dd6b_0000_2b34_a920_883d24fa2064",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.data-labeling.v1beta1.LabelTextClassificationOperationMetadata",
    "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c"
  }
}

Java

Antes de que puedas ejecutar este ejemplo de código, debes instalar las bibliotecas cliente de Java.
import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.datalabeling.v1beta1.AnnotatedDataset;
import com.google.cloud.datalabeling.v1beta1.DataLabelingServiceClient;
import com.google.cloud.datalabeling.v1beta1.DataLabelingServiceSettings;
import com.google.cloud.datalabeling.v1beta1.HumanAnnotationConfig;
import com.google.cloud.datalabeling.v1beta1.LabelOperationMetadata;
import com.google.cloud.datalabeling.v1beta1.LabelTextRequest;
import com.google.cloud.datalabeling.v1beta1.LabelTextRequest.Feature;
import com.google.cloud.datalabeling.v1beta1.SentimentConfig;
import com.google.cloud.datalabeling.v1beta1.TextClassificationConfig;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

class LabelText {

  // Start a Text Labeling Task
  static void labelText(
      String formattedInstructionName,
      String formattedAnnotationSpecSetName,
      String formattedDatasetName)
      throws IOException {
    // String formattedInstructionName = DataLabelingServiceClient.formatInstructionName(
    //      "YOUR_PROJECT_ID", "YOUR_INSTRUCTION_UUID");
    // String formattedAnnotationSpecSetName =
    //     DataLabelingServiceClient.formatAnnotationSpecSetName(
    //         "YOUR_PROJECT_ID", "YOUR_ANNOTATION_SPEC_SET_UUID");
    // String formattedDatasetName = DataLabelingServiceClient.formatDatasetName(
    //      "YOUR_PROJECT_ID", "YOUR_DATASET_UUID");


    DataLabelingServiceSettings settings =
        DataLabelingServiceSettings.newBuilder()
            .build();
    try (DataLabelingServiceClient dataLabelingServiceClient =
        DataLabelingServiceClient.create(settings)) {
      HumanAnnotationConfig humanAnnotationConfig =
          HumanAnnotationConfig.newBuilder()
              .setAnnotatedDatasetDisplayName("annotated_displayname")
              .setAnnotatedDatasetDescription("annotated_description")
              .setLanguageCode("en-us")
              .setInstruction(formattedInstructionName)
              .build();

      SentimentConfig sentimentConfig =
          SentimentConfig.newBuilder().setEnableLabelSentimentSelection(false).build();

      TextClassificationConfig textClassificationConfig =
          TextClassificationConfig.newBuilder()
              .setAnnotationSpecSet(formattedAnnotationSpecSetName)
              .setSentimentConfig(sentimentConfig)
              .build();

      LabelTextRequest labelTextRequest =
          LabelTextRequest.newBuilder()
              .setParent(formattedDatasetName)
              .setBasicConfig(humanAnnotationConfig)
              .setTextClassificationConfig(textClassificationConfig)
              .setFeature(Feature.TEXT_CLASSIFICATION)
              .build();

      OperationFuture<AnnotatedDataset, LabelOperationMetadata> operation =
          dataLabelingServiceClient.labelTextAsync(labelTextRequest);

      // You'll want to save this for later to retrieve your completed operation.
      // System.out.format("Operation Name: %s\n", operation.getName());

      // Cancel the operation to avoid charges when testing.
      dataLabelingServiceClient.getOperationsClient().cancelOperation(operation.getName());

    } catch (IOException | InterruptedException | ExecutionException e) {
      e.printStackTrace();
    }
  }
}

Tareas de extracción de entidades

IU web

  1. Abre la IU del Servicio de etiquetado de datos.

  2. Selecciona Conjuntos de datos en el panel de navegación izquierdo.

    En la página Conjuntos de datos, se muestra el estado de los conjuntos de datos creados anteriormente para el proyecto actual.

  3. Haz clic en el nombre del conjunto de datos que deseas enviar para el etiquetado.

    Los conjuntos de datos con el estado Importación completa están disponibles para enviarse. En la columna Tipo de datos, se muestra si el conjunto de datos incluye imágenes, videos o texto.

  4. En la página Detalle del conjunto de datos, haz clic en el botón Crear tarea de etiquetado en la barra de título.

  5. En la página Nueva tarea de etiquetado, ingresa un nombre y una descripción para el conjunto de datos anotado.

    El annotated dataset es la versión de este conjunto de datos etiquetado de forma manual.

  6. En el menú desplegable Objetivo, selecciona el tipo de tarea de etiquetado que deseas realizar en este conjunto de datos.

    En la lista desplegable, se incluyen solo los objetivos disponibles para el tipo de datos de este conjunto de datos. Si no ves el objetivo que deseas, es probable que hayas seleccionado un conjunto de datos con un tipo de datos diferente. Cierra la página Nueva tarea de etiquetado y selecciona un conjunto de datos diferente.

  7. En el menú desplegable Conjunto de etiquetas, elige el conjunto de etiquetas que deseas que los etiquetadores apliquen a los elementos de datos de este conjunto.

    La lista desplegable incluye todos los conjuntos de etiquetas asociados con este proyecto. Debes elegir un conjunto.

  8. En el menú desplegable Instrucción, elige las instrucciones que deseas proporcionar a los etiquetadores que trabajen con este conjunto de datos.

    La lista desplegable incluye todas las instrucciones asociadas con este proyecto. Debes incluir instrucciones en la solicitud de etiquetado.

  9. En el menú desplegable Etiquetadores por elemento de datos, especifica cuántos etiquetadores revisarán cada elemento del conjunto de datos.

    El valor predeterminado es uno, pero puedes solicitar que tres o cinco etiquetadores etiqueten cada elemento.

  10. Haz clic en la casilla de verificación para confirmar que entiendes cómo se te cobrará por el etiquetado.

  11. Haz clic en Crear.

Línea de comandos

Configura las siguientes variables de entorno:
  1. La variable PROJECT_ID para el ID de tu proyecto de Google Cloud
  2. La variable DATASET_ID para el ID del conjunto de datos, a partir de la respuesta obtenida cuando creaste el conjunto de datos. El ID aparece al final del nombre completo del conjunto de datos:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME para el nombre del recurso de instrucción
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME para el nombre del recurso de conjunto de etiquetas
curl -X POST \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" \
  https://datalabeling.googleapis.com/v1beta1/projects/${PROJECT_ID}/datasets/${DATASET_ID}/text:label \
  -d '{
  "basicConfig": {
    "instruction": "${INSTRUCTION_RESOURCE_NAME}",
    "annotatedDatasetDisplayName": "curl_testing_annotated_dataset",
    "labelGroup": "test_label_group",
    "replica_count": 1
  },
  "feature": "TEXT_ENTITY_EXTRACTION",
  "textEntityExtractionConfig": {
    "annotationSpecSet": "${ANNOTATION_SPEC_SET_RESOURCE_NAME}",
  },
}'

Deberías ver un resultado similar al siguiente. Puedes usar el ID de operación para obtener el estado de la tarea. Un ejemplo es obtener el estado de una operación.

{
  "name": "projects/data-labeling-codelab/operations/5c73dd6b_0000_2b34_a920_883d24fa2064",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.data-labeling.v1beta1.LabelTextEntityExtractionOperationMetadata",
    "dataset": "projects/data-labeling-codelab/datasets/5c73db3d_0000_23e0_a25b_94eb2c119c4c"
  }
}

Python

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

def label_text(
    dataset_resource_name, instruction_resource_name, annotation_spec_set_resource_name
):
    """Labels a text dataset."""
    from google.cloud import datalabeling_v1beta1 as datalabeling

    client = datalabeling.DataLabelingServiceClient()

    basic_config = datalabeling.HumanAnnotationConfig(
        instruction=instruction_resource_name,
        annotated_dataset_display_name="YOUR_ANNOTATED_DATASET_DISPLAY_NAME",
        label_group="YOUR_LABEL_GROUP",
        replica_count=1,
    )

    feature = datalabeling.LabelTextRequest.Feature.TEXT_ENTITY_EXTRACTION

    config = datalabeling.TextEntityExtractionConfig(
        annotation_spec_set=annotation_spec_set_resource_name
    )

    response = client.label_text(
        request={
            "parent": dataset_resource_name,
            "basic_config": basic_config,
            "feature": feature,
            "text_classification_config": config,
        }
    )

    print(f"Label_text operation name: {response.operation.name}")
    return response