1. Genel Bakış
Ana Veri Yönetimi nedir?
Ana Veri Yönetimi (MDM), kuruluşunuzun en kritik verileri için tek ve güvenilir bir doğruluk kaynağı oluşturmayla ilgilidir. Her kitabın (veri noktasının) doğru etiketlendiği, güncel olduğu ve kolayca bulunabildiği titizlikle düzenlenmiş bir kitaplık düşünün.
Ana veriler, bir şirketin faaliyetleri için gerekli olan temel, kuruluş tüzel kişilerini temsil eder. Ana verilerin temel unsurları şunlardır:
- İşletme varlıkları: İşletmenizin etrafında döndüğü müşteriler, ürünler, tedarikçiler, konumlar ve çalışanlar gibi varlıklar
- Tanımlayıcılar: Her öğenin sistemler arasında farklı ve izlenebilir olmasını sağlayan benzersiz tanımlayıcılar
- Özellikler: Her öğeyi tanımlayan özelliklerdir (ör. müşterinin adresi, ürünün fiyatı vb.).
Ana verileri daha iyi anlamanıza yardımcı olmak için bunları işlem verileriyle karşılaştıralım. İşlem verileri, tek tek etkinlikleri (satın alma, gönderim vb.) yakalar. Ana veriler ise ilgili varlıkları tanımlayarak bu etkinlikler için bağlam sağlar. Örneğin, bir satış işlemi müşteri, ürün ve satış temsilcisi ana verilerine bağlanır.
Sağlam bir MDM'yi uygulamak stratejik karar verme için gerekli olsa da karmaşık ve kaynak yoğun olabilir. Bu noktada, özellikle Gemini 1.0 Pro, Gemini 1.0 Pro Vision ve Gemini 1.5 Pro gibi modeller olmak üzere Üretken Yapay Zeka'nın dönüştürücü gücü devreye girer.
2. Hedef
Bu codelab'de, BigQuery herkese açık veri kümesinde bulunan citibike_stations verileri için Gemini 1.0 Pro'nun zenginleştirme ve tekilleştirme gibi ana veri yönetimi uygulamalarını nasıl basitleştirdiğini göstereceksiniz.
Kullanacağınız araçlar
bigquery-public-data.new_york_citibike
adlı herkese açık BigQuery veri kümesi.- Gemini işlevi çağırma (citibike_stations verileriyle kullanılabilen koordinatlar için ters coğrafi kodlama API'sini kullanarak adres bilgilerini alan bir Java Cloud işlevi).
- Yinelenenleri belirlemek için BigQuery'de Vertex AI Embeddings API ve Vector Search'i kullanın.
Ne oluşturacaksınız?
- Kullanım alanı için bir BigQuery veri kümesi oluşturursunuz. Bu veri kümesinde,
bigquery-public-data.new_york_citibike.citibike_stations
adlı herkese açık veri kümesi tablosundaki verileri içeren bir açılış tablosu oluşturacaksınız. - Adres standardizasyonu için Gemini işlev çağrısını içeren Cloud Functions'ı dağıtırsınız.
- Zenginleştirilmiş adres verilerini açılış tablolarında (bu gösterim için sağlanan iki kaynaktan) depolarsınız.
- Adres verilerinde BigQuery'den Vertex AI Embeddings API'yi çağıracaksınız.
- Yinelenen kayıtları belirlemek için BigQuery Vektör Arama'yı kullanırsınız.
Aşağıdaki şema, veri akışını ve uygulamayla ilgili adımları gösterir.
3. Şartlar
4. Başlamadan önce
- Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
- Cloud projenizde faturalandırmanın etkinleştirildiğinden emin olun. Projede faturalandırmanın etkin olup olmadığını nasıl kontrol edeceğinizi öğrenin .
- Google Cloud'da çalışan ve bq ile önceden yüklenmiş bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. Google Cloud Console'un üst kısmından Cloud Shell'i etkinleştir'i tıklayın.
- Cloud Shell'e bağlandıktan sonra aşağıdaki komutu kullanarak kimliğinizin doğrulanıp doğrulanmadığını ve projenin proje kimliğinize ayarlanıp ayarlanmadığını kontrol edin:
gcloud auth list
- gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud config list project
- Projeniz ayarlanmadıysa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
- API'yi etkinleştirmek için Google Cloud Marketplace için Gemini'ye gidin. Cloud Shell terminalinde aşağıdaki komutu da kullanabilirsiniz:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- BigQuery, BigQuery Connection, Cloud Function, Cloud Run, Vertex AI ve Cloud Build API'lerinin etkinleştirildiğinden emin olun. gcloud komutunun alternatifi, bu bağlantıyı kullanarak konsoldan geçmektir.
gcloud komutları ve kullanımı için belgelere bakın.
5. BigQuery veri kümesi ve harici bağlantı oluşturma
Bir veri kümesi ve Cloud kaynağı bağlantısı oluşturarak başlayalım.
BigQuery'deki veri kümesi, uygulamanızdaki tüm tabloları ve nesneleri içeren bir kapsayıcıdır.
Veri kümesi oluşturmak için aşağıdakileri yapın:
- Google Cloud Console'da BigQuery sayfasına gidin.
- Gezgin panelinde, veri kümesini oluşturmak istediğiniz projeyi seçin.
- İşlemler seçeneğini (dikey üç nokta simgesi) genişletin ve Veri kümesi oluştur'u tıklayın.
- Veri Kümesi Kimliği alanına
mdm_gemini
yazın. - Konum türünüzü
Multi-region
olarak ayarlayın ve varsayılan değeri (US(multiple regions in United States.
) kabul edin. - Veri kümesi oluştur'u tıklayın.
- Veri kümesinin oluşturulup Gezgin bölmesinde proje kimliğinizin altında listelendiğini kontrol edin.
Cloud işlevinizle etkileşim kurmak için BigQuery bağlantısı gerekir. Uzak işlev oluşturmak için BigQuery bağlantısı oluşturmanız gerekir. Bu kod laboratuvarında, Cloud işlevi aracılığıyla BigQuery'den modele erişmek için BigLake bağlantısını kullanacağız. BigLake bağlantıları, ayrıntılı BigQuery erişim denetimini ve güvenliğini korurken harici veri kaynağını bağlamaya yardımcı olur. Bu durumda, Vertex AI Gemini Pro API'dir.
BigLake bağlantısını oluşturmak için aşağıdakileri yapın:
- BigQuery sayfasının Explorer bölmesinde Ekle'yi tıklayın.
- Harici veri kaynaklarına bağlantılar'ı tıklayın.
- Bağlantı türü listesinde Vertex AI uzak modelleri, uzak işlevler ve BigLake (Cloud Resource)'ı seçin.
- Bağlantı Kimliği alanına bağlantı adınızı
gemini-bq-conn
olarak girin. - Konum türünüzü
Multi-region
olarak ayarlayın ve varsayılan değeri (US(multiple regions in United States.
) kabul edin. - Bağlantı oluştur'u tıklayın.
- Bağlantıya git'i tıklayın ve ardından Bağlantı bilgileri bölmesinde hizmet hesabı kimliğini kopyalayın.
- IAM ve Yönetici sayfasına gidin ve Erişim izni ver'i tıklayın.
- Hizmet hesabı kimliğini Yeni ilkeler alanına yapıştırın.
- Rol listesinden
Vertex AI user
rolünü seçin ve Kaydet'i tıklayın.
Veri kümesini ve BigQuery bağlantısını başarıyla oluşturdunuz.
6. Gemini işlev çağrısını dağıtma (Java Cloud Functions)
Gemini işlev çağrısını içeren Java Cloud işlevini dağıtmak için aşağıdaki adımları uygulayın.
- Aşağıdaki komutu kullanarak Cloud Shell terminalinizden GitHub deposunu klonlayın:
git clone https://github.com/AbiramiSukumaran/GeminiFunctionCalling
YOUR_API_KEY
veYOUR_PROJECT_ID
yer tutucularını kendi değerlerinizle değiştirin.
Buradaki blogu okursanız işlev çağırma uygulamalarının Ters Coğrafi Kodlama API'sini kullandığını görebilirsiniz. Buradaki talimatları uygulayarak kendi API_KEY'nizi oluşturabilirsiniz.
- Cloud Shell terminalinde, yeni klonlanan GeminiFunctionCalling proje dizinine gidin ve Cloud işlevini derleyip dağıtmak için aşağıdaki ifadeyi çalıştırın:
gcloud functions deploy gemini-fn-calling --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http
"Kimliği doğrulanmamış çağrılara izin ver" soruları sorulduğunda "y" deyin. İdeal olarak, öneriler doğrultusunda kurumsal uygulamalarınız için kimlik doğrulamayı ayarlarsınız. Ancak bu bir demo uygulama olduğu için kimlik doğrulaması yapmadan devam edeceğiz.
Çıkış, aşağıdaki biçimde bir REST URL'sidir:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-fn-calling
- Terminalde aşağıdaki komutu çalıştırarak bu Cloud Functions işlevini test edin:
gcloud functions call gemini-fn-calling --region=us-central1 --gen2 --data '{"calls":[["40.714224,-73.961452"]]}'
Rastgele örnek istemine verilen yanıt:
'{"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}}```"]}'
Bu Cloud Functions işlevinin istek ve yanıt parametreleri, BigQuery'nin uzak işlev çağrımıyla uyumlu olacak şekilde uygulanır. Doğrudan yerinde BigQuery verilerinden kullanılabilir. Yani veri girişiniz (enlem ve boylam verileri) BigQuery'deyse verilerde uzak işlevi çağırabilir ve doğrudan BigQuery'de depolanabilen veya işlenebilen işlev yanıtını alabilirsiniz.
- Dağıtılan bu Cloud Functions'ı çağıran uzak bir işlev oluşturmak için BigQuery'den aşağıdaki DDL'yi çalıştırın:
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
);
Oluşturulan yeni uzak işlevi kullanmak için test sorgusu:
SELECT mdm_gemini.MDM_GEMINI
(latlong) from mdm_gemini.CITIBIKE_STATIONS limit 1;
BigQuery'de oluşturulan yeni uzak işlevi kullanan test sorgusu, Cloud Functions izinleri sorunu nedeniyle başarısız olursa Google Cloud Console'dan Cloud Functions'e gidin ve "gemini-fn-calling" adlı dağıtılmış Cloud Functions işlevini bulun. İzinler sekmesine gidin, "allUsers" olarak asıl kullanıcıyı ekleyin ve Cloud Functions'a tüm kullanıcıların erişebildiğinden emin olmak için "Cloud Functions Çağırıcısı" rolünü verin (yalnızca bu bir demo uygulama olduğu için).
7. Geçici çözüm dene
Ters Coğrafi Kodlama işlevi çağrısı yaklaşımı için gerekli API_KEY'ye sahip değilseniz veya Cloud işlevini herhangi bir nedenle dağıtmadıysanız alternatif olarak aşağıdakileri yapabilirsiniz:
- Depodan CITIBIKE_STATIONS.csv dosyasını Cloud Shell proje klasörünüze indirin ve bu klasöre gidin.
- Cloud Shell Terminal'de aşağıdaki komutu kullanarak verileri csv'den yeni BigQuery veri kümenize
mdm_gemini
aktarın:
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. Tablo oluşturma ve adres verilerini zenginleştirme
1. Adım: Tabloyu oluşturun
Önemli: Geçici çözümü kullandıysanız tabloyu zaten oluşturmuş olmanız gerektiğinden bu adımı atlayın.
Geçici çözümü kullanmadıysanız BigQuery SQL Düzenleyici'de aşağıdaki DDL'yi çalıştırın:
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) ;
Şimdi, tabloda bulunan enlem ve boylam koordinatlarında uzak işlevi çağırarak adres verilerini zenginleştirelim. Veriler için aşağıdaki koşulları ayarlayın:
- 2024 yılında bildirildi
- Müsait bisiklet sayısı > 0
- Kapasite > 100
Aşağıdaki sorguyu çalıştırın:
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;
2. adım: Bisiklet istasyonu konum verileri için ikinci bir kaynak oluşturun
Tabloyu oluşturmak için geçici çözüm yaklaşımını kullanmış olsanız bile bu adımı atlamayın.
Bu adımda, bu codelab'in amacı doğrultusunda bisiklet istasyonu konum verileri için ikinci bir kaynak oluşturacaksınız. Bu, MDM'nin birden fazla kaynaktan gelen verileri bir araya getirdiğini ve doğru bilgiyi belirlediğini göstermek içindir.
İçinde iki kayıt bulunan ikinci konum verisi kaynağını oluşturmak için BigQuery SQL Düzenleyici'de aşağıdaki DDL'leri çalıştırın. Bu tabloyu mdm_gemini.CITIBIKE_STATIONS_SOURCE2
olarak adlandıralım ve içine iki kayıt ekleyelim.
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. Adres verileri için yerleştirilmiş öğeler oluşturma
Yerleşimler, bir metin parçası veya ses dosyası gibi belirli bir varlığı temsil eden yüksek boyutlu sayısal vektörlerdir. Makine öğrenimi (ML) modelleri, bu tür varlıklarla ilgili anlamları kodlamak için yerleştirmeleri kullanır. Böylece, varlıklar hakkında akıl yürütme ve bunları karşılaştırma işlemi kolaylaştırılır. Örneğin, küme oluşturma, sınıflandırma ve öneri modellerinde yaygın bir işlem, semantik olarak en benzer öğeleri bulmak için bir yerleştirme alanındaki vektörler arasındaki mesafeyi ölçmektir. Vertex AI text-embeddings API, Vertex AI'da üretken yapay zeka kullanarak metin gömme oluşturmanıza olanak tanır. Metin yerleştirmeleri, kelimeler ve kelime öbekleri arasındaki ilişkileri yakalayan metnin sayısal temsilleridir. Vertex AI metin gömmeleri hakkında daha fazla bilgiyi buradan edinebilirsiniz.
- Vertex AI metin gömmeleri API'si için uzak bir model oluşturmak üzere aşağıdaki DDL'yi çalıştırın:
CREATE OR REPLACE MODEL `mdm_gemini.CITIBIKE_STATIONS_ADDRESS_EMB`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (ENDPOINT = 'textembedding-gecko@latest');
- Uzak yerleştirmeler modeli hazır olduğuna göre, ilk kaynak için yerleştirmeler oluşturalım ve aşağıdaki sorguyu kullanarak bunları bir tabloda depolayalım:
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 )
)
);
Yeni bir tablo oluşturmak yerine, yerleştirme sonucu alanını daha önce oluşturduğunuz mdm_gemini.CITIBIKE_STATIONS tablosunda da saklayabilirsiniz.
- CITIBIKE_STATIONS_SOURCE2 tablosundaki adres verileri için yerleştirmeler oluşturmak üzere aşağıdaki sorguyu çalıştırın:
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;
Bu işlem, ikinci kaynak için yerleştirmeler oluşturur. Yerleşimler alanını aynı tabloda (CITIBIKE_STATIONS_SOURCE2) oluşturduğumuzu unutmayın.
- 1 ve 2 numaralı kaynak veri tabloları için oluşturulan gömmeleri görselleştirmek üzere aşağıdaki sorguyu çalıştırın:
select name,address,embeddings_src from `mdm_gemini.CITIBIKE_STATIONS_SOURCE2`;
select name,content,ml_generate_embedding_result from `mdm_gemini.CITIBIKE_STATIONS_SOURCE1`;
Şimdi, yinelemeleri belirlemek için bir vektör araması yapalım.
10. Yinelenen adresleri işaretlemek için vektör araması çalıştırma
Bu adımda, mdm_gemini.CITIBIKE_STATIONS_SOURCE2 tablosunun embeddings_src sütunundaki her veri satırı ile eşleşen en iyi iki yerleşimi bulmak için mdm_gemini.CITIBIKE_STATIONS_SOURCE1 tablosunun adres yerleşimleri ml_generate_embedding_result sütununu ararsınız.
Bunun için aşağıdaki sorguyu çalıştırın:
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;
Sorguladığımız tablo: ml_generate_embedding_result
alanındaki mdm_gemini.CITIBIKE_STATIONS_SOURCE1
Temel olarak kullandığımız tablo: embeddings_src
alanındaki mdm_gemini.CITIBIKE_STATIONS_SOURCE2
top_k: Döndürülecek en yakın komşuların sayısını belirtir. Varsayılan değer 10'dur. Negatif değerler sonsuz olarak kabul edilir. Bu durumda tüm değerler komşu olarak sayılır ve döndürülür.
distance_type: İki vektör arasındaki mesafeyi hesaplamak için kullanılacak metrik türünü belirtir. Desteklenen mesafe türleri Öklid ve Kosinüs'tür. Varsayılan değer Euclidean'dır.
Sorgunun sonucu aşağıdaki gibidir:
Gördüğünüz gibi, bu örnekte CITIBIKE_STATIONS_SOURCE1
'daki CITIBIKE_STATIONS_SOURCE2
satırları için en yakın iki komşu (yani en yakın yinelenenler) listelenmiştir. distance_type
belirtilmediğinden, Öklid olduğu varsayılır ve uzaklık, iki kaynak arasındaki adres TEXT değerlerindeki mesafeler olarak okunur. En düşük değer, en benzer adres metinleridir.
Aşağıdaki sorguyu kullanarak distance_type
değerini Kosinüs olarak ayarlayalım:
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;
Sorgunun sonucu aşağıdaki gibidir:
Her iki sorgu da (her iki mesafe türü için de) mesafeye göre AZALAN düzende sıralanır. Yani sonuçları, mesafenin azaldığı sırayla listelemek isteriz. Ancak ikinci sorgunun mesafe sırasının ters olduğunu fark edeceksiniz. Nedenini tahmin edebilir misiniz?
Evet. Tebrikler! Kosinüs benzerliğinde, daha büyük bir sayı daha fazla benzerlik ve daha küçük mesafe anlamına gelir. Öklid uzaklığında, daha büyük bir sayı değerlerin arasındaki mesafenin daha yüksek olduğunu gösterir.
MDM hakkında daha fazla bilgi edinmek ve Öklid ile kosinüs arasındaki farkı ve uygulamalarını öğrenmek için blogu okuyun.
11. Temizleme
Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:
- Google Cloud Console'da Kaynakları yönetin sayfasına gidin.
- Proje listesinde, silmek istediğiniz projeyi seçin ve ardından Sil'i tıklayın.
- İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
- Projenizi saklamak istiyorsanız yukarıdaki adımları atlayıp Cloud Functions'e gidin ve işlev listesinden silmek istediğiniz işlevi işaretleyip Sil'i tıklayarak Cloud Functions işlevini silin.
12. Tebrikler
Tebrikler! Gemini 1.0 Pro ve Function Calling'i kullanarak birkaç MDM etkinliğini basitleştirilmiş ancak güçlü, belirlenebilir ve güvenilir üretken yapay zeka özelliklerine dönüştürmenin gücünü gösterdiniz. Bu bilgileri öğrendikten sonra, aynı kullanım alanını veya diğer MDM işlevlerini uygulamanın diğer yollarını belirleyebilirsiniz. Doğrulayabileceğiniz veri kümeleri, doldurabileceğiniz bilgi boşlukları veya üretken yapay zeka yanıtlarınıza yerleştirilmiş yapılandırılmış çağrılarla otomatikleştirilebilecek görevler var mı? Daha ayrıntılı bilgi için Vertex AI, BigQuery Remote Functions, Cloud Functions, Embeddings ve Vector Search belgelerine bakın. Bu projenin GitHub deposunu burada bulabilirsiniz. Bu bilgilerden yararlanarak neler oluşturduğunuzu bizimle paylaşın.