Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EHCF_Sin 在ML1M上的结果 #13

Open
enoche opened this issue Jul 19, 2021 · 7 comments
Open

EHCF_Sin 在ML1M上的结果 #13

enoche opened this issue Jul 19, 2021 · 7 comments

Comments

@enoche
Copy link

enoche commented Jul 19, 2021

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)

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

@chenchongthu
Copy link
Owner

chenchongthu commented Jul 20, 2021

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

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

@enoche
Copy link
Author

enoche commented Jul 20, 2021

嗯,谢谢回复!
如果可以,您那边方便跑一下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
Copy link
Author

enoche commented Jul 20, 2021

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

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

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

@enoche
Copy link
Author

enoche commented Jul 20, 2021

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

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

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

@chenchongthu
Copy link
Owner

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

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

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

@enoche
Copy link
Author

enoche commented Jul 20, 2021

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

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

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

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

@chenchongthu
Copy link
Owner

是完全一样

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants