Como enviar solicitações de rotulagem de textos

O Serviço de rotulagem de dados do AI Platform é compatível com três tipos de tarefas de rotulagem de textos:

  • Tarefas de classificação, em que os rotuladores atribuem um ou mais rótulos a cada segmento de texto. É possível especificar o número de rotuladores para rotular cada segmento de texto. Recomendamos que o número seja cinco ou menos. O Serviço de rotulagem de dados faz uma votação majoritária para determinar os rótulos adequados.
  • Tarefas de classificação com sentimento, em que a entrada geral de rótulos é igual às tarefas de classificação de texto. Esse tipo de rotulagem foi suspenso no Serviço de rotulagem de dados. É possível acessar o Cloud AI Platform unificado para esse tipo de rótulo.
  • Tarefas de extração de entidades, em que o rotulador receberá uma lista de rótulos e um segmento de texto (até 100.000 caracteres) e selecionará o local inicial e final sobre onde o texto está falando para cada rótulo. Ele também tem a opção de selecionar "não incluído". O Serviço de rotulagem de dados coletará os índices do texto selecionado para cada rótulo.

A solicitação de rotulagem é uma operação de longa duração. A resposta inclui o ID da operação, que pode ser usado para verificar o status da solicitação. Quando a rotulagem é concluída, a resposta contém o valor "done": true.

No momento, este serviço é compatível somente com textos em inglês.

Tarefas de classificação de textos

IU da Web

  1. Abra a IU do serviço de rotulagem de dados.

  2. Selecione Conjuntos de dados na navegação à esquerda.

    A página Conjuntos de dados mostra o status de conjuntos de dados criados anteriormente para o projeto atual.

  3. Clique no nome do conjunto de dados que você quer enviar para rotulagem.

    Os conjuntos de dados com status Importação concluída estão disponíveis para envio. A coluna Tipo de dados mostra se o conjunto de dados inclui imagens, vídeos ou texto.

  4. Na página Detalhes do conjunto de dados, clique no botão Criar tarefa de rotulagem na barra de título.

  5. Na página Nova tarefa de rotulagem, digite o nome e uma descrição do conjunto de dados anotado (annotated dataset).

    O annotated dataset é a versão desse conjunto de dados rotulado por rotuladores humanos.

  6. Na lista suspensa Objetivo, selecione o tipo de tarefa de rotulagem que você quer executar nesse conjunto de dados.

    A lista suspensa inclui apenas os objetivos disponíveis para o tipo de dados nesse conjunto de dados. Se você não encontrar o objetivo pretendido, isso provavelmente significa que você selecionou um conjunto com outro tipo de dados. Feche a página Nova tarefa de rotulagem e selecione um conjunto de dados diferente.

  7. Na lista suspensa Conjunto de rótulos, escolha o conjunto de rótulos que você quer que os rotuladores apliquem aos itens de dados neste conjunto.

    A lista suspensa inclui todos os conjuntos de rótulos associados a esse projeto. Você precisa escolher um conjunto.

  8. Na lista suspensa Instrução, escolha as instruções que você quer fornecer aos rotuladores que trabalham com esse conjunto de dados.

    A lista suspensa inclui todas as instruções associadas a esse projeto. Incluí-las na solicitação de rotulagem é obrigatório.

  9. Na lista suspensa Rotuladores por dado, especifique o número de rotuladores que analisará cada dado no conjunto.

    O padrão é um, mas é possível pedir que três ou cinco rotuladores atuem em cada dado.

  10. Marque a caixa de seleção para confirmar que você entendeu como a rotulagem será cobrada.

  11. Clique em Criar.

Linha de comando

Defina as seguintes variáveis de ambiente:
  1. Variável PROJECT_ID para o ID do projeto do Google Cloud.
  2. Variável DATASET_ID para o ID do conjunto de dados, a partir da resposta de quando você criou o conjunto de dados. O ID é exibido no fim do nome completo do conjunto de dados:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME, que é o nome do seu recurso de instruções.
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME, que é o nome do seu recurso de conjunto de rótulos.
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}",
  },
}'

Será exibido um código semelhante a este. É possível usar o ID da operação para saber o status da tarefa. Veja um exemplo nas informações sobre como receber o status de uma operação.

{
  "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 executar este código de exemplo, é preciso instalar as bibliotecas de cliente do 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();
    }
  }
}

Tarefas de extração de entidades

IU da Web

  1. Abra a IU do serviço de rotulagem de dados.

  2. Selecione Conjuntos de dados na navegação à esquerda.

    A página Conjuntos de dados mostra o status de conjuntos de dados criados anteriormente para o projeto atual.

  3. Clique no nome do conjunto de dados que você quer enviar para rotulagem.

    Os conjuntos de dados com status Importação concluída estão disponíveis para envio. A coluna Tipo de dados mostra se o conjunto de dados inclui imagens, vídeos ou texto.

  4. Na página Detalhes do conjunto de dados, clique no botão Criar tarefa de rotulagem na barra de título.

  5. Na página Nova tarefa de rotulagem, digite o nome e uma descrição do conjunto de dados anotado (annotated dataset).

    O annotated dataset é a versão desse conjunto de dados rotulado por rotuladores humanos.

  6. Na lista suspensa Objetivo, selecione o tipo de tarefa de rotulagem que você quer executar nesse conjunto de dados.

    A lista suspensa inclui apenas os objetivos disponíveis para o tipo de dados nesse conjunto de dados. Se você não encontrar o objetivo pretendido, isso provavelmente significa que você selecionou um conjunto com outro tipo de dados. Feche a página Nova tarefa de rotulagem e selecione um conjunto de dados diferente.

  7. Na lista suspensa Conjunto de rótulos, escolha o conjunto de rótulos que você quer que os rotuladores apliquem aos itens de dados neste conjunto.

    A lista suspensa inclui todos os conjuntos de rótulos associados a esse projeto. Você precisa escolher um conjunto.

  8. Na lista suspensa Instrução, escolha as instruções que você quer fornecer aos rotuladores que trabalham com esse conjunto de dados.

    A lista suspensa inclui todas as instruções associadas a esse projeto. Incluí-las na solicitação de rotulagem é obrigatório.

  9. Na lista suspensa Rotuladores por dado, especifique o número de rotuladores que analisará cada dado no conjunto.

    O padrão é um, mas é possível pedir que três ou cinco rotuladores atuem em cada dado.

  10. Marque a caixa de seleção para confirmar que você entendeu como a rotulagem será cobrada.

  11. Clique em Criar.

Linha de comando

Defina as seguintes variáveis de ambiente:
  1. Variável PROJECT_ID para o ID do projeto do Google Cloud.
  2. Variável DATASET_ID para o ID do conjunto de dados, a partir da resposta de quando você criou o conjunto de dados. O ID é exibido no fim do nome completo do conjunto de dados:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME, que é o nome do seu recurso de instruções.
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME, que é o nome do seu recurso de conjunto de rótulos.
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}",
  },
}'

Será exibido um código semelhante a este. É possível usar o ID da operação para saber o status da tarefa. Veja um exemplo nas informações sobre como receber o status de uma operação.

{
  "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 executar este código de exemplo, você precisa instalar as bibliotecas de cliente do 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