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: 文書長を平均文書長で割った値(長い文書ほど不利にする補正)k1、b: 上記のパラメータ
ベクトル検索・TF-IDF との比較
| BM25 | TF-IDF | ベクトル検索(埋め込み) | |
|---|---|---|---|
| 一致の種類 | 単語の一致(字面) | 単語の一致(字面) | 意味の近さ |
| 得意なクエリ | 固有名詞・型番・エラーメッセージ | 同左 | 言い換え・曖昧な質問・多言語 |
| 苦手なクエリ | 同義語・表記ゆれ | 同左 | 特定の文字列を正確に探す |
| 事前準備 | 転置インデックス | 転置インデックス | 埋め込みモデルとベクトル DB |
| コスト | 低い | 低い | 埋め込み生成と DB の費用がかかる |
RAG パイプラインでの位置づけ
ベクトル検索(セマンティック検索)が注目される中でも、BM25 はキーワードの完全一致や専門用語の検索で依然として強い。実務では BM25 とベクトル検索を併用し、RRF(Reciprocal Rank Fusion)でスコアを統合するハイブリッド検索が定番パターンになっている。
固有名詞や型番のような「意味」よりも「文字列の一致」が重要なクエリでは、ベクトル検索単体よりも BM25 を含むハイブリッド構成が安定した結果を返す。
実装手順(主な環境別)
| 環境 | 手順 |
|---|---|
| Elasticsearch / OpenSearch | 既定の類似度が BM25。日本語なら kuromoji や Sudachi の形態素解析アナライザーを設定する |
| PostgreSQL | 標準の全文検索は BM25 ではなく ts_rank 系。BM25 が必要なら拡張(ParadeDB の pg_search など)を使うか、アプリ側で計算する |
| Python | rank_bm25 ライブラリで数十行。小規模データや評価用に向く |
| ベクトル DB | Weaviate・Qdrant・Pinecone などはハイブリッド検索(BM25 系のスパース検索+ベクトル)を機能として持つ |
導入は「①テキストを分かち書きできるトークナイザを決める → ②転置インデックスを作る → ③BM25 で上位 N 件を取る → ④ベクトル検索の結果と RRF で統合する → ⑤評価セットで再現率を測る」の順で進める。
パラメータ調整の手順
k1 と b は既定値で始め、評価用のクエリと正解文書のセット(100 件程度)を用意して、再現率@10 などの指標を見ながら片方ずつ動かす。文書長のばらつきが大きいコーパスでは b を上げ、専門用語の繰り返しが意味を持つコーパスでは k1 を上げると改善することが多い。
日本語で使うときの注意
BM25 は「単語」の一致を前提とするため、日本語では分かち書きの品質がそのまま精度になる。形態素解析(kuromoji / Sudachi / MeCab)と N-gram の併用、表記ゆれ(全角半角・カタカナ長音)の正規化、同義語辞書の整備をセットで行う。
関連記事・用語
- ハイブリッド検索とは?ベクトル検索×全文検索で RAG 精度を上げる仕組みと実装
- ベクトルデータベースとは?仕組み・主要製品比較・RAG 活用
- RAG 構築の失敗パターン 10 選と回避策
- ハイブリッド検索 / RRF / セマンティック検索 / ベクトルデータベース / エンベディング
- 社内文書検索や RAG の設計・PoC はAI・DX サービスで支援している
よくある質問
- Q.BM25 とベクトル検索はどちらを使うべきですか?
- A.どちらか一方ではなく併用が基本です。固有名詞や型番の一致に強い BM25 と、言い換えや曖昧な質問に強いベクトル検索を RRF で統合するハイブリッド検索が、RAG の検索品質で最も安定します。
- Q.BM25 と TF-IDF の違いは何ですか?
- A.BM25 は TF-IDF に「出現回数の飽和」と「文書長の補正」を加えたものです。長い文書や同じ単語の繰り返しでスコアが過剰に高くなる TF-IDF の弱点を補正しており、主要な全文検索エンジンの既定になっています。
- Q.日本語でも BM25 は使えますか?
- A.使えますが、形態素解析やN-gram で正しく分かち書きすることが前提です。分かち書きと表記ゆれの正規化が不十分だと、単語が一致せずスコアが付きません。
この用語を扱う記事
- RAG 構築の失敗パターン10選と回避策 — 本番運用で起きる問題を事前に防ぐRAG構築で本番運用前後に起きやすい失敗パターン10選を解説。チャンク設計の誤り・検索精度の低下・ハルシネーション対策まで、実装前に知っておくべき回避策を具体的に紹介します。
- ベクトルデータベースとは?仕組み・主要製品比較・RAG活用まで徹底解説ベクトルデータベースの基本概念から、Pinecone・Weaviate・pgvectorなど主要製品の比較、RAGシステムへの活用方法まで、AI導入担当者向けにわかりやすく解説します。
- ハイブリッド検索とは?ベクトル検索×全文検索でRAG精度を上げる仕組みと実装ハイブリッド検索の仕組みをベクトル検索・BM25・RRFの観点から解説。RAGシステムの検索精度を高める設計パターンと実装時の注意点を実務目線でまとめます。
- Adaptive RAGとは?クエリ主導の動的検索でコストと精度を両立する方法すべての質問で検索を行う従来RAGの非効率を解消するAdaptive RAG(能動的検索)の仕組み・実装パターン・タイB2B企業への適用例を解説します。
関連用語

RRF
RRF(Reciprocal Rank Fusion)とは、複数の検索手法が返すランキング結果を統合するスコアリング手法である。各手法での順位の逆数を合算することで、異なるスコア体系を正規化なしに融合

Agentic RAG
Agentic RAG とは、LLM がエージェントとして検索クエリの生成・結果の評価・再検索の判断を自律的に繰り返すことで、単純な一問一答型 RAG では得られない回答精度を実現するアーキテクチャで

エンベディング
エンベディング(Embedding)とは、テキスト・画像・音声などの非構造化データを、意味的な関係性を保ったまま固定長の数値ベクトルに変換する技術である。

GraphRAG
ナレッジグラフとベクトル検索を組み合わせ、エンティティ間の関係性を活用して検索精度を向上させる次世代RAGアーキテクチャ。



