命名实体识别,根据实体计算准确率、召回率和F1

文章目录

    • 简介
    • 数据格式介绍
    • 准确率、召回率和F1评估
      • 评估代码
      • 评估结果
    • 进一步阅读
    • 参考

简介

使用大模型训练完命名实体识别的模型后,发现不知道怎么评估实体识别的准确率、召回率和F1。于是便自己实现了代码,同时提供了完整可运行的项目代码。

完整代码: https://github.com/JieShenAI/csdn/tree/main/KnowledgeGraph/ner_compute

数据格式介绍

  • instruction: 大模型做实体抽取的指令;
  • label: 真实的label;
  • output: 训练完成的大模型的预测结果;
{"id": "ce0...21","task": "NER","source": ".","instruction": "{\"instruction\": \"你是专门进行实体抽取的专家。请从input中抽取出符合schema定义的实体,不存在的实体类型返回空列表。请按照JSON字符串的格式回答。\", \"schema\": [\"PER\", \"ORG\", \"LOC\"], \"input\": \"我们变而以书会友,以书结缘,把欧美、港台流行的食品类图谱、画册、工具书汇集一堂。\"}","label": "[{\"entity\": \"\", \"entity_type\": \"LOC\"}, {\"entity\": \"\", \"entity_type\": \"LOC\"}]","output": "{\"PER\": [], \"ORG\": [], \"LOC\": [\"\", \"\"]}"
}

原始的label不便于使用,首先转换labelextra_label如下:

{"id": "ce0...21","task": "NER","source": ".","instruction": "{\"instruction\": \"你是专门进行实体抽取的专家。请从input中抽取出符合schema定义的实体,不存在的实体类型返回空列表。请按照JSON字符串的格式回答。\", \"schema\": [\"PER\", \"ORG\", \"LOC\"], \"input\": \"我们变而以书会友,以书结缘,把欧美、港台流行的食品类图谱、画册、工具书汇集一堂。\"}","label": "[{\"entity\": \"\", \"entity_type\": \"LOC\"}, {\"entity\": \"\", \"entity_type\": \"LOC\"}]","output": "{\"PER\": [], \"ORG\": [], \"LOC\": [\"\", \"\"]}","extra_label": {"PER": [],"ORG": [], "LOC": ["美","台"]}
}

下述代码完成labelextra_label的转换,然后再使用outputextra_label计算准确率、召回率和F1;

labelextra_label的转换的代码如下:

import json
ent_class = ["PER", "ORG", "LOC"]
# 添加额外标签
def add_extra_labels(file_path, output_path):def _add_extra_labels(file_path):with open(file_path, 'r', encoding='utf-8') as f:for line in f:data = json.loads(line)label_data = eval(data['label'])extra_labels = {ent: []for ent in ent_class}for ent in label_data:entity = ent['entity']entity_type = ent['entity_type']if entity_type in ent_class:extra_labels[entity_type].append(entity)data['extra_label'] = extra_labelsyield datawith open(output_path, 'w', encoding='utf-8') as f:for data in _add_extra_labels(file_path):f.write(json.dumps(data, ensure_ascii=False) + '\n')
input_file = 'data/predict_data.json'
output_file = 'data/data.json'
add_extra_labels(input_file, output_file)

准确率、召回率和F1评估

  • 精确率:识别出正确的实体数 / 识别出的实体数

  • 召回率:识别出正确的实体数 / 样本的实体数

  • F1值 = (精确率 * 召回率 * 2) / ( 精确率 + 召回率)

在这里插入图片描述

评估代码

代码核心思路:
将预测结果与label转为集合,再利用集合的与操作,即可判断出模型预测成功的实体;

Node:

  • predict_right_num:当前文本,模型预测正确的实体数;
  • predict_num:模型预测实体总数;
  • label_num:label中真实的实体数;
from dataclasses import dataclass@dataclass
class Node:# 默认值predict_right_num: int = 0predict_num: int = 0label_num: int = 0
def compute(input_file):with open(input_file, 'r', encoding='utf-8') as f:total_ent = {ent: Node()for ent in ent_class}error = 0for line in f:data = json.loads(line)extra_labels = data['extra_label']# 大模型采取的是序列到序列到文本生成,不能转换为字典的数据跳过即可try:predict = eval(data['output'])except:error += 1continue# 每个不同的实体类别单独计数for ent_name in ent_class:extra_s = set(extra_labels[ent_name])predict_s = set(predict[ent_name])total_ent[ent_name].predict_right_num += len(extra_s & predict_s)total_ent[ent_name].predict_num += len(predict_s)total_ent[ent_name].label_num += len(extra_s)for ent in ent_class:acc = total_ent[ent].predict_right_num / (total_ent[ent].predict_num + 1e-6)recall = total_ent[ent].predict_right_num / (total_ent[ent].label_num + 1e-6)f1 = 2 * acc * recall / (acc + recall)print(f'{ent} acc: {acc:.4f} recall: {recall:.4f} f1: {f1:.4f}')if __name__ == '__main__':compute('infer_1_epoch_extra.json')

评估结果

在这里插入图片描述

进一步阅读

  • https://huggingface.co/docs/evaluate/base_evaluator
  • 用BERT做NER?教你用PyTorch轻松入门Roberta!

参考

  • 命名实体识别的评价指标

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/529344.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java SSM科研管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM科研管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S…

【JAVA】基于HTML与CSS的尚品汇项目

1.代码 index.html <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 引入页签图标 --><link rel"shortcut icon"…

深入了解 AVL 树

引言&#xff1a; AVL 树是一种自平衡二叉搜索树&#xff0c;它能够保持树的平衡性&#xff0c;从而提高了搜索、插入和删除操作的效率。在本文中&#xff0c;我们将深入探讨 AVL 树的概念、使用场景&#xff0c;并通过 Java 实现一个简单的 AVL 树。 一、AVL 树的概念 AVL 树是…

计算机设计大赛 疲劳驾驶检测系统 python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#x…

【RAG】Chain-of-Verification Reduces Hallucination in LLM

note 百川智能还参考Meta的CoVe&#xff08;Chain-of-Verification Reduces Hallucination in Large Language Models&#xff09;技术&#xff0c;将真实场景的用户复杂问题拆分成多个独立可并行检索的子结构问题&#xff0c;从而让大模型可以针对每个子问题进行定向的知识库…

基于电鳗觅食优化算法(Electric eel foraging optimization,EEFO)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

城市基础信息管理系统 (VB版电子地图源码/公交车线路图/超市平面图)-143-(代码+程序说明)

转载地址http://www.3q2008.com/soft/search.asp?keyword143 请访问 以下地址,查看最新版本, 新增加支持 建筑物 距离测量, 鸟瞰, 地图放大缩小, VB完善地图扩充程序(城市街道基础信息管理系统 )-362-&#xff08;代码&#xff0b;论文&#xff09; 这套系统印象深刻 因为,写…

【图论】 【割点】 【双连通分类】LCP 54. 夺回据点

本文涉及知识点 图论 割点 双连通分类 割点原理及封装好的割点类 LeetCode LCP 54. 夺回据点 魔物了占领若干据点&#xff0c;这些据点被若干条道路相连接&#xff0c;roads[i] [x, y] 表示编号 x、y 的两个据点通过一条道路连接。 现在勇者要将按照以下原则将这些据点逐一…

AI绘画教程:Midjourney 使用方法与技巧从入门到精通

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 导论 随着人工智能技术的不断发展&#xff0c…

学习Java的第七天

目录 一、什么是数组 二、作用 三、如何使用数组 1、声明数组变量 2、创建数组 示例&#xff1a; 3、数组的使用 示例&#xff1a; 4、数组的遍历 for循环示例&#xff08;不知道for循环的可以查看我之前发的文章&#xff09; for-each循环&#xff08;也就是增强for…

python 导入excel空间三维坐标 生成三维曲面地形图 5-4、线条平滑曲面且可通过面观察柱体变化(四)

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata from matplotlib.c…

Amazon SageMaker 机器学习之旅的助推器

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 一、前言 在当今的数字化时代&#xff0c;人工智能和机器学习已…