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

1. Ringkasan

Apa itu Pengelolaan Data Master?

Master Data Management (MDM) bertujuan untuk menciptakan satu sumber tepercaya yang dapat diandalkan untuk data yang paling penting di organisasi Anda. Bayangkan sebuah perpustakaan yang terorganisir dengan cermat di mana setiap buku (titik data) diberi label dengan benar, terbaru, dan mudah ditemukan.

Data master mewakili entitas bisnis inti dan mendasar yang penting untuk operasi perusahaan. Berikut adalah elemen-elemen penting dari 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 berbagai sistem
  • Atribut: karakteristik yang mendeskripsikan setiap entitas, misalnya, alamat pelanggan, harga produk, dll.

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

Meskipun MDM yang andal sangat penting untuk pengambilan keputusan yang strategis, MDM dapat menjadi rumit dan memerlukan banyak sumber daya. Di sinilah kekuatan transformatif AI Generatif, khususnya model seperti Gemini 1.0 Pro, Gemini 1.0 Pro Vision, Gemini 1.5 Pro, mulai berperan.

2. Tujuan

Dalam codelab ini, Anda akan menunjukkan bagaimana 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 {i>dataset<i} BigQuery untuk kasus penggunaan tersebut. Dalam set data ini, Anda akan membuat tabel landing 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 diperkaya di tabel landing (dari dua sumber yang diberikan untuk demonstrasi ini).
  4. Anda akan memanggil Vertex AI Embeddings API dari BigQuery pada data alamat.
  5. Anda akan menggunakan BigQuery Vector Search untuk mengidentifikasi catatan duplikat.

Diagram berikut mewakili aliran data dan langkah-langkah yang terlibat dalam penerapan.

Alur tingkat tinggi dari kasus penggunaan

3. Persyaratan

  • Browser, seperti Chrome atau Firefox
  • Project Google Cloud dengan penagihan diaktifkan.

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 diaktifkan pada sebuah project .
  3. Anda akan menggunakan Cloud Shell, yakni 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 Aktifkan Cloud Shell

  1. Setelah terhubung ke Cloud Shell, Anda harus memastikan bahwa Anda sudah diautentikasi dan project 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 Gemini untuk Google Cloud Marketplace guna mengaktifkan API. Anda juga dapat menggunakan perintah berikut di terminal Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
  1. Pastikan BigQuery, Koneksi BigQuery, 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 BigQuery dan koneksi eksternal

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

Set data di BigQuery adalah container untuk semua tabel dan objek untuk 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 Tindakan dan opsi set data Buat

  1. Masukkan mdm_gemini di kolom ID set data.
  2. Tetapkan jenis lokasi Anda sebagai Multi-region dan terima nilai default, yaitu US(multiple regions in United States.
  3. Klik Create dataset.
  4. Periksa apakah set data telah 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 langkah berikut:

  1. Klik Add di panel Explorer di halaman BigQuery.

Konsol BigQuery dengan tombol ADD yang ditandai untuk menambahkan koneksi eksternal

  1. Klik Koneksi ke sumber data eksternal.
  2. Dalam 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 terima nilai default, 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 Berikan akses.
  2. Tempelkan ID akun layanan di kolom Prinsip baru.
  3. Pilih peran Vertex AI user dari daftar peran, lalu klik Simpan.

Memberikan akses ke screenshot Akun Layanan

Anda kini 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. Buat clone repositori github dari terminal Cloud Shell Anda menggunakan perintah berikut:
git clone https://github.com/AbiramiSukumaran/GeminiFunctionCalling
  1. Ganti placeholder YOUR_API_KEY dan YOUR_PROJECT_ID dengan nilai Anda.

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

  1. Di terminal Cloud Shell, buka direktori project GeminiFunctionCalling yang baru di-clone, lalu 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 melihat pesan "Allow unauthenticated invocations" semua pertanyaan. Idealnya, Anda akan menyiapkan autentikasi untuk aplikasi perusahaan, sesuai rekomendasi. Namun, karena ini adalah aplikasi demo, kita akan melanjutkan proses tanpa autentikasi.

Output-nya 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 lintang dan bujur) berada di BigQuery, Anda dapat memanggil fungsi jarak jauh pada data tersebut dan mendapatkan respons fungsi yang dapat disimpan atau diproses dalam BigQuery secara langsung.

  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) dari batas mdm_gemini.CITIBIKE_stationS 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 cari Cloud Function yang di-deploy bernama "gemini-fn-calling". Buka tab izin, tambahkan akun utama sebagai "allUsers" dan memberikan peran "Cloud Functions Invoker" untuk memastikan Cloud Functions dapat diakses oleh semua pengguna (hanya karena ini adalah aplikasi demo).

7. Coba solusi

Jika Anda tidak memiliki API_KEY yang diperlukan untuk pendekatan panggilan fungsi Geocoding Terbalik, 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 dalam 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

Imp: Lewati langkah ini jika Anda telah menggunakan solusi karena Anda harus sudah membuat tabel.

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

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 perkaya 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 SPKLU

Jangan lewatkan langkah ini bahkan jika Anda telah menggunakan pendekatan solusi untuk membuat tabel.

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

Jalankan DDL berikut di Editor SQL BigQuery untuk membuat sumber data lokasi kedua dengan dua kumpulan data di dalamnya. Beri nama tabel ini mdm_gemini.CITIBIKE_STATIONS_SOURCE2 lalu sisipkan dua kumpulan 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 embeddings untuk data alamat

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

  1. Jalankan DDL di bawah guna 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 embeddings untuk sumber pertama dan simpan 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 )
  )
);

Selain membuat tabel baru, Anda juga dapat menyimpan kolom hasil embedding di tabel mdm_gemini.CITIBIKE_STATIONS yang sama dengan yang Anda buat sebelumnya.

  1. Untuk membuat embeddings untuk 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 embedding dalam tabel yang sama 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 lanjutkan dan lakukan penelusuran vektor untuk mengidentifikasi duplikat.

10. Menjalankan penelusuran vektor untuk menandai alamat duplikat

Pada langkah ini, Anda akan menelusuri embedding alamat kolom ml_generate_embedding_result pada tabel mdm_gemini.CITIBIKE_stationS_SOURCE1 untuk dua embedding teratas yang cocok dengan setiap baris data di kolom embeddings_src pada 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 sedang kita buat kuerinya: mdm_gemini.CITIBIKE_STATIONS_SOURCE1 pada kolom ml_generate_embedding_result

Tabel yang kami 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. Nilai defaultnya adalah Euclidean.

Hasil kueri adalah sebagai berikut:

Hasil Set

Seperti yang dapat Anda lihat, perintah 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, kode tersebut mengasumsikan bahwa kode tersebut adalah Euclidean dan jarak dibaca sebagai jarak dalam nilai TEXT alamat antara kedua sumber, yang terendah adalah teks alamat yang paling mirip.

Mari 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 kueri adalah sebagai berikut:

Kumpulan hasil 2

Kedua kueri (dari kedua jenis jarak) diurutkan berdasarkan jarak DESCENDING yang berarti kita ingin mencantumkan hasil dalam urutan mengurangi jarak. Tetapi 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. Pada jarak Euclidean, angka yang lebih besar berarti jarak antarnilai yang lebih besar.

Untuk informasi selengkapnya tentang pemahaman MDM dan tips untuk memahami perbedaan dan penerapan Euclidean dan Cosine, baca blog.

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 resource.
  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 menyimpan project, lewati langkah-langkah di atas dan hapus Cloud Function dengan membuka Cloud Functions. Dari daftar fungsi, centang fungsi yang ingin dihapus, lalu klik Delete.

12. Selamat

Selamat! Anda telah menunjukkan kehebatan Gemini 1.0 Pro dan Panggilan Fungsi dalam mengubah beberapa aktivitas MDM menjadi kemampuan AI generatif yang sederhana tetapi kuat, determenistik, dan andal. Setelah Anda mengetahui, Anda dapat mengidentifikasi cara lain untuk menerapkan kasus penggunaan yang sama atau fungsi MDM lainnya. Apakah ada set data yang dapat Anda validasi, celah informasi yang dapat Anda isi, atau tugas yang dapat diotomatiskan dengan panggilan terstruktur yang disematkan dalam respons AI generatif Anda? Lihat dokumentasi untuk Vertex AI, Fungsi Jarak Jauh BigQuery, Cloud Functions, Embeddings, dan Vector Search untuk panduan yang lebih mendalam. Berikut adalah repo github untuk project ini. Beri tahu kami apa yang Anda bangun dengan pembelajaran ini.