Spanner Omni 向量搜尋總覽

Spanner Omni 中的向量搜尋是內建的高效能功能,可對高維度向量資料執行語意搜尋和相似度比對。Spanner Omni 直接在交易資料庫中儲存及建立向量嵌入索引,因此不需要另外使用向量資料庫,也不必建立複雜的擷取、轉換和載入 (ETL) 管道。

這份文件中的主題適用於 Spanner Omni,與適用於 Spanner 的主題相同。

向量搜尋功能可將資料表示為數值向量 (嵌入),藉此找出語意相似的項目。Spanner Omni 支援兩種主要搜尋方法:

  • K 近鄰 (KNN):計算查詢與資料集中每個向量之間的距離,執行精確搜尋。這種方法可提供最高召回率,但處理大型資料集時,運算費用可能相當高昂。

  • 近似最鄰近項目 (ANN):使用向量索引,在大型資料集中快速找出相符項目。雖然準確率 (召回率) 會稍微降低,但速度和擴充性會有所提升。

向量搜尋功能搭配其他功能使用時,效果特別顯著:

組合 效益
使用 SQL 篩選條件進行向量搜尋 有效結合向量搜尋與篩選器 (例如「尋找類別為『鞋子』且價格低於 100 的類似圖片」)。
向量搜尋 + 全文搜尋 使用相互排名融合 (RRF) 結合語意相似度和關鍵字精確度,提高搜尋關聯性。
向量 + 圖形 使用向量搜尋功能,在屬性圖中找出相關的進入點 (節點),然後遍歷複雜的關係。

詳情請參閱 Spanner 說明文件中的 Spanner 向量搜尋總覽

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 搜尋,請使用近似距離函式,例如 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_leavesnum_leaves_to_search

  • 定期重建:如果向量分布隨時間大幅變動,請重建索引。

  • 有效使用篩選器:將經常篩選的資料欄儲存在索引中,提升搜尋效率。

詳情請參閱 Spanner 說明文件中的「向量索引最佳做法」。