达观动态

达观愿与业内同行分享 助力各企业在大数据浪潮来临之际一起破浪前行

达观数据推荐算法实现:协同过滤之item embedding

范熊熊文章

推荐系统本质是在用户需求不明确的情况下,解决信息过载的问题,联系用户和信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息生产者的双赢(这里的信息的含义可以非常广泛,比如咨询、电影和商品等,下文中统称为item)。达观数据相关推荐是达观推荐系统中的重要组成部分,其价值在于,在没有用户画像信息的情况下,也能给用户以好的推荐体验,比如资讯类,通过达观相关推荐算法找到item相关的其他item,可以提供对某一类或者针对某一事件多角度多侧面的深度阅读。本文主要先简单介绍相关推荐的一些常用算法,然后介绍一下基于item embedding的协同过滤。

1. 达观相关推荐的常用算法

1.1 Content-based相关推荐

基于内容的推荐一般依赖于一套好的标签系统,通过计算item之间tag集合的相似性来衡量item之间的相似性,一套好的标签系统需要各方面的打磨,一方面需要好的编辑,一方面也依赖于产品的设计,引导用户在使用产品的过程中,对item提供优质的tag。

1.2 基于协同过滤的相关推荐

协同过滤主要分为基于领域以及基于隐语义模型。

基于领域的算法中,ItemCF是目前业界应用最多的算法,其主要思想为“喜欢item A的用户大都喜欢用户 item B”,通过挖掘用户历史的操作日志,利用群体智慧,生成item的候选推荐列表。主要统计2个item的共现频率,加以时间的考量,以及热门用户以及热门item的过滤以及降权。

LFM(latent factor model)隐语义模型是最近几年推荐系统领域最为热门的研究话题,该算法最早在文本挖掘领域被提出,用于找到文本隐含的语义,在推荐领域中,其核心思想是通过隐含特征联系用户和物品的兴趣。主要的算法有pLSA、LDA、matrix factorization(SVD,SVD++)等,这些技术和方法在本质上是相通的,以LFM为例,通过如下公式计算用户u对物品i的兴趣:

1

公式中pu,k和qi,k是模型的参数,其中pu,k度量了用户u的兴趣和第k个隐类的关系,而qi,k度量了第k个隐类和物品i之间的关系。而其中的qi,k可视为将item投射到隐类组成的空间中去,item的相似度也由此转换为在隐空间中的距离。

2. item2vec:NEURAL ITEM EMBEDDING

2.1 word2vec

2013年中,Google发布的word2vec工具引起了大家的热捧,很多互联网公司跟进,产出了不少成果。16年Oren Barkan以及Noam Koenigstein借鉴word2vec的思想,提出item2vec,通过浅层的神经网络结合SGNS(skip-gram with negative sampling)训练之后,将item映射到固定维度的向量空间中,通过向量的运算来衡量item之间的相似性。下面对item2vec的做简要的分享:

由于item2vec基本上是参照了google的word2vec方法,应用到推荐场景中的item2item相似度计算上,所以首先简单介绍word2vec的基本原理。

Word2vec主要用于挖掘词的向量表示,向量中的数值能够建模一个词在句子中,和上下文信息之间的关系,主要包括2个模型:CBOW(continuous bag-of-word)和SG(skip-gram),从一个简单版本的CBOW模型介绍,上下文只考虑一个词的情形,如图1所示,

2

图1

假设只有一个隐层的神经网络,输入层以及输出层均为词的one-hot编码表示,词表大小假设为V,隐层神经元个数为N,相邻层的神经元为全连接,层间的权重用V*N的矩阵W表示,隐层到输出层的activation function采用softmax函数,

3

其中wI,wj为词表中不同的词,yj为输出层第j个神经元的输出,uj为输入层经过权重矩阵W到隐层的score,uj’为隐层经过权重矩阵W’到输出层的score。训练这个神经网络,用反向传播算法,先计算网络输出和真实值的差,然后用梯度下降反向更新层间的权重矩阵,得到更新公式:

4

5

6

其中,η为更新的步长,ej为模型预测以及真实值之间的误差,h为隐层向量。

图2为上下文为多个词时的情况,中间的隐层h计算由

7

改为

8

即输入向量为多个上下文向量相加求平均,后续的参数学习与上文的单个词的上下文情况类似。遍历整个训练集context-target词对,经过多次迭代更新模型参数,对模型中的向量的影响将会累积,最终学到对词的向量表示。(

Skip-gram跟CBOW的输入层和输出层正好对调,区别就是CBOW是上下文,经过模型预测当前词,而skip-gram是通过当前词来预测上下文。

9

图2

 

目前为止,对词表中的每个词,有两种向量表示:input vector和output vector,对应输入层到隐层权重矩阵W的行向量和隐层到输出层权重矩阵W’的列向量,从等式4、5可以看出,对每一个训练样本,都需要遍历词表中的每一个词,因此,学习output vector的计算量是非常大的,如果训练集或者词表的规模大的话,在实际应用中训练不具可操作性。为解决这个问题,直觉的做法是限制每个训练样本需要更新的output vectors,google提出了两个方法:hierarchical softmax和negative sampling,加快了模型训练的速度,在此不做展开讨论。

2.2  item2vec

由于wordvec在NLP领域的巨大成功,Oren Barkan and Noam Koenigstein受此启发,利用item-based CF学习item在低维latent space的embedding representation,优化item的相关推荐。

词的上下文即为邻近词的序列,很容易想到,词的序列其实等价于一系列连续操作的item序列,因此,训练语料只需将句子改为连续操作的item序列即可,item间的共现为正样本,并按照item的频率分布进行负样本采样。

10

图3

Oren Barkan and Noam Koenigstein以SVD作为baseline,SVD的隐类以及item2vec的维度都取40,用Microsoft Xbox Music service收集的 user-artists数据集,对结果进行聚类,如图3所示,图a是item2vec的聚合效果,图b是SVD分解的聚合效果,看起来item2vec的聚合效果要更好些。

作者尝试将item2vec应用到达观数据的相关推荐当中,由于资讯、短视频类的场景一般的连续item操作会比较多,因此天然的非常适合用item2vec来训练item的向量表示,从实际的训练结果和线上评估来看,item2vec对CTR提升是有明显帮助的。