前言
- 之前开了一个CTR预估系列,目前仅更新了一篇FM的文章,想再开一个论文系列,记录一下一些经典的论文在实际中的应用。
- 最近工作在做Embedding相关的一些工作所以开始的几篇主要围绕一些经典的Embedding来做。
Embedding
- 第一个问题,什么是Embedding?
- Embedding中文是嵌入,最重要的作用是将一些离散的特征嵌入到另一个维度空间利用一串向量进行表示,并且在该向量空间中余弦距离|欧式距离更接近的物品在物理含义上也更为接近。
- 第二个问题,为什么用Embedding?
- 在工业界使用最多的分类模型是LR即逻辑回归,通常我们说很多公司都是一招LR打天下,LR的优点很明确,模型简单,特征重要度直观,可并行等等。
- LR模型基本都是使用离散特征进行训练(连续特征也可以训练,但是一方面需要做标准化,另一方面容错性也没有离散特征好)。
- 许多特征onehot后维度非常高,典型的就是id类特征,并且onehot编码许多的信息便丧失了,并且我们经常用到许多的交叉特征,特征交叉导致维度爆炸。
- 怎么做Embedding?
Embedding其实不限方式,只要可以通过手段将进行了降维并利用新的特征空间表示原特征即可,这里简单列举一下几种Embedding的方式:- MF、SVD等矩阵分解的方式:其通过用户对物品的评分矩阵或者行为矩阵进行用户、物品的隐向量学习,从而获取用户以及物品的Embedding表示。
- DNN-Embedding: 通过神经网络,利用接入Embedding层与目标loss进行joint train,从而学习其特征表达。
- FM:不熟悉FM的可以看CTR预估系列-FM,FM由于其学习了各个特征的隐向量表示,从而可以将这些学习到的隐向量作为特征的Embedding使用,这里简单提一下FFM,FFM相比于FM的不同主要在于FM只学习当前特征的隐向量表示,而FFM会学习当前特征对其他所有不同域的隐向量表示,准确度更高,但是同时训练复杂度也更高,这里不展开介绍了,以后可能会开一个FFM的系列进行介绍。
- 序列嵌入:典型的包括基于word2vec的Item2vec,也是本文接下来要分享的论文。
- 图嵌入:Graph Embedding是用于许多图场景例如社交网络、购买关系图等情况的嵌入,主要包括Deep Walk、Line、Nod2vec、SDNE等,盗个图:
啰嗦了这么多,开始正文。
Item2Vec: Neural Item Embedding for Collaborative Filtering
- 本系列的第一篇来自于微软2016年发表的Item2vec,第一篇没有写word2vec,因为要写的内容有点多,还没整理完,就先从Item2vec开始了。
论文背景
-
论文开头提到计算物品的相似度在推荐场景中非常重要,简单说就是假设用户A正在浏览good0商品,那么如何成功地计算出与good0商品最为相似的物品集将很重要,论文也给出了在win10商店的people also like的场景来来说明计算相似度的重要性,如下图:
-
在电商、视频、应用市场等领域people also like非常普遍,有很多种方案可以做这个事情,简单地可以通过规则推荐同一个游戏开发商的或者热门的内容,或者利用频繁项挖掘、协同过滤等来获取。
-
论文里提到了这种单独计算物品相似度的场景相比于传统的用户+商品进行打分排序而言可以获得更高的点击率,这是因为当前的行为是用于对某一个item非常明显的偏好或者有支付欲望的item,因此与当前物品更为相似的物品效果会更好,说明不同场景的推荐使用的方案是不同的,例如此处的猜你喜欢在联系上下文进行推荐比单纯地根据用户画像以及物品画像进行CTR预估排序而言更为有效,传统的user-item的推荐更适合于用户没有明确行为而进行个性化推荐的场景。
-
还有一些场景,用户与物品的信息不可得,只有session信息记录物品交互顺序,这里就无法使用传统的ctr预估来构建样本进行训练。
-
接下来,论文提到了NLP中之前大热的Word2vec算法,主要介绍了SGNS算法,如下:
-
简单而言,对于给定的句子,选择窗口大小为c,skip-gram通过当前词来预测前后c个词的概率,从而使得其后验概率最大,通过极大似然进行优化整体损失,具体的细节信息之后会开专门的一篇来进行介绍,这里就晓得有这么个东西做句子的嵌入非常好用。
本文工作
-
来到了该篇论文的重点部分,该论文的创新性整体而言不算高,但是为item的表征带来的新的方案,下面是该论文的核心点。
-
将用户相同的行为序列中的item看为一个句子,但是这里与word2vec不同的主要有以下几点:
- item2vec中决定放弃用户行为序列中item之间的时间与空间关系,即认为这些任务不是一个arraylist而是一个set,item与item之间没有前后时间上的关系,而只有是否共同出现在一个用户的行为序列之中的关系,论文中也说明了并非所有场景都有效,具体要不要忽略这个信息还需要根据场景分析以及验证。
- 修改了窗口大小,这和第一条有关,因为不考虑前后的关系了,所以这里采用了动态窗口,其概率计算方式如下,可以看到窗口由c变为了整体长度k。
-
这里额外提一下,就是目前在使用Item2vec的过程中,特别在广告场景下,由于用户的点击非常少,构建合适的序列也较为困难,一个用户一个月的点击都不多,因此Item2vec可能对于广告场景并不友好,下一步打算通过Graph Embedding进行嵌入表达试一下具体的效果如何。
效果对比
- 论文利用Item2vec以及SVD分别进行了嵌入表达并可视化比较了下效果,使用的第一个数据集是XBOX music sevice的数据集,包括了732K个用户对49K个艺术家的歌曲的播放记录,第二个数据集是微软商店的商品数据,包括379K的序列,1706个商品。
- music数据集的嵌入维度选择100,商品数据选择为40,利用随机梯度下降优化迭代20轮,还有一些采样率等超参数。
- 文章使用t-SNE对数据降维并可视化,对于不同的item类型在图中标识了不同的颜色,比较图如下:
- 可以发现,基于item2vec进行嵌入学习的内容总体上而言效果比svd更好,下表是为了定量提现下效果进行的实验,图中的q是选择的最热门的q个item,accuracy是统计这q个item与其最近邻的8个item是否属于同一个类型进而统计准确度。
- 通过数据统计可以发现,在q增大以后Item2vec的准确度开始显著领了SVD,在统计最不热门的10k的item过程中,发现Item2vec的准确度领先了SVD 10个百分点,说明Item2vec对于一些不热门的item也取得了较好的学习效果。
- 论文作者分析,人为是Item2vec对于热门item进行了采样并且对负样本也进行了采样从而使得其学习非热门item取得了效果。
总结
- 本文简单对Item2vec论文进行了分享,总体来说将word2vec应用于推荐领域还是具备一定的创新性,也为后来的许多Embedding提供了思路,是做Embedding时值得一看的论文,之后有机会会更新一下使用Item2vec进行嵌入的代码,这篇就先到这里吧。