🧠 はじめに:なぜMMRが必要なのか?
レコメンドシステムや検索エンジンでは、ユーザーにとって関連性が高いコンテンツを出すことが最重要ですが、
「似たようなアイテムばかり出てくる」という課題にしばしば直面します。
たとえば、あるユーザーに対してランキングモデルがこんな商品を返したとします:
1位:iPhoneケース(黒)
2位:iPhoneケース(赤)
3位:iPhoneケース(青)
4位:iPhoneケース(透明)
5位:iPhoneフィルム
いくら「関連性が高い」とはいえ、これは**“退屈”なリスト**ですよね?
多様性がないと、ユーザーの発見(serendipity)や興味喚起の機会を失ってしまいます。
このような問題を解決するのが「MMR(Maximal Marginal Relevance)」というアルゴリズムです。
📘 MMRとは何か?
MMR(Maximal Marginal Relevance)は、情報検索やレコメンデーションの分野で使われる多様性を意識したランキング調整アルゴリズムです。
関連性の高いアイテムを選びながら、既に選ばれたアイテムとはできるだけ異なるアイテムを優先的に選ぶ、という考え方に基づいています。
🔢 MMRの数式と直感
MMRは次のように定義されます:
\text{MMR}(d) = \lambda \cdot \text{Rel}(d) - (1 - \lambda) \cdot \max_{d' \in S} \text{Sim}(d, d')
各要素の意味:
記号 | 意味 |
---|---|
d |
現在の候補アイテム |
S |
すでに推薦リストに入れたアイテム集合 |
Rel(d) |
ユーザーにとっての関連性(スコア) |
Sim(d, d') |
類似度(コサイン類似度など) |
λ |
関連性と多様性のバランスパラメータ(0〜1) |
🔁 MMRのアルゴリズム(擬似コード)
S = [] # 最終推薦リスト
C = 候補アイテム集合
while len(S) < k:
mmr_scores = {
d: λ * Rel(d) - (1 - λ) * max(Sim(d, s) for s in S)
for d in C if d not in S
}
d_max = argmax(mmr_scores)
S.append(d_max)
✔ ポイント:
- 最初は関連性スコアが一番高いアイテムを選ぶ
- 次からは、**“関連性が高くて、すでに選ばれたアイテムと似ていない”**アイテムを選んでいく
- λ を変えることで「関連性重視 or 多様性重視」のバランスを調整可能
📦 実用例:MMRをどこで使うのか?
✅ ニュース推薦
- 似たような記事ばかり並ばないように
- 「政治ニュース」→「経済」→「国際」などジャンルを分散
✅ 商品レコメンド
- 同じカテゴリの商品が続くのを避ける
- ユーザーに違うジャンルの商品との出会いを提供
✅ 検索結果の多様化
- 類似ページばかり上位に出ないように制御
✅ 自動要約・QA生成(NLP)
- 同じような文を並べすぎないように抑制
⚖ λ(ラムダ)の選び方
λ の値 | 意味 |
---|---|
λ = 1.0 | 完全に関連性だけを見る(通常のランキングと同じ) |
λ = 0.0 | 完全に多様性だけを見る(ランダムに近くなる) |
λ = 0.5 | 関連性と多様性のバランスをとる(実用的) |
最適な値はABテストやオフライン評価(NDCG, coverage, serendipityなど)でチューニングします。
🛠 実装Tips
-
Rel(d)
はランキングモデルのスコアなどをそのまま使えばOK -
Sim(d, d')
は:- アイテムのテキストやカテゴリのJaccard類似度
- Embedding(Word2Vec, BERT, Item2Vecなど)のコサイン類似度
- カテゴリや価格帯などの距離
Pythonでの簡単な類似度例(コサイン類似度):
from sklearn.metrics.pairwise import cosine_similarity
sim = cosine_similarity(embedding_d, embedding_d_prime)
✅ MMRのメリット・デメリット
項目 | 内容 |
---|---|
👍 メリット | 単純なランキングに多様性を加えるだけで使いやすい。既存システムに組み込みやすい |
👎 デメリット | 類似度計算が多いとやや重い。多様性を強くしすぎると関連性が下がる可能性も |
🗣 まとめ:MMRは「バランスを取る技術」
- MMRは「関連性だけでなく、多様性も意識する」ためのシンプルで強力なアルゴリズム
- λを調整することで、精度と多様性のバランスをコントロール可能
- 実サービスでも「飽きないレコメンド」の実現に活用されている
✨ 最後に一言で!
MMRは、**「ユーザーに“違う視点”を与えるためのスパイス」**です。関連性だけでなく、多様性も重視したいあなたにピッタリのアルゴリズム!