本文是针对推荐系统中离散特征的embedding方法提出了新的改进方案。这里主要会涉及到one-hot编码和hash,不明白的小伙伴可以先学习一下。
Learning to Embed Categorical Features without Embedding Tables for Recommendation https://dl.acm.org/doi/pdf/10.1145/3447548.3467304
背景
embedding在推荐系统中也是属于重要的一步,好的embedding可以节省空间,时间,并且达到好的推荐效果。现存的embedding方法可以统一概括为以下步骤:
现存的大部分embedding都是基于one-hot,这里以one-hot为例,先将原始数据例如“性别包含男,女”则one-hot就是2维,到这就是encoding,然后得到男或女的one-hot后通过word2vec等embedding方法对其进行变换,因为有的one-hot特征维度会很高,很稀疏,因此需要对其进行变换,到这就是decoding。
图1
只用one-hot
现存的基于one-hot的编码方式,几乎都是基于table来look up的。当词汇很多的时候,会导致table很大,会有很多参数在table上,并且one-hot这种只适用于已知离散特征类别数的情况,例如“我们假设在一个系统里面,车的类型我们观察到只有火车和轿车,因此one-hot为2维,但是有一天突然出来一个摩托车,这样使得泛化性受限”。
hash one-hot
通过hash的方法可以降低所需要的的维度。
- 假设原来one-hot对应1的位置为s,那么这里通过一个hash函数将其映射到H(s)位置,这个hash函数对应的维度为m,使m小于原来的one-hot维度,则可以减小所用encoding维度。但是这里会存在一个问题:hash过程中可能会冲突
- 后续提出了改进方案:将一个hash函数增多至k个hash函数,经过k次hash将每次hash得到的m维向量拼接。
方法
上述无论是单纯用one-hot还是one-hot hash都是基于one-hot的,并且需要embedding table。而本文所提方法不需要embedding table,并且速度更快。
encoding设计
encoding设计作者主要遵循四个准则:
- 唯一性:每个离散特征的表达必须是唯一的
- 等相似性:不同特征编码的表示需要具有相同的相似度。比如:二进制编码,7为0111, 8为1000, 9为1001,显然从这里可以发现8和9的编码更相似,而7和8,9差异更大,这是不好的。
- 高维性:高维的向量可以更有助于分类
- 高香农熵:让每个维度都起作用,反例:one-hot,除了两个是1的地方对应的位置不同,其他地方都是0,就是浪费了很多维度。
DHE(Dense Hash Encoding)
假设特征的值是整数,因为就算是字符串也可以通过hash映射到数字。
- 和「背景」中提到的方法类似,先将原有的特征通过k个全域哈希(universal hash)函数映射为k个向量,每个向量m维,元素值在[1,2,...m]中的整数,然后进行拼接。
- 然后通过变换(标准化),将每个m维整数向量变换为实数向量。
- uniform distribution。先通过简单的归一化,将原有m维向量归一化到[-1,1]
- Gaussian Distribution。上述归一化后,通过Box-Muller变换方法进行变换。
decoding设计
decoding阶段也和之前的方法有所不同,之前的方法直接经过1层变换(具体看图1)就解码了。本文采用DNN来进行解码。主要考虑到DNN拟合能力强,可以用较少的参数拟合那些又宽又浅的层。
- ReLU的加入效果并不好,经过各种尝试,利用Mish activation激活函数更好
- 加入BN可以提升效果
- 加入dropout效果不好,网络采用瓶颈结构会欠拟合
side feature
通过训练,模型记住了这些特征,而加入side feature可以进一步提升它的泛化性,对于没见过的特征值,能有更好的泛化能力。