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

好像有一个bug? #20

Closed
Wangpeiyi9979 opened this issue Nov 19, 2020 · 4 comments
Closed

好像有一个bug? #20

Wangpeiyi9979 opened this issue Nov 19, 2020 · 4 comments

Comments

@Wangpeiyi9979
Copy link

Wangpeiyi9979 commented Nov 19, 2020

我好像发现了一个bug
image
这里好像不应该用一个transpose,因为SVD分解出来的vh=B x emb_dim x emb_dim,(_, s, vh = torch.svd(error_every_class, some=False), 每一个batch,其实它的列向量才是空间的基, 你这里好像把行向量作为空间的基了,这样求得的M,最后拿来投影error时(测试M能否把error投影到新空间中的0)
assert (torch.matmul(error_every_class, M) > 1E-6).sum().item() == 0时会报错,
如果把转置去掉就不会了

@Wangpeiyi9979
Copy link
Author

image

@laiyongkui1997
Copy link
Collaborator

感谢您的细心指正。

(1)在TapNet原文中,采用的是cupy.linalg库中的svd,在该svd中,u * s * v = svd(A),返回的v其实是转置之后的结果,因此它的基向量是行向量。而在PyTorch库中的svd中,u * s * v^T = svd(A),其返回的仍是v,但是与cupy.linalg中svd返回的v不同,它未经过转置,因此它的列向量才是基向量。十分抱歉,未能察觉到这两个库实现的差异。

(2)在修正之后,我们进行了一个初步的实验。correct_svd的实验结果相比于当前会有所降低。虽然TapNet不是我们文章的核心贡献,但是这是一个有趣的现象,也是一个值得去探索的点。

(3)我们创建了一个correct_svd分支,并将修正后的代码同步到该分支里了,也欢迎您继续指正。

@AtmaHou AtmaHou closed this as completed Nov 20, 2020
@Wangpeiyi9979
Copy link
Author

我在一些数据集上测试了TapNet, 比如FewRel,发现它并没有什么用,甚至会造成结果下降,而且个人感觉TapNet本身的思想就有点奇怪。也许是自己认识不足吧。thx

@AtmaHou
Copy link
Owner

AtmaHou commented Nov 20, 2020

我在一些数据集上测试了TapNet, 比如FewRel,发现它并没有什么用,甚至会造成结果下降,而且个人感觉TapNet本身的思想就有点奇怪。也许是自己认识不足吧。thx

我个人感觉你的个人感觉可能很有道理233
所以建议在别的数据集上使用的话,最好直接用我们的CDT模块、Pair-wise Trick和 Label Name Embedding,这几个tricks还是提升明显的~

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

3 participants