“注意力机制”来源于人类最自然的选择性注意的习惯。最典型的例子是用户在浏览网页时,会选择性地注意页面的特定区域,忽视其他区域。正是基于这样的现象,在建模过程中考虑注意力机制对预测结果的影响,往往会取得不错的收益。近年来,注意力机制广泛应用于深度学习的各个领域,无论是在自然语言处理、语音识别还是计算机视觉领域,注意力模型都取得了巨大的成功。从2017年开始,推荐领域也开始尝试将注意力机制引入模型之中,这其中影响力较大的工作是由浙江大学提出的AFM和由阿里巴巴提出的DIN。
AFM
AFM模型可以被认为NFM模型的延续。在NFM模型中,不同域的特征Embedding向量经过特征交叉池化层的交叉,将各交叉特征向量进行“加和”,输入最后由多层神经网络组成的输出层。问题的关键在于加和池化 (Sum Pooling )操作,它相当于“一视同仁”地对待所有交叉特征,不考虑不同特征对结果的影响程度,事实上消解了大量有价值的信息。 这里“注意力机制”就派上了用场,它基于假设——不同的交叉特征对于结果的影响程度不同,举例来说,如果应用场景是预测一位男性用户是否购买一款键盘的可能性,那么“性别=男且购买历史包含鼠标”这一交叉特征,很可能比“性别= 男且用户年龄=30”这一交叉特征更重要,模型投人了更多的“注意力”在前面的特征上。 具体地说,AFM模型引入注意力机制是通过在特征交叉层和最终的输出层之间加入注意力网络(Attention Net)实现的。AFM的模型结构图如图所示, 同NFM一样,AFM的特征交叉过程同样采用了元素积操作, AFM加入注意力得分后的池化过程入下图所示 AFM模型使用了一个在两两特征交叉层(Pair-wise Interaction Layer)和池化层之间的注意力网络来生成注意力得分。该注意力网络的结构是一个简单的单全连接层加softmax输出层的结构,其数学形式入下所示。 其中要学习的模型参数就是特征交叉层到注意力网络全连接层的权重矩阵 W,偏置向量b,以及全连接层到softmax输出层的权重向量h。注意力网络将与 整个模型一起参与梯度反向传播的学习过程,得到最终的权重参数。 AFM是研究人员从改进模型结构的角度出发进行的一次有益尝试。它与具体的应用场景无关。但阿里巴巴在其深度学习推荐模型中引人注意力机制,则 是一次基于业务观察的模型改进,下面介绍阿里巴巴在业界非常知名的推荐模型——DIN。
DIN—引入注意力机制的深度学习网络
DIN的应用场景是阿里巴巴的电商广告推荐,在原来的基础模型中,用户特征组中的商品序列和商铺序列经过简单的平均池化操作后就进入上层神经网络进行下一步训练,序列中的商品既没有区分重要程度,也和广告特征中的商品id没有关系。然而事实上,广告特征和用户特征的关联程度是非常强的。假设广告中的商品是键盘,用户的点击商品序列中有几 个不同的商品id,分别是鼠标、T恤和洗面奶。从常识出发,“鼠标”这个历史 商品id对预测“键盘”广告的点击率的重要程度应大于后两者。从模型的角度来说,在建模过程中投给不同特征的“注意力”理应有所不同,而且“注意力得分”的计算理应与广告特征有相关性。 将上述“注意力”的思想反映到模型中也是直观的。利用候选商品和历史行为商品之间的相关性计算出一个权重,这个权重就代表了 “注意力”的强弱,加入了注意力权重的深度学习网络就是DIN模型,其中注意力部分的形式化表达如下所示。 其中,Vu是用户的Embedding向量,Va是候选广告商品的Embedding向量, Vi是用户u的第i次行为的Embedding向量。这里用户的行为就是浏览商品或店铺,因此行为的Embedding向量就是那次浏览的商品或店铺的Embedding向量。 因为加入了注意力机制,所以Vu从过去Vi的加和变成了Vi的加权和,Vi的权重Wi就由Vi与Va的关系决定,也就是上式中的g(Vi,Va),即“注意力得分”。那么,g(Vi,Va)函数到底采用什么形式比较好呢?答案是使用一个注意力激活单元来生成注意力得分。这个注意力激活单元本质上也是一 个小的神经网络,其具体结构如下图所示。 可以看出, 激活单元的输入层是两个Embedding向量,经过元素减 操作后,与原Embedding向量一同连接后形成全连接层的输入,最后通过单神经元输出层生成注意力得分。 DIN模型与AFM模型相比,是一次更典型的改进深度学习网络 的尝试,而且由于出发点是具体的业务场景,也给了推荐工程师更多实质性的启 发。
注意力机制对推荐系统的启发
注意力机制在数学形式上只是将过去的平均操作或加和操作换成了加权和或者加权平均操作。这一机制对深度学习推荐系统的启发是重大的。因为“注意力得分”的引入反映了人类天生的“注意力机制”特点。对这一机制的模拟,使 得推荐系统更加接近用户真实的思考过程,从而达到提升推荐效果的目的。从“注意力机制”开始,越来越多对深度学习模型结构的改进是基于对用户 行为的深刻观察而得出的。相比学术界更加关注理论上的创新,业界的推荐工程 师更需要基于对业务的理解推进推荐模型的演化。
DIEN
阿里巴巴2019年正式提出了DIN模型的演化版本——DIEN。其创新在于用序列模型模拟了用户兴趣的进化过程。下面对DIEN的主要思路和兴趣演化部分的设计进行详细介绍。无论是电商购买行为,还是视频网站的观看行为,或是新闻应用的阅读行 为,特定用户的历史行为都是一个随时间排序的序列。既然是时间相关的序列, 就一定存在或深或浅的前后依赖关系,这样的序列信息对于推荐过程无疑是有价值的。 例如,上周一位用户在挑选一双篮球鞋,这位用户上周的行为序列都会集中在篮球鞋这个品类的商品上,但在他完成购买后,本周他的购物兴趣可能变成买一个机械键盘。序列信息的重要性在于: (1) 它加强了最近行为对下次行为预测的影响。在这个例子中,用户近期购 买机械键盘的概率会明显高于再买一双篮球鞋或购买其他商品的概率。 (2) 序列模型能够学习到购买趋势的信息。在这个例子中,序列模型能够在 一定程度上建立“篮球鞋”到“机械键盘”的转移概率。 如果这个转移概率在全局统计意义上是足够高的,那么在用户购买篮球鞋时,推荐机械键盘也会成为一 个不错的选项。直观上,二者的用户群体很有可能是一致的。如果放弃序列信息,则模型学习时间和趋势这类信息的能力就不会那么强, 推荐模型就仍然是基于用户所有购买历史的综合推荐,而不是针对“下一次购买” 推荐。显然,从业务的角度看,后者才是推荐系统正确的推荐目标。
DIEN模型的架构
基于引进“序列”信息的动机,阿里巴巴对DIN模型进行了改进,形成了 DIEN模型的结构。 如图所示,模型仍是输入层+Embedding层+连接层+多层全连接神经网络+输出层的整体架构。图中彩色的“兴趣进化网络”被认为是一种用户兴趣的Embedding方法,它最终的输出是这个用户兴趣向量。DIEN模型的创新点在于如何构建“兴趣进化网络”。兴趣进化网络分为三层,从下至上依次是: (1 )行为序列层(Behavior Layer,浅绿色部分):其主要作用是把原始的id 类行为序列转换成Embedding行为序列。 (2 )兴趣抽取层(Interest Extractor Layer,米黄色部分):其主要作用是通过 模拟用户兴趣迁移过程,抽取用户兴趣。 (3 )兴趣进化层(Interest Evolving Layer,浅红色部分):其主要作用是通过 在兴趣抽取层基础上加人注意力机制,模拟与当前目标广告相关的兴趣进化过程。 在兴趣进化网络中,行为序列层的结构与普通的Embedding层是一致的,模拟用户兴趣进化的关键在于“兴趣抽取层”和“兴趣进化层”。
兴趣抽取层的结构
兴趣抽取层的基本结构是GRU ( Gated Recurrent Unit,门循环单元)网络。 相比传统的序列模型RNN和LSTM(Long Short-Term Memory,长短期记忆网络),GRU解决了RNN的梯度消失问题与LSTM相比,GRU的参数数量更少,训练收敛速度更快,因此成了DIEN序列模型的选择。 经过由GRU组成的兴趣抽取层后,用户的行为向量b(t)被进一步抽象化, 形成了兴趣状态向量理论h(t),在兴趣状态向量序列的基础上,GRU网络已经可以做出下一个兴趣状态向量的预测,但DIEN却进一步设置了兴趣进化层, 这是为什么呢?
兴趣进化层的结构
DIEN兴趣进化层相比兴趣抽取层最大的特点是加入了注意力机制。这一特点与DIN的一脉相承。从图3中的注意力单元的连接方式可以看出,兴趣进化层注意力得分的生成过程与DIN完全一致,都是当前状态向量与目标广告向量进行互作用的结果。也就是说,DIEN在模拟兴趣进化的过程中,需要考虑与目标广告的相关性。在兴趣抽取层之上再加上兴趣进化层就是为了更有针对性地模拟与目标广告相关的兴趣进化路径。由于阿里巴巴这类综合电商 的特点,用户非常有可能同时购买多品类商品,例如在购买“机械键盘”的同时 还在查看“衣服”品类下的商品,那么这时注意力机制就显得格外重要了。当目标广告是某个电子产品时,用户购买“机械键盘”相关的兴趣演化路径显然比购 买“衣服”的演化路径重要,这样的筛选功能兴趣抽取层没有。兴趣进化层完成注意力机制的引入是通过AUGRU (GRU with AttentionalUpdate gate,基于注意力更新门的GRU)结构,AUGRU在原GRU的更新门(updategate)的结构上加人了注意力得分,具体形式如下所示。
序列模型对推荐系统的启发
由于序列模型具备强大的时间序列的表达能力,使其非常适合预估用户经过一系列行为后的下一次 动作。事实上,不仅阿里巴巴在电商模型上成功运用了序列模型,YouTube、 Netflix 等视频流媒体公司也已经成功的在其视频推荐模型中应用了序列模型,用于预测用户的下次观看行为(next watch)。但在工程实现上需要注意:序列模型比较高的训练复杂度,以及在线上推断 过程中的串行推断,使其在模型服务过程中延迟较大,这无疑增大了其上线的难 度,需要在工程上着重优化。
|