用户行为序列的处理方式有很多,从原始的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 EmbeddingSelf AttentionMulti-head AttentionFeed-forward Network
下面我们逐一进行实现,Action!
Positional Embedding
什么是Positional Embedding?为什么需要它?简而言之,就是Self Attention的计算过程中没有考虑item在行为序列中的位次信息,所以需要增加与位置相关的Positional Embedding,以引入位次信息,其具体表现形式就是一个矩阵,其中的每个元素均与item在序列中的位次相关。想要更详细的了解Positional Embedding,可以阅读《一文教你彻底理解Transformer中Positional Encoding》。在《Attention is all you need》