
微调实战项目
文章平均质量分 95
为了帮助更多初学者从零开始掌握模型微调这一关键技能,作者以实际工作中完整跑通的实战项目为基础,写成了这个微调系列教程,该教程附带数据集和可运行的jupyter notebook,适合想要通过项目实战来掌握微调技术的初学者。
沉下心来学鲁班
擅长设计高性能、可扩展、结构优良的软件,并致力于在编程领域宏扬工匠精神。
展开
-
反欺诈文本分类微调教程
为了帮助更多初学者从零开始掌握微调这一关键技能,本文介绍一个作者本人在实际工作中完整跑通的微调实战系列教程,该教程附带可运行的数据集和可运行的jupyter notebook,适合想要通过实战操作来掌握微调技术的初学者。原创 2024-11-20 13:30:47 · 481 阅读 · 0 评论 -
带你从零认识语言模型
本文会以Qwen2-0.5B模型为例,从使用者的角度,从零开始一步一步的探索语言模型的推理过程。从使用的角度来接触模型本地运行的方式来认识模型以文本生成过程来理解模型以内部窥探的方式来解剖模型。原创 2024-11-04 13:03:28 · 1070 阅读 · 4 评论 -
欺诈文本分类检测(十八):基于llama.cpp+CPU推理
我们用Lora训练出自己的个性化模型后,首先面临的问题是:如何让模型在普通机器上跑起来?毕竟模型微调训练时都是在几十G的专用GPU上训练的,如果换到只有CPU的普通电脑上,可能会面临几秒蹦一个词的尴尬问题。LLama.cpp项目就是来解决这个问题的,它是由Georgi Gerganov开发的一个开源工具,主要用于将大语言模型(LLM)转换为C++代码,使它们可以在任意的CPU设备上运行。无需依赖pytorch和python,而是以c++编译的可执行文件来运行。原创 2024-11-09 19:36:01 · 1299 阅读 · 0 评论 -
欺诈文本分类检测(十七):支持分类原因训练
进行了数据增强,本文将使用增强后的数据对模型进行进一步训练,以便得到能同时预测出分类标签、欺诈者、原因分析多个信息。总共进行了5折数据10轮训练,每折数据进行了两轮训练。训练结果中共包含三个信息,由于三个信息的输出类型不同,需要分别分析每个字段的评测方式。原创 2024-09-27 12:46:23 · 1166 阅读 · 0 评论 -
欺诈文本分类检测(十六):支持分类原因评测改造
由此可见,如果不考虑序列中词的顺序,则选择rouge-1,反之,如果考虑序列中词的顺序,则选择rouge-L。上面的tokenize方法中,先使用jieba.cut方法进行分词,再将分词后的序列用空格连接,转换成与英文文本相同的分隔符,以便rouge库能自动分词。原创 2024-09-25 09:48:51 · 1250 阅读 · 0 评论 -
欺诈文本分类检测(十五)——数据校正与增强
有一个数据层面的隐患在于,我们在给正向数据集所打的标签,并不是那么的准确。前面打标签的基本做法是: - 从正向数据集中分割出的对话,都打的是正向标签 - 从反向数据集中分割出的对话,都打的是负向标签 后一类问题不大,但前一类其实是存在一些问题的,一个完整案例中带有欺诈时,并不见得从中分割出的子对话也带有欺诈。原创 2024-09-21 06:45:15 · 829 阅读 · 0 评论 -
欺诈文本分类检测(十四):GPTQ量化模型
本文通过gptq方法分别对微调后的模型进行了8位量化和4位量化,并对比了量化前后模型的性能指标差异,8位量化模型的性能指标变化小,而4位量化模型的性能指标变异较大。原创 2024-09-11 00:01:36 · 1725 阅读 · 0 评论 -
欺诈文本分类检测(十三):交叉训练验证
修改评估和保存模型的策略,由每100step改为每个epoch,原因是前者保存的checkpoint有太多冗余。将num_train_epochs调整为2,表示每个折子的数据集训练2遍,k=5时数据总共会训练10遍。注:当时训练过程中会意外发生OOM,所以临时将批次大小per_device_train_batch_size改为8.lora_config.lora_dropout = 0.2 # 增加泛化能力。原创 2024-09-07 11:48:50 · 1839 阅读 · 0 评论 -
欺诈文本分类检测(十二):模型导出与部署
使用LoRA 适配器训练完后,每次推理时候都需要分别加载基座模型和 LoRA 适配器,一方面比较繁琐,另一方面也不利于模型部署,因此有必要将基座模型和 LoRA 适配器进行合并,导出成一个模型。原创 2024-09-06 06:48:32 · 1261 阅读 · 0 评论 -
欺诈文本分类检测(十一):LLamaFactory多卡微调
本文尝试用LLamaFactory工具对前面的欺诈文本分类任务进行了SFT微调训练,并启用了多张GPU,多GPU的直接影响是批量大小batch_size的4倍增加,使得模型每次训练时能看到更多的数据,进行更稳定梯度估计和更准确的参数更新,最终在评测指标上有一个显著的提升。原创 2024-09-05 06:31:12 · 2701 阅读 · 0 评论 -
欺诈文本分类检测(十):QLora量化微调
QLoRA只是通过量化技术减少了模型参数加载时的显存占用,但训练时仍然会反量化为16位进行矩阵计算,尤其是前向和反向传播阶段,显存的主要消耗来自于激活值、梯度和优化器状态,模型参数仅仅是一小部分,这就导致真正训练过程中占用的显存相比非量化时并没有减少。原因可能是由于我们的模型太小,训练时的批量相对较大,所以模型参数加载时所优化的那部分内存,与整个训练过程中所占用的内存相比比例较低,内存优化的整体效果就不明显。训练时的显存占用相比非量化时并没有明显变化,基本上占满了24G显卡的显存。原创 2024-09-04 12:11:16 · 1056 阅读 · 0 评论 -
欺诈文本分类检测(九):微调方法概览
大语言模型(LLM)的训练过程通常分为两大阶段:此阶段模型是在大规模的上接受训练,目标是使模型掌握词汇的含义、句子的构造规则以及文本的基本信息和上下文。需特别指出,预训练实质上是一种无监督学习过程。完成预训练的模型,亦即基座模型(Base Model),拥有了普遍适用的预测能力。像modelscope上带字样的就是预训练模型。预训练完成的模型接下来会在针对性的任务数据集上接受更进一步的训练。这一阶段主要涉及对模型权重的细微调整,使其更好地适配具体任务。最终形成的模型将具备不同的能力,如gpt chat系列原创 2024-08-29 12:16:27 · 1510 阅读 · 0 评论 -
欺诈文本分类微调(八):批量评测
这句话的意思是说:当使用批量模式时,必须将一个批量内的数据长度对齐,对齐方式有两种选择:1)以长的序列为主,将短的序列填充,对应padding参数;2)以短的序列为主,将长的截断,对应truncation参数;但是根据模型训练时的batch_size设置,模型是支持批量预测的,所以我们有必要根据此特性对评测脚本做一次改造,以支持批量预测,提高每次评测的效率。:本文通过对模型批量生成文本的探索,让评测函数支持了批量预测,提高了评测效率的同时,也对padding的使用场景以及左、右填充的区别有了更深的理解。原创 2024-08-28 08:33:34 · 1223 阅读 · 0 评论 -
Lora微调训练参数解读
通过前面两次微调训练欺诈文本分类微调(六):Lora单卡和欺诈文本分类微调(七)—— lora单卡二次调优,我们已经初步理解了微调的整个过程,里面涉及到不少的参数配置,这篇文章就对前面用到过的参数作一个基本的梳理和总结。原创 2024-08-27 12:49:37 · 4757 阅读 · 0 评论 -
欺诈文本分类微调(七): lora单卡二次调优
模型训练是一个不断调优的过程,这注定了我们的需要多次跑同一个训练过程。在前文欺诈文本分类微调(六):Lora单卡跑的整个训练过程中,只有输入和输出:数据路径,模型路径,输出路径需要变化,而其它过程基本不变,我们将整个训练过程中基本不变的部分提取到trainer.py中。原创 2024-08-24 17:23:12 · 1242 阅读 · 0 评论 -
欺诈文本分类微调(六):Lora单卡训练
这也是为什么在前面的准备数据环节时,做了很多像长度对齐、均衡分布相关的工作,目的就是去掉误导性的特征,让模型去学习真正的我们期望它去学习的特征。nizer。原创 2024-08-23 01:16:48 · 1430 阅读 · 2 评论 -
欺诈文本分类微调(五):模型评测
上面定义的评估数据集采用jsonl格式保存,所以需要一个方法来加载jsonl格式的数据集,本质上就是用json.loads分别加载每条数据,最后再组成一个list。在前文构造的测试数据集基础上,演练了文本二分类这类业务的评测过程,后续可以通过微调等手段提高模型在精确率和召回率两个指标上的表现来持续改进模型。原创 2024-08-22 06:59:26 · 1228 阅读 · 0 评论 -
欺诈文本分类微调(四):构造训练/测试集
之所以要对一个完整的案例进行分割,是为了尽量贴合实际场景,一方面是一场会议比较长,我们不大可能把整个会议的ASR文本一次给到大模型做欺诈检测,另一方面是为了做到实时检测,这决定了我们拿到的必定是一段对话文本,而不是整个会议ASR。原创 2024-08-21 00:52:05 · 1346 阅读 · 0 评论 -
欺诈文本分类微调(三):生成反向数据集
介绍了生成正向数据集的方法和过程,本文会使用一些真实会议的ASR文本,来构建欺诈文本分类微调的反向数据集(非欺诈)。得到段落的发言内容后,有些发言内容比较长,我们有必要将发言内容切割,尽可能让正、反向的发言长度保持一致。上面是针对单个段落的切割,而实际场景中我们需要处理的是一个文件中的所有段落,而下面的。原创 2024-08-20 06:49:33 · 1377 阅读 · 3 评论 -
欺诈文本分类微调(二):生成正向数据集
下面这个提示词是将案例报道的诈骗内容以对话的形式还原,输出包含指定字段的json格式。role: 你是一个分析诈骗案例并且擅长写作的专家,你的任务是将诈骗的案发过程以口语对话的形式还原。instruct:task:- 1. 分析{input}中描述的案发过程,识别出诈骗者和受害者角色,并为每个角色生成一个中文姓名。原创 2024-08-19 00:12:02 · 1884 阅读 · 0 评论 -
欺诈文本分类微调(一):基座模型选型
通义千问Qwen2具有0.5B、1.5B、7B、72B等一系列参数大小不等的模型,我们需要做的是从大到小依次测试每个模型的能力,找到满足自己需要的最小参数模型。依1.5B和1.5B-Instruct的主要区别:按照官方文档,前者是预训练模型,后者是经过指令微调的模型。原创 2024-08-13 17:59:23 · 2111 阅读 · 6 评论