推荐系统系列之三:深度学习家族
1. MLP
来源出处:
- He, Xiangnan, et al. “Neural collaborative filtering.” Proceedings of the 26th international conference on world wide web. 2017.
目标函数:
L = − ∑ ( u , i ) ∈ O l o g y ^ u , i − ∑ ( u , j ) ∈ O − l o g ( 1 − y ^ u , j ) L=-\sum_{ ( u,i )\in \mathbf{O}}{log\widehat{y}_{u,i}} -\sum_{ ( u,j )\in \mathbf{O^-}}{log (1- \widehat{y}_{u,j} )} L=−(u,i)∈O∑logy
u,i−(u,j)∈O−∑log(1−y
u,j)
= − ∑ ( u , i ) ∈ O ∪ O − y u , i l o g y ^ u , i + ( 1 − y u , i ) l o g ( 1 − y ^ u , i ) =-\sum_{(u,i)\in \mathbf{O}\cup\mathbf{O^-}}y_{u,i}log\widehat{y}_{u,i}+(1-y_{u,i})log (1- \widehat{y}_{u,i} ) =−(u,i)∈O∪O−∑yu,ilogy u,i+(1−yu,i)log(1−y u,i)
其中, O \mathbf{O} O 表示用户 u u u 和商品 $i $ 之间有交互记录的集合,其中 y u , i = 1 y_{u,i}=1 yu,i=1 , O − \mathbf{O^-} O− 表示用户 u u u 和商品 $j $ 之间没有交互记录的集合,其中 y u , j = 0 y_{u,j}=0 yu,j=0 。
说明介绍:
采用神经网络的方法,用交叉熵损失函数对隐式数据进行建模。
核心代码:
def inference(self, users_inputs, items_inputs):
embed_users = tf.nn.embedding_lookup(
self.weights['embedding_users'], users_inputs)
embed_items = tf.nn.embedding_lookup(
self.weights['embedding_items'],items_inputs)
layer0 = tf.nn.relu(tf.matmul(tf.concat([embed_items,embed_users],1),
self.weights['weight_0']) + self.weights['bias_0'])
layer1 = tf.nn.relu(
tf.matmul(layer0, self.weights['weight_1']) + self.weights['bias_1'])
y_ = tf.matmul(layer1,self.weights['weight_n']) + self.weights['bias_n']
return y_
实验结果:
- 原论文中的实验处理
数据集:Movielens100K,留一评估(leave-one-out)
HR@10 | NDCG@10 |
---|---|
0.7411 | 0.4791 |
- 传统随机分割
数据集:Movielens100K,随机分割成训练集:测试集 = 8:2
MAE | RMSE | Precision@10 | Recall@10 (HR@10) | NDCG@10 |
---|---|---|---|---|
0.7359 | 0.9275 | 0.0628 | 0.0296 | 0.0130 |
loss 和 RMSE 的收敛曲线如下图所示:
数据集随机分割这个实验中,本人怎么调参都无法将排序指标(Recall 和 NDCG)提升太多,始终在0.1之下。若谁调出个好结果,望留言告知,谢谢!
对比
- 矩阵分解 MF 实验结果
MAE | RMSE | Recall@10 (HR@10) | Precision@10 |
---|---|---|---|
0.7279 | 0.9229 | 0.0271 | 0.0575 |
在关键参数相同的情况下,对比 MF,可以看出其实 MLP 的实验并没提升多少。我想,这也许是原论文作者采用隐式数据加采样训练和留一评估的原因的吧。
2. LSTM
来源出处:
- Wu, Chao-Yuan, et al. “Recurrent recommender networks.” Proceedings of the tenth ACM international conference on web search and data mining. 2017.
目标函数:
L = ∑ ( i , j , t ) ∈ O ( r i j ∣ t − r ^ i j ∣ t ( θ ) ) 2 + R ( θ ) L=\sum_{(i,j,t)\in \mathbf{O}}\left(r_{ij|t}-\widehat{r}_{ij|t}\left( \theta \right) \right)^2 + R\left( \theta \right) L=(i,j,t)∈O