【机器学习】深度学习推荐系统(二十九):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. 选择器调整:在最终选择时进一步调整

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


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

相关推荐
balmtv14 小时前
国内AI镜像站实测:GPT、Gemini、Claude三款旗舰模型技术比拼
人工智能·gpt
ywfwyht14 小时前
nvidia/PhysicalAI-Autonomous-Vehicles数据集
人工智能·自动驾驶
balmtv14 小时前
Claude 4.6国内镜像实测:编程技术硬核拆解
人工智能
Rorsion14 小时前
对优化器的改进
人工智能·机器学习
2601_9492210314 小时前
边缘智算加速重构算力格局,微模块技术筑牢低延时基础设施底座
大数据·人工智能·重构
木易 士心14 小时前
AI辅助开发:前端“加速器”还是后端“稳定器”?——基于项目类型与用户规模的实战指南
人工智能·后端
欧阳子遥14 小时前
OpenCV 复杂背景下的轮廓提取
人工智能·opencv·计算机视觉
Book思议-14 小时前
【数据结构实战】单向循环单链表判别条件理解
c语言·数据结构·算法
老鱼说AI14 小时前
CUDA架构与高性能程序设计:多维网格与数据
c++·人工智能·深度学习·神经网络·机器学习·语言模型·cuda
badhope14 小时前
GitHub超有用项目推荐:skill仓库--用技能树打造AI超频引擎
java·开发语言·前端·人工智能·python·重构·github