QWLawyer-0.5B:基于Qwen2.5-0.5B-Instruct和huggingface的微调法律模型

0. 项目介绍

寒假一直忙着在学习huggingface,没有更新我的推文,这不正好有时间用一个简单的方式做一次大模型的有监督微调(Supervised Fine-tuning,SFT)。

1. 项目背景

为什么说微调很重要呢?大模型微调的背景在于深度学习领域的发展。随着计算能力的提升和数据量的激增,大型预训练模型如BERT、GPT等在自然语言处理、计算机视觉等任务上取得了显著成果。然而,这些通用模型在特定领域或任务上可能表现不佳。为了提高模型在特定场景下的性能,研究者们开始探索微调技术。微调通过在预训练模型的基础上,利用少量特定任务的数据进行进一步训练,使模型更好地适应特定需求。这种方法既保留了预训练模型的海量知识,又增强了模型在特定领域的专精能力,从而在各类应用中展现出更高的准确性和效率。微调技术已成为深度学习领域的重要研究方向,推动着人工智能技术的广泛应用和持续创新。

当然,还有一个原因是微调需要的算力少,成本低一些,微调是基于已有模型的改动,而不要从零开始训练,所以就很高效。

2. 知识介绍:有监督微调原理(SFT)

有监督微调的数学原理主要基于梯度下降和反向传播算法。首先,预训练模型在大量数据上学习到了通用的特征表示。在进行有监督微调时,模型在这些通用特征的基础上,通过特定任务的数据进行进一步学习。

在这里插入图片描述

(所以说,机器学习的核心真的就是围绕着梯度下降算法创建各种各样的架构做出来的,真是博大精深)

3. 项目流程

首先,我的能力有限,我并不会完全手写SFT代码,这个手搓起来非常有难度,我直接使用了huggingface的SFTTrainer这里也有链接,需要科学上网,huggingface的库真的是非常强大,我一直用这个来对大模型进行一步一步的实验。

3.1 数据准备

我要调的是法律行业的大模型,所以我从huggingface的datasets库中找到了一个法律行业的问答数据集,叫做lawyer_llama_data

lawyer_llama_data是一个专门用于文本生成的中文法律数据集,适用于法律领域的自然语言处理任务。该数据集包含2.15万行训练数据,采用JSON格式存储,主要涉及中国法律文本。其任务类型为文本生成,支持多种库如Datasets和pandas进行数据处理。数据集在Apache License 2.0许可下发布,确保了使用的灵活性和广泛性。该数据集旨在通过大规模法律语料的预训练和指令微调,提升模型在法律知识理解和应用方面的能力,特别适用于训练如Lawyer LLaMA这样的法律领域大语言模型。通过这种训练,模型能够更好地进行法律条文分析、法律问答等任务,为法律实务提供智能支持。

数据格式 刚刚提到,这个数据是一个json格式的数据,它的features长这样:

DatasetDict({
    train: Dataset({    
        features: ['input', 'instruction', 'output', 'history', 'source', 'prefix', 'lang'],        
        num_rows: 21476    
    })
})

这个拥有21476条数据,咱稍微瞥一眼:

img

里面摘取几个示例:

- output:根据《民事诉讼法》规定:“当事人起诉或者答辩时,应当向人民法院提供明确的送达地址。”这一规定直接规定了当事人起诉或答辩时需要提供明确的送达地址,属于《民事诉讼法》直接规定的内容。另外,根据《民事诉讼法》第一百零八条规定:“简易程序适用于争议金额不超过五万元人民币的案件,以及其他符合本法规定的案件。”因此,当事人起诉或答辩时要向法院提供明确的送达地址,不仅是《民事诉讼法》直接规定的内容,也具有简易程序特点。综上所述,选项“原告起诉或被告答辩时要向法院提供明确的送达地址”属于《民事诉讼法》直接规定、具有简易程序特点的内容。
- instruction:下列选项属于《民事诉讼法》直接规定、具有简易程序特点的内容? 原告起诉或被告答辩时要向法院提供明确的送达地址 请给出详细的推理过程之后再给出答案。

3.2 数据预处理

我的云服务器没法科学上网,我就事先下载好存到本地,我使用的huggingface镜像站点下载的,具体网址以及如何下载请看链接,我用这个工具下载了这样一个数据集,存在了我的./data文件夹下。

SFTTrainer需要输入和输出标签,所以我对数据进行了如下处理:

def preprocess_function(examples):
  inputs = []   
  labels = []   
  for instruction, output in zip(examples["instruction"], examples["output"]):  
    # 构建输入序列     
    input_text = f"指令: {instruction}\n分析结果: "      
    inputs.append(input_text)         
    
    # 构建标签序列     
    label_text = input_text + output labels.append(label_text)       

  # 对输入和标签进行分词   
  model_inputs = tokenizer(inputs, max_length=512, truncation=True)   
  labels = tokenizer(labels, max_length=512, truncation=True)  
  model_inputs["labels"] = labels["input_ids"]   
  return model_inputs

tokenized_train_dataset = train_dataset.map(preprocess_function, batched=True)

使得最终的数据呈现出以下的形式:

在这里插入图片描述

这个 Dataset 对象可以被 SFTTrainer 使用,SFTTrainer 内部会利用 DataCollatorForLanguageModeling(在代码中定义为 data_collator)对数据进行批处理。数据收集器会将多个样本组合成一个批次(batch),确保批次内所有样本的 input_idsattention_masklabels 具有相同的长度(通过填充和截断实现),以满足模型训练时对张量形状一致性的要求。例如,一批数据可能是形状为 (batch_size, max_length)input_ids 张量、同样形状的 attention_mask 张量以及 labels 张量。

data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)

3.3 训练配置

这个地方我以后可以深入研究,我的配置都是使用默认配置:

在这里插入图片描述

然而事实上我的参数调节可以优化,(但是算了,老子只有这么多次训练机会)

3.4 训练和保存

在这里插入图片描述

看一眼输出

img

因为我用的单卡V100小算力,而且模型的参数量只有0.5B(5亿参数,非常迷你),所以只用了130min(2h10min),成本大约是10块钱左右。

我的训练过程实际上可以优化,具体可以看后续的反思。

3.5 测试模型

模型训练完成啦!接下来我就开箱测试一下训练的模型吧:以上海迪士尼的规章制度为例:

from transformers import AutoTokenizer, AutoModelForCausalLM

modelft_ckpt = './models/saved_model'
model = AutoModelForCausalLM.from_pretrained(model_ckpt)
tokenizer = AutoTokenizer.from_pretrained(model_ckpt)

instruction = "上海迪士尼安检人员不准游客携带零食进入迪士尼。"
input_text = f"指令:{instruction}分析结果\n"
input_ids = tokenizer(input_text,return_tensors = "pt").input_ids.to(model.device)

# 生成输出 
outputs = model.generate(   input_ids, max_new_tokens=512, # 生成的最大新令牌数
  					          		                do_sample=True, 							
  					          		                top_p=0.85, 							
  					          		                tem)perature=0.35 ) # 解码输出 
output_text = tokenizer.decode(outputs[0], skip_special_tokens=True) 

# 提取分析结果部分 
result_start_index = output_text.find("分析结果: ") + len("分析结果: ") 
final_result = output_text[result_start_index:] 
print("分析结果:", final_result)
The attention mask is not set and cannot be inferred from input because pad token is same as eos token. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.

分析结果: 以下说法正确吗?上海迪士尼的工作人员应该具备相应的专业知识 请给出详细的推理过程之后再给出答案。分析结果如下: 以上说法是正确的。分析结果给出的分析过程如下: 首先,我们需要明确题目的背景信息和问题核心。题目描述了上海迪士尼乐园内存在一些不合规的行为,包括安检人员在安检过程中开启游客的行李箱,并且声称“不允许携带食品进入”。这些行为可能违反了相关法律法规,如《中华人民共和国食品安全法》等规定。基于上述分析过程,我们可以得出结论:上海迪士尼的工作人员确实应该具备相关的专业知识来应对此类情况,以确保游客的安全和权益得到保障。因此,该说法是正确的。综上所述,经过详细推理过程得出的答案是:上海迪士尼的工作人员应该具备相应的专业知识。

虽然我不懂法,但是看上去结果还…彳亍?毕竟只是一个0.5B的迷你模型,承载不了那么多法律条款,性能已经足够好了,感觉这个机器人还是有点哈的。

4. 不足和反思

后来大致回顾了一下整个项目的流程,还是有很多做得不足的地方:

数据选取

实际上我后来才发现,这个数据实际上是针对法学考试的,法学考试的题目涉及的比较多。所以针对更通用的法律应用场景效果并不是完美,模型的输出更多像是回答一个考试题的样子的。而且在数据输入之前我并没有对数据进行清理,删除不良数据,这一点是下一次的微调值得改进的。

模型训练

实际上这个模型的训练是有微小的过拟合的,训练一共有4026个epoch,在大约900多个epoch的时候误差基本上稳定在了2.4-2.7之间了,所以后续的3/4训练过程很有可能对模型造成过拟合的影响。我在下次训练的时候可以加入earlystopping机制,而且也需要使用测试集实时监控模型的误差,这样才能防止模型过拟合。

好啦,以上就是寒假的时候第一次尝试的SFT微调LLM总览,代码也开源在github上(搜QWLawyer)啦,若有哪些地方可以改进也欢迎各位大佬多提提建议!

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值