前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KDD 2021 | 谷歌DHE:不使用embedding table的类别型特征embedding

KDD 2021 | 谷歌DHE:不使用embedding table的类别型特征embedding

作者头像
NewBeeNLP
发布2021-12-16 15:51:30
9040
发布2021-12-16 15:51:30
举报
文章被收录于专栏:NewBeeNLPNewBeeNLP

作者 | Chilia 哥伦比亚大学 NLP搜索推荐 整理 | NewBeeNLP

类别型特征(用户ID/物品ID)的embedding在推荐系统中扮演着重要的作用,标准的方式是用一个(巨大的)embedding table为每个类别特征分配一个embedding。然而这种方式在推荐系统中存在以下几个挑战:

  • 参数量巨大(Huge vocabulary size):推荐系统通常包含几百万的用户ID/视频ID,如果每个特征都指定一个embedding会占据大量空间。
  • 特征是动态的(Dynamic nature of input):推荐系统中经常会出现全新的用户ID/视频ID,固定的embedding table不能解决OOV(out-of-vocabulary)问题.
  • 特征分布高度倾斜(Highly-skewed data distribution):推荐数据中低频特征的训练实例数量较少,因此该特征的embedding在训练阶段就很少更新,对训练的质量有显著影响。

这篇文章提出一个「Deep Hash Embeddings (DHE)」 的方式来缓解以上问题。

  • 论文:Learning to Embed Categorical Features without Embedding Tables for Recommendation[1]

1. 已有的类别特征embedding方法

1.1 One-hot Full Embedding

这种方式就是最常见的方法,即把所有类别特征进行编号,假设共 n 个特征。特征 s 首先通过one-hot进行编码 E(s) = \textbf{b} = \{0,1\}^n , 其中只有第 !b_s 项为1,其他都为0。接着通过一个可学习的线性变换矩阵(说白了就是embedding table,可以看作一层神经网络,但没有bias项)得到对应的embedding表示:\textbf{e} = W^T\textbf{b}

  • 优点:简单
  • 缺点:embedding table随特征数量线性增长(即内存问题);无法处理新出现的特征(OOV)。

1.2 One-hot Hash Embedding

为了解决One-hot Full Embedding中的内存消耗巨大的问题,可以使用「哈希函数」对类别特征进行「映射分桶」,将原始的 维的 one-hot 特征编码映射为 维的 one-hot 特征编码(即m个桶,m<<n相比One-hot Full Embedding,编码部分变为:E(s) = \textbf{b} = \{0,1\}^m , 其中只有 b_{H(s)} 项为1,其他为0。接着还是通过embedding table得到embedding表示:\textbf{e} = W^T\textbf{b}

  • 优点:能有效缓解One-hot Full Embedding方式的内存问题。
  • 缺点:只要是哈希,就会有「冲突」!哈希冲突导致多个ID共用一个embedding, 这会伤害模型性能。

为了解决哈希冲突的问题,可以做如下改进:

取k个不同的哈希函数 \{H^{(1)},H^{(2)},...H^{(k)}\} , 按照上述方法生成k个one-hot编码:\{\textbf{b}^{(1)},{\textbf{b}^{(2)}},...{\textbf{b}^{(k)}}\}

(分到了k个桶), 每个one-hot编码都去查一下embedding table,并且把最后的结果concat到一起/或者做avg-pooling。

2. Deep Hash Embeddings

DHE将整个特征嵌入分为「编码阶段(encoding)「和」解码阶段(decoding)」。下图是One-hot Embedding与DHE的整体区别:

可以看到:

  • One-hot Embedding的编码阶段将特征表示为one-hot的稀疏向量,解码阶段通过巨大的embedding look-up table(可看作一层神经网络)得到该特征的唯一表示。
  • DHE编码阶段通过多个(k=1024个)哈希函数将特征表示为稠密的Identifier vector, 解码阶段通过多层神经网络得到该特征的唯一表示。
2.1 Encoding阶段
2.1.1 一个好的encoding应该有哪些特性?
  • 唯一性(Uniqueness):每个不同特征值的编码应该是唯一的。
  • 同等相似性( Equal Similarity):只有唯一表示是不够的。例如二进制编码中:9表示为1001,8表示为1000:,7表示为0111。我们发现8的表示和9的表示更相似,这会引入bias,让编码器以为id = 8 与 id = 9比起id = 7 与 id = 9更相似,然而id类特征是没有顺序的,因此它们应该是同等相似的。
  • 高维(High dimensionality):我们希望这些编码便于后续解码函数区分不同的特征值。由于高维空间通常被认为是「更可分的」 (回忆一下SVM中的kernel方法...),我们认为编码维度也应该相对较高。
  • 高香农熵(High Shannon Entropy):香农熵(以bit为单位)测量一个维度中所携带的信息。从信息论的角度来看,高香农熵的要求是为了防止冗余维数。例如,一个编码方案可能满足上述三个属性,但在某些维度上,所有特征值的编码值是相同的。所以我们希望通过最大化每个维度的熵来有效地利用所有维度。例如,one-hot编码在每个维度上的熵都很低,因为对于大多数特征值来说,每个维度上的编码都是0。因此,one-hot编码需要非常高的维度(即),而且效率非常低。高香农熵就是要让encoding更加高效。
2.1.2 DHE编码阶段(encoding)的设计

提出的DHE运用 k 个哈希函数把每个类别特征映射为一个 k 维的稠密向量。

具体的,每个哈希函数 H^{(i)} 都将一个正整数 \mathbb{N} 映射到{1,2,...m},本实验中取 m = 1e6 。因此,k个哈希函数就把一个正整数 \mathbb{N} 映射成了k维的向量 E'(s) = [H^{(1)}(s),H^{(2)}(s),...,H^{(k)}(s)] , 向量中的每个元素都取自{1,2,...m}。实验中取k=1024.然而,直接用上面得到的编码表示是不合适的,因此作者进行了两个变换操作来保证数值稳定性:

  • 均匀分布(Uniform Distribution):把 E'(s) 中的每个值映射到[-1,1]之间
  • 高斯分布(Gaussian Distribution):把经过均匀分布后的向量转化为高斯分布 N(0,1) 。(作者说,这里是受到GAN网络的启发,用服从高斯分布的随机变量做GAN网络的输入。)

作者在文章中验证了这样设计的encoding满足3.1.1的四个条件。

2.2 Decoding 阶段

Decoding阶段需要把Encoding阶段得到的 k 维向量映射为 d 维。如上面的图所示,作者用多层神经网络来实现。但是,由于参数量明显比embedding table降低很多,这种多层神经网络会导致「欠拟合」。因此,作者尝试了Mish激活函数 f(x) = x·tanh(ln(1+e^x)) 来代替ReLU激活函数,引入更多的非线性,从而提升表征能力。

作者还考虑了batch normalization (BN)等训练技巧。但是不能使用dropout,因为我们的问题是欠拟合而不是过拟合。

2.3 加入辅助信息以增强泛化性(解决OOV问题)
  • 记忆性(memorization): 例如one-hot编码的每个id embedding都是独立的,因此只有记忆性没有泛化性
  • 泛化性(generalization): 本文提出的DHE方法,embedding network中的参数变化会影响所有特征的embedding结果。

对于物品ID/用户ID的特征embedding,可以考虑「拼接」上它们属性(年龄、品牌等)的表示,然后输入到DHE「解码」阶段来生成最终的特征嵌入。这样能够增强泛化能力。

3. 实验对比

作者首先对比了one-hot的方式以及多种hash的方法:

  • DHE取得了和one-hot相近的性能,但参数了极大的减小了。
  • 其他方法虽然减小了参数量,但性能都下降了

本文参考资料

[1]Learning to Embed Categorical Features without Embedding Tables for Recommendation: https://arxiv.org/abs/2010.10784v2

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NewBeeNLP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 已有的类别特征embedding方法
    • 1.1 One-hot Full Embedding
    • 1.2 One-hot Hash Embedding
    • 2. Deep Hash Embeddings
      • 2.1 Encoding阶段
        • 2.2 Decoding 阶段
          • 2.3 加入辅助信息以增强泛化性(解决OOV问题)
          • 3. 实验对比
            • 本文参考资料
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档