Ana sayfa › Forumlar › Codex’e kendi mantığını entegre etmenin sırrı! › RAG sistemimde vektör araması tek başına çok fazla saçma sonuç veriyor, BM25 ile karmak mantıklı mı? RRF mantığını tam oturtamadım
- Bu konu 1 yanıt içerir, 2 izleyen vardır ve en son 2 gün 9 saat önce
Volkan K. tarafından güncellenmiştir.
-
YazarYazılar
-
19 Ekim 2026: 22:55 #73798
MatrixKatılımcıArkadaşlar merhaba, bir süredir kendi small business’lar için bir ürün arama özelliği kuruyorum. Ürün açıklamaları, teknik özellikler, kullanıcı yorumları diye binlerce doküman var elimde.
Başta sadece embedding’leyip FAISS’e attım, cosine benzerliğiyle arattım. Güzel görünüyor ama iş biraz spesifik bir terime takılınca (mesela model numarası, parti kodu gibi) sıfıra düşüyor. Nedeni de belli zaten, o kelimeler embedding içinde boğuluyor. Bir de ‘apple’ deyince meyve mi telefon mu çıkacağına karar veremiyorum bazen.
Tarafımın birinde hibrit arama ve RRF (reciprocal rank fusion) görüyorum ama bu füzeyon işinin tam olarak nasıl çalıştığıni kafamda net oturtamadım. Sadece skorları toplayıp carpma vs. mi oluyor yoksa çok daha zeka bir şey mi? HNSW + BM25’yi birlikte kullanıp da RRF ile sıralamayı birleştirmek gerçekten o spesifik arama sorunuunu çözer mi, yoksa ben mi aşırı karmaşıklaştırıyorum? Deneyen var mı, nasıl bir ağırlıklandırma yapıyorsunuz?
"Masaüstü: Ryzen 7 7800X3D & RTX 4060 Ti 16GB | Taşınabilir: ThinkPad T14s AMD Gen 4 (Fedora 41)"21 Ekim 2026: 12:23 #74483
Volkan K.KatılımcıSelamlar, bu işi geçen sene prodüksiyona aldık, üstünden biraz kan süzüldü diyebilirim. Önce olayın temeline inelim, çünkü çoğu kişi RRF’i ‘skorları karıştırma’ sanıp bozuyor.
Vektör araması (HNSW üzerinden cosine) semantic benzerliği yakalar ama kelime eşleşmesine kör. BM25 ters dizini de tam o anahtar kelime / özel kod arama konusunda patlamadır ama eş anlamlıları, özeti kaçırır. Yani her ikisi de bir tarafı görüyor. Hibrit’in yaptığı tam da budur: iki gözünü de açık tutmak.
RRF’in mantığı şudur: İki ayrı ranking listen alırsın. Vektör aramanda X ürünü 3. sıradaydı, BM25 aramanda 5. sıradaydı. RRF skoru = 1/(k + rank_vektör) + 1/(k + rank_bm25). k genelde 60 alınır, çünkü bu formül sıralamanın başında olan öğeleri ödürlendirir ama çok da abartmaz. Yani iki listede de öne çıkan ürün doğal olarak tepeye çıkar. Skorları direkt toplama, çarpma veya normalizasyonsuz birleştirme yapmana gerek yok, işin aslı bu rasyonel formül. İki sistemin farklı skor ölçeklerini de bu şekilde otomatik dengelemiş olursun, min-max derdine kalmazsın.
Benim tavsiyem: HNSW’ye geçmeden önce BM25’yi zaten kur. Elasticsearch ya da MeiliSearch zaten hibrit modu var, RRF’i manuel yazmana da gerek kalmadan ‘rank_fusion’ seçeneğiyle hallediyorsun. Manuel yazacaksan da önce her iki listeden ilk N sonucunu al, sonra RRF uygula, sadece ilk 100 elemanı考慮 etmen yeterli. Ağırlıklandırma için iki yolu var: eşit ağırlık (k=60) ya da bm25_weight parametresiyle BM25’ye 1.5-2 arası ağırlık vermek. Benim deneyimimde özel kodlu/arama sonuçları önemliyse bm25’ye biraz ağırlık vermek ‘apple’ tipindeki belirsizlikleri azaltıyor.
Küçük bir tuzak: RRF rank’a bakar ama listede olmayan ürünü görmez. Bu yüzden iki listenin union’unu alıp eksiklere 0 ataman lazım, yoksa liste dışı ürünleri kaybedersin. İstersen önce küçük bir test setiyle precision@10 ölçüp k değerini tune et, 30 ile 100 arası genelde işi değiştiriyor.
Sorununu kesin çözer, fazla kaçırdığın yer yok. İstersen kullandığın vektör modelini ve doküman tipini yaz, ağırlık önerisini ona göre veririm.
Ekipman: Gigabyte M27Q 170Hz • Logitech Superlight 2 • Wooting 60HE • Artisan Zero -
YazarYazılar
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.
