🚀

レコメンドシステム—— 再ランキング(Reranking)

2023/09/29に公開

シーリズの目次

レコメンドシステムのシーリズをここにまとめています。
https://zenn.dev/datasciencekun/articles/dc0f61c0ca7f8d

はじめに

ランキング時、類似したコンテンツ(例えば、同じトピックや同じタグを持つもの)は、ランキングモデルによって似たようなスコアが与えられ、結果セット内で近い位置に配置されます。このようなソート結果をユーザーに直接表示すると、ユーザーは似たようなコンテンツを何件も見ることになり、視覚的疲労を感じやすく、それがユーザーエクスペリエンスに悪影響を与える可能性があります。
そのため、ランキング結果はリランク(再ランキング)が必要です。

ユーザーエクスペリエンス

順番をシャッフル

同じカテゴリ、同じ著者、似たようなカバー画像を持つアイテムを分散させることは、ユーザーの疲れを防ぎ、システムの過度の個人化を防ぐのに役立ち、同時にユーザーの潜在的な興味を探索し捉えるのに役立ちます。これはユーザーエクスペリエンスと長期的な目標にとって非常に重要です。

通常、アイテムの分散は、入力として順序付けられたアイテムのシーケンスを受け取り、各アイテムに分離する必要があるいくつかの属性がある場合、類似の属性を分離したアイテムのシーケンスを出力することと定義できます。
分散は通常ルールベースで行われ、シンプルで制御可能ですが、アイテムの属性の列挙値が多いため、頻繁に更新が必要で、拡張性が低い可能性があります。

ルールベースのシャッフルには主に次の方法があります:

  1. バケット分割法:異なる属性のアイテムを異なるバケットに配置し、各バケットから順にアイテムを取り出す方法です。この方法は実装が簡単で、シャッフル効果が良いですが、末尾にアイテムが集中しやすいという欠点があります。元のシーケンスに大きな変更をもたらし、指標の低下を引き起こす可能性があります。複数の属性の組み合わせが難しく、拡張性も低いです。

  2. 重み付け分配法:各アイテムにスコアを定義し、計算式は以下の通りです:

その中で、Wは各属性の重みを示し、属性のシャッフル優先度を表します。Countは同じ属性のアイテムが既に何回出現したかを示します。f(x)は重み付けスコアで、これを低から高に並べ替えることで、シャッフルが完了します。この方法も実装が比較的容易であり、複数の属性の組み合わせを十分に考慮でき、拡張性も高いです。ただし、末尾にアイテムが集中しやすいという点に注意が必要です。

  1. スライディングウィンドウ法:制御可能な長さのスライディングウィンドウ(セッション)内で、同じ属性のアイテムが一定回数以上現れた場合、後続のシーケンス内で条件を満たすアイテムと位置を交換する方法です。この方法はローカルにのみ注意を払う必要があり、グローバルな計算は不要なため、計算量が低いです。同時に、元のシーケンスへの影響も比較的低く、関連性を最大限に保持します。

優先度の調整

優先度を持つ

特定のアイテムに関して、その露出時の優先度を確保することができます。例えば、新しいアイテム、人気のあるアイテム、有名なユーザーによる新しいリリースアイテムなど、それらに一定の優先度を付けて表示できるようにすることができます。

ウエイトの調整

一般、ビジネス運用の要求に応じて、迅速なリアルタイム介入が必要です。例えば、特定のカテゴリのアイテムの表示優先度を高める必要がある場合などです。

一般的に使用される方法は、ルールベースで、並べ替えた結果に対して、特定の属性ルールに一致するアイテムに一定のスコアを追加してランキングを上げる方法です。この方法はシンプルで実現可能で、リアルタイム性が高いです。ただし、調整の正確性が低く、個別化が難しいという欠点もあります。

個別化を向上させるために、機械学習ベースのアルゴリズムやリアルタイムのデータ分析を活用することも一考慮する価値があります。これにより、ユーザーの嗜好や行動に基づいて、より適切な優先度調整が行えるかもしれません。

Discussion