微信开发工程师带你一文了解推荐领域最新工作( 三 )

代码是 Multi-head attention 类的构建方式,下面会提到 Multi-head attention 是什么,这里先介绍 self-attention 中的 attention score 怎么计算的,Q、K、V 怎么来的 。其实是从输入 embeding 经过线性层变换得到了,有三个权重矩阵,WQ、WK、WV,输入 X 与这三个权重矩阵相乘得到,其实表示的意义大致相同,只是生成了不同的表达形式,也是神经网络里面一些思想,很难去说清楚为什么要这样做 。WQ、WK、WV 这三个权重矩阵其实也是模型需要训练的参数矩阵 。Attention score 生成大概可以分为以下几个步骤:
1、输入词生成 embedding 向量,经过线性层变换得到对应 Q、K、V 向量 。
2、计算输入词 Query Vector 与其他相关词 Key Vector 点积,再对 score 进行归一化,再通过 softmax 来获取权重(attention_weights = tf.nn.softmax(scaled_attention_logits, axis=-1) ) 。
3、将 softmax 结果与 Value Vector 相乘得到加权的权重向量 attention score(output = tf.matmul(attention_weights, v))
投影矩阵

微信开发工程师带你一文了解推荐领域最新工作

文章插图
 

微信开发工程师带你一文了解推荐领域最新工作

文章插图
 
是一个共用的嵌入矩阵 。再结合一层全连接神经网络
微信开发工程师带你一文了解推荐领域最新工作

文章插图
 
的映射来加强非线性形式,最终的 self_attention 模块的形式为:
微信开发工程师带你一文了解推荐领域最新工作

文章插图
 

微信开发工程师带你一文了解推荐领域最新工作

文章插图
 
再来看看 multi-head attention:
微信开发工程师带你一文了解推荐领域最新工作

文章插图
 

微信开发工程师带你一文了解推荐领域最新工作

文章插图
 
简单来说,multi-head attention 就是多个 self-attention 的集成,为什么要这么做呢,论文中说是将模型分为多个头,形成多个子空间,这样可以让模型从不同角度去学习多方面不同的信息,再去融合,具体是不是真的可以让模型学习"不同子空间的特征",这里还没有深入作研究 。其实通过增加模型 layer 是不是也可以学习到更多信息,当然相对 multi-head 来说性能肯定比不上,因为 multi-head 是并行的,这也是论文中提到的一个优势,那论文里面提到的 multi-head 其他优点可以增加网络空间,怎么去考量,其实也存在一定玄学在里面 。
前馈网络层:将其他特征与转换器的输出拼接后输入三层前馈神经网络,目的是为了处理其他特征的有效信息 。由于 CTR 问题是一个预测点击概率的问题,所以作者选择一个 sigmoid 函数作为输出层,损失函数的选择也是标准的交叉熵损失:
微信开发工程师带你一文了解推荐领域最新工作

文章插图
 
模型评估:本文选择 WDL 和 DIN 作为对比模型,构建了一个 WDL+seq 的基准模型,基准模型的序列信息是通过简单地将历史信息直接进行嵌入得到的 。本文的网络结构和 WDL 的区别在于转换层的搭建,与 DIN 区别则是在处理序列信息上思路不同 。
作者选择 AUC 来作为模型评估的度量,并且也考量了 A/B 测试的 CTR 结果和推荐系统的响应时间(RT response time) 。
微信开发工程师带你一文了解推荐领域最新工作

文章插图
 
从上述的结果可以看出,文章提出的 BST 网络具有更好的效果 。
BST 的主要工作在于改进 raw feature 的重新组合问题以及进行高阶特征提取,在推荐系统中针对特征工程的工作也有很多 。有一类基于 WDL 的工作,主要考虑在于将 item 的特征或者用户的特征进行交互项的构建,比如 DeepFM, Cross networks 等,大多借鉴了 Factorization machines 。这类方法的问题主要在于特征的构建效率比较低,而且高阶交互项没有办法提取 。
因此另一类基于深度学习的方法通过复杂网络结构来提取高阶特征,这类方法的问题在于获取到的特征解释性较差,一些任务场景中需要特征的解释性与实际意义来提升工作效率 。同时考虑了特征的解释性与高阶复杂性的结果,AutoInt 有相对较好的效果,但是也受制于任务种类和应用场景 。AutoInt 也是基于 multihear self-attention 机制,重点考虑对于用户信息、商品信息这类原始特征的处理(下文有介绍),AutoInt 实际上可以作用在"other features"中,来得到更高质量的信息 。
但本文依旧是选择手动来构建"other features"中的 cross features 交互部分 。AutoInt 的缺陷在于无法提取序列信息 。DIN 确实也考虑利用用户行为序列的信息,但是处理办法与本文不同,DIN 是通过注意力机制来刻画当前推荐商品与历史商品之间的多峰表征,而本文则是利用注意力机制构建转换器将序列数据进行提取与嵌入 。


推荐阅读