Atlas Search’te Arama Skorları: BM25 Algoritmasının Derinlemesine İncelenmesi
MongoDB Atlas Search, veritabanı içinde güçlü tam metin arama yetenekleri sunar. Arama motorlarının temel amacı, kullanıcıya en alakalı sonuçları sunmaktır. Bu alaka düzeyini belirleyen kritik faktör arama skorlarıdır. Bu makalede, Atlas Search’ün arama skorlarını nasıl hesapladığını, temelini oluşturan BM25 algoritmasının detaylarını ve bu skorları nasıl optimize edebileceğinizi derinlemesine inceleyeceğiz.
Atlas Search ve Arama Alaka Düzeyi
Modern uygulamalarda kullanıcılar, arama kutusuna yazdıkları sorguların en doğru ve alakalı sonuçlarını anında beklerler. MongoDB Atlas Search, bu beklentiyi karşılamak için tasarlanmış, doğrudan MongoDB verileriniz üzerinde çalışan entegre bir arama çözümüdür. Ancak “alaka düzeyi” (relevance) göreceli bir kavramdır. Bir arama motoru, hangi belgenin belirli bir sorgu için diğerlerinden daha alakalı olduğunu nasıl belirler? İşte bu noktada arama skorları devreye girer.
Neden Arama Skorları Önemlidir?
Arama skorları, her bir arama sonucuna bir sayısal değer atayarak, sonuçların sorguyla ne kadar uyumlu olduğunu nicel olarak ifade eder. Yüksek skor, daha yüksek alaka düzeyi anlamına gelir. Bu skorlar sayesinde, Atlas Search sonuçları en alakalıdan en az alakalıya doğru sıralayabilir. Kullanıcı deneyimini doğrudan etkileyen bu sıralama, arama motorunun etkinliğinin temel göstergesidir.
Atlas Search’ün Rolü
Atlas Search, Lucene tabanlı bir arama motoru kullanarak gelişmiş tam metin arama yetenekleri sunar. Bu, karmaşık sorguları, fasetleri, vurgulamayı ve tabii ki sofistike alaka düzeyi skorlamasını mümkün kılar. Atlas Search, varsayılan olarak endüstri standardı olan BM25 (Okapi BM25) algoritmasını kullanarak arama skorlarını hesaplar.
Alaka Düzeyini Belirleme
Alaka düzeyi, sadece anahtar kelime eşleşmesinden ibaret değildir. Bir belgede terimin ne sıklıkta geçtiği, terimin tüm koleksiyonda ne kadar nadir olduğu ve belgenin uzunluğu gibi birçok faktör alaka düzeyini etkiler. BM25 algoritması, bu faktörleri matematiksel bir formülde birleştirerek kapsamlı bir skorlama sağlar.
BM25 Algoritmasına Giriş
BM25, “Best Match 25” anlamına gelir ve bilgi erişim alanında en yaygın kullanılan sıralama fonksiyonlarından biridir. Özellikle tam metin arama motorlarında, bir belgenin belirli bir sorguyla ne kadar alakalı olduğunu tahmin etmek için kullanılır. BM25, TF-IDF (Terim Sıklığı-Ters Belge Sıklığı) modelinin daha gelişmiş bir türevidir ve belge uzunluğunu ve terim sıklığı doygunluğunu daha gerçekçi bir şekilde ele alır.
BM25 Nedir?
BM25, bir sorgudaki her terim için ayrı ayrı bir skor hesaplar ve bu skorları toplayarak belgenin toplam alaka düzeyini belirler. Algoritma, terim sıklığı (bir belgedeki terimin kaç kez geçtiği) ve ters belge sıklığı (terimin tüm koleksiyonda ne kadar nadir olduğu) kavramlarını temel alır, ancak bu değerleri belge uzunluğu ve iki ayarlanabilir parametre (k1 ve b) ile normalize eder.
BM25’in Tarihçesi ve Evrimi
BM25 algoritması, 1990’ların ortalarında Stephen E. Robertson ve Karen Spärck Jones tarafından geliştirilmiştir. TREC (Text REtrieval Conference) gibi bilgi erişim yarışmalarında gösterdiği üstün performans sayesinde hızla popülerlik kazanmıştır. Günümüzde Elasticsearch, Solr ve Atlas Search gibi birçok modern arama motorunun temelini oluşturmaktadır.
Temel Prensip: Alaka Düzeyi Tahmini
BM25’in temel prensibi, bir terimin bir belgede ne kadar sık geçtiği ve tüm koleksiyonda ne kadar nadir olduğu arasındaki dengeyi bulmaktır. Bir terim belgede ne kadar sık geçerse, belgenin o terimle o kadar alakalı olma olasılığı artar. Ancak, çok sık geçen (örneğin “ve”, “bir” gibi) terimlerin alaka düzeyine katkısı düşük olmalıdır. Aynı zamanda, çok uzun belgelerin, kısa belgelere göre bir terimi tesadüfen daha fazla içerme olasılığı da hesaba katılmalıdır.
BM25 Formülünün Bileşenleri
BM25’in gücü, alaka düzeyini hesaplarken birden fazla faktörü dikkate alan matematiksel formülünde yatar. İşte bu formülün ana bileşenleri:
Genel BM25 formülü (bir sorgu Q ve bir belge D için):
Score(D, Q) = Σ (IDF(qi) * ((f(qi, D) * (k1 + 1)) / (f(qi, D) + k1 * (1 - b + b * (|D| / avgdl)))))
Burada:
qi: Sorgudaki i. terim.f(qi, D): Terim sıklığı (Term Frequency - TF), yaniqiterimininDbelgesinde kaç kez geçtiği.|D|: Belgenin uzunluğu (kelime sayısı).avgdl: Koleksiyondaki tüm belgelerin ortalama uzunluğu.k1: TF doygunluğunu kontrol eden bir parametre (genellikle 1.2 ile 2.0 arasında).b: Belge uzunluğu normalizasyonunu kontrol eden bir parametre (genellikle 0.0 ile 1.0 arasında).IDF(qi): Ters Belge Sıklığı (Inverse Document Frequency), yaniqiteriminin nadirliğini ölçen bir değer.
Terim Sıklığı (Term Frequency - TF) ve Önemi
Terim Sıklığı (TF), bir terimin belirli bir belgede kaç kez geçtiğini gösterir. Bir terim belgede ne kadar sık geçerse, o belgenin o terimle o kadar alakalı olma olasılığı artar. Ancak, TF'nin doğrusal bir katkısı yoktur; belirli bir noktadan sonra ek geçişlerin alaka düzeyine katkısı azalır (doygunluk). BM25 formülündeki (f(qi, D) * (k1 + 1)) / (f(qi, D) + k1 * (...)) kısmı, bu doygunluk etkisini modeller.
Ters Belge Sıklığı (Inverse Document Frequency - IDF) ve Seyreklik
Ters Belge Sıklığı (IDF), bir terimin tüm koleksiyonda ne kadar nadir olduğunu ölçer. Nadir terimler, sık geçen terimlere göre daha fazla bilgi taşır ve dolayısıyla alaka düzeyine daha fazla katkıda bulunmalıdır. Örneğin, "bilgisayar" terimi "ve" teriminden çok daha bilgilendiricidir. IDF değeri, bir terimin geçtiği belge sayısı azaldıkça artar. Formülü genellikle şöyledir:
IDF(qi) = log((N - n(qi) + 0.5) / (n(qi) + 0.5) + 1)
Burada N toplam belge sayısı, n(qi) ise qi teriminin geçtiği belge sayısıdır.
Belge Uzunluğu Normalizasyonu (DLN) ve 'b' Parametresi
Belge Uzunluğu Normalizasyonu (DLN), uzun belgelerin bir terimi tesadüfen daha fazla içerme eğilimini dengelemek için kullanılır. Uzun belgeler, kısa belgelere göre daha fazla kelime içerdiği için, bir sorgu terimini daha sık içerebilirler. DLN, bu etkiyi azaltarak, terim sıklığının belgenin uzunluğuna oranla değerlendirilmesini sağlar. b parametresi (0.0 ile 1.0 arasında), belge uzunluğunun skoru ne kadar etkileyeceğini kontrol eder:
b = 1.0: Belge uzunluğu normalizasyonu tam olarak uygulanır. Uzun belgeler, kısa belgelere göre daha az "ödüllendirilir".b = 0.0: Belge uzunluğu normalizasyonu uygulanmaz. Belge uzunluğu skoru etkilemez.0.0 < b < 1.0: Kısmi normalizasyon uygulanır.
Atlas Search'te varsayılan b değeri genellikle 0.75'tir.
k1 Parametresi: TF Doygunluğunu Kontrol Etme
k1 parametresi (genellikle 1.2 ile 2.0 arasında), terim sıklığı (TF) katkısının doygunluk noktasını kontrol eder. Düşük k1 değerleri, TF'nin skora katkısının daha hızlı doygunluğa ulaşmasını sağlar, yani bir terimin birkaç kez geçmesiyle bile maksimum katkıya ulaşılır. Yüksek k1 değerleri ise, TF'nin skora katkısının daha yavaş doygunluğa ulaşmasını sağlar, yani terimin çok daha sık geçmesi gerekir ki skora katkısı artsın. Atlas Search'te varsayılan k1 değeri genellikle 1.2'dir.
Atlas Search'te BM25 Uygulaması
Atlas Search, BM25 algoritmasını temel alarak arama sonuçlarını sıralar, ancak kullanıcıların bu süreci özelleştirmesine olanak tanıyan güçlü özellikler sunar. Bu özellikler, alaka düzeyini uygulamanızın özel ihtiyaçlarına göre ayarlamanıza yardımcı olur.
Alan Ağırlıklandırma (Field Weighting)
Atlas Search'te, farklı alanların (field) arama skoruna katkısını belirleyebilirsiniz. Örneğin, bir ürünün adında geçen bir anahtar kelimenin, açıklamasında geçen bir anahtar kelimeden daha önemli olduğunu düşünebilirsiniz. Bunu boost seçeneği ile yapabilirsiniz:
{
"$search": {
"text": {
"query": "akıllı telefon",
"path": {
"value": ["name", "description"],
"multi": {
"name": { "weight": 2 },
"description": { "weight": 1 }
}
}
}
}
}
Bu örnekte, name alanındaki eşleşmeler, description alanındaki eşleşmelerden iki kat daha fazla skor katkısı sağlar.
Boost Kullanımı ile Skorları Yönlendirme
boost, belirli bir sorgu teriminin veya alanın skorunu manuel olarak artırmak için kullanılır. Bu, belirli terimlerin veya alanların arama sonuçları üzerinde daha büyük bir etkiye sahip olmasını istediğinizde faydalıdır. Boost, doğrudan sorgu operatörleri içinde veya indeks tanımında belirtilebilir.
{
"$search": {
"text": {
"query": "indirimli ürünler",
"path": "tags",
"score": {
"boost": {
"value": 5
}
}
}
}
}
Bu sorgu, tags alanındaki "indirimli ürünler" eşleşmelerinin skorunu 5 kat artırır.
Analyzer'ların Skor Üzerindeki Etkisi
Analyzer'lar, metni indeksleme ve sorgulama sırasında işleyen bileşenlerdir (küçük harfe çevirme, kök bulma, stop word kaldırma vb.). Seçtiğiniz analyzer, terim sıklığını (TF) ve dolayısıyla BM25 skorunu doğrudan etkiler. Örneğin, "running" ve "runs" kelimelerini aynı köke indirgeyen bir analyzer kullanırsanız, bu iki kelime aynı terim olarak sayılır ve TF değerine katkıda bulunur. Yanlış analyzer seçimi, alaka düzeyini düşürebilir veya beklenmedik sonuçlara yol açabilir.
Skor Optimizasyonu ve İyileştirme Teknikleri
Atlas Search'te en iyi arama deneyimini sunmak için BM25 skorlarını anlamak ve optimize etmek kritik öneme sahiptir. İşte uygulayabileceğiniz bazı teknikler:
Doğru Analyzer Seçimi
Verilerinizin diline ve yapısına uygun bir analyzer seçmek, arama sonuçlarının alaka düzeyini önemli ölçüde artırır. Örneğin, İngilizce metinler için lucene.english, Türkçe metinler için lucene.turkish analyzer'larını kullanmak, kök bulma (stemming) ve stop word kaldırma gibi işlemlerle daha doğru eşleşmeler sağlar. Kendi özel analyzer'larınızı tanımlayarak da daha hassas kontrol sağlayabilirsiniz.
Synonym'ler ve Stop Word'ler
- Synonym'ler (Eş Anlamlılar): Kullanıcıların farklı kelimelerle aynı anlama gelen terimleri aramasına olanak tanır. Örneğin, "araba" arandığında "otomobil" içeren belgelerin de bulunmasını sağlayabilirsiniz. Bu, arama kapsamını genişleterek alaka düzeyini artırır.
- Stop Word'ler (Durak Kelimeler): "ve", "bir", "ile" gibi sık kullanılan ancak tek başına anlam taşımayan kelimelerdir. Bu kelimeleri indeksleme ve sorgulama sırasında kaldırmak, daha anlamlı terimlerin TF ve IDF değerlerinin öne çıkmasını sağlayarak skorlamayı iyileştirir.
Custom Score (Özel Skorlama) İmkanları
Atlas Search, BM25'in yanı sıra kendi özel skorlama mantığınızı da uygulamanıza olanak tanır. function operatörü ile belirli alanların değerlerine (örneğin, ürünün popülaritesi, yayın tarihi, fiyatı) göre skoru artırabilir veya azaltabilirsiniz. Bu, BM25'in sağladığı metinsel alaka düzeyini, iş mantığınıza özgü metriklerle birleştirmenize olanak tanır.
{
"$search": {
"text": {
"query": "en yeni ürünler",
"path": ["title", "description"]
},
"score": {
"function": {
"multiply": [
{ "score": "text" },
{ "path": { "value": "popularity", "undefined": 0 } }
]
}
}
}
}
Bu örnek, metin skorunu popularity alanının değeriyle çarparak nihai skoru hesaplar.
Pratik Bir Örnek ve Kod
Şimdi basit bir veri seti ve sorgu üzerinden Atlas Search'ün BM25 skorunu nasıl uyguladığını görelim.
Örnek Veri Seti
[
{ "_id": 1, "title": "Akıllı Telefon İncelemesi", "description": "En yeni akıllı telefon modellerinin detaylı incelemesi.", "popularity": 5 },
{ "_id": 2, "title": "Telefon Aksesuarları", "description": "Her türlü telefon için aksesuarlar.", "popularity": 3 },
{ "_id": 3, "title": "Tablet ve Akıllı Cihazlar", "description": "Akıllı cihazlar dünyasındaki yenilikler.", "popularity": 4 }
]
Basit Bir Atlas Search Sorgusu
"akıllı telefon" sorgusu için bir arama yapalım:
{
"$search": {
"text": {
"query": "akıllı telefon",
"path": ["title", "description"]
},
"highlight": {
"path": ["title", "description"]
}
}
}
Bu sorgu, her belge için bir score değeri döndürecektir. Belgeler, BM25 algoritmasına göre bu skorlara göre sıralanacaktır. Örneğin:
- Belge 1: "Akıllı Telefon İncelemesi", "En yeni akıllı telefon modellerinin detaylı incelemesi." - Hem başlıkta hem de açıklamada "akıllı telefon" geçiyor ve terim sıklığı yüksek. Bu belge en yüksek skoru alacaktır.
- Belge 3: "Tablet ve Akıllı Cihazlar", "Akıllı cihazlar dünyasındaki yenilikler." - Sadece "akıllı" kelimesi geçiyor, "telefon" yok. Skoru Belge 1'den düşük olacaktır.
- Belge 2: "Telefon Aksesuarları", "Her türlü telefon için aksesuarlar." - Sadece "telefon" kelimesi geçiyor, "akıllı" yok. Skoru Belge 1'den daha düşük, Belge 3'e yakın veya ondan farklı olacaktır, zira "akıllı" ve "telefon" terimlerinin IDF değerleri farklıdır.
Skorun Bileşenlerini Anlama
Atlas Search, her bir terimin (akıllı, telefon) her belgedeki TF ve IDF değerlerini hesaplar. Belge uzunlukları (|D|) ve koleksiyonun ortalama belge uzunluğu (avgdl) da dikkate alınır. Varsayılan k1 ve b parametreleri kullanılarak her terimin skora katkısı hesaplanır ve toplanarak nihai BM25 skoru elde edilir. Sorgu terimlerinin geçtiği alanlara uygulanan boost değerleri de bu hesaplamaya dahil edilir.
Sonuç
MongoDB Atlas Search'ün temelini oluşturan BM25 algoritması, modern arama motorlarının kalbinde yer alan güçlü ve esnek bir alaka düzeyi skorlama yöntemidir. Terim sıklığı, ters belge sıklığı, belge uzunluğu normalizasyonu ve ayarlanabilir parametreler sayesinde, kullanıcı sorgularına en uygun sonuçları sunar. Atlas Search, BM25'i varsayılan olarak kullanırken, alan ağırlıklandırma, boost ve özel skorlama fonksiyonları gibi özelliklerle bu algoritmayı uygulamanızın özel ihtiyaçlarına göre özelleştirmenize olanak tanır.
BM25'in detaylarını ve Atlas Search'teki uygulama şekillerini anlamak, arama sonuçlarınızın alaka düzeyini artırmak ve kullanıcı deneyimini optimize etmek için kritik öneme sahiptir. Doğru analyzer seçimi, synonym'lerin kullanımı ve stratejik boost uygulamaları ile Atlas Search'ün tam potansiyelini ortaya çıkarabilirsiniz.
SSS (Sık Sorulan Sorular)
- Atlas Search neden BM25 kullanıyor?
- BM25, bilgi erişim alanında yıllardır kendini kanıtlamış, yüksek performanslı ve endüstri standardı bir algoritmadır. Hem basitliği hem de karmaşık alaka düzeyi senaryolarını ele alma yeteneği nedeniyle tercih edilir.
- BM25 skorunu manuel olarak değiştirebilir miyim?
- Doğrudan BM25 formülünü değiştiremezsiniz, ancak Atlas Search'teki
boost,functionoperatörleri ve alan ağırlıklandırma (field weighting) gibi özelliklerle skorun hesaplanma şeklini ve nihai değerini etkileyebilirsiniz. - k1 ve b parametrelerini Atlas Search'te nasıl ayarlarım?
- Atlas Search, bu parametreler için varsayılan değerler kullanır (genellikle k1=1.2, b=0.75). Mevcut durumda bu parametreleri doğrudan sorgu veya indeks tanımı üzerinden ayarlama imkanı bulunmamaktadır. Ancak,
boostvefunctionoperatörleri ile benzer etkiyi farklı yollarla elde edebilirsiniz. - Analyzer seçimi BM25 skorunu nasıl etkiler?
- Analyzer'lar, metni indeksleme ve sorgulama sırasında işleyerek (token'lara ayırma, kök bulma vb.) terim sıklığını (TF) ve dolayısıyla BM25 skorunu doğrudan etkiler. Doğru analyzer, alakalı terimlerin eşleşmesini sağlayarak skoru artırır.
- Birden fazla alan üzerinde arama yaparken skor nasıl hesaplanır?
- Atlas Search, her bir alan için ayrı ayrı BM25 skorları hesaplar ve bu skorları birleştirir. Alan ağırlıklandırma (field weighting) kullanarak belirli alanların skora katkısını artırabilir veya azaltabilirsiniz.