BM25とは
BM25とは、TF-IDFを改良した確率的情報検索モデル
読み: ビーエムニジュウゴ
文書の長さによるバイアスを補正し、単語の出現頻度に飽和関数を適用することで、より実用的なランキングスコアを算出する。Elasticsearchのデフォルトスコアリングアルゴリズムであり、レキシカル検索の事実上の標準。
かんたんに言うと
検索結果を「どれが一番関連性が高いか」の順番に並べるための計算式。TF-IDFの進化版で、長い文書が不当に有利にならないよう補正する。Elasticsearchで検索したとき、結果が関連度順に並ぶのはBM25のおかげ。
TF-IDFからの改良点
TF-IDFは単語が10回出現する文書と100回出現する文書でスコアが10倍違う。BM25は飽和関数を使い、出現回数が増えてもスコアの増加が緩やかになる。10回と100回の差は10倍ではなく2倍程度に抑えられる。文書の長さによる正規化も加わり、1,000語の文書と10,000語の文書を公平に比較できる。パラメータk1(飽和の速さ)とb(文書長の影響度)で挙動を調整する。
Elasticsearchでの実装
Elasticsearchは5.0以降でデフォルトのスコアリングをTF-IDFからBM25に切り替えた。k1=1.2、b=0.75がデフォルト値で、ほとんどのユースケースでこのまま使える。日本語検索ではkuromojiやsudachiの形態素解析と組み合わせる。スコアの計算過程はExplain APIで確認でき、なぜその文書が上位に来たのかを追跡できる。
ベクトル検索との併用
BM25はキーワードの一致で検索するため、同義語や言い換えには対応しない。ベクトル検索は意味の類似性で検索するため、キーワードが一致しなくても関連文書を返せる。両者を組み合わせたハイブリッド検索では、BM25スコアとベクトル類似度スコアをReciprocal Rank Fusion(RRF)で統合する。RAG構成ではハイブリッド検索がリトリーバーの標準になりつつある。
導入時の判断基準
Elasticsearchを使っているなら既にBM25は動いている。意識して設定を変える必要が出るのは、検索結果の品質に不満がある場合。k1を小さくすると出現頻度の影響が弱まり、bを0に近づけると文書長の影響がなくなる。商品名や型番の検索ではbを小さくすると精度が上がることがある。チューニングの前に、まず検索クエリの形態素解析が適切かを確認する方が効果的なことが多い。
BM25とTF-IDFの比較
| 比較項目 | BM25 | TF-IDF |
|---|---|---|
| ドキュメント長補正の有無 | 文書長の極端な増大による適合評価の飽和とバイアスを防ぎ評価を正規化する補正機能を導入 | 単に出現頻度と逆文書頻度の積であるため文書長が過小過大な場合などでペナルティが機能しない |
| スコア計算数理モデル | 現代のElasticsearchなど検索システムで実用的に高く実証されてきた強力なコミュニティ実績 | 古典的でシンプルすぎる数理計算モデルのため現代の高度な関連度順位検索要件には不向き |
| 実証コミュニティ実績 | BM25が提供する標準的な機能・インターフェース | TF-IDFが得意とする高度な対応機能やインターフェース |
TF-IDFの単純な出現率計算の限界を補正するために生まれたのがBM25です。基礎的な出現率のみに頼る素朴な検索ならTF-IDF、文書長の偏りを補正した現代的で実用的な関連度検索を行うならBM25が適しています。
当社の見解
当社はAI長期記憶システムを自社開発・運用している。開発のきっかけは、AIと経営戦略の壁打ちで出した結論がセッション切れで消えたことで絶望を感じた。1日かけて議論してきたことを振り返り、では事業計画書に落とし込むように指示を出したところ、「そのような記録はありません」と言われたことで、強烈な危機感を覚えこれは何としても解決しなければならない問題だと感じた。記憶がないAIは毎朝記憶喪失になる新入社員と同じだ。記憶があるAIは、前提条件を理解した上で本題に入れる。短いプロンプトで済むようになり、「前に言ったように実行して」と曖昧で短いプロンプトでも業務を遂行してくれる。同じことを繰り返し伝える回数も減り、開発業務でも同じミスを繰り返しにくくなり、人間の手戻りが減り、ストレスも減る。AIで本当に業務の質を上げるならば、記憶はマストである。
