当前位置: 首页 > news >正文

nlp|微调大语言模型初探索(2),训练自己的聊天机器人

前言

  上篇文章记录了具体的微调语言大模型步骤,以及在微调过程中可能遇见的各种报错,美中不足的是只是基于开源数据集的微调,今天来记录一下怎么基于自己的数据集去微调大语言模型,训练自己的智能机器人!!!!

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", encoding="utf-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和output"res = 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_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

在这里插入图片描述

参考文章
大模型微调——训练数据集的格式Alpaca 和 ShareGPT

http://www.lryc.cn/news/538568.html

相关文章:

  • win11安装wsl报错:无法解析服务器的名称或地址(启用wsl2)
  • Gentleman:优雅的Go语言HTTP客户端工具包
  • 解锁豆瓣高清海报(三)从深度爬虫到URL构造,实现极速下载
  • IDEA单元测试插件 SquareTest 延长试用期权限
  • PLC的五个学习步骤
  • 深度学习05 ResNet残差网络
  • 卷积神经网络CNN
  • Android:播放Rtsp视频流的两种方式
  • web信息泄露 ctfshow-web入门web1-web10
  • Log4j在Spring项目中的应用与实践
  • docker安装mysql:8.0
  • 搭建一个 Spring Boot 项目,解决jdk与springboot版本不匹配
  • 心心相系:十颗心
  • ChatGPT行业热门应用提示词案例-AI绘画类
  • 前端面试手写--虚拟列表
  • 达梦数据库针对慢SQL,收集统计信息清除执行计划缓存
  • 李沐--动手学深度学习 序列模型
  • 数据分析、商业智能、业务分析三者之间的关系
  • 【Spring+MyBatis】留言墙的实现
  • 让编程变成一种享受-明基RD320U显示器
  • 【嵌入式Linux应用开发基础】fork()函数
  • 2024 年 CSDN 博客之星年度评选:技术创作与影响力的碰撞(统计时间2025-02-17 11:06:06)
  • 串的基本操作--数据结构
  • Unity 命令行设置运行在指定的显卡上
  • Dest1ny漏洞库: 美团代付微信小程序系统任意文件读取漏洞
  • 设计模式:状态模式
  • 【故障处理】- 执行命令crsctl query crs xxx一直hang
  • Zabbix——监控Nginx
  • 开源工具推荐--思维导图、流程图等绘制
  • 【论文笔记】Transformer^2: 自适应大型语言模型