Pengelolaan Data Master Sederhana: Pencocokan & Gabungkan dengan AI Generatif.

1. Ringkasan

Apa yang dimaksud dengan Pengelolaan Data Master?

Pengelolaan Data Master (MDM) adalah tentang menciptakan satu sumber tepercaya yang andal untuk data paling penting organisasi Anda. Bayangkan perpustakaan yang diatur dengan cermat, tempat setiap buku (titik data) diberi label dengan benar, terbaru, dan mudah ditemukan.

Data master merepresentasikan entitas bisnis inti dan mendasar yang penting bagi operasi perusahaan. Berikut adalah elemen utama data master:

  • Entitas bisnis: entitas seperti pelanggan, produk, pemasok, lokasi, dan karyawan yang merupakan kata benda yang menjadi fokus bisnis Anda
  • ID: ID unik yang memastikan setiap entitas berbeda dan dapat dilacak di seluruh sistem
  • Atribut: karakteristik yang mendeskripsikan setiap entitas, misalnya, alamat pelanggan, harga produk, dll.

Untuk membantu Anda lebih memahami data master, mari kita bandingkan dengan data transaksional. Data transaksi mencatat setiap peristiwa (pembelian, pengiriman, dll.). Sementara itu, data master memberikan konteks untuk peristiwa tersebut dengan menentukan entitas yang terlibat. Misalnya, transaksi penjualan ditautkan ke data induk untuk pelanggan, produk, dan tenaga penjual.

Meskipun penerapan MDM yang andal sangat penting untuk pengambilan keputusan strategis, proses ini bisa menjadi rumit dan membutuhkan banyak sumber daya. Di sinilah kekuatan transformatif AI Generatif, terutama model seperti Gemini 1.0 Pro, Gemini 1.0 Pro Vision, Gemini 1.5 Pro, berperan.

2. Tujuan

Dalam codelab ini, Anda akan mendemonstrasikan cara Gemini 1.0 Pro menyederhanakan aplikasi pengelolaan data master seperti pengayaan dan penghapusan duplikat, untuk data citibike_stations yang tersedia di set data publik BigQuery.

Yang akan Anda gunakan

  1. Set data publik BigQuery bigquery-public-data.new_york_citibike.
  2. Panggilan Fungsi Gemini (Java Cloud Function yang mendapatkan informasi alamat menggunakan reverse Geocoding API untuk koordinat yang tersedia dengan data citibike_stations).
  3. Vertex AI Embeddings API dan Vector Search di BigQuery untuk mengidentifikasi duplikat.

Yang akan Anda build

  1. Anda akan membuat set data BigQuery untuk kasus penggunaan ini. Dalam set data ini, Anda akan membuat tabel sementara dengan data dari tabel set data publik bigquery-public-data.new_york_citibike.citibike_stations.
  2. Anda akan men-deploy Cloud Function yang menyertakan Panggilan Fungsi Gemini untuk standardisasi alamat.
  3. Anda akan menyimpan data alamat yang telah di-enrich di tabel landing (dari dua sumber yang disediakan untuk demonstrasi ini).
  4. Anda akan memanggil Vertex AI Embeddings API dari BigQuery pada data alamat.
  5. Anda akan menggunakan Penelusuran Vektor BigQuery untuk mengidentifikasi data duplikat.

Diagram berikut menunjukkan alur data dan langkah-langkah yang terlibat dalam penerapan.

Alur umum kasus penggunaan

3. Persyaratan

  • Browser, seperti Chrome atau Firefox
  • Project Google Cloud yang mengaktifkan penagihan.

4. Sebelum memulai

  1. Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
  2. Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project .
  3. Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud yang telah dilengkapi dengan bq. Klik Activate Cloud Shell di bagian atas konsol Google Cloud.

Gambar tombol Activate Cloud Shell

  1. Setelah terhubung ke Cloud Shell, Anda dapat memeriksa bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda menggunakan perintah berikut:
gcloud auth list
  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda.
gcloud config list project
  1. Jika project Anda belum ditetapkan, gunakan perintah berikut untuk menetapkannya:
gcloud config set project <YOUR_PROJECT_ID>
  1. Buka Marketplace Gemini for Google Cloud untuk mengaktifkan API. Anda juga dapat menggunakan perintah berikut di terminal Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
  1. Pastikan BigQuery, BigQuery Connection, Cloud Function, Cloud Run, Vertex AI, dan Cloud Build API diaktifkan. Alternatif untuk perintah gcloud adalah melalui konsol menggunakan link ini.

Baca dokumentasi untuk mempelajari perintah gcloud dan penggunaannya.

5. Membuat set data dan koneksi eksternal BigQuery

Mari kita mulai dengan membuat set data dan koneksi resource Cloud.

Set data di BigQuery adalah penampung untuk semua tabel dan objek aplikasi Anda.

Untuk membuat set data, lakukan hal berikut:

  1. Buka halaman BigQuery di konsol Google Cloud.
  2. Di panel Explorer, pilih project tempat Anda ingin membuat set data.
  3. Luaskan opsi Actions (ikon elipsis vertikal), lalu klik Create dataset.

Gambar menu Actions dan opsi Create dataset

  1. Masukkan mdm_gemini di kolom Dataset ID.
  2. Tetapkan jenis lokasi Anda sebagai Multi-region dan setujui nilai defaultnya, yaitu US(multiple regions in United States.
  3. Klik Create dataset.
  4. Periksa apakah set data dibuat dan dicantumkan di bagian project ID Anda di panel Explorer.

Koneksi BigQuery diperlukan untuk berinteraksi dengan Cloud Function Anda. Untuk membuat fungsi jarak jauh, Anda harus membuat koneksi BigQuery. Dalam codelab ini, kita akan menggunakan koneksi BigLake untuk mengakses model dari BigQuery melalui Cloud Function. Koneksi BigLake membantu menghubungkan sumber data eksternal sambil mempertahankan kontrol akses dan keamanan BigQuery yang mendetail, yang dalam kasus ini adalah Vertex AI Gemini Pro API.

Untuk membuat koneksi BigLake, lakukan hal berikut:

  1. Klik Tambahkan di panel Penjelajah di halaman BigQuery.

Konsol BigQuery dengan tombol TAMBAHKAN yang ditandai untuk menambahkan koneksi eksternal

  1. Klik Koneksi ke sumber data eksternal.
  2. Pada daftar Connection type, pilih Vertex AI remote models, remote functions and BigLake (Cloud Resource).
  3. Di kolom Connection ID, masukkan nama koneksi Anda sebagai gemini-bq-conn.
  4. Tetapkan jenis lokasi Anda sebagai Multi-region dan setujui nilai defaultnya, yaitu US(multiple regions in United States.
  5. Klik Create connection.
  6. Klik Go to connection, lalu salin ID akun layanan di panel Connection info.

Screenshot info koneksi

  1. Buka halaman IAM & Admin, lalu klik Grant access.
  2. Tempelkan ID akun layanan di kolom New principals.
  3. Pilih peran Vertex AI user dari daftar peran, lalu klik Simpan.

Screenshot Memberikan akses ke Akun Layanan

Anda kini telah berhasil membuat set data dan koneksi BigQuery.

6. Men-deploy Panggilan Fungsi Gemini (Java Cloud Function)

Ikuti langkah-langkah berikut untuk men-deploy Java Cloud Function yang mencakup Panggilan Fungsi Gemini.

  1. Clone repositori github dari terminal Cloud Shell menggunakan perintah berikut:
git clone https://github.com/AbiramiSukumaran/GeminiFunctionCalling
  1. Ganti placeholder YOUR_API_KEY dan YOUR_PROJECT_ID dengan nilai Anda.

Jika Anda membaca blog di sini, Anda akan mengetahui bahwa penerapan panggilan fungsi menggunakan Reverse Geocoding API. Anda dapat membuat API_KEY Anda sendiri dari petunjuk di sini.

  1. Di terminal Cloud Shell, buka direktori project yang baru di-clone GeminiFunctionCalling dan jalankan pernyataan berikut untuk membangun dan men-deploy Cloud Function:
gcloud functions deploy gemini-fn-calling --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http

Ucapkan "y" saat Anda diminta menjawab pertanyaan "Izinkan pemanggilan yang tidak diautentikasi". Sebaiknya Anda menyiapkan autentikasi untuk aplikasi perusahaan Anda, sesuai rekomendasi. Namun, karena ini adalah aplikasi demo, kita akan melanjutkan tanpa autentikasi.

Output adalah URL REST dalam format berikut:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling

  1. Uji Cloud Function ini dengan menjalankan perintah berikut dari terminal:
gcloud functions call gemini-fn-calling --region=us-central1 --gen2 --data '{"calls":[["40.714224,-73.961452"]]}'

Respons untuk perintah sampel acak:

 '{"replies":["{ \"DOOR_NUMBER\": \"277\", \"STREET_ADDRESS\": \"Bedford Ave\", \"AREA\":
 null, \"CITY\": \"Brooklyn\", \"TOWN\": null, \"COUNTY\": \"Kings County\", \"STATE\":
 \"NY\", \"COUNTRY\": \"USA\", \"ZIPCODE\": \"11211\", \"LANDMARK\": null}}```"]}'

Parameter permintaan dan respons Cloud Function ini diimplementasikan dengan cara yang kompatibel dengan pemanggilan fungsi jarak jauh BigQuery. Data ini dapat langsung digunakan dari data BigQuery di tempat. Artinya, jika input data Anda (data lat dan long) berada di BigQuery, Anda dapat memanggil fungsi jarak jauh pada data tersebut dan mendapatkan respons fungsi yang dapat disimpan atau diproses langsung dalam BigQuery.

  1. Jalankan DDL berikut dari BigQuery untuk membuat fungsi jarak jauh yang memanggil Cloud Function yang di-deploy ini:
CREATE OR REPLACE FUNCTION
 `mdm_gemini.MDM_GEMINI` (latlng STRING) RETURNS STRING
 REMOTE WITH CONNECTION `us.gemini-bq-conn`
 OPTIONS (
   endpoint = 'https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling', max_batching_rows = 1
 );

Uji Kueri untuk menggunakan fungsi jarak jauh baru yang dibuat:

SELECT mdm_gemini.MDM_GEMINI(latlong) from mdm_gemini.CITIBIKE_STATIONS limit 1;

Jika kueri pengujian yang menggunakan fungsi jarak jauh baru yang dibuat di BigQuery gagal karena masalah izin Cloud Functions, buka Cloud Functions dari Konsol Google Cloud dan temukan Cloud Function yang di-deploy bernama "gemini-fn-calling". Buka tab izin, tambahkan akun utama sebagai "allUsers", dan berikan peran "Cloud Functions Invoker" untuk memastikan Cloud Functions dapat diakses oleh semua pengguna (hanya karena ini adalah aplikasi demo).

7. Mencoba solusi

Jika Anda tidak memiliki API_KEY yang diperlukan untuk pendekatan panggilan fungsi Reverse Geocoding, atau tidak memiliki Cloud Function yang di-deploy, karena alasan tertentu, Anda dapat melakukan hal berikut sebagai alternatif:

  1. Download file CITIBIKE_STATIONS.csv dari repositori ke folder project Cloud Shell Anda, lalu buka folder tersebut.
  2. Ekspor data dari CSV ke set data BigQuery baru Anda mdm_gemini menggunakan perintah berikut di Terminal Cloud Shell:
bq load --source_format=CSV --skip_leading_rows=1 mdm_gemini.CITIBIKE_STATIONS ./CITIBIKE_STATIONS.csv \ name:string,latlng:string,capacity:numeric,num_bikes_available:numeric,num_docks_available:numeric,last_reported:timestamp,full_address_string:string

8. Membuat tabel dan memperkaya data alamat

Langkah 1: Buat tabel

Penting: Lewati langkah ini jika Anda telah menggunakan solusi sementara karena Anda pasti telah membuat tabel.

Jika Anda belum menggunakan solusi sementara, jalankan DDL berikut di BigQuery SQL Editor:

CREATE TABLE mdm_gemini.CITIBIKE_STATIONS as (
select  name, latitude || ',' || longitude as latlong, capacity, num_bikes_available, num_docks_available,last_reported,
'' as full_address_string
from bigquery-public-data.new_york_citibike.citibike_stations) ;

Sekarang, mari kita lengkapi data alamat dengan memanggil fungsi jarak jauh pada koordinat lintang dan bujur yang tersedia dalam tabel. Tetapkan kondisi berikut untuk data:

  • Dilaporkan pada tahun 2024
  • Jumlah sepeda yang tersedia > 0
  • Kapasitas > 100

Jalankan kueri berikut:

update `mdm_gemini.CITIBIKE_STATIONS`
set full_address_string = `mdm_gemini.MDM_GEMINI`(latlong)
where EXTRACT(YEAR FROM last_reported) = 2024 and num_bikes_available > 0 and capacity > 100;

Langkah 2: Buat sumber kedua untuk data lokasi stasiun sepeda

Jangan lewati langkah ini meskipun Anda menggunakan pendekatan solusi untuk membuat tabel.

Pada langkah ini, Anda akan membuat sumber kedua untuk data lokasi stasiun sepeda untuk tujuan codelab ini. Hal ini untuk menunjukkan bahwa MDM menyatukan data dari berbagai sumber dan mengidentifikasi kebenaran utama.

Jalankan DDL berikut di BigQuery SQL Editor untuk membuat sumber data lokasi kedua dengan dua data di dalamnya. Mari kita beri nama tabel ini mdm_gemini.CITIBIKE_STATIONS_SOURCE2 dan masukkan dua data ke dalamnya.

CREATE TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE2 (name STRING(55), address STRING(1000), embeddings_src ARRAY<FLOAT64>);

insert into mdm_gemini.CITIBIKE_STATIONS_SOURCE2 VALUES ('Location broadway and 29','{ "DOOR_NUMBER": "1593", "STREET_ADDRESS": "Broadway", "AREA": null, "CITY": "New York", "TOWN": null, "COUNTY": "New York County", "STATE": "NY", "COUNTRY": "USA", "ZIPCODE": "10019", "LANDMARK": null}', null);

insert into mdm_gemini.CITIBIKE_STATIONS_SOURCE2 VALUES ('Allen St & Hester','{ "DOOR_NUMBER": "36", "STREET_ADDRESS": "Allen St", "AREA": null, "CITY": "New York", "TOWN": null, "COUNTY": "New York County", "STATE": "NY", "COUNTRY": "USA", "ZIPCODE": "10002", "LANDMARK": null}', null);

9. Membuat embedding untuk data alamat

Embedding adalah vektor numerik berdimensi tinggi yang merepresentasikan entity tertentu, seperti teks atau file audio. Model machine learning (ML) menggunakan embedding untuk mengenkode semantik tentang entity tersebut agar lebih mudah dipikirkan dan dibandingkan. Misalnya, operasi umum dalam model pengelompokan, klasifikasi, dan rekomendasi adalah mengukur jarak antara vektor dalam ruang embedding untuk menemukan item yang paling mirip secara semantik. Vertex AI text-embeddings API memungkinkan Anda membuat embedding teks menggunakan AI Generatif di Vertex AI. Embedding teks adalah representasi numerik dari teks yang menangkap hubungan antarkata dan frasa. Baca selengkapnya tentang Penyematan Teks Vertex AI di sini.

  1. Jalankan DDL di bawah untuk membuat model jarak jauh untuk Vertex AI text embeddings API:
CREATE OR REPLACE MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (ENDPOINT = 'textembedding-gecko@latest');
  1. Setelah model embedding jarak jauh siap, mari kita buat embedding untuk sumber pertama dan menyimpannya dalam tabel menggunakan kueri berikut:
CREATE TABLE `mdm_gemini.CITIBIKE_STATIONS_SOURCE1` AS (
SELECT *
FROM ML.GENERATE_EMBEDDING(
 MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`,
 ( select name, full_address_string as content from `mdm_gemini.CITIBIKE_STATIONS`
 where full_address_string is not null )
  )
);

Daripada membuat tabel baru, Anda juga dapat menyimpan kolom hasil sematan di tabel mdm_gemini.CITIBIKE_STATIONS yang sama yang Anda buat sebelumnya.

  1. Untuk membuat embedding data alamat dalam tabel CITIBIKE_STATIONS_SOURCE2, jalankan kueri berikut:
update `mdm_gemini.CITIBIKE_STATIONS_SOURCE2` a set embeddings_src =
(
SELECT  ml_generate_embedding_result
FROM ML.GENERATE_EMBEDDING(
 MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`,
 ( select name, address as content from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2` ))
where name = a.name) where name is not null;

Tindakan ini akan membuat embedding untuk sumber kedua. Perhatikan bahwa kita telah membuat kolom sematan di tabel yang sama, yaitu CITIBIKE_STATIONS_SOURCE2.

  1. Untuk memvisualisasikan embedding yang dihasilkan untuk tabel data sumber 1 dan 2, jalankan kueri berikut:
select name,address,embeddings_src from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2`;
select name,content,ml_generate_embedding_result from `mdm_gemini.CITIBIKE_STATIONS_SOURCE1`;

Sekarang, mari kita lakukan penelusuran vektor untuk mengidentifikasi duplikat.

10. Menjalankan penelusuran vektor untuk menandai alamat duplikat

Pada langkah ini, Anda akan menelusuri kolom sematan alamat ml_generate_embedding_result dari tabel mdm_gemini.CITIBIKE_STATIONS_SOURCE1 untuk menemukan dua sematan teratas yang cocok dengan setiap baris data di kolom embeddings_src dari tabel mdm_gemini.CITIBIKE_STATIONS_SOURCE2.

Untuk melakukannya, jalankan kueri berikut:

select query.name name1,base.name name2,
/* (select address from mdm_gemini.CITIBIKE_STATIONS_SOURCE2 where name = query.name) content1, base.content content2, */
distance
from VECTOR_SEARCH(
 TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE1,
 'ml_generate_embedding_result',
 (SELECT * FROM mdm_gemini.CITIBIKE_STATIONS_SOURCE2),
 'embeddings_src',
 top_k => 2
) where query.name <> base.name
order by distance desc;

Tabel yang kita kueri: mdm_gemini.CITIBIKE_STATIONS_SOURCE1 di kolom ml_generate_embedding_result

Tabel yang kita gunakan sebagai dasar: mdm_gemini.CITIBIKE_STATIONS_SOURCE2 di kolom embeddings_src

top_k: menentukan jumlah tetangga terdekat yang akan ditampilkan. Defaultnya adalah 10. Nilai negatif diperlakukan sebagai tak terhingga, yang berarti semua nilai dihitung sebagai tetangga dan ditampilkan.

distance_type: menentukan jenis metrik yang akan digunakan untuk menghitung jarak antara dua vektor. Jenis jarak yang didukung adalah Euclidean dan Cosine. Defaultnya adalah Euclidean.

Hasil kuerinya adalah sebagai berikut:

Set Hasil

Seperti yang dapat Anda lihat, ini telah mencantumkan dua tetangga terdekat (dengan kata lain, duplikat terdekat) untuk dua baris di CITIBIKE_STATIONS_SOURCE2 dari CITIBIKE_STATIONS_SOURCE1. Karena distance_type tidak ditentukan, maka diasumsikan sebagai Euclidean dan jarak dibaca sebagai jarak dalam nilai TEXT alamat antara dua sumber, dengan yang terendah adalah teks alamat yang paling mirip.

Tetapkan distance_type ke Cosine menggunakan kueri berikut:

select query.name name1,base.name name2,
/* (select address from mdm_gemini.CITIBIKE_STATIONS_SOURCE2 where name = query.name) content1, base.content content2, */
distance
from VECTOR_SEARCH(
 TABLE mdm_gemini.CITIBIKE_STATIONS_SOURCE1,
 'ml_generate_embedding_result',
 (SELECT * FROM mdm_gemini.CITIBIKE_STATIONS_SOURCE2),
 'embeddings_src',
 top_k => 2,distance_type => 'COSINE'
) where query.name <> base.name
order by distance desc;

Hasil kuerinya adalah sebagai berikut:

Kumpulan hasil 2

Kedua kueri (dari kedua jenis jarak) diurutkan berdasarkan jarak MENURUN yang berarti kita ingin mencantumkan hasil dalam urutan jarak yang semakin berkurang. Namun, Anda akan melihat bahwa urutan jarak kueri kedua dibalik. Dapatkah Anda menebak alasannya?

Bagus!! Jawaban Anda benar! Dalam kesamaan kosinus, angka yang lebih besar berarti kesamaan yang lebih besar dan jarak yang lebih kecil. Dalam jarak Euclidean, angka yang lebih besar berarti jarak yang lebih jauh antara nilai.

Untuk mengetahui informasi selengkapnya tentang pemahaman MDM dan tips untuk memahami perbedaan serta penerapan Euklidean dan Kosinus, baca blog ini.

11. Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam posting ini, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Manage resources.
  2. Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
  4. Jika Anda ingin mempertahankan project, lewati langkah-langkah di atas dan hapus Cloud Function dengan membuka Cloud Functions, lalu dari daftar fungsi, centang fungsi yang ingin Anda hapus dan klik Hapus.

12. Selamat

Selamat! Anda telah mendemonstrasikan keunggulan penggunaan Gemini 1.0 Pro dan Panggilan Fungsi dalam mengubah beberapa aktivitas MDM menjadi kemampuan AI generatif yang sederhana namun canggih, deterministik, dan andal. Sekarang Anda sudah tahu, jadi jangan ragu untuk mengidentifikasi cara lain dalam menerapkan kasus penggunaan yang sama atau fungsi MDM lainnya. Apakah ada set data yang dapat Anda validasi, kesenjangan informasi yang dapat Anda penuhi, atau tugas yang dapat diotomatiskan dengan panggilan terstruktur yang disematkan dalam respons AI generatif Anda? Lihat dokumentasi untuk Vertex AI, BigQuery Remote Functions, Cloud Functions, Embeddings, dan Vector Search untuk panduan yang lebih mendalam. Berikut adalah repo github untuk project ini. Beri tahu kami apa yang Anda buat dengan pembelajaran ini.