一文了解深度推荐算法的演进( 二 )


一文了解深度推荐算法的演进

文章插图
 

一文了解深度推荐算法的演进

文章插图
 
3 基于行为序列的网络结构在电商推荐、信息流推荐和短视频推荐等领域,行为序列有效的代表了用户偏好 。传统的机器学习算法,或是 Embedding+MLP 的神经网络很难使用原始的序列作为特征,一般是把序列做进一步的特征工程才能放入模型 。2017 年前后,基于行为序列的算法不断的发展完善,逐渐成为主流的推荐算法 。
基于行为序列的推荐模型总体来看存在五个挑战[5]:
  • 如何处理用户的长行为序列;
  • 如何处理行为序列中的顺序,比如,相邻两个物品间不一定存在顺序关系;
  • 如何处理行为序列中的噪声,比如,两个有关联的物品间可能间隔着很多其他不相关的物品;
  • 如何处理行为序列中物品的异构关系,比如,物品的特征是相似的;
  • 如何处理行为序列中的层次关系,比如,整个序列是由多个子序列构成,如何处理这些子序列 。
3.1 RNN 型网络结构
一文了解深度推荐算法的演进

文章插图
 
RNN、GRU 和 LSTM 被设计用来处理序列结构的数据,其计算方式是顺序的,能从左往右、或从右往左依次计算 。这样的计算方式存在一些问题:时间片 t 的计算只依赖于 t-1 的结果,计算过程中信息会丢失,尽管 GRU 和 LSTM 的机制在一定程度上缓解了长期依赖的问题,但对于特别长的序列,GRU 和 LSTM 依然处理不好 。一般在 RNN、GRU、LSTM 在处理序列时,会结合 pooling layer 一起使用,一方面长序列不适合直接放入下一层的全连接网络,另一方面通过 max pooling 或者 mean pooling,可以做一定的信息抽取 。总体来看,RNN 类型的网络结构,基本无法解决前述的五个挑战,另一方面这样串行式的计算,在当前 GPU 的结构上运行效率较低 。
3.2 Attention-Based 的网络结构Attention 机制的出现带来了神经网络发展的新方向,RNN(GRU、LSTM)结合 Attention 机制的网络结构取得了不错的效果 。阿里巴巴的 DIN(Deep Interest Net)中 Activation Unit 也使用了相似的思想,因为用户的兴趣并不是唯一的,在面对不同的物品时,这样 Activation Unit 的机制能够在用户历史行为中行挑选出相关的信息 。
谷歌的 Transformer[6]和 BERT[7]是 Attention Based Model 中的集大成者,这两个网络结构先后在自然语言处理领域中把算法效果提升到了新高度 。
3.2.1 Transformer在 Encoder-Decoder 架构的模型中以前一般以 RNN 为主导,Transformer 是第一个完全基于 attention 的序列模型 。Transformer 的网络结构可以把序列中任意两个位置的距离缩小为常量,并且具有很好的并行性 。在文本翻译任务中,Transformer 的运行速度要远远快于 RNN 类的模型 。Github 上对 Transformer 由非常好的解读[8],这里不再赘述 。
Transformer 也被应用到了推荐领域,阿里巴巴发表的《Behavior Sequence Transformer for E-commerce Recommendation in Alibaba》[9]通过 Transformer 抽取用户行为序列中的信息,并与其他特征拼接到一起放入 MLP 层,最终建模成一个二分类问题 。当然这里做了一些适配,比如原始版本的 Transformer 中使用了 positional embedding 来捕捉句子中的顺序信息,在推荐中,作者使用了物品曝光时间与点击时间之间的差作为“positional embedding”的输入 。在文中,Transformer 的输入层只使用了物品的 item_id 和 category_id 作为特征 。回顾上文描述的五个挑战,基于 Transformer 的推荐可以很好的解决前三个挑战,后两个问题,从网络结构上来看,并不能很好的解决 。
一文了解深度推荐算法的演进

文章插图
 
3.2.2 BERT2018 年,谷歌发表了论文《Bert: Pre-training of deep bidirectional transformers for language understanding》,BERT 的全称是 Bidirectional Encoder Representations from Transformer,从名称上也可以看出来 BERT 从 Transformer 中取 Encoder 部分,进行双向的表示学习 。BERT 有两个版本的模型,Base 版本使用了 12 层的 Encoder,Large 版本的使用了 24 层的 Encoder,在 NLP 领域应用时,都需要大量的数据进行预训练,因为一般在实际应用时会使用谷歌预训练好的 BERT 模型,然后再基于应用场景的数据进行 fine-tuning 使之很好的适用于当前的场景 。论文的题目中有四个关键词,Pre-training,Deep,Bidirectional,Transformer,正是这四个关键词使得算法在 Language Understanding 场景中取得了 state of art 的效果 。


推荐阅读