Modül 6 · RAG and Agentic Search · ⏱ 10 dakika

BM25 lexical search

BM25 lexical search

Orijinal İngilizce video — Anthropic Academy / JWPlayer. Aşağıdaki Türkçe metin dersi birebir özetler.

Bu modül için tahmini süre: 10 dakika

Genel bakış

Semantic search tek başına her zaman en iyi sonuçları döndürmez — özellikle birebir terim eşleşmesi gerektiren sorgularda. Bu derste, BM25 algoritması ile lexical search’ü tanıyacak ve semantic + lexical kombinasyonunun neden hybrid search için güçlü bir strateji olduğunu göreceksin.

RAG pipeline’ları kurarken, semantic search’ün tek başına her zaman en iyi sonuçları döndürmediğini hızla keşfedeceksin. Bazen semantic search’ün kaçırabileceği birebir terim eşleşmelerine ihtiyacın olur. Çözüm, semantic search’ü BM25 adlı bir teknikle lexical search’le birleştirmektir.

Yalnızca semantic search’ün sorunu

Bir belgede “INC-2023-Q4-011” gibi belirli bir incident ID arıyorsun diyelim. Semantic search context ve anlamı kavramada başarılıdır, ama anlamsal olarak ilişkili olup aslında aradığın tam terimi içermeyen bölümler döndürebilir.

Yukarıdaki örnekte semantic search cybersecurity bölümünü döndürdü (incident ID’yi içeriyor) ama incident’ten hiç bahsetmeyen bir financial analysis bölümünü de döndürdü. Bu, semantic search’ün birebir terim eşleşmesi yerine kavramsal benzerliğe odaklanmasından kaynaklanır.

Hybrid search stratejisi

Çözüm, semantic ve lexical search’ü paralel çalıştırmak ve sonuçları birleştirmektir. Bu sana iki dünyanın en iyisini verir:

  • Semantic search embedding’leri kullanarak kavramsal olarak ilişkili içeriği bulur
  • Lexical search klasik text search ile birebir terim eşleşmelerini bulur
  • Merged results daha iyi doğruluk için iki yaklaşımı birleştirir

BM25 nasıl çalışır

BM25 (Best Match 25), RAG sistemlerinde lexical search için popüler bir algoritmadır. Bir search query’i şöyle işler:

Adım 1: Query’i tokenize et Kullanıcının sorusunu tek tek terimlere böl. Örneğin, “a INC-2023-Q4-011” şuna dönüşür: ["a", "INC-2023-Q4-011"].

Adım 2: Term frequency’yi say Her terimin tüm belgelerinde ne sıklıkla geçtiğini gör. “a” gibi yaygın kelimeler 5 kez geçebilirken, “INC-2023-Q4-011” gibi spesifik terimler yalnızca bir kez geçebilir.

Adım 3: Terimleri önemine göre ağırlıklandır Daha az sıklıkta geçen terimler daha yüksek önem skoru alır. “a” kelimesi yaygın olduğu için düşük önem alırken, “INC-2023-Q4-011” nadir olduğu için yüksek önem alır.

Adım 4: En iyi eşleşmeleri bul Daha yüksek ağırlıklı terimleri daha fazla içeren belgeleri döndür.

BM25 search implementasyonu

Temel bir BM25 search sistemi şöyle kurulur:

# 1. Chunk your text by sections
chunks = chunk_by_section(text)

# 2. Create a BM25 store and add documents
store = BM25Index()
for chunk in chunks:
    store.add_document({"content": chunk})

# 3. Search the store
results = store.search("What happened with INC-2023-Q4-011?", 3)

# Print results
for doc, distance in results:
    print(distance, "\n", doc["content"][:200], "\n----\n")

Bu search’ü çalıştırdığında, yalnızca semantic search’ten çok daha iyi sonuçlar alırsın. BM25 algoritması, özellikle incident ID gibi nadir terimleri içeren bölümlere öncelik verir.

Sonuçların artık Software Engineering ve Cybersecurity bölümlerine doğru şekilde öncelik verdiğine dikkat et — her ikisi de aradığın incident ID’yi gerçekten içeriyor.

Bu neden daha iyi çalışır

BM25 birebir eşleşmeleri bulmada başarılıdır çünkü:

  • Nadir, spesifik terimlere daha yüksek ağırlık verir
  • Search’e değer katmayan yaygın kelimeleri görmezden gelir
  • Anlamsal anlam yerine term frequency’ye odaklanır
  • Özellikle teknik terimler, ID’ler ve spesifik ifadeler için iyi çalışır

Temel fikir şu: iki search yöntemi tamamlayıcı güçlere sahiptir. Semantic search context ve anlamı kavrar, lexical search ise birebir terim eşleşmelerini kaçırmamanı sağlar. Bunları birleştirerek hem kavramsal sorguları hem de spesifik aramaları etkili şekilde ele alan daha sağlam bir search sistemi oluşturursun.

Sonraki adımda, birleşik bir hybrid search deneyimi oluşturmak için iki search sisteminin sonuçlarını nasıl birleştireceğini öğreneceksin.

Temel çıkarımlar

  • Semantic search bazen birebir terim eşleşmelerini kaçırır
  • BM25, term frequency ve nadir terim ağırlıklandırmasına dayalı klasik lexical search algoritmasıdır
  • Nadir terimler (ID, kod, isim) yüksek skor alır; yaygın kelimeler düşük
  • BM25 implementasyonu basittir: chunk → BM25Index → search
  • Hybrid search (semantic + lexical) en sağlam yaklaşımdır; iki yöntem birbirini tamamlar