Retrieval-Augmented Generation (RAG)

Gömme Modelleri: RAG'de Hız mı Doğruluk mu?

Sağlam bir Geriye Dönük Üretim (RAG) sistemi oluşturmak, yalnızca Büyük Dil Modellerini (LLM) ve vektör veritabanlarını birleştirmekten daha fazlasını gerektirir. Bu mimarinin temel taşı, yapılandırılmamış metni anlamsal arama için yoğun vektörlere dönüştüren gömme modelidir. Üretim ortamlarında, sürekli olarak üç zıt kısıtlama arasında denge kurarsınız: çıkarım hızı (gecikme), geri çağırma doğruluğu (MRR/R@k metrikleri) ve operasyonel maliyet (hesaplama/GPU saatleri).

Bu yazıda, spesifik kullanım durumunuz için veriye dayalı kararlar almanıza yardımcı olmak amacıyla popüler modern gömme modelleri benchmarklanmıştır.

Takas Üçgeni

En iyi gömme modeli diye bir şey yoktur. Sadece kısıtlamalarınız için en iyi model vardır. SentenceTransformers/all-MiniLM-L6-v2 gibi yüksek boyutlu modeller birçok uygulama için tatmin edici bir denge sunarken, E5-Mistral-7B gibi daha ağır modeller, artan gecikme pahasına üstün doğruluk sağlar.

Dikkate Alınması Gereken Temel Metrikler

  • Gecikme (Latency): Tek bir sorgunun gömülmesi için geçen süre. Gerçek zamanlı kullanıcı deneyimleri için kritiktir.
  • Sığıcılık (Throughput): GPU başına saniyede gömme sayısı. Altyapı ölçeklendirme maliyetlerini etkiler.
  • Recall@k: İlk k sonuç içinde bulunan ilgili belgelerin yüzdesi. Bu, birincil doğruluk metriğinizdir.
  • Boyutluluk: Daha yüksek boyutlar, bellek kullanımını ve mesafe hesaplama maliyetlerini artırır.

Örnek Benchmark Kodu

Kendi benchmarklarınızı yapmak için sentence-transformers kütüphanesini timeit ile birlikte kullanabilirsiniz. Aşağıda, çıkarım gecikmesini ve bellek kullanımını ölçmek için pratik bir betik bulunmaktadır.

import time
from sentence_transformers import SentenceTransformer

def benchmark_model(model_name, texts):
    print(f"Model yükleniyor: {model_name}...")
    model = SentenceTransformer(model_name)
    
    # Isınma çalıştırması
    model.encode(texts[:10])
    
    start_time = time.time()
    # Gömme hızını benchmarkla
    embeddings = model.encode(texts)
    end_time = time.time()
    
    latency = (end_time - start_time) / len(texts)
    print(f"Model: {model_name}")
    print(f"Belge başına Ort. Gecikme: {latency*1000:.2f} ms")
    print(f"Gömme şekli: {embeddings.shape}")
    print("-" * 30)

# Örnek kullanım
dataset = ["Gökyüzü mavidir.", "Robotlar dünyayı ele geçirecek.", "Python harikadır."]
benchmark_model("sentence-transformers/all-MiniLM-L6-v2", dataset)

Kullanım Durumuna Göre Model Önerileri

1. Düşük Gecikme, Yüksek Maliyet Verimliliği

10 ms'in altında gecikme gerektiren iç kurumsal arama veya yüksek sığıcılıklı uygulamalar için sentence-transformers/all-MiniLM-L6-v2 sektör standardı olmaya devam etmektedir. CPU'lar üzerinde verimli çalışarak bulut GPU maliyetlerini önemli ölçüde düşürür.

2. Dengeli Doğruluk ve Hız

Tüketici odaklı sohbet botları için bge-large-en-v1.5, gecikmede sadece mütevazı bir artışla MiniLM'ye göre belirgin bir doğruluk artışı sunar. İngilizce için optimize edilmiştir ve uzun bağlamları iyi yönetir.

3. Karmaşık Sorgular İçin Maksimum Doğruluk

Belgeleriniz son derece teknikse veya sorgularınız belirsizse, E5-Mistral-7B değerlendirmenizi yapın. Bu model, gömlemeler için büyük bir dil modeli omurgasından yararlanır ve en üst düzey geri çağırma (recall) performansı sunar. Ancak, GPU hızlandırması gerektirir ve daha yüksek operasyonel maliyetlere yol açar.

Sonuç

Bir gömme modeli seçimi, RAG hattınızın kullanıcı deneyimini ve karlılığını etkileyen stratejik bir karardır. MiniLM gibi bir taban değerle başlayın, ardından MRR (Ortalama Ters Sıra) gibi metrikleri kullanarak daha ağır modelleri spesifik veri setinizle kademeli olarak test edin. Üretim dağıtımınızın yanıt süresinin yüksek ve maliyet etkin kalmasını sağlamak için gecikmeyi yalnızca izole olarak değil, yük altında da profilleyin.

Share: