執行向量相似度搜尋

本文說明如何使用 pgvector 擴充功能,在 PostgreSQL 適用的 AlloyDB 中執行向量相似度搜尋。向量相似度搜尋 (又稱最鄰近搜尋) 可讓您找出資料中與指定查詢向量最相似的資料點。

儲存嵌入項目並建立索引後,即可查詢 AlloyDB 資料庫中語意相似的向量。使用 pgvector 查詢功能,找出嵌入向量的最鄰近項目。

如要進一步瞭解如何儲存向量嵌入內容及建立索引,請分別參閱「儲存向量嵌入內容」和「建立索引」。

如要執行相似度搜尋,請指定資料表、嵌入資料欄、距離函式、目標嵌入和要傳回的列數。您也可以使用 embedding() 函式將文字翻譯成向量,然後使用 pgvector 運算子比較向量與儲存的嵌入。

如要找出嵌入向量最鄰近的語意鄰項,可以執行下列查詢範例,並設定您在建立索引時使用的相同距離函式。

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
    LIMIT ROW_COUNT

更改下列內容:

  • TABLE:包含要與文字比較的嵌入內容的資料表。

  • EMBEDDING_COLUMN:包含儲存的嵌入內容的資料欄。

  • DISTANCE_FUNCTION_QUERY:要用於這項查詢的距離函式。根據建立索引時使用的距離函式,選擇下列其中一項:

    • L2 距離: <->

    • 內積: <#>

    • 餘弦距離: <=>

  • EMBEDDING:您要找出最接近的儲存語意鄰項的嵌入向量。

  • ROW_COUNT:要傳回的列數。

    如只要取得最佳單一比對結果,請指定 1

如要查看其他查詢範例,請參閱「查詢」。

您也可以使用 embedding() 函式將文字轉換為向量,並找出語意上最相似的嵌入資料庫資料列。股票 pgvector PostgreSQL 擴充功能已針對 AlloyDB 自訂,並稱為 vector。您會將向量套用至其中一個 pgvector 最近鄰運算子,例如餘弦距離的 <=>

由於 embedding() 會傳回 real 陣列,您必須明確將 embedding() 呼叫轉換為 vector,才能搭配 pgvector 運算子使用這些值。

  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')
    LIMIT ROW_COUNT

更改下列內容:

  • MODEL_ID:要查詢的模型 ID。

    如果您使用 Vertex AI Model Garden,請指定 text-embedding-005 做為模型 ID。AlloyDB 可使用這些雲端模型進行文字嵌入。詳情請參閱「文字嵌入」。

  • 選用:VERSION_TAG:要查詢的模型版本標記。在標記開頭加上 @

    如果您使用 Vertex AI 搭配text-embedding-005英文模型,請指定其中一個版本標記,例如text-embedding-005,如「模型版本」一節所示。

    Google 強烈建議您一律指定版本標記。如果您未指定版本標記,AlloyDB 會使用最新模型版本,這可能會導致非預期的結果。

  • TEXT:要翻譯成向量嵌入的文字。

如要加快經過篩選的 KNN 搜尋速度,可以使用 AlloyDB 資料欄引擎。詳情請參閱「加快篩選後的向量搜尋速度」(搶先版) 和「設定直欄式引擎」。

後續步驟