Bagikan melalui


Cara mengaktifkan dan menggunakan pgvector pada Azure Cosmos DB for PostgreSQL

BERLAKU UNTUK: Azure Cosmos DB for PostgreSQL (didukung oleh ekstensi database Citus ke PostgreSQL)

Ekstensi ini pgvector menambahkan pencarian kesamaan vektor sumber terbuka ke PostgreSQL.

Artikel ini memperkenalkan kami pada kemampuan tambahan yang diaktifkan oleh pgvector. Ini mencakup konsep kesamaan vektor dan penyematan, dan memberikan panduan tentang cara mengaktifkan pgvector ekstensi. Kami mempelajari tentang, cara membuat, menyimpan, dan mengkueri vektor. Anda mungkin juga ingin merujuk ke README resmi proyek.

Mengaktifkan ekstensi

Ekstensi PostgreSQL harus diaktifkan di database Anda sebelum Anda dapat menggunakannya. Untuk mengaktifkan ekstensi, jalankan perintah dari alat psql untuk memuat objek yang dikemas ke dalam database Anda.

SELECT CREATE_EXTENSION('vector');

Catatan

Untuk menonaktifkan penggunaan ekstensi drop_extension()

Konsep

Kesamaan vektor

Kesamaan vektor adalah metode yang digunakan untuk mengukur seberapa mirip dua item dengan mewakilinya sebagai vektor, yang merupakan rangkaian angka. Vektor sering digunakan untuk mewakili titik data, di mana setiap elemen vektor mewakili fitur atau atribut titik data.

Kesamaan vektor biasanya dihitung menggunakan metrik jarak, seperti Euclidean distance atau cosine kesamaan. Jarak Euclidean mengukur jarak garis lurus antara dua vektor di ruang n-dimensi, sementara kesamaan kosinus mengukur kosinus sudut antara dua vektor. Nilai metrik kesamaan biasanya berkisar antara 0 dan 1, dengan higher nilai yang menunjukkan kesamaan yang lebih besar antara vektor.

Kesamaan vektor banyak digunakan dalam berbagai aplikasi, seperti sistem rekomendasi, klasifikasi teks, pengenalan gambar, dan pengklusteran. Misalnya, dalam sistem rekomendasi, kesamaan vektor dapat digunakan untuk mengidentifikasi item serupa berdasarkan preferensi pengguna. Dalam klasifikasi teks, kesamaan vektor dapat digunakan untuk menentukan kesamaan antara dua dokumen atau kalimat berdasarkan representasi vektornya.

Penyematan

Penyematan adalah teknik mengevaluasi "kekaitan" teks, gambar, video, atau jenis informasi lainnya. Evaluasi memungkinkan model pembelajaran mesin untuk mengidentifikasi hubungan dan kesamaan antara data secara efisien, memungkinkan algoritma mengidentifikasi pola dan membuat prediksi yang akurat. Misalnya, dalam tugas analisis sentimen, kata-kata dengan penyematan serupa mungkin diharapkan memiliki skor sentimen yang sama.

Memulai

Buat tabel tblvector dengan kolom jenis vector(3) yang embedding mewakili vektor tiga dimensi.

CREATE TABLE tblvector(
    id bigserial PRIMARY KEY,
    embedding vector(3)
    );

Setelah Anda membuat penyematan menggunakan layanan seperti OpenAI API, Anda dapat menyimpan vektor yang dihasilkan dalam database Anda. Menentukan vektor sebagaimana vector(3) ditunjuk [x,y,z] coordinates dalam bidang tiga dimensi. Perintah menyisipkan lima baris baru ke tblvector dalam tabel dengan penyematan yang disediakan.

INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]'), (3, '[5,4,6]'), (4, '[3,5,7]'), (5, '[7,8,9]');

Dengan menggunakan INSERT INTO ... ON CONFLICT pernyataan , Anda dapat menentukan tindakan alternatif, seperti memperbarui rekaman yang cocok dengan kriteria. Ini memungkinkan Anda untuk menangani potensi konflik dengan cara yang lebih efisien dan efektif.

INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;

Perintah DELETE menghapus baris dari tabel tertentu berdasarkan kondisi yang ditentukan dalam klausa WHERE. Saat klausa WHERE tidak ada, semua baris dalam tabel akan dihapus.

DELETE FROM tblvector WHERE id = 1;

Untuk mengambil vektor dan menghitung kesamaan, gunakan SELECT pernyataan dan operator vektor bawaan. Misalnya, kueri menghitung jarak Euclidean (jarak L2) antara vektor yang diberikan dan vektor yang disimpan dalam tblvector tabel, mengurutkan hasil berdasarkan jarak terhitung, dan mengembalikan lima item terdekat yang paling mirip.

SELECT * FROM tblvector 
ORDER BY embedding <-> '[3,1,2]' 
LIMIT 5;

Kueri menggunakan operator "<->", yang merupakan "operator jarak" yang digunakan untuk menghitung jarak antara dua vektor dalam ruang multi-dimensi. Kueri mengembalikan semua baris dengan jarak kurang dari 6 dari vektor [3,1,2].

SELECT * FROM tblvector WHERE embedding <-> '[3,1,2]' < 6;

Perintah mengambil nilai rata-rata kolom "penyematan" dari tabel "tblvector". Misalnya, jika kolom "penyematan" berisi penyematan kata untuk model bahasa, maka nilai rata-rata penyematan ini dapat digunakan untuk mewakili seluruh kalimat atau dokumen.

SELECT AVG(embedding) FROM tblvector;

Operator vektor

pgvector memperkenalkan enam operator baru yang dapat digunakan pada vektor:

Operator Deskripsi
+ penambahan elemen bijaksana
- pengurangan elemen bijaksana
* perkalian elemen bijaksana
<-> Jarak Euclidean
<#> produk dalam negatif
<=> jarak kosinus

Fungsi vektor

cosine_distance

Menghitung jarak kosinus antara dua vektor.

cosine_distance(vector, vector)

Argumen

vector

Pertama vector.

vector

Kedua vector.

Tipe hasil

double precision sebagai jarak antara dua vektor yang disediakan.

inner_product

Menghitung produk dalam dari dua vektor.

inner_product(vector, vector)

Argumen

vector

Pertama vector.

vector

Kedua vector

Tipe hasil

double precision sebagai produk dalam dari dua vektor.

l2_distance

Menghitung jarak Euclidean (juga dikenal sebagai L2) antara dua vektor.

l2_distance(vector, vector)

Argumen

vector

Pertama vector.

vector

Kedua vector

Tipe hasil

double precision sebagai jarak Euclidean antara kedua vektor.

l1_distance

Menghitung jarak taksi (juga dikenal sebagai L1) antara dua vektor.

l1_distance(vector, vector)

Argumen

vector

Pertama vector.

vector

Kedua vector

Tipe hasil

double precision sebagai jarak taksi antara kedua vektor.

vector_dims(vector)

Mengembalikan dimensi vektor tertentu.

Argumen

vector

vector.

Tipe hasil

integer mewakili jumlah dimensi vektor yang diberikan.

vector_norms(vector)

Menghitung norma Euclidean dari vektor tertentu.

Argumen

vector

vector.

Tipe hasil

double precision mewakili norma Euclidean dari vektor yang diberikan.

Agregat vektor

AVG

Menghitung rata-rata vektor yang diproses.

Argumen

vector

vector.

Tipe hasil

vector mewakili rata-rata vektor yang diproses.

SUM

Argumen

vector

vector.

Tipe hasil

vector mewakili jumlah vektor yang diproses.

Langkah berikutnya

Pelajari selengkapnya tentang performa, pengindeksan, dan batasan menggunakan pgvector.