BM25

ビーエムニジュウゴ

BM25

BM25(Best Matching 25)とは、単語の希少さ・文書内での出現頻度(飽和つき)・文書長を考慮してクエリと文書の関連度をスコアリングする確率的情報検索アルゴリズム。Elasticsearch などの全文検索の既定手法で、RAG ではベクトル検索と組み合わせるハイブリッド検索の片翼を担う。

TF-IDF の発展形として

BM25 は TF-IDF の考え方を拡張したランキング関数で、Elasticsearch や Apache Solr など主要な全文検索エンジンのデフォルトアルゴリズムとして長く使われてきた。「ある単語が文書中に多く出現するほど関連性が高い」という直感を、飽和関数で補正する点が特徴的だ。単語の出現回数が増えてもスコアが際限なく上がらず、一定のところで頭打ちになる。

パラメータは主に 2 つ。k1 は単語頻度の飽和速度を制御し、b は文書長による正規化の強さを調整する。デフォルト値(k1=1.2、b=0.75)のまま使われることが多いが、ドメイン固有のコーパスではチューニングで検索精度が改善する場合もある。

スコアの考え方

BM25 のスコアは、クエリに含まれる各単語について「その単語の希少さ(IDF)」×「文書内での出現頻度(飽和あり)」×「文書長の補正」を掛け合わせ、単語ごとに足し合わせたものだ。

score(D, Q) = Σ IDF(q) × f(q, D) × (k1 + 1) / ( f(q, D) + k1 × (1 − b + b × |D| / avgdl) )
  • f(q, D): 文書 D における単語 q の出現回数
  • |D| / avgdl: 文書長を平均文書長で割った値(長い文書ほど不利にする補正)
  • k1b: 上記のパラメータ

ベクトル検索・TF-IDF との比較

BM25TF-IDFベクトル検索(埋め込み)
一致の種類単語の一致(字面)単語の一致(字面)意味の近さ
得意なクエリ固有名詞・型番・エラーメッセージ同左言い換え・曖昧な質問・多言語
苦手なクエリ同義語・表記ゆれ同左特定の文字列を正確に探す
事前準備転置インデックス転置インデックス埋め込みモデルとベクトル DB
コスト低い低い埋め込み生成と DB の費用がかかる

RAG パイプラインでの位置づけ

ベクトル検索(セマンティック検索)が注目される中でも、BM25 はキーワードの完全一致や専門用語の検索で依然として強い。実務では BM25 とベクトル検索を併用し、RRF(Reciprocal Rank Fusion)でスコアを統合するハイブリッド検索が定番パターンになっている。

固有名詞や型番のような「意味」よりも「文字列の一致」が重要なクエリでは、ベクトル検索単体よりも BM25 を含むハイブリッド構成が安定した結果を返す。

実装手順(主な環境別)

環境手順
Elasticsearch / OpenSearch既定の類似度が BM25。日本語なら kuromoji や Sudachi の形態素解析アナライザーを設定する
PostgreSQL標準の全文検索は BM25 ではなく ts_rank 系。BM25 が必要なら拡張(ParadeDB の pg_search など)を使うか、アプリ側で計算する
Pythonrank_bm25 ライブラリで数十行。小規模データや評価用に向く
ベクトル DBWeaviate・Qdrant・Pinecone などはハイブリッド検索(BM25 系のスパース検索+ベクトル)を機能として持つ

導入は「①テキストを分かち書きできるトークナイザを決める → ②転置インデックスを作る → ③BM25 で上位 N 件を取る → ④ベクトル検索の結果と RRF で統合する → ⑤評価セットで再現率を測る」の順で進める。

パラメータ調整の手順

k1 と b は既定値で始め、評価用のクエリと正解文書のセット(100 件程度)を用意して、再現率@10 などの指標を見ながら片方ずつ動かす。文書長のばらつきが大きいコーパスでは b を上げ、専門用語の繰り返しが意味を持つコーパスでは k1 を上げると改善することが多い。

日本語で使うときの注意

BM25 は「単語」の一致を前提とするため、日本語では分かち書きの品質がそのまま精度になる。形態素解析(kuromoji / Sudachi / MeCab)と N-gram の併用、表記ゆれ(全角半角・カタカナ長音)の正規化、同義語辞書の整備をセットで行う。

関連記事・用語

よくある質問

Q.BM25 とベクトル検索はどちらを使うべきですか?
A.どちらか一方ではなく併用が基本です。固有名詞や型番の一致に強い BM25 と、言い換えや曖昧な質問に強いベクトル検索を RRF で統合するハイブリッド検索が、RAG の検索品質で最も安定します。
Q.BM25 と TF-IDF の違いは何ですか?
A.BM25 は TF-IDF に「出現回数の飽和」と「文書長の補正」を加えたものです。長い文書や同じ単語の繰り返しでスコアが過剰に高くなる TF-IDF の弱点を補正しており、主要な全文検索エンジンの既定になっています。
Q.日本語でも BM25 は使えますか?
A.使えますが、形態素解析やN-gram で正しく分かち書きすることが前提です。分かち書きと表記ゆれの正規化が不十分だと、単語が一致せずスコアが付きません。

この用語を扱う記事