阿里深度序列匹配模型SDM:如何刻画大型推荐系统的用户行为?

今天给大家介绍的论文是:《SDM: Sequential Deep Matching Model for Online Large-scale Recommender System》
论文下载地址:
https://arxiv.org/abs/1909.00385v1

1、背景
像淘宝这样的大规模的推荐系统,需要快速和准确的响应用户当前的需求。淘宝推荐系统一般采用两阶段的方式。首先在召回阶段召回可能的候选集,然后在排序阶段进行精准排序推荐。
目前在淘宝的召回模型中,基本上采用的模型的基础是基于物品的协同过滤模型。但是协同过滤模型只能考虑用户的静态兴趣,而不能捕获用户的动态兴趣。这些兴趣主要通过用户的行为来体现。
在淘宝的场景中,用户的行为主要分为两种,第一个是当前的浏览session,用户在一个session中,需求往往是十分明确的,比如你想买球鞋,往往只会关注球鞋类的商品。另一个是之前的记录,一个用户虽然可能不是每次都来买球鞋,但是也可能提供一定的有用信息,比如用户只买阿迪的鞋子或者只买帆布鞋等等。因此分别建模这两种行为序列来刻画用户的兴趣,是十分有用的。
接下来,我们就来学习下如何分别刻画用户的两种行为序列,以及如何将二者融合,并最后进行物品召回的。
2、SDM模型
2.1 问题定义
用户集合U和物品集合I就不说啦,然后我们主要看看对用户行为序列的划分,按照session进行划分的规则如下:
1)日志中标记了同样的session ID2)虽然session ID不相同,但是相邻的行为间隔小于10min3)最长的session长度为50,超过50的划分到前一个session(我猜测是从后往前划分session 的吧)
基于上述规则,用户最近一个session的行为被认为是短期行为,表示如下:
m是序列的长度,而与Su相隔一周以内的行为认为是用户的长期行为Lu。
根据如上定义,整个的匹配框架如下:

基于用户的短期行为,通过模型计算得到向量表示su,基于用户的长期行为,得到向量表示pu,二者在进行融合,最终得到用户的行为表示ou。通过ou和每个物品对应的向量vi计算匹配分数,并根据分数高低进行召回:
2.2 物品和用户的Embedding表示
在淘宝的推荐中,用户不仅仅关注物品本身,一些属性如品牌、店铺、价格等都是用户关注的属性。因此,我们使用不同的属性来刻画物品,如物品ID、叶子结点分类、一级分类、品牌、店铺等等,并将不同属性对应的embedding进行拼接得到物品的embedding表示:
同样的,用户也有对应的属性,如年龄区间、性别、蜂窝(学生/白领等等)。用户的embedding如下:
2.3 短期行为建模
短期行为建模的整体过程如下:
对于短期行为,即用户最近的一个session里的行为。在将物品转换为embedding后,首先通过LSTM来进行建模:
这样,每一个物品又一个对应的hidden state的输出h。接下来,是最近经常被使用的multi-head attention,主要有两点原因:
1)用户的行为中存在一些误点击行为,通过self-attention来降低这种影响;2)用户可能对不同物品的关注点不同。
个人感觉前面的LSTM有点多余,可以在multi-head attention中加入序列信息的吧,这样性能可能好一点。而multi-head attention的过程咱们就不多说了,可以参考我之前的文章通俗易懂!使用Excel和TF实现Transformer!。经过multi-head attention,对应的序列输出为:
随后又是一层attention,这一次主要的关注点是用户可能对不同的物品偏好程度不同:
这样,用户的短期行为我们就通过一个向量su表示了。
2.4 长期行为建模
对于长期行为,咱们不像刚才那么搞,主要是性能撑不住啊,还像短期行为那么搞的话,有点像之前介绍的DSIN模型,参数有点多。我们主要关注的点在于通过长期行为来从不同角度来刻画用户的兴趣,比如用户经常逛某种类型的店铺、经常复购同一类型的商品等等。因此把长期行为中的所有物品对应的属性集合划分为不同的set,如物品IDset、物品店铺set、物品品类set等等。下图展示了长期行为的建模过程:
对于不同的set,都经过一个attention层进行建模,如用户可能对不同的店铺偏好程度不同,对不同的品类偏好程度不同:
这样每一个set可以得到一个对应的向量,进行拼接后再经过一层全连接层得到用户的长期行为表示:
2.5 兴趣融合
接下来的过程就很巧妙了,并非将长短期兴趣向量直接拼接,而是借鉴了LSTM或GRU中的门的概念,对短期兴趣向量和长期兴趣向量进行一个加权,过程如下:
具体的计算过程如下:
这样我们就得到了用户的兴趣表示ou。
2.6 训练
得到了用户的兴趣表示ou之后,根据日志我们可以得到用户下一个交互的物品,作为正例,接下来,采样K-1个负例物品。将K个物品对应的embedding,分别于用户兴趣表示计算内积,作为每个物品的得分。并最终通过softmax和交叉熵来计算损失,并进行模型训练:
2.7 整体结构
最后再来看一下整个模型的结构:
3、实验结果
本文的实验的代码和数据地址在:https://github. com/alicogintel/SDM.
数据集选择的是淘宝和京东的两个数据集。离线实验的评价指标包括HITRatio、精确率、召回率、F1值:
而线上模型的评价指标主要有三个CTR、GMV和Discovery:
离线效果如下:
除了基准的模型外,SDM模型有许多变体,这里也简单介绍一下:
在线效果对比如下,pCTR、pGMV和discovery分别提升了7.04%, 4.50% and 24.37%:
谷歌NIPS论文Transformer模型解读:只要Attention就够了
阿里云弹性计算负责人蒋林泉:亿级场景驱动的技术自研之路
开源sk-dist,超参数调优仅需3.4秒,sk-learn训练速度提升100倍
你在北边的西二旗被水淹没,我在东边的八通线不知所措
为什么说边缘计算的发展比5G更重要?
C/C++ 最易受攻击、70% 漏洞无效,揭秘全球开源组件安全现状
首批共享单车死于 2019
公钥加密、加密Hash散列、Merkle树……区块链的密码学你知多少?

相关文章:

find ip from hostname or find hostname from ip
1. find ip from hostname ping <hostname> 2.fin hostname from ip nslookup <ip>

Linux下多线程编程中信号量介绍及简单使用
在Linux中有两种方法用于处理线程同步:信号量和互斥量。线程的信号量是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。如果一个程序中有多个线程试图改变一个信号量的值,系统将保证所有的操作都将依次进行…

Linux环境HBase安装配置及使用
Linux环境HBase安装配置及使用 1. 认识HBase (1) HBase介绍 HBase Hadoop database,Hadoop数据库开源数据库官网:hbase.apache.org/HBase源于Google的BigTableApache HBase™是Hadoop数据库,是一个分布式,可扩展的大数据存储。当…

适合小团队作战,奖金+招聘绿色通道,这一届算法大赛关注下?
大赛背景伴随着5G、物联网与大数据形成的后互联网格局的逐步形成,日益多样化的用户触点、庞杂的行为数据和沉重的业务体量也给我们的数据资产管理带来了不容忽视的挑战。为了建立更加精准的数据挖掘形式和更加智能的机器学习算法,对不断生成的用户行为事…

Linq 集合处理(Union)
关于Union的两种情况 一、简单值类型或者string类型处理方式(集合需要实现IEnumerable接口) #region int类型List<int> ints1 new List<int> { 1, 2, 3, 4, 5, 6 };List<int> ints2 new List<int> { 5, 6, 7, 8, 9, 0 };IEnumerable<int> ints…

卷积神经网络中十大拍案叫绝的操作
作者 | Justin ho来源 | 知乎CNN从2012年的AlexNet发展至今,科学家们发明出各种各样的CNN模型,一个比一个深,一个比一个准确,一个比一个轻量。下面会对近几年一些具有变革性的工作进行简单盘点,从这些充满革新性的工作…
windows7下解决caffe check failed registry.count(type) == 1(0 vs. 1) unknown layer type问题
在Windows7下调用vs2013生成的Caffe静态库时经常会提示Check failed: registry.count(type) 1 (0 vs. 1) Unknown layer type的错误,如下图:这里参考网上资料汇总了几种解决方法:1. 不使用Caffe的静态库,直接将Caffe的sourc…

js 变量提升 和函数提升
2019独角兽企业重金招聘Python工程师标准>>> 创建函数有两种形式,一种是函数声明,另外一种是函数字面量,只有函数声明才有变量提升 console.log(a) // f a() { console.log(a) } console.log(b) //undefinedfunction a() {consol…

.net_ckeditor+ckfinder的图片上传配置
CKEditor和CKFinder的最新版可以到官方网站(http://cksource.com)上下载获得。 把以上两个资源放到网站的根目录: /CKEditor 和 /CKFinder (不区分大小写) 在页面使用 CKEditor: <textarea cols"80" id"prcont…
VS2013在Windows7 64位上变慢的解决方法
重装了windows7系统,又重装了vs2013,发现在打开vs2013、编译工程及调试的时候,vs2013都会变的比较慢,参考网上资料,这里列出几种可能的解决方法: 1. 打开工具--> 选项 --> 源代码管理 --> 插件选…

Key-Value数据库:Redis与Memcached之间如何选择?
华为云分布式缓存Redis5.0和Memcached都是华为云DCS的核心产品。 那么在不同的使用场景之下,如何选择Redis5.0和Memcached呢? 就由小编为大家进行详细的数据对比分析吧Redis和Memcached都是非常受欢迎的开源内存数据库,相对关系型数据库&…

裴健等9名华人当选加拿大皇家学会院士
【导读】近日,加拿大皇家学会(RSC,The Royal Society of Canada)官网宣布已评选出今年的新增院士。其中,京东副总裁、加拿大西蒙弗雷泽大学计算科学学院教授裴健和其他 8 名华人学者均在这份名单之中,而裴健…

Linux中shell命令的用法和技巧
使用Linux shell是我每天的基本工作,但我经常会忘记一些有用的shell命令和l技巧。当然,命令我能记住,但我不敢说能记得如何用它执行某个特定任务。于是,我开始在一个文本文件里记录这些用法,并放在我的Dropbox里&#…
Caffe中Layer注册机制
Caffe内部维护一个注册表用于查找特定Layer对应的工厂函数(Layer Factory的设计用到了设计模式里的工厂模式)。Caffe的Layer注册表是一组键值对(key, value)( LayerRegistry里用map数据结构维护一个CreatorRegistry list, 保存各个Layer的creator的函数句柄),key为L…

自动驾驶行业观察 | 停车不再难,L2到L4的泊车辅助系统技术剖析
作者 | 陈光来源 | 自动驾驶干货铺(ID:IntelligentDrive)【导读】在汽车智能化的浪潮中,车载传感器发展迅速,越来越多搭载了先进传感器的汽车进入了我们的视野。比如能够在高速公路上实现单车道巡航的凯迪拉克CT6,以及…

Unity Log重新定向
Unity Log重新定向 使用Unity的Log的时候有时候需要封装一下Debug.Log(message),可以屏蔽Log或者把log内容写到文本中。通过把文本内容传送到服务器中,查找bug出现的原因。但是封装之后的日志系统如果双击跳转的时候,会跳转到自定义的日志系统…

Javascript 检查一组 radio 中的哪一个被勾选
2019独角兽企业重金招聘Python工程师标准>>> 以前检查单选按钮是否被选择时,我使用的是 if else 一个一个的检查其 checked 属性。 这样虽然可以,但是当一组 radio 有很多个时,就很麻烦了。 可以通过 getElementsByName 得到所有…
二维码Aztec简介及其解码实现(zxing-cpp)
Aztec Code是1995年,由Hand HeldProducts公司的Dr. Andrew Longacre设计。它是一种高容量的二维条形码格式。它可以对ASCII和扩展ASCII码进行编码。当使用最高容量和25%的纠错级别的時候,Aztec可以对3000个字符或者3750个数字进行编码。Aztec的矩阵大小在…

顶配12699 元、没有5G,“浴霸三摄”的iPhone你会买吗?
作者 | 屠敏出品 | CSDN(ID:CSDNnews)北京时间 9 月 11 日凌晨 1 点,以「Apple 特别活动」为主题的苹果秋季发布会正式于史蒂夫乔布斯剧院拉开帷幕。按照惯例,在发布会之前,业界“毫不留情”地对新品进行了…

阿里P7架构师告诉你Java架构师必须知道的 6 大设计原则
在软件开发中,前人对软件系统的设计和开发总结了一些原则和模式, 不管用什么语言做开发,都将对我们系统设计和开发提供指导意义。本文主要将总结这些常见的原则,和具体阐述意义。 开发原则 面向对象的基本原则(solid)是五个&#…

rhel6用centos163 yum源
cd /etc/yum.repos.d/wget wget http://mirrors.163.com/.help/CentOS6-Base-163.reposed -i "s/\$releasever/6/" CentOS6-Base-163.repo

打破深度学习局限,强化学习、深度森林或是企业AI决策技术的“良药”
算法、算力和数据是人工智能时代的三驾马车,成为企业赋能人工智能的动力,但它们自身的特性也为企业和高校在研究和落地应用过程带来了重重挑战。比如,训练算法的成本高昂,数据从采集、处理到存储已面临瓶颈,目前针对算…

JAVA springboot微服务b2b2c电子商务系统(十三)断路器聚合监控(Hystrix Turbine)
讲述了如何利用Hystrix Dashboard去监控断路器的Hystrix command。当我们有很多个服务的时候,这就需要聚合所以服务的Hystrix Dashboard的数据了。这就需要用到Spring Cloud的另一个组件了,即Hystrix Turbine。一、Hystrix Turbine简介看单个的Hystrix D…
二维码Data Matrix的解码实现(zxing-cpp)
二维码Data Matrix的介绍可以参考http://blog.csdn.net/fengbingchun/article/details/44279967 ,以下是通过zxing-cpp开源库实现的对Data Matrix进行解码的测试代码:#include "funset.hpp" #include <string> #include <fstream> #include &…

PHP mongodb 的使用
mongodb 不用过多的介绍了,NOSQL的一种,是一个面向文档的数据库,以其方便灵活的数据结构,对于开发者来说是比较友好的,同时查询的速度也是比较快的,现在好多网站 开始使用mongodb ,具体的介绍可以网上查找。…

必看,61篇NeurIPS深度强化学习论文解读都这里了
作者 | DeepRL来源 | 深度强化学习实验室(ID: Deep-RL)NeurIPS可谓人工智能年度最大盛会。每年全球的人工智能爱好者和科学家都会在这里聚集,发布最新研究,并进行热烈探讨,大会的技术往往这未来几年就会演变成真正的研…

07-09-Exchange Server 2019-配置-Outlook 2019
[在此处输入文章标题] 《系统工程师实战培训》 -07-部署邮件系统 -09-Exchange Server 2019-配置-Outlook 2019 作者:学 无 止 境 QQ交流群:454544014 MSUCDemo01 MSUCDemo02 MSUCDemo03 MSUCDemo04 MSUCDemo05 启用邮箱 MSUCDemo01i-x-Cloud.com MSUCDe…
二维码QR Code简介及其解码实现(zxing-cpp)
二维码QR Code(Quick Response Code)是由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。二维码QR Code呈正方形,常见的是黑白两色。在3…

jQuery学习(一)
因为项目需要,同时也因为兴趣,在近一段时间研究和使用了jQuery,它真的是太强大了,代码非常的优雅和简洁,好后悔现在才开始了解它,虽然目前网络上关于jQuery的资料、学习心得,教程多得你看不完&a…

知乎算法团队负责人孙付伟:Graph Embedding在知乎的应用实践
演讲嘉宾 | 孙付伟出品 | AI科技大本营(ID:rgznai100)9月6-7日,在由CSDN主办的2019中国AI开发者大会(AI ProCon 2019)的 机器学习专场中,知乎算法团队负责人孙付伟在机器学习专场中分享了《Graph Embedding…