如何在 適用於 PostgreSQL 的 Azure 資料庫 上啟用和使用 pgvector - 彈性伺服器

適用於:適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器

延伸 pgvector 模組會將開放原始碼向量相似度搜尋新增至 PostgreSQL。

本文將介紹 由 pgvector啟用的額外功能。 其涵蓋向量相似度和內嵌的概念,並提供如何啟用擴充功能的 pgvector 指引。 我們瞭解如何建立、儲存和查詢向量。 您可能也想要參考專案的官方 自述檔

啟用擴充功能

在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例上啟用pgvector之前,您必須將它新增至allowlist,如如何使用PostgreSQL擴充功能中所述,並執行 來檢查是否已正確新增SHOW azure.extensions;

然後,您可以連線到目標資料庫並執行 CREATE EXTENSION 命令來安裝擴充功能 。 您必須針對您想要讓擴充功能在 中的每個資料庫個別重複命令。

CREATE EXTENSION vector;

注意

若要從目前連線的資料庫中移除延伸模組,請使用 DROP EXTENSION vector;

概念

向量相似性

向量相似度是用來測量兩個專案相似程度的方法,方法是將其表示為數位序列的向量。 向量通常用來表示數據點,其中向量的每個元素都代表數據點的特徵或屬性。

向量相似度通常是使用距離計量來計算,例如 Euclidean distancecosine 相似度。 Euclidean 距離測量 n 維空間中兩個向量之間的直線距離,而餘弦相似度則測量兩個向量之間角度的餘弦值。 相似度度量的值通常會介於 和 1之間0,且higher值表示向量之間的相似度較大。

向量相似度在各種應用程式中廣泛使用,例如建議系統、文字分類、影像辨識和群集。 例如,在建議系統中,向量相似度可用來根據使用者的喜好設定來識別類似的專案。 在文字分類中,向量相似度可用來根據兩個檔或句子的向量表示來判斷相似度。

Embeddings

內嵌是評估文字、影像、影片或其他資訊類型「相關性」的技術。 評估可讓機器學習模型有效率地識別數據之間的關聯性和相似性,讓演算法能夠識別模式並做出精確的預測。 例如,在情感分析工作中,具有類似內嵌的字組可能會有類似的情感分數。

開始使用

建立具有類型vector(3)數據行的數據表,此數據tblvectorembedding行代表三維向量。

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

一旦您使用 OpenAI API 之類的服務產生內嵌,您就可以將產生的向量儲存在資料庫中。 將向量 vector(3) 定義為三維平面中的指定 [x,y,z] coordinates 。 此命令會使用提供的內嵌,將五個新的數據列 tblvector 插入數據表中。

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]');

藉由使用 INSERT INTO ... ON CONFLICT 語句,您可以指定替代動作,例如更新符合準則的記錄。 它可讓您以更有效率且有效的方式處理潛在的衝突。

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

DELETE此命令會根據 WHERE 子句中指定的條件,從指定的數據表中移除資料列。 當 WHERE 子句不存在時,會刪除資料表中的所有數據列。

DELETE FROM tblvector WHERE id = 1;

若要擷取向量並計算相似度,請使用 SELECT 語句和內建向量運算符。 例如,查詢會計算指定向量與儲存在數據表中的 tblvector 向量之間的 Euclidean 距離 (L2 distance),依計算的距離來排序結果,並傳回最接近的五個專案。

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

查詢會使用 「<->」 運算子,這是用來計算多維度空間中兩個向量之間的距離的「距離運算符」。 查詢會傳回與向量 [3,1,2] 相距小於 6 的所有數據列。

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

此命令會從 「tblvector」 資料表擷取 「embedding」 資料行的平均值。 例如,如果 「embedding」 資料行包含語言模型的文字內嵌,則這些內嵌的平均值可以用來代表整個句子或檔。

SELECT AVG(embedding) FROM tblvector;

向量運算子

pgvector 引進六個新的運算符,可用於向量:

運算子 描述
+ element-wise 加法
- element-wise 減法
* 元素乘法
<-> Euclidean 距離
<#> 負內部乘積
<=> 餘弦距離

向量函式

cosine_distance

計算兩個向量之間的餘弦距離。

cosine_distance(vector, vector)

引數

vector

第一個 vector

vector

第二個 vector

傳回類型

double precision 當做兩個提供的向量之間的距離。

inner_product

計算兩個向量的內部乘積。

inner_product(vector, vector)

引數

vector

第一個 vector

vector

第二 vector

傳回類型

double precision 做為兩個向量的內部乘積。

l2_distance

計算兩個向量之間的 Euclidean 距離(也稱為 L2)。

l2_distance(vector, vector)

引數

vector

第一個 vector

vector

第二 vector

傳回類型

double precision 當做兩個向量之間的尤克里德距離。

l1_distance

計算兩個向量之間的 taxicab 距離(也稱為 L1)。

l1_distance(vector, vector)

引數

vector

第一個 vector

vector

第二 vector

傳回類型

double precision 當做兩個向量之間的分類距離。

vector_dims(vector)

傳回指定向量的維度。

引數

vector

vector

傳回類型

integer 表示指定向量的維度數目。

vector_norms(vector)

計算指定向量的 Euclidean 常態。

引數

vector

vector

傳回類型

double precision 表示指定向量的 Euclidean 常態。

向量匯總

AVG

計算已處理向量的平均值。

引數

vector

vector

傳回類型

vector 表示已處理向量的平均。

SUM

引數

vector

vector

傳回類型

vector 表示已處理向量的總和。

後續步驟

深入瞭解使用 pgvector的效能、索引編製和限制。