FastText文本分类自定义标注数据集测试返回P@1、R@1为nan问题排查
fasttext单分类任务输出N=0、P/R为nan的解决方案
核心问题定位
你输出日志中N = 0是触发异常的直接原因:fasttext的test函数仅能识别符合标注规范的测试样本,当前没有从test_valid.txt中读取到任何有效样本,因此精确率、召回率计算结果为nan,该问题和训练集词汇量、训练代码主体逻辑无关。
fasttext标注数据集强制规范
训练集、测试集都必须遵循以下格式要求:
- 每一行对应一条独立样本,行首无多余空格、空行
- 每行格式固定为
[标签] [文本内容],标签必须以__label__为前缀 - 你当前的测试集如果仅包含纯文本、没有加
__label__int前缀,fasttext会直接判定为无效样本。
修复步骤
1. 修正测试集格式
test_valid.txt的每一行都需要补充标签前缀,示例如下:
__label__int Aggression frequency is on an increasing trend. __label__int Crying percentage is on a decreasing trend.
同时确认test_valid.txt和代码运行的工作目录路径一致,无文件名拼写错误、隐藏后缀错误。
2. 优化训练参数适配小样本单分类场景
你当前仅使用单标签、训练样本量较小,可以调整训练参数提升效果,修改后代码示例:
import fasttext # 新增参数适配小样本单分类任务 model = fasttext.train_supervised( input='Interfering Behavior Train.txt', lr=0.1, epoch=20, loss='softmax' ) model.save_model("model_int-behavior.bin") # 输出测试集评估指标 test_num, precision, recall = model.test("test_valid.txt") print(f"测试样本数:{test_num}, 精确率:{precision}, 召回率:{recall}") # 若需要预测无标注的纯文本,直接调用predict方法即可 print(model.predict("Aggression data are low and stable at occurrences."))
内容的提问来源于stack exchange,提问作者SSerb1989
相关产品推荐
相关产品推荐

