前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MemoNet:用codebook记住所有的交叉特征来做CTR估计

MemoNet:用codebook记住所有的交叉特征来做CTR估计

作者头像
秋枫学习笔记
发布2023-09-11 09:17:30
6341
发布2023-09-11 09:17:30
举报
文章被收录于专栏:秋枫学习笔记
标题:MemoNet: Memorizing All Cross Features’ Representations Efficiently via Multi-Hash Codebook Network for CTR Prediction 地址:https://arxiv.org/pdf/2211.01334.pdf 代码:https://github.com/ptzhangAlg/RecAlg 会议:CIKM 2023 公司:新浪微博

1.导读

在NLP任务中记忆能力对LLM很重要,作者受这方面启发,在ctr任务中引入独立的记忆机制来学习和记忆交叉特征的表征。本文提出多哈希codebook网络HCNet进行交叉特征表征的记忆。

HCNet使用多哈希codebook作为主存储位置,整个存储过程包括三个阶段:多哈希寻址记忆恢复特征压缩。将HCNet和DNN结合,提出了一个新的CTR模型MemoNet,本文的重点其实在于HCNet,HCNet可以看作是一个特征交互的记忆存储器,可以结合到所有其他的推荐方法中,而与简单的DNN结合后作者称之为MemoNet,这里主要介绍HCNet。

因此本文主要回答了以下问题:

  • 多哈希codebook,多哈希寻址,记忆恢复和特征压缩的why,what,how(为什么,是什么,怎么做)
  • 特征很多,两两交互后会很多,如何提高效率

2.方法

image.png

2.1 多哈希codebook

WHY
  1. 用来存储交叉特征
  2. codeword和分桶存在以下两个区别:
  • 首先,分桶通常不会像codeword那样包含大量的碰撞项(不同的交互映射到同一个地址),这会对模型性能造成严重损害;
  • 其次,同一个桶中的所有元素共享相同的表征

多哈希codebook将交叉特征的表征划分为m块,而交叉特征的表征由m个emb组合得到,这有助于减少不同交叉特征出现相同的表征的情况。

WHAT

一个二维矩阵 codebook的作用是存储记忆交叉特征表征,codebook定义为参数矩阵

C\in \mathbb{R}^{n\times l}

,每一行是一个codeword,一个codeword的维度是

l

。行下表作为codeword的索引或地址。

HOW

如何构建?

对于特征

x_i

和特征

x_j

的特征交互

x^{(i,j)}

,我们可以用codebook中的一个codeword来记住这种交互,通过通用的哈希函数H()来将其映射到对应的codeword的地址上,表示如下,其中

\|C\|

为n,即codebook的大小,

a^{(i,j)}

是codeword对应的地址。

\mathbf{a}^{(i, j)}=\mathbf{H}\left(\mathbf{x}^{(\mathbf{i}, \mathbf{j})}\right) \quad M O D \quad\|\mathbf{C}\|

由于交叉特征的组合爆炸问题,一个codeword中可能随机映射10万甚至100万个交叉特征,这导致codeword的embedding为混合的表征,并且很难将它们区分开来。为了缓解这个问题,作者利用多个哈希函数对交叉特征进行编码,如下所示,通过多个哈希函数映射得到多个映射的地址

\mathbf{A}^{(i, j)}=\left\{\mathbf{H}_{t}\left(\mathbf{x}^{(i, j)}\right) \quad M O D \quad\|\mathbf{C}\|\right\}_{t=1}^{m}

通过这m个地址,可以得到对应的m个codeword的emb

C^{(i,j)}\in \mathbb{R}^{m\times l}

C^{(i,j)}=[C_1^{(i,j)},C_2^{(i,j)},...,C_m^{(i,j)}]

2.2 HCNet

2.2.1 多哈希寻址

WHY

需要找到交叉特征对应的地址,并且要尽量降低不同交叉特征的重合度。通过哈希函数可能存在多个特征对应一个地址,所以这里考虑了多哈希的方式。通过多个哈希函数得到对应的地址,然后多个地址的emb组合得到当前交叉特征的emb。

HOW

首先,特征两两交互可以得到输入实例中的所有交叉特征。假设输入实例中有f个field,则可以得到f*(f-1)/2个交叉特征,特征集合表示为

\mathcal{E}_2^{all}

每个特征i都会与剩下的f-1个field进行交互,针对交叉特征

x^{(i,j)}

为其构建对应的ID来和其他特征进行区分,并且

x^{(i,j)}

x^{(j,i)}

的ID是一样的,顺序不影响特征交互的结果,所以ID也是一样的。

ID_2^{(i,j)}=ID_2^{(j,i)}=concat[ID_i,ID_j]

如果

x_i

是数值型特征,则

ID_i=[fieldID,\phi_k(x_i)]

,fieldid是当前特征所属于的field对应的索引,

\phi_k

是截断函数,对浮点数保留k为小数。

得到

ID_2^{(i,j)}

后,就可以用上面提到的多哈希方式得到多个映射地址

A_2^{(i,j)}

和codeword的emb矩阵

C^{(i,j)}

2.2.2 记忆恢复

WHY

前面通过多哈希的方式,相当于是将不同的特征交互存在了多个哈希地址对应的emb里,现在需要基于多个哈希地址的emb恢复得到真实的交叉特征对饮过的emb,用于后续的训练。

HOW

从codebook中恢复交叉特征

x^{(i,j)}

一种简单方法是首先打平(flatten)二维的codeword的emb矩阵

C^{(i,j)}

, 变成一维的向量

e^{(i,j)} \in \mathbb{R}^{1\times ml}

, 然后经过MLP得到新的emb. 希望通过MLP提取不同codeword中包含的当前交叉特征的信息

v^{(i,j)}=\phi_1(e^{(i,j)}W_1) \in \mathbb{R}^{1\times d}
\phi

是恒等函数, 不是非线性变换函数(sigmoid等). 作者发现非线性变换对模型性能产生了负面影响,因为codeword的emb块之间过早的复杂相互作用削弱了每个codeword中包含的信息信号。交叉特征的emb可以用这种方法恢复,称之为为“线性记忆恢复(LMR)”。这里得到的emb维度也是d和一阶特征的维度一致.

另一方法使用特征

x_i

x_j

的一阶emb来指导恢复。作者设计了一个注意力自网络,拼接特征

x_i

x_j

的表征

v_i

v_j

得到

Z=concat[v_i,v_j]\in \mathbb{R}^{1\times 2d}

, 以此为输入得到注意力mask

I

, 表达如下,

\phi_2

为ReLU,

\phi_3

为恒等函数

I=\phi_3(\phi_2(ZW_2)W_3) \in \mathbb{R}^{1\times ml}

将上述mask变换后可得到

I_r=[I_1,...,I_m]\in \mathbb{R}^{m\times l}

, 这里可以发现注意力mask矩阵的维度和codeword的emb矩阵的维度是一样的, 后续就是通过mask对codeword的emb进行过滤

\begin{aligned} \mathbf{C}_{I}^{(i,j)}& =\mathbf{I}^{r}\otimes\mathbf{C}^{(i,j)}\in\mathbb{R}^{m\times l} \\ &=[\mathbf{I}_{1}\otimes\mathbf{C}_{1}^{(i,j)},\mathbf{I}_{2}\otimes\mathbf{C}_{2}^{(i,j)},......,\mathbf{I}_{m}\otimes\mathbf{C}_{m}^{(i,j)}] \end{aligned}

对过滤后的

C_I^{(i,j)}

继续采用前面提到的LMR线性恢复方法.

2.2.3 特征压缩

WHY

对交叉特征进行压缩有以下两个原因:

  • 首先,由于交叉特征的高度稀疏性,大量的交叉特征emb会带来噪声。
  • 第二,有f*(f-1)个二阶交叉特征,如果不压缩emb层会很宽,即维度会很大
HOW

对于特征

x_i

的交叉特征集合

\mathcal{E}_2^i=\{x^{(i,j)}\}_{1\leq j \leq f}

,通过加权求和得到压缩后的特征,公式如下,那这边的a就是权重,通过注意力机制计算得到。作者通过所有的一阶特征从二阶特征emb中提取有效信息,因此注意力机制主要也是考虑一阶特征,拼接所有一阶特征emb后可以得到

V=concat[v_1,...,v_f]\in \mathbb{R}^{1\times fd}

,经过注意力网络得到对对应的mask,这里得到的R的维度和交叉特征的个数是对应的上的,因此R中的元素就是我们需要的权重。

\mathbf{v}_2^i=\sum_{j=1}^f\mathbf{a}_j\mathbf{v}^{(i,j)},j\neq i
\mathbf{R}=\phi_5\left(\phi_4\left(\mathbf{VW}_4\right)\mathbf{W}_5\right)\in\mathbb{R}^{1\times f\left(f-1\right)}

得到压缩后的二阶特征后,拼接所有的交叉特征得到

V_2=[v_2^1,...,v_2^f]\in \mathbb{R}^{1\times fd}

2.3 Key Interaction Field(如何提高效率)

假设存在f个特征field,则需要计算f*(f-1)/2个交叉特征,当f很大时,耗时就会很高,因此作者想通过找到一些关键交互来降低时间复杂度。在大量的特征中存在一部分特征对整个特征交互是最重要的,即这部分特征对模型整体性能影响很大,作者称这些特征field为key interaction field(KIF),数量为m,则可以使得原来的计算复杂度降低为m*(f-1)/2,m远小于f。

如何得到这m个关键特征field呢?

作者考虑了两种方法,一种简单直接的方式是看包含的特征个数,field中包含的特征越多说明这个field越重要。重要性打分为

s_{F_k}=\|F_k\|

第二种方式还是通过注意力分数的方式来判断,打分越高的越重要,在前面特征压缩的时候计算了注意力权重a,然后在这里对于特征field k考虑所有实例中所有与之交互的其他特征的注意力权重的和,然后从大到小排序。

3.结果

不同的骨干网络

往期推荐 CIKM'23 | DTRN: 多任务学习中的任务特定底层表征网络 闲聊因果效应:离线评估方法 KDD'23 交大,华为 | MAP:用于点击率预估的模型无关的预训练框架 CIKM'23 美团 | DCIN:考虑点击item上下文信息的CTR预估方法

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

本文分享自 秋枫学习笔记 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.导读
  • 2.方法
    • 2.1 多哈希codebook
      • 2.2 HCNet
        • 2.2.1 多哈希寻址
        • 2.2.2 记忆恢复
        • 2.2.3 特征压缩
      • 2.3 Key Interaction Field(如何提高效率)
        • 往期推荐 CIKM'23 | DTRN: 多任务学习中的任务特定底层表征网络 闲聊因果效应:离线评估方法 KDD'23 交大,华为 | MAP:用于点击率预估的模型无关的预训练框架 CIKM'23 美团 | DCIN:考虑点击item上下文信息的CTR预估方法
    • 3.结果
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档