Memilih jenis tugas penyematan

Model penyematan Vertex AI dapat menghasilkan penyematan yang dioptimalkan untuk berbagai jenis tugas, seperti pengambilan dokumen, pertanyaan dan jawaban, serta verifikasi fakta. Jenis tugas adalah label yang mengoptimalkan penyematan yang dihasilkan model berdasarkan kasus penggunaan yang Anda inginkan. Dokumen ini menjelaskan cara memilih jenis tugas yang optimal untuk penyematan Anda.

Model yang didukung

Jenis tugas didukung oleh model berikut:

  • textembedding-gecko@003
  • text-embedding-004
  • text-embedding-005
  • text-multilingual-embedding-002

Manfaat jenis tugas

Jenis tugas dapat meningkatkan kualitas penyematan yang dihasilkan oleh model penyematan.

Pertanyaan dan jawabannya tidak mirip secara semantik
Gambar 1. Pertanyaan dan jawabannya tidak mirip secara semantik, yang berarti penyematan tidak akan otomatis menampilkan hubungannya.

Misalnya, saat membuat sistem Retrieval Augmented Generation (RAG), desain umum adalah menggunakan penyematan teks dan Vector Search untuk melakukan penelusuran kemiripan. Dalam beberapa kasus, hal ini dapat menyebabkan penurunan kualitas penelusuran, karena pertanyaan dan jawabannya tidak mirip secara semantik. Misalnya, pertanyaan seperti "Kenapa langit berwarna biru?" dan jawabannya "Hamburan sinar matahari menyebabkan warna biru", memiliki arti yang sangat berbeda sebagai pernyataan, yang berarti bahwa sistem RAG tidak akan otomatis mengenali hubungannya, seperti yang ditunjukkan pada gambar 1. Tanpa jenis tugas, developer RAG harus melatih model mereka untuk mempelajari hubungan antara kueri dan jawaban yang memerlukan keterampilan dan pengalaman data science lanjutan, atau menggunakan ekspansi kueri berbasis LLM atau HyDE yang dapat menyebabkan latensi dan biaya tinggi.

Jenis tugas menempatkan pertanyaan dan jawaban lebih dekat di ruang penyematan
Gambar 2. Jenis tugas mengoptimalkan penyematan untuk tugas tertentu. Dalam hal ini, pertanyaan dan jawaban disatukan dalam ruang penyematan.

Jenis tugas memungkinkan Anda membuat penyematan yang dioptimalkan untuk tugas tertentu, sehingga menghemat waktu dan biaya yang diperlukan untuk mengembangkan penyematan khusus tugas Anda sendiri. Penyematan yang dihasilkan untuk kueri "Mengapa langit berwarna biru?" dan jawabannya "Hamburan sinar matahari menyebabkan warna biru" akan berada di ruang penyematan bersama yang mewakili hubungan di antara keduanya, seperti yang ditunjukkan pada gambar 2. Dalam contoh RAG ini, penyematan yang dioptimalkan akan menghasilkan penelusuran kemiripan yang lebih baik.

Selain kasus penggunaan kueri dan jawaban, jenis tugas juga menyediakan ruang penyematan yang dioptimalkan untuk tugas seperti klasifikasi, pengelompokan, dan verifikasi fakta.

Jenis tugas yang didukung

Model penyematan yang menggunakan jenis tugas mendukung jenis tugas berikut:

Jenis tugas Deskripsi
SEMANTIC_SIMILARITY Digunakan untuk membuat embedding yang dioptimalkan untuk menilai kesamaan teks
CLASSIFICATION Digunakan untuk membuat embedding yang dioptimalkan untuk mengklasifikasikan teks sesuai dengan label preset
CLUSTERING Digunakan untuk membuat embedding yang dioptimalkan untuk mengelompokkan teks berdasarkan kemiripan
RETRIEVAL_DOCUMENT, RETRIEVAL_QUERY, QUESTION_ANSWERING, dan FACT_VERIFICATION Digunakan untuk membuat penyematan yang dioptimalkan untuk penelusuran dokumen atau pengambilan informasi
CODE_RETRIEVAL_QUERY Digunakan untuk mengambil blok kode berdasarkan kueri natural language, seperti mengurutkan array atau membalikan linked list. Penyematan blok kode dihitung menggunakan RETRIEVAL_DOCUMENT.

Jenis tugas terbaik untuk tugas penyematan Anda bergantung pada kasus penggunaan yang Anda miliki untuk penyematan. Sebelum memilih jenis tugas, tentukan kasus penggunaan penyematan Anda.

Menentukan kasus penggunaan penyematan Anda

Kasus penggunaan penyematan biasanya termasuk dalam salah satu dari empat kategori: menilai kemiripan teks, mengklasifikasikan teks, mengelompokkan teks, atau mengambil informasi dari teks. Jika kasus penggunaan Anda tidak termasuk dalam salah satu kategori sebelumnya, gunakan jenis tugas RETRIEVAL_QUERY secara default.

Menilai kemiripan teks

Jika Anda ingin menggunakan penyematan untuk menilai kesamaan teks, gunakan jenis tugas SEMANTIC_SIMILARITY. Jenis tugas ini menghasilkan penyematan yang dioptimalkan untuk menghasilkan skor kesamaan.

Misalnya, Anda ingin membuat penyematan untuk digunakan guna membandingkan kemiripan teks berikut:

  • Kucing sedang tidur
  • Kucing sedang tidur

Saat penyematan digunakan untuk membuat skor kesamaan, skor kesamaan akan tinggi, karena kedua teks memiliki makna yang hampir sama.

Pertimbangkan skenario dunia nyata berikut yang menilai kemiripan input akan berguna:

  • Untuk sistem rekomendasi, Anda ingin mengidentifikasi item (misalnya, produk, artikel, film) yang secara semantik mirip dengan item pilihan pengguna, memberikan rekomendasi yang dipersonalisasi, dan meningkatkan kepuasan pengguna.

Mengklasifikasikan teks

Jika Anda ingin menggunakan penyematan untuk mengklasifikasikan teks sesuai dengan label preset, gunakan jenis tugas CLASSIFICATION. Jenis tugas ini menghasilkan penyematan di ruang penyematan yang dioptimalkan untuk klasifikasi.

Misalnya, Anda ingin membuat penyematan untuk postingan media sosial yang kemudian dapat Anda gunakan untuk mengklasifikasikan sentimennya sebagai positif, negatif, atau netral. Saat penyematan untuk postingan media sosial yang bertuliskan "Saya tidak suka bepergian dengan pesawat" diklasifikasikan, sentimennya akan diklasifikasikan sebagai negatif.

Teks cluster

Jika Anda ingin menggunakan penyematan untuk mengelompokkan teks berdasarkan kesamaannya, gunakan jenis tugas CLUSTERING. Jenis tugas ini menghasilkan penyematan yang dioptimalkan untuk dikelompokkan berdasarkan kesamaannya.

Misalnya, Anda ingin membuat penyematan untuk artikel berita sehingga Anda dapat menampilkan artikel kepada pengguna yang terkait secara topik dengan artikel yang telah mereka baca sebelumnya. Setelah penyematan dibuat dan dikelompokkan, Anda dapat menyarankan artikel terkait olahraga tambahan kepada pengguna yang banyak membaca artikel tentang olahraga.

Kasus penggunaan tambahan untuk pengelompokan mencakup hal berikut:

  • Segmentasi pelanggan: mengelompokkan pelanggan dengan penyematan serupa yang dihasilkan dari profil atau aktivitas mereka untuk pemasaran yang ditargetkan dan pengalaman yang dipersonalisasi.
  • Segmentasi produk: pengelompokan penyematan produk berdasarkan judul dan deskripsi produk, gambar produk, atau ulasan pelanggan dapat membantu bisnis melakukan analisis segmen pada produk mereka.
  • Riset pasar: pengelompokan respons survei konsumen atau penyematan data media sosial dapat mengungkapkan pola dan tren tersembunyi dalam pendapat, preferensi, dan perilaku konsumen, sehingga membantu upaya riset pasar dan menginformasikan strategi pengembangan produk.
  • Layanan kesehatan: pengelompokan penyematan pasien yang berasal dari data medis dapat membantu mengidentifikasi kelompok dengan kondisi atau respons pengobatan yang serupa, sehingga mengarah ke rencana perawatan kesehatan yang lebih dipersonalisasi dan terapi yang ditargetkan.
  • Tren masukan pelanggan: mengelompokkan masukan pelanggan dari berbagai saluran (survei, media sosial, tiket dukungan) ke dalam grup dapat membantu mengidentifikasi poin masalah umum, permintaan fitur, dan area untuk peningkatan produk.

Mengambil informasi dari teks

Jika ingin menggunakan penyematan untuk penelusuran dokumen atau pengambilan informasi dan kasus penggunaan Tanya Jawab seperti penelusuran, chatbot, atau RAG seperti yang dibahas dalam pengantar, Anda perlu menjalankan dua tugas penyematan dengan jenis tugas yang berbeda:

  1. Gunakan jenis tugas RETRIEVAL_DOCUMENT untuk membuat penyematan yang dioptimalkan untuk dokumen Anda (juga disebut korpus).
  2. Gunakan salah satu jenis tugas berikut untuk membuat penyematan yang dioptimalkan untuk kueri Anda, bergantung pada sifat kueri:
    • RETRIEVAL_QUERY: Gunakan sebagai jenis tugas default untuk kueri, seperti "restoran terbaik di Vancouver", "sayuran hijau", atau "Apa resep kue terbaik?".
    • QUESTION_ANSWERING: Gunakan jika semua kueri diformat sebagai pertanyaan yang tepat, seperti "Kenapa langit berwarna biru?" atau "Bagaimana cara mengikat tali sepatu?".
    • FACT_VERIFICATION: Gunakan jika Anda ingin mengambil dokumen dari korpus yang membuktikan atau menyangkal pernyataan. Misalnya, kueri "apel tumbuh di bawah tanah" mungkin mengambil artikel tentang apel yang pada akhirnya akan menyangkal pernyataan tersebut.

Pertimbangkan skenario dunia nyata berikut yang akan berguna untuk kueri pengambilan:

  • Untuk platform e-commerce, sebaiknya gunakan penyematan agar pengguna dapat menelusuri produk menggunakan kueri teks dan gambar, sehingga memberikan pengalaman belanja yang lebih intuitif dan menarik.
  • Untuk platform pendidikan, Anda ingin membuat sistem menjawab pertanyaan yang dapat menjawab pertanyaan siswa berdasarkan konten buku teks atau resource pendidikan, memberikan pengalaman belajar yang dipersonalisasi, dan membantu siswa memahami konsep yang kompleks.

Pengambilan Kode

text-embedding-005 mendukung jenis tugas baru CODE_RETRIEVAL_QUERY, yang dapat digunakan untuk mengambil blok kode yang relevan menggunakan kueri teks biasa. Untuk menggunakan fitur ini, blok kode harus disematkan menggunakan jenis tugas RETRIEVAL_DOCUMENT, sedangkan kueri teks disematkan menggunakan CODE_RETRIEVAL_QUERY.

Untuk mempelajari semua jenis tugas, lihat referensi model.

Berikut ini contohnya:

REST

PROJECT_ID=PROJECT_ID

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-embedding-005:predict -d \
$'{
  "instances": [
    {
      "task_type": "CODE_RETRIEVAL_QUERY",
      "content": "Function to add two numbers"
    }
  ],
}'

Vertex AI SDK untuk Python

Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Vertex AI SDK untuk Python.

from vertexai.language_models import TextEmbeddingInput, TextEmbeddingModel

MODEL_NAME = "text-embedding-005"
DIMENSIONALITY = 256


def embed_text(
    texts: list[str] = ["Retrieve a function that adds two numbers"],
    task: str = "CODE_RETRIEVAL_QUERY",
    model_name: str = "text-embedding-005",
    dimensionality: int | None = 256,
) -> list[list[float]]:
    """Embeds texts with a pre-trained, foundational model."""
    model = TextEmbeddingModel.from_pretrained(model_name)
    inputs = [TextEmbeddingInput(text, task) for text in texts]
    kwargs = dict(output_dimensionality=dimensionality) if dimensionality else {}
    embeddings = model.get_embeddings(inputs, **kwargs)
    # Example response:
    # [[0.025890009477734566, -0.05553026497364044, 0.006374752148985863,...],
    return [embedding.values for embedding in embeddings]


if __name__ == "__main__":
    # Embeds code block with a pre-trained, foundational model.
    # Using this function to calculate the embedding for corpus.
    texts = ["Retrieve a function that adds two numbers"]
    task = "CODE_RETRIEVAL_QUERY"
    code_block_embeddings = embed_text(
        texts=texts, task=task, model_name=MODEL_NAME, dimensionality=DIMENSIONALITY
    )

    # Embeds code retrieval with a pre-trained, foundational model.
    # Using this function to calculate the embedding for query.
    texts = [
        "def func(a, b): return a + b",
        "def func(a, b): return a - b",
        "def func(a, b): return (a ** 2 + b ** 2) ** 0.5",
    ]
    task = "RETRIEVAL_DOCUMENT"
    code_query_embeddings = embed_text(
        texts=texts, task=task, model_name=MODEL_NAME, dimensionality=DIMENSIONALITY
    )

Batasan berikut berlaku saat menggunakan model ini:

  • Jangan gunakan model pratinjau ini di sistem produksi atau yang sangat penting.
  • Model ini hanya tersedia di us-central1.
  • Prediksi batch tidak didukung.
  • Penyesuaian tidak didukung.

Langkah berikutnya