Vertex AI Text Embeddings API を使用すると、Vertex AI の生成 AI を使用してテキスト エンベディングを作成できます。テキスト エンベディングは、単語とフレーズ間の関係をとらえたテキストの数値表現です。ML モデル(特に生成 AI モデル)は、大規模なテキスト データセット内のパターンを識別してこうしたエンベディングを作成することに適しています。アプリケーションでは、言語を処理および生成するためにテキスト エンベディングを使用して、コンテンツに固有の複雑な意味とセマンティックな関係を認識できます。テキスト エンベディングは、Google 検索が終わるたび、あるいは音楽ストリーミングのおすすめが表示されるたびに操作します。
テキスト エンベディングの一般的なユースケースは次のとおりです。
- セマンティック検索: 意味的類似性によってランク付けされたテキストを検索します。
- 分類: 指定されたテキストと類似するテキスト属性を持つアイテムのクラスを返します。
- クラスタリング: 指定したテキストと類似したテキスト属性を持つアイテムをクラスタ化します。
- 外れ値検出: テキスト属性が指定されたテキストとの関連性が最も低いアイテムを返します。
- 会話インターフェース: 会話レベルのエンベディング空間など、類似のレスポンスにつながる可能性のある文グループをクラスタ化します。
テキスト エンベディングは、テキストを浮動小数点数の配列(ベクトル)に変換することで機能します。こうしたベクトルは、テキストの意味を捉えるように設計されています。エンベディング配列の長さは、ベクトルの次元数と呼ばれます。たとえば、テキストの一節は、数百の次元を含むベクトルで表せます。次に、2 つのテキストのベクトル表現間の数値的な距離を計算することで、アプリケーションでオブジェクト間の類似性を判断できます。
Vertex AI Text Embeddings API は、密なベクトル表現を使用し、たとえば、text-embedding-gecko は 768 次元のベクトルを使用します。密なベクトル エンベディング モデルは、大規模言語モデルで使用されるものと同様のディープ ラーニング手法を使用します。単語を直接数値にマッピングする傾向があるスパース ベクトルとは異なり、密なベクトルは、テキストの意味をより適切に表現するように設計されています。生成 AI で密なベクトル エンベディングを使用するメリットは、単語や構文が一致する箇所を直接検索するのではなく、同じ言語を使用していなくても、クエリの意味に一致する文章をより適切に検索できることです。
- エンベディングの詳細については、AI のマルチツールのご紹介: ベクトル エンベディングをご覧ください。
- エンベディングに関する ML 基礎コースを受講するには、エンベディングをご覧ください。
- ベクトル エンベディングをデータベースに保存する方法の詳細については、Discover ページとベクトル検索の概要をご覧ください。
前提条件
エンベディングを正常に作成するには、特定の前提条件があります。始める前に、クイックスタート: テキスト エンベディングを試すをご覧ください。
この Colab を使用して、新しくリリースされたテキスト エンベディング モデル(
Jupyter ノートブック: Colab または Jupyter ノートブックを使用してテキスト エンベディング モデルを呼び出します。 |
ユースケースの例: 本をおすすめする chatbot を開発する
本をおすすめする chatbot を開発する場合は、まず、ディープ ニューラル ネットワーク(DNN)を使用して、それぞれの本をエンベディング ベクトルに変換します。1 つのエンベディング ベクトルが 1 冊の本を表します。DNN への入力として本のタイトルだけか、テキストの内容だけを与えることができます。また、この両方とジャンルなど書籍を説明する他のメタデータを併用することもできます。
この例のエンベディングは、何千もの書籍タイトル、その要約とジャンルから構成されています。たとえば、「Wuthering Heights by Emily Brontë」と「Persuasion by Jane Austen」のような書籍の表現は類似した(数値的な表現の距離が近い)表現になりますが、「The Great Gatsby by F. Scott Fitzgerald」という書籍の数値的な表現は、時代やジャンル、要約が似ていないため、距離が遠くなります。
入力は、エンベディング空間の向きに影響を与えます。たとえば、入力が書籍のタイトルのみの場合、タイトルは似ていても要約が大きく異なる 2 つの書籍が近い状態になる可能性があります。ただし、入力にタイトルと要約を含めると、これらの書籍はエンベディング空間では類似性が低くなります。
この chatbot は生成 AI と連携して、クエリに基づいて書籍の要約を生成し、ユーザーが関心を持ちそうな(または好みでないような)書籍を提案します。
サポートされているモデル
利用可能なテキスト エンベディング モデルのバージョンについては、利用可能な安定版モデルをご覧ください。利用可能なテキスト エンベディング モデルの最新バージョンについては、最新モデルをご覧ください。
安定版のモデル バージョン(textembedding-gecko@003
など)を指定することを強くおすすめします。最新バージョンのモデルはプレビュー版であり、一般提供(GA)版ではありません。最新バージョンはプレビュー版であるため、本番環境への対応が保証されているわけではありません。
下位互換性のあるエンベディングを必要とするアプリケーションには、安定版のモデル バージョン(textembedding-gecko@003
など)を使用することが特に重要です。下位互換性が問題ではなく、最新のモデル バージョンを使用する場合は、@latest
を明示的に指定する必要があります。バージョンが指定されていない場合、textembedding-gecko
はデフォルトで textembedding-gecko@003
に設定され、textembedding-gecko-multilingual
はデフォルトで textembedding-gecko-multilingual@001
に設定されます。
最新モデル
プレビュー版では、次の 2 つのモデルを使用できます。
text-embedding-preview-0409
text-multilingual-embedding-preview-0409
これらのモデルは、検索や分類といったさまざまな下流のタスクをカバーする確立されたベンチマークで、以前のモデルよりも改善されています。詳細については、Gecko: 大規模言語モデルから抽出した汎用テキスト エンベディングをご覧ください。
これらのモデルは、それぞれ textembedding-gecko@003
モデルや textembedding-gecko-multilingual@001
モデルよりもエンベディングの品質が向上しています。また、どちらのモデルも model-name@version
命名規則から外れています。モデルは、@version サフィックスなしで指定します。以下に例を示します。
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT/locations/us-central1/publishers/google/models/text-embedding-preview-0409:predict -d $'{
"instances": [
{ "content": "What is life?"}
],
}'
新しいモデルは、品質の向上に加え、次の機能をサポートしています。
新しいパラメータ
outputDimensionality
がサポートされました。このパラメータは、エンベディングのサイズを小さくする(たとえばストレージを最適化する目的で)ために使用できます。QUESTION_ANSWERING
FACT_VERIFICATION
2 つの新しいタスクタイプがサポートされました。他のタスクタイプについては、モデル リファレンスをご覧ください。
次の例では、新しい機能を示します。
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT/locations/us-central1/publishers/google/models/text-embedding-preview-0409:predict -d $'{
"instances": [
{
"task_type": "QUESTION_ANSWERING",
"content": "What is life?"
}
],
"parameters": {
"outputDimensionality": 256
}
}'
これらのモデルを使用する場合は、次の制限事項が適用されます。
- ミッション クリティカルなシステムや本番環境のシステムでは、これらのプレビュー モデルを使用しないでください。
- これらのモデルは
us-central1
でのみ使用できます。 - バッチ予測はサポートされていません。
- カスタマイズはサポートされていません。
テキストのスニペットに対するテキスト エンベディングを取得する
テキストのスニペットのテキスト エンベディングを取得するには、Vertex AI API または Vertex AI SDK for Python を使用します。us-central1
では、入力テキストが 1 つのリクエストにつき 250 個までに制限されています。他のリージョンでは、入力テキストは最大 5 個です。各入力テキストのトークンの上限は 2,000 です。この長さより長い入力は暗黙的に切り捨てられます。autoTruncate
を false
に設定して、暗黙的な切り捨てを無効にすることもできます。
これらの例では、textembedding-gecko@003
モデルを使用します。
REST
テキスト エンベディングを取得するには、パブリッシャー モデルのモデル ID を指定して POST リクエストを送信します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: 実際のプロジェクト ID。
- TEXT: エンベディングを生成するテキスト。上限: 5 テキスト(1 テキストあたり最大 3,072 トークン)。
- AUTO_TRUNCATE:
false
に設定した場合、テキストがトークンの上限を超えると、リクエストが失敗します。デフォルト値はtrue
です。
HTTP メソッドと URL:
POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/textembedding-gecko@003:predict
リクエストの本文(JSON):
{ "instances": [ { "content": "TEXT"} ], "parameters": { "autoTruncate": AUTO_TRUNCATE } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/textembedding-gecko@003:predict"
PowerShell
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/textembedding-gecko@003:predict" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。容量を節約するために、values
は切り捨てられています。
curl コマンドの例
MODEL_ID="textembedding-gecko@003"
PROJECT_ID=PROJECT_ID
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/${MODEL_ID}:predict -d \
$'{
"instances": [
{ "content": "What is life?"}
],
}'
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。
Go
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Go の設定手順を完了してください。詳細については、Vertex AI Go API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Java
このサンプルを試す前に、Vertex AI クライアント ライブラリをインストールするにある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Node.js
このサンプルを試す前に、Vertex AI クライアント ライブラリをインストールするにある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
テキストのスニペットのテキスト エンベディングを取得する(プレビュー版のモデル)
このセクションでは、新しいエンベディング モデルのサンプルを示します。
text-embedding-preview-0409
text-multilingual-embedding-preview-0409
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。
Go
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Go の設定手順を完了してください。詳細については、Vertex AI Go API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Java
このサンプルを試す前に、Vertex AI クライアント ライブラリをインストールするにある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Node.js
このサンプルを試す前に、Vertex AI クライアント ライブラリをインストールするにある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
ベクトル データベースにエンベディングを追加する
エンベディングを生成すると、Vector Search のようなベクトル データベースにエンベディングを追加できます。これにより低レイテンシでの検索が可能になり、データサイズが大きくなるほどそれが重要になります。
ベクトル検索の詳細については、ベクトル検索の概要をご覧ください。
2023 年 8 月以降にリリースされたモデルの API の変更
textembedding-gecko@003
や textembedding-gecko-multilingual@001
など、2023 年 8 月以降にリリースされたモデル バージョンを使用する場合、新しいタスク タイプ パラメータとオプションのタイトルがあります(task_type=RETRIEVAL_DOCUMENT
でのみ有効)。
これらの新しいパラメータは、これらの公開プレビュー モデルと、今後のすべての安定版のモデルに適用されます。
{
"instances": [
{
"task_type": "RETRIEVAL_DOCUMENT",
"title": "document title",
"content": "I would like embeddings for this text!"
},
]
}
task_type
パラメータは、モデルが質の高いエンベディングを生成できるように、対象となるダウンストリーム アプリケーションとして定義されます。これは次のいずれかの値を取る文字列です。
task_type |
説明 |
---|---|
RETRIEVAL_QUERY |
指定したテキストが検索または取得設定のクエリであることを指定します。 |
RETRIEVAL_DOCUMENT |
指定したテキストが検索または取得設定のドキュメントであることを指定します。 |
SEMANTIC_SIMILARITY |
指定したテキストが意味的テキスト類似性(STS)で使用されることを指定します。 |
CLASSIFICATION |
エンベディングが分類に使用されることを指定します。 |
CLUSTERING |
エンベディングがクラスタリングに使用されることを指定します。 |
QUESTION_ANSWERING |
クエリ エンベディングが質問への回答に使用されることを指定します。ドキュメント側には RETRIEVAL_DOCUMENT を使用します。 |
FACT_VERIFICATION |
クエリ エンベディングが事実確認に使用されることを指定します。 |
textembedding-gecko-multilingual
モデルの言語対応
textembedding-gecko-multilingual@001
モデルは、Arabic (ar)
、Bengali (bn)
、English (en)
、Spanish (es)
、German (de)
、Persian (fa)
、Finnish (fi)
、French (fr)
、Hindi (hi)
、Indonesian (id)
、Japanese (ja)
、Korean (ko)
、Russian (ru)
、Swahili (sw)
、Telugu (te)
、Thai (th)
、Yoruba (yo)
、Chinese (zh)
で評価されています。
サポートされている言語は、Afrikaans
、Albanian
、Amharic
、Arabic
、Armenian
、Azerbaijani
、Basque
、Belarusian
、Bengali
、Bulgarian
、Burmese
、Catalan
、Cebuano
、Chichewa
、Chinese
、Corsican
、Czech
、Danish
、Dutch
、English
、Esperanto
、Estonian
、Filipino
、Finnish
、French
、Galician
、Georgian
、German
、Greek
、Gujarati
、Haitian Creole
、Hausa
、Hawaiian
、Hebrew
、Hindi
、Hmong
、Hungarian
、Icelandic
、Igbo
、Indonesian
、Irish
、Italian
、Japanese
、Javanese
、Kannada
、Kazakh
、Khmer
、Korean
、Kurdish
、Kyrgyz
、Lao
、Latin
、Latvian
、Lithuanian
、Luxembourgish
、Macedonian
、Malagasy
、Malay
、Malayalam
、Maltese
、Maori
、Marathi
、Mongolian
、Nepali
、Norwegian
、Pashto
、Persian
、Polish
、Portuguese
、Punjabi
、Romanian
、Russian
、Samoan
、Scottish Gaelic
、Serbian
、Shona
、Sindhi
、Sinhala
、Slovak
、Slovenian
、Somali
、Sotho
、Spanish
、Sundanese
、Swahili
、Swedish
、Tajik
、Tamil
、Telugu
、Thai
、Turkish
、Ukrainian
、Urdu
、Uzbek
、Vietnamese
、Welsh
、West Frisian
、Xhosa
、Yiddish
、Yoruba
、Zulu
です。
次のステップ
- 基盤モデルのチューニング方法を学習する。
- 責任ある AI のベスト プラクティスと Vertex AI の安全フィルタについて学習する。