検索とランキング — 欲しい情報を上位に
検索エンジンは大量の文書から一瞬で候補を集め、関連度の高い順に並べて返します。その裏で働く3つの仕掛け — 単語から文書を逆引きする転置索引、文書の当てはまり具合を数値化するBM25、そして特徴を組み合わせて並べ替えるランキング — を、クエリをいじりながら順に動かして理解します。
1. 単語から文書を逆引き — 転置索引
「猫」を含む文書を探すのに、全文書を頭から読むのは非効率です。そこで前もって単語 → その単語を含む文書リストという辞書を作っておきます。これが転置索引(inverted index)。本の巻末の索引とまったく同じ発想です。
検索語をオン/オフしてみてください。選んだ語の文書リストを引き、AND なら共通部分(すべて含む)、OR なら和集合(どれか含む)を取ってヒット文書が決まります。
2. 当てはまり具合を測る — BM25
ヒットしただけでは順位は決まりません。「その文書がクエリにどれだけ当てはまるか」を点数にするのがスコアリングで、実務の定番が BM25 です。BM25 の勘所は2つ。
ひとつは TF(単語の出現回数)の飽和。同じ語が増えるほど点は上がりますが、だんだん頭打ちになります。1回目の出現は大きく効き、10回目はほとんど効きません。下のつまみで飽和の強さ(k1)を変えてみてください。
もうひとつは IDF(希少さ)。どの文書にもある「する」「こと」のような語はほとんど手がかりになりません。逆に珍しい語ほど重み(IDF)が大きくなります。次のランキングで、この2つが同時に効く様子を見ます。
3. 点数で並べ替える — ランキング
各文書の BM25 スコアを出したら、あとは高い順に並べるだけ。これが検索結果ページです。検索語を切り替えると、スコアの棒が伸び縮みして順位が入れ替わります。
棒の色分けは語ごとの寄与。珍しい語(レシピ)の寄与が大きく、ありふれた語(猫)は連呼されても飽和で伸び悩むのが見えます。「猫」を5回も書いた D6 が上位に来ないのがBM25の見どころです。
4. 特徴を学んで並べる — ランキング学習
現代の検索は、文字の一致度(BM25)だけでは並べません。新しさ・人気度・クリックされやすさなど多数の特徴(feature)を、機械学習で最適化した重みで足し合わせて最終スコアを作ります。これがランキング学習(Learning to Rank)です。
下のつまみで各特徴の重みを変えてみてください。「新しさ」を上げればニュースが、「人気度」を上げればまとめサイトが上位に来る — 何を重視するかで結果が変わります。
5. まとめ
- 転置索引:単語→文書リストの辞書。集合演算でヒット文書を高速に絞る。
- BM25:出現回数(TF)は飽和し、珍しい語(IDF)ほど重い。連呼や水増しに強い。
- ランキング:スコア順に並べて結果ページに。TF飽和のおかげでキーワード連呼は効かない。
- ランキング学習:新しさ・人気度など多数の特徴を、学習した重みで統合して並べる。