![9464873ad9e8da5fff76d47dd81f4055.png](https://i-blog.csdnimg.cn/blog_migrate/b5b555310ae72e8c2e187e58b0e944ff.jpeg)
随着深度学习在推荐系统中的应用,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原始序列构建不同的序列。
![7f2a10506c4ff1d12ab34a3bcf6a800b.png](https://i-blog.csdnimg.cn/blog_migrate/4e0d0d03b173564d7bd88f653b5b0164.jpeg)
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。
![688a812c62abd8e28fdbcbdb358097b0.png](https://i-blog.csdnimg.cn/blog_migrate/33fde1245ca3ee3446f2b5028997a68b.jpeg)
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的方式查找最近邻。
![fa876c191b2ba89974a459e36d715267.png](https://i-blog.csdnimg.cn/blog_migrate/10a20e11d3a44ebe286a0844dcd8b970.jpeg)
DSSM
DSSM及微软后续推出的multi-view DSSM也代表了一种思路。这种多塔的结构,可以为user,item构造不同的塔,通过n层全连接之后,将最后一层输出层的向量拼接在一起做softmax,或者直接通过cosine衡量两者的相似性。训练完成后,模型全连接层的输出向量可以作为user,item的embedding表达,而且向量处在同一个向量空间,可以在线进行ANN查找,有效提高线上serving的性能。
![7a51317caadfe7723e307c0c5f51507e.png](https://i-blog.csdnimg.cn/blog_migrate/892dd8c09b7eb195735e641a33aecd7d.jpeg)
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.
![b8d2a96f1dd3ae11ad246555387dac52.png](https://i-blog.csdnimg.cn/blog_migrate/de1510ade6c5fe0588ccd7edd7ca9b76.png)
欢迎大家关注我的公众号,一起讨论实用的推荐系统技术。
该文章也在如下问题中回复。
推荐系统中如何做 User Embedding?www.zhihu.com![e62a34c19966fbe807a40967f822444e.png](https://i-blog.csdnimg.cn/blog_migrate/4c3ff7061b9c9685e3d038628ba65a9a.jpeg)