【问题标题】:FastText 0.9.2 - why is recall 'nan'?FastText 0.9.2 - 召回率是“南”,但精度是一个数字
【发布时间】:2020-08-30 09:11:55
【问题描述】:

我使用 Python 接口在 FastText 中训练了一个监督模型,但我在精度和召回率方面得到了奇怪的结果。

首先,我训练了一个模型:

model = fasttext.train_supervised("train.txt", wordNgrams=3, epoch=100, pretrainedVectors=pretrained_model)

然后我得到测试数据的结果:

def print_results(N, p, r):
    print("N\t" + str(N))
    print("P@{}\t{:.3f}".format(1, p))
    print("R@{}\t{:.3f}".format(1, r))

print_results(*model.test('test.txt'))

但结果总是很奇怪,因为它们显示精确度和召回率@1 相同,即使对于不同的数据集,例如一个输出是:

N   46425
P@1 0.917
R@1 0.917

然后当我寻找每个标签的精度和召回率时,我总是将召回率设为“nan”:

print(model.test_label('test.txt'))

输出是:

{'__label__1': {'precision': 0.9202150724134941, 'recall': nan, 'f1score': 1.8404301448269882}, '__label__5': {'precision': 0.9134956983264135, 'recall': nan, 'f1score': 1.826991396652827}}

有人知道为什么会这样吗?

P.S.:要尝试此行为的可重现示例,请参考 https://github.com/facebookresearch/fastText/issues/1072 并使用 FastText 0.9.2 运行它

【问题讨论】:

  • 感谢您的链接。但这似乎是一个标签问题,我很确定这不是我的标签,因为我得到了 N 的数字和精度的真实值,只是不记得了。现在我只写我自己的函数来计算 PR :/

标签: python-3.x nlp text-classification precision-recall fasttext


【解决方案1】:

FastText 0.9.2 的召回计算似乎存在错误,应该使用this commit 修复。

安装 FastText 的“前沿”版本,例如与

pip install git+https://github.com/facebookresearch/fastText.git@b64e359d5485dda4b4b5074494155d18e25c8d13 --quiet

重新运行您的代码应该可以消除召回计算中的nan 值。

【讨论】:

  • 这解决了问题!感谢您的调查。
猜你喜欢
  • 2018-02-18
  • 2018-08-16
  • 2018-05-11
  • 2019-07-28
  • 1970-01-01
  • 2023-04-07
  • 2012-09-14
  • 2011-11-01
  • 2021-09-01
相关资源
最近更新 更多