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.