AlloyDB, Vektör Arama ve diğer özelliklerle Patent Arama Uygulaması oluşturma Vertex AI

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 etmekten kaçınmak için kritik bir araçtır.

Patent araştırması geniş kapsamlı ve karmaşık bir konudur. Alakalı yenilikleri bulmak için sayısız teknik özeti incelemek göz korkutucu bir iştir. Anahtar kelimeye dayalı geleneksel aramalar genellikle yanlış ve zaman alıcıdır. Özetler uzun ve teknik olduğundan temel fikrin hızlı bir şekilde anlaşılmasını zorlaştırıyor. Bu durum, araştırmacıların önemli patentleri kaçırmasına veya alakasız sonuçlarla zaman kaybetmesine neden olabilir.

Bu devrimin sırrı, Vektör Arama'da yatıyor. Vektör araması, basit anahtar kelime eşleştirmesine güvenmek yerine metni sayısal temsillere (yerleştirmeler) dönüştürür. Bu sayede, yalnızca kullanılan kelimelere değil, sorgunun anlamına göre arama yapabiliriz. Bu, edebiyat aramaları dünyasında ezber bozan bir gelişmedir. Belgede tam ifade kullanılmasa bile "giyilebilir nabız monitörü" için bir patent bulduğunuzu düşünün.

Hedef

Bu kod laboratuvarında, AlloyDB, pgvector uzantısı ve yerinde Gemini 1.5 Pro, Yerleşim ve Vektör Arama'dan yararlanarak patent arama sürecini daha hızlı, daha sezgisel ve inanılmaz derecede hassas hale getirmeye çalışacağız.

Ne oluşturacaksınız?

Bu laboratuvarda şunları yapacaksınız:

  1. AlloyDB örneği oluşturma ve Patents Public Dataset verilerini yükleme
  2. AlloyDB'de pgvector ve üretken yapay zeka model uzantılarını etkinleştirme
  3. Analizlerden yerleştirilmiş öğeler oluşturma
  4. Kullanıcı arama metni için gerçek zamanlı kosinüs benzerlik araması yapma
  5. Çözümü sunucusuz Cloud Functions'a dağıtma

Aşağıdaki şema, veri akışını ve uygulamayla ilgili adımları gösterir.

8b73c40a0d12e194.png

 High level diagram representing the flow of the Patent Search Application with AlloyDB

Şartlar

  • Chrome veya Firefox gibi bir tarayıcı
  • Faturalandırmanın etkin olduğu bir Google Cloud projesi.

2. Başlamadan önce

Proje oluşturma

  1. Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
  2. Cloud projenizde faturalandırmanın etkinleştirildiğinden emin olun. Projede faturalandırmanın etkin olup olmadığını nasıl kontrol edeceğinizi öğrenin .
  3. 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'i etkinleştir düğmesi resmi

  1. 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
  1. 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
  1. Projeniz ayarlanmadıysa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
  1. Gerekli API'leri etkinleştirin. Cloud Shell terminalinde gcloud komutunu 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 komutunun alternatifi, her ürünü arayarak veya bu bağlantıyı kullanarak konsoldan geçmektir.

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 nesnesi oluşturma

"patent-cluster" küme kimliği, "alloydb" şifresi, PostgreSQL 15 uyumlu ve bölge "us-central1", 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ı ROLÜ verme

Google Cloud IAM konsolunda, AlloyDB hizmet hesabına ("hizmet-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com" şeklinde 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"

Yerleşimleri depolamak için tabloya bir Vektör sütunu eklemek üzere tabloyu değiştirin

abstract_embeddings alanını yeni oluşturduğumuz tabloya 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(768);

4. Patent verilerini veritabanına yükleme

BigQuery'deki Google Patentler Herkese Açık Veri Kümeleri veri kümemiz olarak 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.

  1. Google Cloud Console'da AlloyDB sayfasını açın.
  2. Yeni oluşturduğunuz kümeyi seçin ve örneği tıklayın.
  3. AlloyDB gezinme menüsünde AlloyDB Studio'yu tıklayın. Kimlik bilgilerinizle oturum açın.
  4. Sağ taraftaki Yeni sekme simgesini tıklayarak yeni bir sekme açın.
  5. Yukarıda belirtilen insert_into_patents_data.sql komut dosyasından insert sorgu ifadesini düzenleyiciye kopyalayın. Bu kullanım alanının hızlı bir demosu için 50-100 insert ifadesi kopyalayabilirsiniz.
  6. Ç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( 'textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');

Bu işlem, sorgudaki örnek metin için kayan nokta dizisi gibi görünen embedding vektörünü döndürür. Şu şekilde görünür:

25a1d7ef0e49e91e.png

abstract_embeddings vektör 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( 'textembedding-gecko@003', abstract);

6. Vektör araması yapma

Tablo, veriler ve yerleştirmeler hazır olduğuna göre kullanıcı arama metni için gerçek zamanlı vektör araması gerçekleştirelim. Bunu aşağıdaki sorguyu çalıştırarak test edebilirsiniz:

SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('textembedding-gecko@003', 'A new Natural Language Processing related Machine Learning Model')::vector LIMIT 10;

Bu sorguda,

  1. Kullanıcı arama metni: "Doğal Dil İşleme ile ilgili yeni bir makine öğrenimi modeli".
  2. Metni, embedding() yönteminde textembedding-gecko@003 modelini kullanarak yerleştirmelere dönüştürüyoruz.
  3. "<=>", KOSİNÜS BENZERLİĞİ mesafe yönteminin kullanıldığını gösterir.
  4. 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.
  5. LIMIT 10, arama metnine en yakın 10 eşleşmeyi seçtiğimizi gösterir.

Sonuç aşağıda verilmiştir:

8e77af965fc787ae.png

Sonuçlarınızda görebileceğiniz gibi, eşleşmeler arama metnine oldukça yakın.

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:

  1. 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ırması etkin olan mevcut Google Cloud projenizi seçin ve Gemini'de de aynı projede oturum açtığınızdan emin olun (durum çubuğunun sağ köşesinde).
  2. Cloud Code simgesini tıklayın ve Cloud Code iletişim kutusunun görünmesini bekleyin. Yeni Uygulama'yı seçin ve Yeni Uygulama Oluştur pop-up'ında Bulut İşlevleri uygulamasını seçin:

a800ee1eb6cb8a5b.png

Yeni Uygulama Oluştur pop-up'ının 2/2 sayfasında Java: Merhaba Dünya'yı seçin ve projenizin adını tercih ettiğiniz konumda "alloydb-pgvector" olarak girin ve Tamam'ı tıklayın:

5b09446ecf7d4f8d.png

  1. Ortaya çıkan proje yapısında pom.xml dosyasını arayın ve bu dosyayı, depo dosyasının içeriğiyle değiştirin. Bu bağımlılıkların yanı sıra birkaç bağımlılığa daha sahip olmalıdır:

2b3a3cdd75a57711.png

  1. 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 giriş parametresi olarak arama metnini 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('textembedding-gecko@003', '" + 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);
}
  1. 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 konsolunda görebilirsiniz. Yeni oluşturulan işlevi arayıp açın, yapılandırmaları düzenleyin ve aşağıdakileri değiştirin:

  1. Çalışma zamanı, derleme, bağlantılar ve güvenlik ayarlarına gidin
  2. Zaman aşım süresini 180 saniyeye yükseltin
  3. BAĞLANTILAR sekmesine gidin:

4e83ec8a339cda08.png

  1. Giriş ayarlarının altında "Tüm trafiğe izin ver" seçeneğinin seçili olduğundan emin olun.
  2. Çıkış ayarları bölümünde Ağ açılır menüsünü tıklayın ve "Yeni VPC Bağlantısı Ekle" seçeneğini belirleyin. Açılan iletişim kutusunda gördüğünüz talimatları uygulayın:

8126ec78c343f199.png

  1. 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ığı veya kullanılabilir benzer bir değerle Özel IP Aralığı olarak ayarlayın.
  2. YÜKSEK ÇÖZÜNÜRLÜKLÜ AYARLARI GÖSTER'i genişletin ve yapılandırmayı tam olarak aşağıdaki şekilde ayarladığınızdan emin olun:

7baf980463a86a5c.png

  1. OLUŞTUR'u tıklayın. Bu bağlayıcı artık çıkış ayarlarında listelenir.
  2. Yeni oluşturulan bağlayıcıyı seçin
  3. Tüm trafiğin bu VPC bağlayıcısı üzerinden yönlendirilmesini tercih edin.

8. Uygulamayı test etme

Dağıtıldıktan sonra uç noktayı aşağıdaki 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 Terminal'de test edebilirsiniz:

gcloud functions call patent-search --region=us-central1 --gen2 --data '{"search": "A new Natural Language Processing related Machine Learning Model"}'

Sonuç:

da3dcfac7d024031.png

Ayrıca Cloud Functions listesinden de test edebilirsiniz. Dağıtılan işlevi seçin ve "TEST" sekmesine gidin. İstek JSON'u için Tetikleyici etkinliği yapılandır bölümü metin kutusuna şunları girin:

{"search": "A new Natural Language Processing related Machine Learning Model"}

FONKSİYONU TEST ET düğmesini tıklayın. Sonuç sayfanın sağ tarafında gösterilir:

e21f806d661996ff.png

İşte bu kadar. AlloyDB verilerinde Embeddings modelini kullanarak benzerlik vektörü araması 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:

  1. Google Cloud Console'da Yönet
  2. kaynaklar sayfasına gidin.
  3. Proje listesinde, silmek istediğiniz projeyi seçin ve ardından Sil'i tıklayın.
  4. İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.

10. Tebrikler

Tebrikler! AlloyDB, pgvector ve Vector Search'i kullanarak başarıyla benzerlik araması yaptınız. AlloyDB, Vertex AI ve Vector Search'in özelliklerini birleştirerek, literatür aramalarını erişilebilir, verimli ve gerçekten anlamlı hale getirme konusunda dev bir adım attık.