Atrank

Posted by BY ZhangWenxiang on January 21, 2020

layout: post title: ATRank: An Attention-Based User Behavior Modeling Framework for Recommendation 详解 subtitle: attention recommendation date: 2020-01-21 author: ZhangWenXiang header-img: img/bg-ai-dark1.jpeg catalog: true tags: - 推荐系统 - attention - 行为建模 - 深度学习 - 异构行为 —

ATRank: An Attention-Based User Behavior Modeling Framework for Recommendation 详解

一、简介

  • 这是阿里巴巴和北大联合发表的一篇论文,在电商环境中,用户会存在多种行为:浏览、购买、收藏商品,领取、使用优惠券,搜索关键词等等。
  • 由于attention具有抓取序列间的内在关系的能力,因此利用attention来对用户不同的行为进行建模,致力于更全面的融合用户的不同行为。
  • 本文针对异构的行为,提出的是一个通用框架,下游任务可以根据业务场景自行设计。

二、模型框架

attention_mask_score_func_20190727

模型主要分为四个部分:

  • Raw Feature Spaces:原始特征,对应多种不同行为
  • Bahavior Embedding Spaces:embedding特征,对应多种不同行为
  • Latent Semantic Spaces:语义空间,将行为映射到多个语义空间
  • Self-Attention Layer:attention建模行为之间的潜在关联
  • DownStream Application Network:下游任务

以下是过程举例图解:每个u11,s11,f11等都是行向量如[0.1, 0.2, …]

excel_all

1、Raw Feature Spaces

这一部分主要是对原始特征进行介绍

  • 行为元祖:{a, o, t}, a表示行为类型, o表示行为对象, t表示行为发生时间
  • 用户的行为序列: U ={(aj , oj , tj ) j = 1, 2, …, m}
  • 行为分组:根据o对行为进行分组,G = {bg1, bg2, …, bgn},其中每个bg没有重合且并集就是全集G。举例:对商品的行为组成第一组bg1,搜索相关行为bg2,优惠券行为是bg3。

具体过程如下图:每个组内行为不同,embedding size也可能不同

excel_raw

2、Behavior Embedding Spaces

这部分其实就是根据原始特征,获取相应的embedding表示

  1. 首先是每个行为的特征embedding: uij =embi(oj)+lookupti(bucketizei(tj))+lookupai(aj),将商品、时间和行为三种类型的embedding进行聚合
    • 商品:embi(oj)就是物品oj对应的embeding表示,可以随机初始化
    • 时间:根据时间戳tj获取时间间隔gap,之后将时间间隔映射到以下分桶中[0, 1), [1, 2), [2, 4), …, [2k, 2k+1),这样就转化为类别特征了。接下来就可以直接类似onehot根据lookup得到embedding表示,这里注意不同的bg中,时间的lookup的embedding并不共享。
    • 行为:行为a本身就是类型特征,所有类似onehot直接loopup就可以了
  2. 接下来对行为进行分组 B = {ubg1,ubg2,…,ubgn}, 每个组的向量有组内的行为向量uij聚合而成 ubgi = concatj (uij )
    这里需要是注意是根据哪个维度concat(参考下图例中的维度)
    语言苍白的,还是看图吧:

excel_bg

  1. 不同的bg中涉及到相同的特征可以共享embedding,但是关于时间的则不共享(因为每种行为的时间影响不同)。

3、Latent Semantic Spaces

3.1 向量编码 S

  1. 由于每组中行为的最终embedding长度不一,因此首先要通过映射函数FMi(Ubgi)将每个ubg映射到相同的维度 Sall:
  2. encodding vevtor: 所有的bg向量 concat到一起,获得固定长度的编码向量 S = concat(0) (FM1 (ubg1 ), FM2 (ubg2 ), …, FMn (ubgn )) 注意是在哪个维度上concat(见图)
    语言是苍白的。。。还是看图吧:

excel_s

3.2 语义空间

  1. Sk = FPk(S):对编码向量S,采用多个映射函数FPk(),就可以映射到多个不同的空间,这部分很简单不赘述

3、Self-Attention Layer

每个语义空间Sk,分别与向量编码S进行attention计算,其中Sk用户生成query, S则用户生成key和value。

  1. score计算 Ak = softmax(a(Sk, S; θk))
    a(Sk, S; θk) = SkWkST
  2. attention向量计算 Ck =AkFQk(S)
  3. 多个attention向量进行concat,获取网络最终的向量表示,之后在全联接F即可
    C = F(concat(1) (C1 , C2 , …, CK ))

excel_attention

论文总结

  1. 特征处理(raw feature 和 behavior embedding):行为分组、时间间隔编码等方法,对用户的行为信息进行embedding。
  2. 统一编码:不同行为分组的特征concat到一起,形成一个最终的编码向量 S = concat(0) (FM1 (ubg1 ), FM2 (ubg2 ), …, FMn (ubgn ))
  3. multi-head attention 论文里面讲的的映射到多个语义空间,其实就是muti-head attention,在公布的代码中也是这样实现的 https://github.com/jinze1994/ATRank
    其实就是针对编码向量S进行多头的attention操作
    从这个角度理解,论文就简单多了,流程例图也可以简化为:

excel_multi_head

参考