随着深度学习在推荐系统中的应用,embedding成为绕不开的话题。无论是召回还是排序阶段,均应用到embedding技术。目前已经有很多文章在讨论item的embedding如何生成,本文希望讨论user embedding生成的几种方法,欢迎大家补充和讨论。

Item2Vec+Pooling

在word2vec提出后,给向量化学习提供了很好的思路。微软于2016年提出item2vec[1],本质是skip gram+negative sampling的方式学习item的向量表达。生成item vector之后,可以根据用户历史上与item的交互行为,求avg/max/ pooling获取用户的向量表达。这是最直接的user vector生成方式,但是在实际使用中往往效果一般。主要原因是泛化能力差,对user embedding的学习是无监督的。

除此之外,在如何生成item vector的问题上,item2Vec也给出明确的方法。word2vec对于顺序是有强依赖的。但是对于大部分推荐场景,用户的购买(点击)序列没有强顺序关系,因此我们在构造样本时需要根据场景做一些变化,如:1)需要将滑动窗口设置成最长的长度。保证同一个item的用户,均处在同一个context下。2)通过多次shuffle原始序列构建不同的序列。

Doc2Vec

doc2vec其实是word2vec的一种扩展方法,当我们通过user与item的交互历史构建出训练的序列时,可以将user作为global context加入到训练中,学出user和item的向量。该模型的优势在于,user和item在一个向量空间内。构建线上服务时,能够通过ANN库快速做user2item的匹配,直接通过user embedding召回item。

Factorization Machine

FM是推荐系统中常用的算法,因为推荐系统的特征空间通常是稀疏的,FM擅长处理稀疏特征,通过丰富的特征交叉提高模型的效果,可以认为FM也是一个浅层的神经网络。FM类模型求解出的隐向量可以作为该ID对应的特征向量,但是每一个feature group的ID拥有单独的特征空间。所以该特征向量可以用于feature group内部各ID的相似性比较,如衡量用户相似度(user-cf)物品相似度(item-cf),但是无法直接通过user embedding找到item embedding的近邻。接下来介绍几种DNN的方式构建user embedding。

Youtube DNN

Youtube DNN作为深度学习+推荐系统在业界的范文,在王喆的机器学习笔记中,https://zhuanlan.zhihu.com/p/52169807有很多实际工程问题的讨论。在召回DNN中,引入丰富的用户侧特征(包括用户的观看和搜索历史),从而学习到的模型更加全面,泛化能力强。模型的最后一层全连接的输出作为user embedding表达,item embedding则使用softmax+negative sampling有监督训练该DNN时,生成的softmax权重向量来表示。因此user embedding和item-embedding也处于同一个特征空间,线上serving时,可以采用ANN的方式查找最近邻。

DSSM

DSSM及微软后续推出的multi-view DSSM也代表了一种思路。这种多塔的结构,可以为user,item构造不同的塔,通过n层全连接之后,将最后一层输出层的向量拼接在一起做softmax,或者直接通过cosine衡量两者的相似性。训练完成后,模型全连接层的输出向量可以作为user,item的embedding表达,而且向量处在同一个向量空间,可以在线进行ANN查找,有效提高线上serving的性能。

Graph embedding

user和item之间的关系可以构建成一张图,对于用户点击行为建了一个图G(u,e),除此之外,其他行为(如:item之间属性相关等均可以生成一条边)。图生成之后,就可以使用DeepWalk,Node2Vec,LINE,GCN等算法进行训练。以DeepWalk为例,在建好的图中随机游走,生成节点序列,根据不同的使用场景,可以采用不同的随机游走方式,已实现适合当前场景的策略。生成随机游走序列后使用skipgram进行训练产出向量。Graph Embedding是一个很大的话题,KDD2017 tutorial有关于Graph Embedding的专场分享,大家可以下载相关的slides学习。阿里也根据自己的使用场景在提出了一些改进方法,整体的思路是在图中加入更加丰富的特征,构建DNN网络来训练,详细内容会放在后续的文章中仔细讨论。

[1] Barkan O, Koenigstein N. Item2vec: neural item embedding for collaborative filtering[C]//2016 IEEE 26th International Workshop on Machine Learning for Signal Processing (MLSP). IEEE, 2016: 1-6.

[2] Covington P, Adams J, Sargin E. Deep neural networks for youtube recommendations[C]//Proceedings of the 10th ACM conference on recommender systems. ACM, 2016: 191-198.

[3] Perozzi B, Al-Rfou R, Skiena S. Deepwalk: Online learning of social representations[C]//Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2014: 701-710.

[4] Kipf T N, Welling M. Semi-supervised classification with graph convolutional networks[J]. arXiv preprint arXiv:1609.02907, 2016.

欢迎大家关注我的公众号,一起讨论实用的推荐系统技术。


该文章也在如下问题中回复。

推荐系统中如何做 User Embedding?​www.zhihu.com

随机生成元素升序向量_推荐系统中用户向量的表示学习相关推荐

  1. 随机生成元素升序向量_实验二MATLAB运算基础 -

    持这段文字的格式: 在英式用法中,引号通常是单引号,如'Fire!'. In GB usage quotation marks are usually single: 'fire!'. 6. 用结构体 ...

  2. 随机生成元素升序向量_使用random_shuffle()算法随机化序列元素

    假设你需要指定范围内的随机数,传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内.但是,使用这个方法至少有两个缺点. 首先,做格式化时,结果常常是扭曲的,所以 ...

  3. 5.练习:猜数字:随机生成[0,100]之间的随机数,让用户猜生成的数字,显示猜大了还是猜小了,如果猜对了,提示共猜了多少次???

    5.练习:猜数字:随机生成[0,100]之间的随机数,让用户猜生成的数字,显示猜大了还是猜小了,如果猜对了,提示共猜了多少次??? 学习:第7遍 1.随机生成[0,100]之间的随机数 让用户猜生成的 ...

  4. mysql随机生成密码存到哪里_在MySQL中生成随机密码的方法

    cat /dev/urandom | LC_ALL=C tr -dc "[:alnum:]" | fold -w 10 |head -10 Si1N9kUyuZ ddzsRXFgx ...

  5. c++矩阵转置_线性代数中的向量矩阵

    目录 前言 符号约定 向量的基本性质 [定义,基向量,线性相关/无关*,向量点积] 矩阵的基本性质 [转置,广播,线性变换] 矩阵基本运算 [矩阵相乘,矩阵点积] 行列式 [概念,性质,右手法则,行列 ...

  6. jaccard相似度_推荐系统中常用计算相似度的方法和工具

    常用的相似度计算方法:(1)欧氏距离(2)余弦相似度 (3)皮尔逊相关系数 (4)修正余弦相似度(5)汉明距离 (6)曼哈顿距离 1.欧式距离:就是计算空间中两点的距离 def EuclideanDi ...

  7. [C/C++]随机生成信息,并保存到文件中

    实现功能: 随机生成一栋学生宿舍楼,每个宿舍具有宿舍编号,随机学生数.学生信息包括姓名,ID,年龄,籍贯.并把全部信息以文件保存. 编译通过:VC++6.0 代码如下: #include <st ...

  8. 向量转置的怎么求导_机器学习中的向量求导和矩阵求导

    在机器学习的各种关于向量或者矩阵的求导中,经常会出现各种需要转置或者不需要转置的地方,经常会看得人晕头转向.今天我对机器学习中关于这部分的常识性处理方法进行整理并记录下来方便大家参考. 一些约定 首先 ...

  9. c++用数组初始化向量_用C ++初始化向量

    c++用数组初始化向量 In this article, we'll take a look at some of the ways to initialize a vector in C++. Th ...

最新文章

  1. 第四范式完成C轮融资,金额超10亿元
  2. ArcGIS中的三种查询
  3. 4'.deploy.prototxt
  4. 算法系列之五 希尔排序
  5. python向量机使用方法_Python中支持向量机SVM的使用方法详解
  6. 给某社区技术写作大赛当评委,我的个人资料
  7. web动画_Web动画简介
  8. css动态阴影,css实现动态阴影、蚀刻文本、渐变文本效果
  9. 有感于去哪儿的一道笔试题
  10. Java虚拟机笔记(五):JVM中对象的分代
  11. iptables学习笔记:同一端口号同时支持tcp和udp的转发
  12. bootstrap表格遍历_BootStrap实现带有增删改查功能的表格(DEMO详解)
  13. RabbitMQ环境搭建教程收集(待实践)
  14. Mozilla推动互联网成为游戏发展的强有力平台
  15. 使用下面的方法有利于提高JS代码的执行效率
  16. 常用命令之svnadmin命令
  17. vs2003在win7+后pdb锁住报LNK1201解决方案
  18. origin画已知函数曲线_使用Origin进行函数绘图的方法
  19. 三种Web服务交互方案
  20. visio双线方框怎么画_用VISIO怎样画出扇形

热门文章

  1. 三、在应用中升级----网络编程部分
  2. linux 基础 文件系统 用户权限
  3. 小学五年级计算机二课活动记录,小学五年级主题班会的活动记录
  4. 科幻画图片大全浇水机器人_从机器人到智能机器人,谭建荣院士为温肯师生揭秘新科技...
  5. 试题 历届试题 带分数(全排列)
  6. ZCMU 1048: 子串
  7. “问答官”活动SQL专场来啦!小米行李箱、无线鼠标等你拿!
  8. Cube 技术解读 | 支付宝新一代动态化技术架构与选型综述
  9. 在线教育流量洪峰最佳实践
  10. 数据仓库如何实现湖仓一体数据分析?