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
.