テキスト エンベディングを取得する

このドキュメントでは、Vertex AI の Text embeddings API を使用してテキスト エンベディングを作成する方法について説明します。

Vertex AI Text Embeddings API は、密なベクトル表現を使用します。たとえば、gemini-embedding-001 は 3,072 次元のベクトルを使用します。密なベクトル エンベディング モデルは、大規模言語モデルで使用されるものと同様のディープ ラーニング手法を使用します。単語を直接数値にマッピングする傾向があるスパース ベクトルとは異なり、密なベクトルは、テキストの意味をより適切に表現するように設計されています。生成 AI で密なベクトル エンベディングを使用するメリットは、単語や構文が一致する箇所を直接検索するのではなく、同じ言語を使用していなくても、クエリの意味に一致する文章をより適切に検索できることです。

ベクトルは正規化されているため、コサイン類似度、ドット積、ユークリッド距離を使用して同じ類似性ランキングを提供できます。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Enable the Vertex AI API.

    Enable the API

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Enable the Vertex AI API.

    Enable the API

  6. エンベディング ジョブのタスクタイプを選択します。
  7. サポートされているモデル

    テキスト エンベディングは、次のモデルを使用して取得できます。

    モデル名 説明 出力のサイズ 最大シーケンス長 サポートされているテキスト言語
    gemini-embedding-001 英語、多言語、コードタスクで最先端のパフォーマンスを実現します。text-embedding-005text-multilingual-embedding-002 などの以前の専門モデルを統合し、それぞれのドメインでより優れたパフォーマンスを実現します。詳しくは、技術レポートをご覧ください。 最大 3,072 2,048 トークン サポートされているテキスト言語
    text-embedding-005 英語とコードのタスクに特化しています。 最大 768 2,048 トークン 英語
    text-multilingual-embedding-002 多言語タスクに特化しています。 最大 768 2,048 トークン サポートされているテキスト言語

    埋め込みの品質を高めるには、最高のパフォーマンスを提供するように設計された大規模モデルである gemini-embedding-001 を使用します。なお、gemini-embedding-001 はリクエストごとに 1 つのインスタンスをサポートします。

    テキストのスニペットに対するテキスト エンベディングを取得する

    テキストのスニペットのテキスト エンベディングを取得するには、Vertex AI API または Vertex AI SDK for Python を使用します。

    API の上限

    1 つのリクエストにつき入力テキストは 250 個までに制限されています。API の最大入力トークンの上限は 20,000 です。この上限を超える入力は、400 エラーになります。個々の入力テキストはさらに 2,048 トークンに制限されており、超過分は通知なく切り捨てられます。autoTruncatefalse に設定して、暗黙的な切り捨てを無効にすることもできます。

    詳細については、テキスト エンベディングの上限をご覧ください。

    エンベディング ディメンションを選択する

    どのモデルも、デフォルトでフルレングスのエンベディング ベクトルを生成します。gemini-embedding-001 の場合、このベクトルは 3,072 次元を持ち、他のモデルは 768 次元のベクトルを生成します。ただし、output_dimensionality パラメータを使用すると、出力エンベディング ベクトルのサイズを制御できます。出力のディメンションを小さくすると、ストレージ スペースを節約し、ダウンストリーム アプリケーションの計算効率を高めることができます。品質の低下はわずかです。

    次の例では、gemini-embedding-001 モデルを使用します。

    Python

    インストール

    pip install --upgrade google-genai

    詳しくは、 SDK リファレンス ドキュメントをご覧ください。

    Vertex AI で Gen AI SDK を使用するための環境変数を設定します。

    # Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
    # with appropriate values for your project.
    export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
    export GOOGLE_CLOUD_LOCATION=global
    export GOOGLE_GENAI_USE_VERTEXAI=True

    from google import genai
    from google.genai.types import EmbedContentConfig
    
    client = genai.Client()
    response = client.models.embed_content(
        model="gemini-embedding-001",
        contents=[
            "How do I get a driver's license/learner's permit?",
            "How long is my driver's license valid for?",
            "Driver's knowledge test study guide",
        ],
        config=EmbedContentConfig(
            task_type="RETRIEVAL_DOCUMENT",  # Optional
            output_dimensionality=3072,  # Optional
            title="Driver's License",  # Optional
        ),
    )
    print(response)
    # Example response:
    # embeddings=[ContentEmbedding(values=[-0.06302902102470398, 0.00928034819662571, 0.014716853387653828, -0.028747491538524628, ... ],
    # statistics=ContentEmbeddingStatistics(truncated=False, token_count=13.0))]
    # metadata=EmbedContentMetadata(billable_character_count=112)

    ベクトル データベースにエンベディングを追加する

    エンベディングを生成すると、Vector Search のようなベクトル データベースにエンベディングを追加できます。これにより低レイテンシでの検索が可能になり、データサイズが大きくなるほどそれが重要になります。

    ベクトル検索の詳細については、ベクトル検索の概要をご覧ください。

    次のステップ