提交文本标签请求

AI Platform Data Labeling Service 支持三种类型的文本标签任务:

  • 分类任务 - 标签添加者为每个文本段分配一个或多个标签。您可以指定为每个文本段加标签的标签添加者人数。我们建议不要超过 5 人。Data Labeling Service 会根据多数人的选择确定适当的标签。
  • 带有情感的分类任务 - 整体标签输入与文本分类任务相同。这种类型的标签在 Data Labeling Service 中已被弃用。您可以跳转到统一的 Cloud AI Platform 以处理这种类型的标签。
  • 实体提取任务 - 系统会向标签添加者提供一个标签列表和一个文本段(最多 100000 个字符),他们将选择每个标签所对应的文本的开始和结束位置。他们还可以选择“不包含在内”。Data Labeling Service 将为每个标签收集所选文本的索引。

标签请求是一项长时间运行的操作。响应中包含的操作 ID 可用于检查请求的状态。标签添加完成后,响应会包含值 "done": true

请注意,目前仅支持英文文本。

文本分类任务

网页界面

  1. 打开数据标签服务界面

  2. 从左侧导航栏中选择数据集

    数据集页面会显示之前为当前项目创建的数据集的状态。

  3. 点击要提交以便加标签的数据集的名称。

    状态为“导入完成”的数据集可供提交。数据类型列显示数据集包含的是图片、视频还是文本。

  4. 数据集详情页面上,点击标题栏中的创建标签任务按钮。

  5. 新建标签任务页面上,为带有注释的数据集输入名称和描述。

    annotated dataset 是添加标签的人员对该数据集添加标签后的版本。

  6. 目标下拉列表中,选择要对此数据集执行的标签任务类型。

    该下拉列表仅包含可用于此数据集中数据类型的目标。如果您没有看到所需的目标,则可能是因为您选择了包含其他类型数据的数据集。请关闭新建标签任务页面,然后选择其他数据集。

  7. 标签集下拉列表中,选择您希望标签添加者将其应用到此数据集中的数据项的标签集。

    该下拉列表包含与此项目关联的所有标签集。您必须选择一个标签集。

  8. 说明下拉列表中,选择要向处理此数据集的标签添加者提供的说明。

    该下拉列表包含与此项目关联的所有instructions。您必须在标签请求中添加说明。

  9. 每个数据项的标签添加者数量下拉列表中,指定要查看该数据集中每一项的标签添加者数。

    默认值为一位,但您可以请求安排三位或五位标签添加者为每一项加标签。

  10. 点击复选框以确认您了解如何为加标签操作付费。

  11. 点击创建

命令行

设置以下环境变量:
  1. PROJECT_ID 变量设置为您的 Google Cloud 项目 ID。
  2. DATASET_ID 变量设置为您的数据集 ID(来自创建数据集时的响应)。该 ID 显示在完整数据集名称的末尾:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME 设置为说明资源的名称。
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME 设置为标签集资源的名称。
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}",
  },
}'

您应该会看到类似如下所示的输出。可以使用操作 ID 来获取任务的状态。如需示例,请参阅获取操作状态

{
  "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

必须先安装 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();
    }
  }
}

实体提取任务

网页界面

  1. 打开数据标签服务界面

  2. 从左侧导航栏中选择数据集

    数据集页面会显示之前为当前项目创建的数据集的状态。

  3. 点击要提交以便加标签的数据集的名称。

    状态为“导入完成”的数据集可供提交。数据类型列显示数据集包含的是图片、视频还是文本。

  4. 数据集详情页面上,点击标题栏中的创建标签任务按钮。

  5. 新建标签任务页面上,为带有注释的数据集输入名称和描述。

    annotated dataset 是添加标签的人员对该数据集添加标签后的版本。

  6. 目标下拉列表中,选择要对此数据集执行的标签任务类型。

    该下拉列表仅包含可用于此数据集中数据类型的目标。如果您没有看到所需的目标,则可能是因为您选择了包含其他类型数据的数据集。请关闭新建标签任务页面,然后选择其他数据集。

  7. 标签集下拉列表中,选择您希望标签添加者将其应用到此数据集中的数据项的标签集。

    该下拉列表包含与此项目关联的所有标签集。您必须选择一个标签集。

  8. 说明下拉列表中,选择要向处理此数据集的标签添加者提供的说明。

    该下拉列表包含与此项目关联的所有instructions。您必须在标签请求中添加说明。

  9. 每个数据项的标签添加者数量下拉列表中,指定要查看该数据集中每一项的标签添加者数。

    默认值为一位,但您可以请求安排三位或五位标签添加者为每一项加标签。

  10. 点击复选框以确认您了解如何为加标签操作付费。

  11. 点击创建

命令行

设置以下环境变量:
  1. PROJECT_ID 变量设置为您的 Google Cloud 项目 ID。
  2. DATASET_ID 变量设置为您的数据集 ID(来自创建数据集时的响应)。该 ID 显示在完整数据集名称的末尾:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME 设置为说明资源的名称。
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME 设置为标签集资源的名称。
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}",
  },
}'

您应该会看到类似如下所示的输出。可以使用操作 ID 来获取任务的状态。如需示例,请参阅获取操作状态

{
  "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

在运行此代码示例之前,您必须先安装 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