Membuat embedding

Dokumen ini menjelaskan cara memanggil model embedding untuk menghasilkan embedding teks dan multimodal, menggunakan Vertex AI SDK untuk ABAP.

Embedding pada dasarnya adalah kode numerik yang mewakili teks, gambar, atau video dengan cara yang menunjukkan hubungannya. Aplikasi menggunakan kode ini untuk memahami dan menghasilkan bahasa, mengenali makna yang paling kompleks sekalipun dan hubungan dalam konten spesifik Anda. Proses ini berfungsi dengan mengubah teks, gambar, dan video menjadi daftar angka, yang dikenal sebagai vektor, yang dirancang untuk menangkap makna konten asli secara efektif.

Beberapa kasus penggunaan umum untuk embedding teks adalah:

  • Penelusuran semantik: Penelusuran teks yang diberi peringkat berdasarkan kemiripan semantik.
  • Klasifikasi: Menampilkan class item yang atribut teksnya mirip dengan teks yang diberikan.
  • Pengelompokan: Mengelompokkan item yang atribut teksnya mirip dengan teks yang diberikan.
  • Deteksi pencilan: Menampilkan item dengan atribut teks yang paling tidak berkaitan pada teks yang diberikan.
  • Antarmuka percakapan: Mengelompokkan grup kalimat yang dapat mengarah pada yang sama, seperti di ruang penyematan tingkat percakapan.

Dengan Vertex AI SDK untuk ABAP, Anda dapat membuat embedding dari logika aplikasi ABAP dengan menggunakan class dan metode yang yang disertakan dengan SDK. SDK juga menyediakan metode siap pakai untuk mengirim metode embedding ke datastore berikut:

  • Cloud Storage: Anda dapat menggunakan embedding dari Cloud Storage bucket untuk membangun indeks vektor dan melakukan Vector Search.
  • BigQuery: Anda dapat menggunakan embedding dari BigQuery sebagai database vektor untuk data perusahaan Anda.

Anda juga bisa memublikasikan embeddings ke topik Pub/Sub yang dapat dirutekan ke set data BigQuery atau ke sistem pelanggan.

Sebelum memulai

Sebelum menggunakan Vertex AI SDK untuk ABAP dengan penyematan pastikan bahwa Anda atau administrator Anda telah menyelesaikan prasyarat berikut:

Membuat embedding

Bagian ini menjelaskan cara menghasilkan embedding dengan menggunakan Vertex AI SDK untuk ABAP.

Membuat instance class embeddings multimodal

Untuk memanggil Vertex AI model embeddings multimodal menggunakan input teks atau multimodal, Anda bisa menggunakan class /GOOG/CL_EMBEDDINGS_MODEL. Anda membuat instance class dengan meneruskan kunci model yang dikonfigurasi dalam parameter pembuatan model.

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

Ganti MODEL_KEY dengan nama kunci model, yang dikonfigurasi di parameter pembuatan model.

Membuat embedding teks

Untuk menghasilkan embedding bagi cuplikan teks, Anda dapat menggunakan metode Metode GEN_TEXT_EMBEDDINGS dari class /GOOG/CL_EMBEDDINGS_MODEL. Anda juga dapat menentukan dimensi untuk embedding 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( ).

Ganti kode berikut:

  • DIMENSION: Opsional. Dimensi penyematan output. Dimensi default adalah 768.
  • INPUT_TEXT: Teks yang akan dibuatkan embedding.

Anda juga dapat membuat embeddings untuk cuplikan teks menggunakan template /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE, yang dikirimkan dengan SDK. Template ini memungkinkan Anda mengambil informasi skema khusus perusahaan dalam file embedding yang dihasilkan bersama dengan embeddings.

Untuk menghasilkan embedding bagi cuplikan teks, berdasarkan /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE template, Anda dapat menggunakan metode 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( ).

Ganti kode berikut:

  • ENTITY_ID: ID entity untuk data penyematan.
  • INPUT_TEXT: Teks yang akan dibuatkan embedding.
  • SOURCE_MODULE: Modul sumber konten embeddings.
  • DIMENSION: Opsional. Dimensi dari embedding output. Dimensi default-nya adalah 768.

Membuat embedding gambar

Untuk menghasilkan embedding bagi gambar input, Anda dapat menggunakan GEN_IMAGE_EMBEDDINGS dari class /GOOG/CL_EMBEDDINGS_MODEL. Anda bisa meneruskan data mentah gambar atau URI Cloud Storage dari file gambar. Anda juga dapat menentukan teks kontekstual untuk gambar dan dimensi untuk embedding output.

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

Ganti kode berikut:

  • IMAGE_URI: URI Cloud Storage dari gambar target untuk mendapatkan embeddings.
  • CONTEXTUAL_TEXT: Opsional. Konteks dan makna tambahan konten gambar ke model embeddings.

Anda juga dapat membuat embeddings untuk gambar menggunakan template /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE, yang dikirimkan dengan SDK. Template ini memungkinkan Anda mengambil informasi skema khusus perusahaan dalam file embedding yang dihasilkan bersama dengan embeddings.

Untuk menghasilkan embedding bagi gambar, berdasarkan /GOOG/CL_EMBEDDINGS_MODEL=>TY_EMBEDDINGS_TEMPLATE template, Anda dapat menggunakan metode 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( ).

Ganti kode berikut:

  • IMAGE_URI: URI Cloud Storage gambar target yang akan diberikan embedding.
  • ENTITY_ID: ID entity untuk data penyematan.
  • INPUT_TEXT: Teks yang akan dibuatkan embedding.
  • SOURCE_MODULE: Modul sumber konten penyematan.

Untuk mengambil penyematan teks kontekstual, gunakan kode berikut:

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

Opsi ini hanya tersedia untuk pembuatan penyematan gambar tunggal.

Membuat penyematan video

Guna menghasilkan embedding untuk video input, Anda dapat menggunakan GET_VIDEO_EMBEDDINGS dari class /GOOG/CL_EMBEDDINGS_MODEL. Anda dapat meneruskan URI Cloud Storage file video bersama dengan waktu offset awal dan akhir opsional dalam hitungan detik. Anda juga dapat menentukan teks kontekstual untuk video dan dimensi untuk embedding 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: URI Cloud Storage dari video target untuk mendapatkan embedding.
  • CONTEXTUAL_TEXT: Opsional. Konteks dan makna tambahan konten video ke model embeddings.
  • DIMENSION: Opsional. Dimensi dari embedding output. Dimensi yang tersedia adalah: 128, 256, 512, dan 1408 (default).

Metode GET_VECTOR menampilkan embedding hanya untuk segmen pertama video.

Guna mengambil embedding untuk teks kontekstual, gunakan kode berikut:

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

Opsi ini hanya tersedia untuk pembuatan penyematan video tunggal.

Mengumpulkan semua embedding yang dihasilkan

Untuk mengumpulkan semua embedding yang dihasilkan dalam tabel internal jenis /GOOG/CL_EMBEDDINGS_MODEL=>TY_T_EMBEDDINGS_TEMPLATE, Anda dapat menggunakan COLLECT dari class /GOOG/CL_EMBEDDINGS_MODEL bersama dengan metode GEN_TEXT_EMBEDDINGS_BY_STRUCT dan GEN_IMAGE_EMBEDDINGS_BY_STRUCT.

Ini berguna ketika Anda memiliki persyaratan menghasilkan embedding array item (text/image), dan Anda ingin membuat embedding dalam iterasi loop dan mendapatkan semua embedding sekaligus dalam tabel internal iterasi (pengulangan). Metode GET_VECTOR_BY_TABLE dapat digunakan untuk mendapatkan tabel internal akhir dari penyematan.

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

Mengirim embedding ke datastore

Anda dapat mengirim embedding yang dihasilkan ke bucket Cloud Storage atau set data BigQuery dengan menggunakan template yang dikirim bersama SDK.

Menyimpan embedding di Cloud Storage

Untuk mengirim penyematan yang dihasilkan ke bucket Cloud Storage, Anda dapat menggunakan metode SEND_STRUCT_TO_GCS dari class /GOOG/CL_EMBEDDINGS_MODEL.

Sebelum mengirim embedding ke Cloud Storage, pastikan Anda sudah memiliki bucket Cloud Storage yang akan dikirimi embedding.

Mengirim penyematan individual ke bucket Cloud Storage

Contoh kode berikut mengilustrasikan cara mengirim embedding gambar individual ke 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' ).

Ganti kode berikut:

  • IMAGE_URI: URI Cloud Storage dari gambar target untuk mendapatkan embeddings.
  • CLIENT_KEY: Kunci klien untuk memanggil Cloud Storage API.
  • BUCKET_NAME: Nama bucket Cloud Storage target.
  • FILE_NAME: Nama file penyematan.

Mengirim penyematan yang dikumpulkan ke bucket Cloud Storage

Contoh kode berikut mengilustrasikan cara mengirim embedding yang dikumpulkan ke 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' ).

Ganti kode berikut:

  • CLIENT_KEY: Kunci klien untuk memanggil Cloud Storage API.
  • BUCKET_NAME: Nama bucket Cloud Storage target.
  • FILE_NAME: Nama file embedding.

Menyimpan embedding di BigQuery

Untuk mengirim embedding yang dihasilkan ke set data BigQuery, Anda dapat menggunakan metode SEND_STRUCT_TO_BQ dari /GOOG/CL_EMBEDDINGS_MODEL.

Sebelum mengirim penyematan ke BigQuery, pastikan Anda memiliki set data BigQuery dan tabel yang ingin Anda kirimkan penyematan.

Mengirim embedding individual ke set data BigQuery

Contoh kode berikut mengilustrasikan cara mengirim embedding gambar individual ke set data 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' ).

Ganti kode berikut:

  • CLIENT_KEY: Kunci klien untuk memanggil BigQuery API.
  • DATASET_ID: ID set data BigQuery.
  • TABLE_ID: ID tabel BigQuery.

Mengirim penyematan yang dikumpulkan ke set data BigQuery

Contoh kode berikut mengilustrasikan cara mengirim penyematan yang dikumpulkan ke set data 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' ).

Ganti kode berikut:

  • CLIENT_KEY: Kunci klien untuk memanggil BigQuery API.
  • DATASET_ID: ID set data BigQuery.
  • TABLE_ID: ID tabel BigQuery.

Memublikasikan penyematan ke topik Pub/Sub

Untuk memublikasikan penyematan yang dihasilkan ke topik Pub/Sub, Anda dapat menggunakan metode SEND_STRUCT_TO_PUBSUB dari class /GOOG/CL_EMBEDDINGS_MODEL. Hal ini dapat bermanfaat untuk skenario saat Anda perlu membangun pipeline kustom sendiri untuk menyimpan embeddings dan membangun proses bisnis tindak lanjut.

Sebelum mengirim penyematan ke topik Pub/Sub, pastikan Anda memiliki topik Pub/Sub yang ingin Anda kirimi penyematan.

Memublikasikan penyematan individual ke topik Pub/Sub

Contoh kode berikut mengilustrasikan cara memublikasikan setiap penyematan gambar ke topik 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' ).

Ganti kode berikut:

  • CLIENT_KEY: Kunci klien untuk memanggil Pub/Sub API.
  • TOPIC_ID: ID topik Pub/Sub.

Memublikasikan embeddings yang dikumpulkan ke topik Pub/Sub

Contoh kode berikut mengilustrasikan cara memublikasikan embedding yang dikumpulkan ke topik 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' ).

Ganti kode berikut:

  • CLIENT_KEY: Kunci klien untuk memanggil Pub/Sub API.
  • TOPIC_ID: ID topik Pub/Sub.

Langkah selanjutnya