Attention在推荐系统中的应用


  本篇博客重点关注Attention在推荐系统中的常见几类用法。Attention 这里就不多做介绍了,可以参考之前的博客。
  为什么推荐系统需要Attention?Attention在推荐系统中怎么用呢?
  纵观排序模型的发展历程,有两个主要的演进方向:
    1、特征组合自动化;
    2、用户行为序特征的挖掘。
  像华为很喜欢做各种特征交叉模型,典型代表如deepFM;而阿里很喜欢去挖掘用户行为序特征,典型模型如DIN、BST等。

  在推荐系统中 Attention 最常见用法就是对用户行为序列进行建模。我们先来介绍其中最具代表性的模型——DIN。

DIN

  论文:Deep Interest Network for Click-Through Rate Prediction
  地址:https://arxiv.org/abs/1706.06978

  论文中指出,用户兴趣具有以下两个特点:

  1、多样性(Diversity): 即用户在线上购物时往往同时表现出多种兴趣。

  2、局部聚焦(Local Activation): 即用户是否会点击推荐给他的某一件商品,往往是基于他之前的部分兴趣,而非所有兴趣。

  

 

  在DIN提出之前,使用了行为序特征的深度学习模型多采用上图所示的Base Model模型结构。模型可以划分成三层:

  1、embedding层
        该层负责将高维稀疏one-hot编码向量映射到低维稠密向量中。
  2、池化层
        (1)用户行为特征中的每个商品的所有特征embedding向量连接成一个向量,k个商品会得到k个向量;
        (2)然后对这k个向量进行sum pooling,也就是向量的同维度元素(element-wise)求和,最终得到一个表示用户行为特征的向量;
        (3)用户行为特征向量再与其他特征的embedding向量进行concat,得到全连接层的输入。
  3、全连接层
  Base Model有一个很大的问题,它对用户的历史行为是同等对待的,没有做任何处理,这显然是不合理的。一个很显然的例子是,离当现在越近的行为,越能反映用户当前的兴趣。 
  基于此,提出了DIN模型,模型结构图如下:
    
  DIN在基准模型的基础上,增加了一个激活单元。 为用户行为中每个商品与候选广告通过激活单元计算出一个激活权重。用户行为中的商品乘以权重再进行sum pooling。
  激活单元是一个前馈网络,输入是行为序中商品的 embedding 向量和候选广告的 embedding 向量;进入单元后,两个向量求外积(out product)( 或element-wise相减);为什么要做这一步?一种解释是为了增加这两个向量交叉的程度,因为只在全连接层交叉往往针对性不足。求外积得到的向量再与两个向量本身concat形成神经网络输入层;输出层只有一个节点,最终输出的就是该商品的激活权重。 
  以上即是DIN的大致思想。DIN从实际业务的出发,从用户历史行为中挖掘用户兴趣,针对每个候选广告,使用Activation Unit计算其与用户历史行为商品的相关weight,有效捕捉了用户兴趣多样性和局部聚焦的特点。

  而后面提出的DIEN模型,可以看作是升级版的DIN,主要针对DIN的两个缺点:
  1、用户兴趣应该是不断进化的,DIN无法捕获到兴趣的这种进化性;
  2、DIN无法保证通过用户的显式的行为得到的兴趣是有效的。
  详细参考论文 https://arxiv.org/abs/1809.03672

 BST

  论文:Behavior Sequence Transformer for E-commerce Recommendation in Alibaba
  地址:https://arxiv.org/abs/1905.06874
  Transformer 大火,使其成为NLP中最受欢迎的特征提取器(Transformer参考 ),把Attention升级成Transformer也很简单粗暴。模型结构如下:

  

  在NLP问题中,self-attention帮助我们编码句子中的某个词语时,关注句子中其他词对当前词的重要度,并将其他词的部分信息编码到当前词语中。简单理解就是可以更好地编码当前词语。
  Transformer在推荐系统中的主要作用,则是为了更好地学习用户行为序中商品的Embedding表示。
  在BST中,行为序中各商品的Embedding是concat起来的,然后再和其他特征的Embedding一起concat成一个长向量,作为后面全连接层的输入。DIN则是对用户行为序中商品的Embedding做sum pooling,最终得到的行为序特征的Embedding和单个商品的 Embedding 长度相同。所以在这一层上,BST的参数量要大于DIN。

美团Transformer

  在美团2020技术干货中,介绍了Transformer在美团APP搜索排序中的应用。迭代了以下三个版本,我们一一来看。

  第一版

  

  模型结构如上图所示。

  模型核心点有以下三个:

  (1)用户行为分成了短期行为序和长期行为序,用来捕捉用户的短期和长期特征;
  (2)使用 Transformer 对行为序中的item学习更好的 Embedding 表示;
  (3)对行为序中各商品的 Embedding 做sum pooling操作,得到行为序特征的 embedding 表示。

  方法简单直接,不需再过多介绍。不过该方法主要的问题是,对候选商品打分时,对于所有商品,行为序的 embedding 都是一样的。即对于目标商品,并没有对行为序中的item pay attention,Transformer只是用来更好的学习行为序中item的Embedding。

  第二版

  针对第一版存在的问题,并参考 BST 模型,在第一个版本的基础上引入 Target-item, 这样可以学习行为序列内部的 item 与 Target-item 的相关性,这样在对不同的 item 打分时,用户的 Embedding 表示是不一样的网络结构如下:

  

  第三版

   

  从模型结构图容易看出,第三版其实是 DIN + Transformer。基础架构还是DIN,和DIN相比,改进的地方有两个:

  (1)使用 Transformer 对行为序中的item学习更好的 Embedding 表示;

  (2)短期行为序和长期行为序,用来捕捉用户的短期和长期特征。

  

  文章开头简单介绍过,在推荐系统中 Attention 最常见用法就是对用户行为序列进行建模。

  还有一种用法是在进行特征组合时,对不同的特征pay attention。代表模型有AFM模型和AutoInt模型。

AFM

  论文:Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks∗

  地址:https://www.ijcai.org/Proceedings/2017/0435.pdf

  FM与DNN结合有两种主流方法:

  (1)并行结构:以 deepFM 为代表;
  (2)串行结构:以 NFM、AFM为代表。
  后面会出一篇详细介绍 FM 模型与 DNN 结合的文章。

  先简单回顾下FM模型。

  FM的函数形式如下

  
  二阶部分可以做如下化简:
  
  对于化简结果, 不考虑最外层的求和,得到的其实是一个K维的向量。
  之所以提出AFM模型,是因为FM在预测时有一个问题,即当某个特征与其他特征做交叉时,都是用同样的向量去做计算。但是不同特征之间的交叉,重要程度是不一样的。 
  如何体现这种重要度呢?FFM一种方法(后面再出文详细介绍),另一种就是 Attention机制。
  AFM就是在FM模型的基础上添加了Attention机制。模型目标函数如下:
    
  圆圈中有个点的符号表示哈达玛积,即逐点相乘。两个向量求哈达玛积得到的还是一个向量。
  a ij是Attention层输出的权重值,取值范围在[0,1]。
  现在求和之后得到的是一个K维的向量,还需要再跟一个向量 p 相乘,得到一个具体的数值。
  从FM和AFM的函数形式容易看出, AFM 的前两部分(即一阶部分)和 FM 相同,二阶部分的网络结构如下:
  图中的前三部分:sparse iput,embedding layer,pair-wise interaction layer,都和FM是一样的。
  embedding layer 得到的vector其实就是我们在FM中要学习的隐变量 v 。
  Attention 层的计算方式如下,也就是使用多层感知机的方式计算权重: 

    

AutoInt

  模型使用multi-head self-attention机制来进行自动特征交叉学习来提升CTR预测的效果。论文中的multi-head self-attention与Transformer中的多头注意力机制类似。
  模型有两个亮点:
  (1)将类别特征和连续特征都嵌入到低维空间中,因此模型允许不同类型的特征通过矢量算法相互交互;
  (2)通过多头注意力机制捕捉有意义的高阶特征组合,多头机制在不同的子空间中可以捕获不同的特征交互模式,并且可以通过层的叠加捕获更高阶的交互模式。
  模型结构如下

  输入层和嵌入层  

 

  1、类别特征,通过embedding映射成低维稠密向量;
  2、连续特征,赋予其一个embedding向量,用归一化后的特征值与embedding向量的乘积作为其最终表示。
  对于连续特征,也可以将其离散化后作为类别特征处理,孰优孰劣要在实际场景中测试。  

  交互层(Interacting Layer)

   

  相信熟悉self-attention和Transformer的各位看图就明白了AutoInt的原理。
  最后的输出层即经典神经网络。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM