Vector Databases

Sürüm Kontrolü Yapılmış Vektör Veri Setleri İçin LanceDB: Gömme Modelleri İçin Git Benzeri Geçmiş Uygulaması

Hızla gelişen yapay zeka ve makine öğrenmesi dünyasında veri artık statik değildir. Gömme modellerini daha fazla nüans yakalamak veya anlamsal arama doğruluğunu artırmak için yeniden eğittikçe, altta yatan vektör temsilleri değişir. Bu geçişleri yönetmek geleneksel olarak veri mühendisleri için bir kabus olmuştur. "Son iyi" modele nasıl geri dönebilirsiniz? Belirli bir sorgu sonucunun geçen aydan bugüne neden değiştiğini nasıl denetlersiniz?

İşte LanceDB, Lance dosya biçiminin üzerine inşa edilmiş açık kaynaklı bir vektör veritabanı. Geleneksel SQL veritabanlarından veya standart NoSQL depolarından farklı olarak LanceDB, sürüm kontrolü yapılmış veri setleri için yerel destekle tasarlanmıştır. Vektör verilerinizi yalnızca bir nokta koleksiyonu olarak değil, bir zaman serisi nesnesi olarak ele alır ve bu sayede gömme verileriniz için minimum ek yük ile "Git benzeri" bir geçmiş uygulamanızı sağlar.

Lance Dosya Biçimini Anlama

Bu yeteneğin kalbinde Lance biçimi bulunur. Bu, yüksek boyutlu vektörler, rastgele erişim ve kopyasız güncellemeler için optimize edilmiş sütun tabanlı bir depolama biçimidir. Önemli olan, Lance dosyalarının manifestleri (gösterge dosyaları) desteklemesidir. Her seferinde bir Lance veri setine veri yazdığınızda, yeni bir manifest oluşturulur. Bu manifest, veri setinin durumunun bir anlık görüntüsü olarak işlev görür ve o sürümü oluşturan belirli veri dosyalarına referans verir.

Bu mimari sayesinde, bir yedek veya sürüm oluşturmak için tüm tabloları kopyalamanıza gerek yoktur. Bunun yerine, yalnızca belirli bir manifest kimliğine referans verirsiniz. Bu, sürüm kontrolünü hafif, anında ve atomik hale getirir.

LanceDB'de Sürüm Kontrolü Uygulaması

Bunun pratikte nasıl uygulandığına bakalım. Önce bir LanceDB tablosu oluşturup bazı başlangıç verileri yazacağız. Ardından, yeni vektörler yazarak bir model güncellemesini simüle edeceğiz ve tarihsel durumları nasıl sorgulayabileceğimizi kontrol edeceğiz.

import lancedb
import pandas as pd

# Veritabanına bağlan
db = lancedb.connect("./my_lancedb")

# Başlangıç verisi: Model v1.0 tarafından üretilen vektörler
df_v1 = pd.DataFrame({
    "id": [1, 2, 3],
    "text": ["hello world", "lance db", "vector search"],
    "vector": [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]
})

# Başlangıç sürümüyle tabloyu oluştur
table = db.create_table("embeddings", data=df_v1)

# Model güncellemesini simüle et: Model v2.0 tarafından üretilen vektörler
# Not: Mevcut tabloyu güncelliyoruz, yeni bir sürüm oluşturuyoruz
df_v2 = pd.DataFrame({
    "id": [1, 2, 3],
    "text": ["hello world", "lance db", "vector search"],
    "vector": [[0.11, 0.21, 0.31], [0.41, 0.51, 0.61], [0.71, 0.81, 0.91]]
})

table.add(df_v2)

# Mevcut sürümü kontrol et
print(f"Mevcut sürüm: {table.version}")

Tarihsel Durumları Sorgulama

"Git benzeri" özelliğin parladığı yer burasıdır. Model v2.0'ın arama sonuçlarımıza önyargı veya halüsinasyonlar getirdiğini fark edersek, depolanan verileri değiştirmeden sorgularımızı anında v1.0 durumuna geri döndürebiliriz. Sadece sorgumuzda sürümü belirtiriz.

# Mevcut sürümü sorgula (v2.0)
current_results = table.search([0.1, 0.2, 0.3]).limit(1).to_pandas()
print("Mevcut (v2.0) Sonuç:", current_results)

# Önceki sürümü sorgula (v1.0)
# Belirli sürümlere version parametresi kullanarak erişebiliriz
prev_results = table.search([0.1, 0.2, 0.3], version=table.version - 1).limit(1).to_pandas()
print("Önceki (v1.0) Sonuç:", prev_results)

Pratik Kullanım Senaryoları

  • Model A/B Testleri: Farklı gömme veri seti sürümlerine karşı çıkarım (inference) hatlarını çalıştırarak, ayrı fiziksel veritabanları sürdürmeden performans metriklerini karşılaştırabilirsiniz.
  • Denetim İzleri: Düzenlenen sektörler, belirli bir zaman damgasında belirli bir arama sonucu veya önerinin hangi vektör sürümüyle üretildiğini tam olarak kaydedebilir.
  • Artımlı Güncellemeler: Yeni belgeler işlendikçe, LanceDB artımlı yazmaları işler, veri setinin geçmişini korurken yalnızca değişiklikleri verimli bir şekilde depolar.

Sonuç

LanceDB'deki sürüm kontrolü yapılmış veri setleri, MLOps'taki kritik bir acı noktasını çözer: vektör verileri için gözlemlenebilirlik ve geri alma yeteneklerinin eksikliği. Lance dosya biçiminin manifest tabanlı mimarisinden yararlanarak, geliştiriciler vektör veritabanlarını kod depolarıyla aynı titizlikle ele alabilir. Bu, yalnızca hata ayıklama ve denetimi artırmakla kalmaz, aynı zamanda sürekli model entegrasyonu için bir güvenlik ağı sağlayarak yapay zeka uygulamalarının güvenilir, şeffaf ve kolayca sürdürülebilir kalmasını sağlar.

Share: