本頁說明如何調整文字嵌入模型。
基礎嵌入模型是使用大量文本資料集預先訓練,可為許多工作提供強大的基準。如果是需要專業知識或高度客製化成效的情況,您可以使用模型調整功能,運用自有相關資料微調模型的表示方式。穩定版的 textembedding-gecko
和 textembedding-gecko-multilingual
模型支援調整功能。
文字嵌入模型支援監督式調整。監督式調整會使用標記範例,說明您希望在推論期間從文字嵌入模型取得的輸出內容類型。
如要進一步瞭解模型調整作業,請參閱「模型調整作業的運作方式」。
預期的品質改善幅度
Vertex AI 會使用參數高效調整方法進行自訂。在公開的擷取基準資料集上進行實驗時,這項方法可顯著提升品質,最高可達 41% (平均 12%)。
微調嵌入模型的用途
調整文字嵌入模型可讓模型根據特定領域或工作調整嵌入項目。如果預先訓練的嵌入模型不符合您的特定需求,這項功能就很實用。舉例來說,您可以針對公司客戶服務單的特定資料集,微調嵌入模型。這麼做有助於聊天機器人瞭解客戶通常遇到的不同類型客戶服務問題,進而更有效地回答他們的問題。如果未進行調整,模型就不會知道客戶支援單的具體內容,也不會知道產品的特定問題解決方案。
調整工作流程
Vertex AI 針對 textembedding-gecko
和 textembedding-gecko-multilingual
的模型調整工作流程如下:
- 準備模型調整資料集。
- 將模型微調資料集上傳至 Cloud Storage 值區。
- 為 Vertex AI 管道設定專案。
- 建立模型微調工作。
- 將調整過的模型部署至同名的 Vertex AI 端點。與文字或 Codey 模型調整工作不同,文字嵌入調整工作不會將經過調整的模型部署至 Vertex AI 端點。
準備嵌入資料集
用於微調嵌入模型的資料集,包含與您希望模型執行的工作相符的資料。
調整嵌入模型的資料集格式
訓練資料集包含下列檔案,這些檔案必須位於 Cloud Storage 中。啟動調整管道時,檔案路徑會由參數定義。這三種檔案類型分別是目錄檔案、查詢檔案和標籤。您只需要提供訓練標籤,但也可以提供驗證和測試標籤,以便進一步控管。
字元集檔案:路徑由參數
corpus_path
定義。這是 JSONL 檔案,每行都有_id
、title
和text
欄位,其中包含字串值。_id
和text
為必填欄位,title
為選填欄位。以下是corpus.jsonl
檔案範例:{"_id": "doc1", "title": "Get an introduction to generative AI on Vertex AI", "text": "Vertex AI Studio offers a Google Cloud console tool for rapidly prototyping and testing generative AI models. Learn how you can use Vertex AI Studio to test models using prompt samples, design and save prompts, tune a foundation model, and convert between speech and text."} {"_id": "doc2", "title": "Use gen AI for summarization, classification, and extraction", "text": "Learn how to create text prompts for handling any number of tasks with Vertex AI's generative AI support. Some of the most common tasks are classification, summarization, and extraction. Vertex AI's PaLM API for text lets you design prompts with flexibility in terms of their structure and format."} {"_id": "doc3", "title": "Custom ML training overview and documentation", "text": "Get an overview of the custom training workflow in Vertex AI, the benefits of custom training, and the various training options that are available. This page also details every step involved in the ML training workflow from preparing data to predictions."} {"_id": "doc4", "text": "Text embeddings are useful for clustering, information retrieval, retrieval-augmented generation (RAG), and more."} {"_id": "doc5", "title": "Text embedding tuning", "text": "Google's text embedding models can be tuned on Vertex AI."}
查詢檔案:查詢檔案包含查詢範例。路徑是由
queries_path
參數定義。查詢檔案採用 JSONL 格式,且欄位與詞彙庫檔案相同。以下是queries.jsonl
檔案範例:{"_id": "query1", "text": "Does Vertex support generative AI?"} {"_id": "query2", "text": "What can I do with Vertex GenAI offerings?"} {"_id": "query3", "text": "How do I train my models using Vertex?"} {"_id": "query4", "text": "What is a text embedding?"} {"_id": "query5", "text": "Can text embedding models be tuned on Vertex?"} {"_id": "query6", "text": "embeddings"} {"_id": "query7", "text": "embeddings for rag"} {"_id": "query8", "text": "custom model training"} {"_id": "query9", "text": "Google Cloud PaLM API"}
訓練標籤:路徑是由
train_label_path
參數定義。train_label_path 是訓練標籤資料位置的 Cloud Storage URI,會在您建立調校工作時指定。標籤必須是含有標頭的 TSV 檔案。訓練標籤檔案中必須包含查詢和語料庫的子集。檔案必須含有query-id
、corpus-id
和score
欄。query-id
是與查詢檔案中的_id
索引相符的字串,corpus-id
是與字庫檔案中的_id
相符的字串。Score
是整數值,但不得為負數。如果一組查詢和文件無關,您可以將其從訓練標籤檔案中移除,或將其納入並給予零分。分數大於零表示文件與查詢相關。數字越大,表示關聯性越高。如果省略分數,預設值為 1。以下是train_labels.tsv
檔案範例:query-id corpus-id score query1 doc1 1 query2 doc2 1 query3 doc3 2 query3 doc5 1 query4 doc4 1 query4 doc5 1 query5 doc5 2 query6 doc4 1 query6 doc5 1 query7 doc4 1 query8 doc3 1 query9 doc2 1
測試標籤:選用。測試標籤的格式與訓練標籤相同,並由
test_label_path
參數指定。如果未提供test_label_path
,系統會自動將測試標籤與訓練標籤分開。驗證標籤:選用。驗證標籤的格式與訓練標籤相同,並由
validation_label_path
參數指定。如果未提供validation_label_path
,系統會自動將驗證標籤與訓練標籤分開。
資料集大小規定
您提供的資料集檔案必須符合下列限制:
- 查詢數量必須介於 9 到 10,000 之間。
- 文件數量必須介於 9 到 500,000 之間。
- 每個資料集標籤檔案都必須包含至少 3 個查詢 ID,且所有資料集分割項目都必須包含至少 9 個查詢 ID。
- 標籤總數不得超過 500,000 個。
為 Vertex AI Pipelines 設定專案
您可以使用 Vertex AI Pipelines 平台,在專案中執行調整作業。
設定權限
管道會在兩個服務代理程式下執行訓練程式碼。這些服務代理人必須獲得特定角色,才能開始使用您的專案和資料集進行訓練。
Compute Engine 預設服務帳戶
PROJECT_NUMBER-compute@developer.gserviceaccount.com
這個服務帳戶需要:
Storage Object Viewer
存取您在 Cloud Storage 中建立的每個資料集檔案。Storage Object User
存取管道 PIPELINE_OUTPUT_DIRECTORY 的輸出 Cloud Storage 目錄。Vertex AI User
存取專案。
您可以指定自訂服務帳戶,而非 Compute Engine 預設服務帳戶。詳情請參閱「設定具有精細權限的服務帳戶」。
Vertex AI 調整用服務代理
service-PROJECT_NUMBER@gcp-sa-aiplatform-ft.iam.gserviceaccount.com
這個服務帳戶需要:
Storage Object Viewer
存取您在 Cloud Storage 中建立的每個資料集檔案。Storage Object User
存取管道 PIPELINE_OUTPUT_DIRECTORY 的輸出 Cloud Storage 目錄。
如要進一步瞭解如何設定 Cloud Storage 資料集權限,請參閱「為管道成果物設定 Cloud Storage 值區」。
使用加速器
調整需要 GPU 加速器。下列任一加速器可用於文字嵌入調校管道:
NVIDIA_L4
NVIDIA_TESLA_A100
NVIDIA_TESLA_T4
NVIDIA_TESLA_V100
NVIDIA_TESLA_P100
啟動調整工作時,您選取的加速器類型和地區 (例如 Restricted image training Nvidia V100 GPUs per region
) 必須有足夠的 Restricted image training GPUs
配額。如要提高專案配額,請參閱「申請額外配額」。
部分加速器僅適用於部分地區。詳情請參閱「在 Vertex AI 中使用加速器」。
建立嵌入模型微調工作
您可以使用 Google Cloud 控制台、REST API 或用戶端程式庫,建立嵌入模型調整工作。
REST
如要建立嵌入模型微調工作,請使用 projects.locations.pipelineJobs.create
方法。
使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:您的 Google Cloud 專案 ID。PIPELINE_OUTPUT_DIRECTORY
:管道輸出成果的路徑,開頭為「gs://」。
HTTP 方法和網址:
POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/pipelineJobs
JSON 要求主體:
{ "displayName": "tune_text_embeddings_model_sample", "runtimeConfig": { "gcsOutputDirectory": "PIPELINE_OUTPUT_DIRECTORY", "parameterValues": { "corpus_path": "gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/corpus.jsonl", "queries_path": "gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/queries.jsonl", "train_label_path": "gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/train.tsv", "test_label_path": "gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/test.tsv", "base_model_version_id":"text-embedding-004", "task_type": "DEFAULT", "batch_size": "128", "train_steps": "1000", "output_dimensionality": "768", "learning_rate_multiplier": "1.0" } }, "templateUri": "https://us-kfp.pkg.dev/ml-pipeline/llm-text-embedding/tune-text-embedding-model/v1.1.3" }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
啟動管道後,請透過 Google Cloud 控制台追蹤調整工作的進度。
Python 適用的 Vertex AI SDK
如要瞭解如何安裝或更新 Python 適用的 Vertex AI SDK,請參閱「安裝 Python 適用的 Vertex AI SDK」。 詳情請參閱 Vertex AI SDK for Python API 參考說明文件。
Java
在試用這個範例之前,請先按照 Vertex AI 快速入門:使用用戶端程式庫中的操作說明設定 Java。詳情請參閱 Vertex AI Java API 參考說明文件。
如要向 Vertex AI 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
在試用這個範例之前,請先按照 Vertex AI 快速入門:使用用戶端程式庫中的操作說明設定 Node.js。詳情請參閱 Vertex AI Node.js API 參考說明文件。
如要向 Vertex AI 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
控制台
如要使用 Google Cloud 主控台調整文字嵌入模型,您可以按照下列步驟啟動自訂管道:
- 在 Google Cloud 控制台的 Vertex AI 專區中,前往「Vertex AI Pipelines」頁面。
- 按一下「Create run」,開啟「Create pipeline run」窗格。
- 按一下「從現有的管道中選取」,然後輸入下列詳細資料:
- 在「選取資源」下拉式選單中,選取「ml-pipeline」。
- 從「Repository」下拉式選單中選取「llm-text-embedding」。
- 在「管道或元件」下拉式選單中,選取「tune-text-embedding-model」。
- 從「Version」下拉式選單中選取「v1.1.3」版本。
- 指定執行名稱,以便唯一識別管道執行作業。
- 在「Region」下拉式選單中,選取要建立管道執行作業的區域,這也是建立微調模型的區域。
- 按一下「繼續」。系統隨即會顯示「Runtime configuration」窗格。
- 在「Cloud storage location」(Cloud Storage 位置) 下方,按一下「Browse」(瀏覽),選取用於儲存管道輸出構件資料的 Cloud Storage 值區,然後按一下「Select」(選取)。
- 在「管道參數」下方,指定微調管道的參數。三個必要參數為
corpus_path
、queries_path
和train_label_path
,格式請參閱「準備嵌入資料集」一文。如要進一步瞭解各個參數,請參閱本節的「REST」分頁。 - 按一下「提交」,即可建立管道執行作業。
其他支援的功能
文字嵌入調整功能支援 VPC Service Controls,並可在建立 PipelineJob
時傳遞 network
參數,設定在虛擬私有雲 (VPC) 中執行。
如要使用CMEK (客戶管理的加密金鑰),請在建立 PipelineJob
時,將金鑰傳遞至 parameterValues.encryption_spec_key_name
管道參數,以及 encryptionSpec.kmsKeyName
參數。
使用微調後的模型
在 Model Registry 中查看經過調整的模型
調整工作完成後,系統不會自動將調整後的模型部署至端點。並在 Model Registry 中提供做為模型資源。您可以使用 Google Cloud 控制台查看目前專案中的模型清單,包括已調整的模型。
如要在 Google Cloud 控制台中查看經過微調的模型,請前往 Vertex AI Model Registry 頁面。
部署模型
調整嵌入模型後,您需要部署模型資源。如要部署經過調整的嵌入模型,請參閱「將模型部署至端點」。
與基礎模型不同,經過調校的文字嵌入模型是由使用者管理。包括管理機器類型和加速器等資源。為避免在預測期間發生記憶體不足錯誤,建議您使用 NVIDIA_TESLA_A100
GPU 類型進行部署,該類型可支援任何輸入長度的批次大小 (最多 5)。
與 textembedding-gecko
基礎模型類似,經過調整的模型最多可支援 3072 個符記,並可截斷較長的輸入內容。
取得已部署模型的預測結果
調校模型部署完成後,您可以使用下列任一指令,向調校模型端點發出要求。
經過調整的 textembedding-gecko@001
模型 curl 指令範例
如要從經過調整的 textembedding-gecko@001
版本取得預測結果,請使用下方的 curl 指令範例。
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
ENDPOINT_URI=https://${LOCATION}-aiplatform.googleapis.com
MODEL_ENDPOINT=TUNED_MODEL_ENDPOINT_ID
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
${ENDPOINT_URI}/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${MODEL_ENDPOINT}:predict \
-d '{
"instances": [
{
"content": "Dining in New York City"
},
{
"content": "Best resorts on the east coast"
}
]
}'
非 textembedding-gecko@001
模型的 curl 指令範例
其他模型的調校版本 (例如 textembedding-gecko@003
和 textembedding-gecko-multilingual@001
) 需要 2 個額外的輸入:task_type
和 title
。如要進一步瞭解這些參數,請參閱 curl 指令
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
ENDPOINT_URI=https://${LOCATION}-aiplatform.googleapis.com
MODEL_ENDPOINT=TUNED_MODEL_ENDPOINT_ID
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
${ENDPOINT_URI}/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${MODEL_ENDPOINT}:predict \
-d '{
"instances": [
{
"content": "Dining in New York City",
"task_type": "DEFAULT",
"title": ""
},
{
"content": "There are many resorts to choose from on the East coast...",
"task_type": "RETRIEVAL_DOCUMENT",
"title": "East Coast Resorts"
}
]
}'
輸出範例
無論版本為何,這項輸出內容都適用於 textembedding-gecko
和 textembedding-gecko-multilingual
模型。
{
"predictions": [
[ ... ],
[ ... ],
...
],
"deployedModelId": "...",
"model": "projects/.../locations/.../models/...",
"modelDisplayName": "tuned-text-embedding-model",
"modelVersionId": "1"
}
後續步驟
- 如要取得嵌入值的批次預測結果,請參閱「取得文字嵌入值的批次預測結果」
- 如要進一步瞭解多模態嵌入,請參閱「取得多模態嵌入」
- 如需有關純文字應用情境的資訊 (以文字為基礎的語意搜尋、叢集、長篇文件分析,以及其他文字檢索或問答應用情境),請參閱「取得文字嵌入」。