Menjalankan penelusuran kemiripan vektor

Dokumen ini menjelaskan cara melakukan penelusuran kesamaan vektor di AlloyDB untuk PostgreSQL menggunakan ekstensi pgvector. Penelusuran kesamaan vektor, juga dikenal sebagai penelusuran tetangga terdekat, memungkinkan Anda menemukan titik data dalam data yang paling mirip dengan vektor kueri tertentu.

Anda dapat membuat kueri database AlloyDB untuk vektor yang secara semantik mirip setelah menyimpan dan mengindeks embedding. Gunakan fitur kueri pgvector untuk menemukan tetangga terdekat untuk vektor embedding.

Untuk mengetahui informasi selengkapnya tentang cara menyimpan embedding vektor dan membuat indeks, lihat Menyimpan embedding vektor dan Membuat indeks.

Untuk menjalankan penelusuran kemiripan, tentukan tabel, kolom sematan, fungsi jarak, sematan target, dan jumlah baris yang akan ditampilkan. Anda juga dapat menggunakan fungsi embedding() untuk menerjemahkan teks ke dalam vektor, lalu membandingkan vektor tersebut dengan embedding yang disimpan menggunakan operator pgvector.

Untuk menemukan tetangga semantik terdekat untuk vektor embedding, Anda dapat menjalankan contoh kueri berikut, dengan menetapkan fungsi jarak yang sama dengan yang Anda gunakan selama pembuatan indeks.

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
    LIMIT ROW_COUNT

Ganti kode berikut:

  • TABLE: tabel yang berisi embedding untuk membandingkan teks.

  • EMBEDDING_COLUMN: kolom yang berisi embedding yang disimpan.

  • DISTANCE_FUNCTION_QUERY: fungsi jarak yang akan digunakan dengan kueri ini. Pilih salah satu opsi berikut berdasarkan fungsi jarak yang digunakan saat membuat indeks:

    • Jarak L2: <->

    • Produk dalam: <#>

    • Jarak kosinus: <=>

  • EMBEDDING: vektor embedding yang ingin Anda temukan tetangga semantik terdekatnya yang tersimpan.

  • ROW_COUNT: jumlah baris yang akan ditampilkan.

    Tentukan 1 jika Anda hanya menginginkan satu kecocokan terbaik.

Untuk mengetahui informasi selengkapnya tentang contoh kueri lainnya, lihat Membuat kueri.

Anda juga dapat menggunakan fungsi embedding() untuk menerjemahkan teks ke dalam vektor, dan untuk menemukan baris database dengan embedding yang paling mirip secara semantik. Ekstensi PostgreSQL pgvector bawaan disesuaikan untuk AlloyDB, dan disebut sebagai vector. Anda menerapkan vektor ke salah satu operator pgvector tetangga terdekat, misalnya <=> untuk jarak kosinus.

Karena embedding() menampilkan array real, Anda harus melakukan transmisi eksplisit panggilan embedding() ke vector untuk menggunakan nilai ini dengan operator pgvector.

  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')
    LIMIT ROW_COUNT

Ganti kode berikut:

  • MODEL_ID: ID model yang akan dikueri.

    Jika Anda menggunakan Vertex AI Model Garden, tentukan text-embedding-005 sebagai ID model. Berikut adalah model berbasis cloud yang dapat digunakan AlloyDB untuk embedding teks. Untuk mengetahui informasi selengkapnya, lihat Embedding teks.

  • Opsional: VERSION_TAG: tag versi model yang akan dikueri. Awali tag dengan @.

    Jika Anda menggunakan salah satu model berbahasa Inggris text-embedding-005 dengan Vertex AI, tentukan salah satu tag versi—misalnya, text-embedding-005, yang tercantum di Versi model.

    Google sangat menyarankan agar Anda selalu menentukan tag versi. Jika Anda tidak menentukan tag versi, AlloyDB akan menggunakan versi model terbaru, yang dapat menyebabkan hasil yang tidak terduga.

  • TEXT: teks yang akan diterjemahkan ke dalam penyematan vektor.

Untuk mempercepat penelusuran KNN yang difilter, Anda dapat menggunakan columnar engine AlloyDB. Untuk mengetahui informasi selengkapnya, lihat Mempercepat penelusuran vektor yang difilter (Pratinjau) dan Mengonfigurasi mesin columnar.

Langkah berikutnya