Embedging与深度学习推荐系统结合

作为深度学习推荐系统不可分割的一部分,Embedding技术主要应用在如下三个方向。
(1)在深度学习网络中作为Embedding层,完成从高维稀疏特征向量到低维 稠密特征向量的转换。
(2)作为预训练的Embedding特征向量,与其他特征向量连接后,一同输入深度学习网络进行训练。
(3)通过计算用户和物品的Embedding相似度,Embedding可以直接作为推 荐系统的召回层或者召回策略之一。
下面介绍Embedding与深度学习推荐系统结合的具体方法

深度学习网络中的Embedding层

髙维稀疏特征向量天然不适合多层复杂神经网络的训练,因此如果使用深度学习模型处理高维稀疏特征向量,几乎都会在输入层到全连接层之间加入Embedding层,完成高维稀疏特征向量到低维稠密特征向量的转换,下图中用红框圈出了 Deep Crossing、FNN、Wide&Deep三个典型深度学习模型的Embedding层。
Embedging与深度学习推荐系统结合_第1张图片
可以清楚地看到,三个模型的Embedding层接收的都是类别型特征的one-hot 向量,转换的目标是低维的Embedding向量。所以在结构上,深度神经网络中的 Embedding层是一个高维向量向低维向量的直接映射。矩阵的形式表达Embedding层,本质上是求解一个m (输入高维稀疏向量的维度)*n(输出稠密向量的维度)维的权重矩阵的过程。如果输入向量是one-hot 特征向量,则权重矩阵中的列向量为相应维度one-hot特征的Embedding向量。
将Embedding层与整个深度学习网络整合后一同进行训练是理论上最优的 选择,因为上层梯度可以直接反向传播到输入层,模型整体是自洽的。但这样做的缺点是,Embedding 层输入向量的维度往往很大,导致整个 Embedding层的参数数量巨大,因此Embedding层的加人会拖慢整个神经网络的收敛速度。 正因如此,很多工程上要求快速更新的深度学习推荐系统放弃了 Embedding 层的端到端训练,用预训练Embedding层的方式替代。

Embedding的预训练方法

为了解决"Embedding层训练开销巨大”的问题,Embedding的训练往往独立于深度学习网络进行。在得到稀疏特征的稠密表达之后,再与其他特征一起输入神经网络进行训练。
典型的采用Embedding预训练方法的模型是FNN模型。它将 FM模型训练得到的各特征隐向量作为Embedding层的初始化权重,从而加快了 整个网络的收敛速度。 在FNN模型的原始实现中,整个梯度下降过程还是会更新Embedding的权重,如果希望进一步加快网络的收敛速度,还可以采用“固定Embedding层权重, 仅更新上层神经网络权重”的方法,这是更彻底的Embedding预训练方法。
再延伸一下,Embedding的本质是建立高维向量到低维向量的映射,而“映射”的方法并不局限于神经网络,可以是任何异构模型。例如,GBDT+LR组合模型,其中GBDT部分在本质上就是进行了一次Embedding操作, 利用GBDT模型完成Embedding预训练,再将Embedding输人入单层神经网络(即逻辑回归)进行CTR预估。
2015年以来,随着Graph Embedding技术的发展,Embedding本身的表达能力进一步增强,而且能够将各类补充信息全部融入Embedding中,使Embedding 成为非常有价值的推荐系统特征。通常,Graph Embedding的训练过程只能独立于推荐模型进行,这使得Embedding预训练成为在深度学习推荐系统领域更受青睐的Embedding训练方法。

Embedding作为推荐系统召回层的方法

Embedding自身表达能力的增强使得直接利用Embedding生成推荐列表成了可行的选择。因此,利用Embedding向量的相似性,将Embedding作为推荐系统召回层的方案逐渐被推广开来。其中,YouTube推荐系统召回 的解决方案是典型的利用Embedding进行候选物品召回的做法。
Embedging与深度学习推荐系统结合_第2张图片
其中模型的输入层特征全部都是用户相关特征,从左至右依次是用户观看历史视频的Embedding向量、 用户搜索词Embedding向量、用户地理属性特征Embedding向量、用户(样本) 年龄、性别相关特征。
模型的输出层是softmax层,该模型本质上是一个多分类模型,预测目标是用户观看了哪个视频,因此softmax层的输入是经过三层ReLU 全连接层生成的 用户Embedding, 输出向量是用户观看每一个视频的概率分布。由于输出向量的每一维对应了一个视频,该维对应的softmax层列向量就是物品Embedding。通 过模型的离线训练,可以最终得到每个用户的Embedding和物品Embedding。
在模型部署过程中,没有必要部署整个深度神经网络来完成从原始特征向量到最终输出的预测过程,只需要将用户Embedding和物品Embedding存储到线上 内存数据库,通过内积运算再排序的方法就可以得到物品的排序,再通过取序列中Top N的物品即可得到召回的候选集合,这就是利用Embedding作为召回层的过程。 但是,在整体候选集动辄达到几百万量级的互联网场景下,即使是遍历内积运算这种O(N)级别的操作,也会消耗大量计算时间,导致线上推断过程的延迟。 那么工程上有没有针对相似Embedding 的快速索引方法,能够更快地召回候选集合呢?我们可以换一个角度思考这个问题。由于用户和物品的Embedding同处于一个向量空 间内,所以召回与用户向量最相似的物品Embedding向量的过程其实是一个在向量空间内搜索最近邻的过程。如果能够找到高维空间快速搜索最近邻点的方法, 那么相似Embedding的快速搜索问题就迎刃而解了。 通过建立kd树索引结构进行最近邻搜索是常用的快速最近邻搜索方法,时间复杂度可以降低到O( log2n ) 。但是,kd树的结构较复杂,而且在进行最近邻搜索时往往还要进行回溯,确保最近邻的结果,导致搜索过程较复杂;另一方面,O( log2n ) 的时间复杂度并不是完全理想的状态。那么,有没有时间复杂度更低,操作更简便的方法呢?下面就介绍在推荐系统工程实践上主流 的快速Embedding向量最近邻搜索方法局部敏感哈希(LocalitySensitive Hashing, LSH )

局部敏感哈希的基本原理

局部敏感哈希的基本思想是让相邻的点落入同一个“桶”,这样在进行最近 邻搜索时,仅需要在一个桶内,或相邻的几个桶内的元素中进行搜索即可。如果保持每个桶中的元素个数在一个常数附近,就可以把最近邻搜索的时间复杂度降低到常数级别。
那么,如何构建局部敏感哈希中的“桶”呢?下面先以基于欧式 距离的最近邻搜索为例,解释构建局部敏感哈希“桶”的过程。 首先要明确一个结论:在欧式空间中,将高维空间的点映射到低维空间,原本相近的点在低维空间中肯定依然相近,但原本远离的点则有一定概率变成相近的点。
利用低维空间可以保留高维空间相近距离关系的性质,就可以构造局部敏感 哈希“桶”。 对于Embedding向量来说,也可以用内积操作构建局部敏感哈希桶。假设v是高维空间中的k维Embedding向量,x是随机生成的k维映射向量。内积操作可将v映射到一维空间,成为一个数值。
Embedging与深度学习推荐系统结合_第3张图片
映射操作损失了部分距离信息,如果仅采用一个哈希函数进行分桶,则必然存在相近点误判的情况。有效的解决方法是采用m个哈希函数同时进行分桶。同时掉进m个哈希函数的同一个桶的两点,是相似点的概率将大大增加。通过分桶找到相邻点的候选集合后,就可以在有限的候选集合中通过遍历找到目标点真正的K近邻。

多桶策略

采用多个哈希函数进行分桶,存在一个待解决的问题:到底是通过“与” (And) 操作还是“或” (Or)操作生成最终韵候选集。如果通过“与”操作(“点A和点 B 在哈希函数1 的同一桶中”并且“点A 和点B 在哈希函数2 的同一桶中”)生成候选集,那么候选集中近邻点的准确率将提高,但有可能会漏掉一些近邻点;如果通过“或”操作(“点A 和点B 在哈希函数1 的同一桶中” 或者“点A 和点B 在哈希函数2 的同一桶中”)生成候选集,那么候选集中近邻点的召回率提高,但候选集的规模变大,计算开销升高。到底使用几个哈希函数, 是用“与”操作还是“或”操作来生成近邻点的候选集,需要在准确率和召回率之间权衡,才能得出结论。
以上是欧式空间中内积操作的局部敏感哈希使用方法,如果将余弦相似度作为距离标准,余弦相似度衡量的是两个向量间夹角的大小,夹角小的向量即为“近邻”, 因此可以使用固定间隔的超平面将向量空间分割成不同哈希桶。同样,可以通过选择不同组的超平面提高局部敏感哈希方法的准确率或召回率。

总结

下表总结了涉及的Embedding 方法和相关技术的基本原理与要点。
Embedging与深度学习推荐系统结合_第4张图片

你可能感兴趣的:(深度学习推荐系统,推荐算法,机器学习,深度学习,矩阵)