当前位置: 首页> 汽车> 新车 > 中国建设企业网站官网_邢台网站优化_bt kitty磁力猫_站长工具是干嘛的

中国建设企业网站官网_邢台网站优化_bt kitty磁力猫_站长工具是干嘛的

时间:2025/7/12 6:35:47来源:https://blog.csdn.net/sjxgghg/article/details/144294438 浏览次数: 0次
中国建设企业网站官网_邢台网站优化_bt kitty磁力猫_站长工具是干嘛的

文章目录

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

介绍

使用 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 均进行了计算,大家参考代码自行查看与输出即可。

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

关键字:中国建设企业网站官网_邢台网站优化_bt kitty磁力猫_站长工具是干嘛的

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: