【机器学习】深度学习推荐系统(二十九):X 推荐算法多样性打散机制详解

列表式重评分 vs 多样性打散:区别与联系

一、你的理解是对的,但不完全

你的理解基本正确 :列表式重评分确实是为了确保多样性。但更准确地说,它是多样性控制的一种方式,而不是传统意义上的"打散"。


二、两种多样性机制对比

2.1 列表式重评分(Listwise Rescoring)

本质调整分数,让多样性通过分数体现

工作方式

复制代码
候选列表(已按分数排序)
    ↓
按Key分组(如作者ID)
    ↓
组内按分数排序
    ↓
根据位置调整分数(衰减)
    ↓
重新按分数排序
    ↓
多样性自然体现

特点

  • 间接多样性:通过降低同组候选的分数来实现
  • 保留排序:仍然按分数排序,只是分数被调整了
  • 平滑衰减:使用指数衰减,平滑过渡
  • 位置感知:根据候选在组内的位置调整

示例

复制代码
排序前:
推文A(作者1,分数10.0)
推文B(作者1,分数9.5)
推文C(作者2,分数9.0)

列表式重评分后:
推文A(作者1,分数10.0 × 1.0 = 10.0)
推文C(作者2,分数9.0 × 1.0 = 9.0)
推文B(作者1,分数9.5 × 0.84 = 7.98)

最终排序:A → C → B(作者多样性)

2.2 多样性打散(Diversity Shuffling/MMR)

本质重新选择顺序,直接确保多样性

工作方式

复制代码
候选列表(已按分数排序)
    ↓
使用MMR算法重新选择
    ↓
score = relevance + diversityWeight × distance
    ↓
逐个选择最合适的候选
    ↓
直接打散,确保多样性

特点

  • 直接多样性:通过MMR算法直接选择多样化的候选
  • 重新排序:不依赖原始分数排序
  • 距离计算:基于嵌入向量计算距离
  • 贪心选择:逐个选择最优候选

示例(MMR算法):

复制代码
候选:
推文A(作者1,分数10.0,嵌入[0.8, 0.6])
推文B(作者1,分数9.5,嵌入[0.7, 0.5])
推文C(作者2,分数9.0,嵌入[0.9, 0.7])

MMR选择:
1. 选择A(分数最高)
2. 选择C(虽然B分数更高,但与A距离更远,多样性更好)
3. 选择B

最终顺序:A → C → B(直接打散)

三、X推荐系统中的多样性机制

3.1 多样性机制的层次

X推荐系统使用了多层多样性机制

复制代码
┌─────────────────────────────────────────────────────────┐
│  层次1: 列表式重评分(评分阶段)                          │
│  - AuthorBasedListwiseRescoringProvider                │
│  - CandidateSourceDiversityListwiseRescoringProvider   │
│  - ContentExplorationListwiseRescoringProvider          │
│  方式:调整分数,间接实现多样性                           │
└─────────────────────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────────────────────┐
│  层次2: 多样性重评分(评分阶段)                          │
│  - DiversityRescoringFeatureHydrator (MMR算法)          │
│  - CategoryDiversityRescoringFeatureHydrator            │
│  方式:使用MMR算法重新计算分数,直接实现多样性             │
└─────────────────────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────────────────────┐
│  层次3: 选择器调整(选择阶段)                            │
│  - SortFixedPositionContentExplorationMixedCandidates   │
│  - KeepTopKCandidatesPerCommunity                       │
│  方式:在最终选择时调整位置,确保多样性                    │
└─────────────────────────────────────────────────────────┘

3.2 列表式重评分 vs MMR多样性重评分

特性 列表式重评分 MMR多样性重评分
实现方式 调整分数 重新计算分数
算法 位置衰减 MMR(贪心选择)
输入 已有分数 相关性分数 + 嵌入向量
输出 调整后的分数 重新计算的分数
多样性保证 间接(通过分数) 直接(通过选择)
计算复杂度 O(n log n) O(n²)
适用场景 作者多样性、源多样性 内容多样性(嵌入)

3.3 实际使用

在代码中,两者是互补的:

scala 复制代码
// 列表式重评分(在 HeuristicScorer 中)
val rescorers = Seq(
  RescoreListwise(AuthorBasedListwiseRescoringProvider(...)),  // 列表式
  RescoreListwise(CandidateSourceDiversityListwiseRescoringProvider(...)),  // 列表式
  // ...
)

// 多样性重评分(在 postSelectionFeatureHydration 中)
override val postSelectionFeatureHydration = Seq(
  // ...
  ParamGatedBulkCandidateFeatureHydrator(
    TwhinDiversityRescoringParam,
    DiversityRescoringFeatureHydrator  // MMR算法
  ),
  ParamGatedBulkCandidateFeatureHydrator(
    CategoryDiversityRescoringParam,
    CategoryDiversityRescoringFeatureHydrator  // 类别多样性
  ),
)

四、为什么需要两种机制?

4.1 列表式重评分的优势

  1. 计算效率高:只需要分组和排序,复杂度低
  2. 参数简单:只需要衰减因子和最低值
  3. 易于理解:逻辑直观,易于调试
  4. 适合简单多样性:作者多样性、源多样性等

4.2 MMR多样性重评分的优势

  1. 更精确:基于嵌入向量计算相似度,更准确
  2. 全局优化:考虑整个候选列表,全局最优
  3. 适合复杂多样性:内容多样性、语义多样性等
  4. 可解释性强:距离计算直观

4.3 组合使用的效果

两者组合使用可以实现多层次多样性

复制代码
列表式重评分(作者多样性)
    ↓
MMR多样性重评分(内容多样性)
    ↓
最终结果:既保证作者多样性,又保证内容多样性

五、传统"打散" vs X的多样性机制

5.1 传统打散

定义:在排序后,通过规则重新调整位置

示例

复制代码
排序后:[A, B, C, D, E]
打散规则:同一作者不能连续出现
打散后:[A, C, B, E, D]

特点

  • 硬性规则
  • 可能破坏相关性排序
  • 简单直接

5.2 X的多样性机制

定义:在评分阶段就考虑多样性,通过分数调整实现

示例

复制代码
评分阶段:
- 列表式重评分:降低同作者推文的分数
- MMR重评分:考虑内容相似度

排序后自然多样性:[A, C, B, E, D]

特点

  • 软性调整(通过分数)
  • 保留相关性排序
  • 更复杂但更灵活

六、总结

6.1 你的理解

正确:列表式重评分确实是为了确保多样性

6.2 更准确的描述

列表式重评分是多样性控制的一种方式 ,它通过调整分数来实现多样性,而不是传统意义上的"打散"(重新排列位置)。

6.3 关键区别

维度 列表式重评分 传统打散
时机 评分阶段 排序后
方式 调整分数 调整位置
机制 位置衰减 硬性规则
效果 间接多样性 直接打散

6.4 X的多样性策略

X使用了多层次多样性机制

  1. 列表式重评分:通过分数调整实现简单多样性(作者、源等)
  2. MMR多样性重评分:通过算法选择实现复杂多样性(内容、语义等)
  3. 选择器调整:在最终选择时进一步调整

这种设计既保证了多样性,又保留了相关性排序,比传统打散更加灵活和有效。


结论 :列表式重评分本质上是多样性控制 ,但它是通过调整分数 而不是打散位置来实现的,这是它与传统"打散"的关键区别。

相关推荐
果粒蹬i2 小时前
使用 LangChain 与 CrewAI 实现 AI Agent 的多步任务规划(零基础入门)
人工智能·langchain
果粒蹬i2 小时前
RAG 技术进阶:GraphRAG + 私有数据,打造工业级问答系统
人工智能·cnn·prompt·transformer·easyui
得贤招聘官2 小时前
AI 驱动招聘变革:从流程电子化到决策智能化的跨越
人工智能
大江东去浪淘尽千古风流人物2 小时前
【SEVIS】An Efficient Schmidt-EKF for 3D Visual-Inertial SLAM
人工智能·机器学习·3d
腾视科技2 小时前
腾视科技AIBOX双版本重磅发布!本地安全与全球适配,解锁视频智能新可能
人工智能·科技·安全
Jinkxs2 小时前
AI - 测试工程师会被 AI 取代吗?我用 AI 测试工具干了 3 个月,结论很意外
人工智能·测试工具
hkNaruto2 小时前
【AI】AI学习笔记:什么是ReAct模式 ReAct模式详解:让AI学会思考与行动
人工智能·笔记·学习
康谋自动驾驶2 小时前
汽车多总线数据采集:挑战、架构与同步策略全解析
算法·自动驾驶·开发·数据处理·总线数据
熊猫钓鱼>_>2 小时前
【开源鸿蒙跨平台开发先锋训练营】[Day 3] React Native for OpenHarmony 实战:网络请求集成与高健壮性列表构建
大数据·人工智能·react native·华为·开源·harmonyos·智能体