如何在適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器啟用及使用 pgvector
適用於: 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器
pgvector
延伸模組會將開放原始碼向量相似度搜尋新增至 PostgreSQL。
本文介紹 pgvector
啟用的額外功能。 它涵蓋向量相似度和內嵌的概念,並提供如何啟用 pgvector
擴充功能的指導內容。 我們瞭解如何建立、儲存和查詢向量。
建議您參閱專案的官方讀我檔案。
啟用延伸模組
在適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體上啟用 pgvector
之前,您必須先將它新增至允許清單 (如 如何使用 PostgreSQL 延伸模組 所述),並執行 SHOW azure.extensions;
來檢查是否已正確新增。
重要
請注意,雖然所有 PostgreSQL 社群都傾向於將此延伸模組稱為 pgvector,但二進位和延伸模組本身的名稱只是 vector
。 因為這是您必須用來允許列出的名稱,或透過CREATE EXTENSION 命令在任何資料庫上建立,所以請將這點納入考量。
然後,您可以連線到目標資料庫並執行 CREATE EXTENSION 命令來安裝延伸模組。 您需要為每個您希望延伸模組可用的資料庫分別重複該命令。
CREATE EXTENSION vector;
注意
若要從目前連線的資料庫中移除延伸模組,請使用 DROP EXTENSION vector;
。
概念
向量相似度
向量相似度是用來測量兩個項目相似程度的方法,方法是將其表示為數字序列的向量。 向量通常用來表示資料點,其中向量的每個元素都代表資料點的特徵或屬性。
向量相似度通常是使用距離計量來計算,例如 Euclidean distance
或 cosine
相似度。 Euclidean 距離測量 n 維空間中兩個向量之間的直線距離,而餘弦相似度則測量兩個向量之間角度的餘弦值。 相似度度量的值通常介於 0
與 1
之間, higher
值表示向量之間較相似。
向量相似度在各種應用程式中廣泛使用,例如建議系統、文字分類、影像辨識和群集。 例如,在建議系統中,向量相似度可用來根據使用者的喜好設定來識別類似的項目。 在文字分類中,向量相似度可用來根據兩個文件或句子的向量表示來判斷相似度。
Embeddings
內嵌是評估文字、影像、影片或其他資訊類型「相關性」的技術。 評估可讓機器學習模型有效率地識別資料之間的關聯性和相似性,讓演算法能夠識別模式並做出精確的預測。 例如,在情感分析工作中,具有類似內嵌的字組可能會有類似的情感分數。
開始使用
建立資料表 tblvector
,其中具有代表 3D 向量 vector(3)
類型的 embedding
資料行。
CREATE TABLE tblvector(
id bigserial PRIMARY KEY,
embedding vector(3)
);
一旦您使用 OpenAI API 之類的服務產生內嵌,您就可以將產生的向量儲存在資料庫中。 將向量定義為 vector(3)
在 3D 平面中指定 [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
資料表中的向量之間的歐幾里得距離 (L2 距離),依計算出的距離來排序結果,並傳回最接近的五個最相似項目。
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 減法 |
* | element-wise 乘法 |
<-> | 歐幾里得距離 |
</> | 負內部乘積 |
</> | 餘弦距離 |
向量函式
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
計算兩個向量之間的歐幾里得距離(也稱為 L2)。
l2_distance(vector, vector)
引數
vector
第一個 vector
。
vector
第二個 vector
傳回類型
double precision
為兩個向量之間的歐幾里德距離。
l1_distance
計算兩個向量之間的曼哈頓距離(也稱為 L1)。
l1_distance(vector, vector)
引數
vector
第一個 vector
。
vector
第二個 vector
傳回類型
double precision
為兩個向量之間的曼哈頓距離。
vector_dims(vector)
傳回指定向量的維度。
引數
vector
vector
。
傳回類型
integer
代表指定向量的維度數目。
vector_norms(vector)
計算指定向量的歐幾里得範數。
引數
vector
vector
。
傳回類型
double precision
代表指定向量的歐幾里得範數。
向量彙總
AVG
計算已處理向量的平均值。
引數
vector
vector
。
傳回類型
vector
表示已處理向量的平均值。
SUM
引數
vector
vector
。
傳回類型
vector
表示已處理向量的總和。
後續步驟
使用 pgvector
深入瞭解效能、編製索引和限制。
使用 pgvector 最佳化效能