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

このドキュメントでは、Vertex AI SDK for ABAP を使用してエンベディング モデルを呼び出し、テキストとマルチモーダルのエンベディングを生成する方法について説明します。

エンベディングは、基本的にテキスト、画像、動画を、それらの関連性を捉える方法で表す数値コードです。アプリケーションは、これらのコードによって言語を理解して生成し、特定のコンテンツ内の最も複雑な意味や関係を認識します。このプロセスでは、テキスト、画像、動画をベクトルと呼ばれる数値のリストに変換します。ベクトルは、元のコンテンツの意味を効果的に捉えるように設計されています。

テキスト エンベディングの一般的なユースケースは次のとおりです。

  • セマンティック検索: 意味的類似性によってランク付けされたテキストを検索します。
  • 分類: 指定されたテキストと類似するテキスト属性を持つアイテムのクラスを返します。
  • クラスタリング: 指定したテキストと類似したテキスト属性を持つアイテムをクラスタ化します。
  • 外れ値検出: テキスト属性が指定されたテキストとの関連性が最も低いアイテムを返します。
  • 会話インターフェース: 会話レベルのエンベディング空間など、類似のレスポンスにつながる可能性のある文グループをクラスタ化します。

Vertex AI SDK for ABAP を使用すると、SDK に付属のクラスとメソッドを使用して、ABAP アプリケーション ロジックからエンベディングを生成できます。SDK には、生成されたエンベディングを次のデータストアに push する方法も用意されています。

  • Cloud Storage: Cloud Storage バケットのエンベディングを使用して、ベクトル インデックスの構築とベクトル検索を実行できます。
  • BigQuery: BigQuery データセットのエンベディングを、エンタープライズ データのベクトル データベースとして使用できます。

エンベディングを Pub/Sub トピックにパブリッシュし、BigQuery データセットまたはサブスクライバー システムに転送することもできます。

始める前に

エンベディング モデルで Vertex AI SDK for ABAP を使用する前に、自身または管理者が次の前提条件を満たしていることを確認してください。

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

このセクションでは、Vertex AI SDK for ABAP を使用してエンベディングを生成する方法について説明します。

マルチモーダル エンベディング クラスをインスタンス化する

テキストまたはマルチモーダル入力を使用して Vertex AI マルチモーダル エンベディング モデルを呼び出すには、/GOOG/CL_EMBEDDINGS_MODEL クラスを使用します。クラスをインスタンス化するには、モデル生成パラメータで構成されたモデルキーを渡します。

DATA(lo_embeddings_model) = NEW /goog/cl_embeddings_model( iv_model_key = 'MODEL_KEY' ).

MODEL_KEY は、モデル生成パラメータで構成されているモデルキー名に置き換えます。

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

テキスト スニペットのエンベディングを生成するには、/GOOG/CL_EMBEDDINGS_MODEL クラスの GEN_TEXT_EMBEDDINGS メソッドを使用します。必要に応じて、出力エンベディングのディメンションを指定することもできます。

DATA(ls_addln_params) = VALUE /goog/cl_embeddings_model=>ty_addln_params(
                                output_dimensionality = 'DIMENSION' ).
DATA(lt_embeddings) = lo_embeddings_model->gen_text_embeddings(
                                             iv_content      = 'INPUT_TEXT'
                                             is_addln_params = ls_addln_params
                                        )->get_vector( ).

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

  • DIMENSION: 省略可。出力エンベディングのディメンション。デフォルトのディメンションは 768 です。
  • INPUT_TEXT: エンベディングを生成するテキスト。

SDK に付属のすぐに使用できるテンプレート /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE を使用して、テキスト スニペットのエンベディングを生成することもできます。このテンプレートを使用すると、生成されたエンベディング ファイルにエンベディングとともにエンタープライズ固有の概要情報をキャプチャできます。

/GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE テンプレートに基づいてテキスト スニペットのエンベディングを生成するには、GEN_TEXT_EMBEDDINGS_BY_STRUCT メソッドを使用します。

DATA(ls_embedding_template) = VALUE /goog/cl_embeddings_model=>ty_embeddings_template(
                                      id      = ENTITY_ID
                                      content = INPUT_TEXT
                                      source  = SOURCE_MODULE ).
DATA(ls_addln_params) = VALUE /goog/cl_embeddings_model=>ty_addln_params(
                          output_dimensionality = 'DIMENSION' ).
DATA(lt_embeddings) = lo_embeddings_model->gen_text_embeddings_by_struct(
                                             is_input        = ls_embedding_template
                                             is_addln_params = ls_addln_params
                                        )->get_vector_by_struct( ).

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

  • ENTITY_ID: エンベディング レコードのエンティティ ID。
  • INPUT_TEXT: エンベディングを生成するテキスト。
  • SOURCE_MODULE: エンベディング コンテンツのソース モジュール。
  • DIMENSION: 省略可。出力エンベディングのディメンション。デフォルトのディメンションは 768 です。

画像のエンベディングを生成する

入力画像のエンベディングを生成するには、/GOOG/CL_EMBEDDINGS_MODEL クラスの GEN_IMAGE_EMBEDDINGS メソッドを使用します。画像の元データまたは画像ファイルの Cloud Storage URI を渡すことができます。必要に応じて、画像のコンテキスト テキストと出力エンベディングのディメンションを指定することもできます。

DATA(ls_image) = VALUE /goog/cl_embeddings_model=>ty_image( gcs_uri = 'IMAGE_URI' ).
DATA(lt_embeddings) = lo_embeddings_model->gen_image_embeddings( iv_image           = ls_image
                                                                 iv_contextual_text = 'CONTEXTUAL_TEXT'
                                        )->get_vector( ).

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

  • IMAGE_URI: エンベディングを取得するターゲット画像の Cloud Storage URI。
  • CONTEXTUAL_TEXT: 省略可。エンベディング モデルに対する画像コンテンツの追加のコンテキストと意味。

SDK に付属のすぐに使用できるテンプレート /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE を使用して、画像のエンベディングを生成することもできます。このテンプレートを使用すると、生成されたエンベディング ファイルにエンベディングとともにエンタープライズ固有の概要情報をキャプチャできます。

/GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE テンプレートに基づいて画像のエンベディングを生成するには、GEN_IMAGE_EMBEDDINGS_BY_STRUCT メソッドを使用します。

DATA(ls_image) = VALUE /goog/cl_embeddings_model=>ty_image( gcs_uri = 'IMAGE_URI' ).
DATA(ls_embedding_template) = VALUE /goog/cl_embeddings_model=>ty_embeddings_template(
                                      id      = ENTITY_ID
                                      content = INPUT_TEXT
                                      source  = SOURCE_MODULE ).
DATA(lt_embeddings) = lo_embeddings_model->gen_image_embeddings_by_struct(
                                             iv_image = ls_image
                                             is_input = ls_embedding_template
                                        )->get_vector_by_struct( ).

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

  • IMAGE_URI: エンベディングを取得するターゲット画像の Cloud Storage URI。
  • ENTITY_ID: エンベディング レコードのエンティティ ID。
  • INPUT_TEXT: エンベディングを生成するテキスト。
  • SOURCE_MODULE: エンベディング コンテンツのソース モジュール。

コンテキスト テキストのエンベディングを取得するには、次のコードを使用します。

DATA(lt_context_embeddings) = lo_embeddings_model->get_context_text_vector( ).

このオプションは、単一画像エンベディングの作成でのみ使用できます。

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

入力動画のエンベディングを生成するには、/GOOG/CL_EMBEDDINGS_MODEL クラスの GET_VIDEO_EMBEDDINGS メソッドを使用します。動画ファイルの Cloud Storage URI を渡します。オプションで、開始オフセット時間と終了オフセット時間(秒単位)を渡すこともできます。必要に応じて、動画のコンテキスト テキストと出力エンベディングのディメンションを指定することもできます。

DATA(ls_video) = VALUE /goog/cl_embeddings_model=>ty_video( gcs_uri = 'VIDEO_URI' ).
DATA(lt_embeddings) = lo_embeddings_model->gen_video_embeddings( iv_video           = ls_video
                                                                 iv_contextual_text = 'CONTEXTUAL_TEXT'
                                                                 iv_dimension       = 'DIMENSION'
                                        )->get_vector( ).
  • VIDEO_URI: エンベディングを取得するターゲット動画の Cloud Storage URI。
  • CONTEXTUAL_TEXT: 省略可。エンベディング モデルに対する動画コンテンツの追加のコンテキストと意味。
  • DIMENSION: 省略可。出力エンベディングのディメンション。使用できるディメンションは、1282565121408(デフォルト)です。

GET_VECTOR メソッドは、動画の最初のセグメントのエンベディングのみを返します。

コンテキスト テキストのエンベディングを取得するには、次のコードを使用します。

DATA(lt_context_embeddings) = lo_embeddings_model->get_context_text_vector( ).

このオプションは、単一動画のエンベディングの作成にのみ使用できます。

生成されたすべてのエンベディングを収集する

生成されたすべてのエンベディングを /GOOG/CL_EMBEDDINGS_MODEL=>TY_T_EMBEDDINGS_TEMPLATE タイプの内部テーブルに収集するには、/GOOG/CL_EMBEDDINGS_MODEL クラスの COLLECT メソッドを GEN_TEXT_EMBEDDINGS_BY_STRUCT メソッドおよび GEN_IMAGE_EMBEDDINGS_BY_STRUCT メソッドと組み合わせて使用します。

これは、アイテムの配列(text/image)のエンベディングを生成する必要があり、ループの反復処理でエンベディングを生成し、反復処理後に内部テーブルですべてのエンベディングを一度に取得する場合に便利です。メソッド GET_VECTOR_BY_TABLE を使用して、エンベディングの最終的な内部テーブルを取得できます。

LOOP AT ....
lo_embeddings_model->gen_text_embeddings_by_struct( is_input        = ls_embedding_template
                                                    is_addln_params = ls_addln_params
                  )->collect( ).

ENDLOOP.

DATA(lt_embeddings) = lo_embeddings_model->get_vector_by_table( ).

エンベディングをデータストアに送信する

生成されたエンベディングを Cloud Storage バケットまたは BigQuery データセットに送信するには、SDK に付属のテンプレートを使用します。

Cloud Storage にエンベディングを保存する

生成されたエンベディングを Cloud Storage バケットに送信するには、/GOOG/CL_EMBEDDINGS_MODEL クラスの SEND_STRUCT_TO_GCS メソッドを使用します。

エンベディングを Cloud Storage に送信する前に、エンベディングを送信する Cloud Storage バケットがあることを確認してください。

個々のエンベディングを Cloud Storage バケットに送信する

次のコードサンプルは、個々の画像エンベディングを Cloud Storage バケットに送信する方法を示しています。

DATA(ls_image) = VALUE /goog/cl_embeddings_model=>ty_image( gcs_uri = 'IMAGE_URI' ).
lo_embeddings_model->gen_image_embeddings_by_struct( iv_image        = ls_image
                                                     is_input        = ls_embedding_template
                                                     is_addln_params = ls_addln_params
                  )->send_struct_to_gcs( iv_key         = 'CLIENT_KEY'
                                         iv_bucket_name = 'BUCKET_NAME'
                                         iv_file_name   = 'FILE_NAME' ).

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

  • IMAGE_URI: エンベディングを取得するターゲット画像の Cloud Storage URI。
  • CLIENT_KEY: Cloud Storage API を呼び出すためのクライアント キー。
  • BUCKET_NAME: ターゲット Cloud Storage バケット名。
  • FILE_NAME: エンベディングのファイル名。

収集したエンベディングを Cloud Storage バケットに送信する

次のコードサンプルは、収集されたエンベディングを Cloud Storage バケットに送信する方法を示しています。

LOOP AT ....
lo_embeddings_model->gen_text_embeddings_by_struct( is_input        = ls_embedding_template
                                                    is_addln_params = ls_addln_params
                  )->collect( ).

ENDLOOP.

lo_embeddings_model->send_struct_to_gcs( iv_key         = 'CLIENT_KEY'
                                         iv_bucket_name = 'BUCKET_NAME'
                                         iv_file_name   = 'FILE_NAME' ).

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

  • CLIENT_KEY: Cloud Storage API を呼び出すためのクライアント キー。
  • BUCKET_NAME: ターゲット Cloud Storage バケット名。
  • FILE_NAME: エンベディングのファイル名。

エンベディングを BigQuery に保存する

生成されたエンベディングを BigQuery データセットに送信するには、/GOOG/CL_EMBEDDINGS_MODELSEND_STRUCT_TO_BQ メソッドを使用します。

エンベディングを BigQuery に送信する前に、エンベディングを送信する BigQuery のデータセットテーブルがあることを確認します。

個々のエンベディングを BigQuery データセットに送信する

次のコードサンプルは、個々の画像エンベディングを BigQuery データセットに送信する方法を示しています。

lo_embeddings_model->gen_image_embeddings_by_struct( iv_image        = ls_image
                                                     is_input        = ls_embedding_template
                                                     is_addln_params = ls_addln_params
                  )->send_struct_to_bq( iv_key        = 'CLIENT_KEY'
                                        iv_dataset_id = 'DATASET_ID'
                                        iv_table_id   = 'TABLE_ID' ).

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

  • CLIENT_KEY: BigQuery API を呼び出すためのクライアント キー。
  • DATASET_ID: BigQuery データセット ID。
  • TABLE_ID: BigQuery テーブル ID。

収集したエンベディングを BigQuery データセットに送信する

次のコードサンプルは、収集されたエンベディングを BigQuery データセットに送信する方法を示しています。

LOOP AT ....
lo_embeddings_model->gen_text_embeddings_by_struct( is_input        = ls_embedding_template
                                                    is_addln_params = ls_addln_params
                  )->collect( ).

ENDLOOP.

lo_embeddings_model->send_struct_to_bq( iv_key        = 'CLIENT_KEY'
                                        iv_dataset_id = 'DATASET_ID'
                                        iv_table_id   = 'TABLE_ID' ).

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

  • CLIENT_KEY: BigQuery API を呼び出すためのクライアント キー。
  • DATASET_ID: BigQuery データセット ID。
  • TABLE_ID: BigQuery テーブル ID。

エンベディングを Pub/Sub トピックにパブリッシュする

生成されたエンベディングを Pub/Sub トピックにパブリッシュするには、/GOOG/CL_EMBEDDINGS_MODEL クラスの SEND_STRUCT_TO_PUBSUB メソッドを使用します。これは、エンベディングを保存し、フォローアップ ビジネス プロセスを構築するために独自のカスタム パイプラインを構築する必要があるシナリオで役立ちます。

エンベディングを Pub/Sub トピックに送信する前に、エンベディングを送信する Pub/Sub トピックがあることを確認してください。

個々のエンベディングを Pub/Sub トピックにパブリッシュする

次のコードサンプルは、個々の画像エンベディングを Pub/Sub トピックにパブリッシュする方法を示しています。

lo_embeddings_model->gen_image_embeddings_by_struct( iv_image        = ls_image
                                                     is_input        = ls_embedding_template
                                                     is_addln_params = ls_addln_params
                  )->send_struct_to_pubsub( iv_key      = 'CLIENT_KEY'
                                            iv_topic_id = 'TOPIC_ID' ).

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

  • CLIENT_KEY: Pub/Sub API を呼び出すためのクライアント キー。
  • TOPIC_ID: Pub/Sub トピック ID。

収集したエンベディングを Pub/Sub トピックにパブリッシュする

次のコードサンプルは、収集されたエンベディングを Pub/Sub トピックにパブリッシュする方法を示しています。

LOOP AT ....
lo_embeddings_model->gen_text_embeddings_by_struct( is_input        = ls_embedding_template
                                                    is_addln_params = ls_addln_params
                  )->collect( ).

ENDLOOP.

lo_embeddings_model->send_struct_to_pubsub( iv_key      = 'CLIENT_KEY'
                                            iv_topic_id = 'TOPIC_ID' ).

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

  • CLIENT_KEY: Pub/Sub API を呼び出すためのクライアント キー。
  • TOPIC_ID: Pub/Sub トピック ID。

次のステップ