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 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.

Hedef

Bu codelab'de, Spanner, yerinde Gemini 1.0 Pro, Embeddings ve Vector Search'ü kullanarak 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 laboratuvar kapsamında şunları yapacaksınız:

  1. Spanner örneği oluşturma
  2. Google Patents Herkese Açık Veri Kümeleri'ni yükleme
  3. Gemini 1.0 Pro modeliyle metin yerleştirmeleri için uzak model oluşturma
  4. Yüklenen veri kümesinden üretken analizler oluşturma
  5. Analizlerden yerleştirilmiş öğeler oluşturma
  6. Veri kümesine karşı benzerlik arama sorguları gönderme

Aşağıdaki diyagramda, verilerin akışı ve uygulamayla ilgili adımlar gösterilmektedir.

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ı kontrol etmeyi öğrenin .
  3. 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'i etkinleştir düğmesinin resmi

  1. Cloud Shell'e bağlandıktan sonra aşağıdaki komutu kullanarak kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığı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 ayarlanmamışsa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
  1. Vertex AI ve Spanner API'lerinin etkinleştirildiğinden emin olmak için konsolda bu API'leri arayın. 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 ise 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 tablosu 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 Console'da Spanner sayfasını açın.
  2. Listeden spanner-vertex örneğini seçin.
  3. Veritabanları bölümünde Veritabanı oluştur'u tıklayın.
  4. Veritabanı adını patents olarak ayarlayın.
  5. Veritabanını oluşturmak için Oluştur'u tıklayın.

Tablo oluşturma

  1. Google Cloud Console'da Spanner sayfasını açın.
  2. Listeden spanner-vertex örneğini seçin.
  3. patents veritabanını seçin.
  4. Tablolar sekmesinde Tablo Oluştur'u tıklayın. Spanner Studio sayfası açılır.
  5. Yeni SQL düzenleyici sekmesi'ni 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. 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 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 Console'da 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. Gezgin bölmesinde, veritabanınızdaki nesnelerin listesi gösterilir.
  5. Yeni SQL düzenleyici sekmesi'ni 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 demosunu yapmak için 50-100 ekleme ifadesini 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 Uzak Model Oluşturma

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

Spanner Studio Düzenleyici'de aşağıdaki DDL komutunu çalıştırın:

  1. Gezinme menüsünde Spanner Studio'yu tıklayın. Gezgin bölmesinde, veritabanınızdaki nesnelerin listesi gösterilir.
  2. Yeni SQL düzenleyici sekmesi'ni 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ştirmeleri için uzaktan model oluşturma

Önceki adımın sonucunda, başlık ve anahtar kelimelerden oluşan bir özet yer alır. Bu yanıtı, sorgu çalıştırdığımızda uygun eşleşmeler oluşturmamıza yardımcı olacak yerleştirmelere dönüştüreceğiz. Vertex AI'daki Text Embedding Gecko 003 model işlevini Spanner'dan uzaktan kullanacağız.

  1. Gezinme menüsünde Spanner Studio'yu tıklayın. Gezgin bölmesinde, veritabanınızdaki nesnelerin listesi gösterilir.
  2. Yeni SQL düzenleyici sekmesi'ni 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. Gezgin bölmesinde, veritabanınızdaki nesnelerin listesi gösterilir.
  2. Yeni SQL düzenleyici sekmesi'ni 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 üret

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ırsanız (küçük marjlı ücretsiz kredilerde bu durumla karşılaşılabilir) ekleme adımını atlayıp yalnızca aşağıdaki geçici çözüm bölümündeki seçme sorgusunu çalıştırmayı deneyin.

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ın ve bunun yerine bu sayfadaki son SELECT sorgusunu çalıştırın.

Analiz 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ülür:

6041fab164aaab93.png

Not: Geçici çözüm bölümü sorgusunu çalıştırdıysanız yukarıdaki SELECT sorgusundaki tablo adını geçici çözüm bölümündeki sorguyla değiştirin. Bu nedenle, bunun yerine aşağıdakini çalıştırırsınız:

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 için yerleştirilmiş öğeler oluşturma

Tablomuzdaki analizleri doldurduktan sonra bu analizleri yerleştirmeler oluşturmak için kullanabiliriz. Bu yerleştirmeler, tam anahtar kelime eşlemelerine güvenmememize yardımcı olur ve kavramsal benzerliklere dayalı sonuçlar oluşturmamızı sağlar.

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

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

  1. Gezinme menüsünde Spanner Studio'yu tıklayın. Gezgin bölmesinde, veritabanınızdaki nesnelerin listesi gösterilir.
  2. Yeni SQL düzenleyici sekmesi'ni 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ştirmeler 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özlemleme

Tabloda, başlık ve özetlenmiş metin için oluşturulan yerleştirmeler yer alır.

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ülür:

a1e968bac4ab1cb.png

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

Diğer adımlarda 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 işlem, yukarıdaki ekran görüntüsünde gösterilen sonuçları vermelidir.

9. Vektör aramasına hazırlanma

Metin yerleştirmelerini oluşturduğumuza göre artık web uygulamamızı benzerlik vektörü aramaları yapmaya hazırlayabiliriz. Bu codelab'de, K-En Yakın Komşular benzerlik arama özelliğine dayalı arama sonuçları veren bir web uygulaması oluşturuyoruz. 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'imizde, bir istemi arayan, bağlama dayalı sonuçlar üreten 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. Gezgin bölmesinde, veritabanınızdaki nesnelerin listesi gösterilir.
  2. Yeni SQL düzenleyici sekmesi'ni 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 birinde kota hataları nedeniyle diğer tüm adımları atlayabilir ve Spanner veritabanındaki vektör yerleştirmelerinde en yakın komşu arama gerçekleştirmenin 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özlemleme

Önceki sorguda, istemimize en yakın 10 eşleşmeyi bulmak için COSINE_DISTANCE yöntemi kullanılıyor.

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

d26ca8b8238bdf25.png

Oluşturulan sonuçlar, sorgunun bir parçası olan istemle 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 Console'da Kaynakları yönetin sayfasına gidin.
  2. Proje listesinde silmek istediğiniz projeyi seçin ve Sil'i tıklayın. Projeyi silmek istemiyorsanız yalnızca Spanner'da oluşturduğunuz örneği silin.
  3. İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.

11. Tebrikler

Tebrikler! Spanner'ın yerleşik vektör arama özelliğini kullanarak benzerlik araması yapmayı başarıyla tamamladınız. Ayrıca, üretken yapay zeka işlevini doğrudan SQL kullanarak sağlamak için yerleştirme ve LLM modelleriyle çalışmanın ne kadar kolay olduğunu da gördünüz.

Sırada ne var?

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

Spanner'ın Vertex AI entegrasyonunu kullanarak SQL ile online tahminler yapma hakkında daha fazla bilgiyi burada bulabilirsiniz: https://cloud.google.com/spanner/docs/ml