如果您已為資料建立自訂向量嵌入,可以將這些資料上傳至 Vertex AI Search,並在使用 Vertex AI Search 進行查詢時加以運用。
這項功能適用於含有自訂結構化資料或非結構化資料 (含中繼資料) 的資料儲存庫。這項功能不適用於媒體和醫療保健搜尋。
根據預設,Vertex AI Search 會自動產生向量嵌入資料,無須任何設定。如果您不熟悉如何建立嵌入資料,建議您讓 Vertex AI Search 為您建立及使用嵌入資料。不過,如果您已為資料建立自訂嵌入資料,可能會偏好使用自訂嵌入資料,而非 Vertex AI Search 產生的嵌入資料,尤其是當自訂嵌入資料包含可豐富搜尋擷取和排名的額外內容時。例如:
- 您的嵌入式已針對自訂字詞進行訓練,例如內部術語,因為這些術語的語意相似性無法透過公開資料訓練,例如僅出現在私人文件中的機構專屬術語。
- 您已為使用者個人資料建立嵌入資料,並想使用這些資料建立個人化且與語意相關的文件排名。您可以使用嵌入資料取得個人化排名,這有助於強化 Google 的文件嵌入資料,以便根據相關性進行排名。
如要使用自備的嵌入資料,請按照下列步驟操作:
- 事前準備:確認嵌入資料符合所有規定
- 擷取含有嵌入項目的資料:擷取含有嵌入項目的文件
- 更新結構定義:使用主要資源欄位和維度規格更新結構定義
- 指定嵌入內容:全域或個別搜尋要求指定嵌入內容。
事前準備
開始前,請確認嵌入項目符合下列需求:
- 結構化資料和非結構化資料 (含結構描述資料) 皆支援嵌入
- 嵌入內容必須以一維陣列的形式提供
- 嵌入維度必須介於 1 到 768 (含首尾) 之間
- 文字和圖片皆支援嵌入功能。不支援影片
- 最多可將兩個欄位標示為嵌入鍵屬性欄位。您可能會在嵌入內容的 A/B 測試等情況下使用兩個欄位
- 目前無法移除設定後的嵌入欄位鍵屬性指定
使用嵌入層擷取資料
您可以在擷取文件時,將文件的嵌入項目納入該文件資料或中繼資料的一到兩個欄位中。
如要擷取含有嵌入資料的資料:
視資料類型而定,準備資料以供攝入:
結構化資料:準備資料時,請在文件中一或兩個欄位中,以一維陣列的形式加入每個文件的嵌入資料。您最多可以提供兩個嵌入資料 (例如,如果在嵌入資料之間進行 A/B 測試)。每個嵌入項目都必須在文件中提供專屬欄位,例如:
"example_embedding_vector": [0.1, 0.2, 0.3 ...]
請按照為資料進行擷取的準備作業說明文件中的指示準備結構化資料。
含有中繼資料的非結構化資料:準備資料時,請將每個文件的嵌入內容設為文件中繼資料中某個欄位的一維陣列。您最多可以提供兩個嵌入項目 (例如,在嵌入項目之間進行 A/B 測試時)。每個嵌入項目都必須在文件中繼資料中提供專屬欄位,例如:
"example_embedding_vector": [0.1, 0.2, 0.3 ...]
請參閱「為擷取作業準備資料」說明文件,按照指示為擷取方法 (Cloud Storage 或 BigQuery) 準備含有中繼資料的非結構化資料。
請按照建立搜尋資料儲存庫中所列的資料類型操作說明,使用嵌入資料擷取文件。
接著,請更新結構定義,以便使用正確的嵌入欄位。
更新結構定義
使用 Google Cloud 控制台或 API,為嵌入欄位新增關鍵屬性對應項目和維度,以更新結構定義。
主控台
如要使用 Google Cloud 控制台更新結構定義,請按照下列步驟操作:
前往 Google Cloud 控制台的「AI Applications」頁面。
在導覽選單中,按一下「資料儲存庫」。
在「Name」欄中,按一下含有您要更新的架構的資料儲存庫。
按一下「Schema」分頁標籤,查看資料的結構定義。
按一下 [Edit] (編輯) 按鈕。
在結構定義中找出嵌入欄位,然後在「Key properties」欄中,選取「embedding_vector」做為該欄位的鍵屬性。
如果您有第二個嵌入欄位,請針對該欄位重複這個步驟。
在「維度」欄中,輸入該嵌入欄位的維度數量。
如果您有第二個嵌入欄位,請針對該欄位重複這個步驟。
按一下「儲存」套用結構定義變更。
更新結構定義後,視資料儲存庫的大小,最多可能要等到 24 小時後才能重新建立索引。
REST
如要使用 API 更新結構定義,請按照下列步驟操作:
按照「更新結構定義」中的 REST 操作說明,指定每個嵌入欄位的關鍵屬性對應項目和維度數量:
"keyPropertyMapping": "embedding_vector"
"dimension": NUMBER_OF_DIMENSIONS
舉例來說,以下是格式化的 JSON 結構定義,其中
example_embedding_vector
欄位的維度為 768:{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "example_embedding_vector": { "type": "array", "keyPropertyMapping": 'embedding_vector', "dimension": 768, "items": { "type": "number" } } } }
在更新結構定義要求中,上述格式的 JSON 會以 JSON 字串的形式納入:
"jsonSchema": "{\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"type\":\"object\",\"properties\":{\"example_embedding_vector\":{\"type\":\"array\",\"keyPropertyMapping\":\"embedding_vector\",\"dimension\":768,\"items\":{\"type\":\"number\"}}}}"
更新結構定義後,視資料儲存庫的大小,最多可能要等到 24 小時後才能重新建立索引。
接下來,請指定嵌入內容。
指定嵌入
完成結構定義更新的索引後,您就可以傳送包含嵌入規格的搜尋要求。
指定嵌入項目的方法有兩種:
- 全域指定嵌入:如要為所有搜尋要求指定相同的嵌入內容,請使用 Google Cloud 控制台或 API 更新服務設定,以便納入嵌入規格。
- 為每個搜尋要求指定嵌入內容:使用 API 在每個搜尋要求中傳送
embeddingSpec
。這會覆寫全域設定 (如有設定的話)。
全域指定嵌入
您可以使用Google Cloud 主控台或 API,在所有搜尋要求中指定相同的嵌入內容。
主控台
如要為所有搜尋要求提供相同的嵌入規格,請使用嵌入規格更新放送設定。
前往 Google Cloud 控制台的「AI Applications」頁面。
針對含有要更新的結構定義的資料儲存庫,按一下「檢視」。
前往「設定」頁面,然後點按「供應」分頁標籤。
在「嵌入欄位路徑」中,輸入已對應至嵌入鍵屬性的欄位名稱。
針對「排名運算式」,請輸入函式或多個函式,以控制結果的排名。系統會根據您輸入的運算式計算變數權重。排名運算式是單一函式或多個函式,以
+
和function, { " + ", function }
格式連結。支援的函式如下:
DOUBLE * relevance_score
DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)
系統接受下列變數:
relevance_score
:Vertex AI Search 提供的預先定義變數,用於評估文件的關聯性。分數範圍為 0 到 1.0 (含邊界)。dotProduct()
:Vertex AI Search 提供的預先定義函式。您必須為這個函式提供與embeddingVector.fieldPath
相同的欄位名稱。
例如:
0.3 * relevance_score
0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
REST
如要為所有搜尋要求提供相同的嵌入規格,請使用 embeddingConfig
更新 servingConfig
。
使用要更新的欄位修補
servingConfig
實體。使用updateMask
指定要更新的欄位。在以下範例中,
embeddingConfig
會使用example_embedding_field
欄位中的嵌入資料,並為relevance_score
提供 0.5 的權重。curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "name": "projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search", "embeddingConfig": { "fieldPath": "example_embedding_field" }, "ranking_expression": "0.5 * relevance_score" }' \ 'https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search?updateMask=embeddingConfig,rankingExpression'
fieldPath
:已對應至內嵌鍵屬性的欄位名稱。ranking_expression
:控制結果排名。系統會根據您輸入的運算式計算變數權重。排名運算式是單一函式或多個函式,以+
和function, { " + ", function }
格式連結。
支援的函式如下:
DOUBLE * relevance_score
DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)
系統接受下列變數:
relevance_score
:Vertex AI Search 提供的預先定義變數。dotProduct()
:Vertex AI Search 提供的預先定義函式。點積已正規化。您必須為這個函式提供與embeddingVector.fieldPath
相同的欄位名稱。
例如:
0.3 * relevance_score
0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
傳送搜尋要求時,系統會自動加入
servingConfig.embeddingConfig
。如果您傳送的搜尋要求明確包含其他
embeddingSpec
,就會覆寫servingConfig.embeddingConfig
。請參閱每項要求操作說明,瞭解如何為單一搜尋要求提供嵌入規格。
為每個搜尋要求指定嵌入
您可以使用 API 為單一搜尋要求提供嵌入規格。個別要求的嵌入規格會覆寫任何全域嵌入規格。
傳送包含
embeddingSpec
的搜尋要求。以下
embeddingSpec
範例會使用example_embedding_field
欄位中的嵌入資料,並將「範例查詢」指定為輸入向量,並在計算排名時將權重 0.5 給予relevance_score
,將 0.3 給予example_embedding_field
。"embeddingSpec": { "embeddingVectors": [{ "fieldPath": "example_embedding_field", "vector": [ 0.96241474, -0.45999944, 0.108588696 ] }] }, "ranking_expression": "0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)"
fieldPath
:已對應至內嵌鍵屬性的欄位名稱。vector
:以陣列形式提供的輸入向量。ranking_expression
:控制結果排名。系統會根據您輸入的運算式計算變數權重。排名運算式是單一函式或多個函式,以+
和function, { " + ", function }
格式連結。支援的函式如下:
DOUBLE * relevance_score
DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)
系統接受下列變數:
relevance_score
:Vertex AI Search 提供的預先定義變數,用於評估文件的關聯性。分數範圍為 0 到 1.0 (含邊界)。dotProduct()
:Vertex AI Search 提供的預先定義函式。您必須為這個函式提供與embeddingVector.fieldPath
相同的欄位名稱。
例如:
0.3 * relevance_score
0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
取得搜尋回應中的結果。每個搜尋結果都包含關聯度分數和點積值。例如:
"modelScores": { "dotProduct(example_embedding_field)": [0.02150772698223591], "relevance_score": [ 0.8828125 ] }
dotProduct()
:計算的搜尋結果文件內點積。relevance_score
:計算的搜尋結果文件關聯度分數。
後續步驟
- 為資料進行擷取的準備作業。
- 更新結構定義。
- 預覽搜尋結果。
- 如要瞭解自訂嵌入資料對自訂搜尋應用程式的搜尋品質有何影響,請評估搜尋品質。詳情請參閱「評估搜尋品質」。