X

嵌入方法在推荐系统中的应用

是n维空间中的一个二元组,S是由向量组成的集合,F是S中元素满足的某种关系。那么嵌入方法就是需要我们找到一个映射:

,记

是最近操作过的),标的物

,那么我们可以用如下方式来获得用户的嵌入表示

是标的物

,这时不同时间段的标的物权重是一样的,也可以按照时间做等差或者等比的衰减,保证时间最近的标的物权重最大。

通过上面方法获得了用户对标的物的评分,计算出用户与每个标的物的评分,按照评分降序排序取TopN作为推荐列表(剔除用户已经操作过的标的物)。

b. 通过用户操作过的标的物的相似节目来为用户推荐

该方法可以将用户最近操作过的标的物作为种子标的物,将种子标的物最相似的N个标的物作为推荐的候选集。具体如下:

对(

代表标的物)组成的集合为

,通过矩阵分解将用户

嵌入k维特征空间的嵌入向量分别为:

那么用户

的预测评分为

。如果预测得越准,那么

对,如果我们可以保证这些误差之和尽量小,那么有理由认为我们的预测是精准的。

有了上面的分析,我们就可以将矩阵分解转化为一个机器学习问题。具体地说,我们可以将矩阵分解转化为如下等价的求最小值的最优化问题。

是超参数,可以通过交叉验证等方式来确定,

是有限词汇表

公式2:Word2Vec的目标函数

其中,c是词

是下面的softmax函数:

的目标(target)和上下文(context)嵌入表示,这里

计算量太大,是词库大小N的线性函数,一般N是百万级别以上。

我们可以通过负采样(Negative Sampling)来减少计算量,具体来说,就是用如下的公式来代替上面的softmax函数。

是logistic函数,M是采样的负样本(这里负样本是指抽样的词

的上下文中)数量。

最终可以用随机梯度下降算法来训练公式2中的模型,估计出U 、V。读者可以阅读参考文献1、2、3、4对Word2Vec进行深入学习和了解。

参考文献12提出了一个CoFactor模型,将矩阵分解和Word2Vec(参考文献27中证明Word2Vec嵌入等价于一类PMI矩阵的分解,本文作者也是采用的PMI分解的思路,而不是直接用Word2Vec)整合到一个模型中来学习嵌入并最终给用户做推荐,也是一个非常不错的思路。

参考文献28借助Word2Vec的思路,提出了Prod2Vec模型,该算法利用发给用户的电子邮件广告数据,根据用户的邮件点击购买回执了解用户的偏好行为,通过将用户的行为序列等价为词序列,采用Word2Vec类似的方法进行嵌入学习获得商品的嵌入向量,最终给用户进行个性化推荐。该算法部署到线上,有9%点击率的提升。参考文献16基于Prod2Vec模型,提出了一种整合商品metadata等附加信息的Meta-Prod2Vec算法模型,提升了准确率,并且可以有效解决冷启动问题,感兴趣的读者可以阅读学习这两篇文章。

有很多开源的软件有Word2Vec的实现,比如Spark、gensim、TensorFlow、Pytorch等。我们公司采用的是gensim,使用下来效果不错。

  1. 基于有向图嵌入

给定一个图

中的向量表示。利用数学的术语就是学习一个映射:

基于Word2Vec和参考文献23的思路,我们可以先通过随机游走(random walk)生成图顶点的序列,再利用Word2Vec的Skip-Gram算法学习每个顶点的向量表示。为了保留图的拓扑结构,我们需要求解如下的目标函数:

是给定一个顶点v,通过随机游走获得v的一个邻域顶点的概率。

有了上面的定义和说明,剩下的处理流程和思路跟Word2Vec是一样的了,这里不再赘述。

参考文献6、19分别提供了基于图嵌入进行个性化推荐的解决方案,其中6我们会在第四节4中详细介绍。19提供了一个在异构信息网络(Heterogeneous Information Network,简写为HIN)中通过随机游走生成节点序列,再将节点序列嵌入低维空间,通过一组fusion函数变换后整合到矩阵分解模型中进行联合训练,通过求解联合模型最终进行推荐的方法,该方法也可以有效地解决冷启动问题,具体架构图如下,感兴趣的读者可以参考原文。随着互联网的深入发展,异构信息网络是一类非常重要的网络,在当前的互联网产品中(社交网络产品、生活服务产品等)大量存在,基于HIN的个性化推荐也是未来一个比较火的方向之一。

其中u、v分别是用户和视频的嵌入向量。U是用户集,C是上下文。该方法也是通过一个(深度学习)模型来一次性学习出用户和视频的嵌入向量。感兴趣的读者可以参考阅读,我在下一篇文章《深度学习推荐算法》中会详细讲解该文章算法原理和核心思想。

四、嵌入方法在推荐系统中的应用案例介绍

上一节讲解了4类用于推荐系统的嵌入方法,基于这4类方法,我们在本节介绍几个有代表性的嵌入方法在推荐系统中的应用案例,让大家可以更好地了解嵌入方法怎么做推荐。这几个案例都是在真实的工业级场景得到验证的方法,值得大家学习和借鉴。

1.利用矩阵分解嵌入做推荐

通过第三节1的矩阵分解的介绍,当我们获得了用户和标的物嵌入后,我们计算出用户u的嵌入向量与每个标的物嵌入向量的内积

这里不存在固定的窗口大小了,窗口的大小就是用户操作过的标的物集合的大小。而其他部分跟Word2Vec的优化目标函数一模一样。

最终用向量

(

拼接在一起的向量)来表示标的物的嵌入。

我们公司也采用了item2vec算法来对视频进行嵌入,用于视频的相似推荐中,点击率效果比原来的基于矩阵分解的嵌入有较大幅度的提升。

3.阿里盒马的联合嵌入推荐模型

阿里盒马利用Word2Vec思想对不同类别的ID(item ID、product ID、brand ID、store ID等)进行联合嵌入学习,获得每个ID的嵌入表示,下面我们对该方法进行简单介绍(见参考文献7)。

给定一个item序列

这里C是上下文窗口的长度。下图是某个用户的浏览序列,其中前5个浏览记录是一个session(用户的一次交互序列,可以按照时间,比如按照一个小时切分,将用户在APP上的操作分为多个session)。

定义如下

分别是item和context的嵌入表示,m是嵌入空间的维数,D是总的item数,也就是盒马上的所有商品数量。

上述公式求导计算复杂度正比于D,往往D是非常大的,所以类似Word2Vec,可以采用如下的负采样技术减少计算量

(item及其上下文之外的物品的分布)中抽取的负样本的数量。

累积分布函数可以记为

,这里r是从均匀分布

即负采样可以先从

上图是item ID和它的属性ID之间的关联关系,假设有K个ID,我们按照顺序记为

,而

上式中,

分别是第k个ID的context和target嵌入表示,

个不同的item(这个品牌包含

这里

定义为

举例来说,我们始终有

包含10个不同的item,那么

公式4:item的条件概率公式

这里

变换到与

其中

图3:构建用户行为有向图

(2) 图嵌入

构建好有向图后,我们就可以采用随机游走(参考文献23的DeepWalk方法,参考文献13、17、18提供了其他利用图嵌入的方法,其中17、18提供了比其他图嵌入方法更高效的实现方案,可以大大节省嵌入训练的时间)的方式生成行为序列(参见图2中的c)。后面我们再用Skip-Gram算法学习图的顶点(商品)的嵌入表示(参考图2中d的Skip-Gram模型)。我们需要最大化通过随机游走生成序列中的两个顶点同时出现的概率,具体来说,我们需要求解如下最优化问题:

利用Word2Vec中提到的负采样技术,最终的优化目标函数为

是为

是logistic函数,

上式中,

是附加信息的嵌入表示,我们假设商品嵌入和附加信息嵌入到相同维度的空间中,这样才可以求平均。

图5:多源信息嵌入预测两个商品被一起购买的概率

具体来说,该模型包含三个主要模块:

(1) 内容嵌入模块

通过不同的算法将商品不同维度的信息嵌入到低维空间中,这些不同源的信息嵌入过程是解耦合的、可插拔的,可以用不同的算法来取代。图像嵌入可以用图像分类的算法获得(如AlexNet等),而文本的嵌入可以用Word2Vec获得,协同信息的嵌入可以用矩阵分解算法获得。

(2) 多源联合嵌入模块

该模块将(1)不同源的商品信息嵌入向量,通过一个统一的模型获得联合嵌入表示。

(3) 输出层

输出层结合两个商品的联合嵌入向量,计算出这两个商品被一起购买的概率。具体来说,两个商品的联合嵌入向量通过求内积,再经过sigmod函数变换获得概率值。

通过上述方法可以获得每个商品的嵌入向量,我们就可以用第二节1(3)中的第2个方法给用户做推荐。

五、利用嵌入方法解决冷启动问题

嵌入方法除了可以用于推荐外,通过整合附加信息(side information)到嵌入模型中,可以很好地解决冷启动问题。我们知道基于内容的推荐可以缓解冷启动问题,这些附加信息也一般是内容相关的信息,所以整合进嵌入模型中就可以用于解决冷启动。下面我们简单介绍4种通过嵌入解决冷启动的案例。

1.通过在矩阵分解中整合内容相关信息解决冷启动

参考文献9中给出了一种在矩阵分解中整合用户特征和标的物特征的方案,可以有效地解决用户和标的物冷启动问题。这篇文章我们在《矩阵分解推荐算法》第四节6中进行过介绍,这里不再赘述。

2.通过不同ID间的结构链接关系及不同平台用户的特征迁移来解决冷启动

参考文献7中,每个item ID会关联对应的product ID、brand ID、store ID等,对于一个新的item来说,这个item所属的产品、品牌或者店铺可能会存在其他的item被用户点击购买过,那么一种很自然的方式是用这个item关联的其他ID的嵌入向量来构造该item的近似嵌入表示。

因为

要想让上式取值最大,当

来近似item的嵌入。当然不是跟item ID关联的所有ID都有嵌入,我们只需要选择有嵌入的ID代入上式中即可。通过模型线上验证,这种方式得到的嵌入效果还是很不错的,可以很好地解决商品冷启动问题。

同时,这篇文章中通过不同APP用户特征的迁移可以解决用户冷启动,下面也做简单介绍。

盒马和淘宝都属于阿里的电商平台,淘宝通过这么多年的发展已经覆盖了绝大多数的用户群,大部分盒马的用户其实也是淘宝的用户,那么对于盒马上的新用户,就可以用该用户在淘宝上的特征,将特征迁移到盒马上来,为他做推荐。下面来简要介绍推荐的流程与方法。

假设淘宝的用户为

,他们的交集为

)。那么按照下面流程就可以为盒马的新用户做推荐了:

(1)采用第四节3的方案计算出淘宝平台上用户的嵌入向量;

(2) 将

图6:通过跨平台特征迁移来为新用户做推荐

3.通过在图嵌入中整合附加信息解决冷启动

我们在第四节4中已经说明了在有向图嵌入构建Skip-Gram模型过程中整合附加信息可以解决冷启动问题,这里不再说明。

4.通过图片、文本内容嵌入解决冷启动问题

前面我们在第四节5中讲解了Content2Vec模型,该模型通过将图片、文本、类别等metadata信息嵌入,再将这些不同源的嵌入向量通过一个统一的模型获得联合嵌入表示,最终通过