検索とランキング — 欲しい情報を上位に

検索エンジンは大量の文書から一瞬で候補を集め、関連度の高い順に並べて返します。その裏で働く3つの仕掛け — 単語から文書を逆引きする転置索引、文書の当てはまり具合を数値化するBM25、そして特徴を組み合わせて並べ替えるランキング — を、クエリをいじりながら順に動かして理解します。

1. 単語から文書を逆引き — 転置索引

「猫」を含む文書を探すのに、全文書を頭から読むのは非効率です。そこで前もって単語 → その単語を含む文書リストという辞書を作っておきます。これが転置索引(inverted index)。本の巻末の索引とまったく同じ発想です。

検索語をオン/オフしてみてください。選んだ語の文書リストを引き、AND なら共通部分(すべて含む)、OR なら和集合(どれか含む)を取ってヒット文書が決まります。

転置索引ルックアップ — 語を引いて文書を絞る
左=検索語(点灯=選択中)、右=文書。流れる線=選んだ語の文書リスト。緑枠+✓がヒット文書。AND にすると全部の語を含む文書だけ、OR は1語でも含めばヒットします。
POINT — なぜ一瞬で見つかるのか 転置索引があれば、検索は「語の文書リストを取り出して集合演算するだけ」で済む。全文書を走査する O(全文書量) が、ヒットしうる文書数ぶんの処理に激減する。文書リストを文書ID順に並べておけば、AND の共通部分も両リストを同時に舐めるだけで速く取れる。

2. 当てはまり具合を測る — BM25

ヒットしただけでは順位は決まりません。「その文書がクエリにどれだけ当てはまるか」を点数にするのがスコアリングで、実務の定番が BM25 です。BM25 の勘所は2つ。

ひとつは TF(単語の出現回数)の飽和。同じ語が増えるほど点は上がりますが、だんだん頭打ちになります。1回目の出現は大きく効き、10回目はほとんど効きません。下のつまみで飽和の強さ(k1)を変えてみてください。

TFの飽和 — 連呼しても頭打ち
青の曲線=BM25のスコア寄与(飽和する)、灰の直線=素朴に回数へ比例させた場合。緑の縦線が選んだ出現回数。k1 を小さくするほど早く頭打ちになります。

もうひとつは IDF(希少さ)。どの文書にもある「する」「こと」のような語はほとんど手がかりになりません。逆に珍しい語ほど重み(IDF)が大きくなります。次のランキングで、この2つが同時に効く様子を見ます。

score = Σ語  IDF ·  f·(k1+1) / ( f + k1(1−b+b·|d|/avgdl) ) f=文書中の語の出現回数、|d|=文書の長さ、avgdl=平均文書長、b=長さ補正。IDF は珍しい語ほど大きい

3. 点数で並べ替える — ランキング

各文書の BM25 スコアを出したら、あとは高い順に並べるだけ。これが検索結果ページです。検索語を切り替えると、スコアの棒が伸び縮みして順位が入れ替わります。

棒の色分けは語ごとの寄与。珍しい語(レシピ)の寄与が大きく、ありふれた語(猫)は連呼されても飽和で伸び悩むのが見えます。「猫」を5回も書いた D6 が上位に来ないのがBM25の見どころです。

BM25ランキング — スコア順に並び替わる
棒=各文書のBM25スコア、色=検索語ごとの寄与。上ほど上位。検索語をオン/オフすると棒が伸び縮みし、順位がなめらかに入れ替わります。上部にIDF(各語の重み)も表示。
注意 — キーワードの連呼は効かない 昔のSEOでは同じ語を大量に埋め込む「キーワードスタッフィング」が横行した。だがBM25ではTFが飽和するため、10回書いても3回書いた文書と大差ない。しかも長い文書は分母の |d|/avgdl で割り引かれる。薄く長い水増し記事はむしろ不利になるよう設計されている。

4. 特徴を学んで並べる — ランキング学習

現代の検索は、文字の一致度(BM25)だけでは並べません。新しさ・人気度・クリックされやすさなど多数の特徴(feature)を、機械学習で最適化した重みで足し合わせて最終スコアを作ります。これがランキング学習(Learning to Rank)です。

下のつまみで各特徴の重みを変えてみてください。「新しさ」を上げればニュースが、「人気度」を上げればまとめサイトが上位に来る — 何を重視するかで結果が変わります。

ランキング学習 — 特徴の重みで結果が変わる
棒=統合スコア、色=特徴ごとの寄与(青=関連度・緑=新しさ・橙=人気度)。重みを変えると順位が入れ替わります。実際はこの重みを、人手のクリックログなどから学習します。
POINT — 検索の二段構え 巨大なインデックスから BM25 などで数百件の候補を高速に絞り(第1段: 検索)、その少数に対して重い機械学習モデルで精密に並べ替える(第2段: リランキング)。速さと精度を両立するこの二段構えが、現代の検索・推薦の定石になっている。

5. まとめ

一歩先へ — キーワード検索とベクトル検索のハイブリッド BM25(キーワード一致)は「型番」や「固有名詞」の完全一致に強く、前レッスンのベクトル検索は言い換え・同義語に強い。両者は得意分野が逆なので、実務では両方の結果をRRF(Reciprocal Rank Fusion)などで混ぜるハイブリッド検索が主流になりつつある。さらに大規模言語モデルで最終段を並べ替える手法も広がっており、検索とAIの境界はどんどん溶けている。