如何在 適用於 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 distance
或 cosine
相似度。 Euclidean 距離測量 n 維空間中兩個向量之間的直線距離,而餘弦相似度則測量兩個向量之間角度的餘弦值。 相似度度量的值通常會介於 和 1
之間0
,且higher
值表示向量之間的相似度較大。
向量相似度在各種應用程式中廣泛使用,例如建議系統、文字分類、影像辨識和群集。 例如,在建議系統中,向量相似度可用來根據使用者的喜好設定來識別類似的專案。 在文字分類中,向量相似度可用來根據兩個檔或句子的向量表示來判斷相似度。
Embeddings
內嵌是評估文字、影像、影片或其他資訊類型「相關性」的技術。 評估可讓機器學習模型有效率地識別數據之間的關聯性和相似性,讓演算法能夠識別模式並做出精確的預測。 例如,在情感分析工作中,具有類似內嵌的字組可能會有類似的情感分數。
開始使用
建立具有類型vector(3)
數據行的數據表,此數據tblvector
embedding
行代表三維向量。
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
的效能、索引編製和限制。