このページでは、エンベディング モデルの選択について説明し、エンベディング モデルを使用して RAG コーパスを作成する方法を示します。エンベディング モデルと RAG コーパスの関連付けは、RAG コーパスの存続期間中は固定されます。
エンベディングの概要
エンベディングは入力の数値表現です。アプリケーションでエンベディングを使用すると、複雑な意味とセマンティックな関係を認識して、言語の処理と生成を行うことができます。
エンベディングは、テキスト、画像、動画をベクトルと呼ばれる浮動小数点数の配列に変換することで機能します。エンベディング空間内の 2 つのベクトルが近いほど、入力の類似度は高くなります。
エンベディング モデルは、セマンティック検索システムの重要なコンポーネントです。検索システムのパフォーマンスは、エンベディング モデルがデータ内のリレーションシップをマッピングする精度によって異なります。
エンベディング モデルの選択
Vertex AI RAG Engine は、検索拡張生成(RAG)を実装し、RAG コーパス内で使用する次のエンベディング モデルを選択できます。
エンベディング モデルのタイプ | 説明 |
---|---|
Vertex AI テキスト エンベディング モデル | Google などのパブリッシャーがトレーニングしたモデル。これらのモデルは、大規模なテキスト データセットでトレーニングされており、多くのタスクで強力なベースラインを提供します。 |
ファインチューニングされた Vertex AI テキスト エンベディング モデル | Vertex AI テキスト エンベディング モデルは、専門的な知識や高度にチューニングされたパフォーマンスを提供するようにファインチューニングされています。 |
OSS エンベディング モデル | 英語のみと多言語のバージョンで提供されるサードパーティのオープンソース エンベディング モデル。 |
サポートされているエンベディング モデル
エンベディング モデルは、コーパスの作成と、レスポンスの生成時の検索と取得に使用されます。このセクションでは、サポートされているエンベディング モデルを示します。
モデル バージョン | 説明 |
---|---|
text-embedding-005 |
デフォルトのエンベディング モデル。 RAG コーパスで使用することをおすすめします。 |
text-embedding-004 |
|
text-multilingual-embedding-002 |
RAG コーパスで使用することをおすすめします。 |
textembedding-gecko@003 |
|
textembedding-gecko-multilingual@001 |
|
textembedding-gecko@002 |
ファインチューニングされたバージョンのみ。 |
textembedding-gecko@001 |
ファインチューニングされたバージョンのみ。 |
オープンソースのエンベディング モデル
次のオープン エンベディング モデルもサポートされています。Model Garden で確認できます。
e5-base-v2
e5-large-v2
e5-small-v2
multilingual-e5-large
multilingual-e5-small
Vertex AI テキスト エンベディング モデルを使用する
Vertex AI Text Embeddings API は Gecko エンベディング モデルを使用します。このモデルは、768 次元の密エンベディング ベクトルを生成します。密エンベディングは、単語を直接数値にマッピングする傾向があるスパース ベクトルとは異なり、テキストの意味を格納します。生成 AI で密なベクトル エンベディングを使用するメリットは、単語や構文が一致する箇所を直接検索するのではなく、同じ言語を使用していなくても、クエリの意味に一致する文章をより適切に検索できることです。
Gecko モデル
Gecko モデルは、英語のみと多言語のバージョンで利用できます。ファインチューニングされた Gecko モデルとは異なり、パブリッシャーの Gecko モデルはデプロイする必要がないため、Vertex AI RAG Engine で使用するモデルセットとしては推奨されます。
使用されているデフォルトのエンベディング モデルを特定する場合や、RAG コーパスで使用することをおすすめする Gecko モデルのリストを必要とする場合は、サポートされているエンベディング モデルをご覧ください。
Gecko モデルのサポート終了時期
パブリッシャーの Gecko モデルは廃止される可能性があります。その場合、パブリッシャーの Gecko モデルは、サポート終了前に作成された RAG コーパスであっても、Vertex AI RAG Engine で使用できません。Gecko モデルが廃止された場合は、RAG コーパスを移行する必要があります。つまり、新しい RAG コーパスを作成し、データを再インポートする必要があります。別の方法として、ファインチューニングされた Gecko モデルまたはセルフデプロイの OSS エンベディング モデルを使用することもできます。このモデルは、モデルのサポート終了後もサポートされます。
パブリッシャーの Gecko モデルを使用して RAG コーパスを作成する
次のコードサンプルは、パブリッシャーの Gecko モデルを使用して RAG コーパスを作成する方法を示しています。
curl
ENDPOINT=us-central1-aiplatform.googleapis.com
PROJECT_ID=YOUR_PROJECT_ID
// Set this to your choice of publisher Gecko model. Note that the full resource name of the publisher model is required.
// Example: projects/${PROJECT_ID}/locations/us-central1/publishers/google/models/text-embedding-004
ENDPOINT_NAME=YOUR_ENDPOINT_NAME
// Set a display name for your corpus.
// For example, "my test corpus"
CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME
// CreateRagCorpus
// Input: ENDPOINT, PROJECT_ID, ENDPOINT_NAME, CORPUS_DISPLAY_NAME
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora \
-d '{
"display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
"rag_embedding_model_config" : {
"vertex_prediction_endpoint": {
"endpoint": '\""${ENDPOINT_NAME}"\"'
}
}
}'
Vertex AI SDK for Python
import vertexai
from vertexai import rag
# Set Project
PROJECT_ID = "YOUR_PROJECT_ID"
vertexai.init(project=${PROJECT_ID}, location="us-central1")
# Configure a Google first-party embedding model
embedding_model_config = rag.RagEmbeddingModelConfig(
publisher_model="publishers/google/models/text-embedding-004"
)
# Name your corpus
DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"
rag_corpus = rag.create_corpus(
display_name=DISPLAY_NAME, rag_embedding_model_config=embedding_model_config
)
ファインチューニングされた Vertex AI テキスト エンベディング モデルを使用する
基盤のパブリッシャー モデルは、大規模なテキスト データセットでトレーニングされており、多くのタスクで強力なベースラインを提供しますが、モデルに専門的な知識や高度にカスタマイズされたパフォーマンスが必要なシナリオもあります。このような場合は、モデルのチューニングを行い、関連するデータを使用してモデルの表現をファインチューニングできます。このアプローチのもう一つの利点は、モデルをファインチューニングすると、生成された画像がユーザー所有になり、Gecko モデルの非推奨の影響を受けないことです。ファインチューニングされた Gecko エンベディング モデルはすべて、768 次元のベクトルを持つエンベディングを生成します。これらのモデルの詳細については、テキスト エンベディングを取得するをご覧ください。
エンベディング モデルのチューニングの詳細については、テキスト エンベディングをチューニングするをご覧ください。
次のコードサンプルは、デプロイされたファインチューニング済みの Gecko モデルを使用して RAG コーパスを作成する方法を示しています。
curl
ENDPOINT=us-central1-aiplatform.googleapis.com
PROJECT_ID=YOUR_PROJECT_ID
// Your Vertex AI endpoint resource with the deployed fine-tuned Gecko model
// Example: projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT_ID}
ENDPOINT_NAME=YOUR_ENDPOINT_NAME
// Set a display name for your corpus.
// For example, "my test corpus"
CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME
// CreateRagCorpus
// Input: ENDPOINT, PROJECT_ID, ENDPOINT_NAME, CORPUS_DISPLAY_NAME
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora \
-d '{
"display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
"rag_embedding_model_config" : {
"vertex_prediction_endpoint": {
"endpoint": '\""${ENDPOINT_NAME}"\"'
}
}
}'
Vertex AI SDK for Python
import vertexai
from vertexai import rag
# Set Project
PROJECT_ID = "YOUR_PROJECT_ID"
vertexai.init(project=${PROJECT_ID}, location="us-central1")
# Your Vertex Endpoint resource with the deployed fine-tuned Gecko model
ENDPOINT_ID = "YOUR_MODEL_ENDPOINT_ID"
MODEL_ENDPOINT = "projects/${PROJECT_ID}/locations/us-central1/endpoints/${ENDPOINT_ID}"
embedding_model_config = rag.RagEmbeddingModelConfig(
endpoint=${MODEL_ENDPOINT},
)
# Name your corpus
DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"
rag_corpus = rag.create_corpus(
display_name=${DISPLAY_NAME}, rag_embedding_model_config=embedding_model_config
)
OSS エンベディング モデルを使用する
Vertex AI RAG Engine は、英語のみと多言語のサードパーティのオープンソース エンベディング モデルをサポートしています。次の表に、サポートされている E5 モデルを示します。
モデル バージョン | ベースモデル | パラメータ | エンベディングの次元 | 英語のみ |
---|---|---|---|---|
e5-base-v2 |
MiniLM |
109M | 768 | ✔ |
e5-large-v2 |
MiniLM |
335M | 1,024 | ✔ |
e5-small-v2 |
MiniLM |
33M | 384 | ✔ |
multilingual-e5-large |
xlm-roberta-large |
560M | 1,024 | ✗ |
multilingual-e5-small |
microsoft/Multilingual-MiniLM-L12-H384 |
118M | 384 | ✗ |
Vertex AI RAG Engine で E5 モデルを使用するには、Model Garden から E5 モデルをデプロイする必要があります。E5 モデルをデプロイするには、Google Cloud コンソールの E5 テキスト エンベディングをご覧ください。
次のコードサンプルは、デプロイされた E5 モデルを使用して RAG コーパスを作成する方法を示しています。
curl
ENDPOINT=us-central1-aiplatform.googleapis.com
PROJECT_ID=YOUR_PROJECT_ID
// Your Vertex Endpoint resource with the deployed E5 model
// Example: projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT_ID}
ENDPOINT_NAME=YOUR_ENDPOINT_NAME
// Set a display name for your corpus.
// For example, "my test corpus"
CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME
// CreateRagCorpus
// Input: ENDPOINT, PROJECT_ID, ENDPOINT_NAME, CORPUS_DISPLAY_NAME
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora \
-d '{
"display_name" : '\""${CORPUS_DISPLAY_NAME</var>}"\"',
"rag_embedding_model_config" : {
"vertex_prediction_endpoint": {
"endpoint": '\""${ENDPOINT_NAME}"\"'
}
}
}'
Vertex AI SDK for Python
import vertexai
from vertexai import rag
# Set Project
PROJECT_ID = "YOUR_PROJECT_ID"
vertexai.init(project=PROJECT_ID, location="us-central1")
# Your Vertex Endpoint resource with the deployed E5 model
ENDPOINT_ID = "YOUR_MODEL_ENDPOINT_ID"
MODEL_ENDPOINT = "projects/{PROJECT_ID}/locations/us-central1/endpoints/{ENDPOINT_ID}"
embedding_model_config = rag.RagEmbeddingModelConfig(
endpoint=MODEL_ENDPOINT,
)
# Name your corpus
DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"
rag_corpus = rag.create_corpus(
display_name=DISPLAY_NAME, rag_embedding_model_config=embedding_model_config
)