一、推荐系统深度学习篇-NFM 模型介绍(1)
NFM是2017年由新加披国立大学提出的一种模型,其主要优化点在于提出了Bi-Interaction,Bi-Interaction考虑到了二阶特征组合,减轻了后面MLP部分学习特征信息的压力
论文地址:https://arxiv.org/pdf/1708.05027.pdf
其结构如下
BI-Interaction的结构为
该式可化简为
详细推导过程如下
编程简单记忆方式: 和的平方-平方的和
需要注意的是:
1.该图显示的是在Bi-Interaction后由三层MLP构成,但论文中,只用到了一层隐层;
2 dropout ratio是最重要的超参, 文中在Bi-Interaction层用了0.5
二、美图优化的nfm结构
可看出,美图的nfm并不是直接在Bi-Interaction后加上MLP层,而是将LR,Bi-Interaction,MLP三个部分进行拼接,最后送入到全连接层然后输出
这里的S指的是LR+人工特征组合
三、美图的nfm实现
3.1 S部分
只进入连续特征
3.2 Bi-Interaction
只进入category的特征,category的特征经过embeding处理
3.3MLP部分
MLP部分进入 全部特征(包含连续和类别特征)
3.4 代码介绍
由于S 部分和MLP部分比较简单,在此,只展示Bi-Interaction 的代码,如下
def BiInteractionPooling(inputs):
concated_embeds_value = inputs
# 计算二阶部分
# square_of_sum 先求和再平方
square_of_sum = tf.square(tf.reduce_sum(concated_embeds_value, axis=1))
# sum_of_square 先平方再求和
sum_of_square = tf.reduce_sum(concated_embeds_value * concated_embeds_value, axis=1)
cross_term = 0.5 * (square_of_sum - sum_of_square)
return cross_term
这里的input代码如下
sparse_embedding_layer_list=[]
sparse_embedding_layer_list.append(cat_id1)
sparse_embedding_layer_list.append(cat_id2)
sparse_embedding_layer_list.append(cat_id3)
sparse_embedding_layer_list.append(cat_id4)
nfm_input = tf.keras.layers.Concatenate(axis=1)(sparse_embedding_layer_list)
注意代码中的cate_id,color_id等都是经过embedding处理,且这些embedding的size必须一致
参考:
1、https://zhuanlan.zhihu.com/p/134167886
Edited by :Eshter
date :20201119