在NLP任务中记忆能力对LLM很重要,作者受这方面启发,在ctr任务中引入独立的记忆机制来学习和记忆交叉特征的表征。本文提出多哈希codebook网络HCNet进行交叉特征表征的记忆。
HCNet使用多哈希codebook作为主存储位置,整个存储过程包括三个阶段:多哈希寻址、记忆恢复和特征压缩。将HCNet和DNN结合,提出了一个新的CTR模型MemoNet,本文的重点其实在于HCNet,HCNet可以看作是一个特征交互的记忆存储器,可以结合到所有其他的推荐方法中,而与简单的DNN结合后作者称之为MemoNet,这里主要介绍HCNet。
因此本文主要回答了以下问题:
image.png
多哈希codebook将交叉特征的表征划分为m块,而交叉特征的表征由m个emb组合得到,这有助于减少不同交叉特征出现相同的表征的情况。
一个二维矩阵 codebook的作用是存储记忆交叉特征表征,codebook定义为参数矩阵
,每一行是一个codeword,一个codeword的维度是
。行下表作为codeword的索引或地址。
如何构建?
对于特征
和特征
的特征交互
,我们可以用codebook中的一个codeword来记住这种交互,通过通用的哈希函数H()来将其映射到对应的codeword的地址上,表示如下,其中
为n,即codebook的大小,
是codeword对应的地址。
由于交叉特征的组合爆炸问题,一个codeword中可能随机映射10万甚至100万个交叉特征,这导致codeword的embedding为混合的表征,并且很难将它们区分开来。为了缓解这个问题,作者利用多个哈希函数对交叉特征进行编码,如下所示,通过多个哈希函数映射得到多个映射的地址
通过这m个地址,可以得到对应的m个codeword的emb
,
需要找到交叉特征对应的地址,并且要尽量降低不同交叉特征的重合度。通过哈希函数可能存在多个特征对应一个地址,所以这里考虑了多哈希的方式。通过多个哈希函数得到对应的地址,然后多个地址的emb组合得到当前交叉特征的emb。
首先,特征两两交互可以得到输入实例中的所有交叉特征。假设输入实例中有f个field,则可以得到f*(f-1)/2个交叉特征,特征集合表示为
。
每个特征i都会与剩下的f-1个field进行交互,针对交叉特征
为其构建对应的ID来和其他特征进行区分,并且
和
的ID是一样的,顺序不影响特征交互的结果,所以ID也是一样的。
如果
是数值型特征,则
,fieldid是当前特征所属于的field对应的索引,
是截断函数,对浮点数保留k为小数。
得到
后,就可以用上面提到的多哈希方式得到多个映射地址
和codeword的emb矩阵
前面通过多哈希的方式,相当于是将不同的特征交互存在了多个哈希地址对应的emb里,现在需要基于多个哈希地址的emb恢复得到真实的交叉特征对饮过的emb,用于后续的训练。
从codebook中恢复交叉特征
的一种简单方法是首先打平(flatten)二维的codeword的emb矩阵
, 变成一维的向量
, 然后经过MLP得到新的emb. 希望通过MLP提取不同codeword中包含的当前交叉特征的信息
是恒等函数, 不是非线性变换函数(sigmoid等). 作者发现非线性变换对模型性能产生了负面影响,因为codeword的emb块之间过早的复杂相互作用削弱了每个codeword中包含的信息信号。交叉特征的emb可以用这种方法恢复,称之为为“线性记忆恢复(LMR)”。这里得到的emb维度也是d和一阶特征的维度一致.
另一方法使用特征
和
的一阶emb来指导恢复。作者设计了一个注意力自网络,拼接特征
和
的表征
和
得到
, 以此为输入得到注意力mask
, 表达如下,
为ReLU,
为恒等函数
将上述mask变换后可得到
, 这里可以发现注意力mask矩阵的维度和codeword的emb矩阵的维度是一样的, 后续就是通过mask对codeword的emb进行过滤
对过滤后的
继续采用前面提到的LMR线性恢复方法.
对交叉特征进行压缩有以下两个原因:
对于特征
的交叉特征集合
,通过加权求和得到压缩后的特征,公式如下,那这边的a就是权重,通过注意力机制计算得到。作者通过所有的一阶特征从二阶特征emb中提取有效信息,因此注意力机制主要也是考虑一阶特征,拼接所有一阶特征emb后可以得到
,经过注意力网络得到对对应的mask,这里得到的R的维度和交叉特征的个数是对应的上的,因此R中的元素就是我们需要的权重。
得到压缩后的二阶特征后,拼接所有的交叉特征得到
假设存在f个特征field,则需要计算f*(f-1)/2个交叉特征,当f很大时,耗时就会很高,因此作者想通过找到一些关键交互来降低时间复杂度。在大量的特征中存在一部分特征对整个特征交互是最重要的,即这部分特征对模型整体性能影响很大,作者称这些特征field为key interaction field(KIF),数量为m,则可以使得原来的计算复杂度降低为m*(f-1)/2,m远小于f。
如何得到这m个关键特征field呢?
作者考虑了两种方法,一种简单直接的方式是看包含的特征个数,field中包含的特征越多说明这个field越重要。重要性打分为
第二种方式还是通过注意力分数的方式来判断,打分越高的越重要,在前面特征压缩的时候计算了注意力权重a,然后在这里对于特征field k考虑所有实例中所有与之交互的其他特征的注意力权重的和,然后从大到小排序。
不同的骨干网络