1. 导读
LLM4CTR在训练推理中主要存在以下问题:LLM在处理长文本用户行为时的效率很低,随着用户序列的增长,LLM的效率无法对数十亿用户和商品进行训练。
本文提出了行为聚合分层编码(BAHE)来提高基于LLM的CTR建模的效率。BAHE提出了一种新的分层架构,将用户行为的编码与行为间交互解耦。
- 首先,为了防止相同用户行为的重复编码产生计算冗余,BAHE使用LLM的预训练浅层从用户序列中提取最细粒度的原子用户行为emb,并将其存储在离线数据库中。
- 然后,LLM的更深、可训练的层学习复杂的行为间交互,生成用户emb。这种分离允许高级用户表征的学习独立于低级行为编码,从而显著降低计算复杂性。
- 最后,将这些细化的用户emb与对应的商品emb结合到CTR模型中,计算CTR得分。
省流:
- 用户之间可能存在相同行为,比如都"购买星巴克",用LLM的浅层对这些行为做离线编码存储在数据库,这样不同用户的重复行为就不需要重复编码了;通过编码和聚合后,行为编码为d维这样可以使得我们可以用更长的序列,因为本来一个行为是K个d维的token,现在变成了一个,存储的编码相当于是一个emb table,对于不同的行为直接去查找,然后再LLM深层进行行为之间的交互
- 行为有多种,比如点击,购买等,不同行为组成不同的行为序列,对于不同的行为序列可以并行执行上面的步骤得到对应的emb,然后拼接得到用户emb
2.方法
alt text
行为聚合分层编码
对于用户i和j, 原子行为序列分别是
s_i=[a_1,a_2,a_3],
s_j=[a_3,a_1,a_2]。以往的基于LLM的CTR建模效率比较低:
- 冗余行为编码:相同的行为在不同用户的序列中冗余编码。如上述两个行为序列中都包含
a_1,a_2,a_3,会重复对这些行为进行编码和计算,导致计算冗余。
a_1,a_2,a_3,具有固定的含义,而它们的顺序因用户而异。现有的方法将表征提取和序列理解耦合在一起,当行为发生变化时,就需要更新,而这种更新的消耗是比较大的。
原子行为编码(ABE)
BAHE首先使用LLM的预训练低层(
LLM_{L_{low}})对所有行为进行编码, 然后将它们离线存储,作为行为嵌入表E。然后,LLM的更深的层将利用E作为token对应的表,学习用户行为之间的交互。原子行为的编码如下所示:
E_{a_{i}}=F_{p}\left(L L M_{L_{l o w}}\left(a_{i}\right)\right) \quad E=\left\{a_{i}: E_{a_{i}} \mid a_{i} \in H\right\}
其中
a_i是原子行为, 由K个文本token组成,所以
LLM_{L_{low}}(a_i)\in \mathcal{R}^{K\times d}有得到d维的emb,其中𝑑 是维度。
F_p是池化函数将
K\times d的tensor聚合为d维。BAHE将编码从token级别转换为行为级别,从而将编码长度从token数量减少到原子行为的数量。
行为聚合(BA)
获得原子行为嵌入表E后, 对于每一个原子行为
a_i,可以从E中检索对应的表征,对于用户u的第n个序列
s_{un},可以表示为下式,序列长度为M。
E\left(s_{\text {un }}\right)=\left[E\left(a_{\text {un } 1}\right) \oplus E\left(a_{\text {un } 2}\right) \oplus \ldots \oplus E\left(a_{\text {unM }}\right)\right]
然后利用LLM的深层进行行为交互的学习,表示如下,
Q_{un}\in \mathcal{R}^d表示用户u的第n个序列的表征。
Q_{un}=F_d(F_p(LLM_{L_{high}}(E(s_{un}))))
特征并行
为了避免LLM的注意力计算随着用户序列的数量的增加而呈指数级增长,在用
LLM_{L_{high}}处理用户行为的时候,对于n条序列可以并行处理提高效率,然后再将他们拼接起来
\bar{Q_u}=[Q_{u1}\oplus Q_{\boldsymbol{u}2}\oplus\ldots\oplus Q_{\boldsymbol{u}N}]
得到用户表征
Q_u和商品表征
Q_i后,拼接送入ctr模型,得到ctr打分
y=F_{\theta}(Q_u\oplus Q_i)3. 结果
从结果可以发现,在维持模型性能的同时可以显著降低训练时间和显存。