Spanner Omni 中的向量搜尋是內建的高效能功能,可對高維度向量資料執行語意搜尋和相似度比對。Spanner Omni 直接在交易資料庫中儲存及建立向量嵌入索引,因此不需要另外使用向量資料庫,也不必建立複雜的擷取、轉換和載入 (ETL) 管道。
這份文件中的主題適用於 Spanner Omni,與適用於 Spanner 的主題相同。
向量搜尋總覽
向量搜尋功能可將資料表示為數值向量 (嵌入),藉此找出語意相似的項目。Spanner Omni 支援兩種主要搜尋方法:
K 近鄰 (KNN):計算查詢與資料集中每個向量之間的距離,執行精確搜尋。這種方法可提供最高召回率,但處理大型資料集時,運算費用可能相當高昂。
近似最鄰近項目 (ANN):使用向量索引,在大型資料集中快速找出相符項目。雖然準確率 (召回率) 會稍微降低,但速度和擴充性會有所提升。
向量搜尋功能搭配其他功能使用時,效果特別顯著:
| 組合 | 效益 |
|---|---|
| 使用 SQL 篩選條件進行向量搜尋 | 有效結合向量搜尋與篩選器 (例如「尋找類別為『鞋子』且價格低於 100 的類似圖片」)。 |
| 向量搜尋 + 全文搜尋 | 使用相互排名融合 (RRF) 結合語意相似度和關鍵字精確度,提高搜尋關聯性。 |
| 向量 + 圖形 | 使用向量搜尋功能,在屬性圖中找出相關的進入點 (節點),然後遍歷複雜的關係。 |
詳情請參閱 Spanner 說明文件中的 Spanner 向量搜尋總覽。
執行 K 近鄰搜尋
Spanner Omni 支援使用內建距離函式進行 K 近鄰 (KNN) 搜尋。您可以提供向量嵌入做為輸入參數,在 N 維度空間中找出最鄰近的向量。
可用的距離函式如下:
COSINE_DISTANCE():測量兩個向量間角度的餘弦值EUCLIDEAN_DISTANCE():測量兩個向量之間最短的直線距離DOT_PRODUCT():計算角度的餘弦值乘以向量大小的乘積 (適用於正規化資料)
詳情請參閱 Spanner 說明文件中的「透過尋找 K 近鄰執行向量相似度搜尋」。
選擇最佳向量距離函式
選取適當的距離函式取決於您的資料,以及用於產生嵌入內容的模型。
| 函式 | 說明 | 與提高相似度的關係 |
|---|---|---|
| 點積 | 計算角度的餘弦,並乘以對應向量大小的乘積。 | 增加 |
| 餘弦距離 | 測量兩個向量夾角的餘弦值 (1 - 餘弦相似度)。 | 減少 |
| 歐幾里得距離 | 測量兩個向量之間的直線距離。 | 減少 |
如果嵌入內容已正規化 (大小 = 1.0),通常很適合選用 DOT_PRODUCT()。如果是未經過正規化的資料,請實驗使用 COSINE_DISTANCE() 或 EUCLIDEAN_DISTANCE(),判斷哪一個最適合您的用途。
詳情請參閱 Spanner 說明文件中的「選擇向量距離函式」。
近似最鄰近 (ANN)
ANN 搜尋適用於非常龐大的資料集,因為精確的 KNN 搜尋會變得太慢或太昂貴。這項功能會使用向量索引,以較小的喚回率為代價,提供快速結果。
Spanner Omni 中的近似最鄰近 (ANN) 搜尋支援最多 100 萬個向量的資料集,向量長度最多 128 個維度。如果向量的維度較多,支援的向量數量就會成比例減少。
使用向量索引執行 ANN 搜尋
如要執行 ANN 搜尋,請使用近似距離函式,例如 APPROX_COSINE_DISTANCE()、APPROX_EUCLIDEAN_DISTANCE() 或 APPROX_DOT_PRODUCT()。這些函式需要:
嵌入資料欄的現有向量索引。
使用近似距離函式的
ORDER BY子句。LIMIT子句,用於指定結果數量。
詳情請參閱 Spanner 說明文件中的「尋找近似最鄰近項目 (ANN) 並查詢向量嵌入項目」。
建立及管理向量索引
建立向量索引時,您必須指定嵌入資料欄的 vector_length,並使用 STORING 子句加入其他資料欄,加快篩選速度。
以下範例說明如何建立向量索引:
CREATE VECTOR INDEX INDEX_NAME
ON TABLE_NAME(EMBEDDING_COLUMN)
OPTIONS (distance_type = 'DISTANCE_TYPE', tree_depth = 2, num_leaves = 1000);
詳情請參閱 Spanner 說明文件中的「建立及管理向量索引」。
向量索引最佳做法
如要維持高搜尋效能和召回率,請採取下列做法:
調整索引選項:根據資料大小和效能需求調整
num_leaves和num_leaves_to_search。定期重建:如果向量分布隨時間大幅變動,請重建索引。
有效使用篩選器:將經常篩選的資料欄儲存在索引中,提升搜尋效率。
詳情請參閱 Spanner 說明文件中的「向量索引最佳做法」。