本文介绍了一篇来自字节跳动团队的推荐算法工作,提出了一种名为OneTrans的统一特征交互与序列建模框架。该框架旨在融合序列特征与非序列特征进行充分交叉,并在线上AB测试中取得了每用户GMV提升5.68%的显著效果。
核心思想:统一交互,交叉为王
推荐系统的核心任务之一是挖掘特征间的复杂关系。从早期的LR、FM到后来的DCN,特征交叉的广度和深度一直是性能提升的关键。本文的核心思想可以概括为“交叉多多益善”,其创新点在于利用强大的 Transformer 架构,在一个统一的模块内实现了多种维度的特征交互。
具体来说,OneTrans实现了以下三种交互:
- 序列内交互:同一行为序列内不同Item之间的交互。
- 跨序列交互:不同行为序列(如点击序列、购买序列)之间的交互。
- 多源特征交互:序列特征(动态行为)与非序列特征(用户/物品静态画像、上下文)之间的交互。
为了实现统一交互,首先需要将异构特征转化为同构的Token序列。
方法详解:从特征Token化到OneTrans块
1. 非序列特征的Token化
为了让非序列特征(如用户性别、年龄)能与序列特征(如点击物品序列)进行交互,需要将它们也转换为Token(即Embedding向量)。论文提出了两种策略:
- 组式Token化:将非序列特征分组,每组特征通过不同的MLP网络生成一个对应的Token。
- 自动分割Token化:将所有非序列特征输入一个共享的MLP,输出一个向量,然后将该向量均匀分割成多个片段,每个片段作为一个Token。
2. 序列特征的Token化
对于多行为序列,首先将不同行为的Item Embedding投影到统一维度,然后按照时间戳或行为意图的顺序合并成一个长序列,并在不同行为序列之间插入可学习的 [SEP] Token进行分隔。
3. 特征交互模块:OneTrans块
经过上述处理,所有特征都被转换为一个Token序列,随后送入核心的OneTrans块进行交互。该模块本质是一个经过特殊设计的Transformer模块。
其核心设计在于因果注意力掩码的应用:
- 非序列Token可以关注所有序列Token:这确保了用户画像等静态信息能够充分感知其动态行为历史。
- 序列Token不能关注非序列Token:论文的消融实验表明,这种单向注意力机制在其实验场景下效果更好,但作者也指出这并非绝对,其他业务场景值得尝试。
这一设计带来了工程上的优势:跨请求的KV缓存。序列侧的Key和Value只需计算并缓存一次,在服务多个候选物品(非序列侧)时可以重复利用,只需增量计算新产生的行为,极大提升了在线推理效率。
此外,为了降低标准Transformer的计算复杂度,论文采用了金字塔堆叠策略:堆叠多层OneTrans块,但每一层输出的序列Token长度会逐渐缩短(通过裁剪查询集)。其目的是将长序列信息逐步浓缩到非序列Token中。
其他用于提升效率的工程技巧还包括:
- 使用 FlashAttention-2 减少GPU内存的I/O开销。
- 采用混合精度(BF16/FP16)训练与激活重计算以节省显存。
效果与思考
该方法在字节跳动的实际业务中进行了验证,线上AB测试实现了每用户GMV提升5.68%。
技术启示:
- 统一建模的价值:将序列与非序列特征的交叉置于统一的 深度学习 框架下进行端到端学习,比传统的分阶段或浅层交叉方法更具表达力。
- 效率与效果的平衡:本文的许多设计,如因果掩码、金字塔堆叠、KV缓存机制以及FlashAttention等工具的使用,都体现了在工业级推荐系统中对计算效率的极致追求。这为处理超长序列和大规模候选集提供了可行的技术路径。
- 实验的开放性:文中提到的“序列不关注非序列”的设定在其场景下有效,但并不意味着是普适最优解。这鼓励算法工程师在自己的业务数据和场景中,勇于尝试不同的交互模式,寻找最适合的解决方案。
总的来说,这项工作展示了如何将前沿的Transformer架构进行针对性改造,以解决推荐系统中复杂的特征交互问题,并同时兼顾线上服务的性能要求,是一篇具有扎实实践价值的论文。对推荐算法、特征工程感兴趣的同学,可以在 云栈社区 找到更多相关的技术讨论与资源分享。
|