Elektrik 1 Elektrik 2 Elektrik 3 Elektrik 4 Elektrik 5 Elektrik 6

Vektör Veritabanlarına Embedding Aktarımı ve Arama Optimizasyonu

08.06.2025 10:48


LLM tabanlı sistemlerde, vektör veritabanları (vector stores), bilgiye hızlı ve semantik erişimi mümkün kılar. Ancak embedding’lerin verimli bir şekilde aktarılması ve optimize edilmesi, sistem performansı açısından kritik bir faktördür. Bu yazıda Pinecone, Weaviate ve Qdrant gibi modern vektör veritabanlarına veri aktarım yöntemlerini ve arama performansını artırmaya yönelik stratejileri inceliyoruz.

1. Uygun Index Yapısını Tasarlamak

Veritabanınızı oluştururken şu kriterlere dikkat etmelisiniz:

  • Metric: cosine veya dot_product (kullandığınız embedding modeline göre belirlenmeli)
  • Dimension: Embedding vektörünüzün boyutu (örn. 384, 768, 1024...)
  • Metadata Filtering: Arama sırasında filtreleme yapacaksanız, bu alanlar schema’da tanımlanmalı

# Örnek (Pinecone)
pinecone.create_index(
    name="mevzuat-index",
    metric="cosine",
    dimension=768,
    metadata_config={"indexed": ["kategori", "yil", "kaynak"]}
)

2. Toplu Embedding Aktarımı (Batch Upsert)

Tek tek upsert yapmak yerine toplu işlemlerle aktarım yapmak, hem hız hem de API limiti açısından verimlidir.


# Pinecone örneği
batch = []
for doc in documents:
    embedding = model.encode(doc["text"])
    batch.append({
        "id": doc["id"],
        "values": embedding.tolist(),
        "metadata": doc["metadata"]
    })
index.upsert(vectors=batch)

Benzer yöntemler Weaviate ve Qdrant için de kullanılabilir:


# Qdrant örneği
qdrant_client.upload_collection(
    collection_name="mevzuat",
    vectors=embeddings,
    payload=metadata_list,
    ids=id_list
)

3. Arama Performansını Artırmak

  • 🔍 Pre-filtering: Arama öncesinde kategori, yil gibi alanlarda filtreleme yaparak sonuç kümesini daraltın.
  • 🔄 Re-ranking: İlk gelen sonuçları yeniden sıralamak için küçük bir LLM (reranker) veya BM25 skorlaması kullanılabilir.
  • 🧠 Hybrid Search: Hem semantik hem kelime bazlı arama birlikte kullanılabilir.

# Pinecone'da filtreli arama
results = index.query(
    query_vector=vector,
    top_k=5,
    filter={"kategori": "Tüketici Hakları"}
)

4. Hatalardan Kaçınma ve Gelişmiş Stratejiler

  • ⚠️ Aynı ID ile tekrar upsert yaparken veri üzerine yazılır, dikkatli olun
  • 🧩 Metadata'lar vektörleştirilmez, sadece filtreleme içindir
  • 📁 Her veri kaynağına özel “collection” açmak sorgu optimizasyonunu kolaylaştırır
  • 📈 Zamanla büyüyen veri için shard ve replica ayarlarını izleyin

Sonuç

Vektör veritabanları, RAG sistemlerinde kritik rol oynar. Ancak doğru yapılandırma, verimli aktarım ve optimize edilmiş arama stratejileri ile gerçek gücünü ortaya koyar. Mevzuat gibi düzenli güncellenen metinlerde ise versiyonlama ve filtrelenebilir metadata yapısı büyük avantaj sağlar.

🔗 Devamı Gelecek

Bir sonraki yazımızda, farklı veri kaynaklarının (PDF, HTML, Word belgeleri vs.) otomatik işlenmesi ve embedding sürecine uygun hale getirilmesi konusuna odaklanacağız.