AlloyDB'nin en yeni vektör arama özellikleriyle kalite kontrollü RAG

1. Genel Bakış

Farklı sektörlerde bağlama dayalı arama, uygulamaların temelini oluşturan kritik bir işlevdir. Üretken yapay zeka destekli arama mekanizmalarıyla, Retrieval Augmented Generation (Arama Aşamasında Güçlendirilmiş Üretim) uzun süredir bu önemli teknolojik evrimin önemli bir itici gücü olmuştur. Üretken modeller, geniş bağlam pencereleri ve etkileyici çıkış kalitesiyle yapay zekayı dönüştürüyor. RAG, yapay zeka uygulamalarına ve temsilcilerine bağlam eklemenin sistematik bir yolunu sunar. Bu bağlam, yapılandırılmış veritabanlarına veya çeşitli medyalardan alınan bilgilere dayanır. Bu bağlamsal veriler, doğruluğun netliği ve çıktının doğruluğu açısından çok önemlidir ancak bu sonuçlar ne kadar doğrudur? İşletmeniz büyük ölçüde bu bağlamsal eşleşmelerin doğruluğuna ve alaka düzeyine mi bağlı? O zaman bu proje tam size göre.

Vektör aramanın sırrı, yalnızca vektörü oluşturmak değil, vektör eşleşmelerinizin gerçekten iyi olup olmadığını bilmektir. Sonuç listesine boş boş bakarak "Bu şey çalışıyor mu?" diye düşünen hepimiziz. Vektör eşlemelerinizin kalitesini nasıl değerlendireceğinizi ayrıntılı olarak inceleyelim. "Peki RAG'de ne değişti?" diye sorabilirsiniz. Her şey. Almayla Artırılmış Üretim (RAG), yıllarca umut verici ancak yakalanması zor bir hedef gibi görünüyordu. Artık, kritik görevler için gereken performans ve güvenilirlikle RAG uygulamaları oluşturmak için gerekli araçlara sahibiz.

Artık 3 temel konuda bilgi sahibiyiz:

  1. Temsilciniz için bağlama dayalı aramanın ne anlama geldiği ve bunu Vektör Arama'yı kullanarak nasıl gerçekleştirebileceğiniz.
  2. Ayrıca, verilerinizin kapsamı içinde yani veritabanınızın içinde Vector Search'e erişme konusunda ayrıntılı bir inceleme yaptık (Bilmiyorsanız tüm Google Cloud veritabanları bunu destekler).
  3. ScaNN dizini tarafından desteklenen AlloyDB vektör arama özelliğiyle yüksek performans ve kalitede bu kadar hafif bir vektör arama RAG özelliğini nasıl elde edeceğinizi size anlatma konusunda dünyanın geri kalanından bir adım daha ileri gittik.

Temel, orta ve biraz ileri düzey RAG denemelerini tamamlamadıysanız bu 3 makaleyi buradan, buradan ve buradan sırasıyla okumanızı öneririz.

Patent Arama, kullanıcının arama metniyle bağlamsal olarak alakalı patentleri bulmasına yardımcı olur. Bunun bir sürümünü geçmişte oluşturduk. Artık bu uygulama için kalite kontrollü bir bağlamsal arama sağlayan yeni ve gelişmiş RAG özellikleriyle oluşturacağız. Başlayalım.

Aşağıdaki resimde, bu uygulamada neler olduğuyla ilgili genel akış gösterilmektedir.~ 1c871099f1fde825.png

Hedef

Kullanıcıların, AlloyDB'nin en yeni RAG özelliklerini kullanarak oluşturulan eşleşmelerin kalitesini değerlendirirken metin açıklamasına göre patent aramasını iyileştirilmiş performans ve daha iyi kaliteyle yapmasına olanak tanıyın.

Ne oluşturacaksınız?

Bu laboratuvarda şunları yapacaksınız:

  1. AlloyDB örneği oluşturma ve Patents Public Dataset'i yükleme
  2. Meta veri dizini ve ScaNN dizini oluşturma
  3. ScaNN'ın satır içi filtreleme yöntemini kullanarak AlloyDB'de gelişmiş vektör araması uygulama
  4. Geri çağırma değerlendirme özelliğini uygulama
  5. Sorgu yanıtını değerlendirme

Şartlar

  • Chrome veya Firefox gibi bir tarayıcı
  • Faturalandırma özelliği etkinleştirilmiş 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. Projede faturalandırmanın etkin olup olmadığını nasıl kontrol edeceğinizi öğrenin .
  3. 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üğ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. Veritabanı kurulumu

Bu laboratuvarda, patent verileri için veritabanı olarak AlloyDB'yi kullanacağız. Veritabanları ve günlükler gibi tüm kaynakları tutmak için kümeler kullanır. Her kümenin, verilere erişim noktası sağlayan bir birincil örneği vardır. Tablolar gerçek verileri içerir.

Patent veri kümesinin yükleneceği bir AlloyDB kümesi, örneği ve tablosu oluşturalım.

Küme ve örnek oluşturma

  1. Cloud Console'da AlloyDB sayfasına gidin. Cloud Console'daki çoğu sayfayı bulmanın kolay bir yolu, konsolun arama çubuğunu kullanarak arama yapmaktır.
  2. Bu sayfada KÜME OLUŞTUR'u seçin:

f76ff480c8c889aa.png

  1. Aşağıdakine benzer bir ekran görürsünüz. Aşağıdaki değerlerle bir küme ve örnek oluşturun (Repo'dan uygulama kodunu klonluyorsanız değerlerin eşleştiğinden emin olun):
  • küme kimliği: "vector-cluster"
  • password: "alloydb"
  • PostgreSQL 15 / en son sürüm önerilir
  • Bölge: "us-central1"
  • : "default"

538dba58908162fb.png

  1. Varsayılan ağı seçtiğinizde aşağıdaki gibi bir ekran görürsünüz.

BAĞLANTI KUR'u seçin.

7939bbb6802a91bf.png

  1. Buradan "Otomatik olarak atanmış bir IP aralığı kullan"ı seçip Devam'ı tıklayın. Bilgileri inceledikten sonra BAĞLANTI OLUŞTUR'u seçin. 768ff5210e79676f.png
  2. Ağınız oluşturulduktan sonra kümenizi oluşturmaya devam edebilirsiniz. Kümenin ayarlanmasını tamamlamak için aşağıda gösterildiği gibi KÜME OLUŞTUR'u tıklayın:

e06623e55195e16e.png

Örnek kimliğini (küme / örnek yapılandırması sırasında bulabilirsiniz) şununla değiştirin:

vector-instance. Değiştiremiyorsanız sonraki tüm referanslarda örnek kimliğinizi kullanmayı unutmayın.

Küme oluşturma işleminin yaklaşık 10 dakika süreceğini unutmayın. İşlem başarıyla tamamlandığında, yeni oluşturduğunuz kümenize genel bakış sunan bir ekran görürsünüz.

4. Veri kullanımı

Şimdi, mağazayla ilgili verileri içeren bir tablo ekleme zamanı. AlloyDB'ye gidin, birincil kümeyi ve ardından AlloyDB Studio'yu seçin:

847e35f1bf8a8bd8.png

Örneğinizin oluşturulmasının tamamlanmasını beklemeniz gerekebilir. Bu işlem tamamlandıktan sonra, kümeyi oluştururken oluşturduğunuz kimlik bilgilerini kullanarak AlloyDB'de oturum açın. PostgreSQL'de kimlik doğrulama için aşağıdaki verileri kullanın:

  • Kullanıcı adı : "postgres"
  • Veritabanı : "postgres"
  • Şifre : "alloydb"

AlloyDB Studio'da kimlik doğrulamayı başarıyla tamamladıktan sonra Düzenleyici'ye SQL komutları girilir. Son pencerenin sağındaki artı işaretini kullanarak birden fazla Düzenleyici penceresi ekleyebilirsiniz.

91a86d9469d499c4.png

Gerektiği gibi Çalıştır, Biçimlendir ve Temizle seçeneklerini kullanarak AlloyDB komutlarını düzenleyici pencerelerine girersiniz.

Uzantılar'ı etkinleştirme

Bu uygulamayı 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 IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;

Veritabanında etkinleştirilen uzantıları kontrol etmek istiyorsanız aşağıdaki SQL komutunu çalıştırın:

select extname, extversion from pg_extension;

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, abstract_embeddings vector(768)) ;

abstract_embeddings sütunu, metnin vektör değerlerinin depolanmasına olanak tanır.

İ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 ("service-<<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, Cloud Shell Terminal'den aşağıdaki komutu da çalıştırabilirsiniz:

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"

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. Veriler bu insert_scripts.sql dosyasına alınır ve patent verilerini yüklemek için bu dosyayı çalıştırırız.

  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_scripts.sql komut dosyasından insert sorgu ifadesini düzenleyiciye kopyalayın. Bu kullanım alanının hızlı bir demosu için 10-50 insert ifadesi kopyalayabilirsiniz.
  6. Çalıştır'ı tıklayın. Sorgunuzun sonuçları Sonuçlar tablosunda görünür.

Not: Ekle komut dosyasının çok fazla veri içerdiğini fark edebilirsiniz. Bunun nedeni, ekleme komut dosyalarına yerleştirilmiş olmasıdır. Dosyayı GitHub'a yüklerken sorun yaşarsanız "Ham görüntüle"yi tıklayın. Bu, Google Cloud için deneme kredisi faturalandırma hesabı kullanıyorsanız sonraki adımlarda birkaçtan fazla (ör. en fazla 20-25) yerleştirme oluşturma zahmetinden kurtarmak için yapılı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('text-embedding-005', '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, yalnızca insert komut dosyasının bir parçası olarak abstract_embeddings verilerini eklemediyseniz ilgili yerleştirmelerle güncellemek için aşağıdaki DML'yi çalıştırın:

UPDATE patents_data set abstract_embeddings = embedding( 'text-embedding-005', abstract);

Google Cloud için deneme kredisi faturalandırma hesabı kullanıyorsanız birkaçtan fazla (ör. en fazla 20-25) yerleşik öğe oluşturma konusunda sorun yaşayabilirsiniz. Bu nedenle, yerleştirme komut dosyalarına yerleştirilmiş olan yerleştirmeleri zaten ekledim. "Patent verilerini veritabanına yükleme" adımını tamamladıysanız bu veriler tablonuza yüklenmiş olmalıdır.

6. AlloyDB'nin yeni özellikleriyle gelişmiş RAG gerçekleştirme

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. Aşağıdaki sorguyu çalıştırarak bunu test edebilirsiniz:

SELECT id || ' - ' || title as title FROM patents_data ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;

Bu sorguda,

  1. Kullanıcının aradığı metin: "Duygu Analizi".
  2. Metni, embedding() yönteminde text-embedding-005 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.

AlloyDB, Vektör Arama RAG'yi bir üst seviyeye taşır:

Çok sayıda yeni özellik kullanıma sunuldu. Geliştirici odaklı olanlardan ikisi şunlardır:

  1. Satır içi filtreleme
  2. Hatırlanabilirlik Değerlendiricisi

Satır içi filtreleme

Daha önce geliştirici olarak Vector Search sorgusunu gerçekleştirmeniz ve filtreleme ve yeniden çağırma ile uğraşmanız gerekiyordu. AlloyDB sorgu optimize edicisi, filtre içeren bir sorgunun nasıl yürütüleceğiyle ilgili seçimler yapar. Satır içi filtreleme, AlloyDB sorgu optimizatörünün hem meta veri filtreleme koşullarını hem de vektör aramayı değerlendirmesine olanak tanıyan, meta veri sütunlarındaki vektör dizinlerinden ve dizinlerden yararlanan yeni bir sorgu optimizasyon tekniğidir. Bu sayede, geliştiriciler AlloyDB'nin sunduğu özelliklerden yararlanarak hatırlama performansını artırabilir.

Satır içi filtreleme, orta düzeyde seçiciliğe sahip durumlar için en iyi seçenektir. AlloyDB, vektör dizini içinde arama yaparken yalnızca meta veri filtreleme koşullarıyla eşleşen vektörlerin mesafelerini hesaplar (bir sorgudaki işlevsel filtreleriniz genellikle WHERE yan tümcesinde işlenir). Bu, son filtreleme veya önceden filtreleme avantajlarını tamamlayarak bu sorguların performansını büyük ölçüde artırır.

  1. pgvector uzantısını yükleme veya güncelleme
CREATE EXTENSION IF NOT EXISTS vector WITH VERSION '0.8.0.google-3';

pgvector uzantısı zaten yüklüyse geri çağırma değerlendirmesi özelliklerinden yararlanmak için vektör uzantısını 0.8.0.google-3 veya sonraki bir sürüme yükseltin.

ALTER EXTENSION vector UPDATE TO '0.8.0.google-3';

Bu adımın yalnızca vektör uzantınız <0.8.0.google-3> ise uygulanması gerekir.

Önemli not: Satır sayınız 100'den azsa ScaNN dizini daha az satır için geçerli olmadığından bu dizini oluşturmanız gerekmez. Bu durumda lütfen aşağıdaki adımları atlayın.

  1. ScaNN dizini oluşturmak için alloydb_scann uzantısını yükleyin.
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
  1. Öncelikle, dizini etkinleştirmeden ve satır içi filtreyi etkinleştirmeden Vector Search sorgusunu çalıştırın:
SELECT id || ' - ' || title as title FROM patents_data 
WHERE num_claims >= 15 
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;

Sonuç şuna benzer:

6989de0fc3f0f753.png

  1. Bu üzerinde Explain Analyze'i çalıştırın: (dizin veya satır içi filtreleme olmadan)

908dcf87c7f00ed4.png

Yürütme süresi 2,4 ms

  1. Buna göre filtre uygulayabilmek için num_claims alanında normal bir dizin oluşturalım:
CREATE INDEX idx_patents_data_num_claims ON patents_data (num_claims);
  1. Patent Arama uygulamamız için ScaNN dizini oluşturalım. AlloyDB Studio'nuzda aşağıdakileri çalıştırın:
CREATE INDEX patent_index ON patents_data 
USING scann (abstract_embeddings cosine)
WITH (num_leaves=32);

Önemli not: (num_leaves=32), 1.000'den fazla satırlık toplam veri kümemiz için geçerlidir. Satır sayınız 100'den azsa daha az satır için geçerli olmayacağından öncelikle bir dizin oluşturmanız gerekmez.

  1. ScaNN dizininde satır içi filtrelemeyi etkinleştirin:
SET scann.enable_inline_filtering = on
  1. Şimdi aynı sorguyu filtre ve vektör araması içerecek şekilde çalıştıralım:
SELECT id || ' - ' || title as title FROM patents_data 
WHERE num_claims >= 15 
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;

aa54cba2b2ada2cb.png

Gördüğünüz gibi, aynı Vektör Arama için yürütme süresi önemli ölçüde azaltılmıştır. Vektör aramasında satır içi filtrelemeyle desteklenen ScaNN dizini bunu mümkün kıldı.

Ardından, bu ScaNN özellikli vektör aramasının geri çağırma oranını değerlendirelim.

Hatırlanabilirlik Değerlendiricisi

Benzerlik aramasında geri çağırma, bir aramadan alınan alakalı örneklerin yüzdesidir (doğru pozitif sayısı). Bu, arama kalitesini ölçmek için kullanılan en yaygın metriktir. Hatırlama kaybının bir kaynağı, yaklaşık en yakın komşu araması (aNN) ile k (tam) en yakın komşu araması (kNN) arasındaki farktır. AlloyDB'nin ScaNN gibi vektör dizinleri, aNN algoritmalarını uygular. Bu sayede, hatırlamada küçük bir ödün karşılığında büyük veri kümelerinde vektör aramasını hızlandırabilirsiniz. Artık AlloyDB, bu dengeyi doğrudan veritabanında tek tek sorgular için ölçmenize ve zaman içinde sabit kalmasını sağlamanıza olanak tanır. Daha iyi sonuçlar ve performans elde etmek için bu bilgilere göre sorgu ve dizin parametrelerini güncelleyebilirsiniz.

Arama sonuçlarının geri çağırılmasını sağlayan mantık nedir?

Vektör arama bağlamında, geri çağırma, dizinin döndürdüğü ve gerçek en yakın komşular olan vektörlerin yüzdesini ifade eder. Örneğin, en yakın 20 komşu için bir en yakın komşu sorgusu, gerçek en yakın komşuların 19'unu döndürüyorsa geri çağırma oranı 19/20x100 = %95 olur. Geri çağırma, arama kalitesi için kullanılan metriktir ve döndürülen sonuçların sorgu vektörlerine objektif olarak en yakın olanlarının yüzdesi olarak tanımlanır.

evaluate_query_recall işlevini kullanarak belirli bir yapılandırma için vektör dizininde bir vektör sorgusunun geri çağırmasını bulabilirsiniz. Bu işlev, istediğiniz vektör sorgu hatırlama sonuçlarını elde etmek için parametrelerinizi ayarlamanıza olanak tanır.

Önemli Not:

Aşağıdaki adımlarda HNSW dizininde izin reddedildi hatasıyla karşılaşırsanız şimdilik bu hatırlama değerlendirmesi bölümünün tamamını atlayın. Bu kod laboratuvarı belgelenirken yeni kullanıma sunulduğu için bu durum şu anda erişim kısıtlamalarıyla ilgili olabilir.

  1. ScaNN dizini ve HNSW dizininde Dizin Taramasını Etkinleştir işaretini ayarlayın:
SET scann.enable_indexscan = on
SET hnsw.enable_index_scan = on
  1. AlloyDB Studio'da aşağıdaki sorguyu çalıştırın:
SELECT
  *
FROM
  evaluate_query_recall($$
  SELECT
    id || ' - ' || title AS title,
    abstract
  FROM
    patents_data
    where num_claims >= 15
  ORDER BY
    abstract_embeddings <=> embedding('text-embedding-005',
      'sentiment analysis')::vector
  LIMIT 25 $$,
    '{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
    ARRAY['scann']);

evaluate_query_recall işlevi, sorguyu parametre olarak alır ve geri çağırma oranını döndürür. Performansı kontrol etmek için kullandığım sorguyu işlev giriş sorgusu olarak kullanıyorum. Dizin yöntemi olarak SCaNN'i ekledim. Daha fazla parametre seçeneği için dokümanlara bakın.

Kullandığımız bu Vektör Arama sorgusunun geri çağırma oranı:

c98f38fbe6a0b6c5.png

İADE oranının %70 olduğunu görüyorum. Şimdi bu bilgileri kullanarak dizin parametrelerini, yöntemleri ve sorgu parametrelerini değiştirebilir ve bu Vektör Arama için geri çağırmamı iyileştirebilirim.

7. Değiştirilmiş sorgu ve dizin parametreleriyle test edin

Şimdi, sorgu parametrelerini alınan geri çağırmaya göre değiştirerek sorguyu test edelim.

  1. Sonuç kümesindeki satır sayısını 7 olarak değiştirdim (önceki 25'ten). RECALL değerinin iyileştiğini (%86) görüyorum.

c12f7b92b8481ceb.png

Bu sayede, eşleşmelerin alaka düzeyini kullanıcıların arama bağlamına göre iyileştirmek için kullanıcılarımın göreceği eşleşmelerin sayısını anlık olarak değiştirebilirim.

  1. Dizin parametrelerini değiştirerek tekrar deneyelim:

Bu test için "Kosinüs" benzerlik mesafesi işlevi yerine "L2 Mesafe" işlevini kullanacağım. Ayrıca, arama sonucu grubu sayısı artmış olsa bile arama sonuçlarının kalitesinde iyileşme olup olmadığını göstermek için sorgunun sınırını 10 olarak değiştireceğim.

[ÖNCE] Kosinüs Benzerlik mesafe işlevini kullanan sorgu:

SELECT
  *
FROM
  evaluate_query_recall($$
  SELECT
    id || ' - ' || title AS title,
    abstract
  FROM
    patents_data
    where num_claims >= 15
  ORDER BY
    abstract_embeddings <=> embedding('text-embedding-005',
      'sentiment analysis')::vector
  LIMIT 10 $$,
    '{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
    ARRAY['scann']);

Çok Önemli Not: "Bu sorgunun COSINE benzerliğini kullandığını nasıl anlarız?" diye sorabilirsiniz. Kosinüs mesafesini temsil etmek için "<=>" kullanarak mesafe işlevini tanımlayabilirsiniz.

Vektör Arama uzaklık işlevleri için Dokümanlar bağlantısı.

Yukarıdaki sorgunun sonucu:

c62ef8922d6bf0b2.png

Gördüğünüz gibi, dizin manığımızda herhangi bir değişiklik yapmadan RECALL %70'dir. Satır içi filtreleme bölümünün 6. adımında oluşturduğumuz ScaNN dizini olan "patent_index "yi hatırlıyor musunuz? Yukarıdaki sorguyu çalıştırırken aynı dizin hâlâ etkindir.

Şimdi farklı bir mesafe işlevi sorgusu içeren bir dizin oluşturalım: L2 mesafesi: <->

drop index patent_index;

CREATE INDEX patent_index_L2 ON patents_data 
USING scann (abstract_embeddings L2)
WITH (num_leaves=32);

drop index ifadesi, tabloda gereksiz bir dizin olmadığından emin olmak içindir.

Şimdi, Vektör Arama işlevimin mesafe işlevini değiştirdikten sonra RECALL değerini değerlendirmek için aşağıdaki sorguyu yürütebilirim.

[SONRA] Kosinüs Benzerlik mesafe işlevini kullanan sorgu:

SELECT
  *
FROM
  evaluate_query_recall($$
  SELECT
    id || ' - ' || title AS title,
    abstract
  FROM
    patents_data
    where num_claims >= 15
  ORDER BY
    abstract_embeddings <-> embedding('text-embedding-005',
      'sentiment analysis')::vector
  LIMIT 10 $$,
    '{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
    ARRAY['scann']);

Yukarıdaki sorgunun sonucu:

6c163dd08cf4d693.png

Hatırlama değerinde %90'lık bir dönüşüm.

İstenilen geri çağırma değerine ve uygulamanızın kullandığı veri kümesine bağlı olarak dizinde değiştirebileceğiniz num_leaves gibi başka parametreler de vardır.

8. 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 kaynak yöneticisi sayfasına gidin.
  2. Proje listesinde, silmek istediğiniz projeyi seçin ve ardından Sil'i tıklayın.
  3. İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
  4. Alternatif olarak, CLUSTER SİL düğmesini tıklayarak bu proje için yeni oluşturduğumuz AlloyDB kümesini (yapılandırma sırasında küme için us-central1'i seçmediyseniz bu köprüdeki konumu değiştirin) silebilirsiniz.

9. Tebrikler

Tebrikler! Bağlamsal Patent Arama sorgunuzu, yüksek performans elde etmek ve gerçekten anlam odaklı hale getirmek için AlloyDB'nin gelişmiş Vector Search özelliğiyle başarıyla oluşturdunuz. Yüksek performanslı ve kaliteli bir Patent Vektörü Arama ve Analiz Acentesi oluşturmak için ADK'yı ve burada bahsettiğimiz tüm AlloyDB öğelerini kullanan, kalite kontrollü, çok araçlı bir aracı uygulama oluşturdum. Bu uygulamayı buradan görüntüleyebilirsiniz: https://youtu.be/Y9fvVY0yZTY

Bu aracıyı nasıl oluşturacağınızı öğrenmek istiyorsanız lütfen bu codelab'e bakın.

Hemen Başlayın!