BM25 tam metin arama algoritmasını anlamak
(emschwartz.me)- BM25, kesin anahtar kelime eşleştirmesinin gerektiği tam metin aramada hâlâ yaygın olarak kullanılır ve vektör benzerliği aramasını tamamlayan hibrit aramanın bir ayağını oluşturur
- BM25, olasılığı doğrudan hesaplamadan belgeleri sıralamak için, sorgu terimi bazındaki ağırlıkları toplayarak daha ilgili görünen belgeleri öne yerleştirir
- Skor; IDF, belge içi terim sıklığı ve belge uzunluğu normalizasyonundan oluşur; nadir kelimeler daha güçlü yansıtılır, tekrar eden görünümler ise giderek daha az ödüllendirilir
k1tekrar eden görünümlere verilen ödülün azalma hızını,bise belge uzunluğu normalizasyonunun şiddetini ayarlar; genelliklek1=1.2~2,b=0.75kullanılır- BM25 skoru gerçek ilgililik olasılığı olmadığından genel amaçlı bir karşılaştırma değeri gibi kullanılması zordur; aynı belge koleksiyonu içinde karşılaştırıldığında anlamlıdır
BM25’in çözmeye çalıştığı arama problemi
- BM25 veya Best Match 25, tam metin aramada yaygın olarak kullanılan bir algoritmadır
- Lucene/Elasticsearch ve SQLite gibi sistemlerde varsayılan olarak kullanılır
- Son dönemde tam metin arama ile vektör benzerliği aramasını birleştiren hibrit arama yaygınlaştı
- Kişiselleştirilmiş içerik akışlarında yalnızca vektör benzerliği araması, kesin anahtar kelime işlemeyi karşılamakta yetersiz kalabilir
- İlgi alanı
Solid.jsise, yalnızca vektör benzerliği araması kullanıldığında Solid’den çok React ile ilgili içerikler daha fazla çıkabilir
- İlgi alanı
- Temel soru, bir belgenin BM25 skorunu birden fazla sorgu arasında karşılaştırarak o belgenin hangi sorguya en iyi uyduğuna karar verilip verilemeyeceğidir
Olasılık sıralama ilkesi ve BM25’in yaklaşımı
- Tam metin aramanın amacı, sorguya göre olası belge kümesi içinden en ilgili belgeleri bulmaktır
- Gerçek ilgililik kesin olarak bilinemediği için arama, belgeleri sorguyla ilgili olma olasılığına göre sıralamaya çalışır
- Bu fikir Probability Ranking Principle olarak adlandırılır
- BM25 gibi sözlük tabanlı aramalar yalnızca sorguyu ve belge koleksiyonu içindeki belgelerin özelliklerini kullanır
- Vektör benzerliği araması, harici metin derlemleriyle eğitilmiş embedding modellerini kullanarak sorgu ve belgelerin anlamını temsil edebilir
BM25 skorunu oluşturan bileşenler
- BM25, sorgu ve belge koleksiyonundan gelen çeşitli sinyalleri birleştirerek skoru hesaplar
-
Sorgu terimi
- Arama sorgusu birden fazla terimden oluşuyorsa, her terim için skor hesaplanır ve ardından toplanır
-
Ters belge sıklığı (IDF)
- Belirli bir arama teriminin tüm belge koleksiyonunda ne kadar nadir olduğunu gösterir
the,andgibi yaygın kelimelerin bilgi değerinin düşük olduğu varsayılır ve nadir kelimelerin önemi artırılır
-
Belge içi terim sıklığı
- Arama teriminin belirli bir belgede kaç kez geçtiğini yansıtır
- Aynı terim daha çok tekrarlandıkça ilgili olma olasılığının arttığı kabul edilir; ancak BM25 tekrar eden görünümlere azalan getiri etkisi uygular
-
Belge uzunluğu
- Uzun belgelerde, sırf uzun oldukları için arama terimleri daha çok geçebilir
- BM25, uzun belgelerin haksız biçimde yüksek skor almamasını sağlamak için belge uzunluğunu ortalama belge uzunluğuyla karşılaştırarak normalize eder
BM25 formülünün her bir bölümü
- BM25’in toplam skoru, belge
Dve sorguQiçin her sorgu terimiq_inin skorlarını toplama biçimindedirD: hedef belgeQ: tüm sorgun: sorgu terimi sayısıq_i: her bir sorgu terimi
-
IDF: Koleksiyonda nadir kelimeleri daha güçlü yansıtma
- IDF terimi, sorgu teriminin tüm belge koleksiyonunda ne kadar nadir olduğunu hesaplar
N: koleksiyondaki toplam belge sayısın(q_i): sorgu terimini içeren belge sayısıN - n(q_i): sorgu terimini içermeyen belge sayısı- Yaygın terimler birçok belgede geçtiği için skora etkileri küçülür
- Nadir terimler yalnızca az sayıda belgede geçtiği için skora daha güçlü yansıtılır
- Formüldeki
0.5ve1, terim çok nadir ya da çok yaygın olduğunda sonucun aşırı dalgalanmasını yumuşatma rolü oynar
-
Terim sıklığı: Tekrarı yansıtır ama sınırsız ödüllendirmez
- Belge içi terim sıklığı, belirli bir sorgu teriminin belirli bir belgede ne kadar sık geçtiğini yansıtır
f(q_i, D): sorgu terimiq_inin belgeDde geçme sıklığık1: genellikle1.2ile2arasında ayarlanan bir tuning parametresi- BM25, terim tekrarını skora yansıtır; ancak tekrar arttıkça ek skor artışının büyüklüğü azalır
k1, terim tekrarına verilen ödülün ne kadar hızlı azalacağını kontrol eder
-
Belge uzunluğu normalizasyonu: Uzun belgelerin avantajını ayarlama
- Belge uzunluğu normalizasyonu, hedef belgenin uzunluğunu koleksiyonun ortalama belge uzunluğuyla karşılaştırır
|D|: hedef belgenin uzunluğuavgdl: koleksiyonun ortalama belge uzunluğub: belge uzunluğu normalizasyonunun şiddetini kontrol eden bir tuning parametresi- Ortalamadan uzun belgelerde arama terimlerinin daha sık geçme olasılığı bulunduğundan, nihai formülün paydasında dezavantaj uygulanır
b=0olduğunda belge uzunluğu normalizasyonu kapatılır;b=1olduğunda tamamen uygulanırbgenellikle0.75olarak ayarlanır
BM25’in temel fikri
- BM25, Probability Ranking Principle’a dayanır; ancak belge ilgililiğinin gerçek olasılığını hesaplamak neredeyse imkânsızdır
- Aramada önemli olan kesin olasılık değerinden çok belgelerin sırası olduğundan, sıralamayı etkilemeyen terimler formülden çıkarılarak hesaplama pratik hâle getirilir
- Bu nedenle BM25, olasılığın kendisini değil ağırlıkları hesaplar
- Robertson/Sparck Jones Weight, ilgili belge sayısını ve sorgu terimini içeren belge sayısını kullanarak olasılığı tahmin etme yöntemidir
r: sorgu terimini içeren ilgili belge sayısıN: koleksiyondaki toplam belge sayısıR: koleksiyondaki ilgili belge sayısın: sorgu terimini içeren belge sayısı
- Bu yöntemin en büyük sınırlaması, önce hangi belgelerin ilgili olduğunu bilmek zorunda olmasıdır
“Çoğu belge ilgili değildir” varsayımı
- BM25’i geliştirenler, rastgele bir sorgu için belgelerin çoğunun ilgili olmadığını varsayar
- İlgili belge sayısının ihmal edilecek kadar küçük olduğu kabul edilirse
R = r = 0olarak alınabilir - Bu değer Robertson/Sparck Jones Weight formülüne yerleştirildiğinde, BM25’te kullanılan IDF terimine çok benzer bir biçim ortaya çıkar
- İlgililik bilgisini önceden gerektirmeden aynı teorik temeli koruduğu için BM25 çok daha pratik hâle gelmiştir
- Victor Lavrenko bunu "very impressive leap of faith" diye ifade eder
BM25 skorlarını karşılaştırmanın kapsamı
- BM25 skorlarını genel olarak doğrudan karşılaştırmak zordur
- 0 ile 1 arasında bir olasılık skoru üretmez
- Bir belgenin ilgili olma gerçek olasılığını tahmin etmeye çalışan bir algoritma da değildir
- Belirli bir koleksiyon içinde, sorguya göre ilgili olma olasılığı sırasını yaklaşık olarak çıkarmaya odaklanır
- Daha yüksek BM25 skoru, belgenin daha ilgili olma olasılığının yüksek olduğuna dair bir sinyaldir; ancak gerçek ilgililik olasılığı değildir
- Aynı belge koleksiyonu içindeki aynı belge için birden fazla sorgunun BM25 skorları karşılaştırılabilir
- BM25 her sorgu teriminin skorunu topladığı için, iki sorgu teriminin skorlarını karşılaştırmak ile iki tam sorgunun skorlarını karşılaştırmak arasında anlamsal bir fark olmadığı düşünülebilir
- Önemli kısıt aynı belge, aynı koleksiyon olmasıdır
- BM25, koleksiyon içindeki IDF’yi ve ortalama belge uzunluğunu kullanır
- Koleksiyon değişirse skorlar da değişebilir; bu yüzden zaman içinde skor karşılaştırması garanti edilmez
- Kişiselleştirilmiş içerik akışlarında, her kullanıcı ilgi alanı için tam metin arama çalıştırıp BM25 skorlarını karşılaştırarak hangi içeriğin hangi ilgi alanına daha iyi uyduğunu belirlemek için kullanılabilir
Daha fazla okuma
- BM25’in teorisi ve tarihine daha derinlemesine girmek için Elastic mühendisi Britta Weber’in 2016 tarihli Improved Text Scoring with BM25 sunumuna bakılabilir
- Stephen Robertson ve Hugo Zaragoza’nın The Probabilistic Relevance Framework: BM25 and Beyond çalışması, BM25’in olasılıksal ilgililik çerçevesini ele alır
- BM25 ile diğer tam metin arama algoritmalarının karşılaştırması Comparing full text search algorithms: BM25, TF-IDF, and Postgres yazısında görülebilir
1 yorum
Hacker News yorumları
Genel arama için https://typesense.org/ kullanıyorum; artık hibrit aramayı da desteklediği için deneyen var mı merak ediyorum
Typesense’in burada anıldığını görmek güzel; küçük ölçekli RAG projeleri için çoğu zaman çok uygun olur ama nedense pek bilinmiyor
Dağıtımı kolay, varsayılanları makul, dokümantasyonu iyi ve kümeleme de nispeten kolay; daha derine inmek gerektiğinde de yeterince performanslı ve güçlü
Ancak embedding modelini harici bir sağlayıcıdan kullanırsanız gecikme 500ms+ gibi saçma derecede yüksek oluyor; bu yüzden doğrudan küme içinde barındırmak daha iyi
Hibrit arama kalitesi iyi, fakat ayar seçenekleri çok sınırlı ve skorlar da sonuç kümesi içindeki sıralama dışında epey opak
Son dönemde vektör tabanlı semantik arama gelişmişken, bugünlerde anahtar kelime + semantik arama hibriti için kullanılan güncel arama stack’inin ne olduğunu merak ediyorum
Yakın zamanda, her birinde 10 serbest metin alanı bulunan yaklaşık 3 milyon anket aldık ve şirketin aksiyon alması gereken maddeleri bulmamız gerekiyordu
Birkaç küçük sınıflandırıcı model kullandık; ilk 10 bin kayıtta ortaya çıkan gürültüye bakıp yaygın kelimeleri elle çıkardıktan ve model yanıtlarına ağırlık verdikten sonra neredeyse kusursuz çalıştı
Bu tür işler “programlama”dan çok, çeşitli araçların kara kutu çıktılarını test vakalarına ve müşteriye iyi görününceye kadar ayarlamaya benziyor
Bu arada küçük bir sunucuda Node.js ile birkaç küçük Hugging Face modelini birbirine bağlayarak işledik
Sonuçlar genellikle karşılıklı sıra füzyonu (RRF) ile birleştiriliyor
RRF makalesi şaşırtıcı derecede basit olduğu için etkileyici; makale de yalnızca 2 sayfa: https://plg.uwaterloo.ca/~gvcormac/cormacksigir09-rrf.pdf
BM25 türü işler için Elasticsearch, basit ve hızlı vektör araması için Turbopuffer, belirli sorgu sonuçlarını önceden hesaplamak ya da fiyat gibi sık değişen dinamik özellikler için Redis de kullanılabilir
Bunları scatter/gather yaklaşımıyla birleştirmenin iyi olduğunu düşünüyorum
Arama stack’inin dışında neredeyse her zaman yeniden sıralama için bir çıkarım servisi katmanı olur; ideal durumda bu, diğer makine öğrenimi altyapılarına benzer basit bir servis haline gelir
Kullanıcı sorgusunu anlayıp “ID ile getir”i bir sisteme, “bulanık semantik arama”yı başka bir sisteme yönlendirmek gibi routing de neredeyse her zaman gerekir
Bunların veri yapıları çok farklıdır ve arama genelde birbirinden farklı kullanım senaryolarını genişçe kapsar
Her şeyi tek bir sisteme tıkıştırmak bence bir antipattern
Her sistem farklı iş yüklerine uygundur; yerleşik çıkarım özelliklerinin, makine öğrenimi mühendislerinin aşina olduğu genel makine öğrenimi araçlarının hızına yetişmesi zordur
Elasticsearch Learning to Rank ile denedim ama umutsuz bir işti
Yine de geniş kullanım senaryolarını tek bir stack ile çözme girişimleri arasında Vespa muhtemelen en iyisi
txtai’nin yazarı olarak, txtai Python’da arrays paketi aracılığıyla performanslı bir BM25 indeksi uygular ve terim frekansı vektörlerini SQLite’ta saklar
txtai’nin hibrit indeksleme yaklaşımı, BM25 skorları normalize edilmişse konveks kombinasyonu, normalize edilmemişse karşılıklı sıra füzyonu (RRF) destekler
[1] https://github.com/neuml/txtai
[2] https://neuml.hashnode.dev/building-an-efficient-sparse-keyw...
[3] https://neuml.hashnode.dev/benefits-of-hybrid-search
[4] https://github.com/neuml/txtai/blob/master/src/python/txtai/...
Kelime dağarcığı tabanlı arama (bm25, fuzzy search), semantik arama (embedding), yeniden sıralama (cross-encoder, karşılıklı sıra füzyonu), çeşitliliği sağlama ve lost-in-the-middle etkisini azaltmaya yönelik yeniden sıralama dahil olmak üzere çeşitli arama teknikleri kullanıyor
[1] Langroid - CMU/UW-Madison araştırmacıları tarafından geliştirilen çok ajanlı LLM framework’ü https://github.com/langroid/langroid
[2] DocChatAgent uygulaması -
https://github.com/langroid/langroid/blob/main/langroid/agen...
answer_from_docs metodundan başlayıp takip edebilirsiniz
Ayrıca Kadoa’nın kurucusuysanız, Kadoa-snack LLM ile ilgili HN tartışmalarını bulmak için her gün severek kullandığım araçlardan biri
Güzel yazı.
Bulması biraz daha zor bir arka plan bilgisi eklemek gerekirse, BM25, “Best Matching 25”in kısaltmasıdır; “best matching” de sorgudaki terimler ile belgedeki terimleri eşleştirerek sıralama ve terim ağırlığı veren bir formül anlamına gelir.
25 ise sadece bir sıra numarasıdır; öncesinde formülün 24 varyasyonu vardı, sonrasında da varyasyonlar oldu ama en iyi çalışan 25 numaralı olduğu için yayımlandı.
Stephen Robertson ve Karen Spärck Jones (IDF ile ünlüdür) tarafından tasarlandı ve ilk olarak Robertson’ın OKAPI bilgi erişim araştırma sisteminde uygulandı.
OKAPI sistemi, ABD NIST’in her yıl düzenlediği TREC’te (Text Retrieval Conference) yıllarca kıyaslandı; bu etkinlik arama motoru metodolojisinin uluslararası bir “dünya şampiyonası”na oldukça yakındır.
Ancak bu etkinliğin amacı kazanmaktan çok karşılaştırma ve karşılıklı öğrenmedir; her yıl kasım ayında Maryland, Gaithersburg’da düzenlenen, tavsiye edilesi bir etkinliktir.
“Bag of words” vektör uzayı modeli (terimlerin seyrek vektörleri) ve BM25’in ait olduğu olasılıksal model dışında, bir sorgu verildiğinde belge kümesini sıralamaya yarayan teorik çerçeveler şaşırtıcı derecede çoktur ve artmaya devam etmektedir.
Örneğin Divergence from Randomness, istatistiksel dil modelleme, Learning to Rank, kuantum bilgi erişimi, sinir ağı sıralaması gibi yaklaşımlar vardır.
ICTIR veya SIGIR gibi konferanslarda bugün bile zaman zaman tamamen yeni arama paradigmaları ortaya çıkar.
Buradaki “istatistiksel dil modelleme”, günümüzde popüler olan büyük dil modellerini ifade etmez; onlar “sinir ağı araması” kategorisine girer.
Ayrıca “Quantum IR” diye ararsanız, kuantum bilgi erişimi eğitim materyali yerine kızılötesi spektroskopi ya da aynı adlı bir çimento şirketiyle karşılaşabilirsiniz.
21. yüzyılda bile arama teknolojisinin böyle incelikleri var.
BM25’i ve alternatiflerini doğrudan karşılaştırmak istiyorsanız, University of Glasgow’da geliştirilen açık kaynaklı arama motoru ve araştırma platformu Terrier’i öneririm.
BM25, 25 yılı aşkın süredir var olmasına rağmen hâlâ aşılması zor bir temel çizgi olduğunu kanıtladı ve yeni yöntemler karşılaştırılırken sık sık referans noktası olarak kullanılıyor.
Daha yakın tarihli bir varyant olan BM24F, başlık, gövde, hiperlink gibi birden fazla alanı ve hipermetni işleyebilir.
Önerilen makale: Spärck Jones, K.; Walker, S.; Robertson, S. E. (2000). “A probabilistic model of information retrieval: Development and comparative experiments: Part 1”. Information Processing & Management 36(6): 779–808 ve devamındaki Part 2.
Ne yazık ki açık erişimli değil.
18’inde başladı, 22’sinde sona eriyor.
Ayrıntılar: https://trec.nist.gov/
Google ve Google Scholar’da aradım ama ilgili bir şey bulamadım.
Utanarak tanıtıyorum: https://github.com/jankovicsandras/plpgsql_bm25
https://github.com/jankovicsandras/bm25opt
https://github.com/softwaredoug/searcharray
Benzer bir amaçla, çok popüler olan Xing Han Lu’nun BM25S’ini de tanıtayım.
https://github.com/xhluca/bm25s
Çok sayıda metin ve PDF belgesini yönetmek için saf Python sarmalayıcı projesi olup olmadığını merak ediyorum.
Solr veya ElasticSearch’i düşündüm ama şu an yapmak istediğim iş için fazla ağır görünüyorlar.
SQLite BM25 kullandığı için pysqlite3 ile PyPDF2’yi birlikte kullanma seçeneğini değerlendiriyorum.
Konudan biraz sapıyor ama hibrit BM25 / vektör deposu / LLM uygulamaları geliştirmek için araç arayan çok kişi olacaktır diye düşünüyorum.
Belge uzunluğu normalleştirmesinde sözü edilen ortalama belge uzunluğunun medyan olup olmadığını merak ediyorum.
Aşırı uzun belgelerin ağırlığını düzgün şekilde düşürmek için medyan olması gerekir gibi geliyor; aksi hâlde çok uzun belgeler ortalamayı haksız biçimde yukarı çekmez mi?
Medyan kullanmak da ilginç bir deney olabilir.
Belge uzunluğu farklarının çok büyük olduğu bir arama veri kümesi biliyor musunuz?
Örneğin MSMarco’da uzunluklar oldukça düzenlidir.
Güzel yazı.
Bu tür problemleri matematiksel biçimde düşünmeyi ve bunları test etmeyi gerçekten öğrenmek istiyorum; önerebileceğiniz kaynak var mı?
Hibrit arama, arama sonuçları alakalılığı konusundaki eski bir sorunu çözer.
Anahtar kelimeler ile vektörler arasında sıralama füzyonu kullanarak çoğu durumda çalışan bir hibrit arama oluşturabilirsiniz.
BM25, 1970'lerde geliştirilmiş eski bir algoritma
Temelde kaba bir istatistiksel model ve günümüz istatistikçileri bundan çok daha iyisini yapabilir
Aramanın, öğrenme tabanlı yöntemlerin kesin biçimde hâkimiyeti altında olduğunu düşünüyorum
Elbette öğrenme, aramayı girdi olarak kullanabilir
Bunu hâlâ fark etmemiş ya da eski teknolojiyi mümkün olduğunca uzun süre korumak için teşviki olan çok kişi var; ama piyasa baskısı sonunda bunu değiştirecek
Düşmanca SEO savaşından kaçınmak için her arama sorgusuna “+reddit” eklememize neden olan teknoloji de bu değil mi?
Eski olması kötü olduğu anlamına gelmez
Bir icadın, keşfin ya da tekniğin yaşından çok faydasına bakmak gerekir; yaşa takılıp kalan bu tuhaf teknomerkezci tutum beni endişelendiriyor
Gerçek uygulamalarda BM25'in yerini alacak kadar üstün gördüğünüz somut modern istatistiksel yaklaşımlar hangileri?
Özellikle BM25'in açıkça ele almaya çalıştığı nadir terimler ve belge uzunluğu normalizasyonu gibi uç durumları nasıl ele aldıklarını merak ediyorum
Öğrenme tabanlı yaklaşımların etkileyici sonuçlar gösterdiğine katılıyorum; ancak aramanın öğrenme yöntemleri tarafından “kesin biçimde domine edildiği” ifadesinin tam olarak ne anlama geldiğini de daha fazla duymak isterim
Belirli benchmark'lardan mı, yoksa gerçek üretim örneklerinden mi söz ettiğinizi merak ediyorum
Birçok arama uzmanının buna katılmayacağını düşünüyorum
David Tippet (eski OpenSearch, şimdi Github) ve Nicolay Gerold'un harika podcast'inin başlığı şöyle:
“BM25 is the workhorse of search; vectors are its visionary cousin”
https://www.youtube.com/watch?v=ENFW1uHsrLM
Arama alanında çalıştığım süre boyunca sayısız trend ve AI ile ilgili teknoloji oldu
Şu anda devasa VC yatırımları almış vektör arama şirketleri, bir teknoloji evangelistleri ordusuyla belirli bir bakış açısını dayatıyor
Öte yandan Google gibi yerlerde “anlamsal arama”yı gerçekten çalıştıran elle kürasyonun ve temel, sıkıcı, manuel sınıflandırma sistemlerinin miktarı muazzam
Ancak bunlar seksi olmadığı için konferanslarda pek konuşulmuyor