作者 | Conor
整理 | NewBeeNLP
https://zhuanlan.zhihu.com/p/659719511
业界在负反馈领域已有不少探索,但鲜少有在流式召回模型中建模负反馈的研究。今天分享一篇来自谷歌RecSys'23的工作,探索如何在召回中引入负反馈建模
业界在负反馈领域已有不少探索,但鲜少有在流式召回模型中建模负反馈的研究。
目前召回算法主要的目标在于预测用户可能会喜欢什么,而不是预测用户不喜欢什么。所以很多时候召回模型在训练时都不会使用用户的负反馈信号,到了排序阶段才会利用用户的负反馈行为。
还有一些工作,将用户负反馈应用在特征、采样或其他辅助任务中,但很少有针对负反馈专门设计目标函数的工作。 所以当推荐系统和用户兴趣不匹配时,很难快速有效得调整模型预估结果。 尤其是对于低频场景、低活用户而言,负反馈的学习则更加重要。
本文则利用显式和隐式的负反馈,针对流式召回模型,提出一种「不推荐」(“not-to-recommend”)的损失函数。
除此之外,评估推荐系统对用户负反馈的响应也非常具有挑战性。 虽然通过A/B实验观测用户指标是一个金标准,但是知道推荐系统是如何响应用户负反馈的对于系统的可解释性至关重要。本文提出一个反事实的仿真评估系统,通过不同的label生成不同的推荐结果,比较负反馈后相似度的降低程度来评估响应的有效性。
本文使用的完整目标函数如下图,包含两个部分:正反馈部分和负反馈部分。相对于基线,唯一的改动就是提出了负反馈目标函数。而做法也很简单,就是用得到负反馈预估概率,并在负反馈的样本上计算log似然函数。
值得说明的是,这里的正反馈和负反馈不一定是同一个行为的1或者0,而可能是不同的行为。 比如,对于抖音这样的沉浸式短视频应用,正例可以是完整播放一次视频,而负例可以是dislike或者停留的时长。
其中,表示基于用户状态s预估用户和候选发生正反馈的概率,通过如下softmax方式进行计算。
在训练时,一般会在采样batch内而非全局候选上进行计算。在线上serving时,一般通过最近邻检索算法进行召回。
用来表示「不推荐」损失函数的另一种做法是引入用户的负反馈,并在softmax负采样中提升真实负反馈样本的权重(相比于softmax随机负例),但是 本文提出的方法将正例和负例的目标函数解耦,一方面方便调节正负例的损失函数比重,另一方面可以引入多种负反馈行为,并赋予差异化的样本权重 。
本文分别尝试了显式和隐式负反馈的建模。显式负反馈使用了「不喜欢」(dislike)行为,隐式负反馈使用了「划走」(skip)。前者使用二值标签,后者使用停留时长作为标签。
Dislike行为本身比较稀疏,但该方法仍然可以显著降低用户的「不喜欢」次数,但是对于用户的正反馈指标并没有太大的改善。
划走行为则相对稠密,可以带来显著得用户满意度和活跃度指标的提升。
在线的A/B实验虽然可以直接观察到用户满意度提升,或者不满意度下降,但是并不能直观地观测到用户发生负反馈后,推荐系统是否减少了相似内容地推荐,或者减少得程度。
本文设计了一个反事实的仿真系统来测试推荐系统对用户负反馈的响应。
测试的流程是:创建一个模拟用户,并交互k-1个物品,对于第k个物品而言,分别使用正反馈和负反馈得到两个推荐结果,然后比较两个推荐结果和第k个物品的相似度的差异。
简单理解一下,设计的目的就是观察第k个物品发生负反馈行为后,推荐系统是否推荐了更加不相似的物品,不相似的程度则以用户发生正反馈(比如较长的停留时间)后的推荐结果为基线。
论文以dislike为负反馈得到上图右侧的实验结果。当未使用负反馈信号时,模拟用户负反馈后未观测到任何响应,将负反馈信号加入到特征中,可以明显降低负反馈物品的相似度,但是降低程度相对有限,进一步进入负反馈label则可以大幅降低物品相似度。
[1] Top-k off-policy correction for a REINFORCE recommender system. 2019.
想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)