当前位置:   article > 正文

NLP干货: (4) NER模型的调用和效果评估_ner调用

ner调用

在上一篇文章中讲述了如何 使用Spacy建立NER模型,因此本篇将讲述如何调用模型,并评估模型的效果。

首先加载所需的库:

  1. import pandas as pd
  2. import joblib

然后加载模型和验证数据集,提取所有文本的实体信息:

  1. ## 调用 NER模型
  2. ner = joblib.load(r"C:\Users\xxx\Desktop\ner\NER.m")
  3. print('NER模型加载成功')
  4. #
  5. ## NER信息抽取
  6. df = pd.read_excel(r"C:\Users\xxx\Desktop\NER\NER-validate.xlsx")
  7. ## 转换为列表 ##
  8. content = df['Content'].values.tolist()
  9. AllEntity = []
  10. for line in range(len(content)):
  11. doc = ner(content[line])
  12. ## NER输出所有信息
  13. Entity = [(ent.text, ent.label_) for ent in doc.ents]
  14. Entity = sorted(list(set(Entity)), key=Entity.index)
  15. # print('实体识别:', Entity)
  16. AllEntity.append(Entity)
  17. df['AllEntity'] = AllEntity
  18. Result_Path = r"C:\Users\xxx\Desktop\NER\ner-ValidateResult1.xlsx"
  19. df.to_excel(Result_Path, index=False)

接着就是分析上述输出的Excel文件:

  1. ## 验证 NER 模型
  2. df = pd.read_excel(Result_Path)
  3. label = df['label'].tolist()
  4. values = df['value'].tolist()
  5. AllEntity = df['AllEntity'].tolist()
  6. total = len(label)
  7. Manual_Labeling, mark_AllEnt = [],[]
  8. right_count = all_source_count = all_pred_count = count = fail_count = 0
  9. for line in range(len(label)):
  10. ## 统计NER找准找全率
  11. col1 = label[line]
  12. # print(col1)
  13. col2 = values[line]
  14. # print(col2)
  15. col3 = AllEntity[line]
  16. # print(col3)
  17. ## eval字符串转元组、列表
  18. col1 = eval(col1)
  19. col2 = eval(col2)
  20. col3 = eval(col3)
  21. print('\nAllEntity:', col3)
  22. ## 获取列1的第一个元素和列2的元素,得到新的列表
  23. new_list = [(col2[j],col1[j][2]) for j in range(len(col2))]
  24. print('labelled_list:',list(set(new_list)))
  25. Manual_Labeling.append(list(set(new_list)))
  26. all_source_count = all_source_count + len(list(set(new_list)))
  27. all_pred_count = all_pred_count + len(col3)
  28. # 统计找准数量
  29. for item in col3:
  30. if isinstance(item, tuple) and item in new_list:
  31. right_count += 1
  32. else:
  33. fail_count += 1
  34. # 统计找准+找全数量
  35. match_count = 0
  36. for item in new_list:
  37. if item in col3:
  38. match_count += 1
  39. if match_count == len(new_list):
  40. count += 1
  41. mark_AllEnt.append(1)
  42. else:
  43. mark_AllEnt.append(0)
  44. print('Entity总数=',all_source_count, '; Entity预测正确个数=',right_count, '; 找准+找全的文本个数为=',count, '; Entity预测错误个数=',fail_count)
  45. df['Manual_Labeling'] = Manual_Labeling
  46. df['AllEnt_Correction'] = mark_AllEnt
  47. df.to_excel(Result_Path, index=False)
  48. print('\nNER测试文本个数=',total, '; labelled Entity总数=',all_source_count, '; model预测正确个数=',right_count, '; 召回率=',round(right_count/all_source_count, 2), '; 精确率=',round(1-(fail_count/all_pred_count), 2))

输出结果:

若NER模型的效果不够好,则可以尝试从几个方面提升:1.增加迭代次数  2.调整学习率和drop参数  3.增加训练数据量

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/688994
推荐阅读
相关标签
  

闽ICP备14008679号