推荐系统Embedding技术回顾

2022年03月20日 1,470次浏览

吴旭云(零卡)

引言

在许多自然语言处理(NLP)任务中,通常会使用神经网络将单词从高维稀疏向量转变为单词嵌入(Word Embedding),即单词的低维表示[1], 随着神经网络在各个领域应用的发展,这个概念已经扩展到NLP领域之外的其他应用。研究人员希望用Embedding的方式来更好的描述某些特征或者某些特定实体(Entity)。2013年,Bengio等[2] 扩展了这一概念,这里有一段直接引用,“...人们非常希望减少算法对特征工程的依赖,...人工智能只有学会识别和解开隐藏在低水平数据中的潜在特征,才能实现这一目标。”在这之后甚至出现了一门新的学科:表示学习(Representation Learning)。这一技术也迅速运用到推荐系统及推荐排序模型中,使用深度学习进行推荐的早期阶段的Wide&Deep[3]、YoutubeNet[4]中就出现了Embedding技术。并且由于Embedding技术能和NLP领域的其他技术很好的结合在一起,很多NLP的技术也由此迁移而来,带动了深度学习技术在搜广推领域的发展。

本文将回顾Embedding技术的由来,介绍它的算法及改进,以及它在搜广推领域的运用。

相关背景

Embedding与Onehot
Embedding可以与Onehot一起对比起来理解。在运用Embedding前,Onehot广泛地用来描述类别型特征(单词就是类别型特征中较为常见的一种)。想象一本词典一共有30000个单词,那"abandon"可以被表示为 [1,0,0,0,....,0],即第1位为1,代表abandon被激活,后面29999个0代表其他单词。如果"book"是第1000个单词,同理,它会被表示为[0,0,0,...1,0,0,0...0],即第1000位为1,其它位都是0。Onehot向量就是单词的“高维稀疏表示”,高维体现在这个向量长度有30000,稀疏体现在只有1个数字非0,其他29999个都是0。这样的表达是原子性的,每个单词本质上只是它的索引,Onehot向量之间难以体现相似度,再加上稀疏性带来的训练难度,基于此的模型性能是有限的。

Embedding向量可以从多个方面进行理解。例如可以把它当作Onehot向量在低维Embedding空间的投影,也可以把它当作在Onehot向量中被激活的那一个维度的隐向量。不管是投影还是隐向量,我们都可以理解为神经网络把隐藏的物理意义抽象地学习了出来。例如“Queen"这个词的Embedding向量有n维,可能其中某一个维度代表了“性别”,另一个维度代表了“权利”,等等。

广义的Embedding向量获得的方式有很多,例如矩阵分解就可以获得符合上述思想的Embedding,但我们还是用Word2Vec中的Embedding来举例,即Embedding向量是由Onehot向量乘以Embedding矩阵而来:

可以看到,如果把整个Embedding矩阵当作一组线性变换,那么就是这组Onehot向量经过线性变换,被投影到了另一个空间。同时,由于矩阵乘法的性质,我们还可以看到整个矩阵乘法实际上就是找到Embedding矩阵的第i行,其中i就是Onehot向量中非0元素的索引。“隐向量”的理解就是这么来的:我们可以把Embedding矩阵的行向量与Onehot向量中的每个元素一一对应,当作它的“隐向量”。可以用不同的物理意义去理解Embedding,但无论如何,这个Onehot向量都被压缩了——从5维压缩成3维。

从正交到关联:词嵌入Word Embedding
NLP任务中,一个单词/汉字通常表示为一个2进制的Onehot向量。所有Onehot向量组成的矩阵其实就是个单位矩阵,自然而然每个向量之间都是正交的。也因此每个单词之间的相似度都是0,无论用什么相似度算法去计算。而两个近义词,例如“图书”和“杂志”,一定比“图书”和“可乐”这两个词的相似度要高很多。因此基于Onehot的模型的性能可想而知,是有限的。为了解决这个问题,Mikolov等人[5]在2013年提出了两个著名的算法,CBOW和Skip-gram模型,建模上下文的词与中心词的关联关系。这两个模型输入的是单词的Onehot,通过一个矩阵乘法映射为Embedding向量,并用向量的内积来表示词语之间的相似度来进行训练。他们发现使用这种方法后,能够产生类似如下的效果:

下面介绍Skip-gram模型:

Skip-gram模型的输入是当前时间步的单词作为中心词,输出它前后4个位置的单词。它的网络结构也非常简单,可以被视为只有两个隐藏层的浅层神经网络:

其中O为输出,I为输入,H和V为隐藏层。O和I的维度都为(1,n),n为词典大小,H的维度为(n,k),V的维度为(k,n)。以“We propose two novel model architectures for computing"为例。当我们选择“model”作为中心词,我们把“two”、“novel”、“architectures”、“for”作为正样本输入模型。那么I为“model”的Onehot向量,长度是n,O表示其它的单词出现在中心词上下文的概率,长度也为n。我们希望O的“two”、“novel”、“architectures”、“for”这四个位置的概率去接近1,其他去接近0,以此作为一个多分类任务来进行模型训练。实际操作上我们会通过负采样把这个多分类任务转为2分类任务:

最后,如果假设H的维度是(n,20),我们把任意一个词的Onehot向量乘以它,得到一个(1,20)的向量即为它的Embedding向量。我们成功地把一个Onehot词向量从n维(比如30000)压缩到了20维。Skip-gram本身的目标不是得到Embedding矩阵H,但我们能把H提取出来作为Embedding矩阵放到下游任务中,例如Embedding向量代替单词Onehot向量的输入放入循环神经网络(RNN)里训练一个机器翻译模型。

更加快速的训练方法
还是用这张图:

我们可以通过把Embedding矩阵作为一个查找表,将向量*矩阵的操作改为用索引去查找Embedding矩阵的行向量,这样做可以大大降低时间复杂度。

Embedding技术在搜广推中的应用

类似Word Embedding那样建模句子的上下文单词与中心单词的关系,我们也可以用同样的方式建模用户的行为。一个简单的例子就是点击序列。我们可以把一个时间窗口内的点击序列当作一个句子,每个商品当作一个单词,那么每个点击商品的前后几个商品就是它的上下文。这样做是符合逻辑的,我们可以想象,[衣服A,裤子B,鞋子C,衣服D] 这一组点击会比[衣服A,手机A,巧克力C,口红D] 这一组发生的概率高。用Skip-gram模型对点击序列建模,我们就可以得到每个商品ID的Embedding向量。接下来我们也可以用类似NLP任务中把训练好的Embedding作为机器翻译的输入那样,把物品ID的Embedding放到下游的点击率预估模型中。这种先用语言模型训练出Embedding,再接下游任务的方法被称为预训练方法。我们也可以把商品Embedding的训练放入到神经网络的中间层,直接输入商品ID作为特征的一部分来训练这个点击率预估模型,这就是端到端的训练方法。以下是Youtube推荐系统模型YoutubeNet[4],YoutubeNet把用户过去观看的视频以及搜索词的Embedding向量与其他的特征拼接,端到端地去训练一个视频点击率预估模型。

这种Embedding加深度神经网络的架构成为了最近几年深度学习在推荐系统应用的基本结构。在介绍其他Embedding算法与模型前,我想再从数学的角度来谈一谈Embedding的有效性。

Emebedding的有效性
如在前文的“相关背景”部分已经介绍过的那样,从一个稀疏的、正交的Onehot矩阵映射到一个低维稠密的Embedding矩阵后,每个Embedding向量的内积(几乎)都是非零的。同时,我们还可以利用不同的方法,把用户和商品映射到同一个向量空间中[1,7]。这让我们对Embedding向量之间进行加减乘除、求平均、求内积的操作有了意义。

内积,同一个向量空间的单位向量之间的内积即为余弦相似度。在I2I召回中,我们可以计算用户点击、浏览、购买过的商品Embedding向量与其他商品Embedding向量的内积来计算物品相似度,选择TopK个物品来进行召回。我们也可以用时下流行的“注意力”技术,得到点击序列中每个物品与当前候选物品的相似度来近似得到用户对当前物品的兴趣程度等等。

相加减及求平均也是对Emebedding向量的常规操作。基于序列的推荐模型(Sequential Recommendation)通常会对固定时间窗口的用户的点击序列Embedding进行池化操作,这其中一个最简单的方法就是把点击序列的每个商品Embedding向量进行相加。相加的操作有两个好处,一个是站在“隐向量”的角度,相加能加强用户感兴趣的元素,过滤对用户无所谓的元素。举一个例子,假设每个商品的Embedding向量长度为3,分别代表“性价比”,“重量”,“大小”。某个用户点击了3个商品,它们的Embedding分别是[-1,0,1],[0,0.5,1.5],[1,-0.2, 0.3],把它们加起来得到[0,0.3,2.8],我们就可以认为这个用户更加关注“大小”这个属性。尽管实际上Embedding每一维没有特定的物理意义,我们还是可以抽象的去想象这个过程。另一个好处是相加也能够在某种意义上体现用户点击商品的数量。相减和求平均也有各自的意义,例如相减得到商品之间两两每个Embedding向量的差异性,等等。

Embedding的应用
冷启动
冷启动时缺少用户与物品之间的交互特征,新用户缺乏点击/购买的商品集,新商品缺乏用户们对它的点击、购买、评价等,此时我们可以用type级别的Embedding代替ID级别的Embedding得到用户/商品的特征[1]。以海拍客的奶粉为例,一罐新奶粉上线后缺乏用户与它之间的交互,我们就可以用”品牌“,“段数”,“产地”,“克重”等类别特征的Embedding拼接成为它的Embedding向量,再通过I2I的方式加入到召回集中,或是作为点击率预估模型的特征。

召回
除了前文提到计算物品之间的Emebedding相似度进行I2I召回以外,下面来介绍U2I召回,即User-Item,通过计算用户与物品间的相似度来进行召回。一种方法是把固定的时间窗口,例如过去的50个点击商品Embedding,求平均来当作用户Embedding,即“你就是你过去点击的集合”的思想,再把这个用户的Embedding与所有物品Embedding进行相似度计算,选取其中的TopK个物品进行召回。而谷歌的双塔模型[6]展示了另一种把用户和商品映射到同一个向量空间后直接计算向量相似度的方式。双塔模型中,用户侧和商品侧共享某些特征,同时再添加各自其它特征,再经过神经网络映射得到一个等长的向量。我们可以认为神经网络把用户和物品映射到了同一个向量空间,同一个向量空间的单位向量的内积就是向量相似度,由此我们直接得到了用户和商品之间的相似度,最后用这个相似度进行排序来进行召回。

排序
如果把Embedding加神经网络当作排序模型的基础模型[7],我们可以在这个基础上添加其它的技术方法来增加它的准确性。Embedding技术本身就是NLP领域迁移过来的,而目前NLP领域最流行,甚至把传统的循环神经网络(RNN)框架颠覆的注意力机制(Attention)[8]在推荐系统领域中也有了深入的发展。还是举一个例子,如果用户的点击序列是[衣服A,裤子B,鞋子C,巧克力D ,衣服E] ,而候选集需要对衣服F和衣服G进行排序,那么巧克力D 在特征中的重要性很可能是偏低的。那么如果对整个点击序列的Embedding直接相加或者求平均就可能因为存在巧克力D 而使得池化后的Embedding准确性下降。添加注意力机制可以解决这个问题。

以下是阿里妈妈[7]提出的深度兴趣模型(DIN),核心思想是通过一个浅层神经网络计算用户行为序列的物品Embedding与候选物品Embedding的注意力,再把这个注意力乘回行为序列的每个Embedding中,最后把它们进行相加得到描述用户兴趣的Embedding向量。

请注意,正是因为Emebedding向量的存在,才让这个“注意力”或者“兴趣程度”的分数能够计算出来。试想如果我们仅仅使用Onehot向量,就想把这个注意力分数学习出来是非常困难的。海拍客有大约15万个商品,采用Onehot向量把任意两个商品向量拼接可以得到一个长度为30万的向量,而这个30万维的向量只有两个非零元素,几乎不可能在这基础上构建神经网络来学习注意力分数。大名鼎鼎的DeepFM[9]也利用了这一思想,即直接学习任意两个物品之间的关联关系非常难,所以转而通过学习隐向量Embedding来得到它们的关联关系。除了物品ID级别之间的相互关系,DeepFM还可以学习物品ID与其它类别特征之间的关系。因为Embedding可以把任意维的Onehot压缩到同一维度:既可以把10万维的商品ID Onehot压缩成8维,也可以把1000维的品牌ID Onehot压缩成8维,甚至可以把2维的布尔特征例如“是否适合婴儿”升维到8维。所以利用Embedding我们可以对一切特征进行交互,在这方面的技术的探索也构成了现在排序模型发展的很大一块动力。

结论

本文回顾了Embedding在推荐系统的应用。尽管我们可以用不同的方式去理解Embedding,我还是更愿意用“隐向量”的方式去理解它,即Embedding向量在抽象维度上描述了了它代表的特定事物/特征。商品Embedding中很可能有一个维度代表了“性价比”,并且获得它的方法甚至不用价格本身这一特征,而只是通过建模用户行为序列就可以得到。让我再次引用Bengio的这段话,“...人工智能只有学会识别和解开隐藏在低水平数据中的潜在特征...”。 Embedding技术的发展正是符合了这一个目标。时下,“多模态”技术的发展也让多种数据形态的特征能够融合在同一个神经网络中。例如我们可以用卷积神经网络获得图片的特征,展开后得到图片的Embedding向量加入到推荐算法中,用户被一张图片吸引而打开它的商品详情页不也是一件很自然的事吗?未来我们也可以把多种模态的Embedding加入到海拍客的推荐算法中,更好的服务商家,找到让他们满意的商品。

参考文献

[1] Grbovic M, Cheng H. Real-time personalization using embeddings for search ranking at airbnb.

[2] Bengio Y, Courville A, Vincent P. Representation learning: A review and new perspectives.

[3] Cheng H T, Koc L, Harmsen J, et al. Wide & deep learning for recommender systems.

[4] Covington P, Adams J, Sargin E. Deep neural networks for youtube recommendations.

[5] Mikolov T, Chen K, Corrado G, et al. Efficient estimation of word representations in vector space.

[6] Yi X,Yang J, Hong L, et al. Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations.

[7] Zhou G , Song C , Zhu X , et al. Deep Interest Network for Click-Through Rate Prediction.

[8] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need.

[9] Guo H , Tang R , Ye Y , et al. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction.