基于 LlamaFactory 微调大模型的实体识别的评估实现

文章目录

    • 介绍
    • 实体数据集格式
    • 实体识别评估代码

介绍

使用 LlamaFactory 结合开源大语言模型实现文本分类:从数据集构建到 LoRA 微调与推理评估.https://blog.csdn.net/sjxgghg/article/details/144290200
在前文的文本分类评估中,已经介绍了主要的框架,故在大模型微调的流程框架方面本文不再赘述。

实体数据集格式

下述是实体识别评估的一条数据示例:

{"prompt": "从以下政府文本中,提取指定的实体类别,并按照JSON格式输出结果。  xxx", 	 "predict": "\n```json\n{\n  \"行政区划和地理实体\": [],\n  \"政府机构和组织\": [],\n  ...  \"特定术语和关键词\": [\"改革创新\", \"体制机制障碍\", \"行政管理体制\", \"城乡一体化发展机制\"]\n}\n```", "label": "```json\n{\n  \"行政区划和地理实体\": [],\n  \"政府机构和组织\": [] ...,\n  \"特定术语和关键词\": [\"改革创新发展\", \"高质量发展\", \"高品质生活\", \"体制机制障碍\"]\n}\n```"...
}

让大模型按照json格式输出。字典的键是实体的类别名,字典的值是一个列表其中包含所有该类别的所有预测结果。

实体识别评估代码

import os
import re
import json
from dataclasses import dataclass@dataclass
class EvalNode:# 默认值predict_right_num: int = 0predict_num: int = 0label_num: int = 0@propertydef accuracy(self):return self.predict_right_num / (self.predict_num + 1e-6)@propertydef recall(self):return self.predict_right_num / (self.label_num + 1e-6)@propertydef f1(self):return 2 * self.accuracy * self.recall / (self.accuracy + self.recall + 1e-6)@dataclass
class NEREvaluate:ent_class: list[str]input_file: stravg_accuracy: int = 0avg_recall: int = 0avg_f1: int = 0predict_error: int = 0def __post_init__(self):self._evaluate_by_jsonl()def _evaluate_by_jsonl(self):with open(self.input_file, "r", encoding="utf-8") as f:self.total_ent = {ent: EvalNode() for ent in self.ent_class}for line in f:data = json.loads(line)# 大模型采取的是序列到序列到文本生成,不能转换为字典的数据跳过即可try:matches = re.search("\{.*?\}", data["predict"], re.DOTALL)if matches:predict = eval(matches.group(0))except:self.predict_error += 1predict = {ent: [] for ent in self.ent_class}try:# 防止label出错matches = re.search("\{.*?\}", data["label"], re.DOTALL)if matches:labels = eval(matches.group(0))except:continue# 每个不同的实体类别单独计数for ent_name in self.ent_class:label_set = set(labels.get(ent_name, []))predict_set = set(predict.get(ent_name, []))self.total_ent[ent_name].predict_right_num += len(label_set & predict_set)self.total_ent[ent_name].predict_num += len(predict_set)self.total_ent[ent_name].label_num += len(label_set)for ent in self.ent_class:self.avg_accuracy += self.total_ent[ent].accuracyself.avg_recall += self.total_ent[ent].recallself.avg_f1 += self.total_ent[ent].f1self.avg_accuracy = self.avg_accuracy / len(self.ent_class)self.avg_recall = self.avg_recall / len(self.ent_class)self.avg_f1 = self.avg_f1 / len(self.ent_class)

下述是实体的类别:

ENT_CLASS = ["行政区划和地理实体",..."特定术语和关键词",
]
ner_eval = NEREvaluate(ENT_CLASS, "xxx/generated_predictions.jsonl"))for key, item in ner_eval.total_ent.items():print(key, item.f1)

输出评估结果:

行政区划和地理实体 0.6292412411907403
人物与职务 0.45714235316380664
...
特定术语和关键词 0.29256472295174

accuracy 、recall 与 f1 均进行了计算,大家参考代码自行查看与输出即可。

在评估大模型生成的实体时,只有大模型把实体的边界完全预测正确,才认为预测对。

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

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

相关文章

回归任务与分类任务应用及评价指标

能源系统中的回归任务与分类任务应用及评价指标 一、回归任务应用1.1 能源系统中的回归任务应用1.1.1 能源消耗预测1.1.2 负荷预测1.1.3 电池健康状态估计(SOH预测)1.1.4 太阳能发电量预测1.1.5 风能发电量预测 1.2 回归任务中的评价指标1.2.1 RMSE&…

在Ubuntu上使用IntelliJ IDEA:开启你的Java开发之旅!

你好,年轻的学徒!🧑‍💻 是时候踏上进入Java开发世界的史诗之旅了,我们的得力助手将是强大的IntelliJ IDEA。准备好了吗?出发吧! 在我们开始之前,我们需要下载这个工具。但是&#…

Burp入门(7)-APP抓包

声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址:burpsuite(5)web网页端抓包与app渗透测试_哔哩哔哩_bilibili 本文详细介绍如何使用burp suite去抓取APP的数据包。 一、安装 Burp 的 CA 证书 1…

【AI+网络/仿真数据集】1分钟搭建云原生端到端5G网络

导语: 近期智慧网络开放创新平台上线了端到端网络仿真能力,区别于传统的网络仿真工具需要复杂的领域知识可界面操作,该平台的网络仿真能力主打一个小白友好和功能专业。 https://jiutian.10086.cn/open/​jiutian.10086.cn/open/ 端到端仿…

学习实验室—招投标实务

在如今业务为王的市场竞争中,招投标的成功率不仅仅取决于方案的质量,更多的是一些“隐形”的诀窍和经验。许多成功的背后,往往隐藏着那些别人不愿提及的细节与技巧。突破盲点,往往意味着“知道与不知道”的差距。 今天&#xff0…

ElasticSearch7.8学习笔记

1. ElasticSearch概述 1.1 ElasticSearch是什么 Elaticsearch,简称为 ES,ES 是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到…

AI生成不了复杂前端页面?也许有解决方案了

在2024年,编程成为了人工智能领域最热门的赛道。AI编程技术正以惊人的速度进步,但在生成前端页面方面,AI的能力还是饱受质疑。自从ScriptEcho平台上线以来,我们收到了不少用户的反馈,他们表示:“生成的页面…

k8s部署odoo18(kubeshpere面板)

Postgresql部署 链接: kubesphere搭建 postgres15 因为我的是在另一台服务器使用kubesphere进行部署的,如果有和我一样情况的,可以参考上面的文档部署postgreasql。 注意事项: 因为odoo不允许使用postgresql的默认用户,也就是po…

友思特方案 | 精密制程的光影贴合:半导体制造中的高功率紫外光源

导读 为新能源锂电行业赋能第四站:半导体制造中的高功率紫外光源!稳定输出、灵活控制的曝光设备是新能源/半导体行业高端生产中减少误差、提高效率的核心技术,友思特 ALE 系列 UV LED 紫外光源集合6大优势,为精密制造的健康发展提…

数据结构 (36)各种排序方法的综合比较

一、常见排序方法分类 插入排序类 直接插入排序:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。希尔排序:是插入排序的一种改进版本,先将整个待排序的记录序列分割成为…

Datawhale AI冬令营 ——如何定制自己的专属大模型?

定制一个自己的专属大模型最方便的步骤 ≈ 指定数据集 开源大模型 微调平台(如讯飞星辰Maas) 内容很开门!very goo( ̄▽ ̄)d! 下面我将演示如何用讯飞星辰Maas平台甄嬛数据集构建Chat-嬛嬛。 …

03_Webpack模块打包工具

03_Webpack模块打包工具 目录 知识点自测 以下哪个选项是 ECMAScript 默认导出和导入的语法? A:export 和 require B:module.exports {} 和 import 变量名 C:export default 和 import 变量名 D:export 和 import {…

使用WebStorm开发Vue3项目

记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦!?? 基本配置 打包工具:Vite 前端框架:ElementPlus 开发语言:Vue3、TypeScript、Sass 代码检查:ESLint、Prettier IDE:WebSt…

阿里云 云产品流转(实现设备与小程序交互)

一、准备工作 1、设备接入平台 创建两个设备接入到对应产品中,具体可以参考这里(点击跳转)。 二、云产品流转设置 在物联网平台下-->消息转发-->云产品流转->数据源 1、数据源 数据源-->创建数据源-->填写信息-->确定&…

【AIGC】如何获取ChatGPT外部GPTs应用的提示词Prompt指令和知识库文件

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | GPTs应用实例 文章目录 💯前言💯获取GPTs的提示词Prompt指令💯获取GPTs的知识库文件💯小结 关于GPTs指令如何在ChatGPT上使用,请看这篇文章&#xff…

沐风老师3DMAX摄相机阵列插件使用方法

3DMAX摄相机阵列插件,从网格对象或样条线的顶点法线快速创建摄相机阵列。该插件从网格的顶点或样条线的节点获取每个摄影机的位置和方向。 3DMAX摄相机阵列插件支持目前3dMax主流的物理相机、标准相机、VRay物理相机。 【版本要求】 3dMax 2015及更高版本 【安装方…

BMC VPD格式定义

1.说明 目前遇到有2种格式的VPD定义方式,特记录并分享出来。 本节可参考链接下载文件: https://gitee.com/wit_yuan/fru 2.参考PCI_Express_Base_6.0a.pdf 应用范围: 例如常见的定制raid卡,Hba卡采用的储存serial number等。 3.参考platform-manag…

4K高清壁纸网站推荐

1. Awesome Wallpapers 官网: https://4kwallpapers.com/ 主题: 创意、摄影、人物、动漫、绘画、视觉 分辨率: 4K Awesome Wallpapers 提供了丰富的高质量图片,分为通用、动漫、人物三大类,可以按屏幕比例和分辨率检索,满足你对壁纸的各种…

小迪笔记 第四十五天 sql 注入进阶 :二次注入,堆叠注入,数据读取(load_file)加外带

二次注入 概念:就是我们注入的语句(刚注入时 不会产生影响)但是我们的恶意代码会进入数据库 他在被二次利用的时候就会进行执行 这个就是二次注入 这个的典型案例就是账号密码的修改 : 大家应该也知道 账号注册一般是禁止你使…

[C++]继承

继承 概念使用方法继承方式子类的构造与析构 继承的成员继承成员在子类对象里的存放顺序成员变量普通成员变量静态成员变量 成员函数普通成员函数重定义(隐藏) 静态成员函数友元函数 单继承与多继承概念赋值转换(切片)多继承带来的…