Personalized Re-ranking for Recommendation(ResSys'19)

说起排序,对排序的认知还停留在召回阶段召回的item经过粗排过滤,剩下较少的item在精排中打分,按epcm或者其他策略挑选出最终要曝光的item。重排是一种考虑到推荐items之间关系和影响的排序模式,常规的推荐系统仅仅考虑<user, item>对的角度,并不会考虑items间作为一个list进行推荐之后的互相影响

举个例子,排序模型往往都是point-wise的,一个DNN加丰富的user/item/上下文特征预估点击率,在召回的100个item候选集中排序取出Top10的item进行推荐展示。但是,在实际情况里,这10个item展示给用户时是会相互影响的,这样就导致排序模型线下预估与线上实际点击情况之间是有偏差的。

那么,产生这种情况的原因是什么呢?

首先是我们在排序阶段并没有考虑到item之间的影响,其次用户对不同场景(或者逻辑)下看到的item list的反馈是不同的。比如,在信息流场景中,如果展示的20个内容中有同一主题(理财科普),对于有点击意图的用户,类似的内容排在一起时,用户点击颜值较高或者知名大V的内容的概率会增大;对于没有点击意图的用户,展示给用户更加多样性的内容,更适合用户去探索与发现,这时推荐的多样性就变得更重要了。

Re-rank模型将常规rank模型的输出作为模型输入,强化item之间的关系以及item与用户的关系进行One more time排序。对于不同用户来说,list中item的分布应该具有比较大的差异。

PRM的模型结构,是一个比较传统的multi-head结构,输入Initial List是一个精排模型输出的推荐集合,然后依次经过输入层, 编码层和输出层三部分后,输出的Re-ranked List是重排序。

编码层目标在于整合对列表中物品的相互影响,以及用户行为和列表中物品的相互影响。这里利用Transformer中self-attention结构来实现任意两个Item的交叉,从而获得Item互相间的影响。

在Attention中, Query,Key和Value都是同一个输入的embedding矩阵,然后经过Multi-Head Attention。公式如下:

经过FFN增强模型和输入向量不同维度之间的交互,将多个Attention进行stack,组合成更复杂和更高维的交互信息。

经过FFN增强模型和输入向量不同维度之间的交互,将多个Attention进行stack,组合成更复杂和更高维的交互信息。

最后,以点击预估作为目标,通过Softmax和Cross-entropy进行训练后通过Score排序依次展示给用户。

其中D是展示给用户的items集合,y是用户是否点击。

我们知道,最常见的考虑时序性的模型是RNN和Transformer,所以经常把这两类模型用在重排模块,这是很自然的事情。一般的做法是:排序Top结果的物品有序,作为RNN或者Transformer的输入,RNN或者Transformer明显可以考虑在特征级别,融合当前物品上下文,也就是排序列表中其它物品,的特征,来从列表整体评估效果。RNN或者Transformer每个输入对应位置经过特征融合,再次输出预测得分,按照新预测的得分重新对物品排序,就完成了融合上下文信息,进行重新排序的目的。

除了本篇Re-Rank文章之外,炼丹笔记还分享了《Revisit Recommender System in the Permutation Prospective》一文,论文提出了两阶段的重排序框架PRS(Permutation Retrieve System),分别是PMatch阶段和PRank阶段,

PMatch一句话总结就是,把上百个item的排列都给list-wise模型预估排列分不现实,PMatch负责挑选出候选的排列。

PRank就比较简单了,先离线训练一个模型,该模型输入是一个长度为n的序列 (x1, x2, ..., xn),然后输入到Bi-LSTM里,就会得到n个隐向量,每个隐向量concat用户特征和序列中每个item的原始特征,过mlp预测点击率即可。

没什么是一次排序解决不了的,如果有,那就One more time

更多干货,请关注公众号:炼丹笔记

没什么是一次排序解决不了的,如果有,那就One more time相关推荐

  1. 【一级讲解】虚数的纸牌(欢乐斗地主)——桶排序解决错位连续问题

    G-虚数的纸牌 链接:https://ac.nowcoder.com/acm/contest/3036/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K ...

  2. Excel碰到空行无法筛选排序解决方法

    Excel碰到空行无法筛选排序解决方法 有时候excel可真心考人智商,一列中有空行,那么你就只能筛选排序首个空行前的内容了,解决方法来了,做个小记录,以防今后忘了. 1.在首列插入一列: 2.全选该 ...

  3. MySQL中文无法按照拼音首字母排序解决方法convert(name USING gbk)

    问题如下: 使用默认的order by函数无法对中文数据按照首字母进行排序 SELECT * FROM `test_table` ORDER BY company_name,reply_room_na ...

  4. POJ 3618 - Exploration 不一样的排序解决办法

    Description Bessie is traveling on a road teeming with interesting landmarks. The road is labeled ju ...

  5. elemet-ui后台表格自动排序解决办法

    加上sortable="custom" <el-table-column prop="fdcName" label="组合名称" wi ...

  6. 基于visual Studio2013解决算法导论之012计数排序

     题目 计数排序 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #in ...

  7. 贪心算法解决活动安排-Python实现(排序+贪心选择)

    贪心算法解决活动安排 问题 问题概述 分析问题 解决问题 编程 编程流程以及数据类型选择 发现问题以及解决 最终实现 总结 程序缺陷以及完善 解题心路历程 问题 问题概述 设有n个活动的集合E={1, ...

  8. 需要排序的最短子数组长度

    题目:给定一个无序数组,求出需要排序的最短子数组长度 例如:arr = [1,5,3,4,2,6,7] 返回4,因为只有[5,3,4,2]需要排序 解决这个问题可以做到时间复杂度为O(N),额外空间复 ...

  9. (数据结构与算法)插入排序和希尔排序

    1. 插入排序 插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序 ...

最新文章

  1. js调整数组某些元素到指定位置顺序_Js数组里剔除指定的元素(不是指定的位置)...
  2. 图解Transformer,读完这篇就够了
  3. 近邻取样插值和其速度优化
  4. ubuntu 13.04 设置Dash中显示Eclipse
  5. pcl程序如何在linux上运行,Ubuntu系统安装PCL 1.9及以上版本
  6. 200支高校无人车赛队,华科为什么能赢?
  7. 测试数据库日期格式转换
  8. Zabbix 配置钉钉告警功能
  9. python中matplotlib库饼图_python 使用 matplotlib.pyplot来画柱状图和饼图
  10. unittest测试框架详谈及实操(一)
  11. 高速公路综合信息管理系统
  12. knowledge distillation 综述
  13. Photoshop-水印的制作方法
  14. AVX-512指令_mm512_shuffle_epi8分析
  15. NPOI设置Excel下拉选项
  16. MATLAB提示错误使用network,优化双隐藏神经网络出现错误使用 network/subsasgnne...
  17. spin_lock_bh使用
  18. 技术分享 | 如何计算 MySQL 的 QPS/TPS
  19. C语言程序中紧急情况,《C语言及程序设计》实践参考——紧急救援
  20. 一篇掌握3种不同vlan之间互联的方式(单臂路由+Vlanif接口)

热门文章

  1. WPF richTextBox 滚动到某项
  2. HDU 4602 - Partition
  3. Execution Plan 执行计划介绍
  4. Java学习之日期学习
  5. asp.net代码中修改web.config节点
  6. 粒子滤波实现物体跟踪
  7. discuz中,修改admin密码
  8. 不同类型的开放获取大揭秘
  9. ISE简介及其下载 安装 和谐 与 卸载
  10. C++ pair(对组)用法