网站主题分析,湖北响应式网站建设费用,今天31个省新增最新消息视频,联雅网站建设前言 上篇文章记录了具体的微调语言大模型步骤#xff0c;以及在微调过程中可能遇见的各种报错#xff0c;美中不足的是只是基于开源数据集的微调#xff0c;今天来记录一下怎么基于自己的数据集去微调大语言模型#xff0c;训练自己的智能机器人#xff01;#xff01;以及在微调过程中可能遇见的各种报错美中不足的是只是基于开源数据集的微调今天来记录一下怎么基于自己的数据集去微调大语言模型训练自己的智能机器人
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 tqdmdef 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]) # 包括]所以尾部索引需要1else:return None # 如果没有找到[]返回Nonepath F:/Desktop/docs/xxx.docx
doc Document(path)
text
data_json []
file open(alpaca_zh_mydata1.json, w, encodingutf-8)
for para in tqdm(doc.paragraphs):if para.text :# print(None)continue# print(para.text)text text para.text \n# print(len(text))if len(text) 2000:text text 根据上述信息将其制作成alpaca数据集。包括instruction、input和outputres get_response(text)# print(res)json_str Nonetry:json_str extract_json_from_string(res)except:print(extract_json_from_string run error)if json_str is None:text continuedata_json data_json json_strjson.dump(data_json, file, ensure_asciiFalse, indent2)
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参考文章 大模型微调——训练数据集的格式Alpaca 和 ShareGPT