欺诈文本分类微调(五):模型评测

2024-08-22 07:36

本文主要是介绍欺诈文本分类微调(五):模型评测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 引言

前面一篇文章欺诈文本分类微调(四):构造训练/测试数据集已经构造出了测试数据集,这篇文章将基于测试数据集做模型评测,由于还没有开始训练,所以先对基座模型做评测。

我们的任务目标是对文本进行分类,所以评测的目标是计算模型的精确率和召回率。评测的过程大概是:

  1. 用目标模型对每条数据的input做推理,得到一个预测值。
  2. 收集所有数据的预测值和标签值,并比较预测正确和预测错误的数量。
  3. 根据比较结果计算模型的精确率和召回率。

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

这篇关于欺诈文本分类微调(五):模型评测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095644

相关文章

Python自动化提取多个Word文档的文本

《Python自动化提取多个Word文档的文本》在日常工作和学习中,我们经常需要处理大量的Word文档,本文将深入探讨如何利用Python批量提取Word文档中的文本内容,帮助你解放生产力,感兴趣的小... 目录为什么需要批量提取Word文档文本批量提取Word文本的核心技术与工具安装 Spire.Doc

Java领域模型示例详解

《Java领域模型示例详解》本文介绍了Java领域模型(POJO/Entity/VO/DTO/BO)的定义、用途和区别,强调了它们在不同场景下的角色和使用场景,文章还通过一个流程示例展示了各模型如何协... 目录Java领域模型(POJO / Entity / VO/ DTO / BO)一、为什么需要领域模

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

升级至三频BE12000! 华硕ROG魔盒Pro路由器首发拆解评测

《升级至三频BE12000!华硕ROG魔盒Pro路由器首发拆解评测》华硕前两天推出新一代电竞无线路由器——ROG魔盒Pro(StrixGR7Pro),该产品在无线规格、硬件配置及功能设计上实现全... 作为路由器行业的T1梯队厂商,华硕近期发布了新旗舰华硕ROG魔盒Pro,除了保留DIY属性以外,高达120

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2