Bu codelab hakkında
1. Genel Bakış
Patent araştırması, farklı sektörlerde rekabet ortamını anlamak, potansiyel lisanslama veya satın alma fırsatlarını belirlemek ve mevcut patentleri ihlal etmemek için kritik bir araçtır.
Patent araştırması kapsamlı ve karmaşıktır. İlgili yenilikleri bulmak için sayısız teknik özeti incelemek zorlu bir iştir. Geleneksel anahtar kelime tabanlı aramalar genellikle yanlış ve zaman alıcıdır. Özetler uzun ve teknik olduğundan temel fikri hızlıca anlamak zorlaşıyor. Bu durum, araştırmacıların önemli patentleri gözden kaçırmasına veya alakasız sonuçlara zaman harcamasına neden olabilir.
Bu devrimin sırrı, vektör aramasında yatıyor. Vektör araması, basit anahtar kelime eşleşmesine güvenmek yerine metni sayısal gösterimlere (yerleştirmeler) dönüştürür. Bu sayede, yalnızca kullanılan kelimelere değil, sorgunun anlamına göre de arama yapabiliriz. Bu özellik, edebiyat aramaları dünyasında ezber bozuyor. Dokümanda tam olarak bu ifade kullanılmamış olsa bile "giyilebilir nabız monitörü" ile ilgili bir patent bulduğunuzu düşünün.
Hedef
Bu codelab'de, AlloyDB, pgvector uzantısı ve yerinde Gemini 1.5 Pro, Embeddings ve Vector Search'ü kullanarak patent arama sürecini daha hızlı, daha sezgisel ve inanılmaz derecede hassas hale getirmek için çalışacağız.
Ne oluşturacaksınız?
Bu laboratuvar kapsamında şunları yapacaksınız:
- AlloyDB örneği oluşturma ve Patents Public Dataset verilerini yükleme
- AlloyDB'de pgvector ve üretken yapay zeka modeli uzantılarını etkinleştirme
- Analizlerden yerleştirilmiş öğeler oluşturma
- Kullanıcı arama metni için gerçek zamanlı kosinüs benzerliği araması yapma
- Çözümü sunucusuz Cloud Functions'ta dağıtma
Aşağıdaki şemada, verilerin akışı ve uygulamayla ilgili adımlar gösterilmektedir.
High level diagram representing the flow of the Patent Search Application with AlloyDB
Şartlar
2. Başlamadan önce
Proje oluşturma
- Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
- Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Faturalandırmanın bir projede etkin olup olmadığını kontrol etmeyi öğrenin .
- bq'nun önceden yüklendiği, Google Cloud'da çalışan 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 doğrulamak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud config list project
- Projeniz ayarlanmamışsa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
- Gerekli API'leri etkinleştirin. Cloud Shell terminalinde bir gcloud komutu kullanabilirsiniz:
gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com
Gcloud komutuna alternatif olarak, her ürünü arayarak veya bu bağlantıyı kullanarak konsolu kullanabilirsiniz.
gcloud komutları ve kullanımı için belgelere bakın.
3. AlloyDB veritabanınızı hazırlama
Patent veri kümesinin yükleneceği bir AlloyDB kümesi, örneği ve tablosu oluşturalım.
AlloyDB nesneleri oluşturma
Küme kimliği "patent-cluster
", şifresi "alloydb
", PostgreSQL 15 ile uyumlu ve bölgesi "us-central1
" olan, ağ iletişimi "default
" olarak ayarlanmış bir küme ve örnek oluşturun. Örnek kimliğini "patent-instance
" olarak ayarlayın. KÜME OLUŞTUR'u tıklayın. Küme oluşturmayla ilgili ayrıntıları şu bağlantıda bulabilirsiniz: https://cloud.google.com/alloydb/docs/cluster-create.
Tablo oluşturma
AlloyDB Studio'da aşağıdaki DDL ifadesini kullanarak tablo oluşturabilirsiniz:
CREATE TABLE patents_data ( id VARCHAR(25), type VARCHAR(25), number VARCHAR(20), country VARCHAR(2), date VARCHAR(20), abstract VARCHAR(300000), title VARCHAR(100000), kind VARCHAR(5), num_claims BIGINT, filename VARCHAR(100), withdrawn BIGINT) ;
Uzantıları etkinleştirme
Patent Arama Uygulaması'nı oluşturmak için pgvector ve google_ml_integration uzantılarını kullanacağız. pgvector uzantısı, vektör yerleştirmelerini depolamanıza ve aramanıza olanak tanır. google_ml_integration uzantısı, SQL'de tahmin almak için Vertex AI tahmin uç noktalarına erişmek üzere kullandığınız işlevleri sağlar. Aşağıdaki DDL'leri çalıştırarak bu uzantıları etkinleştirin:
CREATE EXTENSION vector;
CREATE EXTENSION google_ml_integration;
İzin Ver
"embedding" işlevinde yürütme izni vermek için aşağıdaki ifadeyi çalıştırın:
GRANT EXECUTE ON FUNCTION embedding TO postgres;
AlloyDB hizmet hesabına Vertex AI Kullanıcısı ROLÜ'nü verme
Google Cloud IAM Console'da AlloyDB hizmet hesabına (service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com gibi görünür) "Vertex AI Kullanıcısı" rolüne erişim izni verin. PROJECT_NUMBER, proje numaranızı içerir.
Alternatif olarak, gcloud komutunu kullanarak da erişim izni verebilirsiniz:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
Tabloyu, yerleştirmeleri depolamak için bir Vector sütunu ekleyecek şekilde değiştirin.
Az önce oluşturduğumuz tabloya abstract_embeddings alanını eklemek için aşağıdaki DDL'yi çalıştırın. Bu sütun, metnin vektör değerlerinin depolanmasına olanak tanır:
ALTER TABLE patents_data ADD column abstract_embeddings vector(3072);
4. Veritabanına patent verileri yükleme
Veri kümemiz olarak BigQuery'deki Google Patents Public Datasets (Google Patentleri Herkese Açık Veri Kümeleri) kullanılacaktır. Sorgularımızı çalıştırmak için AlloyDB Studio'yu kullanacağız. alloydb-pgvector deposu, patent verilerini yüklemek için çalıştıracağımız insert_into_patents_data.sql
komut dosyasını içerir.
- Google Cloud Console'da AlloyDB sayfasını açın.
- Yeni oluşturduğunuz kümeyi seçin ve örneği tıklayın.
- AlloyDB gezinme menüsünde AlloyDB Studio'yu tıklayın. Kimlik bilgilerinizle oturum açın.
- Sağdaki Yeni sekme simgesini tıklayarak yeni bir sekme açın.
- Yukarıda belirtilen
insert_into_patents_data.sql
komut dosyasındaninsert
sorgu ifadesini kopyalayıp düzenleyiciye yapıştırın. Bu kullanım alanının hızlı bir demosunu yapmak için 50-100 ekleme ifadesini kopyalayabilirsiniz. - Çalıştır'ı tıklayın. Sorgunuzun sonuçları Sonuçlar tablosunda görünür.
5. Patent verileri için gömmeler oluşturma
Öncelikle aşağıdaki örnek sorguyu çalıştırarak yerleştirme işlevini test edelim:
SELECT embedding( 'gemini-embedding-001', 'AlloyDB is a managed, cloud-hosted SQL database service.');
Bu işlem, sorgudaki örnek metin için kayan nokta dizisi gibi görünen yerleştirme vektörünü döndürmelidir. Şöyle görünür:
abstract_embeddings adlı Vector alanını güncelleme
Tablodaki patent özetlerini ilgili yerleştirmelerle güncellemek için aşağıdaki DML'yi çalıştırın:
UPDATE patents_data set abstract_embeddings = embedding( 'gemini-embedding-001', abstract);
6. Vektör araması yapma
Tablo, veriler ve yerleştirmeler hazır olduğuna göre artık kullanıcı arama metni için gerçek zamanlı vektör araması yapabiliriz. Aşağıdaki sorguyu çalıştırarak bunu test edebilirsiniz:
SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('gemini-embedding-001', 'A new Natural Language Processing related Machine Learning Model')::vector LIMIT 10;
Bu sorguda,
- Kullanıcı arama metni: "Doğal Dil İşleme ile ilgili yeni bir Makine Öğrenimi Modeli".
- Bunu, model: gemini-embedding-001 kullanarak embedding() yönteminde gömmelere dönüştürüyoruz.
- "<=>", COSINE SIMILARITY uzaklık yönteminin kullanımını gösterir.
- Yerleştirme yönteminin sonucunu, veritabanında depolanan vektörlerle uyumlu hale getirmek için vektör türüne dönüştürüyoruz.
- LIMIT 10, arama metninin en yakın 10 eşleşmesinin seçildiğini gösterir.
Sonuç aşağıda verilmiştir:
Sonuçlarınızda da görebileceğiniz gibi, eşleşmeler arama metnine oldukça yakındır.
7. Uygulamayı web'e taşıma
Bu uygulamayı web'e taşımaya hazır mısınız? Aşağıdaki adımları uygulayın:
- Cloud Shell Düzenleyici'ye gidin ve düzenleyicinin sol alt köşesindeki (durum çubuğu) "Cloud Code — Sign in" (Cloud Code — Oturum aç) simgesini tıklayın. Faturalandırmanın etkin olduğu mevcut Google Cloud projenizi seçin ve durum çubuğunun sağ köşesinden Gemini'da da aynı projede oturum açtığınızdan emin olun.
- Cloud Code simgesini tıklayın ve Cloud Code iletişim kutusunun açılmasını bekleyin. Yeni Uygulama'yı seçin ve Yeni Uygulama Oluştur pop-up penceresinde Cloud Functions uygulamasını seçin:
Yeni Uygulama Oluşturma pop-up'ının 2/2 sayfasında Java: Hello World'ü seçin, projenizin adını tercih ettiğiniz konumda "alloydb-pgvector" olarak girin ve Tamam'ı tıklayın:
- Ortaya çıkan proje yapısında pom.xml dosyasını arayın ve depo dosyasının içeriğiyle değiştirin. Birkaç bağımlılığın yanı sıra aşağıdaki bağımlılıkları da içermelidir:
- HelloWorld.java dosyasını repo dosyasının içeriğiyle değiştirin.
Aşağıdaki değerleri gerçek değerlerinizle değiştirmeniz gerektiğini unutmayın:
String ALLOYDB_DB = "postgres";
String ALLOYDB_USER = "postgres";
String ALLOYDB_PASS = "*****";
String ALLOYDB_INSTANCE_NAME = "projects/<<YOUR_PROJECT_ID>>/locations/us-central1/clusters/<<YOUR_CLUSTER>>/instances/<<YOUR_INSTANCE>>";
//Replace YOUR_PROJECT_ID, YOUR_CLUSTER, YOUR_INSTANCE with your actual values
İşlevin, "search" anahtarıyla arama metnini giriş parametresi olarak beklediğini ve bu uygulamada, veritabanından yalnızca en yakın eşleşmeyi döndürdüğümüzü unutmayın:
// Get the request body as a JSON object.
JsonObject requestJson = new Gson().fromJson(request.getReader(), JsonObject.class);
String searchText = requestJson.get("search").getAsString();
//Sample searchText: "A new Natural Language Processing related Machine Learning Model";
BufferedWriter writer = response.getWriter();
String result = "";
HikariDataSource dataSource = AlloyDbJdbcConnector();
try (Connection connection = dataSource.getConnection()) {
//Retrieve Vector Search by text (converted to embeddings) using "Cosine Similarity" method
try (PreparedStatement statement = connection.prepareStatement("SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('tgemini-embedding-001', '" + searchText + "' )::vector LIMIT 1")) {
ResultSet resultSet = statement.executeQuery();
resultSet.next();
String lit = resultSet.getString("literature");
result = result + lit + "\n";
System.out.println("Matching Literature: " + lit);
}
writer.write("Here is the closest match: " + result);
}
- Yeni oluşturduğunuz Cloud Functions işlevini dağıtmak için Cloud Shell terminalinde aşağıdaki komutu çalıştırın. Öncelikle aşağıdaki komutu kullanarak ilgili proje klasörüne gitmeyi unutmayın:
cd alloydb-pgvector
Ardından şu komutu çalıştırın:
gcloud functions deploy patent-search --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http
ÖNEMLİ ADIM:
Dağıtıma başladıktan sonra işlevleri Google Cloud Run Functions Console'da görebilirsiniz. Yeni oluşturulan işlevi arayıp açın, yapılandırmaları düzenleyin ve aşağıdakileri değiştirin:
- Çalışma zamanı, derleme, bağlantılar ve güvenlik ayarlarına gitme
- Zaman aşımını 180 saniyeye çıkarın.
- BAĞLANTILAR sekmesine gidin:
- Giriş ayarları bölümünde "Tüm trafiğe izin ver" seçeneğinin belirlendiğinden emin olun.
- Çıkış ayarları bölümünde, Ağ açılır listesini tıklayın ve "Yeni VPC bağlayıcı ekle" seçeneğini belirleyin. Ardından, açılan iletişim kutusunda gördüğünüz talimatları uygulayın:
- VPC bağlayıcısı için bir ad girin ve bölgenin örneğinizle aynı olduğundan emin olun. Ağ değerini varsayılan olarak bırakın ve alt ağı, 10.8.0.0 IP aralığına sahip özel IP aralığı olarak ayarlayın veya benzer bir IP aralığı kullanın.
- ÖLÇEKLENDİRME AYARLARINI GÖSTER'i genişletin ve yapılandırmanın tam olarak aşağıdaki gibi ayarlandığından emin olun:
- OLUŞTUR'u tıkladığınızda bu bağlayıcı artık çıkış ayarlarında listelenir.
- Yeni oluşturulan bağlayıcıyı seçin
- Tüm trafiğin bu VPC bağlayıcısı üzerinden yönlendirilmesini tercih edin.
8. Uygulamayı test etme
Dağıtım tamamlandıktan sonra uç noktayı şu biçimde görürsünüz:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/patent-search
Aşağıdaki komutu çalıştırarak Cloud Shell Terminali'nden test edebilirsiniz:
gcloud functions call patent-search --region=us-central1 --gen2 --data '{"search": "A new Natural Language Processing related Machine Learning Model"}'
Sonuç:
Ayrıca Cloud Functions listesinden de test edebilirsiniz. Dağıtılan işlevi seçin ve "TESTING" (TEST) sekmesine gidin. İstek JSON'u için Tetikleme etkinliğini yapılandırın bölümündeki metin kutusuna aşağıdakileri girin:
{"search": "A new Natural Language Processing related Machine Learning Model"}
TEST THE FUNCTION (İşlevi Test Et) düğmesini tıkladığınızda sonucu sayfanın sağ tarafında görebilirsiniz:
İşte bu kadar. AlloyDB verilerinde Embeddings modelini kullanarak Similarity Vector Search yapmak bu kadar basittir.
9. Temizleme
Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:
10. Tebrikler
Tebrikler! AlloyDB, pgvector ve Vector Search'ü kullanarak benzerlik araması yapmayı başarıyla tamamladınız. AlloyDB, Vertex AI ve Vector Search'ün özelliklerini bir araya getirerek edebiyat aramalarını erişilebilir, verimli ve gerçekten anlam odaklı hale getirme konusunda büyük bir adım attık.