Membuat petunjuk untuk pemberi label manual

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

Layanan Pelabelan Data AI Platform mendukung petunjuk PDF:

  • Petunjuk PDF. Petunjuk PDF dapat memberikan arahan yang kompleks seperti contoh atau deskripsi positif dan negatif untuk setiap kasus. Format ini juga lebih mudah dibuat, 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 resource petunjuk.

Mendesain petunjuk yang baik

Petunjuk yang baik merupakan faktor terpenting untuk mendapatkan hasil yang baik dari pelabelan manual. Karena Andalah yang paling tahu kasus penggunaan Anda, beri tahu pemberi label manual tindakan apa yang diharapkan dari mereka. Berikut adalah beberapa pedoman terkait cara 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.

  • Anda harus menghindari 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 melabeli 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 pemberi label 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 minta label pada set data kecil terlebih dahulu, lalu sesuaikan petunjuk Anda berdasarkan apa yang Anda lihat dalam hasil yang Anda dapatkan.

File petunjuk yang baik harus mencakup bagian-bagian berikut:

  • Daftar label dan deskripsi: cantumkan semua label yang ingin digunakan dan jelaskan arti dari setiap label.
  • Contoh: Untuk setiap label, berikan minimal 3 contoh positif dan 1 contoh negatif. Contoh ini sebaiknya mencakup kasus yang berbeda.
  • Cakup kasus ekstrem. Perjelas sebanyak mungkin kasus ekstrem. Hal ini mengurangi kebutuhan pemberi label untuk menafsirkan label. Misalnya, jika Anda perlu menggambar kotak pembatas untuk satu orang, perjelas:
    • Apakah Anda memerlukan kotak pembatas untuk setiap orang jika ada beberapa orang?
    • Apakah Anda memerlukan kotak jika seseorang tersembunyi oleh objek lain?
    • Apakah Anda memerlukan kotak untuk seseorang yang hanya terlihat 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 apa saja yang dapat dicakup dalam petunjuk PDF. Pemberi label akan meninjau petunjuk ini sebelum memulai tugasnya.

Petunjuk PDF 1

Petunjuk PDF 2

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

Menambahkan petunjuk ke project

UI Web

  1. Buka UI Layanan Pelabelan Data.

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

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

  2. Klik tombol Create di kolom judul.

  3. Di halaman New Instruction, masukkan nama dan deskripsi untuk file petunjuk.

  4. Dari dropdown Jenis data, pilih jenis item data yang akan diberi label oleh pemberi label: gambar, video, atau teks.

  5. Di bagian Instructions location, masukkan jalur lengkap ke file petunjuk.

    Anda harus menentukan file petunjuk PDF. File harus berada di bucket Google Cloud Storage yang sama dengan set data dan set 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 set label bernama test_spec_set_display_name. Anda harus memiliki variabel lingkungan PROJECT_ID dan GCS_PDF_FILE_PATH yang ditentukan dan 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 project

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

Saat Anda mengirimkan 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.