目录
- 引言
- 一、注意力机制基础剖析
- (一)核心问题与应用本质
- (二)引入方式分类
- 二、Self - Attention与Target - Attention详解
- (一)Self - Attention
- (二)Target - Attention
- 三、双层Attention建模序列关系
- 四、注意力机制在推荐系统中的多元作用
- (一)凸显用户兴趣峰
- (二)特征进一步细化/抽象
- (三)对模块进行分化
- 五、总结
引言
在深度学习和人工智能蓬勃发展的当下,推荐系统已成为众多互联网产品的核心竞争力。而注意力机制,作为推荐系统中的关键技术,正发挥着举足轻重的作用。本文将深入探讨注意力机制及其在推荐系统中的多种变体,如Self - Attention、Target - Attention和双层Attention。
一、注意力机制基础剖析
(一)核心问题与应用本质
注意力机制旨在解决两个关键问题:一是在哪个层面以及如何应用,二是如何获取注意力系数,即由谁产出。其广泛应用的根本原因在于求和操作的普遍性。在众多模型结构中,只要存在向量求和,加权和就有施展的空间。以推荐系统为例,DIN(Deep Interest Network)和DIEN(Deep Interest Evolution Network)将注意力机制应用于用户行为序列建模,目的是获取更优质的用户特征表示。但注意力机制的应用远不止于此,它还能在其他多个环节发挥各种不同的作用。
(二)引入方式分类
-
加权和:这是最为常见且基础的引入方式。在原始模型结构中,若存在向量求和操作,便可以将其转化为加权和。AFM(Attentional Factorization Machines)便是一个典型的例子,它通过对特征交叉的加权和,自适应地学习不同交叉特征的重要性,进而提升模型的表现。
-
按元素/特征/模块乘:这种方式是将注意力系数直接乘到相应元素、特征或模块上,虽然不进行求和操作,但却能体现出不同元素重要性的差异。像LHUC(Layer -wise Hyperparameter Uniform Compensation)和SeNet(Squeeze - and - Excitation Networks),它们分别在各自的领域中利用这种方式,通过对特征的加权来突出重要信息,抑制次要信息。一个推荐系统中典型的LHUC结构如下:
快手基于LHUC结构分别推出了PPNet模型,如下:
在此基础上进一步衍生出了PEPNet模型,如下:
一个典型的SeNet结构,如下:
微博基于SeNet结构推出FibNet模型,如下:
-
以QKV形式做特征抽象表达:这是Transformer中特有的做法。在这种模式下,将输入数据抽象为query(Q)、key(K)和value(V)三个部分,通过一系列计算来实现对信息的聚焦和处理,这一做法为后续的Self - Attention和Target - Attention奠定了基础。
通常情况下,推荐系统中attention的K和V都为用户的点击序列,序列由item_id组成,Q为target_item_id ;但也有许多变种,比如Q为item_id + item_side_info,期望通过增加side_info来增加模型稳定性;或者Q为点击序列的均值,K和V为曝光未点击序列,期望利用点击序列过滤掉曝光未点击序列中用户感兴趣的item。
item_side_info是非常重要的信息,有多种做法;但有一点是明确的,Non-invasive 方式更佳,通过 Non-invasive 能有效减少item_side_info对原始纯item序列的干扰;另外item_side_info可以用直接加减、Concat、Gate网络等多种方式融合,一个典型的Non-invasive方式,如下:可以参考解读文章《告别低效融合!NOVA 机制如何让序列推荐 “如虎添翼”》,另外,Reliable Attention 也是一种可以尝试的做法
具体如下:
二、Self - Attention与Target - Attention详解
(一)Self - Attention
Self - Attention在推荐系统中扮演着关键角色,它从行为序列里抽取Q、K、V 。其核心聚焦于行为序列内部,通过精密计算序列中各元素间的关联,提取出能够表征用户兴趣的向量,以此展现用户交互历史的迁移情况与相关性。举例来说,在电商推荐场景中,Self - Attention能够深入分析用户购买不同商品的行为,挖掘出这些商品间的潜在联系,进而洞察用户的购物模式,发现其潜在需求,助力更全面地理解用户兴趣。
从更宏观的Encoder - Decoder框架视角出发,当query、key和value均来自编码层时,便构成了Self - Attention 。此时,它所涉及的并非Target与Source之间的Attention机制,而是Source内部元素间,或者Target内部元素间产生的Attention机制。换个角度理解,这相当于是在Target = Source这一特殊情形下的Attention。
(二)Target - Attention
Target - Attention的Q从target item中获取,K和V则从行为序列中抽取 。以Din(Deep Interest Network)为参考,它主要刻画了target item与候选物品的交叉关系,但在一定程度上忽略了行为序列内部各元素之间的依赖关系。在实际应用中,比如在内容推荐系统里,当为用户推荐一篇新文章(target item)时,Target - Attention会依据用户过往浏览文章的行为序列(K和V)来计算新文章与过往行为的关联程度,进而判断该文章是否符合用户的兴趣。
在Encoder - Decoder框架下,query来自于解码层,key和value来自于编码层时叫vanilla attention,即最基本的attention ,这种情况下的Target - Attention发生在Target的元素Query和Source中的所有元素之间。
对于推荐系统中的target_attention,debug和case排查一直都是比较难解决的问题。可以把Q和K组合计算后的权重(即上述代码的weight)打印出来,分析一下均值、方差以及直方图分布,就能在一定程度上发现问题。如果发现所有权重的均值都差不多,说明attention压根就没起作用,要么是序列特征出问题了,要么是target_item构造的emb有问题,这样可以快速定位问题。
三、双层Attention建模序列关系
双层Attention结合了Self - Attention和Target - Attention的优势,先进行Self - Attention,再进行Target - Attention 。通过Self - Attention,能够从行为序列中提取出融合了不同历史记忆依赖性的向量,然后利用Target - Attention,将这些向量与当前候选物料进行关联,衡量历史物料对当前候选物料的重要性。
这样得到的用户兴趣向量,既反映了候选物料与历史记忆之间的相关性,又体现了不同历史记忆之间的依赖性。在电商推荐中,这种双层Attention机制可以更好地捕捉用户的兴趣变化,不仅考虑到用户当前关注商品与历史购买商品的直接关联,还能挖掘历史购买商品之间的内在联系,从而为用户提供更精准、更符合其潜在需求的推荐。
四、注意力机制在推荐系统中的多元作用
(一)凸显用户兴趣峰
像DIN和DIEN等模型,利用注意力机制来凸显用户兴趣峰 。它们通过对用户行为序列的分析,能够准确捕捉到用户在不同时刻的兴趣焦点,将更多的注意力放在与当前兴趣紧密相关的行为上,从而为用户提供更贴合其当下兴趣的推荐。
(二)特征进一步细化/抽象
SeNet和AutoInt等模型把注意力机制当作特征进一步细化和抽象的工具 。通过对特征进行加权处理,这些模型可以更精细地刻画数据特征,挖掘出数据中隐藏的信息,提升模型对复杂数据的理解和处理能力。
(三)对模块进行分化
注意力机制可以作为分化模块的工具 。在模型中,它根据不同的输入生成不同的权重,以此决定后续模块中哪些信息需要突出,哪些需要抑制。例如在MMOE(Multi - gate Mixture - of - Experts)模型中,通过注意力机制生成的权重,使得不同的专家网络能够专注于不同的输入模式,提高模型的泛化能力和性能。
五、总结
注意力机制及其相关变体,如Self - Attention、Target - Attention和双层Attention,在推荐系统中扮演着不可或缺的角色。它们通过不同的方式对用户行为序列和推荐物品进行分析和关联,能够更精准地捕捉用户兴趣,提升推荐系统的性能和用户体验。随着技术的不断发展,注意力机制在推荐系统中的应用也将不断创新和拓展,为推荐系统的发展注入新的活力。