没什么是一次排序解决不了的,如果有,那就One more time
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相关推荐
- 【一级讲解】虚数的纸牌(欢乐斗地主)——桶排序解决错位连续问题
G-虚数的纸牌 链接:https://ac.nowcoder.com/acm/contest/3036/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K ...
- Excel碰到空行无法筛选排序解决方法
Excel碰到空行无法筛选排序解决方法 有时候excel可真心考人智商,一列中有空行,那么你就只能筛选排序首个空行前的内容了,解决方法来了,做个小记录,以防今后忘了. 1.在首列插入一列: 2.全选该 ...
- MySQL中文无法按照拼音首字母排序解决方法convert(name USING gbk)
问题如下: 使用默认的order by函数无法对中文数据按照首字母进行排序 SELECT * FROM `test_table` ORDER BY company_name,reply_room_na ...
- POJ 3618 - Exploration 不一样的排序解决办法
Description Bessie is traveling on a road teeming with interesting landmarks. The road is labeled ju ...
- elemet-ui后台表格自动排序解决办法
加上sortable="custom" <el-table-column prop="fdcName" label="组合名称" wi ...
- 基于visual Studio2013解决算法导论之012计数排序
题目 计数排序 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #in ...
- 贪心算法解决活动安排-Python实现(排序+贪心选择)
贪心算法解决活动安排 问题 问题概述 分析问题 解决问题 编程 编程流程以及数据类型选择 发现问题以及解决 最终实现 总结 程序缺陷以及完善 解题心路历程 问题 问题概述 设有n个活动的集合E={1, ...
- 需要排序的最短子数组长度
题目:给定一个无序数组,求出需要排序的最短子数组长度 例如:arr = [1,5,3,4,2,6,7] 返回4,因为只有[5,3,4,2]需要排序 解决这个问题可以做到时间复杂度为O(N),额外空间复 ...
- (数据结构与算法)插入排序和希尔排序
1. 插入排序 插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序 ...
最新文章
- js调整数组某些元素到指定位置顺序_Js数组里剔除指定的元素(不是指定的位置)...
- 图解Transformer,读完这篇就够了
- 近邻取样插值和其速度优化
- ubuntu 13.04 设置Dash中显示Eclipse
- pcl程序如何在linux上运行,Ubuntu系统安装PCL 1.9及以上版本
- 200支高校无人车赛队,华科为什么能赢?
- 测试数据库日期格式转换
- Zabbix 配置钉钉告警功能
- python中matplotlib库饼图_python 使用 matplotlib.pyplot来画柱状图和饼图
- unittest测试框架详谈及实操(一)
- 高速公路综合信息管理系统
- knowledge distillation 综述
- Photoshop-水印的制作方法
- AVX-512指令_mm512_shuffle_epi8分析
- NPOI设置Excel下拉选项
- MATLAB提示错误使用network,优化双隐藏神经网络出现错误使用 network/subsasgnne...
- spin_lock_bh使用
- 技术分享 | 如何计算 MySQL 的 QPS/TPS
- C语言程序中紧急情况,《C语言及程序设计》实践参考——紧急救援
- 一篇掌握3种不同vlan之间互联的方式(单臂路由+Vlanif接口)