Kang W C, Cheng D Z, Yao T, et al. Learning to Embed Categorical Features without Embedding Tables for Recommendation[C]//Proceedings of the 27th ACM SIGKDD Conference on Knowledge Discovery & Data Mining. 2021: 840-850.
摘要翻译
类别特征(例如用户/项目id)的嵌入学习是各种推荐模型的核心,包括矩阵分解和神经协同过滤。传统的标准方法创建了一个嵌入表,其中每一行表示每个唯一特征值的专用嵌入向量。然而,该方法不能有效地处理在现实世界的推荐系统中普遍存在的高基数特征和不可见的特征值(例如新的视频ID)。在本文中,作者提出了一种替代的嵌入框架深度哈希嵌入(DHE),用一个深度嵌入网络代替嵌入表来实时计算嵌入。DHE首先将特征值编码为一个具有多个哈希函数和转换的唯一标识符向量,然后应用一个DNN将该标识符向量转换为嵌入式。实验结果表明,DHE在模型尺寸较小的情况下,其AUC与标准的one-hot方法相当。编码模块具有确定性、不可学习性、无存储性,嵌入网络在训练期间进行更新,学习嵌入生成。该工作阐明了设计基于DNN的替代嵌入方案,而不使用嵌入表查找。
模型浅析
基于编码解码嵌入框架(),作者提出了设计良好编码的特性,然后介绍了DHE中的编码函数和解码函数,然后进行侧特征增强(side-feature-enhanced)编码设计以实现泛化。
Encoding Design
作者首先给出了设计良好编码需要满足的特性:
- Uniqueness(唯一性):对每个特性值的编码都应该是唯一的。这也是全嵌入和多重哈希方法的目标。否则,就会有一些特性值必须共享相同的编码。碰撞的编码使后续的解码功能无法区分不同的特征值,这通常会损害模型的性能。
- Equal Similarity(等相似性):当然光有独特性是不够的。以二进制编码为例,它使用二进制表示作为整数(例如id)的编码:例如𝐻(9)=[1,0,0,1]。我们可以看到,与𝐻(7)=[0,1,1,1]相比,𝐻(8)=[1,0,0,0]更类似于𝐻(9)。作者认为这引入了一个错误的归纳偏差(ID8和ID9更相似),这可能会误导后续的解码功能。双哈希也有一个类似的问题:在一个哈希函数中碰撞的两个特征值的编码比在两个哈希函数中没有碰撞的两个值的编码更相似。作者认为由于我们事先不知道分类特征之间的语义相似性,所以我们应该使任何两个编码同样相似,而不引入任何归纳偏差。
- High dimensionality(高维性):我们希望编码易于后续解码函数区分不同的属性特征。高维空间通常被认为是更可分离的(e.g. kernel methods),我们认为编码维度也应该相对较高。例如,one-hot编码具有一个非常大的维数(𝑛用于全嵌入,𝑚用于哈希嵌入)
-
High Shannon Entropy(高香农熵):香农熵(以“比特”为单位)测量某个维度中携带的信息量。从高熵的要求出发,从信息理论的角度来防止冗余维度。例如,一个编码方案可以满足上述三个属性,但在某些维度上,所有特征值的编码值都是相同的。因此,我们希望通过最大化每个维的熵来有效地利用所有维。例如,one-hot编码在每个维度上都有一个非常低的熵,因为在任何维度上的编码对于大多数特征值都为0。因此,one-hot编码需要极高的维度(即𝑛)。
对于编码需要满足的四个特性,作者在一张表中对现有的编码方式进行了总结。
可以看出,虽然Binary编码和Identity编码没有使用嵌入表,但并没有满足相同的相似性和高维的可区分性。
Dense Hash Encoding
为了满足以上的编码特性,作者提出了DHE。
在不丧失一般性的情况下,我们假设特征值是整数,因为我们可以将字符串值映射到具有字符串哈希的整数。
Encoding function 使用个通用哈希函数将特征值映射到维稠密且实值的编码。具体来说,我们有E'(s)= [𝐻^1(s), 𝐻^2(s), ..., 𝐻^k(s)] ,其中H^(i):N→{1,2,...𝑚}。这里设置的𝑚与嵌入表无关,我们只需要将其设置为一个相对较大的数字。作者这里说universal hashing是一种很好的方法,因为该方法的哈希值可以均匀的分布在{1,2,..,m}上。对于神经网络来说,其输入是实值的,因此作者采用了一种适当的变换将上述哈希的整数值转换为实值编码。在转换函数的选择上作者给出了两种选择:
Deep Embedding Network
该部分的Decoding Function 是将k维的编码向量转换为d维的嵌入表示特征。然而,所要学习的映射过程非常类似于一个高度非线性的特征变换,其中输入特征是固定的和不可学习的。
由于DNN所具有的通用函数逼近特性,作者在这一部分选择使用DNN来学习映射。并且深度网络可以使用更少的参数来近似函数。具体来说,作者使用前馈网络作为DHE的解码函数。通过具有(由自身实验条件所决定)节点的隐藏层来转换前序的k维编码。在输出层(𝑑个节点)将最后一个隐藏层转换为𝑑维特征值嵌入。
整个学习过程独立于n和m。因此DHE的一个独特的特性是,它不使用任何嵌入表查找,而纯粹依赖于隐藏层来动态地记忆和计算嵌入。然而,由于嵌入生成任务需要从哈希编码到嵌入的高度非线性转换,因此当前的嵌入网络是欠拟合的。
Side Features Enhanced Encodings for Generalization
DHE的一个有趣的扩展利用侧特性来学习更好的编码。这有助于将结构注入到我们的编码中,并实现特征值和新值之间更好的泛化。实现泛化的一种典型方法是使用为泛化提供其潜在相似性的侧边特征(稠密的特征信息以及词袋模型特征)。
基于one-hot的完全嵌入保留了类别特征的属性,并独立地生成嵌入(即任意两个id的嵌入都是独立的)。one-hot的嵌入方式是去中心化的结构,利于保存但很难实现生成。相比之下,DHE方案是一个中心化的解决方案:嵌入网络中的任何权值变化都会影响所有特征值的嵌入。由于DHE的解码功能是一个神经网络,我们有很大的灵活性来修改输入,比如合并侧特征。因此作者提出了DHE的侧特征增强编码,希望这能提高特征值之间的泛化性,并得到新的值。增强编码的一种直接方法是直接将可推广的特性和哈希编码连接起来。然后将增强的编码输入深度嵌入网络进行嵌入生成。认为哈希编码为记忆提供了一个唯一的标识符,而其他特征则支持泛化能力。
现在包括sklearn中的hash降维表示的学习都是基于特征所在位置下标进行哈希,从而得到当前位置对应的哈希值,然后将原始表示中特征所在位置的特征值加到哈希位置中。
而对于推荐系统,作者却选择了非常取巧的方式,对当前的item的id进行k次哈希,得到k个值并进行实值转换。从而与传统bow表示进行拼接使用DNN学习并降维。