Anfragen zur Labelerstellung für Text senden

Der AI Platform Data Labeling Service unterstützt drei Aufgabentypen zur Erstellung von Labels für Text:

  • Klassifizierungsaufgaben, bei denen Labelersteller jedem Textsegment ein oder mehrere Labels zuweisen. Sie können die Anzahl der Labelersteller angeben, die jedes Textsegment mit Labels versehen sollen. Es sollten maximal fünf sein. Data Labeling Service bestimmt dann die zu verwendenden Labels nach dem Mehrheitsprinzip.
  • Klassifizierungsaufgaben mit Sentimentanalyse, bei denen der Vorgang der Labelerstellung derselbe wie bei Textklassifizierungsaufgaben ist. Diese Art von Labelerstellung wurde in Data Labeling Service eingestellt. Für diese Art von Labelerstellung können Sie zur einheitlichen Cloud AI Platform wechseln.
  • Entitätsextraktionsaufgaben, bei denen Labelersteller eine Liste von Labels sowie ein Textsegment mit bis zu 100.000 Zeichen erhalten und für jedes Label die Start- und Endposition der betreffenden Textstelle auswählen. Die Labelersteller können auch "not included" (nicht enthalten) angeben. Der Data Labeling Service erfasst dann für jedes Label die Indexe des ausgewählten Textes.

Die Anfrage zur Labelerstellung ist ein lang andauernder Vorgang. Die Antwort enthält die Vorgangs-ID, mit der Sie den Status der Anfrage prüfen können. Wenn die Labelerstellung abgeschlossen ist, enthält die Antwort den Wert "done": true.

Beachten Sie, dass bisher nur Text in Englisch unterstützt wird.

Textklassifizierungsaufgaben

Web-UI

  1. Rufen Sie die Data Labeling Service-UI auf.

  2. Wählen Sie im linken Navigationsbereich Datasets aus.

    Auf der Seite Datasets wird der Status zuvor erstellter Datasets für das aktuelle Projekt angezeigt.

  3. Klicken Sie auf den Namen des Datasets, das Sie für die Labelerstellung senden möchten.

    Es können alle Datasets mit dem Status Import complete (Import abgeschlossen) gesendet werden. In der Spalte Datentyp wird angezeigt, ob das Dataset Bilder, Videos oder Text enthält.

  4. Klicken Sie in der Titelleiste der Seite Dataset-Detail auf die Schaltfläche Labeling-Aufgabe erstellen.

  5. Geben Sie auf der Seite Neue Labeling-Aufgabe einen Namen und eine Beschreibung für das mit Anmerkungen versehene Dataset ein.

    annotated dataset ist die Version des Datasets, das von menschlichen Labelerstellern hinzugefügt wurde.

  6. Wählen Sie in der Drop-down-Liste Ziel den gewünschten Typ der Aufgabe zur Labelerstellung aus.

    Die Drop-down-Liste enthält nur die Ziele, die für den Datentyp in diesem Dataset verfügbar sind. Wenn Sie das gewünschte Ziel nicht sehen, bedeutet das wahrscheinlich, dass Sie ein Dataset mit einem anderen Datentyp ausgewählt haben. Schließen Sie in diesem Fall die Seite Neue Labeling-Aufgabe und wählen Sie ein anderes Dataset aus.

  7. Wählen Sie in der Drop-down-Liste Label set (Labelsatz) den Labelsatz aus, der von den Labelerstellern auf die Datenelemente in diesem Satz angewendet werden soll.

    Die Drop-down-Liste enthält alle Labelsätze, die diesem Projekt zugeordnet sind. Sie müssen einen Satz auswählen.

  8. Wählen Sie in der Drop-down-Liste Instruction (Anleitung) die Anleitung aus, die Sie den Labelerstellern für dieses Dataset zur Verfügung stellen möchten.

    Die Drop-down-Liste enthält alle Anleitungen, die diesem Projekt zugeordnet sind. In der Anfrage zur Labelerstellung müssen immer Anweisungen enthalten sein.

  9. Geben Sie in der Drop-down-Liste Labelersteller pro Datenelement an, wie viele Labelersteller die einzelnen Elemente im Dataset jeweils mit Labels versehen sollen.

    Die Standardeinstellung ist ein Labelersteller. Sie können aber auch drei oder fünf Labelersteller für jedes Element anfordern.

  10. Klicken Sie auf das Kästchen, um zu bestätigen, dass Sie nachvollziehen können, wie Ihnen die Labelerstellung in Rechnung gestellt wird.

  11. Klicken Sie auf Create (Erstellen).

Befehlszeile

Legen Sie die folgenden Umgebungsvariablen fest:
  1. PROJECT_ID für Ihre Google Cloud-Projekt-ID.
  2. DATASET_ID für die ID Ihres Datasets aus der Antwort, die Sie beim Erstellen des Datasets erhalten haben. Die ID wird am Ende des vollständigen Dataset-Namens angezeigt:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME für den Namen Ihrer Anleitungsressource.
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME für den Namen Ihrer Labelsatz-Ressource.
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}",
  },
}'

Die Ausgabe sieht in etwa so aus: Sie können den Status der Aufgabe anhand der Vorgangs-ID abrufen. Hier finden Sie ein Beispiel dafür, wie Sie den Status eines Vorgangs abrufen.

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

Für dieses Codebeispiel müssen die Java-Clientbibliotheken installiert sein.
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();
    }
  }
}

Entitätsextraktionsaufgaben

Web-UI

  1. Rufen Sie die Data Labeling Service-UI auf.

  2. Wählen Sie im linken Navigationsbereich Datasets aus.

    Auf der Seite Datasets wird der Status zuvor erstellter Datasets für das aktuelle Projekt angezeigt.

  3. Klicken Sie auf den Namen des Datasets, das Sie für die Labelerstellung senden möchten.

    Es können alle Datasets mit dem Status Import complete (Import abgeschlossen) gesendet werden. In der Spalte Datentyp wird angezeigt, ob das Dataset Bilder, Videos oder Text enthält.

  4. Klicken Sie in der Titelleiste der Seite Dataset-Detail auf die Schaltfläche Labeling-Aufgabe erstellen.

  5. Geben Sie auf der Seite Neue Labeling-Aufgabe einen Namen und eine Beschreibung für das mit Anmerkungen versehene Dataset ein.

    annotated dataset ist die Version des Datasets, das von menschlichen Labelerstellern hinzugefügt wurde.

  6. Wählen Sie in der Drop-down-Liste Ziel den gewünschten Typ der Aufgabe zur Labelerstellung aus.

    Die Drop-down-Liste enthält nur die Ziele, die für den Datentyp in diesem Dataset verfügbar sind. Wenn Sie das gewünschte Ziel nicht sehen, bedeutet das wahrscheinlich, dass Sie ein Dataset mit einem anderen Datentyp ausgewählt haben. Schließen Sie in diesem Fall die Seite Neue Labeling-Aufgabe und wählen Sie ein anderes Dataset aus.

  7. Wählen Sie in der Drop-down-Liste Label set (Labelsatz) den Labelsatz aus, der von den Labelerstellern auf die Datenelemente in diesem Satz angewendet werden soll.

    Die Drop-down-Liste enthält alle Labelsätze, die diesem Projekt zugeordnet sind. Sie müssen einen Satz auswählen.

  8. Wählen Sie in der Drop-down-Liste Instruction (Anleitung) die Anleitung aus, die Sie den Labelerstellern für dieses Dataset zur Verfügung stellen möchten.

    Die Drop-down-Liste enthält alle Anleitungen, die diesem Projekt zugeordnet sind. In der Anfrage zur Labelerstellung müssen immer Anweisungen enthalten sein.

  9. Geben Sie in der Drop-down-Liste Labelersteller pro Datenelement an, wie viele Labelersteller die einzelnen Elemente im Dataset jeweils mit Labels versehen sollen.

    Die Standardeinstellung ist ein Labelersteller. Sie können aber auch drei oder fünf Labelersteller für jedes Element anfordern.

  10. Klicken Sie auf das Kästchen, um zu bestätigen, dass Sie nachvollziehen können, wie Ihnen die Labelerstellung in Rechnung gestellt wird.

  11. Klicken Sie auf Create (Erstellen).

Befehlszeile

Legen Sie die folgenden Umgebungsvariablen fest:
  1. PROJECT_ID für Ihre Google Cloud-Projekt-ID.
  2. DATASET_ID für die ID Ihres Datasets aus der Antwort, die Sie beim Erstellen des Datasets erhalten haben. Die ID wird am Ende des vollständigen Dataset-Namens angezeigt:

    projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID
  3. INSTRUCTION_RESOURCE_NAME für den Namen Ihrer Anleitungsressource.
  4. ANNOTATION_SPEC_SET_RESOURCE_NAME für den Namen Ihrer Labelsatz-Ressource.
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}",
  },
}'

Die Ausgabe sieht in etwa so aus: Sie können den Status der Aufgabe anhand der Vorgangs-ID abrufen. Hier finden Sie ein Beispiel dafür, wie Sie den Status eines Vorgangs abrufen.

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

Für dieses Codebeispiel müssen die Python-Clientbibliotheken installiert sein.

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