分享方式:


如何在適用於 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 distancecosine 相似度。 Euclidean 距離測量 n 維空間中兩個向量之間的直線距離,而餘弦相似度則測量兩個向量之間角度的餘弦值。 相似度度量的值通常介於 01之間, 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 最佳化效能