当前位置: 首页 > news >正文

欺诈文本分类微调(一):基座模型选型

背景

随着网络诈骗越来越多,经常有一些不法分子利用网络会议软件进行诈骗,为此需要训练一个文本分类检测模型,来实时检测会议中的对话内容是否存在诈骗风险,以帮助用户在网络会议中增强警惕,减少受到欺诈的风险。

考虑模型的预训练成本高昂,选择一个通用能力强的模型底座进行微调是一个比较经济的做法,我们选择模型底座主要考虑以下几个因素:

  • 预训练主要采用中文语料,具有良好的中文支持能力
  • 模型需要具备基本的指令遵循能力。
  • 模型要能理解json格式,具备输出json格式的能力。
  • 在满足以上几个能力的基础上,模型参数量越小越好。

通义千问Qwen2具有0.5B、1.5B、7B、72B等一系列参数大小不等的模型,我们需要做的是从大到小依次测试每个模型的能力,找到满足自己需要的最小参数模型。

模型下载

依次下载qwen2的不同尺寸的模型:0.5B-Instruct、1.5B、1.5B-Instruct、7B-Instruct,下载完后输出模型在本地磁盘的路径。

#模型下载
from modelscope import snapshot_download
cache_dir = '/data2/anti_fraud/models/modelscope/hub'
model_dir = snapshot_download('Qwen/Qwen2-7B-Instruct', cache_dir=cache_dir, revision='master')
# model_dir = snapshot_download('Qwen/Qwen2-0.5B-Instruct', cache_dir=cache_dir, revision='master')
# model_dir = snapshot_download('Qwen/Qwen2-1.5B-Instruct', cache_dir=cache_dir, revision='master')
# model_dir = snapshot_download('Qwen/Qwen2-1.5B', cache_dir=cache_dir, revision='master')
model_dir
'/data2/anti_fraud/models/modelscope/hub/Qwen/Qwen2-7B-Instruct'

封装工具函数

先封装一个函数load_model,用于从参数model_dir指定的路径中加载模型model和序列化器tokenizer,加载完后将模型手动移动到指定的GPU设备上。

我们这里采用的transformers库来加载模型,如果使用modelscope加载只是将from tranformers换成from modelscope。本文测试的目的是用于模型底座选型,所以选择最原始的加载方式。

import os
from transformers import AutoModelForCausalLM, AutoTokenizerdef load_model(model_dir, device='cuda'):model = AutoModelForCausalLM.from_pretrained(model_dir,torch_dtype="auto",trust_remote_code=True# device_map="auto"     )model = model.to(device)tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)return model, tokenizer

注:如果同时使用to(device)和device_map=“auto",在多GPU机器上可能会导致RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:1 and cuda:2!,经测试,已经加载到多GPU上的模型并不支持再通过to(device)移动到单GPU上。

再封装一个predict函数用于文本推理,考虑到我们将要用多个不同参数的模型分别进行测试,这里将model和tokenizer提取到参数中,以便复用这个方法。

# Instead of using model.chat(), we directly use model.generate()
# But you need to use tokenizer.apply_chat_template() to format your inputs as shown below
def predict(model, tokenizer, prompt, device='cuda', debug=True):messages = [{

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用Gitlab实现monorepo多项目CICD
  • 一文HDMI (High-Definition Multimedia Interface)
  • spring常见面试题
  • React 学习——react项目中加入echarts图
  • 【ARM CoreLink 系列 4.2 -- NIC-400 控制器详细介绍】
  • Java语言程序设计——篇十三(1)
  • 浅述TSINGSEE青犀EasyCVR视频汇聚平台与海康安防平台的区别对比
  • Python生成缩略图
  • C++初阶_2: inline内联函数 宏函数
  • C# 设计模式之策略模式
  • 多点通信
  • 子组件数据回显
  • 量化策略开发步骤系列(4)参数分析和过度拟合
  • TLE4966-3G带方向检测功能的高灵敏度汽车霍尔开关
  • 驾驭Git上游分支:高效设置与管理
  • avalon2.2的VM生成过程
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript 基础知识 - 入门篇(一)
  • JavaScript设计模式系列一:工厂模式
  • MD5加密原理解析及OC版原理实现
  • Mysql5.6主从复制
  • Python 基础起步 (十) 什么叫函数?
  • Vue 动态创建 component
  • vue-router 实现分析
  • 产品三维模型在线预览
  • 初探 Vue 生命周期和钩子函数
  • 工作中总结前端开发流程--vue项目
  • 关于extract.autodesk.io的一些说明
  • 少走弯路,给Java 1~5 年程序员的建议
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 用Visual Studio开发以太坊智能合约
  • 仓管云——企业云erp功能有哪些?
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • (2)(2.10) LTM telemetry
  • (2)Java 简介
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (pycharm)安装python库函数Matplotlib步骤
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (区间dp) (经典例题) 石子合并
  • (三分钟)速览传统边缘检测算子
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (四)库存超卖案例实战——优化redis分布式锁
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)Sublime Text3配置Lua运行环境
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)拼包函数及网络封包的异常处理(含代码)
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .Net 8.0 新的变化
  • .net Application的目录
  • .Net Core缓存组件(MemoryCache)源码解析