RuidongZ / Deep_Matrix_Factorization_Models

Implementation of the "Deep Matrix Factorization Models for Recommender Systems"
204 stars 66 forks source link

从这个结果来看,好像并没有论文里那么好 #3

Open yinchunhui-ahu opened 6 years ago

yinchunhui-ahu commented 6 years ago

在我的电脑上跑15次迭代后HR和NDCG就=1,实验的结果也没有原文中那么好,想请问下原因

yinchunhui-ahu commented 6 years ago

感谢回复。 1可能是我的过拟合了,在我加入正则化后消失了。​ 这篇DMF是在[He etc ]Neural collaborative filtering.WWW, 2017基础上改进得到的,个人认为存在很多问题 ,比如对于损失函数的选择。好像深度学习的性能与初始化有很大关系​,我模型中参数和论文中一样,效果还不如NeuCF,可能是预训练的原因吧,我还没有看过许多pair-wise的文章,我之后会往这个方向看点文章,到时候再交流一下 ------------------ 原始邮件 ------------------​ =1???怎么可能??我自己按论文实现的结果也很不好,调了很久参数也不行,跟浅层方法如BPR比都差的很远。老实说我有点怀疑论文结果,发了邮件给作者要代码也不回。难道作者有什么特殊的优化技巧???就两层网络,实在也看不出还能如何优化,dropout各类active function, batch size, step size, optimizer都试过了,差的很远。其实我觉得针对排序的算法如果不是pair-wise这种,效果比较难提高。WRMF虽然是point-wise的,但效果挺好,可惜计算慢。

Coder-Yu commented 6 years ago

不开源的论文,就不用较真了,我现在看得开了。本来就是一个很简单的方法,想试试看还行的话拿来做baseline,结果调了很久都不行。放弃了

Coder-Yu commented 6 years ago

发现了一点问题,论文里面的测试策略不怎么可靠,他是默认留一验证的时候正样本可以排到前100,而不去排序所有项目。明明用的数据集不大,非要argue time-consuming to rank every item. 真是尴尬。而且这篇文章竟然把1分的项目和5分的项目都作为训练集和测试集,通常做top-n的时候,5分制的评分数据集只会使用4分及其以上的评分。可以说这篇文章漏洞很多,实验设置错误,模型并无多大创新。IJCAI的IR track真是一年不如一年。

yinchunhui-ahu commented 6 years ago

是的,我也注意到了,有的文章说,y^输出是具体评分,一般损失函数会设计成MSE/MAE,但他仍用交叉熵,我估计实验结果在全局上不好他才这样说的,这篇文章创新点就在损失函数和输入Embedding。 我现在想把它迁移到别的推荐领域,LOSS用MSE来预测评分,我看看效果怎么样

chenjindong commented 6 years ago
  1. 请问论文中的输入embedding矩阵是trainable的,还是固定的?
  2. 我觉得论文中的normalized cross entropy loss不合理,完全没法解释这个loss。 以movieLen数据集为例,Y=1或0的时候没什么问题,但Y=2,3,4的时候无法解释着个loss,感觉不合理。
RuidongZ commented 6 years ago

1.Embedding 我个人觉得应该是固定的 这样能够解释 但是实际中可能会让它Trainable,效果相对会好

  1. 我记得他的Y会根据个人评分的最大值进行normalized 可能是针对用户的评分区间不一样做的个性化的一个归一化 最终的结果都是缩放到0-1
chenjindong commented 6 years ago
  1. 我记得他的Y会根据个人评分的最大值进行normalized 可能是针对用户的评分区间不一样做的个性化的一个归一化 最终的结果都是缩放到0-1 这个我理解。传统二分类的交叉熵ylogy'+(1-y)log(1-y'),一般正样本时,后一项为0;负样本时,前一项为0,但是这篇paper中当Y=2,3,4(对应的normalized值为2/5,3/5,4/5),前后两项都不为0,这个有点怪,你觉得呢
yinchunhui-ahu commented 6 years ago

WWW的NeuCF是预测0-1二分类问题,所以选择二值交叉熵作为Loss,而DMF则是预测评分,也就是回归问题,为了使用原Loss而进行的归一化,我也觉得不合理

RuidongZ commented 6 years ago

WWW的NeuCF是预测0-1二分类问题,所以选择二值交叉熵作为Loss,而DMF则是预测评分,也就是回归问题,为了使用原Loss而进行的归一化,我也觉得不合理

首先这个不是回归预测分数的问题吧 评价标准是HR 和 NDCG,是对一个电影的偏好 0-1的二值问题

hongxin001 commented 5 years ago

在我加入正则化后消失了

你好,我也遇到了Nan的问题,你是怎么加的正则呢?

yinchunhui-ahu commented 5 years ago

对网络的W权重加L2正则化。具体来说使用Tensorflow的tf.contrib.layers.l2_regularizer 和tf.add_to_collection。

hongxin001 commented 5 years ago

@ChunhuiYin 这个项目代码里有参数正则的代码,不过注释掉了,是有什么问题?

        regLoss = tf.add_n([tf.nn.l2_loss(v) for v in tf.trainable_variables()])
        self.loss = loss + self.reg * regLoss
hongxin001 commented 5 years ago

@ChunhuiYin 另外,加入正则以后你最好的效果可以到多少呀?

yinchunhui-ahu commented 5 years ago

@w821881341 注释你得问问项目作者,效果并没有好太多,只是不会出现Nan。

yinyajun commented 5 years ago

感谢回复。 1可能是我的过拟合了,在我加入正则化后消失了。​ 这篇DMF是在[He etc ]Neural collaborative filtering.WWW, 2017基础上改进得到的,个人认为存在很多问题 ,比如对于损失函数的选择。好像深度学习的性能与初始化有很大关系​,我模型中参数和论文中一样,效果还不如NeuCF,可能是预训练的原因吧,我还没有看过许多pair-wise的文章,我之后会往这个方向看点文章,到时候再交流一下 ------------------ 原始邮件 ------------------​ =1???怎么可能??我自己按论文实现的结果也很不好,调了很久参数也不行,跟浅层方法如BPR比都差的很远。老实说我有点怀疑论文结果,发了邮件给作者要代码也不回。难道作者有什么特殊的优化技巧???就两层网络,实在也看不出还能如何优化,dropout各类active function, batch size, step size, optimizer都试过了,差的很远。其实我觉得针对排序的算法如果不是pair-wise这种,效果比较难提高。WRMF虽然是point-wise的,但效果挺好,可惜计算慢。

你好,请问你做BPR的时候movielen1M的ndcg@10或者是hit@10能达到什么水平?我自己做的话,在mv-1m上,BPR的ndcg@10达到0.41左右,但是收敛很慢。而W-ALS(spark mllib)能有0.42左右。pair-wise还不如point-wise,有什么特殊的技巧吗?BPR收敛太慢了。

yinchunhui-ahu commented 5 years ago

BPR我没有跑过。它是基准实验,既然有工作DMF(IJCAI)、NeuCF(WWW)都证明比BPR好,所以我认为没必要重复实验,甚至可以直接拿其数据来用。如果想实现它,代码可以参考NeuCF作者He et al.的仓库:https://github.com/hexiangnan/theano-BPR

Coder-Yu commented 5 years ago

@ChunhuiYin 我复现出来的BPR比NeuCF好(可能是我的NeuCF优化有一定问题),DMF是真的渣。Xiangnan He的Adversarial personalized ranking里面提出的APR是真的好

Saptaparnineogi commented 5 years ago

@ChunhuiYin Did you get response from the author regarding their code? Did you manage to get the official code of the paper?

yinchunhui-ahu commented 5 years ago

Unfortunately, we asked the author's group to publicly release the source code, and the author refused to publicly release it on the grounds of server downtime.------------------ 原始邮件 ------------------ 发件人: "Saptaparnineogi"notifications@github.com 发送时间: 2019年6月10日(星期一) 下午5:30 收件人: "RuidongZ/Deep_Matrix_Factorization_Models"Deep_Matrix_Factorization_Models@noreply.github.com; 抄送: "Chun-hui Yin"yinchunhui.ahu@gmail.com;"Mention"mention@noreply.github.com; 主题: Re: [RuidongZ/Deep_Matrix_Factorization_Models] 从这个结果来看,好像并没有论文里那么好 (#3)

@ChunhuiYin Did you get response from the author regarding their code? Did you manage to get the official code of the paper?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

Saptaparnineogi commented 5 years ago

@ChunhuiYin So did you use this code or you came up with your own solution to reproduce the result of the paper?

KylinA1 commented 4 years ago

发现了一点问题,论文里面的测试策略不怎么可靠,他是默认留一验证的时候正样本可以排到前100,而不去排序所有项目。明明用的数据集不大,非要argue time-consuming to rank every item. 真是尴尬。而且这篇文章竟然把1分的项目和5分的项目都作为训练集和测试集,通常做top-n的时候,5分制的评分数据集只会使用4分及其以上的评分。可以说这篇文章漏洞很多,实验设置错误,模型并无多大创新。IJCAI的IR track真是一年不如一年。

通常做top-n的时候,5分制的评分数据集只会使用4分及其以上的评分。-- 这种实验设定其实并不合理,因为实验目的并不是预测用户的下一个五分,而是用户的下一个点击,有可能点击的是一分的。

998898 commented 2 years ago

在我的电脑上跑15次迭代后HR和NDCG就=1,实验的结果也没有原文中那么好,想请问下原因

请问一下作者给的代码是单层吗,怎么调参变2层和3层的呢那个depth of layers in network