MachineSheep
MachineSheep
> @MachineSheep 您好,方便贴下具体的评估结果吗? UIE实体识别的评估方式和通用评估方法一致,在实体边界和实体类别与ground truth完全一致时判定正确 你好你好,下面是具体的评估结果 **各类别的评价值:** Class Name: Evaluation Precision: 0.98045 | Recall: 0.97941 | F1: 0.97993 Class Name: Evaluation Precision: 0.98246 | Recall: 0.98000 | F1: 0.98123 Class...
> debug模式是对每个正例类别分别进行评估,该模式仅用于模型调试,和整体的评估方式不一样的地方是少了对负例进行评估 > > https://github.com/PaddlePaddle/PaddleNLP/blob/03dcbeff745fb18f230c5bc07a2e3c0d23b8617a/model_zoo/uie/evaluate.py#L66-L68 > > 可以排查下是否您的训练集缺少负例数据(result_list为空)导致模型出现错误召回 数据集上确实有很多result_list为空的负例数据,result_list为空的数据对模型训练是有作用吗?
> > debug模式是对每个正例类别分别进行评估,该模式仅用于模型调试,和整体的评估方式不一样的地方是少了对负例进行评估 > > https://github.com/PaddlePaddle/PaddleNLP/blob/03dcbeff745fb18f230c5bc07a2e3c0d23b8617a/model_zoo/uie/evaluate.py#L66-L68 > > > > 可以排查下是否您的训练集缺少负例数据(result_list为空)导致模型出现错误召回 > > 数据集上确实有很多result_list为空的负例数据,result_list为空的数据对模型训练是有作用吗? 样本中没有这类实体类别也是可以加入训练的,明白了
> 利用率比较高,提升batch_size可能没有明显加速。可以试试能否用多进程spawn的方式来进一步提升利用率 好的好的,这边还有一个问题,UIE实体识别中每次取一个类别作为prompt与原文本拼接作为模型的输入,如果批量预测,batch_size=n, 是不是就同时加载n个模型进入内存进行任务提取呢?
> 批量预测的时候载入的还是单个模型,会根据schema的数量使用单个模型预测多次 这样的话batch_size肯定不会提高效率,实体识别中每次取一个类别作为prompt与原文本拼接作为模型的输入,所以schema中有多个实体类别时会预测多次,也就是说,预测的时候使用相同的数据集,Taskflow的batch_size参数无论设置多少,因为单个模型一次只能预测一个schema和一条文本,预测的效率都是相同的?
> 批量预测的时候载入的还是单个模型,会根据schema的数量使用单个模型预测多次 批量预测的时候,模型一次输入是批量的还是单条的呢?如果是批量的,硬件资源够的情况下,消耗的时间会比单条的多很多吗?还是几乎一样?
> 批量预测的时候输入是多条文本拼相同的prompt,可以参考下这里单阶段与多阶段预测的实现 https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo/uie/deploy/python/uie_predictor.py 对应_single_stage_predict和_multi_stage_predict 批量预测时间消耗会多些,单阶段下的时间差异可以参考这里 非常感谢您的解答,我现在的困惑是,UIE实体识别Taskflow中的batch_size参数对相同数量的任务处理能不能提高效率?意思就是硬件资源足够的情况下,n条文本,m个schema,batch_size=1和batch_size=8消耗的时间几乎是一样的吗?还是batch_size=8消耗的时间多或少?
pprint("ner result:") 在这里打个断点,调试一下
> > pprint("ner result:") 在这里打个断点,调试一下 > > 还没运行到这一行程序就停止了 那就不是无法在intellij中打印出结果的问题,问的方式有问题
evaluate.py debug输出的各类别集合和数据集内"prompt"字段内容集合是一样的