Ranking Strategy
↑一般的な用語かどうかわからないが、mrsekut.icon
「検索結果の並び順を良い感じにするもの」
を総称する用語が欲しかったので設定した
③ 並び順(関連度順)の改善
課題
特定のクエリで、明らかに変な並び順になっているが、原因追いも後回しになっていた。
Elasticsearch クエリ生成ロジックが複雑すぎて、正しいソート指定を行うのが難しい状態。
バグ検知の仕組み(メトリクス監視)が弱く、リリース時に検知できていなかった。
やったこと
Elasticsearch への ソート指定のバグを修正。
クエリ生成部分を 部分的にリファクタリングし、正しいクエリを書きやすくした。
Metrics をモニタリングし、今後同様の事象があった場合に検知できるように整備。
結果
「牛乳」「豆腐」などで 目に見えて並びが改善(Before/After)。
CTR を 5.8% 向上。
自社での示唆
「特定クエリだけ露骨におかしい」は、実装バグ+複雑化したクエリレイヤーのサイン。
検索クエリ生成コードは「ロジックを足す前に一旦整理する」を習慣にした方がよい。
バグも「メトリクス監視 × 代表クエリセット」で早期検知できるようにしておく。
Algoliaは、
テキストマッチやフィルターを使って「検索ヒットするレコード」をまず選び、
次に「より良いレコードを上に出す」ために順位付け(ランキング)をします。
このとき、単純にスコアで並べるのではなく、「複数の基準」を順番に見ていって順位を決めるという仕組みになっています。
デフォルトのランキング基準(順番)
1. Typo
1. typo(タイプミス)数が少ない
2. Geo (if applicable)
2. ジオロケーション(位置情報)が近い
3. Words (if applicable)
3. クエリ内の単語がたくさんマッチしている
4. Filters
4. フィルタにマッチしている
5. Proximity
5. 単語間の距離が近い
6. Attribute
6. 最もよくマッチしている属性
7. Exact
7. 完全一致している単語数
この順番で比べていきます。
例えば:
typoが少ない方が勝つ
同じなら、位置情報が近い方が勝つ
それでも同じなら、フィルタで絞られた方が勝つ
…という感じで、だんだん細かく見ていく感じ。
GPT-4.icon
順序を決めるための具体的な軸・基準(ランキング基準)
Relevance score
→ ユーザのクエリとどれだけ関連しているか。
→ 伝統的なスコアリング関数の一つ。TF-IDFの発展系。いまでも強い。 Learning to Rank (LTR)
→ 機械学習ベースでランキング関数を学習する方法。
Click-through rate (CTR)
→ 過去のクリックデータに基づく人気度。
Personalization
→ ユーザ個人に合わせた並び替え。
Popularity
→ 人気順。たとえば購入数やアクセス数など。
Freshness
→ 新しさ順。ニュースとかに効く。
---
順序のつけ方に関する用語(技術や考え方)
Ranking model
→ 学習したランキングの「モデル」という呼び方。特に機械学習系。
Re-ranking
→ 一回ランキングしたあと、さらに別基準で並び替え直すこと。
Multi-objective ranking
→ 関連性・新しさ・人気など複数基準をバランスして並べる方法。
Diversification
→ 結果に多様性を持たせる工夫(例:全部似た商品ばかり並ばないようにする)。
Tie-breaking
→ スコアが同点だったときの並び順の決め方。
---
関連するフレームワーク・概念
Relevance ranking
→ 関連度ベースで並べる基本方針。
Learning to rank (LTR)
→ 上にも書いたけど、特に重要。LambdaMARTやRankNetみたいな手法が有名。
Scoring and sorting
→ 「スコアリングしてソートする」という超基本的なパターンの言い方。