1. Ringkasan
Apa yang dimaksud dengan Pengelolaan Data Master?
Pengelolaan Data Master (MDM) adalah tentang membuat satu sumber tepercaya yang andal untuk data paling penting organisasi Anda. Bayangkan perpustakaan yang diatur dengan cermat, dengan setiap buku (titik data) diberi label dengan benar, terbaru, dan mudah ditemukan.
Data master mewakili entitas bisnis inti dan dasar yang penting bagi operasi perusahaan. Berikut adalah elemen utama data master:
- Entity bisnis: entity 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 merekam setiap peristiwa (pembelian, pengiriman, dll.). Sedangkan, data master memberikan konteks untuk peristiwa tersebut dengan menentukan entitas yang terlibat. Misalnya, transaksi penjualan ditautkan ke data master untuk pelanggan, produk, dan tenaga penjualan.
Meskipun penerapan MDM yang andal sangat penting untuk pengambilan keputusan strategis, hal ini dapat bersifat kompleks dan membutuhkan banyak resource. 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 menunjukkan 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
- Set data publik BigQuery
bigquery-public-data.new_york_citibike
. - Panggilan Fungsi Gemini (Cloud Function Java yang mendapatkan informasi alamat menggunakan Geocoding API terbalik untuk koordinat yang tersedia dengan data citibike_stations).
- Vertex AI Embeddings API dan Vector Search di BigQuery untuk mengidentifikasi duplikat.
Yang akan Anda build
- Anda akan membuat set data BigQuery untuk kasus penggunaan ini. Dalam set data ini, Anda akan membuat tabel landing dengan data dari tabel set data publik
bigquery-public-data.new_york_citibike.citibike_stations
. - Anda akan men-deploy Cloud Function yang menyertakan Pemanggilan Fungsi Gemini untuk standardisasi alamat.
- Anda akan menyimpan data alamat yang diperkaya di tabel landing (dari dua sumber yang disediakan untuk demonstrasi ini).
- Anda akan memanggil Vertex AI Embeddings API dari BigQuery pada data alamat.
- Anda akan menggunakan BigQuery Vector Search untuk mengidentifikasi data duplikat.
Diagram berikut menunjukkan aliran data dan langkah-langkah yang terlibat dalam penerapan.
3. Persyaratan
4. Sebelum memulai
- Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
- Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project .
- Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud yang telah dilengkapi dengan bq. Klik Aktifkan Cloud Shell di bagian atas konsol Google Cloud.
- Setelah terhubung ke Cloud Shell, Anda akan memeriksa bahwa Anda sudah diautentikasi dan project ditetapkan ke project ID Anda menggunakan perintah berikut:
gcloud auth list
- Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda.
gcloud config list project
- Jika project Anda belum ditetapkan, gunakan perintah berikut untuk menetapkannya:
gcloud config set project <YOUR_PROJECT_ID>
- Buka Gemini for Google Cloud Marketplace untuk mengaktifkan API. Anda juga dapat menggunakan perintah berikut di terminal Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- 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 BigQuery dan koneksi eksternal
Mari kita mulai dengan membuat set data dan koneksi resource Cloud.
Set data di BigQuery adalah penampung untuk semua tabel dan objek untuk aplikasi Anda.
Untuk membuat set data, lakukan hal berikut:
- Buka halaman BigQuery di konsol Google Cloud.
- Di panel Explorer, pilih project tempat Anda ingin membuat set data.
- Luaskan opsi Actions (ikon elipsis vertikal), lalu klik Create dataset.
- Masukkan
mdm_gemini
di kolom Dataset ID. - Tetapkan jenis lokasi Anda sebagai
Multi-region
dan terima nilai default, yaituUS(multiple regions in United States.
- Klik Create dataset.
- Pastikan 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:
- Klik Tambahkan di panel Penjelajah di halaman BigQuery.
- Klik Koneksi ke sumber data eksternal.
- Pada Connection type list, pilih Vertex AI remote models, remote functions and BigLake (Cloud Resource).
- Di kolom Connection ID, masukkan nama koneksi Anda sebagai
gemini-bq-conn
. - Tetapkan jenis lokasi Anda sebagai
Multi-region
dan terima nilai default, yaituUS(multiple regions in United States.
- Klik Create connection.
- Klik Buka koneksi,lalu salin ID akun layanan di panel Connection info.
- Buka halaman IAM & Admin, lalu klik Berikan akses.
- Tempel ID akun layanan di kolom New principles.
- Pilih peran
Vertex AI user
dari daftar peran, lalu klik Simpan.
Sekarang Anda telah berhasil membuat set data dan koneksi BigQuery.
6. Men-deploy Panggilan Fungsi Gemini (Java Cloud Function)
Ikuti langkah-langkah berikut untuk men-deploy Cloud Function Java yang menyertakan Panggilan Fungsi Gemini.
- Clone repositori github dari terminal Cloud Shell menggunakan perintah berikut:
git clone https://github.com/AbiramiSukumaran/GeminiFunctionCalling
- Ganti placeholder
YOUR_API_KEY
danYOUR_PROJECT_ID
dengan nilai Anda.
Jika membaca blog di sini, Anda akan mengetahui bahwa implementasi panggilan fungsi menggunakan Reverse Geocoding API. Anda dapat membuat API_KEY Anda sendiri dari petunjuk di sini.
- Di terminal Cloud Shell, buka direktori project yang baru di-clone GeminiFunctionCalling dan jalankan pernyataan berikut untuk mem-build 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". Idealnya, Anda akan menyiapkan autentikasi untuk aplikasi perusahaan, sesuai rekomendasi. Namun, karena ini adalah aplikasi demo, kita akan melanjutkan tanpa diautentikasi.
Output-nya adalah URL REST dalam format berikut:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling
- 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 diterapkan dengan cara yang kompatibel dengan pemanggilan fungsi jarak jauh BigQuery. Data tersebut 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 dan mendapatkan respons fungsi yang dapat disimpan atau diproses langsung dalam BigQuery.
- 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
);
Kueri Pengujian 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 Google Cloud Console 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 men-deploy Cloud Function, karena alasan tertentu, Anda dapat melakukan hal berikut sebagai alternatif:
- Download file CITIBIKE_STATIONS.csv dari repositori ke folder project Cloud Shell Anda, lalu buka folder tersebut.
- Ekspor data dari csv ke set data BigQuery baru
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 pasti sudah membuat tabel.
Jika Anda belum menggunakan solusi ini, 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 perkaya data alamat dengan memanggil fungsi jarak jauh pada koordinat lintang dan bujur yang tersedia di 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 menggabungkan data dari beberapa sumber dan mengidentifikasi kebenaran emas.
Jalankan DDL berikut di BigQuery SQL Editor untuk membuat sumber data lokasi kedua dengan dua kumpulan 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 mewakili entitas tertentu, seperti potongan teks atau file audio. Model machine learning (ML) menggunakan penyematan untuk mengenkode semantik tentang entitas tersebut agar lebih mudah untuk memahami dan membandingkannya. Misalnya, operasi umum dalam model pengelompokan, klasifikasi, dan rekomendasi adalah mengukur jarak antara vektor dalam ruang penyematan 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 teks yang menangkap hubungan antara kata dan frasa. Baca selengkapnya tentang Vertex AI Text Embeddings di sini.
- 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');
- Setelah model penyematan jarak jauh siap, mari kita buat penyematan 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 )
)
);
Daripada membuat tabel baru, Anda juga dapat menyimpan kolom hasil penyematan di tabel mdm_gemini.CITIBIKE_STATIONS yang sama dengan yang Anda buat sebelumnya.
- Untuk membuat penyematan data alamat di 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 penyematan untuk sumber kedua. Perhatikan bahwa kita telah membuat kolom penyematan di tabel yang sama CITIBIKE_STATIONS_SOURCE2.
- Untuk memvisualisasikan penyematan 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 kolom penyematan alamat ml_generate_embedding_result di tabel mdm_gemini.CITIBIKE_STATIONS_SOURCE1 untuk menemukan dua penyematan teratas yang cocok dengan setiap baris data di kolom embeddings_src di 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 buat kuerinya: mdm_gemini.CITIBIKE_STATIONS_SOURCE1
pada kolom ml_generate_embedding_result
Tabel yang kita gunakan sebagai dasar: mdm_gemini.CITIBIKE_STATIONS_SOURCE2
pada 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 kueri adalah sebagai berikut:
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, distance_type
diasumsikan sebagai Euclidean dan jarak dibaca sebagai jarak dalam nilai TEXT alamat antara dua sumber, dengan nilai terendah adalah teks alamat yang paling mirip.
Mari kita 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:
Kedua kueri (dari kedua jenis jarak) diurutkan menurut jarak DESCENDING yang berarti kita ingin mencantumkan hasil dalam urutan jarak yang menurun. Namun, Anda akan melihat bahwa urutan jarak kueri kedua dibalik. Dapatkah Anda menebak alasannya?
Bagus!! Jawaban Anda benar! Dalam kemiripan kosinus, angka yang lebih besar berarti kemiripan yang lebih besar dan jarak yang lebih kecil. Dalam jarak Euclidean, angka yang lebih besar berarti jarak yang lebih besar antara nilai.
Untuk informasi selengkapnya tentang pemahaman MDM dan tips untuk memahami perbedaan serta penerapan Euclidean dan Cosine, baca blog.
11. Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam postingan ini, ikuti langkah-langkah berikut:
- Di konsol Google Cloud, buka halaman Manage resources.
- Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
- 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 dihapus dan klik Hapus.
12. Selamat
Selamat! Anda telah menunjukkan keandalan penggunaan Gemini 1.0 Pro dan Panggilan Fungsi dalam mengubah beberapa aktivitas MDM menjadi kemampuan AI generatif yang disederhanakan, tetapi andal, deterministik, dan andal. Setelah mengetahuinya, 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 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, Penyematan, 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.