Spanner, Vektör Arama ile Patent Arama Uygulaması derleyin. Gemini 1.0 Pro!

1. Genel Bakış

Patent araştırması, farklı sektörlerde rekabet ortamını anlamak, potansiyel lisans ya da satın alma fırsatlarını belirlemek ve mevcut patentlerin haklarını ihlal etmekten kaçınmak için kritik bir araçtır.

Patent araştırması çok kapsamlı ve karmaşıktır. Alakalı yenilikleri bulmak için sayısız teknik soyut metni incelemek göz korkutucu bir iştir. Geleneksel anahtar kelime tabanlı aramalar genellikle hatalıdır ve zaman alır. Özetler uzun ve teknik olduğundan ana fikrin hızlıca anlaşılmasını zorlaştırır. Bu durum, araştırmacıların anahtar patentleri kaybetmesine veya alakasız sonuçlarla zaman kaybetmesine yol açabilir.

Hedef

Bu codelab'de, Spanner ve yerleşik Gemini 1.0 Pro, Yerleştirmeler ve Vektör Arama'dan yararlanarak patent arama sürecini daha hızlı, sezgisel ve son derece hassas hale getirmek için çalışacağız.

Neler oluşturacaksınız?

Bu laboratuvar kapsamında:

  1. Spanner örneği oluşturma
  2. Google Patentleri Herkese Açık Veri Kümelerini Yükleme
  3. Gemini 1.0 Pro modeliyle metin yerleştirilmiş öğeler için uzak model oluşturma
  4. Yüklenen veri kümesinden üretken analizler oluşturun
  5. Analizlerden yerleştirmeler oluşturma
  6. Veri kümesiyle ilgili benzerlik arama sorguları sorun

Aşağıdaki şemada, veri akışı ve uygulamadaki adımlar gösterilmiştir.

14cfdde5e24258a.png

Ş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 projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Bir 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ş olarak gelen 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üğme 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 ayarlandığından emin olmak için aşağıdaki komutu kullanın:
gcloud auth list
  1. gcloud komutunun projenizi bildiğini 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. Vertex AI ve Spanner API'lerini konsolda arayarak etkinleştirildiğinden emin olun. Alternatif olarak, Cloud Shell terminalinde aşağıdaki komutu da kullanabilirsiniz:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>

Diğer bir alternatif de bu bağlantıyı kullanmaktır.

gcloud komutları ve kullanımı için belgelere bakın.

3. Spanner veritabanınızı hazırlama

Patent veri kümesinin yükleneceği bir Spanner örneği, veritabanı ve tablo oluşturalım.

Spanner örneği oluşturma

  1. spanner-vertex adlı bir Spanner örneği oluşturun.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1

Veritabanı oluşturun

  1. Google Cloud konsolunda Spanner sayfasını açın.
  2. Listeden spanner-vertex örneğini seçin.
  3. Veritabanları altında, Veritabanı Oluştur'u tıklayın.
  4. Veritabanı adını patentler olarak ayarlayın.
  5. Veritabanını oluşturmak için Create'i (Oluştur) tıklayın.

Tablo oluşturma

  1. Google Cloud konsolunda Spanner sayfasını açın.
  2. Listeden spanner-vertex örneğini seçin.
  3. patents veritabanını seçin.
  4. Tables sekmesinin altında Create Table'ı (Tablo Oluştur) tıklayın. Spanner Studio sayfası açılır.
  5. Yeni SQL düzenleyicisi sekmesini tıklayarak yeni bir sekme açın.
  6. Aşağıdaki sorguyu çalıştırın:
CREATE TABLE patents_data (
   id string(25), type string(25), number string(20), country string(2), date string(20), abstract string(300000), title string(100000),kind string(5), num_claims numeric, filename string(100), withdrawn numeric, 
) PRIMARY KEY (id);

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 Spanner Studio'yu kullanacağız. spanner-gemini-search 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 konsolunda Spanner sayfasını açın.
  2. Listeden spanner-vertex örneğini seçin.
  3. patents veritabanını seçin.
  4. Gezinme menüsünde Spanner Studio'yu tıklayın. Explorer bölmesinde veritabanınızdaki nesnelerin listesi gösterilir.
  5. Yeni SQL düzenleyicisi sekmesini tıklayarak yeni bir sekme açın.
  6. Düzenleyicideki insert_into_patents_data.sql komut dosyasından insert sorgu ifadesini kopyalayın. Bu kullanım alanının hızlı bir demosu için 50 ila 100 adet “ek” ifadesi kopyalayabilirsiniz.
  7. Çalıştır'ı tıklayın. Sorgunuzun sonuçları, Sonuçlar tablosunda görünür.

5. Gemini 1.0 Pro için Uzaktan Model Oluşturma

Patent verileri veritabanına yüklendikten sonra özetlenmiş bir başlık ve anahtar kelime grubu oluşturmak için Gemini 1.0 Pro Vertex AI modelini kullanan bir uzak model oluşturacağız.

Spanner Studio Editor'da aşağıdaki DDL komutunu çalıştırın:

  1. Gezinme menüsünde Spanner Studio'yu tıklayın. Explorer bölmesinde veritabanınızdaki nesnelerin listesi gösterilir.
  2. Yeni SQL düzenleyicisi sekmesini tıklayarak yeni bir sekme açın.
  3. Aşağıdaki sorguyu çalıştırın:
CREATE MODEL gemini_pro_model INPUT(
prompt STRING(MAX),
) OUTPUT(
content STRING(MAX),
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/gemini-pro',
default_batch_size = 1
);
  1. Çalıştır'ı tıklayın. Sorgunuzun sonuçları, Sonuçlar tablosunda görünür.

6. Metin Yerleştirmeler için Uzak Model Oluşturma

Önceki adımın sonucu, bir başlık ve anahtar kelimelerden oluşan birleştirilmiş bir özet içerir. Bu yanıtı, bir sorgu çalıştırdığımızda uygun eşleşmeler oluşturmamıza yardımcı olacak yerleştirmelere dönüştürürüz. Vertex AI'ın sunduğu Text Embedding Gecko 003 model, Spanner'da uzaktan kullanılacaktır.

  1. Gezinme menüsünde Spanner Studio'yu tıklayın. Explorer bölmesinde veritabanınızdaki nesnelerin listesi gösterilir.
  2. Yeni SQL düzenleyicisi sekmesini tıklayarak yeni bir sekme açın.
  3. Aşağıdaki sorguyu çalıştırın:
CREATE MODEL text_embeddings INPUT(content STRING(MAX))
OUTPUT(
 embeddings
   STRUCT<
     statistics STRUCT<truncated BOOL, token_count FLOAT64>,
     values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
 endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/textembedding-gecko@003');
  1. Çalıştır'ı tıklayın. Sorgunuzun sonuçları, Sonuçlar tablosunda görünür.

7. Patent Özetlerinden Üretken Analizler Oluşturma

Daha önce oluşturduğumuz Gemini 1.5 Pro modelini kullanarak oluşturacağımız üretken analizleri depolamak için bir patents_data_gemini tablosu oluşturacağız.

Tabloyu oluşturma

  1. Gezinme menüsünde Spanner Studio'yu tıklayın. Explorer bölmesinde veritabanınızdaki nesnelerin listesi gösterilir.
  2. Yeni SQL düzenleyicisi sekmesini tıklayarak yeni bir sekme açın.
  3. Aşağıdaki sorguyu çalıştırın:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
  1. Çalıştır'ı tıklayın. Sorgunuzun sonuçları, Sonuçlar tablosunda görünür.

Analiz oluşturma

Tabloyu üretken analizlerle doldurmak için toplu yazma veya mutasyon yöntemini kullanan bir uygulama kullanmanız önerilir. Bu codelab'de, tabloyu doldurmak için aşağıdaki DDL sorgusunu en fazla 4 kez çalıştıracağız.

INSERT INTO patents_data_gemini (id, gemini_response)
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b where id not in (select id from patents_data_gemini) limit 50
));

Not: Bu adımda Kota Aşıldı hatası alıyorsanız (boş marjlı serbest kredilerde bu mümkündür) ekleme adımını atlamayı deneyin ve aşağıdaki geçici çözüm bölümünde yalnızca seçili sorguyu çalıştırın.

Geçici çözüm bölümü:

SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))

Analizleri inceleme

Tabloda, sorgudaki 'Identify the areas of work or keywords in this abstract', istemi için oluşturulan analizler yer alır.

Not: INSERT DDL yerine yukarıdaki geçici çözüm bölümü sorgusunu çalıştırdıysanız bu bölümü atlayıp bu sayfadaki son SELECT sorgusunu çalıştırın.

Analizlerin sonuçlarını doğrulamak için aşağıdaki sorguyu çalıştıralım:

select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;

Aşağıdaki sonuçlar görüldü:

6041fab164aaab93.png

Not: Geçici çözüm bölümü sorgusunu çalıştırdıysanız yukarıdaki seçim sorgusundaki tablo adını, geçici çözüm bölümündeki sorguyla değiştirin. Bunun yerine aşağıdaki komutu çalıştırın:

select title, abstract, gemini_response from patents_data a inner join (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))) b
on a.id = b.id;

Sonuç, yukarıdaki sonuç ekran görüntüsündekiyle aynı olmalıdır.

8. Oluşturulan Analizler İçin Yerleştirme Oluşturma

Tablomuzdaki analizleri doldurduktan sonra artık bu analizleri kullanarak yerleştirmeler oluşturabiliriz. Bu yerleştirmeler, tam anahtar kelime eşlemelerine güvenmememize, ancak kavramsal benzerliklere dayalı sonuçlar elde etmemize yardımcı olur.

Not: Önceki adımda geçici çözüm bölümü sorgusunu çalıştırdıysanız bu adımı atlayıp bu adımdaki geçici çözüm bölümü sorgusuna da geçebilirsiniz.

Yerleştirme oluşturmak için aşağıdaki sorguyu çalıştırın:

  1. Gezinme menüsünde Spanner Studio'yu tıklayın. Explorer bölmesinde veritabanınızdaki nesnelerin listesi gösterilir.
  2. Yeni SQL düzenleyicisi sekmesini tıklayarak yeni bir sekme açın.
  3. patents_data_embeddings tablosunu oluşturmak için aşağıdaki sorguyu çalıştırın.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
  1. Çalıştır'ı tıklayın. Sorgunuzun sonuçları, Sonuçlar tablosunda görünür.
  2. Yerleştirme oluşturmak için aşağıdaki sorguyu çalıştırın.
INSERT INTO patents_data_embeddings (id, patents_embeddings)
SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM patents_data_gemini));
  1. Çalıştır'ı tıklayın. Sorgunuzun sonuçları, Sonuçlar tablosunda görünür.

Sonuçları gözlemle

Tablo, başlık ve soyut metin için oluşturulan yerleştirmeleri içerir.

Sonuçları doğrulamak için aşağıdaki sorguyu çalıştıralım:

select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;

Aşağıdaki sonuçlar görüldü:

a1e968bac4ab1cb.png

Geçici Çözüm Bölümü:

Diğer adımlardaki geçici çözüm bölümünü uyguladıysanız bu sorguyu kullanın:

select title, abstract, b.patents_embeddings from patents_data a inner join 
(SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
)))))) b
on a.id = b.id;

Bu, yukarıdaki ekran görüntüsünde gösterilenle aynı sonuçları vermelidir.

9. Vektör araması için hazırlanma

Artık metin yerleştirilmiş öğeler oluşturduğumuza göre, web uygulamamızı benzerlik vektörü aramaları yapmaya hazır hale getirebiliriz. Bu codelab'de, K-Yakındaki Komşular Benzerlik Araması özelliğine dayalı arama sonuçları sunma mantığını içeren bir web uygulaması oluşturacağız. Arama sonuçlarının nasıl göründüğünü görselleştirmek için bu hazırlanan veri kümesini bir arama uygulamasıyla kullanabilirsiniz.

Codelab'imiz için bir istem arayan, bağlama göre sonuçlar oluşturan ve sonuçları 10 girişle sınırlayan örnek bir sorgu çalıştıracağız.

Aşağıdaki sorguyu çalıştırın:

  1. Gezinme menüsünde Spanner Studio'yu tıklayın. Explorer bölmesinde veritabanınızdaki nesnelerin listesi gösterilir.
  2. Yeni SQL düzenleyicisi sekmesini tıklayarak yeni bir sekme açın.
  3. patents_data_embeddings tablosunu oluşturmak için aşağıdaki sorguyu çalıştırın.
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join patents_data_gemini b on a.id = b.id
inner join patents_data_embeddings c on a.id = c.id
ORDER BY distance
LIMIT 10;
  1. Çalıştır'ı tıklayın. Sorgunuzun sonuçları, Sonuçlar tablosunda görünür.

Not: Geçici çözüm bölümündeki sorguları kullandıysanız, ilk ekleme ifadelerinden birindeki kota hataları nedeniyle, diğer tüm adımları atlayabilir ve Spanner veritabanındaki vektör yerleştirmelerinde en yakın komşu aramasının sonuçlarını gözlemlemek için doğrudan aşağıdaki sorguyu çalıştırabilirsiniz:

SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join (SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b 
)))))) c on a.id = c.id
ORDER BY distance
LIMIT 2;

Sonuçları gözlemle

Önceki sorgu, istemimiz için en yakın 10 eşleşmeyi bulmak amacıyla COSINE_DISTANCE yöntemini kullanır.

Aşağıdaki sonuçlar görüldü:

d26ca8b8238bdf25.png

Oluşturulan sonuçlar, sorgunun parçası olan isteme bağlamsal olarak oldukça yakındır.

10. 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 konsolunda Kaynakları yönetin sayfasına gidin.
  2. Proje listesinden silmek istediğiniz projeyi seçin ve ardından Sil'i tıklayın. Projeyi silmek istemiyorsanız Spanner'da oluşturduğunuz örneği silmeniz yeterlidir.
  3. İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.

11. Tebrikler

Tebrikler! Spanner'ın yerleşik vektör aramasını kullanarak bir benzerlik araması yaptınız. Ayrıca, doğrudan SQL kullanarak üretken yapay zeka işlevi sağlamak için yerleştirme ve geniş kapsamlı dil modeli modelleriyle çalışmanın ne kadar kolay olduğunu gördünüz.

Sırada ne var?

Spanner'ın en yakın komşu (KNN vektör arama) özelliği hakkında daha fazla bilgiyi buradan edinebilirsiniz: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors

Ayrıca, Spanner'ın VertexAI entegrasyonunu kullanarak SQL ile online tahminler gerçekleştirme hakkında daha fazla bilgi edinmek için şu adresi ziyaret edebilirsiniz: https://cloud.google.com/spanner/docs/ml