Umut ABALI
← Notlara dön

Agentic RAG'imde BM25 + dense + cross-encoder reranking ile hibrit retrieval

RAGRetrievalBM25Reranking

Dense embedding'ler eş anlamlı ifadelerde iyi, tam token eşleşmelerinde zayıf: ürün kodları, sayılar, isimler, "kaç dakika". BM25 ise tam tersi. Agentic RAG'imde search_documents aracı ikisini de çalıştırıyor ve son sözü bir cross-encoder'a bırakıyor.

1. Paralel iki retriever

Vektör tarafı BAAI/bge-m3 embedding'leriyle (normalize) Qdrant. Anahtar kelime tarafı aynı chunk'lardan kurulan bir BM25 indeksi. İkisi iki worker'lı bir thread pool'a gönderiliyor. Böylece gecikmeyi toplam değil, yavaş olan belirliyor.

2. Skora göre değil, sıraya göre birleştirmek

Kosinüs benzerlikleri ve BM25 skorları farklı ölçeklerde. Bu yüzden normalize etmek yerine ağırlıklı Reciprocal Rank Fusion kullanılıyor:

skor(doc) = (1 - w) / (60 + sıra_dense) + w / (60 + sıra_bm25)
# w = RAG_BM25_WEIGHT, varsayılan 0.4

Dokümanlar (kaynak, ilk 200 karakter) ile tekilleştiriliyor. İki retriever'ın da bulduğu bir chunk bir kez, iki katkısıyla birlikte sayılıyor.

3. Daha geniş bir havuzu yeniden sıralamak

Reranking açıkken retrieval max(rerank_top_n, 2k) aday getiriyor (rerank_top_n varsayılan 20). Bir cross-encoder her (sorgu, chunk) çiftini birlikte puanlıyor. Varsayılan model BAAI/bge-reranker-base, hızlı seçenek cross-encoder/ms-marco-MiniLM-L-6-v2. Sonuçlar sorgu, aday seti ve k ile anahtarlanarak 10 dakika cache'leniyor.

4. Etrafındaki küçük sezgiler

  • Soruda karşılaştırma/açıklama ipuçları ("neden", "why", "compare"…) varsa k, 2 veya 4 artıyor.
  • Otomatik modda strateji sorudan seçiliyor: sayı/süre soruları hybrid'e, açıklayıcı sorular çeşitlilik için MMR'a, geniş "kullanım alanları" soruları score threshold'a gidiyor.

Ödünleşimler ve sırada ne var

  • RRF skor büyüklüklerini atıyor: neredeyse mükemmel bir dense eşleşme ile vasat bir eşleşme yalnızca sırayla ayrışıyor.
  • Sorgu başına en pahalı adım cross-encoder. Bu yüzden onu atlayan bir hızlı mod var.
  • BM25 indeksi her ingest'te baştan kurulan tek bir bellek içi korpus. Sıradaki iş, onu da vektör tarafı gibi departmana duyarlı yapmak.
  • Dense, hybrid ve hybrid + rerank karşılaştırmasını henüz yayınlamadım. Benchmark yakında.

Proje: Agentic RAG Sistemi