Gerar embeddings

Este documento descreve como invocar os modelos de embedding para gerar embeddings de texto e multimodais usando o SDK da Vertex AI para ABAP.

Os embeddings são basicamente códigos numéricos que representam texto, imagens ou vídeos de uma forma que captura como eles estão relacionados. Os aplicativos usam esses códigos para entender e gerar linguagem, reconhecendo até mesmo os significados e relacionamentos mais complexos no seu conteúdo específico. O processo funciona transformando texto, imagens e vídeos em listas de números, conhecidos como vetores, que são projetados para capturar de forma eficaz o significado do conteúdo original.

Alguns casos de uso comuns para incorporações de texto incluem:

  • Pesquisa semântica: texto de pesquisa classificado por semelhança semântica.
  • Classificação: retorna a classe de itens com atributos de texto semelhantes ao texto fornecido.
  • Clustering: itens de cluster com atributos de texto semelhantes ao texto fornecido.
  • Detecção de outlier: retorna itens em que os atributos de texto estão menos relacionados ao texto fornecido.
  • Interface de conversa: agrupa grupos de frases que podem levar a respostas semelhantes, como em um espaço de incorporação no nível da conversa.

Com o SDK da Vertex AI para ABAP, é possível gerar embeddings da lógica do aplicativo ABAP usando as classes e os métodos enviados com o SDK. O SDK também oferece métodos prontos para enviar as incorporações geradas aos seguintes repositórios de dados:

  • Cloud Storage: é possível usar os embeddings de um bucket do Cloud Storage para criar índices de vetores e realizar pesquisas de vetores.
  • BigQuery: é possível usar as representações em um conjunto de dados do BigQuery como um banco de dados de vetores para seus dados corporativos.

Também é possível publicar as incorporações em um tópico do Pub/Sub que pode ser roteado para um conjunto de dados do BigQuery ou para um sistema de assinantes.

Antes de começar

Antes de usar o SDK da Vertex AI para ABAP com os modelos de incorporação, confira se você ou seus administradores concluíram os seguintes pré-requisitos:

Gerar embeddings

Esta seção explica como gerar embeddings usando o SDK da Vertex AI para ABAP.

Criar a classe de embeddings multimodais

Para invocar os modelos de embedding multimodais da Vertex AI usando entradas de texto ou multimodais, use a classe /GOOG/CL_EMBEDDINGS_MODEL. Você instancia a classe transmitindo a chave de modelo configurada nos parâmetros de geração de modelos.

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

Substitua MODEL_KEY pelo nome da chave do modelo, que é configurado nos parâmetros de geração de modelo.

Gerar embeddings de texto

Para gerar embeddings para um snippet de texto, use o método GEN_TEXT_EMBEDDINGS da classe /GOOG/CL_EMBEDDINGS_MODEL. Também é possível especificar uma dimensão para as embeddings de saída.

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( ).

Substitua:

  • DIMENSION: opcional. A dimensionalidade dos embeddings de saída. A dimensão padrão é 768.
  • INPUT_TEXT: texto para o qual os embeddings serão gerados.

Também é possível gerar embeddings para um snippet de texto usando um modelo pronto para uso /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE, enviado com o SDK. Esse modelo permite capturar informações esquematizadas específicas da empresa no arquivo de embeddings gerado junto com os embeddings.

Para gerar embeddings de um snippet de texto com base no modelo /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE, use o método 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( ).

Substitua:

  • ENTITY_ID: ID da entidade para o registro de embeddings.
  • INPUT_TEXT: texto para o qual os embeddings serão gerados.
  • SOURCE_MODULE: módulo de origem do conteúdo de embeddings.
  • DIMENSION: opcional. A dimensionalidade dos embeddings de saída. A dimensão padrão é 768.

Gerar embeddings de imagem

Para gerar embeddings para uma imagem de entrada, use o método GEN_IMAGE_EMBEDDINGS da classe /GOOG/CL_EMBEDDINGS_MODEL. É possível transmitir os dados brutos de uma imagem ou o URI do Cloud Storage de um arquivo de imagem. Também é possível especificar um texto contextual para a imagem e uma dimensão para os embeddings de saída.

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( ).

Substitua:

  • IMAGE_URI: o URI do Cloud Storage da imagem de destino para os embeddings.
  • CONTEXTUAL_TEXT: opcional. Adiciona contexto e significado ao conteúdo de uma imagem ao modelo de embeddings.

Também é possível gerar embeddings para imagens usando um modelo padrão /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE, enviado com o SDK. Esse modelo permite capturar informações esquematizadas específicas da empresa no arquivo de embeddings gerado junto com os embeddings.

Para gerar embeddings para uma imagem com base no modelo /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE, use o método 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( ).

Substitua:

  • IMAGE_URI: o URI do Cloud Storage da imagem de destino para receber os embeddings.
  • ENTITY_ID: ID da entidade para o registro de embeddings.
  • INPUT_TEXT: texto para o qual os embeddings serão gerados.
  • SOURCE_MODULE: módulo de origem do conteúdo de embeddings.

Para extrair representações para um texto contextual, use o seguinte código:

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

Essa opção está disponível apenas para a criação de incorporação de uma única imagem.

Gerar embeddings de vídeo

Para gerar embeddings para um vídeo de entrada, use o método GET_VIDEO_EMBEDDINGS da classe /GOOG/CL_EMBEDDINGS_MODEL. É possível transmitir o URI do Cloud Storage de um arquivo de vídeo com o tempo de início e de término opcional em segundos. Também é possível especificar um texto contextual para o vídeo e uma dimensão para os embeddings de saída.

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: o URI do Cloud Storage do vídeo de destino para os embeddings serão recebidos.
  • CONTEXTUAL_TEXT: opcional. Adiciona contexto e significado ao conteúdo de um vídeo para o modelo de embeddings.
  • DIMENSION: opcional. A dimensionalidade dos embeddings de saída. As dimensões disponíveis são: 128, 256, 512 e 1408 (padrão).

O método GET_VECTOR retorna as incorporações apenas para o primeiro segmento do vídeo.

Para recuperar a incorporação do texto contextual, use o seguinte código:

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

Essa opção está disponível apenas para a criação de incorporação de um único vídeo.

Coletar todos os embeddings gerados

Para coletar todos os embeddings gerados em uma tabela interna do tipo /GOOG/CL_EMBEDDINGS_MODEL=>TY_T_EMBEDDINGS_TEMPLATE, use o método COLLECT da classe /GOOG/CL_EMBEDDINGS_MODEL em combinação com os métodos GEN_TEXT_EMBEDDINGS_BY_STRUCT e GEN_IMAGE_EMBEDDINGS_BY_STRUCT.

Isso é útil quando você precisa gerar embeddings para uma matriz de itens (text/image) e quer gerar embeddings em uma iteração de loop e receber todas as embeddings de uma vez em uma tabela interna após a iteração. O método GET_VECTOR_BY_TABLE pode ser usado para acessar a tabela interna final de embeddings.

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( ).

Enviar embeddings para um repositório de dados

É possível enviar as incorporações geradas para um bucket do Cloud Storage ou um conjunto de dados do BigQuery usando o modelo enviado com o SDK.

Armazenar embeddings no Cloud Storage

Para enviar as embeddings geradas a um bucket do Cloud Storage, use o método SEND_STRUCT_TO_GCS da classe /GOOG/CL_EMBEDDINGS_MODEL.

Antes de enviar as representações para um bucket do Cloud Storage, confira se você tem um bucket do Cloud Storage para enviar as representações.

Enviar embeddings individuais para um bucket do Cloud Storage

O exemplo de código abaixo ilustra como enviar incorporações de imagens individuais para um bucket do 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' ).

Substitua:

  • IMAGE_URI: o URI do Cloud Storage da imagem de destino para receber os embeddings.
  • CLIENT_KEY: chave de cliente para invocar a API Cloud Storage.
  • BUCKET_NAME: nome do bucket de destino do Cloud Storage.
  • FILE_NAME: nome do arquivo de embedding.

Enviar embeddings coletados para um bucket do Cloud Storage

O exemplo de código abaixo ilustra como enviar informações embeddings coletadas para um bucket do 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' ).

Substitua:

  • CLIENT_KEY: chave de cliente para invocar a API Cloud Storage.
  • BUCKET_NAME: nome do bucket de destino do Cloud Storage.
  • FILE_NAME: nome do arquivo de embedding.

Armazenar embeddings no BigQuery

Para enviar as embeddings geradas a um conjunto de dados do BigQuery, use o método SEND_STRUCT_TO_BQ do /GOOG/CL_EMBEDDINGS_MODEL.

Antes de enviar as embeddings para um BigQuery, confira se você tem um conjunto de dados e uma tabela para enviar as embeddings.

Enviar embeddings individuais para um conjunto de dados do BigQuery

O exemplo de código abaixo ilustra como enviar incorporações de imagem individuais para um conjunto de dados do 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' ).

Substitua:

  • CLIENT_KEY: chave de cliente para invocar a API BigQuery.
  • DATASET_ID: ID do conjunto de dados do BigQuery.
  • TABLE_ID: ID da tabela do BigQuery.

Enviar embeddings coletados para um conjunto de dados do BigQuery

O exemplo de código abaixo ilustra como enviar informações de embeddings coletadas para um conjunto de dados do 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' ).

Substitua:

  • CLIENT_KEY: chave de cliente para invocar a API BigQuery.
  • DATASET_ID: ID do conjunto de dados do BigQuery.
  • TABLE_ID: ID da tabela do BigQuery.

Publicar incorporações em um tópico do Pub/Sub

Para publicar as embeddings geradas em um tópico do Pub/Sub, use o método SEND_STRUCT_TO_PUBSUB da classe /GOOG/CL_EMBEDDINGS_MODEL. Isso pode ser útil em cenários em que você precisa criar seus próprios pipelines personalizados para armazenar incorporações e criar processos de negócios subsequentes.

Antes de enviar as incorporações a um tópico do Pub/Sub, confira se você tem um tópico do Pub/Sub para enviar as incorporações.

Publicar incorporações individuais em um tópico do Pub/Sub

O exemplo de código abaixo ilustra como publicar incorporações de imagens individuais em um tópico do 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' ).

Substitua:

  • CLIENT_KEY: chave de cliente para invocar a API Pub/Sub.
  • TOPIC_ID: ID do tópico do Pub/Sub.

Publicar as embeddings coletadas em um tópico do Pub/Sub

O exemplo de código abaixo ilustra como publicar incorporações coletadas em um tópico do 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' ).

Substitua:

  • CLIENT_KEY: chave de cliente para invocar a API Pub/Sub.
  • TOPIC_ID: ID do tópico do Pub/Sub.

A seguir