このページでは、Text Embedding API を使用してテキスト エンベディングを作成する方法について説明します。
Vertex AI は、Text Embedding API を介して Google Distributed Cloud(GDC)エアギャップのテキスト エンベディングをサポートしています。テキスト エンベディングは ベクトル表現を使用します
テキスト エンベディングは、サポートされている言語で記述されたテキストデータを数値ベクトルに変換します。これらのベクトル表現は、対象となる単語の意味論的意味とコンテキストを取り込むように設計されています。テキスト エンベディング モデルは、ドキュメントの検索、質問と回答、分類、テキストの事実確認など、さまざまなタスクタイプに最適化されたエンベディングを生成できます。
テキスト エンベディングで使用される主なコンセプトの詳細については、次のドキュメントをご覧ください。
- エンベディングの詳細については、テキスト エンベディングの概要をご覧ください。
- テキスト エンベディング モデルの詳細については、エンベディング モデルをご覧ください。
- タスクタイプで最適化されたエンベディングを生成する方法については、エンベディングのタスクタイプを選択するをご覧ください。
- 各エンベディング モデルでサポートされている言語については、サポートされているテキスト エンベディング言語をご覧ください。
始める前に
GDC プロジェクトでテキスト エンベディングを生成するには、必要な権限を管理者にリクエストします。
IAM ロールをリクエストする
IAM プロジェクト管理者に連絡して、使用するモデルに応じて、プロジェクトの名前空間で次のいずれかのロールをリクエストします。
- AI テキスト エンベディング デベロッパー(
ai-text-embedding-developer): テキスト エンベディング モデルを使用してテキスト エンベディングを生成します。 - AI テキスト エンベディング多言語デベロッパー(
ai-text-embedding-multilingual-developer): テキスト エンベディング多言語モデルを使用してテキスト エンベディングを生成します。
これらのロールの詳細については、IAM 権限を準備するをご覧ください。サービス アカウントのロール バインディングについては、サービス アカウントを設定するをご覧ください。
環境を準備する
GDC プロジェクトでテキスト エンベディングを使用する前に、次の手順を行います。
- Vertex AI 用のプロジェクトを設定する。
- 言語とタスクタイプに応じて、テキスト エンベディングに使用可能なモデルのいずれかを選択します。
- 使用するモデルに応じて、Text Embedding API または Text Embedding Multilingual API を有効にします。
モデル リクエスト、サービス アカウント、IAM ロール バインディングには同じプロジェクトを使用する必要があります。
テキストのスニペットに対するテキスト エンベディングを取得する
前提条件を満たしている場合は、Text Embedding モデルまたは Text Embedding Multilingual モデルを使用して、API または SDK for Python を使用してテキスト スニペットのテキスト エンベディングを取得できます。
次の例では、text-embedding-004 モデルを使用します。
Text Embedding API に REST リクエストを送信します。それ以外の場合は、Python スクリプトからモデルを操作してテキスト エンベディングを取得します。
REST
テキスト エンベディングを取得するには、モデル エンドポイントを指定して POST リクエストを送信します。
リクエストの手順は次のとおりです。
リクエストの内容を
request.jsonという名前の JSON ファイルに保存します。ファイルは次の例のようになります。{ "instances": [ { "content": "What is life?", "task_type": "", "title": "" } ] }curlツールを使用してリクエストを送信します。curl -X POST \ -H "Authorization: Bearer TOKEN"\ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://ENDPOINT:443/v1/projects/PROJECT/locations/PROJECT/endpoints/MODEL:predict"次のように置き換えます。
TOKEN: 取得した認証トークン。ENDPOINT: 組織で使用するテキスト エンベディングまたは多言語テキスト エンベディングのエンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。PROJECT: プロジェクト名。MODEL: 使用するモデル。使用できる値は次のとおりです。- テキスト エンベディング モデルの場合は
endpoint-text-embedding。 endpoint-text-embedding-multilingual(テキスト エンベディング多言語モデルの場合)。
- テキスト エンベディング モデルの場合は
出力は次のようになります。
{"predictions":[[-0.00668720435,3.20804138e-05,-0.0281705819,-0.00954890903,-0.0818724185,0.0150693133,-0.00677698106,0.0167487375,-0.0534791686,0.00208711182,0.032938987,-0.01491543]],"deployedModelId":"text-embedding","model":"models/text-embedding/1","modelDisplayName":"text-embedding","modelVersionId":"1"}
Python
Python スクリプトからテキスト エンベディングを取得する手順は次のとおりです。
リクエストの内容を
request.jsonという名前の JSON ファイルに保存します。ファイルは次の例のようになります。{ "instances": [ { "content": "What is life?", "task_type": "", "title": "" } ] }必要な Python ライブラリをインストールします。
pip install absl-pyclient.pyという名前の Python ファイルを作成します。ファイルは次の例のようになります。import json import os from typing import Sequence import grpc from absl import app from absl import flags from google.protobuf import json_format from google.protobuf.struct_pb2 import Value from google.cloud.aiplatform_v1.services import prediction_service _INPUT = flags.DEFINE_string("input", None, "input", required=True) _HOST = flags.DEFINE_string("host", None, "Prediction endpoint", required=True) _ENDPOINT_ID = flags.DEFINE_string("endpoint_id", None, "endpoint id", required=True) _TOKEN = flags.DEFINE_string("token", None, "STS token", required=True) # ENDPOINT_RESOURCE_NAME is a placeholder value that doesn't affect prediction behavior. ENDPOINT_RESOURCE_NAME="projects/PROJECT/locations/PROJECT/endpoints/MODEL" os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = CERT_NAME # predict_client_secure builds a client that requires TLS def predict_client_secure(host): with open(os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"], 'rb') as f: creds = grpc.ssl_channel_credentials(f.read()) channel_opts = () channel_opts += (('grpc.ssl_target_name_override', host),) client = prediction_service.PredictionServiceClient( transport=prediction_service.transports.grpc.PredictionServiceGrpcTransport( channel=grpc.secure_channel(target=host+":443", credentials=creds, options=channel_opts))) return client def predict_func(client, instances, token): resp = client.predict( endpoint=ENDPOINT_RESOURCE_NAME, instances=instances, metadata=[ ("x-vertex-ai-endpoint-id", _ENDPOINT_ID.value), ("authorization", "Bearer " + token),]) print(resp) def main(argv: Sequence[str]): del argv # Unused. with open(_INPUT.value) as json_file: data = json.load(json_file) instances = [json_format.ParseDict(s, Value()) for s in data["instances"]] client = predict_client_secure(_HOST.value,) predict_func(client=client, instances=instances, token=_TOKEN.value) if __name__=="__main__": app.run(main)次のように置き換えます。
PROJECT: プロジェクト名。MODEL: 使用するモデル。使用可能な値は次のとおりです。- テキスト エンベディング モデルの場合は
text-embedding。 text-embedding-multilingual(テキスト エンベディング多言語モデルの場合)。
- テキスト エンベディング モデルの場合は
CERT_NAME: 認証局(CA)証明書ファイルの名前(org-1-trust-bundle-ca.certなど)。この値は、開発環境でのみ必要です。それ以外の場合は省略します。
リクエストを送信します。
python client.py --token=TOKEN --host=ENDPOINT --input=request.json --endpoint_id=MODEL次のように置き換えます。
TOKEN: 取得した認証トークン。ENDPOINT: 組織で使用するテキスト エンベディングまたは多言語テキスト エンベディングのエンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。MODEL: 使用するモデル。使用できる値は次のとおりです。- テキスト エンベディング モデルの場合は
text-embedding。 text-embedding-multilingual(テキスト エンベディング多言語モデルの場合)。
- テキスト エンベディング モデルの場合は
出力は次のようになります。
{"predictions":[[-0.00668720435,3.20804138e-05,-0.0281705819,-0.00954890903,-0.0818724185,0.0150693133,-0.00677698106,0.0167487375,-0.0534791686,0.00208711182,0.032938987,-0.01491543]],"deployedModelId":"text-embedding","model":"models/text-embedding/1","modelDisplayName":"text-embedding","modelVersionId":"1"}