推荐系统遇上深度学习(五十二)-基于注意力机制的用户行为建模框架
关注小编的公众号,后台回复“进群”,一起来交流学习吧!
本文来介绍一下阿里巴巴数据技术团队与北京大学共同提出的 ATRank ,ATRank是基于注意力机制的用户异构行为建模框架,可应用于推荐系统中,一起来了解一下吧。
论文名称《ATRank: An Attention-Based User Behavior Modeling Framework for Recommendation》
论文地址:https://arxiv.org/abs/1711.06632
示例代码地址:https://github.com/jinze1994/ATRank/tree/master/atrank
1、背景
正如一个单词可以通过其上下文来表示,那么一个用户也可以通过其过往的行为序列来表示。但随着技术的发展,越来越多样化的用户行为可以被捕捉并保存在数据库中,使得用户行为表现出异构性,高度多样性。以电商领域的推荐为例、一个用户可能浏览、购买、收藏商品,领取、使用优惠券、点击广告、搜索关键词、写评论或者观看商家提供的商品介绍视频等等。这些不同的行为为我们更全面的理解一个用户提供了不同的视角。
面对用户如此多样化的行为,要想做到更精确的推荐,很大的挑战来自于能否对用户的异构行为数据进行更精细的处理。在这样的背景下,本文提出一个通用的用户行为序列建模框架,试图融合不同类型的用户行为,并以此框架进行推荐任务。
2、模型框架
我们先来看一下本文提出的用户行为建模框架的整体架构:
该框架分为以下几个模块:原始特征空间(raw feature spaces)、行为嵌入空间(behavior embedding spaces)、隐语义空间(atent semantic spaces)、行为交互层(behavior interaction layers)、下游网络层(downstream application network)。
接下来,我们首先定义一下用户行为序列表示,随后对上面几个模块进行依次介绍。
2.1 用户行为序列定义
用户行为序列被定义为U={(aj,oj,tj)|j=1,2,...,m}。其中,每一个行为被表示称三元组(a,o,t)。a代表用户的行为种类,o代表该行为发生时的一些特征表示,不同的行为种类的话,这里的特征可能是不同的。举个简单的例子,如果一个用户行为是购买行为,那么特征更多的是有关这个购买的物品的,如果一个用户行为是搜索关键词,那么特征更多是关于这个关键词的。t代表用户行为发生时的时间戳。
2.2 Raw Feature Spaces
在这一层中呢,会对用户行为进行进行分组,主要是按照不同的行为目标实体,而非不同的用户行为。还是举例说明一下。如浏览、购买、收藏商品,这些都是商品相关行为、领取、使用优惠券时优惠券相关的行为等等。那么这里划分不是按照浏览、购买、收藏商品去进行划分,而是根据商品行为、优惠券行为去进行划分。
划分后的结果表示为G={bg1,bg2,...,bgn}。这样,在每一个组bgi里,特征o都是相同的。
2.3 Behavior Embedding Spaces
在这一层,要将用户的行为转换为嵌入向量。对于用户在bgi这一组中的某一个行为(aj,oj,tj),我们会将aj、oj、tj分别转换为嵌入向量。
这里按照不同的组bgi进行划分的主要原因是针对不同的组,特征o是不同的。
下面主要来讲一下对时间t的编码方式,t是行为发生时的时间戳,首先会计算与当前时间的一个时间间隔,但此时仍然是一个连续变量,不好将其转换为embedding表示。这里文中提到了一种离散化的表示方法,将时间间隔按照如下的区间进行离散化:
在得到每个行为的embedding表示后,可以根据组别,得到每个组的embedding表示:
其中:
值得注意的是,每组得到的embedding可能是不同长度的,一是由于用户行为在每组下面的序列长度是不同的,二是由于不同的行为所包含的信息量也是差别很大的,如用户的一次购买行为,所能体现出的偏好信息是比一次关键词搜索是更多的,因而往往需要更长的embedding。
此外,这里的ubg1,ubg2,...,ubgn并非是一个向量,而是一组向量,即仍然是每一个行为对应一个向量,示意如下:
在不同组中,有些特征的embedding可能是共享的,如店铺ID、品类ID等等,但需要注意的是,对于时间的embedding在不同组是不共享的。
2.4 Latent Semantic Spaces
由于每组中行为的最终embedding长度不一,同时所处的向量空间也不同。这里其实就是通过线性变换来将其统一到同一个语义空间。
具体来说:
然后,在得到S之后,再通过多个投影矩阵,将S映射到多个不同的语义空间。
同样,这里的过程表示如下:
2.5 Self-Attention Layer
接下来,对每一个语义空间中的向量,经过一层self-attention layer,Self-Attention Layer想必大家都很熟悉了,在前面的文章中,咱们用excel将整个过程详细地捋了一遍,感兴趣的话可以查看原来的论文:
https://www.jianshu.com/p/2b0a5541a17c
在self-attention中,要分别输入queries和keys,queries用来计算Q、keys用来计算K和V。这里的的queries是Sk,而keys是S,过程表示如下:
写到这里,用户行为建模的过程就结束了,来回顾一下上面的整个流程(下图中每一个单元格代表的是一个向量):
这里还是想说,上面的过程仅仅是我的个人理解,网上的参考资料或者给出的示例代码中,均无法提供很好的参考依据。所以如果大家有不同的见解,欢迎与我一起讨论。
2.6 Downstream Application Network
在对用户行为进行建模之后,接下来我们就可以做许多下游任务了。文中是以推荐任务为例。这里仍然使用类似于self-attention的过程:
数学公式是不是看着头大?还是用excel来表示一下吧,假设下游任务是一个物品相关的行为:
好了,本文的介绍就到这里了,本文的重点是对用户行为序列建模的方法的介绍,对用户行为序列进行建模后,可以用于多种不同的下游任务,相比于DIN、DIEN和DSIN,它考虑了用户更多样的用户行为,但由于本文的时间比较早,所以也没有和DIN等模型进行对比,实践中感觉是可以尝试一下的。