FastText调用是'nan',但精度是一个数字

问题描述 投票:1回答:1

我使用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'))

但是结果总是奇怪的,因为即使对不同的数据集(例如,一个输出是:

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

python-3.x nlp text-classification precision-recall fasttext
1个回答
0
投票

[FastText 0.9.2看起来在召回率计算中有一个错误,应该用this commit修复。

安装FastText的“出血边缘”版本,例如与

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

并且重新运行代码应允许在召回计算中摆脱nan值。

© www.soinside.com 2019 - 2024. All rights reserved.