推荐系统(八)——推荐系统离散特征表征无embedding table

2022-09-19 11:52:21 浏览数 (1)

本文是针对推荐系统中离散特征的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激活函数更好
f(x)=x cdot tanh(ln(1 e^x))
  • 加入BN可以提升效果
  • 加入dropout效果不好,网络采用瓶颈结构会欠拟合

side feature

通过训练,模型记住了这些特征,而加入side feature可以进一步提升它的泛化性,对于没见过的特征值,能有更好的泛化能力。

0 人点赞