作者 | 雨下

整理 | NewBeeNLP

大家好,这里是NeeBeeNLP。今天分享学弟『雨下』的深度召回模型总结。他从毕业后,一直在公司里做召回模型的相关工作,尝试过大量的召回模型,并进行了大量的线上AB实验验证了这些这些模型上线的效果。感兴趣的同学可以文末下载论文了解具体的模型方法。

一、召回模型简述

推荐系统的架构一般大致分为召回和排序(包含粗排、精排)两个步骤,如图一所示。召回在英文中经常被写成“matching”或者“candidate generation“。

召回的主要任务是从大量的后续集中筛出一部分数据,然后输入到排序中。召回主要分为非模型召回和模型召回。非模型召回往往是非个性化的召回方法,比如热点召回等。模型召回现在大多数是深度学习的方法,因为引入了用户特征,因此是个性化的。

现在的推荐系统都采用多路召回,即包含多个召回方法。每个召回方法分别取出一定量的数据,合并后一起输入到排序中。采用多路召回的好处可以保证每种类型的数据都可以被推荐出来,比如热点、个性化、最近点击、关注等。召回中也可以包含多种深度召回模型。因为召回模型面对的是所有的候选集,计算量有限,因为模型能力也有限。多种不同类型的召回模型可以弥补彼此的缺陷,保证尽可能地取出用户感兴趣的数据。

图1:推荐流程

二、YoutubeDNN

论文《Deep Neural Networks for YouTube Recommendations》是谷歌团队发表的。论文提出了一种召回和一种排序模型。召回模型如图2所示。

模型的输入是用户的特征:看过的视频、搜索过的词条、年龄、性别等。通过神经网络产生用户向量。

  • Training阶段用向量去预测用户观看的视频,此时也会产生视频向量

  • Serving阶段用户的向量是实时产生的,视频向量是Training已经产生的

  • 线上召回时,用approximate nearest neighbors(ANN)方法和用户向量,在所有的视频向量中检索出最近的N各相近向量。

图2: YoutubeDNN模型

三、经典双塔模型

另一类经典的召回模型是双塔模型,其论文见《Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations》,方法见图3。

双塔是指产生用户和item的向量的两个神经网络,这两个神经网没有交互。用户侧的神经网络输入用户特征,item侧的神经网络输出item的用量。产生的向量先L2 normalization再点积。计算损失函数时,用了一种batch内的交叉熵。对于一个batch的数据,一个样本中只有一个用户与对应一个item是正样本,其它item都与这个用户匹配成负样本。

Batch内的交叉熵的一个问题是:热门的item(点击次数较多的)当成正样本的概率较大,因为更容易被召回。但是热门的item往往不能反映用户的兴趣。

因此作者提出了一个矫正的方法。在计算用户和item的相似度时会减去log(item被点积的频率)。其实这样计算往往可以增大用户对冷门item的相似度,减小对热门item的相似度。我也曾试过不加频率矫正,发现线上和线下指标都有明显的下降。

双塔模型时召回中最常用的方法,后续也有很多对双塔改进的方法。双塔模型应该是现在召回模型中应用最广的模型了。现有也有公司将双塔模型用于粗排中。

图3: 双塔模型

四、多向量召回

之前的深度召回模型给每个用户学习一个向量。然而,一个向量很难反映用户的多个兴趣。最近,由很多公司提出给用户学习多个兴趣向量。每个兴趣向量对应于用户的一种兴趣。在线上召回时,每个兴趣向量独立取出相同数量的item。

一个比较流行的多向量模型时MIND,论文《Multi-Interest Network with Dynamic Routing for Recommendation at Tmall》。该方法时阿里巴巴团队提出来的。模型框架见图4。

该方法首先提取出N个用户点击过的item,每个item都带有ID和一些附属特征。特征通过embedding后,再通过pool用一个单维的向量表示一个item。N个item的向量经过胶囊网络变为少量的兴趣向量。兴趣向量与个性化向量(other features经过embedding层)串联,再经由几层神经网络输入少量的用户多兴趣向量。

胶囊网络可以视为一个聚类的过程,将N个item向量聚成少量几个向量。在训练时,会用target item的向量与兴趣向量做attention,然后再将多个兴趣向量加权聚合成一个兴趣向量,之后再计算sampled softmax loss。

图4: MIND模型

另一个多兴趣向量召回模型是comirec(Controllable Multi-Interest Framework for Recommendati),其方法如图5所示。在计算用户的多兴趣向量时,该算法提出了两种方法:一种是胶囊网络。MIND的胶囊网络的投影矩阵在多个胶囊体中是公用的,而comirec是不共用的。另一个是self-attention方法,通过attention计算每个item向量到特定兴趣向量的权重,然后加权聚合item。在召回时,作者还提出了一种增强多样性的平衡函数,即统计item的不同类别数量。

我从线上实验的指标看,comirec与MIND并无太大区别。

图5: comirec模型

另一个最新的多向量召回模型是微软团队提出的Octopus(Octopus: Comprehensive and Elastic User Representation for the Generation of Recommendation Candidates),该方法可以为不同用户学习不同数量的兴趣向量。图6是该模型的框架图。

该方法首先会初始化多个channel向量。为了让每个兴趣向量召回的item差异大,Octopus会在训练时保证channel向量之间的正交性。Octopus会计算user history中的每个item与channel向量的attention权重,并将item放入到权重最大的channel里面,该channel视为被激活了。在每个被激活的channel里面,通过attention权重聚合item的向量。模型只输出聚合后的item向量。channel激活的个数就是用户兴趣向量的个数。Octopus还提出了两种方法让每个兴趣向量召回不同的item数量。

线上实验时,Octopus的点击率和召回的多样性高于MIND,但是曝光量低于MIND。

图6:Octopus模型

SINE(Sparse-Interest Network for Sequential Recommendation)也是最近被提出的多向量召回模型。与Octopus相似,SINE会先初始化多个channel向量(论文中叫做conceptual prototypes),在训练时也保证了channel向量的正交性。不同的是,SINE会通过self-attention选出最大的K个向量,因此每个用户的输出的兴向量个数是相同的。线下实验时,SINE结果没有Octopus好,因此最终没有上线该模型。

五、Transformer召回

最近开始探索如何用transformer结构做序列化召回模型。SASRec(Self-Attentive Sequential Recommendation )是一个比较早的应用transformer结构做推荐的,结构如图7所示。

用户的点击item会按照时间顺序排列,从左往右。序列化的item经过embedding层后输入到self-attention层。每个item只会与时间在前面的item计算注意力权重。经过transformer结构,也就是多个block,每个item的输出向量用于预测下一个点击的item。最后一个item的item向量用于预测target item。线上召回时也是用最后一次点击的item向量。

线上实验时,SASRec有不错的曝光量和高的点击率。

图7: SASRec模型

Bert4Rec(BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer)将self-attention的计算由从左到右变为双向的顺序,并且用了bert中mask的训练方法。线上时我也尝试使用了双向的self-attention计算,但没有取得显著的效果。

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)

参考文献

  • Deep Neural Networks for YouTube Recommendations

  • Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations

  • Multi-Interest Network with Dynamic Routing for Recommendation at Tmall

  • Multi-Interest Framework for Recommendation

  • Octopus: Comprehensive and Elastic User Representation for the Generation of Recommendation Candidates

  • Sparse-Interest Network for Sequential Recommendation

  • Self-Attentive Sequential Recommendation

  • BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer

总结下自己做过的深度召回模型相关推荐

  1. 基于多任务学习和负反馈的深度召回模型

    简介:召回结果的好坏对整个推荐结果有着至关重要的影响,最近的一系列实践和研究表明,基于行为序列的深度学习推荐模型搭配高性能的近似检索算法可以实现既准又快的召回性能:与此同时,用户在天猫精灵上还可以进行 ...

  2. 深度召回模型在QQ看点推荐中的应用实践

    导语:最近几年来,深度学习在推荐系统领域中取得了不少成果,相比传统的推荐方法,深度学习有着自己独到的优势.我们团队在QQ看点的图文推荐中也尝试了一些深度学习方法,积累了一些经验.本文主要介绍了一种用于 ...

  3. 推荐系统总结之深度召回模型(上)

    作者:一块小蛋糕 地址:https://zhuanlan.zhihu.com/p/267263561 整理:深度传送门 最近读完了李航.何向南的<Deep learning for matchi ...

  4. 推荐场景下融合多模态信息的内容召回模型

    本系列将系统介绍召回技术在内容推荐的实践与总结. 第一篇:2021召回技术在内容推荐的实践总结 第二篇:CMDM:基于异构序列融合的多兴趣深度召回模型在内容平台的探索和实践 第三篇:内容推荐场景下多模 ...

  5. CIKM 2021 | Deep Retrieval:字节跳动深度召回模型论文精读

    ©作者 | 杰尼小子 单位 | 字节跳动 研究方向 | 推荐算法 文章动机/出发点 这是一篇字节跳动发表在 CIKM 2021 的论文,这一项工作在字节很多业务都上线了,效果很不错.但是这篇文章整体读 ...

  6. 用lstm模型做预测_深度学习模型 CNN+LSTM 预测收盘价

    -- 本篇文章 by HeartBearting 上一篇浏览量很大,感谢各位的关注! 能够在这里分享一些实验,一起领略 数据科学之美,也很开心. 以后,这个实验的模型会不断深化. 之后,也会分享一些 ...

  7. 深度召回在飞猪旅行推荐系统中的探索和实践

    导读:大家好,我是来自飞猪推荐算法团队的里熙,今天给大家分享的是本团队在飞猪首页猜你喜欢推荐 Feeds 流的召回阶段做的一些优化工作. 今天的分享主要包括三个部分:第一部分是相关的一些背景介绍,第二 ...

  8. 4个提高深度学习模型性能的技巧

    点击上方"AI遇见机器学习",选择"星标"公众号 原创干货,第一时间送达 深度学习是一个广阔的领域,但我们大多数人在构建模型时都面临一些共同的难题 在这里,我们 ...

  9. ICLR要搞深度生成模型大讨论,Max Welling和AAAI百万美元大奖得主都来了,Bengio是组织者之一...

    萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 用深度生成模型搞科学发现,是不少AI大牛最近的研究新动向. 就在最新一届ICLR 2022上,包括Max Welling和Regina Barzi ...

最新文章

  1. poj 1085 Triangle War 博弈论+记忆化搜索
  2. python opencv多边形掩膜
  3. 基于MATLAB的面对对象编程(3)——事件和响应
  4. numpy 笔记:改变形态
  5. apache php 调优_Apache的性能优化(二)
  6. SQL Server跨库查询
  7. python pip安装指定版本unittest_你们想要的unittest用例失败重运行,解决方案来啦!...
  8. 华为21级程序员月薪曝光:270k封神!众网友直呼长见识……
  9. 前端学习(2263)vue造轮子之webstrom使用
  10. “让我陪你走到人生的尽头。” | 也许AI能提供更好的临终关怀
  11. 必须声明标量变量 @列名
  12. [备忘]java读取与写入文件的五种方式
  13. Vue路由的页面跳转打开新页面
  14. hysys动态模拟教程_泄压过程的HYSYS动态模拟.pdf
  15. unity3D用鼠标和射线控制物体移动(二)
  16. c语言如何编辑数学公式,怎样用C语言编写数学公式
  17. 整数解(韦达定理解法)
  18. fractional cascading
  19. 网络安全用什么编程语言_网络安全的5种最佳编程语言
  20. 基于Hyperlynx VX.2.5 的DDR3仿真之一:Verifying That the Software Recognizes Your Design Correctly

热门文章

  1. 关于AIOT简易理解.
  2. 开源leaflet地图组件的微信小程序版——leafletwx
  3. 国内做数据可视化大屏哪家强?这5款产品你必须了解
  4. 千亿龙头开启价格血拼,四个重要消息将影响这几个板块的走势
  5. java海康威视设备注册、获取摄像头、录像机在线状态,获取指定摄像头PTZ值
  6. 想看的公众号文章被删了怎么办?
  7. 【开发工具】史上最全的IDEA快捷键总结 MAC版
  8. 神州数码牵手 OceanBase,共迎国产分布式数据库春天
  9. Java-找到休息日(详细思路及注释)
  10. 如何放大图像不模糊?图片无损放大