用户行为序列的处理方式有很多,从原始的pooling
类,如average pooling
、weighted average pooling
等,到Attention
类,如DIN
中的处理模式等,到Sequence
类,如DIEN
中的GRU
等。Transformer
一出生就大放异彩,而用户行为序列天然就适用于Transformer
等这种序列模型,于是Transformer
在用户行为序列中被广泛使用。本文,从0开始构建适用于推荐系统的Transformer Layer
,会设计到其中的各种细节,并辅以代码详细讲解。
Transformer
的经典结构图如下所示:
首先明确一点,推荐系统中的Transformer Layer
只有上图左半部分,即Encoder
,Decoder
是不参与的。 实现Transformer Layer
,可以将其拆解为以下几个步骤实现:
Positional Embedding
Self Attention
Multi-head Attention
Feed-forward Network
下面我们逐一进行实现,Action!
Positional Embedding
什么是Positional Embedding
?为什么需要它?简而言之,就是Self Attention
的计算过程中没有考虑item
在行为序列中的位次信息,所以需要增加与位置相关的Positional Embedding
,以引入位次信息,其具体表现形式就是一个矩阵,其中的每个元素均与item
在序列中的位次相关。想要更详细的了解Positional Embedding
,可以阅读《一文教你彻底理解Transformer中Positional Encoding》。在《Attention is all you need》