微调大型语言模型(一):为什么要微调(Why finetune)?

今天我们来学习Deeplearning.ai的在线课程 微调大型语言模型(一)的第一课:为什么要微调(Why finetune)。
我们知道像GPT-3.5这样的大型语言模型(LLM)它所学到的知识截止到2021年9月,那么如果我们向ChatGPT询问2022年以后发生的事情,它可能会产生“幻觉”从而给出错误的答案,再比如我们有一些关于企业的某些产品的业务数据,但是由于ChatGPT没有学习过这些数据,因此它也无法正确回答出关于这些产品的问题。为了扩大LLM的知识面,让LLM能够更好的学习并掌握新知识从而更好的为用户服务,因此我们需要对LLM进行微调(Finetuning)。

由于常见的开源LLM都有较大的体积,在微调LLM时它对机器的配置有较高的要求,通常要求机器有较大的内存和GPU显存,比如64 GB内存,32G GPU 显存等。因此一般的家用PC很难满足要求,所以我们一般会通过第三方的托管平台的API来实现对开源LLM进行访问和微调,由于本课程使用的是 lamini.ai 平台的API来实现对开源大模型Llama-2-7b模型的访问和微调,因此我们需要去lamini.ai 注册一个账号(可以通过gmail账号直接登录),然后获取免费赠送的Credits(用完后可购买)和 API Key

API Key 设置
我们首先需要在代码中设置 production.key,该key就是我们在注册账号时获取到的Activate API Tokens:
# pip install lamini
from llama import LLMEnginellm = LLMEngine(id="example_llm",config={"production.key": "xxxxxxxxx"})
比较微调与非微调模型
为了让大家更好的理解微调模型和非微调模型的差异,我们需要对两者产生的结果进行比较,也就是我们需要对两种模型提出相同的问题,然后比较它们各自产生的结果。
测试非微调模型
首先我们会对非微调模型Llama-2-7b-hf进行测试,我们会问它几个问题,然后观察它的回答,这里我们对Llama-2-7b-hf 提出这样一个问题:“告诉我如何训练我的狗学会坐下”,由于Llama-2模型目前并不支持中文,所以我们需要使用英语来进行提问:
from llama import BasicModelRunner#加载非微调模型
non_finetuned = BasicModelRunner("meta-llama/Llama-2-7b-hf")#问题:告诉我如何训练我的狗学会坐下
non_finetuned_output = non_finetuned("Tell me how to train my dog to sit")print(non_finetuned_output)

从上面的结果中我们看到Llama-2-7b-hf并没有正确回答问题,它似乎是根据用户的问题,然后用用户的口气又编造了很多重复的问题,这样的回复看上去完全是文不对题,完全不符合要求。下面我们把llm的回复翻译成中文,这样便于大家更好的理解:

#问题:你觉得火星怎么样?
print(non_finetuned("What do you think of Mars?"))

#问题:Twitter的老板是谁?
print(non_finetuned("Who is the boss of Twitter?"))

下面我们来模拟一个代理和客户之间的问题流程,首先代理问候客户->客户提问->代理回答->客户提问->(需要llm回答)
print(non_finetuned("""Agent: I'm here to help you with your Amazon deliver order.
Customer: I didn't get my item
Agent: I'm sorry to hear that. Which item was it?
Customer: the blanket
Agent:"""))

这里我们可以直观的感觉到Llama-2-7b-hf模型在回答用户问题时,往往会不停的重复用户的问题或者重复自己的回复,因此这样的模型完全不能正常的使用(感觉像患上了精神病)。
与微调模型进行比较
下面我们使用微调模型 Llama-2-7b-chat-hf 看看它如何来回答先前那些问题:
#加载微调模型Llama-2-7b-chat-hf
finetuned_model = BasicModelRunner("meta-llama/Llama-2-7b-chat-hf")#问题:告诉我如何训练我的狗学会坐下
finetuned_output = finetuned_model("Tell me how to train my dog to sit")print(finetuned_output)

从上面的结果看,微调模型Llama-2-7b-chat-hf似乎给出了非常正确合理的答案,我们将这个回答翻译成中文,这样方便大家更好的理解:

结果虽然符合我们的要求,但是美中不足的时在返回的结果中在文本的开头位置出现了和问题无关的内容,比如在答案的开头出现了“on command.” 这样的语句,为此我们可以在向LLM提出问题的时候,在问题的头尾两端的位置插入指令提示符合“[INST]”和“[/INST]”,这样就可以避免LLM返回的结果中出现和问题无关的内容:
print(finetuned_model("[INST]Tell me how to train my dog to sit[/INST]"))

从上面的结果中我们看到llm已经过滤掉了和问题无关的内容比如:“on command.”, 但是我们也发现Llama-2-7b-chat-hf回答的结果似乎并不完整,因为第7点的内容并没有出现,这可能是因为llm的tokens数量限制所导致的,这有待后续进一步验证。
下面我们给非微调模型Llama-2-7b-hf加上指令提示符看看会怎么样:
print(non_finetuned("[INST]Tell me how to train my dog to sit[/INST]"))

我们看到非微调模型Llama-2-7b-hf并不能识别指令提示符,它将指令提示符当成了问题组成部分,仍然在不停的重复着用户的问题。
接下来我们继续让微调模型Llama-2-7b-chat-hf回答之前剩下的问题:
#问题:你觉得火星怎么样?
print(finetuned_model("What do you think of Mars?"))

这里我们发现llm的回答又出现了内容不完整的情况,这可能是因为token数量超出限制,所以内容被截断了。
#问题:Twitter的老板是谁?
print(finetuned_model("Who is the boss of Twitter?"))

从上面的结果来看,似乎LLM并不知道 伊隆·马斯克 已经收购了Twitter,而成为了Twitter的新老板,看来它的知识储备量仍然有限,下面我们加上指令提示符看看结果会怎么样:
#问题:Twitter的老板是谁?
print(finetuned_model("[INST]Who is the boss of Twitter?[/INST]"))

从上面的结果我们看到虽然LLM仍然不知道伊隆·马斯克是Twitter的新老板,但是LLM的回答比之前没有加指令提示符的结果更加合理,逻辑更加清晰,内容更加丰富。
接下来我们继续后续的问题:
print(finetuned_model("""Agent: I'm here to help you with your Amazon deliver order.
Customer: I didn't get my item
Agent: I'm sorry to hear that. Which item was it?
Customer: the blanket
Agent:"""))
从上面的结果中我们看到,LLM仍然模拟了多轮的agent-customer之间的对话,从内容上看感觉非常的真实,并且在最后LLM做了总结还评价了agent的表现(感觉是即当球员又当裁判)。
与ChatGPT的比较
接下来我们让ChatGPT来回答之前的第一个关于训练狗的问题,我们来看看ChatGPT的回答与微调模型Llama-2-7b-chat-hf的回答有什么不同:
chatgpt = BasicModelRunner("chat-gpt")#问题:告诉我如何训练我的狗学会坐下
print(chatgpt("Tell me how to train my dog to sit"))
x
下面我们将ChatGPT的回答也翻译成中文,这样便于大家更好的理解:

我们将与之前使用指令提示符的微调模型的结果做一下比对,下面是微调模型Llama-2-7b-chat-hf的结果:

我们发现微调模型Llama-2-7b-chat-hf的结果与ChatGPT3.5模型的结果从质量上来说已经非常的接近了,这似乎说明Llama-2-7b-chat-hf在某些应用场景下存在可以替代ChatGPT3.5的可能性。
总结
今天我们学习了如何使用lamini.ai的API接口来分析开源大模型Llama-2的原始版本和微调版本之间的差异,我们分别加载了原始模型和微调模型,对于相同的问题原始模型表现非常的糟糕,微调模型的表现相对较好,当我们使用指令提示符后微调模型表现的更加优秀,同时我们也发现了微调模型的输出结果不完整的情况, 这可能是由于token数量限制被截断造成的,这有待后续进一步验证,最后我们还比较了ChatGPT和Llama-2微调模型的结果,我们发现Llama-2微调模型的结果的质量非常接近ChatGPT,因此可以认为Llama-2是目前开源LLM中较为优秀的模型。
参考资料
https://lamini-ai.github.io/
DLAI - Learning Platform Beta
相关文章:
微调大型语言模型(一):为什么要微调(Why finetune)?
今天我们来学习Deeplearning.ai的在线课程 微调大型语言模型(一)的第一课:为什么要微调(Why finetune)。 我们知道像GPT-3.5这样的大型语言模型(LLM)它所学到的知识截止到2021年9月,那么如果我们向ChatGPT询问2022年以后发生的事情,它可能会…...
【GO】网络请求例子
post请求;multipart/form-data类型 // 构建请求参数requestData : map[string]interface{}{"gb": "","code": "","reMemberInfo": map[string]interface{}{"shi": "","…...
泡泡玛特海外布局动作不断,开启东南亚潮玩盛会
近日,泡泡玛特海外布局动作不断,9月8日至10日,泡泡玛特2023 PTS潮流玩具展(下简称新加坡PTS)在新加坡滨海湾金沙成功举办,现场人气爆棚,三天吸引了超过2万观众入场,这也是泡泡玛特首…...
uniappAndroid平台签名证书(.keystore)生成
一、安装JRE环境 https://www.oracle.com/java/technologies/downloads/#java8 记住下载默认安装地址。ps:我都默认安装地址C:\Program Files\Java\jdk-1.8 二、安装成功后配置环境变量 系统变量配置 AVA_HOME 放到环境变量去 %JAVA_HOME%\bin 三、生成签名证书…...
Gateway学习和源码解析
文章目录 什么是网关?搭建实验项目demo-servicegateway-service尝试简单上手 路由(Route)断言(Predicate)和断言工厂(Predicate Factory)gateway自带的断言工厂After(请求必须在某个…...
移动机器人运动规划 --- 基于图搜索的Dijkstra算法
移动机器人运动规划 --- 基于图搜索的Dijkstra算法 Dijkstra 算法Dijkstra 算法 伪代码流程Dijkstra 算法步骤示例Dijkstra算法的优劣分析 Dijkstra 算法 Dijkstra 算法与BFS算法的区别就是 : 从容器中弹出接下来要访问的节点的规则不同 BFS 弹出: 层级最浅的原则,…...
Mybatis SQL构建器
上一篇我们介绍了在Mybatis映射器中使用SelectProvider、InsertProvider、UpdateProvider、DeleteProvider进行对数据的增删改查操作;本篇我们介绍如何使用SQL构建器在Provider中优雅的构建SQL语句。 如果您对在Mybatis映射器中使用SelectProvider、InsertProvider…...
怎么将几张图片做成pdf合在一起
怎么将几张图片做成pdf合在一起?在我们平时的工作中,图片和pdf都是非常重要的电脑文件,使用也非常频繁,图片能够更为直观的展示内容,而pdf则更加的正规,很多重要文件大多会做成pdf格式的。在职场人的日常工…...
关于JPA +SpringBoot 遇到的一些问题及解决方法
关于JPA SpringBoot 遇到的一些问题及解决方法(可能会有你正在遇到的) 一、JpaRepository相关 1.1 org.springframework.dao.InvalidDataAccessResourceUsageException: Named parameter not bound : id; nested exception is org.hibernate.QueryEx…...
全国馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作——2023学生开学季辉少许
全国馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作——2023学生开学季辉少许...
linux升级glibc-2.28
1.准备工作 1.1升级gcc到gcc8 # 安装devtoolset-8-gcc yum install centos-release-scl yum install devtoolset-8 scl enable devtoolset-8 -- bash# 启用工具 source /opt/rh/devtoolset-8/enable # 安装GCC-8 yum install -y devtoolset-8-gcc devtoolset-8-gcc-c devtoolse…...
[Go疑难杂症]为什么nil不等于nil
现象 在日常开发中,可能一不小心就会掉进 Go 语言的某些陷阱里,而本文要介绍的 nil ≠ nil 问题,便是其中一个,初看起来会让人觉得很诡异,摸不着头脑。 先来看个例子: type CustomizedError struct {Err…...
C#60个常见的问题和答案
在本文中,我将帮助你准备好在下一次面试中解决这些与C# 编程语言相关的问题。同时,你可能想练习一些C# 项目。这 60 个基本的 C#面试问题和答案将帮助你了解该语言的技术概念。 目录 什么是 C#? 1.什么是类? 2.面向对象编程的主要概念是什么?...
11:STM32---spl通信
目录 一:SPL通信 1:简历 2:硬件电路 3:移动数据图 4:SPI时序基本单元 A : 开/ 终条件 B:SPI时序基本单元 A:模式0 B:模式1 C:模式2 D:模式3 C:SPl时序 A:发送指令 B: 指定地址写 C:指定地址读 二: W25Q64 1:简历 2: 硬件电路 3:W25Q64框图 4: Flash操作注意…...
kafka的 ack 应答机制
目录 一 ack 应答机制 二 ISR 集合 一 ack 应答机制 kafka 为用户提供了三种应答级别: all,leader,0 acks :0 这一操作提供了一个最低的延迟,partition的leader接收到消息还没有写入磁盘就已经返回ack&#x…...
Django系列:Django开发环境配置与第一个Django项目
Django系列 Django开发环境配置与第一个Django项目 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/1328…...
iPad协议/微信协议最新版
一、了解微信的协议 在开发微信协议之前,需要先了解微信的协议。微信的协议包括登录协议、消息传输协议、文件传输协议、数据同步协议等。其中,登录协议是最重要的协议之一,包括登录验证、登录认证等。消息传输协议则是微信最核心的功能之一…...
URL字符解码
将网页编码文字还原: 例如:https%3A%2F%2Fwww.example.com%2F%3Fparam%3Dvalue%26key%3D%E4%B8%AD%E6%96%87 解码: https: // www.example.com/?paramvalue&key中文 代码: char hexValue(char ch) {if (isdigit(ch)){re…...
uni-app进行表单效验
Uni-app内置了一些表单验证方法,可以帮助我们对表单进行有效的验证。以下是一些常用的验证方法: 非空验证: if(!this.formData.name){uni.showToast({title: 请输入姓名,icon: none});return false; }手机号码验证: const phon…...
IO流内容总结
IO流作用 对文件或者网络中的数据进行读写操作。 简单记:输入流读数据,输出流写数据。 Java的输出流主要以OutputStream和Writer作为基类,输入流主要是以InputStream和Reader作为基类。 按处理数据单元分类 字节流 字节输入流ÿ…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

