Genera embedding

Questo documento descrive come richiamare i modelli di embedding per generare embedding di testo e multimodali utilizzando l'SDK Vertex AI per ABAP.

Gli incorporamenti sono essenzialmente codici numerici che rappresentano testo, immagini o video in un modo che ne descriva la relazione. Le applicazioni utilizzano questi codici per comprendere e generare il linguaggio, riconoscendo anche i significati e le relazioni più complessi all'interno dei tuoi contenuti specifici. Il processo funziona trasformando testo, immagini e video in elenchi di numeri, noti come vettori, progettati per cogliere efficacemente il significato dei contenuti originali.

Ecco alcuni casi d'uso comuni per gli embedding di testo:

  • Ricerca semantica: il testo di ricerca viene classificato in base alla somiglianza semantica.
  • Classificazione: restituisce la classe degli elementi i cui attributi di testo sono simili al testo specificato.
  • Clustering: raggruppa gli elementi i cui attributi di testo sono simili al testo specificato.
  • Rilevamento di valori anomali: restituisce gli elementi in cui gli attributi di testo sono meno correlati al testo specificato.
  • Interfaccia di conversazione: raggruppa in cluster gruppi di frasi che possono portare a risposte simili, ad esempio in uno spazio di embedding a livello di conversazione.

Con l'SDK Vertex AI per ABAP, puoi generare embedding dalla logica dell'applicazione ABAP utilizzando le classi e i metodi forniti con l'SDK. L'SDK fornisce anche metodi pronti all'uso per inviare gli embedding generati ai seguenti datastore:

  • Cloud Storage: puoi utilizzare gli incorporamenti di un bucket Cloud Storage per creare indici di vettori ed eseguire la ricerca vettoriale.
  • BigQuery: puoi utilizzare gli embedding di un set di dati BigQuery come database vettoriale per i dati aziendali.

Puoi anche pubblicare gli embedding in un argomento Pub/Sub che può essere indirizzato a un set di dati BigQuery o a un sistema di abbonati.

Prima di iniziare

Prima di utilizzare l'SDK Vertex AI per ABAP con i modelli di embedding, assicurati che tu o i tuoi amministratori abbiate completato i seguenti prerequisiti:

Genera embedding

Questa sezione spiega come generare embedding utilizzando l'SDK Vertex AI per ABAP.

Crea un'istanza della classe di embedding multimodali

Per richiamare i modelli di embedding multimodali di Vertex AI utilizzando input di testo o multimodali, puoi utilizzare la classe /GOOG/CL_EMBEDDINGS_MODEL. Puoi creare un'istanza della classe passando la chiave del modello configurata nei parametri di generazione del modello.

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

Sostituisci MODEL_KEY con il nome della chiave del modello, configurata nei parametri di generazione del modello.

Genera incorporamenti di testo

Per generare incorporamenti per uno snippet di testo, puoi utilizzare il metodo GEN_TEXT_EMBEDDINGS della classe /GOOG/CL_EMBEDDINGS_MODEL. Se vuoi, puoi anche specificare una dimensione per gli embedding di output.

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

Sostituisci quanto segue:

  • DIMENSION: facoltativo. La dimensionalità degli embedding di output. La dimensione predefinita è 768.
  • INPUT_TEXT: il testo per cui devono essere generati gli incorporamenti.

Puoi anche generare embedding per uno snippet di testo utilizzando un modello /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE predefinito fornito con l'SDK. Questo modello ti consente di acquisire informazioni schematiche specifiche dell'azienda nel file degli embedding generati insieme agli embedding.

Per generare incorporamenti per uno snippet di testo, in base al /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE modello, puoi utilizzare il metodo 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( ).

Sostituisci quanto segue:

  • ENTITY_ID: ID entità per il record degli embedding.
  • INPUT_TEXT: il testo per cui devono essere generati gli incorporamenti.
  • SOURCE_MODULE: modulo di origine dei contenuti degli incorporamenti.
  • DIMENSION: facoltativo. La dimensionalità degli embedding di output. La dimensione predefinita è 768.

Genera embedding di immagini

Per generare embedding per un'immagine di input, puoi utilizzare il metodo GEN_IMAGE_EMBEDDINGS della classe /GOOG/CL_EMBEDDINGS_MODEL. Puoi passare i dati non elaborati di un'immagine o l'URI Cloud Storage di un file immagine. Se vuoi, puoi anche specificare un testo contestuale per l'immagine e una dimensione per gli incorporamenti in uscita.

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

Sostituisci quanto segue:

  • IMAGE_URI: l'URI Cloud Storage dell'immagine di destinazione per cui ottenere gli embedding.
  • CONTEXTUAL_TEXT: facoltativo. Contesto e significato aggiuntivi ai contenuti di un'immagine per il modello di embedding.

Puoi anche generare embedding per le immagini utilizzando un /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATEmodello/GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE predefinito fornito con l'SDK. Questo modello ti consente di acquisire informazioni schematiche specifiche dell'azienda nel file degli embedding generati insieme agli embedding.

Per generare embedding per un'immagine in base al /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE modello, puoi utilizzare il metodo 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( ).

Sostituisci quanto segue:

  • IMAGE_URI: l'URI Cloud Storage dell'immagine di destinazione per cui ottenere gli embedding.
  • ENTITY_ID: ID entità per il record degli embedding.
  • INPUT_TEXT: il testo per cui devono essere generati gli incorporamenti.
  • SOURCE_MODULE: modulo di origine dei contenuti degli incorporamenti.

Per recuperare gli embedding per un testo contestuale, utilizza il seguente codice:

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

Questa opzione è disponibile solo per la creazione di singoli incorporamenti di immagini.

Genera embedding video

Per generare embedding per un video di input, puoi utilizzare il GET_VIDEO_EMBEDDINGS metodo della classe /GOOG/CL_EMBEDDINGS_MODEL. Puoi passare l'URI Cloud Storage di un file video insieme all'ora di offset di inizio e di fine facoltativa in secondi. Se vuoi, puoi anche specificare un testo contestuale per il video e una dimensione per gli embedding di output.

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: l'URI Cloud Storage del video di destinazione per cui ottenere gli embedding.
  • CONTEXTUAL_TEXT: facoltativo. Contesto e significato aggiuntivi ai contenuti di un video per il modello di embedding.
  • DIMENSION: facoltativo. La dimensionalità degli embedding di output. Le dimensioni disponibili sono: 128, 256, 512 e 1408 (valore predefinito).

Il metodo GET_VECTOR restituisce gli elementi incorporati solo per il primo segmento del video.

Per recuperare l'embedding per il testo contestuale, utilizza il seguente codice:

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

Questa opzione è disponibile solo per la creazione di singoli video incorporati.

Raccogliere tutti gli incorporamenti generati

Per raccogliere tutti gli embedding generati in una tabella interna di tipo /GOOG/CL_EMBEDDINGS_MODEL=>TY_T_EMBEDDINGS_TEMPLATE, puoi utilizzare il metodo COLLECT della classe /GOOG/CL_EMBEDDINGS_MODEL in combinazione con i metodi GEN_TEXT_EMBEDDINGS_BY_STRUCT e GEN_IMAGE_EMBEDDINGS_BY_STRUCT.

Questo è utile quando devi generare embedding per un array di elementi (text/image) e vuoi generare embedding in un'iterazione del ciclo e ottenere tutti gli embedding contemporaneamente in una tabella interna dopo l'iterazione. Il metodo GET_VECTOR_BY_TABLE può essere utilizzato per ottenere la tabella interna finale degli embedding.

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

Inviare gli embedding a un datastore

Puoi inviare gli embedding generati a un bucket Cloud Storage o a un set di dati BigQuery utilizzando il modello fornito con l'SDK.

Memorizzare le incorporazioni in Cloud Storage

Per inviare gli embedding generati a un bucket Cloud Storage, puoi utilizzare il metodo SEND_STRUCT_TO_GCS della classe /GOOG/CL_EMBEDDINGS_MODEL.

Prima di inviare gli incorporamenti a Cloud Storage, assicurati di avere un bucket Cloud Storage a cui inviarli.

Invia singoli embedding a un bucket Cloud Storage

Il seguente esempio di codice illustra come inviare singoli embedding di immagini in un bucket 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' ).

Sostituisci quanto segue:

  • IMAGE_URI: l'URI Cloud Storage dell'immagine di destinazione per cui ottenere gli embedding.
  • CLIENT_KEY: chiave client per l'invocazione dell'API Cloud Storage.
  • BUCKET_NAME: nome del bucket Cloud Storage di destinazione.
  • FILE_NAME: nome del file degli incorporamenti.

Invia gli embedding raccolti a un bucket Cloud Storage

Il seguente esempio di codice mostra come inviare gli embedding raccolti in un bucket 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' ).

Sostituisci quanto segue:

  • CLIENT_KEY: chiave client per l'invocazione dell'API Cloud Storage.
  • BUCKET_NAME: nome del bucket Cloud Storage di destinazione.
  • FILE_NAME: nome del file degli incorporamenti.

Memorizza gli embedding in BigQuery

Per inviare gli embedding generati a un set di dati BigQuery, puoi utilizzare il metodo SEND_STRUCT_TO_BQ di /GOOG/CL_EMBEDDINGS_MODEL.

Prima di inviare gli embedding a BigQuery, assicurati di avere un set di dati e una tabella BigQuery a cui vuoi inviare gli embedding.

Invia singoli embedding a un set di dati BigQuery

Il seguente esempio di codice illustra come inviare singoli embedding di immagini a un set di dati 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' ).

Sostituisci quanto segue:

  • CLIENT_KEY: chiave client per l'invocazione dell'API BigQuery.
  • DATASET_ID: ID set di dati BigQuery.
  • TABLE_ID: ID tabella BigQuery.

Invia gli embedding raccolti a un set di dati BigQuery

Il seguente esempio di codice illustra come inviare gli embedding raccolti a un set di dati 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' ).

Sostituisci quanto segue:

  • CLIENT_KEY: chiave client per l'invocazione dell'API BigQuery.
  • DATASET_ID: ID set di dati BigQuery.
  • TABLE_ID: ID tabella BigQuery.

Pubblicare gli embedding in un argomento Pub/Sub

Per pubblicare gli embedding generati in un argomento Pub/Sub, puoi utilizzare il metodo SEND_STRUCT_TO_PUBSUB della classe /GOOG/CL_EMBEDDINGS_MODEL. Questa funzionalità può essere utile per scenari in cui devi creare le tue pipeline personalizzate per archiviare gli embedding e sviluppare processi aziendali successivi.

Prima di inviare gli embedding a un argomento Pub/Sub, assicurati di avere un argomento Pub/Sub a cui vuoi inviarli.

Pubblicare singoli embedding in un argomento Pub/Sub

Il seguente esempio di codice illustra come pubblicare singoli incorporamenti di immagini in un argomento 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' ).

Sostituisci quanto segue:

  • CLIENT_KEY: chiave client per l'invocazione dell'API Pub/Sub.
  • TOPIC_ID: ID argomento Pub/Sub.

Pubblica gli embedding raccolti in un argomento Pub/Sub

Il seguente esempio di codice illustra come pubblicare gli embedding raccolti in un argomento 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' ).

Sostituisci quanto segue:

  • CLIENT_KEY: chiave client per l'invocazione dell'API Pub/Sub.
  • TOPIC_ID: ID argomento Pub/Sub.

Passaggi successivi