関連度スコアリング
概要
テキスト検索スコアリングは、Table内の各行が与えられたクエリテキストにどの程度関連しているかを測定します。
フルテキスト検索述語(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 – Table内の平均行長
- k1、b – アルゴリズムの調整パラメータ
デフォルトパラメータ:
| Parameter | Default | デスクリプション |
|---|---|---|
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– Table内の総行数n– クエリ用語を含む行数
行の最終スコアは、すべてのクエリ用語のBM25スコアの合計です。
DorisでのScoringの使用
サポートされるインデックスタイプ
- トークン化された転置インデックス – BM25スコアリングをサポートします。
- トークン化されていない転置インデックス – 完全一致のみをサポートし、スコアリングは計算されません。
サポートされるクエリタイプ
MATCH_ANYMATCH_ALLMATCH_PHRASEMATCH_PHRASE_PREFIXSEARCH
クエリプッシュダウンルール
転置インデックスエンジンへのスコアリングプッシュダウンを有効にするには、以下の条件を満たす必要があります:
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スコアは正の値で上限がありません。相対的な大きさのみが重要です。
- 複数の用語 – 複数用語のクエリの場合、総合スコアはすべての用語スコアの合計です。
- 長さの影響 – 同じ用語を含む場合、一般的に短い行の方が高いスコアを受け取ります。
- 一致する用語なし – クエリ用語がTable内に存在しない場合、スコアは
0です。