推荐系统中的嵌入方法

推荐系统中的嵌入方法

一、嵌入方法简介

词嵌入方法最早在自然语言处理领域得到大规模的使用,可以通过学习词的低维向量表示,用于解决词的句法和语义相关的NLP问题,如词性标注、关键词提取、句子相似度等等,并且取得了非常好的效果。这种嵌入技术吸引了很多其他领域的研究者进行尝试用于更多的业务场景,如搜索、推荐等,并取得了很好的效果。

熟悉深度学习的读者肯定知道,深度学习模型隐含层的向量可以作为一种生成嵌入表示的方法。自编码器和表示学习的一些方法和技术可以很好地用作嵌入,随着深度学习的发展壮大,嵌入方法得到大量使用。Word2Vec本身也是一种浅层的神经网络模型。

嵌入方法有很强的数学背景,在数学领域大量采用,几何学中有所谓的嵌入存在定理,像PCA分析本质上是一种高维空间到低维空间的嵌入。在数学上有所谓的射影几何学,研究的就是图形的射影性质,即它们经过射影变换后,依然保持不变的图形性质。可以说从高维空间到低维空间的任何一种映射其实就是一种嵌入。

在这里,我给嵌入方法一个很形式化的数学定义,让读者更好理解。假设(S,F)是n维空间中的一个二元组,S是由向量组成的集合,F是S中元素满足的某种关系。那么嵌入方法就是需要我们找到一个映射H,使得在H(S)中也大致满足(可能有一定的信息损耗)关系F。

现实生活中嵌入的案例很多,比如我们在平面中画三维物体其实是一种嵌入,我们需要保持物体之间的相对距离、位置以及遮挡关系,这种关系保持得越好,那么画的就越逼真。霍夫曼编码就是一种采用最小信息量来编码的方式,我们也可以将从一种可行的长编码到最短霍夫曼编码的映射关系看成是一种嵌入。

通过嵌入,我们可以在更低的维度解决问题,人类的大脑是比较善于处理低维(三维以下)问题的,对高维问题更难理解,所以嵌入方法也是一类方便我们理解和认知的方法。

为什么嵌入方法有效呢?

是因为高维空间表达能力太强,现实生活中的样本数量一般是较小的(相比于高维空间近乎无限的表达能力),只能“占据”高维空间很小的一个区域(这个区域一般等价于一个很低维的空间),所以我们可以将这些样本投影到等价的低维空间中,也能让它们有一定的区分度。

总结一下,嵌入方法是指通过数学变换(机器学习算法)将高维空间的对象映射到低维空间并保持相关性质的一种方法。

除了方便人类理解外,通过嵌入我们至少可以获得如下价值:

1)嵌入到低维空间再处理,可以减少数据存储与计算成本(高维空间有维数灾难);

2)嵌入到低维空间,虽有部分信息损耗,但是这样反而可能提升模型的泛化能力(样本一般含有噪音,通过嵌入低维空间,其实可以“过滤掉”部分噪音);

二、推荐系统中常见的几个嵌入方法

前面讲解完了嵌入方法的简介,在本节我们对几种用于推荐系统上的嵌入方法的算法原理进行简单介绍。

(1)通过矩阵分解进行嵌入

通过矩阵分解将用户和标的物嵌入k维特征空间进行表示。

用户行为矩阵 = 用户特征矩阵 X 标的物特征矩阵

我们可以将矩阵分解转化为一个机器学习问题。具体地说,我们可以将矩阵分解转化为等价的求最小值的最优化问题。通过求解最优化问题,我们就可以获得用户和标的物的特征嵌入。

(2)利用item2vec获得标的物的嵌入做推荐

SGNS(Skip-Gram with Negative Sampling),是Word2Vec(Google工程师在2013年提出的一种浅层神经网络嵌入方法)中一类重要方法,主要目的是将词嵌入到低维向量空间,可以捕获词上下文之间的关系。该方法自从被提出后在各类NLP任务中获得了非常好的效果,并被拓展到包括推荐系统等在内的多种业务场景中。

微软在2016年基于Word2Vec提出了item2vec,基于用户的操作行为,通过将标的物嵌入到低维空间的方式来计算标的物之间的相似度,进行关联推荐。下面对该方法进行简单介绍。

我们可以将用户操作过的所有标的物看成词序列,这里每个标的物就相当于一个词,只是这里用户操作过的标的物是一个集合,不是一个有序序列。虽然用户操作标的物是有时间顺序的,但是标的物之间不像词序列是有上下文关系的(一般不存在一个用户看了电影A之后才能看电影B,但是在句子中,词的搭配是有序关系的),因此这里当成集合会更合适。所以,我们需要对Word2Vec的目标函数进行适当修改,不同的是这里不存在固定的窗口大小了,窗口的大小就是用户操作过的标的物集合的大小。而其他部分跟Word2Vec的优化目标函数一模一样。

最终用向量来表示标的物的嵌入,用cosine余弦相似度来计算两个标的物的相似度。实际中采用了item2vec算法来对视频进行嵌入,用于视频的相似推荐中,点击率效果比原来的基于矩阵分解的嵌入有较大幅度的提升。

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

(3)基于有向图嵌入

给定一个图(V,E),V、E分别代表图的顶点和边的集合。所谓图嵌入就是学习每个顶点在低维空间中的向量表示。利用数学的术语就是学习一个映射,将图中每个顶点v映射为d维空间中的一个向量。

基于Word2Vec和的思路,我们可以先通过随机游走(random walk)生成图顶点的序列,再利用Word2Vec的Skip-Gram算法学习每个顶点的向量表示,这里可以选相邻的节点作对比。剩下的处理流程和思路跟Word2Vec是一样的了,这里不再赘述。

比如一个在异构信息网络(Heterogeneous Information Network,简写为HIN)中通过随机游走生成节点序列,再将节点序列嵌入低维空间,通过一组fusion函数变换后整合到矩阵分解模型中进行联合训练,通过求解联合模型最终进行推荐的方法,该方法也可以有效地解决冷启动问题。随着互联网的深入发展,异构信息网络是一类非常重要的网络,在当前的互联网产品中(社交网络产品、生活服务产品等)大量存在,基于HIN的个性化推荐也是未来一个比较火的方向之一。

(4)利用深度神经网络嵌入

最近几年深度学习驱动的人工智能第三次浪潮对计算机视觉、语音识别、自然语言处理领域有极大的推动作用,在部分机器学习任务(如图像分类、机器阅读理解精确匹配等)上的表现超越了人类的水平。同样深度学习在推荐上也有大量应用,并且在工业界取得了不错的效果。

利用深度学习嵌入进行推荐是深度学习推荐系统中的一类重要方法,其实Word2Vec嵌入也是一个神经网络模型,只不过是浅层神经网络。

我们知道自编码器是深度学习中一类非常重要的表示学习技术,通过自编码器,可以获得输入向量的低维表示,这个表示其实就是一种嵌入,我们可以利用这种嵌入来进行推荐。关于利用自编码器技术做推荐的文章有很多,有人利用自编辑器联合矩阵分解将附加信息整合到推荐模型中在部分推荐公开数据集上获得了不错的效果。也有人是利用自编码器来做嵌入进行推荐的例子。雅虎做过一个基于自编码器做推荐的案例,并且应用到了雅虎新闻的推荐中,取得了很好的效果,该文的方法也很新颖,值得学习了解。

三、嵌入表示的应用

在讲之前,先说明一下,对于推荐业务来说,最主要的两种推荐(产品)形态是标的物关联标的物推荐和完全个性化推荐,这里我们讲嵌入方法在推荐上的应用,主要是应用于这两种推荐场景。

通过构建算法模型,基于用户行为数据、标的物metadata数据将标的物嵌入到低维空间中,得到每个标的物的嵌入向量表示。有了标的物的嵌入向量,我们可以通过如下三种方式用于推荐业务。

(1) 构建标的物关联推荐

将标的物嵌入到同一个空间后,“距离”越近的标的物往往越相似。我们可以利用该性质来计算两个标的物之间的相似性。一般计算相似性可以采用cosine余弦的方法。

我们可以为每个标的物求出最相似的K个标的物作为关联推荐。具体在大规模数据情况下,怎么分布式求topK相似度,我在《协同过滤推荐算法》第三节计算topK相似度中有详细讲解怎么利用Spark来分布式计算,这里不再赘述。

(2) 对标的物进行聚类,形成个性化专题,用于产品运营,也可以用于关联推荐

有了标的物的向量表示,我们还可以对标的物进行聚类,同一类的标的物往往是相似的,这一类标的物可以用于制作专题,通过人工增减部分标的物,给专题起一个描述性的标题,就可以用于人工运营,这是算法和人工配合的很好的一个案例,特别适合长视频行业。

另外,聚类后的标的物也可以作为关联推荐,将同一类的其他标的物作为关联推荐列表。

(3) 为用户推荐个性化的标的物

有了标的物的嵌入向量表示,我们可以非常容易地为用户进行个性化推荐。具体的推荐策略有如下两个:

1)通过标的物的嵌入获得用户的向量表示(通过用户操作过的标的物的嵌入的“聚合”来获得用户的嵌入表示,可以采用(加权)平均或者RNN等方式来聚合),再将用户向量与标的物向量内积计算预测评分。

2)通过用户操作过的标的物的相似节目来为用户推荐。该方法可以将用户最近操作过的标的物作为种子标的物,将种子标的物最相似的N个标的物作为推荐的候选集。

总结

从数学的角度来说,嵌入方法就是一种投影映射,通过选择合适的映射将复杂空间的向量投影到低维空间,保持某些性质的不变性,可以更容易地解决很多机器学习问题。目前嵌入方法在推荐上的应用基本都是基于矩阵分解、Word2Vec及深度学习的思想通过部分整合附加信息来实现的。我相信未来有更多的理论知识的突破来支持嵌入方法更好地用于推荐业务,嵌入方法未来一定有更大的发展前景和应用价值,让我们拭目以待!

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦