成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于 LlamaFactory 微調大模型的實體識別的評估實現

發布于 2025-1-17 11:51
瀏覽
0收藏

介紹

使用 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```"
    ...
}

讓大模型按照json格式輸出。字典的鍵是實體的類別名,字典的值是一個列表其中包含所有該類別的所有預測結果。

實體識別評估代碼

import os
import re
import json
from dataclasses import dataclass

@dataclass
class EvalNode:
    # 默認值
    predict_right_num: int = 0
    predict_num: int = 0
    label_num: int = 0

    @property
    def accuracy(self):
        return self.predict_right_num / (self.predict_num + 1e-6)

    @property
    def recall(self):
        return self.predict_right_num / (self.label_num + 1e-6)

    @property
    def f1(self):
        return 2 * self.accuracy * self.recall / (self.accuracy + self.recall + 1e-6)

@dataclass
class NEREvaluate:
    ent_class: list[str]
    input_file: str
    avg_accuracy: int = 0
    avg_recall: int = 0
    avg_f1: int = 0
    predict_error: int = 0

    def __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 += 1
                    predict = {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].accuracy
            self.avg_recall += self.total_ent[ent].recall
            self.avg_f1 += self.total_ent[ent].f1

        self.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 均進行了計算,大家參考代碼自行查看與輸出即可。

在評估大模型生成的實體時,只有大模型把實體的邊界完全預測正確,才認為預測對。

本文轉載自 ??AI悠閑區??,作者: jieshenai

收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 欧美一区二区三区在线播放 | 亚洲精品在 | 狠狠躁18三区二区一区 | 久久里面有精品 | 欧美最猛黑人 | 天天色天天色 | 久久久久久久久久久久久91 | 国产成人精品一区二区三区在线观看 | 91成人在线视频 | 精品日韩 | 99精品视频免费在线观看 | 日本一区二区视频 | 中文字幕一级毛片视频 | 国产一区二区三区高清 | 日韩视频在线一区 | 欧美日韩成人在线 | 九九爱这里只有精品 | 亚洲一区二区三区四区五区中文 | 国产精品theporn | 久久99这里只有精品 | 一区二区日韩 | 成人福利电影 | 久久大陆 | 日韩乱码在线 | 国产成人精品一区二区三 | 99精品国自产在线 | 超碰av人人| 伊人久久综合 | 免费一级欧美在线观看视频 | 大久 | 精品一区二区三区四区外站 | 欧美激情一区二区三区 | 国产欧美久久一区二区三区 | 欧美成年黄网站色视频 | 国产亚洲一区二区三区在线观看 | 亚洲最大av | 精品视频在线免费观看 | 国产精品一区视频 | 久久久久久久av | 久久久久久91 | 免费黄色的网站 |