intfloat / SimKGC

ACL 2022, SimKGC: Simple Contrastive Knowledge Graph Completion with Pre-trained Language Models
188 stars 36 forks source link

About Hits@K #19

Closed EurusNotes closed 1 year ago

EurusNotes commented 1 year ago

Hi, Liang

关于Hits@K的计算方法,我有一点疑问。

举一个例子,预测下面两个三元组的尾部实体,右边的结果是预测结果的Top3。

1. (中国,首都,?) : 北京,上海,广州
2. (阿里巴巴,股东,?):软银,马云,字节跳动

关于第一个,因为北京排在第一个,所以第一个例子的Hits@1 = 1, Hit@3 是 1/3 还是 1 呢? 关于第二个,正确答案有软银和马云,那么第二个例子的 Hits@1 应该是1, 但是Hit@3 是2/3 还是1呢? 我目前的理解是,在计算Hits@3 的时候,不管top 3 里面有多少个正确答案,只要存在一个正确答案,Hits@3 = 1。 不知道我的理解对不对。 希望您百忙之中,能够回复我,这将会对我很有帮助。

intfloat commented 1 year ago

Hit@k 只有 0/1 两种取值,当top-k的预测结果包含正确答案时就是1,其他情况是0.

所以第一种情况,hit@1 和 hit@3 都是 1

对于第二种情况,虽然正确的尾实体超过1个,但是大家目前都采用 filtered setting,也就是通过过滤只保留一个正确答案来做评测,比如测试数据是 (阿里巴巴,股东,马云),根据训练数据又已知(阿里巴巴,股东,软银)成立,那就把 软银 从预测结果中过滤掉再计算 hit@k,所以 top-3的预测结果里最多只有一个正确答案。

EurusNotes commented 1 year ago

非常感谢您的回答!!!