Membuat petunjuk untuk pemberi label manusia

Petunjuk memberikan informasi kepada pemberi label manual tentang cara menerapkan label ke data Anda. Petunjuk berisi sampel data berlabel dan arahan eksplisit lainnya.

AI Platform Data Labeling Service mendukung petunjuk PDF:

  • Petunjuk PDF. Petunjuk PDF dapat memberikan petunjuk yang canggih seperti contoh atau deskripsi positif dan negatif untuk setiap kasus. Selain itu, Anda juga akan lebih praktis dalam membuat, terutama untuk beberapa tugas rumit, seperti kotak pembatas gambar atau pelacakan objek video.

Sebuah project dapat memiliki beberapa kumpulan petunjuk, yang masing-masing digunakan untuk permintaan Layanan Pelabelan Data yang berbeda. Anda bisa mendapatkan daftar petunjuk yang tersedia dan menghapus petunjuk yang tidak lagi diperlukan. Informasi selengkapnya dapat ditemukan di halaman referensi petunjuk.

Mendesain instruksi yang baik

Petunjuk yang baik merupakan faktor terpenting untuk mendapatkan hasil yang baik dari pelabelan manual. Karena Andalah yang paling memahami kasus penggunaan Anda, Anda perlu memberi tahu pemberi label manusia apa yang Anda ingin mereka lakukan. Berikut beberapa pedoman untuk membuat petunjuk yang baik:

  • Pemberi label manual tidak memiliki pengetahuan tentang domain Anda. Pembedaan yang Anda minta untuk dilakukan pemberi label harus mudah dipahami oleh seseorang yang tidak familier dengan kasus penggunaan Anda.

  • Sebaiknya hindari membuat instruksi yang terlalu panjang. Sebaiknya pemberi label dapat meninjau dan memahaminya dalam waktu 20 menit.

  • Petunjuk harus menjelaskan konsep tugas serta detail tentang cara memberi label pada data. Misalnya, untuk tugas kotak pembatas, jelaskan bagaimana Anda ingin pemberi label menggambar kotak pembatas. Apakah kotaknya harus rapat atau longgar? Jika ada beberapa instance objek, apakah mereka harus menggambar satu kotak pembatas besar atau beberapa kotak yang lebih kecil?

  • Jika petunjuk Anda memiliki set label yang terkait, semua label dalam set tersebut harus dicakup. Nama label dalam petunjuk harus sama dengan nama dalam set label.

  • Biasanya diperlukan beberapa iterasi untuk membuat petunjuk yang baik. Sebaiknya buat set data kecil yang diberi label terlebih dahulu, lalu sesuaikan instruksi Anda berdasarkan apa yang Anda lihat di hasil yang Anda dapatkan kembali.

File petunjuk yang baik harus menyertakan bagian-bagian berikut:

  • Daftar dan deskripsi label: cantumkan semua label yang ingin Anda gunakan dan jelaskan arti setiap label.
  • Contoh: Untuk setiap label, berikan setidaknya 3 contoh positif dan 1 contoh negatif. Contoh ini sebaiknya mencakup kasus yang berbeda.
  • Cakup kasus ekstrem. Klarifikasi sebanyak mungkin kasus ekstrem. Hal ini mengurangi kebutuhan pemberi label untuk menafsirkan label. Misalnya, jika Anda perlu menggambar kotak pembatas untuk seseorang, sebaiknya jelaskan:
    • Apakah Anda memerlukan kotak untuk setiap orang jika ada beberapa orang?
    • Apakah Anda memerlukan boks jika ada orang yang terhalang?
    • Apakah Anda memerlukan kotak untuk orang yang ditampilkan sebagian dalam gambar?
    • Apakah Anda memerlukan kotak untuk orang dalam gambar atau lukisan?
  • Jelaskan cara menambahkan anotasi. Contoh:
    • Untuk kotak pembatas, apakah kotaknya harus rapat atau longgar?
    • Untuk ekstraksi entity teks, di mana entity yang diminati sebaiknya dimulai dan diakhiri?
  • Klarifikasi tentang label. Jika dua label mirip atau mudah tercampur, berikan contoh untuk memperjelas perbedaannya.

Membuat petunjuk

Petunjuk PDF

Contoh di bawah menunjukkan hal-hal yang disertakan dalam petunjuk PDF. Pemberi label akan meninjau petunjuk ini sebelum memulai tugasnya.

Petunjuk PDF 1

Petunjuk PDF 2

Anda dapat membuat instruksi dengan membuat Google Slide, lalu mengekspor slide tersebut sebagai file PDF.

Menambahkan instruksi ke project

UI Web

  1. Buka Data Labeling Service UI.

    Halaman Petunjuk menampilkan status petunjuk yang dibuat sebelumnya untuk project saat ini.

    Untuk menambahkan petunjuk bagi project lain, pilih project dari menu drop-down di kanan atas kolom judul.

  2. Klik tombol Buat di kolom judul.

  3. Di halaman Petunjuk Baru, masukkan nama dan deskripsi untuk file petunjuk.

  4. Dari drop-down Jenis data, pilih jenis item data yang akan diberi label: gambar, video, atau teks.

  5. Di bagian Lokasi petunjuk, masukkan jalur lengkap ke file petunjuk.

    Anda harus mencantumkan file instruksi PDF. File harus berada di bucket Google Cloud Storage yang sama dengan set data dan label.

  6. Klik Buat petunjuk.

    Anda akan kembali ke halaman daftar Petunjuk. Petunjuk Anda akan menampilkan status sedang berlangsung saat sedang diimpor.

Command line

Contoh berikut membuat kumpulan label bernama test_spec_set_display_name. Anda harus menentukan variabel lingkungan PROJECT_ID dan GCS_PDF_FILE_PATH serta mengarah ke project ID Google Cloud dan URI Cloud Storage PDF yang ingin Anda gunakan.
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}/instructions \
     -d '{
         "instruction": {
             "displayName": "curl_testing_instruction",
             "description": "instruction for curl commands testing",
             "dataType": "IMAGE",
           "pdfInstruction": {
                 "gcsFileUri": "${GCS_PDF_FILE_PATH}"
           }
         },
     }'

Anda akan melihat output yang mirip dengan berikut ini:

{
  "name": "projects/data-labeling-codelab/instructions/5c73dbc1_0000_23e0_a25b_94eb2c119c4c"
}

Python

Sebelum dapat menjalankan contoh kode ini, Anda harus menginstal Library Klien Python.

PdfInstruction harus diberikan. Untuk petunjuk jenis data lainnya, ganti dataType dari "IMAGE" ke jenis data yang sesuai.

def create_instruction(project_id, data_type, instruction_gcs_uri):
    """Creates a data labeling PDF instruction for the given Google Cloud
    project. The PDF file should be uploaded to the project in
    Google Cloud Storage.
    """
    from google.cloud import datalabeling_v1beta1 as datalabeling

    client = datalabeling.DataLabelingServiceClient()

    project_path = f"projects/{project_id}"

    pdf_instruction = datalabeling.PdfInstruction(gcs_file_uri=instruction_gcs_uri)

    instruction = datalabeling.Instruction(
        display_name="YOUR_INSTRUCTION_DISPLAY_NAME",
        description="YOUR_DESCRIPTION",
        data_type=data_type,
        pdf_instruction=pdf_instruction,
    )

    operation = client.create_instruction(
        request={"parent": project_path, "instruction": instruction}
    )

    result = operation.result()

    # The format of the resource name:
    # project_id/{project_id}/instruction/{instruction_id}
    print(f"The instruction resource name: {result.name}")
    print(f"Display name: {result.display_name}")
    print(f"Description: {result.description}")
    print("Create time:")
    print(f"\tseconds: {result.create_time.timestamp_pb().seconds}")
    print(f"\tnanos: {result.create_time.timestamp_pb().nanos}")
    print(f"Data type: {datalabeling.DataType(result.data_type).name}")
    print("Pdf instruction:")
    print(f"\tGcs file uri: {result.pdf_instruction.gcs_file_uri}\n")

    return result

Java

Sebelum dapat menjalankan contoh kode ini, Anda harus menginstal Library Klien Java.

PdfInstruction harus diberikan. Untuk petunjuk jenis data lainnya, ganti dataType dari "IMAGE" ke jenis data yang sesuai.

import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.datalabeling.v1beta1.CreateInstructionMetadata;
import com.google.cloud.datalabeling.v1beta1.CreateInstructionRequest;
import com.google.cloud.datalabeling.v1beta1.DataLabelingServiceClient;
import com.google.cloud.datalabeling.v1beta1.DataLabelingServiceSettings;
import com.google.cloud.datalabeling.v1beta1.DataType;
import com.google.cloud.datalabeling.v1beta1.Instruction;
import com.google.cloud.datalabeling.v1beta1.PdfInstruction;
import com.google.cloud.datalabeling.v1beta1.ProjectName;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

class CreateInstruction {

  // Create a instruction for a dataset.
  static void createInstruction(String projectId, String pdfUri) throws IOException {
    // String projectId = "YOUR_PROJECT_ID";
    // String pdfUri = "gs://YOUR_BUCKET_ID/path_to_pdf_or_csv";

    DataLabelingServiceSettings settings =
        DataLabelingServiceSettings.newBuilder()
            .build();
    try (DataLabelingServiceClient dataLabelingServiceClient =
        DataLabelingServiceClient.create(settings)) {
      ProjectName projectName = ProjectName.of(projectId);

      // There are two types of instructions: CSV (CsvInstruction) or PDF (PdfInstruction)
      PdfInstruction pdfInstruction = PdfInstruction.newBuilder().setGcsFileUri(pdfUri).build();

      Instruction instruction =
          Instruction.newBuilder()
              .setDisplayName("YOUR_INSTRUCTION_DISPLAY_NAME")
              .setDescription("YOUR_DESCRIPTION")
              .setDataType(DataType.IMAGE) // DataTypes: AUDIO, IMAGE, VIDEO, TEXT
              .setPdfInstruction(pdfInstruction) // .setCsvInstruction() or .setPdfInstruction()
              .build();

      CreateInstructionRequest createInstructionRequest =
          CreateInstructionRequest.newBuilder()
              .setInstruction(instruction)
              .setParent(projectName.toString())
              .build();

      OperationFuture<Instruction, CreateInstructionMetadata> operation =
          dataLabelingServiceClient.createInstructionAsync(createInstructionRequest);

      Instruction result = operation.get();

      System.out.format("Name: %s\n", result.getName());
      System.out.format("DisplayName: %s\n", result.getDisplayName());
      System.out.format("Description: %s\n", result.getDescription());
      System.out.format("GCS SOURCE URI: %s\n", result.getPdfInstruction().getGcsFileUri());
    } catch (IOException | InterruptedException | ExecutionException e) {
      e.printStackTrace();
    }
  }
}

Memperbarui petunjuk dalam sebuah project

Untuk memperbarui petunjuk, perbarui file petunjuk, lalu upload ulang file seperti yang dijelaskan dalam Menambahkan petunjuk ke project.

Saat Anda mengirim tugas pelabelan data, layanan akan mengambil snapshot file petunjuk dan menggunakannya untuk mengarahkan pelabelan data yang dilakukan oleh tugas tersebut. Hal ini mencegah layanan menampilkan hasil yang tidak konsisten jika Anda memperbarui petunjuk saat tugas pelabelan data sedang berlangsung. Jika Anda memperbarui petunjuk, kirimkan tugas pelabelan data baru untuk menggunakan petunjuk baru.