EHCF icon indicating copy to clipboard operation
EHCF copied to clipboard

EHCF_Sin 在ML1M上的结果

Open enoche opened this issue 2 years ago • 7 comments

Hi, 作者,您好。 感谢您分享代码,我用您的原始代码跑了ML1M的数据集(无改动),Test的结果是这样的:

nan nan 0.0 0.0 0.0006718172657037286 0.00012831548886966677

不知道 您那边自己跑过没?看原代码核心就是对 Positive rating的User-Item Matrix进行拟合,虽然不进行negative sampling,但是这样理论上效果不会好于MF之类的。 算法的核心在公式(8):

self.loss1 = self.weight1 * tf.reduce_sum( tf.reduce_sum(tf.reduce_sum(tf.einsum('ab,ac->abc', self.iidW, self.iidW), 0) * tf.reduce_sum(tf.einsum('ab,ac->abc', self.uid, self.uid), 0) * tf.matmul(self.H_i, self.H_i, transpose_b=True), 0), 0)

不知道我理解的对吗? 请教如何能跑出您论文中的结果,谢谢啦!

enoche avatar Jul 19 '21 23:07 enoche

我不太清楚你是怎么把loss跑成nan的,或许你可以试试https://github.com/chenchongthu/ENMF 的代码,EHCF_Sin和ENMF是一致的。

关于代码核心,我们不仅是做Positive rating的User-Item Matrix拟合,而是在全样本数据上做非采样学习,可以看一下论文里的推导。

chenchongthu avatar Jul 20 '21 00:07 chenchongthu

嗯,谢谢回复!
如果可以,您那边方便跑一下EHCF_Sin的代码吗?(现在的版本真跑不出来论文中的结果 :( ) 我会看看ENMF的。谢谢啦~

我不太清楚你是怎么把loss跑成nan的

这边的不是loss为nan,而是代码最后的:

print(np.mean(recall50), np.mean(ndcg50)) print(np.mean(recall100), np.mean(ndcg100)) print(np.mean(recall200), np.mean(ndcg200))

希望您那边能检查一下代码!

论文核心推导结论是公式(8),虽然从推导开始是 全样本,但是因为中间作了一些假设,所以才可以简化成公式(8)的样子,而单纯看公式(8)的话,其实是U-I matrix的拟合。

enoche avatar Jul 20 '21 02:07 enoche

我不太清楚你是怎么把loss跑成nan的,或许你可以试试https://github.com/chenchongthu/ENMF 的代码,EHCF_Sin和ENMF是一致的。

关于代码核心,我们不仅是做Positive rating的User-Item Matrix拟合,而是在全样本数据上做非采样学习,可以看一下论文里的推导。

我看了ENMF的代码,跟EHCF逻辑和实现上一样,没有看出来有这两个类有什么明显的区别?还请赐教~? ENMF的我正在跑~

enoche avatar Jul 20 '21 02:07 enoche

我不太清楚你是怎么把loss跑成nan的,或许你可以试试https://github.com/chenchongthu/ENMF 的代码,EHCF_Sin和ENMF是一致的。

关于代码核心,我们不仅是做Positive rating的User-Item Matrix拟合,而是在全样本数据上做非采样学习,可以看一下论文里的推导。

ENMF我这边是可以跑出来,但是结果跟report的差比较多。

enoche avatar Jul 20 '21 04:07 enoche

我不太清楚你是怎么把loss跑成nan的,或许你可以试试https://github.com/chenchongthu/ENMF 的代码,EHCF_Sin和ENMF是一致的。 关于代码核心,我们不仅是做Positive rating的User-Item Matrix拟合,而是在全样本数据上做非采样学习,可以看一下论文里的推导。

ENMF我这边是可以跑出来,但是结果跟report的差比较多。

因为你用的数据不一样 https://github.com/chenchongthu/ENMF/issues/9

chenchongthu avatar Jul 20 '21 05:07 chenchongthu

我不太清楚你是怎么把loss跑成nan的,或许你可以试试https://github.com/chenchongthu/ENMF 的代码,EHCF_Sin和ENMF是一致的。 关于代码核心,我们不仅是做Positive rating的User-Item Matrix拟合,而是在全样本数据上做非采样学习,可以看一下论文里的推导。

ENMF我这边是可以跑出来,但是结果跟report的差比较多。

因为你用的数据不一样 chenchongthu/ENMF#9

好的,谢谢啦! diff了一下,ENMF和EHCF类的代码完全一样。

enoche avatar Jul 20 '21 05:07 enoche

是完全一样

chenchongthu avatar Jul 20 '21 05:07 chenchongthu