本文主要是介绍欺诈文本分类微调(五):模型评测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 引言
前面一篇文章欺诈文本分类微调(四):构造训练/测试数据集已经构造出了测试数据集,这篇文章将基于测试数据集做模型评测,由于还没有开始训练,所以先对基座模型做评测。
我们的任务目标是对文本进行分类,所以评测的目标是计算模型的精确率和召回率。评测的过程大概是:
- 用目标模型对每条数据的input做推理,得到一个预测值。
- 收集所有数据的预测值和标签值,并比较预测正确和预测错误的数量。
- 根据比较结果计算模型的精确率和召回率。
2. 准备数据和模型
先导入需要用到的库,其中:
- transformers用于加载原始模型
- peft用于加载微调模型
- sklearn.metrics用于计算精确率和召回率
import os
import json
import re
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
from sklearn.metrics import confusion_matrix, roc_curve, precision_recall_curve, auc
定义评估数据集所在文件路径,以及原始模型路径
testdata_path = '/data2/anti_fraud/dataset/test0808.jsonl'
model_path = '/data2/anti_fraud/models/modelscope/hub/Qwen/Qwen2-1___5B-Instruct'
2.1 加载数据
上面定义的评估数据集采用jsonl格式保存,所以需要一个方法来加载jsonl格式的数据集,本质上就是用json.loads分别加载每条数据,最后再组成一个list。
def load_jsonl(path):with open(path, 'r') as file:data = [json.loads(line) for line in file]return datatest_data = load_jsonl(testdata_path)
查看下数据集是否均衡。
true_data = [d for d in test_data if d['label'] == True]
false_data = [d for d in test_data if d['label'] == False]
print(f"total_count: {len(test_data)}, true_data: {len(true_data)}, false_data: {len(false_data)}")
total_count: 4697, true_data: 2351, false_data: 2346
2.2 加载模型
定义一个方法load_model来同时支持加载原始模型和微调后的模型,使用时的区别在于是否传参微调后的checkpoint_path。
def load_model(model_path, checkpoint_path='', device='cuda'):# 加载tokenizertokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True
这篇关于欺诈文本分类微调(五):模型评测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!