本博文引自王树森老师推荐系统。
视频地址:特征交叉03:LHUC (PPNet)_哔哩哔哩_bilibili
课件地址: https://github.com/wangshusen/RecommenderSystem

上节课介绍的交叉网络可以用于召回和排序,这节课介绍一种比较相似的神经网络结构,叫做LHUC,跟交叉网络的想法有些类似,LHUC在工业界确实有效,但只能用于精排。

这是标准的多目标排序模型,中间这部分是shared bottom,被多个任务共享,他用什么样的神经网络结构都可以,包括全连接网络,深度交叉网络,或者是这节课介绍的LHUC。
22_召回、排序模型_2

LHUC是语音识别的学者在2016年提出的,对语音识别的效果有提升,想深入了解LHUC的话,可以看下面引用的论文,后来快手将LHUC用在精排模型中取得了效果,快手把这种模型叫做ppnet,感兴趣的话可以看下面引用的网页。
23_lhuc_1

我先从语音识别中的LHUC讲起,语音识别的输入是一段语音信号,我们希望用神经网络对输入的信号做变换,得到更有效的表征,然后识别出语音中的文字。语音是人说的,不同的人声音会有所区别,所以最好是加入一些个性化,也就是用到说话者的特征,最简单的特征就是说话者的ID。对ID做embedding,得到一个向量,作为这个说话者的表征。

下面我开始讲LHUC的网络结构,把语音信号输入全连接层,输出一个向量,把说话的特征输入另一个神经网络,输出一个向量,这个神经网络包含多个全连接层,最后一个全连接层的激活函数是sigmoid乘以二,单独作用到每个元素上,也就是说这个向量每个元素都介于零和二之间。
23_lhuc_1

这两个向量的形状必须完全一致,这样我们就可以计算这两个向量的哈达玛乘积,也就是对这两个向量逐元素相乘,这样可以把语音信号的特征跟说话者的特征这两者相融合,语音信号有的特征被放大,有的特征被缩小,这样可以做到个性化。哈达玛乘积得到一个向量,形状跟输入的两个向量是相同的。
23_lhuc_3

把这个向量输入下一个全连接层,输出一个形状相同的向量,把说话者的特征也输入一个神经网络,这个神经网络有多个全连接层,最后一层的激活函数也是sigmoid乘以二。神经网络输出一个向量,这个向量是对说话者的表征。这两个向量的形状是一样的,所以可以求这两个向量的哈达玛乘积。哈达玛乘积输出一个形状相同的向量,这个向量是从语音信号中提取的特征,还结合了说话者的特征,做到了个性化。这个向量就是LHUC最终的输出,这个例子中LHUC只重复了两个模块,做了两次哈达玛乘积,实践中想搭一个更深的神经网络也没有问题。
23_lhuc_4

我再强调一下,这两个神经网络的输入都是说话者的特征,两个神经网络都是由多个全连接层组成,最后一层的激活函数都是sigmoid乘以二,sigmoid作用到每个元素上,sigmoid输出的每个元素都介于零和一之间,sigmoid输出再乘以二之后,每个元素都介于零和二之间,这样的向量去跟语音特征做哈达玛乘积会放大某些特征,缩小另一些特征,实现个性化。
23_lhuc_5

在语音识别的应用中,两个输入的向量分别是语音信号和说话者的特征。在推荐系统的排序模型中,两个输入变成了物品特征和用户特征,物品特征相当于语音信号,用户特征相当于说话者的特征,LHUC的结构还是跟刚才一样的。
23_lhuc_6

这节课简单介绍了LHUC这种特殊的神经网络结构,与上节课的DCN有很多相似之处,这节课内容讲完了,感谢大家观看,