如果您已為資料建立自訂向量嵌入,可以將其上傳至 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」頁面。
在導覽選單中,按一下「資料儲存庫」。
在「名稱」欄中,按一下要更新架構的資料儲存庫。
按一下「結構定義」分頁標籤,查看資料的結構定義。
按一下 [Edit] (編輯) 按鈕。
在結構定義中找出嵌入欄位,然後在「重要屬性」欄中,選取「embedding_vector」做為該欄位的重要屬性。
如有第二個嵌入欄位,請針對該欄位重複這個步驟。
在「維度」欄位中,輸入該嵌入欄位的維度數量。
如有第二個嵌入欄位,請針對該欄位重複這個步驟。
按一下「儲存」,套用結構定義變更。
更新結構定義後,系統最多可能需要 24 小時重新建立索引,具體時間取決於資料儲存庫的大小。
REST
如要使用 API 更新結構定義,請按照下列步驟操作:
請按照「更新結構定義」一節中的 REST 指示,為每個嵌入欄位指定鍵屬性對應和維度數量:
"keyPropertyMapping": "embedding_vector"
"dimension": NUMBER_OF_DIMENSIONS
舉例來說,以下是欄位
example_embedding_vector
的格式化 JSON 結構定義,其中包含 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」頁面。
找出要更新結構定義的資料儲存庫,然後按一下「查看」。
前往「Configurations」(設定) 頁面,然後按一下「Serving」(放送) 分頁。
在「Embedding field path」(嵌入欄位路徑) 中,輸入您已對應至嵌入鍵屬性的欄位名稱。
在「排名運算式」中,輸入一或多個函式來控制結果排名。系統會根據您輸入的運算式,為變數加權。排名運算式是單一函式或多個函式,以
+
格式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
欄位中使用嵌入,將「Example query」指定為輸入向量,並在計算排名時,為relevance_score
和example_embedding_field
分別提供 0.5 和 0.3 的權重。"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
:搜尋結果文件的計算相關分數。
後續步驟
- 為資料進行擷取的準備作業。
- 更新結構定義。
- 預覽搜尋結果。
- 如要瞭解自訂嵌入對自訂搜尋應用程式搜尋品質的影響,請評估搜尋品質。詳情請參閱評估搜尋品質。