テキスト エンベディングを生成する

google_ml_integration 拡張機能には、publicgoogle_ml の 2 つの異なる Namespace にエンベディング関数が含まれています。このページでは、これらの Namespace の関数を使用してテキスト エンベディングを生成する方法について説明します。

public スキーマの embedding() 関数は、エンドポイントを登録せずに任意の Vertex AI エンベディング モデルで使用できます。タスクタイプなどのカスタム情報を渡す場合は、エンドポイントを登録してから、google_ml スキーマで google_ml.embedding() 関数を使用します。エンドポイントの登録の詳細については、モデルを登録するをご覧ください。

エンベディングの仕組み

AlloyDB で次の特長を満たすデータベースを実行します。

  • データベースに items というテーブルが存在する。このテーブルの各行には、販売する商品が記録されています。

  • items テーブルに complaints という列がある。この TEXT 列には、各商品について記録された購入者からの苦情が保存されます。

  • データベースが Vertex AI Model Garden と統合され、gemini-embedding-001 の英語モデルにアクセスできる。

このデータベースには商品に関する苦情が記録されていますが、苦情は書式なしテキストとして保存されているため、クエリで照会するのは容易ではありません。たとえば、色違いの商品を受け取った顧客からの苦情が最も多い商品を確認したい場合は、テーブルに対して通常の SQL クエリを実行し、さまざまなキーワードで照合を行います。ただし、この方法では、指定したキーワードが含まれている行のみが一致します。

たとえば、SELECT * FROM item WHERE complaints LIKE "%wrong color%" などの基本的な SQL クエリでは、complaints フィールドに The picture shows a blue one, but the one I received was red のみが含まれる行は返されません。

LLM ベースのエンベディングを使用する SQL クエリは、このようなクエリに対して意味的に類似したレスポンスを返すのに役立ちます。エンベディングを適用すると、この例のテーブルで、苦情が特定のテキスト プロンプト(It was the wrong color など)と意味的に類似している項目をクエリできます。

エンベディングを生成するには、次のいずれかのスキーマを選択します。

始める前に

AlloyDB でエンベディングを生成するには、次の操作を行います。

エンベディングを生成する

google_ml.embedding() SQL 関数を使用して、テキスト エンベディング モデルを呼び出します。

モデルを呼び出してエンベディングを生成するには、次のクエリを実行します。

SELECT
 google_ml.embedding( 
   model_id => 'MODEL_ID',
   content => 'CONTENT');

次のように置き換えます。

  • MODEL_ID: 修飾モデル ID(gemini-embedding-001 など)。
  • CONTENT: ベクトル エンベディングに変換するテキスト。

エンベディング生成の例

このセクションでは、登録済みモデル エンドポイントを使用してエンベディングを生成する例を示します。

Gemini のエンベディング モデル

登録済みの gemini-embedding-001 モデル エンドポイントのエンベディングを生成するには、次のステートメントを実行します。

   SELECT
     google_ml.embedding(
       model_id => 'gemini-embedding-001',
       content => 'AlloyDB is a managed, cloud-hosted SQL database service');

AlloyDB クラスタと Vertex AI エンドポイントが異なるプロジェクトにある場合は、model_id をエンドポイントの完全修飾パス(projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-embedding-001 など)に設定します。

登録済みの gemini-embedding-001 モデル エンドポイントのエンベディングを生成するには、次のステートメントを実行します。

   SELECT
     google_ml.embedding(
       model_id => 'gemini-embedding-001',
       content => 'AlloyDB is a managed, cloud-hosted SQL database service');

OpenAI のエンベディング モデル

OpenAI によって登録された text-embedding-ada-002 モデル エンドポイントのエンベディングを生成するには、次のステートメントを実行します。

   SELECT
     google_ml.embedding(
       model_id => 'text-embedding-ada-002',
       content => 'e-mail spam');

OpenAI によって登録された text-embedding-3-small モデル エンドポイントまたは text-embedding-3-large モデル エンドポイントのエンベディングを生成するには、次のステートメントを実行します。

 SELECT
   google_ml.embedding(
     model_id => 'text-embedding-3-small',
     content => 'Vector embeddings in AI');

次のステップ