推荐系统中负采样策略的剖析与实践
摘要 (Abstract)
负采样(Negative Sampling)是训练基于隐式反馈的现代推荐系统的核心技术。通过为观测到的正样本构建高质量的负样本,模型能够学习到用户的个性化偏好。然而,负采样的策略并非一成不变,其选择与推荐系统的阶段(召回、排序)、用户行为信号的解读以及业务目标紧密相关。本报告旨在系统性地剖析主流的负采样策略,解构不同用户行为信号(点击、曝光)的价值,并为召回与排序两个核心阶段提供明确、可行的实践建议。
1. 引言
在推荐系统中,用户与物品的交互记录(如点击、购买)通常只占整个用户-物品交互矩阵的极小部分,这构成了典型的隐式反馈场景。我们拥有大量的正样本(用户交互过的物品),但几乎没有确切的负样本(用户明确表示不喜欢的物品)。负采样技术通过从海量的未交互物品中构建负样本集,将问题转化为一个可监督的学习任务(如二分类或对比学习),从而让模型得以训练。本报告将重点探讨如何根据不同业务场景,设计最优的负采样策略。
2. 信号的解构:从用户行为中定义正负样本
在设计负采样策略前,首要任务是理解不同用户行为信号所蕴含的意义。
-
2.1. 强正样本 (Strong Positives)
- 定义:用户通过明确、高成本的行为表达了清晰意图。
- 示例:点击、购买、收藏、添加到购物车。
- 作用:这是模型学习用户核心兴趣的最可靠信号。
-
2.2. 弱信号:曝光未点击 (Weak Signals: Impressions without Clicks)
- 定义:物品被展示给用户,但用户未产生强交互行为。
- 解读 :这是一个模糊信号。它既可以被看作是 "弱正样本" (因为曝光系统本身已经进行了一轮筛选,认为该物品与用户"可能相关"),也可以被看作是 "潜在负样本" (因为用户最终没有点击)。如何使用这一信号,是策略设计的关键。
-
2.3. 未知/真负样本 (Unknown/True Negatives)
- 定义:用户从未见过的海量物品。
- 解读:绝大部分是用户不感兴趣的,但其中也包含了用户尚未发现的潜在兴趣点。
3. 召回阶段的负采样策略
目标 :追求高召回率(Recall)和广度(Breadth),从全量物品库中快速筛选出数百个候选物品。
-
3.1. 策略一:随机负采样 (Random Negative Sampling)
- 机制 :对于每个正样本(通常是点击),从全量物品库中随机抽取
K
个用户未交互过的物品作为负样本。 - 优点:实现简单,无偏地覆盖整个物品空间。
- 缺点:采样出的负样本大多是"简单负样本",与用户兴趣相差甚远。模型区分难度低,学习效率不高,可能导致收敛缓慢。
- 机制 :对于每个正样本(通常是点击),从全量物品库中随机抽取
-
3.2. 策略二:批内负采样 (In-Batch Negative Sampling)
- 机制:使用 InfoNCE 等对比学习框架。对于一个用户的正样本(点击),批次内所有其他用户的正样本都构成其负样本。
- 优点:极其高效,无需额外采样。负样本是其他真实用户交互过的物品,质量和难度都显著高于随机负样本,能有效提升模型学习个性化特征的能力。
- 缺点:效果依赖于足够大的批次大小(Batch Size)。
-
3.3. 策略三:关于曝光样本的使用探讨
- 观点A:曝光作为弱正样本
- 机制:将用户的"点击"和"曝光"记录都视为正样本,与随机负样本或批内负样本进行对比训练。
- 原理:此举能极大缓解正样本稀疏的问题,为模型提供更丰富的"相关性"信号。模型首先学习到一个"值得被曝光"的物品的大致范围,再从这个范围中学习更精细的"点击"偏好。对于提升召回的广度和多样性非常有益。
- 观点B:曝光作为困难负样本 - 需谨慎使用
- 机制:将用户的"点击"作为正样本,同时将该用户"曝光未点击"的物品作为困难负样本加入到负样本集中。
- 风险与权衡 :正如您的见解,此策略在召回阶段存在风险。召回的核心是"求全",而非"求精"。过度惩罚曝光样本,可能导致模型学会在"可能相关"的区域内进行规避,从而错误地过滤掉一些潜在兴趣点,最终损害召回率。因此,该策略虽然理论上能提升模型的区分度,但更建议在排序阶段或专门的预排序阶段使用。
- 观点A:曝光作为弱正样本
4. 排序阶段的负采样策略
目标 :追求高精度(Precision),对召回阶段给出的数百个候选物品进行精准打分和排序。
在排序阶段,我们拥有了高质量的训练数据,不再需要"采样"。
- 机制 :排序模型的训练集由召回阶段的输出和用户的真实反馈构成。对于所有被曝光 的候选物品:
- 正样本 (Label = 1) :用户最终点击的物品。
- 负样本 (Label = 0) :用户曝光但未点击的物品。
- 原理 :排序模型的任务非常明确:精准建模一个条件概率 P(Click | User, Item, Context)。它不再需要与海量的随机物品作对比,而是专注于在"看起来都还不错"的候选集内部,进行精细化的区分。此时,"曝光未点击"样本是定义决策边界最完美的、信息量最丰富的负样本。
5. 策略总结与建议
推荐阶段 | 核心目标 | 正样本策略 | 负样本策略 | 关键考量 |
---|---|---|---|---|
召回 (Recall) | 高召回率、广度 | - 首选 :点击 - 可选:点击 + 曝光 | - Baseline :随机负采样 - 推荐:批内负采样(其他用户的点击) | 避免因正样本稀疏导致模型泛化能力不足。谨慎使用曝光作为困难负样本,以防损害召回率。 |
排序 (Ranking) | 高精度、pCTR | 点击 | 曝光未点击 | 无需采样,训练数据天然形成。模型专注于在高质量候选集内进行精准区分。 |
6. 结论
负采样是推荐算法工程中的一门艺术,不存在唯一的"最优解"。最佳策略高度依赖于业务场景、数据特性和所处的推荐阶段。核心的设计原则是:负采样的难度和目标应与当前阶段的核心使命相匹配。在追求广度的召回阶段,应采用能帮助模型建立宽泛兴趣轮廓的策略;在追求精度的排序阶段,则应采用能帮助模型进行精细化区分的策略。对不同行为信号的深刻理解与巧妙运用,是打造高效推荐系统的关键。
修正"看不见的偏差"------推荐召回中的采样偏差与校正方法
摘要 (Abstract)
双塔模型结合批内负采样(In-Batch Negative Sampling)已成为现代大规模推荐系统召回阶段的事实标准。该范式通过解耦用户与物品塔的计算,实现了工业级的部署效率。然而,其高效的背后隐藏着一个深刻的陷阱:采样偏差(Sampling Bias) 。由于热门物品更频繁地出现在训练批次中,模型会过度地将其视为负样本,从而学习到抑制热门物品的错误偏好。本报告深度剖析了这一问题的成因与危害,并基于 Google 的经典论文《Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations》,详细阐述了其提出的**对数修正(LogQ Correction)**方案,最后总结了这一"双塔+批内负采样+偏差纠正"的业界标准蓝图。
1. 背景:双塔模型与批内负采样的双刃剑
在YouTube、淘宝等拥有海量物品库的平台,推荐系统普遍采用"召回+排序"的两阶段架构。召回阶段的核心使命是从千万甚至亿级的物品中,高效筛选出数百个用户可能感兴趣的候选集。
双塔模型(Two-Tower Model)因其卓越的性能和工程可行性,主导了这一领域。它分别为用户(Query)和物品(Item)构建独立的深度网络塔,将它们映射到同一个 embedding 空间。在服务时,可以预先计算好所有物品的 embedding 存入索引,当用户请求到来时,只需计算用户 embedding,再通过高效的近似最近邻(ANN)检索,即可完成召回。
为了训练双塔模型,业界普遍采用批内负采样 的策略。即对于一个正样本对 (用户 U, 物品 A)
,我们将该训练批次内的所有其他物品都视为用户 U 的负样本。这种方法无需从庞大的物品库中低效采样,简单而高效。然而,这把效率的"利剑"也带来了严重的副作用------采样偏差。
2. 核心问题:流行度偏差如何"毒害"模型?
批内负采样的基本假设是:一个批次内的物品可以近似看作是从全局物品分布中的一次随机采样。问题在于,真实世界中的物品流行度遵循长尾分布(Power-law Distribution)。
- 偏差的成因 :少数热门物品占据了绝大多数的用户交互。因此,在一个随机的训练批次中,这些热门物品出现的概率远高于长尾物品。
- 错误的归因 :在训练过程中,这些频繁出现的热门物品,会反复地、不成比例地 被当作不同用户的负样本。模型在最小化损失函数的过程中,会观察到一个虚假的统计规律:"这个物品(热门物品A)总是在负样本堆里出现,那么它大概率不是个好东西"。
- 最终的危害 :模型为了"走捷径"来降低损失,会学到一个简单粗暴的策略------抑制所有热门物品的得分 。它学到的不是"用户 A 不喜欢 热门物品 B",而是"所有热门物品都不好"。这严重损害了推荐的准确性,因为热门物品之所以热门,通常是因为其质量高、普适性强,本应是推荐系统的重要组成部分。
3. 解决方案:基于采样概率的对数修正 (LogQ Correction)
为了解决上述问题,论文提出了一种简单、优雅且理论完备的修正方法,其核心思想是:在计算损失时,对每个负样本的打分(logit)进行一次校正,为那些因"热门"而被误伤的负样本提供一次"申辩"的机会。
修正公式如下:
\[s_{\text{corrected}}(x_i, y_j) = s(x_i, y_j) - \log(p_j) \]
其中:
- \(s(x_i, y_j)\) 是原始的双塔模型计算出的用户 \(x_i\) 和物品 \(y_j\) 的相似度得分(logit)。
- \(p_j\) 是物品 \(y_j\) 在一个随机批次中被采到的概率,可以近似为其全局流行度。
直观解释:
这个公式的精髓在于 - log(p_j)
这一项。我们知道,损失函数的目标是拉高正样本的得分、压低负样本的得分。
- 对于一个热门 的负样本 \(y_j\),\(p_j\) 的值很大,因此 \(\log(p_j)\) 是一个较大的正数。修正后的得分 \(s_{\text{corrected}}\) 相当于在原始得分的基础上减去了一个较大的正数。
- 当损失函数试图压低 \(s_{\text{corrected}}\) 时,这个固有的惩罚项
log(p_j)
已经帮忙承担了"一部分责任"。模型不再需要过分压低真正的相似度得分 \(s(x_i, y_j)\)。 - 这就相当于告诉模型:"我知道这个负样本很热门(
p_j
很高),它出现在这里有一定偶然性。因此,我为你(模型)降低一点惩罚难度,你不需要那么'恨'它,只需要关注它和用户 \(x_i\) 之间真正的内容匹配度即可。"
通过这种方式,模型从学习"反热门"的虚假模式,被纠正到学习"用户与物品内容"的真实匹配关系上来。
4. 工程挑战:流式频率估计
该方案的一个关键前提是,我们需要准确估计出每个物品的采样概率 \(p_j\)。在像 YouTube 这样物品库动态变化、流行度实时波动的流式数据环境中,这是一个巨大的挑战。
为此,论文设计了一种创新的流式频率估计算法 (Streaming Frequency Estimation) 。其核心思想是:
- 不直接估计概率 \(p_j\),而是估计其倒数,即一个物品被连续两次采样到的平均步数间隔 。
- 使用哈希表来存储和查询海量的物品 ID,避免了维护一个固定的、巨大的词典。
- 采用在线移动平均 (Online Moving Average) 的方式,在每个训练步中实时更新物品的频率估计,使其能动态适应流行度的变化。
该算法轻量、可扩展、能与分布式训练框架(如 TensorFlow 的 Parameter Server 架构)无缝集成,是整个方案能够在工业界落地的关键。
5. 业界影响与实践蓝图
这篇论文提出的 "双塔模型 + 批内负采样 + 采样偏差纠正" 的三位一体方案,已被 YouTube 线上 A/B 实验证明可以显著提升用户参与度等核心指标。
它不仅为 YouTube 的大规模视频推荐召回系统提供了坚实的理论和工程基础,更重要的是,它为整个业界提供了一套构建大规模、内容感知、无偏召回系统的标准蓝图。至今,这套方法论仍在深刻影响着推荐、广告、搜索等领域的系统设计。
6. 结论
高效的训练方法往往伴随着"看不见的偏差"。批内负采样通过牺牲采样分布的无偏性换取了巨大的工程效率,但其引入的流行度偏差会严重误导模型训练。Google 的这篇工作精准地识别了这一痛点,并提出了理论完备、工程可行的对数修正方案。它提醒我们,在设计和优化推荐模型时,不仅要关注模型结构本身,更要深刻理解数据背后的采样过程,并通过巧妙的算法设计来纠正偏差,从而让模型真正学习到用户的个性化兴趣。