関連度スコアリング
概要
テキスト検索スコアリングは、テーブル内の各行が与えられたクエリテキストにどの程度関連しているかを測定します。
全文検索述語(MATCH_ANYやMATCH_ALLなど)を含むクエリを実行する際、Dorisは各行に対して数値スコアを計算し、クエリとの一致度を表現します。
このスコアはクエリ結果のランキングに使用でき、クエリに最も関連性の高い行が最初に表示されるようになります。
Dorisは現在、テキスト関連性スコアリングにBM25 (Best Matching 25)アルゴリズムを使用しています。
BM25アルゴリズム
BM25は、用語頻度、逆文書頻度、およびレコード長を考慮して、レコードがクエリ用語とどの程度一致するかを評価する確率的関連性アルゴリズムです。 従来のTF-IDFモデルと比較して、BM25はより高い堅牢性と調整可能性を提供し、長いテキストと短いテキストの間のスコア差を効果的にバランス調整します。
式
BM25スコアリングの中核となる式は以下の通りです:
score = IDF × (tf × (k1 + 1)) / (tf + k1 × (1 - b + b × |d| / avgdl))
ここで:
- tf – 現在の行におけるクエリ用語の頻度
- IDF – 逆文書頻度、全ての行において用語がどの程度稀少かを示す
- |d| – 現在の行の長さ(解析後のトークン数)
- avgdl – テーブル内の平均行長
- k1、b – アルゴリズム調整パラメータ
デフォルトパラメータ:
| Parameter | Default | Description |
|---|---|---|
k1 | 1.2 | 用語頻度がスコアに与える影響の強さを制御します。 |
b | 0.75 | 長さ正規化の強さを制御します。 |
boost | 1.0 | オプションのクエリレベル重み付け係数。 |
サポート統計:
IDF = log(1 + (N - n + 0.5) / (n + 0.5))
avgdl = total_terms / total_rows
ここで:
N– テーブルの総行数n– クエリ用語を含む行数
行の最終スコアは、すべてのクエリ用語のBM25スコアの合計です。
DorisでのScoringの使用
サポートされているインデックスタイプ
- Tokenized inverted index – BM25スコアリングをサポートします。
- Non-tokenized inverted index – 完全一致のみをサポートし、スコアリングは計算されません。
サポートされているクエリタイプ
MATCH_ANYMATCH_ALLMATCH_PHRASEMATCH_PHRASE_PREFIXSEARCH
クエリプッシュダウンルール
スコアリングプッシュダウンをinverted indexエンジンで有効にするには、以下の条件を満たす必要があります:
SELECT句にscore()関数が含まれていること。WHERE句に少なくとも1つのMATCH_*述語が含まれていること。- クエリがスコア結果に基づく
ORDER BY句を持つTop-Nクエリであること。
例
SELECT *,
score() AS relevance
FROM search_demo
WHERE content MATCH_ANY 'text search test'
ORDER BY relevance DESC
LIMIT 10;
このクエリは、検索語句に最も関連性の高い上位10行をBM25スコア順にランク付けして返します。
+------+-----------------------------------+---------+--------------+-----------+
| id | content | author | publish_date | relevance |
+------+-----------------------------------+---------+--------------+-----------+
| 1 | Full text search engine test demo | Alice | 2024-01-01 | 2.915228 |
| 7 | Text processing techniques | Grace | 2024-01-07 | 1.341931 |
| 5 | Performance test framework | Eve | 2024-01-05 | 1.341931 |
| 3 | Advanced search algorithms | Charlie | 2024-01-03 | 1.341931 |
+------+-----------------------------------+---------+--------------+-----------+
結果の解釈
- スコア範囲 – BM25スコアは正の値で上限がありません。相対的な大きさのみが重要です。
- 複数の用語 – 複数用語のクエリの場合、総スコアはすべての用語スコアの合計になります。
- 長さの効果 – 同じ用語を含む場合、短い行の方が一般的により高いスコアを受け取ります。
- 一致する用語なし – クエリ用語のいずれもテーブルに現れない場合、スコアは
0になります。