描述bug
正如原始Smatch仓库问题中指出的那样,Smatch分数给出错误且不可验证的结果。这对于HanLP也是如此。
重现问题的代码
s = """(r / result-01
:ARG1 (c / compete-01
:ARG0 (w / woman)
:mod (p / preliminary)
:time (t / today)
:mod (p2 / polo
:mod (w2 / water)))
:ARG2 (a / and
:op1 (d / defeat-01
:ARG0 (t2 / team
:mod (c2 / country
:wiki +
:name (n / name
:op1 "Hungary")))
:ARG1 (t3 / team
:mod (c3 / country
:wiki +
:name (n2 / name
:op1 "Canada")))
:quant (s / score-entity
:op1 13
:op2 7))
:op2 (d2 / defeat-01
:ARG0 (t4 / team
:mod (c4 / country
:wiki +
:name (n3 / name
:op1 "France")))
:ARG1 (t5 / team
:mod (c5 / country
:wiki +
:name (n4 / name
:op1 "Brazil")))
:quant (s2 / score-entity
:op1 10
:op2 9))
:op3 (d3 / defeat-01
:ARG0 (t6 / team
:mod (c6 / country
:wiki +
:name (n5 / name
:op1 "Australia")))
:ARG1 (t7 / team
:mod (c7 / country
:wiki +
:name (n6 / name
:op1 "Germany")))
:quant (s3 / score-entity
:op1 10
:op2 8))
:op4 (d4 / defeat-01
:ARG0 (t8 / team
:mod (c8 / country
:wiki +
:name (n7 / name
:op1 "Russia")))
:ARG1 (t9 / team
:mod (c9 / country
:wiki +
:name (n8 / name
:op1 "Netherlands")))
:quant (s4 / score-entity
:op1 7
:op2 6))
:op5 (d5 / defeat-01
:ARG0 (t10 / team
:mod (c10 / country
:wiki +
:name (n9 / name
:op1 "United"
:op2 "States")))
:ARG1 (t11 / team
:mod (c11 / country
:wiki +
:name (n10 / name
:op1 "Kazakhstan")))
:quant (s5 / score-entity
:op1 10
:op2 5))
:op6 (d6 / defeat-01
:ARG0 (t12 / team
:mod (c12 / country
:wiki +
:name (n11 / name
:op1 "Italy")))
:ARG1 (t13 / team
:mod (c13 / country
:wiki +
:name (n12 / name
:op1 "New"
:op2 "Zealand")))
:quant (s6 / score-entity
:op1 12
:op2 2))))
"""
if __name__ == "__main__":
from hanlp.metrics.amr import smatch_eval
path = "amr.tmp"
with open(path, "w") as f:
f.write(s)
for _ in range(5):
smatch_score = smatch_eval("amr.tmp", "amr.tmp")
print(smatch_score)
当前行为描述
完全错误的随机Smatch分数。
预期行为
确定性的Smatch分数为100
系统信息
- Linux Ubuntu 16.04
- Python版本:3.8
- HanLP版本:当前
其他信息/日志
不必要。问题仅仅是因为使用山峰爬虫进行图形匹配是不安全且不透明的,并且缺乏解决方案的上界。当图形比以前更大时,这个问题会变得更糟,但也可能出现在较小的图形上。可以找到关于该问题的更详细的经验研究 here 。
- 我已完成此表单并在网上搜索了解决方案。
2条答案
按热度按时间yqkkidmi1#
感谢@flipz357报告此问题。Smatch实现的随机性已在our forum上记录了4年,最后,您为社区带来了一个可靠的解决方案。您的论文相当密集,我将花一些时间阅读它,然后很快整合您的实现。
tyg4sfes2#
感谢@hankcs,对于论文中的任何密集内容表示歉意。我认为使用爬山法进行评估可能是当前最大的问题,因为爬山法的任何分数都只是下界,因此无法验证(没有上界),所以我们永远不知道爬山法的输出是否错误或正确(当然,如果它返回100,那么显然它具有上界=下界的性质)。