从负反馈中学习并衡量序列推荐系统的响应能力
Google RecSys'23 ---Learning from Negative User Feedback and Measuring Responsiveness for Sequential Recommenders
一、问题背景与研究动机
在工业级推荐系统中,尤其是短视频与信息流场景,用户行为以隐式反馈为主。点击、长时观看通常被视为正反馈,而大量未点击、快速滑过、短停留(例如小于 3 秒)的行为,长期被简单地视为"负样本"或被忽略。
这种处理方式在早期阶段是可行的,但随着推荐系统规模扩大,其问题逐渐显现:
一方面,快滑行为并不等价于用户明确不喜欢,它可能由内容质量、首帧吸引力、位置曝光、用户当下注意力状态等多种因素共同决定;另一方面,如果直接将这些行为作为普通负样本参与训练,会导致模型在梯度层面被大量噪声信号主导,从而损害整体推荐质量。
本文关注的核心问题是:
如何在序列推荐系统中显式地学习"用户不希望再看到什么内容",而不是仅通过正反馈的反面来间接推断?
论文提出了一种清晰的答案:将负反馈建模为一个独立、可优化的目标------not-to-recommend,并引入"响应性(responsiveness)"这一指标来衡量模型是否真正学会了对负反馈作出反应。
二、负反馈建模的整体思路概述
传统序列推荐模型的核心目标是最大化下一个正交互物料的预测概率,其隐含假设是:
只要学好正反馈,负反馈自然会被压低。
然而,这种假设在工业场景中并不成立。原因在于:
- 负反馈并不是正反馈的对称事件
- 快滑等行为包含大量不确定性
- 模型从未被明确告知哪些内容不该推荐
本文的核心思想可以概括为一句话:
将负反馈从"训练噪声"提升为"显式监督信号",并直接优化模型不推荐这些内容的能力。
三、模型方法详解(核心)
3.1 序列推荐模型的基本结构
模型建立在标准的序列推荐框架之上。对于用户 \(u\),其历史交互序列为:
\[\mathcal{S}_u = [i_1, i_2, \dots, i_t] \]
通过序列编码器(如 RNN、Transformer 或其变体)将其映射为用户当前状态向量:
\[\mathbf{h}_u = f(\mathcal{S}_u) \]
每个候选物料 \(i\) 对应一个 embedding 向量 \(\mathbf{e}_i\)。
模型输出的是在当前状态下推荐某个物料的概率分布。
3.2 传统正反馈训练目标回顾
在只使用正反馈的情况下,模型通常优化如下目标:
\[\mathcal{L}_{pos} = -\log P(i^+ \mid \mathbf{h}_u) \]
其中:
\[P(i \mid \mathbf{h}_u) = \frac{\exp(\mathbf{h}_u^\top \mathbf{e}i)} {\sum{j \in \mathcal{I}} \exp(\mathbf{h}_u^\top \mathbf{e}_j)} \]
在大规模物料库中,实际训练会使用 sampled softmax 或近似方法。
这种目标函数的本质是:
提升正样本的相对排序位置,而非显式压制某些内容。
3.3 负反馈的正式建模:Not-to-Recommend Loss
论文的关键创新在于:
为负反馈定义一个独立的训练目标,而不是把它们混入负采样集合中。
设用户在时刻 \(t\) 对物料 \(i^-\) 产生了负反馈(例如快滑、显式不感兴趣),目标不再是"把它排得低一些",而是:
\[P(i^- \mid \mathbf{h}_u) \;\text{应该尽可能小} \]
对应的损失函数定义为:
\[\mathcal{L}_{neg} = -\log \left(1 - P(i^- \mid \mathbf{h}_u)\right) \]
直观解释是:
- 正反馈在"拉高"概率
- 负反馈在"压低"概率
- 两者在概率空间中形成明确的拉锯关系
最终的联合训练目标为:
\[\mathcal{L} = \mathcal{L}{pos} + \lambda \mathcal{L}{neg} \]
其中 \(\lambda\) 是负反馈权重,用于控制其影响强度。
3.4 输入特征如何承载负反馈信息
需要强调的是:
"作为特征"与"作为监督信号"是两个不同层面的设计。
在工业系统中,快滑时长、是否秒退等信息通常会进入特征侧,影响用户状态建模;但如果仅停留在特征层,模型并不会被强制学习"不推荐"。
本文的方法中,负反馈既可以作为输入特征的一部分,也可以作为训练标签直接参与 loss 计算。这使得模型在参数更新阶段能够收到明确的反向梯度信号。
3.5 参数更新与梯度传播路径分析
考虑负反馈损失对参数的影响:
\[\frac{\partial \mathcal{L}_{neg}}{\partial \mathbf{h}_u} = \frac{P(i^- \mid \mathbf{h}_u)}{1 - P(i^- \mid \mathbf{h}u)} \cdot \mathbf{e}{i^-} \]
可以看到:
- 当模型对负样本预测概率过高时,梯度会迅速放大
- 梯度会同时更新
- 用户序列编码器参数
- 负样本物料 embedding
这意味着模型不仅"记住这个用户不喜欢什么",也会在 embedding 空间中主动拉开用户状态与该物料的距离。
四、为什么不能直接把快滑样本当作普通负样本
从建模角度看,直接把快滑样本视为负样本存在三个根本问题:
-
语义不确定性
快滑不等价于不喜欢,噪声极高。
-
梯度主导问题
快滑样本数量远超正样本,容易主导训练方向。
-
目标函数错位
负采样的目标是"区分正负",而负反馈建模的目标是"不再推荐"。
本文通过 not-to-recommend loss 将"用户不想再看到"这一语义直接写入目标函数,从根本上解决了上述问题。
五、实验结果与工业验证要点
图 (a):引入显式负反馈建模后,用户点不喜欢的比例有没有变化
图 (b):减少不喜欢内容,会不会"过度保守",反而降低整体体验
实验表明,引入显式负反馈建模后:
- 重复推荐相似内容的比例明显下降
- 用户对已明确拒绝内容的再次曝光显著减少
- 对整体点击率和观看时长无明显负面影响
这说明负反馈建模并不是与正反馈对立,而是对推荐目标的补充。
六、负反馈响应性的评估方法
论文提出"响应性"作为独立评估维度,用于衡量:
当用户给出负反馈后,模型是否真的减少了相关内容的推荐概率。
定义响应性(responsiveness),公式如图:直观解释,如果用户点了 dislike,后续推荐 应该远离当前内容,从而相似度应该显著下降,那么响应性就会越小。
观察实验结果
- baseline:不使用负反馈建模
- feature only:把 dislike / skip 当作输入特征,但不作为训练标签
- feature + training labels:同时作为特征 + not-to-recommend 训练目标
发现,
- baseline:几乎没有下降
- feature only:有一定下降,但幅度有限
- feature + training labels:相似内容下降 40%~60%
该指标弥补了传统离线指标(如 AUC、NDCG)无法衡量"避免推荐"的不足,在工业场景中具有重要价值。
七、方法优缺点与适用场景
优点
- 建模目标清晰
- 与现有序列推荐框架高度兼容
- 工程实现可控
局限性
- 依赖负反馈信号质量
- 权重 \(\lambda\) 需要精细调优
适用场景
- 短视频
- 信息流
- 内容消费速度快、负反馈频繁的业务
八、总结与实践启示
快滑行为可以作为负反馈,但不应被粗暴地当作负样本 。
工业级推荐系统需要的不是更多负样本,而是更准确的负反馈语义建模。
本文的核心启示在于:
只有当模型被明确告知什么不该推荐,它才真正具备用户体验层面的智能。