LLaMA-Factory|微调大语言模型初探索(2),训练自己的聊天机器人
创作时间:
作者:
@小白创作中心
LLaMA-Factory|微调大语言模型初探索(2),训练自己的聊天机器人
引用
CSDN
1.
https://m.blog.csdn.net/qq_29676069/article/details/145665556
本文将介绍如何使用LLaMA-Factory工具微调大语言模型,包括不同格式的微调数据集(Alpaca、DPO、ShareGPT),并提供基于Alpaca格式制作自定义数据集的Python代码示例。此外,文章还包含了具体的微调步骤和常见错误的解决方案。
1. 微调数据集介绍
了解数据集的种类及其标注格式对于模型的微调至关重要。不同的数据集有不同的训练目标和标注方式,这些差异决定了模型学习的重点和微调策略的选择。通过深入理解数据集的结构和目标,能够帮助我们更精准地制定微调计划,优化模型的表现,并提升其在实际应用中的效果。
1.1 Alpaca 格式
[
{
"instruction": "输入三支篮球队的名称并生成一个适当的口号。",
"input": "输入:俄克拉荷马城雷霆队,芝加哥公牛队,布鲁克林网队。",
"output": "输出: \"雷霆,公牛和网队:各显神通,角逐群雄!\""
},
...
]
这种格式很好理解,一共就三部分:instruction、input和output。
- instruction:任务的指令,告诉模型需要完成什么操作。
- input:任务所需的输入。如果任务是开放式的或者不需要明确的输入,这一字段可以为空字符串。
- output:任务的期望输出,也就是模型在给定指令和输入情况下需要生成的内容。
这种格式侧重提升模型各种自然语言处理任务,适合来微调大模型做文本生成、翻译、总结等任务。
1.2 DPO 格式
[
{
"conversations": [
{
"from": "human",
"value": "为印度国家投资促进与便利机构的银行、金融服务、保险(BFSI)和金融科技团队的面试候选人创建一个案例研究任务。该团队的使命是支持外国投资进入印度的BFSI领域,并就该领域的产业参与者的政策建议和问题进行工作。"
}
],
"chosen": {
"from": "gpt",
"value": "标题:支持外国投资在BFSI领域:印度国家投资促进和便利机构的案例研究\n\n目标:\n要求候选人创建一个全面的案例研究..."
},
"rejected": {
"from": "gpt",
"value": "让我们了解为BFSI团队面试候选人创建案例研究作业的要求。"
}
},
...
]
- from:字段指示消息的来源,可以是 “human” 或 “gpt”,表示输入是由人类或模型提供。
- value:字段包含消息的具体内容,可能是输入文本、模型选择的输出或被拒绝的输出。
- chosen:中的内容是模型最终认为最合适的回应。
- rejected:中的内容是模型认为不合适的候选回应。
DPO可以通过调整回答的偏好来生成更符合用户需求的回复,适合微调大模型来做用户偏好回答。
1.3 ShareGPT 格式
[
{
"conversations": [
{
"role": "user",
"content": "What is the capital of France?"
},
{
"role": "assistant",
"content": "The capital of France is Paris."
},
{
"role": "user",
"content": "Can you tell me more about Paris?"
},
{
"role": "assistant",
"content": "Paris is the largest city and the capital of France. It is known for its art, culture, and history..."
}
]
}
...
]
- role:表示对话的角色,通常为“user”表示用户,“assistant”表示AI助手。
- content:具体的对话内容
ShareGPT 适合对话场景,更贴近人类与 AI 交互的方式,适用于构建和微调对话模型。
Q1.为什么这么多格式的数据集,统一数据集岂不是更方便?
不同类型格式的数据集对模型性能的提升不同,比如说DPO 侧重于根据用户偏好调整模型的输出,使其更符合个性化需求,而Alpaca 侧重于通过少量高质量的训练数据提升模型的指令跟随能力和高效训练。
2. 制作微调数据集
这里基于gpt,根据Alpaca 格式去生成json数据集:
from docx import Document
from chat_test import get_response
import json
from tqdm import tqdm
def extract_json_from_string(input_str):
# 使用正则表达式提取[]里的内容,包括大括号
head_pos = input_str.find("[")
tail_pos = input_str.find("]")
if head_pos != -1 and tail_pos != -1:
return json.loads(input_str[head_pos:tail_pos + 1]) # 包括']',所以尾部索引需要+1
else:
return None # 如果没有找到[],返回None
path = 'F:/Desktop/docs/xxx.docx'
doc = Document(path)
text = ""
data_json = []
file = open("alpaca_zh_mydata1.json", "w", encoding="utf-8")
for para in tqdm(doc.paragraphs):
if para.text == "":
continue
text = text + para.text + "\n"
if len(text) >= 2000:
text = text + " 根据上述信息,将其制作成alpaca数据集。包括instruction、input和output"
res = get_response(text)
json_str = None
try:
json_str = extract_json_from_string(res)
except:
print("extract_json_from_string run error")
if json_str is None:
text = ""
continue
data_json = data_json + json_str
json.dump(data_json, file, ensure_ascii=False, indent=2)
file.close()
其中get_response函数为chatgpt的api接口,可以根据自己的需求去封装。生成的数据集示例如下:
3. 开始微调数据集
3.1 将生成json文件放到LLaMA-Factory/data/
3.2 修改LLaMA-Factory/data/dataset_info.json文件
3.3 修改LLaMA-Factory/data/dataset_info.json文件
开始微调大模型:
conda activate lora-llama
cd LLaMA-Factory
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
常见错误
- assert self.local_world_size > 0
import torch
print(torch.__version__)
print(torch.cuda.is_available())#GPU版本会返回True,否则返回False
查看自己的torch版本,大概率torch版本为cpu版本,改装成gpu版本即可。
参考文章
大模型微调——训练数据集的格式Alpaca 和 ShareGPT
热门推荐
常见调味品种类大全, 风味解读及调料使用方法介绍
【刘健康】主席诗词中“武昌鱼”,是特有品种、还是泛指武昌的鱼
深入理解Cache一致性原理:多核系统中的数据稳定性保障
休盘是什么意思?休盘对市场有什么影响?
手脚酸胀是怎么回事
贵阳2025年社保养老缴费标准详解:最低缴费档次与养老金领取条件
正则表达式深度解析:只匹配括号内容的表达式
原神达达利亚技能
公顷与亩的换算及其在土地管理中的重要性探讨
脾脏肿大的原因和危害
智慧交通:支持城市交通智能化发展
如何在计算房产相关费用时做出合理规划?这种规划如何节省成本?
“上午小雪,冻死牛;下午小雪,暧烘烘”,今年小雪是几号几点?
类风湿病的三大症状及自我检查方法
户外监控无电无网,如何设计一套合理的无线太阳能供电监控系统?
在古代很出名的伯劳鸟,原来有这样的寓意
殡葬礼仪:心理建设的桥梁与疏导的明灯
中国的河流湖泊:从长江黄河到青海湖鄱阳湖
中小企业如何确保同时符合劳动法合同法规定?
延政法师:浅谈新媒体与佛法弘扬
如何选择合适的丝杆?
电饭煲什么内胆材质好?4种电饭煲内胆材质对比,答案一目了然!
晨跑 VS 夜跑,哪个燃脂效率更高?
塑胶卡扣位设计详解
关于指标体系的那些事儿
SCI论文二区难吗
千年古村鲒埼:奉化莼湖的历史文化瑰宝
孩子拒绝社交与交流?5个小游戏或能帮助到自闭症孩子
显卡显存4096,如何选择最佳GPU?深度解读显存重要性
德军二战时的军衔划分:党卫军没有军衔,上校军衔的人最常见