BM25とは

BM25
読み: ビーエムニジュウゴ

BM25とは、BM25(Best Matching 25)はTF-IDFを改良した確率的情報検索モデル

読み: ビーエムニジュウゴ

BM25(Best Matching 25)は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を小さくすると精度が上がることがある。チューニングの前に、まず検索クエリの形態素解析が適切かを確認する方が効果的なことが多い。

当社の見解

当社はAI長期記憶システムを自社開発・運用している。開発のきっかけは、AIと経営戦略の壁打ちで出した結論がセッション切れで消えたことで絶望を感じた。1日かけて議論してきたことを振り返り、では事業計画書に落とし込むように指示を出したところ、「そのような記録はありません」と言われたことで、強烈な危機感を覚えこれは何としても解決しなければならない問題だと感じた。記憶がないAIは毎朝記憶喪失になる新入社員と同じだ。記憶があるAIは、前提条件を理解した上で本題に入れる。短いプロンプトで済むようになり、「前に言ったように実行して」と曖昧で短いプロンプトでも業務を遂行してくれる。同じことを繰り返し伝える回数も減り、開発業務でも同じミスを繰り返しにくくなり、人間の手戻りが減り、ストレスも減る。AIで本当に業務の質を上げるならば、記憶はマストである。

同じ失敗を二度としないAIエージェント

今のAIは、聞けば何でも答えてくれます。
でも、セッションが切れた瞬間に前回の失敗を忘れます。

当社が開発しているAIは、過去の経緯を念頭に置いて、
聞かれる前に「それは前回うまくいきませんでした」と声をかけます。
人間にも同じ失敗をさせず、AI自身も繰り返しません。

古参の社員が横にいるように、黙っていても気づいてくれる。
それが、当社が考える本当のAI社員です。

相談する