推荐系统论文拾遗之1——DPP多样性控制

  • 背景
  • 解决方案
  • DPP多样性控制
  • 工程实践

背景

推荐系统大多会经过召回、粗排、精排和策略层后展示给用户,精排中大多数是以CTR为基础目标的。当给一个用户推荐内容时,往往可能造成某一个兴趣点的内容比较集中,虽然预估CTR会比较高,但未必能得到用户的青睐,主要原因在于用户的兴趣往往不是单峰的。比如一个用户可能会有综艺、美食、体育这三大类兴趣,但是在整个推荐系统中,综艺类的内容无论从先验还是后验,效果可能均优于美食和体育,系统给该用户推荐内容时,就容易导致经过排序模型后,Top内容大多都是综艺内容,美食或者体育会非常少。虽然用户有很强的综艺兴趣,但是只推综艺内容容易越推兴趣越窄,用户也容易产生审美疲劳。因此,在满足推荐准确性的同时,推荐结果的多样性也非常重要

解决方案

为了提升推荐结果的多样性,目前主要有这么几种方式:

  1. 启发式规则控制
    规则控制应该是最简单,最直接的控制手段。即我们可以规定每一次推荐结果中,某个类目的展示内容不超过多少、相邻两个item之间没有共有的标签和作者信息、不通刷次之间收尾衔接的内容不能有相同的标签和作者信息等。这种手段的实现方式也比较简单,可以直接根据排序的结果,从前往后进行贪婪式放置即可。但是只靠规则控制,规则较硬,一方面不太能做到预测准确性和多样性的有效折中,另一方面规则考虑的因素仅限于item的某几个属性,不能很好地衡量item之间的相似度。

  2. 算法控制
    我们的目标是在推荐结果准确性的基础上提升多样性,此时2个因素比较重要:user和item之间和相关性以及item与item之间的相似度。当我们只考虑准确性时,只需考虑user与item之间的相似度即可;当我们只考虑多样性时,只需要根据item与item之间的相似度,将推出结果尽量打散即可。一个优秀的推荐系统,给出的应该是一种折中手段,综合考虑u-i相关性及i-i相似度,MMR算法是比较直观的解决方式,其公式为:
    MMR:=argmax⁡Di∈R\S(λSim1(Di,Q)−(1−λ)(argmax⁡Dj∈SSim2(Di,Dj)))MMR: =arg\max\limits_{D_i\in R \backslash S}(\lambda Sim_1(D_i, Q) - (1 - \lambda)(arg \max\limits_{D_j \in S} Sim_2(D_i, D_j)))MMR:=argDiR\Smax(λSim1(Di,Q)(1λ)(argDjSmaxSim2(Di,Dj)))
    公式中:SSS 为已经筛选出的集合,R{R}R为全部候选集合, Q{Q}Q可以理解为User,Sim(D,Q)Sim(D, Q)Sim(D,Q)表示的是u-i相关性,Sim(Di,Dj){Sim(D_i, D_j)}Sim(Di,Dj)表示的是i-i相似度,即贪心地在R\SR \backslash SR\S中找到满足上述结果最大的 DiD_iDi
    除了MMR算法外,本文的主角DPP(Determinantal Point process)也是另外一种算法控制多样性的常用手段。

DPP多样性控制

DPP,即行列式点过程,是以最大化后验估计为目的,评估最有可能被点击的item集合。我们可以将每个item看成一个空间下的一维向量,使用向量张成的多边立方体体积衡量item集合出现的概率,而行列式的物理意义是每个向量围成的多边立方体体积,因此可以将MAP(最大后验概率估计)问题转化为求解行列式最大的问题。那么问题来了,这个行列式要怎么构建呢?
由于我们要综合考虑u-i相关性和i-i相似度,因此一种比较直接的方式是这样处理:L=Diag(ru)⋅S⋅Diag(ru)L = Diag(r_u) \cdot S \cdot Diag(r_u)L=Diag(ru)SDiag(ru),其中rur_uru表示u-i相关性,SSS为i-i相似度矩阵。在实际的应用中,rur_uru可以直接使用CTR预估的结果,或者经过多目标变换后的结果,SSS用于度量item之间的相似度,视不同场景而定,比如可以使用文本相似度、图片相似度等一系列特征。
那接下来为了求解这个最大的LLL,我们应该怎么做呢?常规可以想到的应该就是贪心算法了,遍历每一个没有被选中的item,选择增加这个item后新组成的LLL行列式最大的item,添加到候选队列中,然后再进行下一轮的遍历。
Hulu在2018年发表的论文:Fast Greedy MAP Inference for Determinantal Point Process to Improve Recommendation Diversity1,属于一种计算优化,根据LLL矩阵的半正定性,通过Cholesky变换,每次都候选集中选择一个item,使得整个取top k都过程可以增量进行更新,降低了计算复杂度。具体的公式不做详细推导,只是截图过来:
伪代码如下:

至于为啥可以这么迭代求解,推导如下(下次在找时间写个手工详细推导版的,先占个坑):
我们的目标是找到这样的jjj
LLL由于是个半正定型矩阵,因此可以做Cholesky分解:
LYg=VVTL_{Y_g} = VV^TLYg=VVT
如果新增一个item i{i}i,则LLL可以写为:
LYg∪i=[LYgLYg,iLi,YgLi,i]=[V0cidi][V0cidi]TL_{Y_g \cup i} = \left[ \begin{matrix} L_{Y_g} & L_{Y_g, i} \\ L_{i, Y_g} & L_{i, i} \end{matrix}\right] = \left[ \begin{matrix} V & 0 \\ c_i & d_i \end{matrix} \right] {\left[ \begin{matrix} V & 0 \\ c_i & d_i \end{matrix} \right]} ^ TLYgi=[LYgLi,YgLYg,iLi,i]=[Vci0di][Vci0di]T
接下来就开始截图了哈。。。。

工程实践

根据上面的伪代码还是比较容易写出真实代码的,网上也有很多开源代码,这边就不赘述了,但是我还是想说一下实际应用时的几个比较trick的点。

  1. ru{r_u}ru的选择
    正常情况下,我们能想到的就是使用精排得分表征useruseruseritemitemitem之间的关系,论文中提到,可以将ru{r_u}ru做一下平滑操作,即使用exp(αru)exp(\alpha {r_u})exp(αru)替代ru{r_u}ru,此时L{L}L变为:
    L=Diag(αru)⋅S⋅Diag(αru)L = Diag(\alpha r_u) \cdot S \cdot Diag(\alpha r_u)L=Diag(αru)SDiag(αru)
    其中α=θ2(1−θ)\alpha = \frac{\theta}{2(1 - \theta)}α=2(1θ)θθ\thetaθ作为一个超参数,可以手动权衡u-i相关性及i-i相似度。在我司的推荐场景中,这种做法也是优于直接使用rur_uru的。
  2. SSS的选择
    SSS用于描述i-i之间的相似度,在不同的推荐场景中,相似度的衡量方式不一样。如果是新闻推荐,文本相似度会非常重要,但是在视频推荐场景中,封面图相对会更重要一些,这两种当然都可以使用embedding进行cos距离计算来衡量。还有一种比较简单但是很有效的方法,使用Jaccard距离,这种算法泛化能力较差,也就意味着可以拉大item之间的相似度。比如我们可以将item的一些属性放到一个集合,计算该集合与其他item属性集合的共现量,作为相似度的衡量标准。具体使用哪种embedding效果更好,也是需要在自家产品上多实验的。
  3. 如何协同其他规则?
    一般情况下,DPP贪心筛选出的top k是可以直接作为推荐结果给用户展示的,但是实际应用中可能会有很多问题,比如会有强制运营的策略,会有扶植或保量的需求,这种情况下的解决方法可以有两种:一种是先产出DPP的列表,然后在此基础上直接执行规则;另一种是先执行规则,然后再填充DPP列表。第一种方法明显更简单一些,但是会造成运营位与常规推荐位衔接不太自然;第二种方法相对更软,只是处理逻辑会比较复杂。具体怎么实施,还是需要视场景各自选择。

  1. Fast Greedy MAP Inference for Determinantal Point Process to Improve Recommendation Diversity ↩︎

推荐系统论文拾遗之1——行列式点过程(DPP)多样性控制相关推荐

  1. SIGIR‘22 推荐系统论文之多样性篇

    2022推荐系统论文梳理系列 推荐系统相关顶会整理 IJCAI'22 推荐系统论文梳理 ICML/ICLR'22 推荐系统论文梳理 WWW'22 推荐系统论文之序列推荐篇 WWW'22 推荐系统论文之 ...

  2. SIGIR‘22 推荐系统论文之序列推荐(长文)篇

    2022推荐系统论文梳理系列 推荐系统相关顶会整理 IJCAI'22 推荐系统论文梳理 ICML/ICLR'22 推荐系统论文梳理 WWW'22 推荐系统论文之序列推荐篇 WWW'22 推荐系统论文之 ...

  3. 重读Youtube深度学习推荐系统论文,字字珠玑,惊为神文

    作者简介,王喆,硅谷高级机器学习工程师. 本文转载自知乎专栏 https://zhuanlan.zhihu.com/p/52169807 这里是王喆的机器学习笔记,每隔一到两周我会站在算法工程师的角度 ...

  4. 带你重读Youtube深度学习推荐系统论文,惊为神文

    来源:知乎专栏 作者:王喆 本文约5400字,建议阅读10+分钟. 本以为毫不起眼的地方,也藏着Youtube工程师宝贵的工程经验. 这里是王喆的机器学习笔记,每隔一到两周我会站在算法工程师的角度讲解 ...

  5. 对话推荐系统_RSPapers | 对话推荐系统论文合集

    随着大数据时代的飞速发展,信息逐渐呈现出过载状态.推荐系统,作为近年来实现信息生产者与消费者之间利益均衡化的有效手段之一,越来越发挥着举足轻重的作用.像今日头条.抖音这样的APP之所以如此之火,让人们 ...

  6. 【推荐系统】AAAI2022推荐系统论文集锦

    2022年第36届人工智能顶级会议AAAI论文列表已经放出,此次会议共收到9251篇论文提交,其中9020篇论文被审稿.最终录取篇数为1349篇,录取率为可怜的15%.由于境外疫情形势依然严峻,大会将 ...

  7. 【推荐系统】KDD2021推荐系统论文集锦

    嘿,记得给"机器学习与推荐算法"添加星标 一年一度的知识发现与数据挖掘顶级会议SIGKDD将于8月14日至18日在线上举行.据统计,今年共有1541篇有效投稿,其中238篇论文被接 ...

  8. 【学术相关】RSPapers | 工业界推荐系统论文合集

    嘿,记得给"机器学习与推荐算法"添加星标 随着大数据时代的飞速发展,信息逐渐呈现出过载状态.推荐系统,作为近年来实现信息生产者与消费者之间利益均衡化的有效手段之一,越来越发挥着举足 ...

  9. WWW2020推荐系统论文合集(已分类整理,并提供下载)

    文章来源于机器学习与推荐算法,作者张小磊 1   摘要 国际顶级学术会议WWW2020定在2020年4月20-24日于中国台湾举办.受COVID-19疫情影响(疫情赶紧过去吧),大会将在线上举行.今天 ...

最新文章

  1. spring boot项目 中止运行 最常用的几种方法
  2. Build Boost C++ libraries for x32/x64 VC++ compilers on Windows
  3. linux系统版本间的区别是什么?内核又是什么
  4. boot spring 接口接收数据_在 Spring Boot 中使用 Dataway 配置数据查询接口
  5. ACL 2021|CHASE: 首个跨领域多轮Text2SQL中文数据集
  6. 近期我们在读的那些优质论文,你不了解下?
  7. 机器学习物语(1):世界观设定
  8. 品牌管理-JSR303数据校验
  9. vue error:The template root requires exactly one element.
  10. Android 8.0 学习(14)---Android8.0适配分析
  11. 停航63天!湖北复航了,机票预订火爆程度堪比春运
  12. MFC 简单输出EXCEL - (OLE)
  13. 百度前端技术学院---vue动态数据绑定-3
  14. aix系统服务器限制端口访问,aix系统怎么查看端口是否开启
  15. 八位颜色代码查询_RGB颜色代码全表
  16. AppleScript开机自动登录ChinaUnicom
  17. zen cart产品页面伪静态后-c-.html,zencart .htaccess伪静态文件规则
  18. CEF3:用CEF3实现最简单的浏览器
  19. 豆芽菜推动大航海—不起眼的致胜因素之一
  20. torch.nn.Conv2d介绍

热门文章

  1. linux查看系统版本
  2. 想做好物流成本控制,得秉承这个思路
  3. php 保留小数点两位不四舍五入 bcdiv()
  4. APP流量变现的“快车”,你坐上了吗?
  5. Google街景车在台湾香港出现
  6. Java学习之路 第三章 流程控制
  7. 冒泡排序算法(Bubble Sort)
  8. FastDFS学习笔记 -- day04 与Nginx整合
  9. 【数据结构】kd树实现,范围查询,邻近查询笔记【1】2d树的构造
  10. Android音视频——MediaPlayerService