Meminta Layanan Pelabelan Data Vertex AI

Kualitas data pelatihan Anda sangat memengaruhi efektivitas model yang Anda buat dan kualitas prediksi yang ditampilkan dari model tersebut. Kunci untuk mendapatkan data pelatihan yang berkualitas tinggi adalah memastikan bahwa Anda memiliki item pelatihan yang secara akurat mewakili domain yang ingin Anda buat prediksinya, dan item pelatihan tersebut diberi label secara akurat.

Ada tiga cara untuk menetapkan label ke item data pelatihan:

  • Menambahkan item data ke set data Anda dengan label yang sudah ditetapkan, misalnya menggunakan set data yang tersedia secara komersial
  • Menetapkan label ke item data menggunakan Konsol Google Cloud
  • Meminta agar pemberi label manual menambahkan label ke item data

Tugas pelabelan data Vertex AI memungkinkan Anda bekerja dengan pemberi label manual guna menghasilkan label yang sangat akurat untuk kumpulan data yang dapat digunakan untuk melatih model machine learning.

Untuk informasi tentang harga pelabelan data, lihat Pelabelan data.

Untuk meminta pelabelan data oleh pemberi label manual, Anda perlu membuat tugas pelabelan data yang akan memberi pemberi label manual:

  • Set data yang berisi item data representatif yang akan diberi label
  • Daftar semua label yang mungkin untuk diterapkan ke item data
  • File PDF petunjuk untuk memandu pemberi label manual menjalankan tugas pelabelan

Dengan referensi ini, pemberi label manual akan menganotasi item dalam set data sesuai petunjuk Anda. Setelah mereka menyelesaikan tugasnya, Anda dapat menggunakan kumpulan anotasi tersebut untuk melatih model Vertex AI, atau mengekspor item data berlabel yang ingin digunakan di lingkungan machine learning lainnya.

Membuat set data

Anda meminta pemberi label manual melabeli item data dengan membuat set data dan mengimpor item data ke dalamnya. Item data tidak perlu diberi label. Jenis data (gambar, video, atau teks) dan objektif (misalnya klasifikasi atau pelacakan objek) menentukan jenis anotasi yang diterapkan oleh pemberi label manual pada item data tersebut.

Menyediakan label

Saat membuat tugas pelabelan data, Anda membuat daftar kumpulan label yang akan digunakan pemberi label manual untuk melabeli gambar Anda. Misalnya, jika ingin mengklasifikasi gambar berdasarkan apakah gambar tersebut berisi anjing atau kucing, Anda harus membuat set label dengan dua label: "Dog" dan "Cat". Selain itu, seperti tercantum dalam daftar berikut, Anda mungkin juga menginginkan label "Neutral" dan "Both".

Berikut adalah beberapa panduan untuk membuat set label yang berkualitas tinggi.

  • Buat setiap nama tampilan label menjadi kata yang bermakna, seperti "dog", "cat", atau "building". Jangan gunakan nama abstrak seperti "label1" dan "label2" atau akronim yang tidak dikenal. Semakin bermakna nama label, semakin mudah bagi pemberi label manual untuk menerapkannya secara akurat dan konsisten.
  • Pastikan label mudah dibedakan satu sama lain. Untuk tugas klasifikasi di mana satu label diterapkan ke setiap item data, cobalah untuk tidak menggunakan label yang artinya tumpang-tindih. Misalnya, jangan menggunakan label "Sports" dan "Baseball".
  • Untuk tugas klasifikasi, sebaiknya sertakan label dengan nama "other" atau "none" untuk digunakan pada data yang tidak cocok dengan label lain. Misalnya, jika label yang tersedia hanya "dog" dan "cat", pemberi label harus melabeli setiap gambar dengan salah satu dari kedua label tersebut. Model kustom biasanya lebih andal jika Anda menyertakan gambar selain anjing atau kucing dalam data pelatihannya.
  • Agar pemberi label dapat bekerja dengan efisien dan akurat, tentukan maksimal 20 label dalam set label. Anda dapat menyertakan hingga 100 label.

Membuat petunjuk

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

Petunjuk harus berupa file PDF. Petunjuk PDF dapat memberikan arahan yang kompleks seperti contoh atau deskripsi positif dan negatif untuk setiap kasus. PDF juga merupakan format yang praktis untuk memberikan petunjuk terkait tugas-tugas rumit seperti kotak pembatas gambar atau pelacakan objek video.

Tulis petunjuk, buat file PDF, dan simpan file PDF tersebut di bucket Cloud Storage.

Memberikan 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.

  • Hindari membuat instruksi yang terlalu panjang. Sebaiknya pemberi label dapat meninjau dan memahami petunjuk Anda dalam waktu 20 menit.

  • Petunjuk harus menjelaskan konsep tugas dan memberikan 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 atau beberapa kotak pembatas?

  • 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 pemberi label manual mengerjakan set data kecil terlebih dahulu, lalu sesuaikan petunjuk Anda berdasarkan seberapa cocok pekerjaan pemberi label dengan ekspektasi Anda.

File petunjuk yang baik mencakup bagian-bagian berikut:

  • Daftar label dan deskripsi: Daftar semua label yang ingin digunakan beserta arti dari setiap label.
  • Contoh: Untuk setiap label, berikan setidaknya tiga contoh positif dan satu contoh negatif. Contoh ini sebaiknya mencakup kasus yang berbeda.
  • Cakup kasus ekstrem. Agar pemberi label tidak perlu menebak-nebak label, perjelas sebanyak mungkin kasus ekstrem. Misalnya, jika Anda perlu menggambar kotak pembatas untuk satu orang, perjelas:
    • Jika ada beberapa orang, apakah kotak pembatas diperlukan untuk setiap orang?
    • Jika seseorang tersembunyi oleh objek lain, apakah kotak pembatas diperlukan?
    • Jika seseorang hanya terlihat sebagian dalam gambar, apakah kotak pembatas diperlukan?
    • Jika seseorang muncul dalam gambar atau lukisan, apakah kotak pembatas diperlukan?
  • 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.

Contoh berikut menunjukkan apa saja yang dapat dicakup dalam petunjuk PDF. Pemberi label akan meninjau petunjuk ini sebelum memulai tugasnya.

Petunjuk PDF 1.

Petunjuk PDF 2.

Membuat tugas pelabelan data

UI Web

Anda dapat meminta pelabelan data dari Konsol Google Cloud.

  1. Di Konsol Google Cloud, buka halaman Labeling tasks.

    Buka Labeling tasks

  2. Klik Create.

Panel New labeling task akan terbuka.

  1. Masukkan nama untuk tugas pelabelan.

  2. Pilih set data yang itemnya ingin diberi label.

    Jika membuka panel New labeling task dari layar detail set data, Anda tidak dapat memilih set data lain.

  3. Pastikan bahwa objektif sudah benar.

    Kotak Objective menampilkan objektif untuk set data yang dipilih, seperti yang ditentukan oleh set anotasi default-nya. Untuk mengubah objektif, pilih set anotasi yang berbeda.

  4. Pilih set anotasi yang akan digunakan untuk data berlabel.

    Label yang diterapkan oleh pemberi label manual akan disimpan ke set anotasi yang dipilih. Anda dapat memilih set anotasi yang ada atau membuat set baru. Jika membuat set baru, Anda harus memberinya nama.

  5. Tentukan apakah Anda akan menggunakan pembelajaran aktif atau tidak.

    Pembelajaran aktif mempercepat proses pelabelan dengan melabeli sebagian set data Anda secara manual, lalu menerapkan machine learning untuk melabeli data sisanya secara otomatis.

  6. Klik Continue.

  7. Masukkan label untuk diterapkan oleh pemberi label manual. Untuk penjelasan tentang cara membuat set label yang berkualitas tinggi, lihat Mendesain set label.

  8. Klik Lanjutkan.

  9. Masukkan jalur ke petunjuk bagi pemberi label manual. Petunjuk harus berupa file PDF yang disimpan di bucket Cloud Storage. Untuk informasi tentang cara membuat petunjuk yang berkualitas tinggi, baca Mendesain petunjuk untuk pemberi label manual.

  10. Klik Lanjutkan.

  11. Pilih apakah Anda akan menggunakan pemberi label yang dikelola Google atau Menyediakan pemberi label sendiri.

    • Jika Anda memilih untuk menggunakan pemberi label yang dikelola Google, klik kotak centang untuk mengonfirmasi bahwa Anda telah membaca panduan harga untuk memahami biaya pelabelan.

    • Jika menyediakan pemberi label sendiri, Anda harus membuat grup pemberi label dan mengelola aktivitas mereka menggunakan DataCompute Console. Jika tidak, pilih grup pemberi label yang akan digunakan untuk tugas pelabelan ini.

      Pilih grup pemberi label yang sudah ada dari menu drop-down, atau pilih New labeler group, lalu masukkan nama grup dan daftar alamat email yang dipisahkan koma untuk pengelola grup tersebut di teks kotak di bawah menu drop-down. Klik kotak centang untuk memberikan akses kepada pengelola yang ditentukan agar dapat melihat informasi pelabelan data Anda.

  12. Tentukan jumlah pemberi label yang Anda inginkan untuk meninjau setiap item.

    Secara default, satu pemberi label manual akan menganotasi setiap item data. Namun, Anda dapat meminta agar beberapa pemberi label menganotasi dan meninjau setiap item. Pilih jumlah pemberi label dari kotak Specialist per data item.

  13. Klik Start Task.

    Jika Start Task tidak tersedia, tinjau halaman dalam panel New labeling task untuk memastikan bahwa Anda telah memasukkan semua informasi yang diperlukan.

Anda dapat meninjau progres tugas pelabelan data di Konsol Google Cloud dari halaman Labeling tasks.

Buka Labeling tasks

Halaman ini menampilkan status setiap tugas pelabelan yang diminta. Saat kolom Progress menampilkan 100%, set data yang terkait akan diberi label dan siap untuk melatih model.

REST

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: project ID Anda
  • DISPLAY_NAME: Nama untuk tugas pelabelan data
  • DATASET_ID: ID set data yang berisi item yang akan diberi label
  • LABELERS: Jumlah pemberi label manual yang Anda inginkan untuk meninjau setiap item data; nilai yang valid adalah 1, 3, dan 5.
  • INSTRUCTIONS: Jalur ke file PDF petunjuk bagi pemberi label manual; file ini harus berada di bucket Cloud Storage yang dapat diakses dari project Anda
  • INPUT_SCHEMA_URI: Jalur file skema untuk jenis item data:
    • Klasifikasi gambar label tunggal:
      gs://google-cloud-aiplatform/schema/dataset/ioformat/image_classification_single_label_io_format_1.0.0.yaml
    • Klasifikasi gambar multi-label:
      gs://google-cloud-aiplatform/schema/dataset/ioformat/image_classification_multi_label_io_format_1.0.0.yaml
    • Pendeteksian objek gambar:
      gs://google-cloud-aiplatform/schema/dataset/ioformat/image_bounding_box_io_format_1.0.0.yaml
    • Klasifikasi teks label tunggal:
      gs://google-cloud-aiplatform/schema/dataset/ioformat/text_classification_single_label_io_format_1.0.0.yaml
    • Klasifikasi teks multi-label:
      gs://google-cloud-aiplatform/schema/dataset/ioformat/text_classification_multi_label_io_format_1.0.0.yaml
    • Ekstraksi entity teks:
      gs://google-cloud-aiplatform/schema/dataset/ioformat/text_extraction_io_format_1.0.0.yaml
    • Analisis sentimen teks:
      gs://google-cloud-aiplatform/schema/dataset/ioformat/text_sentiment_io_format_1.0.0.yaml
    • Klasifikasi video:
      gs://google-cloud-aiplatform/schema/dataset/ioformat/video_classification_io_format_1.0.0.yaml
    • Pelacakan objek video:
      gs://google-cloud-aiplatform/schema/dataset/ioformat/video_object_tracking_io_format_1.0.0.yaml
  • LABEL_LIST: Daftar string yang dipisahkan koma, mengenumerasi label yang tersedia untuk diterapkan ke item data
  • ANNOTATION_SET: Nama set anotasi untuk data berlabel

Metode HTTP dan URL:

POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/dataLabelingJobs

Meminta isi JSON:

{
   "displayName":"DISPLAY_NAME",
   "datasets":"DATASET_ID",
   "labelerCount":LABELERS,
   "instructionUri":"INSTRUCTIONS",
   "inputsSchemaUri":"INPUT_SCHEMA_URI",
   "inputs": {
     "annotation_specs": [LABEL_LIST]
   },
   "annotationLabels": {
     "aiplatform.googleapis.com/annotation_set_name": "ANNOTATION_SET"
   }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan menerima respons JSON yang mirip dengan berikut ini:

{
  "name": "projects/PROJECT_ID/locations/us-central1/dataLabelingJobs/JOB_ID",
  "displayName": "DISPLAY_NAME",
  "datasets": [
    "DATASET_ID"
  ],
  "labelerCount": LABELERS,
  "instructionUri": "INSTRUCTIONS",
  "inputsSchemaUri": "INPUT_SCHEMA_URI",
  "inputs": {
    "annotationSpecs": [
      LABEL_LIST
    ]
  },
  "state": "JOB_STATE_PENDING",
  "labelingProgress": "0",
  "createTime": "2020-05-30T23:13:49.121133Z",
  "updateTime": "2020-05-30T23:13:49.121133Z",
  "savedQuery": {
    "name": "projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID/savedQueries/ANNOTATION_SET_ID"
  },
  "annotationSpecCount": 2
}
Responsnya adalah DataLabelingJob. Anda dapat memeriksa progres tugas dengan memantau elemen "labelingProgress", yang nilainya menunjukkan persentase penyelesaian.

Java

Contoh kode lainnya:


import com.google.cloud.aiplatform.v1.DataLabelingJob;
import com.google.cloud.aiplatform.v1.DatasetName;
import com.google.cloud.aiplatform.v1.JobServiceClient;
import com.google.cloud.aiplatform.v1.JobServiceSettings;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.protobuf.Value;
import com.google.protobuf.util.JsonFormat;
import com.google.type.Money;
import java.io.IOException;
import java.util.Map;

public class CreateDataLabelingJobSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "YOUR_PROJECT_ID";
    String displayName = "YOUR_DATA_LABELING_DISPLAY_NAME";
    String datasetId = "YOUR_DATASET_ID";
    String instructionUri =
        "gs://YOUR_GCS_SOURCE_BUCKET/path_to_your_data_labeling_source/file.pdf";
    String inputsSchemaUri = "YOUR_INPUT_SCHEMA_URI";
    String annotationSpec = "YOUR_ANNOTATION_SPEC";
    createDataLabelingJob(
        project, displayName, datasetId, instructionUri, inputsSchemaUri, annotationSpec);
  }

  static void createDataLabelingJob(
      String project,
      String displayName,
      String datasetId,
      String instructionUri,
      String inputsSchemaUri,
      String annotationSpec)
      throws IOException {
    JobServiceSettings jobServiceSettings =
        JobServiceSettings.newBuilder()
            .setEndpoint("us-central1-aiplatform.googleapis.com:443")
            .build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (JobServiceClient jobServiceClient = JobServiceClient.create(jobServiceSettings)) {
      String location = "us-central1";
      LocationName locationName = LocationName.of(project, location);

      String jsonString = "{\"annotation_specs\": [ " + annotationSpec + "]}";
      Value.Builder annotationSpecValue = Value.newBuilder();
      JsonFormat.parser().merge(jsonString, annotationSpecValue);

      DatasetName datasetName = DatasetName.of(project, location, datasetId);
      DataLabelingJob dataLabelingJob =
          DataLabelingJob.newBuilder()
              .setDisplayName(displayName)
              .setLabelerCount(1)
              .setInstructionUri(instructionUri)
              .setInputsSchemaUri(inputsSchemaUri)
              .addDatasets(datasetName.toString())
              .setInputs(annotationSpecValue)
              .putAnnotationLabels(
                  "aiplatform.googleapis.com/annotation_set_name", "my_test_saved_query")
              .build();

      DataLabelingJob dataLabelingJobResponse =
          jobServiceClient.createDataLabelingJob(locationName, dataLabelingJob);

      System.out.println("Create Data Labeling Job Response");
      System.out.format("\tName: %s\n", dataLabelingJobResponse.getName());
      System.out.format("\tDisplay Name: %s\n", dataLabelingJobResponse.getDisplayName());
      System.out.format("\tDatasets: %s\n", dataLabelingJobResponse.getDatasetsList());
      System.out.format("\tLabeler Count: %s\n", dataLabelingJobResponse.getLabelerCount());
      System.out.format("\tInstruction Uri: %s\n", dataLabelingJobResponse.getInstructionUri());
      System.out.format("\tInputs Schema Uri: %s\n", dataLabelingJobResponse.getInputsSchemaUri());
      System.out.format("\tInputs: %s\n", dataLabelingJobResponse.getInputs());
      System.out.format("\tState: %s\n", dataLabelingJobResponse.getState());
      System.out.format("\tLabeling Progress: %s\n", dataLabelingJobResponse.getLabelingProgress());
      System.out.format("\tCreate Time: %s\n", dataLabelingJobResponse.getCreateTime());
      System.out.format("\tUpdate Time: %s\n", dataLabelingJobResponse.getUpdateTime());
      System.out.format("\tLabels: %s\n", dataLabelingJobResponse.getLabelsMap());
      System.out.format(
          "\tSpecialist Pools: %s\n", dataLabelingJobResponse.getSpecialistPoolsList());
      for (Map.Entry<String, String> annotationLabelMap :
          dataLabelingJobResponse.getAnnotationLabelsMap().entrySet()) {
        System.out.println("\tAnnotation Level");
        System.out.format("\t\tkey: %s\n", annotationLabelMap.getKey());
        System.out.format("\t\tvalue: %s\n", annotationLabelMap.getValue());
      }
      Money money = dataLabelingJobResponse.getCurrentSpend();

      System.out.println("\tCurrent Spend");
      System.out.format("\t\tCurrency Code: %s\n", money.getCurrencyCode());
      System.out.format("\t\tUnits: %s\n", money.getUnits());
      System.out.format("\t\tNanos: %s\n", money.getNanos());
    }
  }
}

Python

Contoh kode lainnya:

from google.cloud import aiplatform
from google.protobuf import json_format
from google.protobuf.struct_pb2 import Value

def create_data_labeling_job_sample(
    project: str,
    display_name: str,
    dataset_name: str,
    instruction_uri: str,
    inputs_schema_uri: str,
    annotation_spec: str,
    location: str = "us-central1",
    api_endpoint: str = "us-central1-aiplatform.googleapis.com",
):
    # The AI Platform services require regional API endpoints.
    client_options = {"api_endpoint": api_endpoint}
    # Initialize client that will be used to create and send requests.
    # This client only needs to be created once, and can be reused for multiple requests.
    client = aiplatform.gapic.JobServiceClient(client_options=client_options)
    inputs_dict = {"annotation_specs": [annotation_spec]}
    inputs = json_format.ParseDict(inputs_dict, Value())

    data_labeling_job = {
        "display_name": display_name,
        # Full resource name: projects/{project_id}/locations/{location}/datasets/{dataset_id}
        "datasets": [dataset_name],
        # labeler_count must be 1, 3, or 5
        "labeler_count": 1,
        "instruction_uri": instruction_uri,
        "inputs_schema_uri": inputs_schema_uri,
        "inputs": inputs,
        "annotation_labels": {
            "aiplatform.googleapis.com/annotation_set_name": "my_test_saved_query"
        },
    }
    parent = f"projects/{project}/locations/{location}"
    response = client.create_data_labeling_job(
        parent=parent, data_labeling_job=data_labeling_job
    )
    print("response:", response)

Langkah selanjutnya