【第 8 节】大模型微调数据构造(补充课程)

news2024/11/15 21:45:35

1 简介

视频课程 | 操作文档 | OpenDataLab

2 课程内容

2.1 大模型训练数据

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

2.2 微调

在这里插入图片描述
pretrain数据集 - 万卷
在这里插入图片描述
SFT在这里插入图片描述

微调相关在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述TO-DO:2024.5左右会开源一个LLM标注工具。 密切关注opendatalab

在这里插入图片描述

2.3 微调数据构造

在这里插入图片描述
数据质量判断

在这里插入图片描述
tips: 弱智吧: 百度贴吧

评价

在这里插入图片描述

2.3.1 数据构造基础说明

首先介绍下如何构造高质量的SFT数据

  1. 数据选择和采集

微调数据的选择应该基于目标应用场景:

  • 领域相关性:选择与预期应用场景密切相关的文本数据。例如,如果目标是法律助理,应选择法律文档和案例。本实验目的是提升模型的推理和识别逻辑陷阱的能力,因此选择弱智吧的数据。
  • 质量高:这里指的是问题和回答都要是高质量的,通常需要语法正确,信息准确,风格一致。具体来说,好的回复应该遵循“无害(Harmless)、诚实(Honest)、有帮助(Helpful)”的三H原则。其中Harmless最重要,即回复应避免有害内容、保护隐私、同时避免文化偏见和刻板印象;其次是Honest,即回复应当是真实的,而不是虚构的事实;最后是Helpful,即回复是否能帮助到使用者,这个方面通常比较主观。
  • 多样性:确保数据覆盖所有相关子话题,以促进模型的泛化能力。
  1. 数据预处理

为了提高模型的效率和效果,数据预处理是必不可少的步骤:

  • 清洗:去除无关的内容,如广告、HTML标签、无意义的填充词等。
  • 标准化:统一词汇的格式,比如时间、日期、货币单位等。
  • 分词:根据目标模型的需求进行适当的分词处理。
  • 去噪声:消除文本中的错误,如拼写错误、语法错误等。
  1. 数据标注

由于微调数据规模不大,因此可以通过标注的方式来进行构造,这里有两种不同的标注方法:

  • 人工标注:由人工专家进行标注,确保标注的准确性和一致性。采用人工的方式成本比较高,但质量相对较好,尤其在涉及一些专业领域的时候,领域专家能够更好的理解问题并给出回复。这里介绍下我们的仓库:OpenDataLab.,里面主要是一些数据处理工具,预计2024年5月会开源一个专门用于大语言模型标注的免费的标注工具。
  • 自动标注:使用已有的模型进行初步标注,然后由人工校验和修正。可以采用GPT4来生成回复,再由人工来判断回答的好坏,并进行修正。
  1. 数据增强

数据增强可以提高模型的鲁棒性和泛化能力,方法有:

  • 文本重述:用不同的方式表达同一意思,增加文本的多样性。
  • 翻译循环:将文本翻译成一种语言,然后再翻译回原语言,通常用于生成新的文本表达。
  • 合成数据生成:使用规则或模型生成新的训练样本。
  1. 数据划分

通常分为训练集、验证集和测试集。合理划分数据,确保模型能在未见过的数据上进行有效的泛化测试。

2.3.2 真实数据预览
问题答案
石油也是油,为啥没人用它来炒菜?石油虽然也是一种油,但它并不适用于烹饪。这主要是因为石油和食用油在化学成分和用途上有很大的不同: 1. 化学 成分:食用油是由植物或动物脂肪制成的,主要含有对人体有益的脂肪酸,如欧米伽脂肪酸。而石油是一种化石燃料,主要由碳氢化合物组成,含有多种有害的化学物质。 2. 毒性:石油中含有的化学物质对人体是有害的,甚至是致癌的。这些物质在加热时会产 生有毒的烟雾和蒸气,这对健康极为不利。 3. 风味和气味:食用油在烹饪中可以增添食物的风味,而石油的气味和味道都非常 强烈且令人不悦,不适合用于食物。 4. 燃点:石油的燃点远低于食用油,这意味着它在较低的温度下就会燃烧,这在厨房中极 为危险,容易引发火灾。 因此,出于健康和安全的考虑,石油绝不能用于烹饪。食用油是专门为食品烹饪设计的,既安全又有益健康。
据数据表明,异性间的离婚率远大于同性,而中国同性离婚率至今为0这是否说明同性间结婚比异性更有优势这个问题涉及到对离婚率数据的解读,以及同性和异性婚姻的比较。首先,需要明确一点:中国目前不承认同性婚姻,因此官方统计中不会有关于同性离婚率的数据。因此,任何关于中国同性婚姻离婚率的讨论都是基于非正式或非法律承认的情况。 从更广泛的角度来看,离婚率受到许多因素的影响,包括社会文化、法律环境、经济状况等。比较不同类型婚姻的离婚率时,这些因素都需要被考虑在内。同性婚姻在许多国家和地区是新近承认的,可能受到不同的社会和文化压力,这些都可能影响离婚率。 简单地将两种婚姻形式的离婚率进行对比,并不能直接说明哪一种婚姻形式更有优势。婚姻的质量和稳定性受到众多复杂因素的影响,包括双方的个人特质、沟通能力、外部压力等。因此,解读这样的统计数据时需要谨慎,并考虑到背后的多种可能性和复杂性。
2.3.3 将数据转为 XTuner 的数据格式

原始数据格式

{
    "instruction": "天下没有不散的筵席,那么我们相聚的意义又是什么",
    "input": "",
    "output": "尽管我们相聚的时光有限,但是相聚的意义在于创造美好的回忆和珍贵的关系。相聚让我们感受到彼此的关怀、支持和友情。我们可以一起分享喜悦、快乐和困难,互相支持和激励。相聚也可以是一个机会,让我们相互了解、学习和成长。最重要的是,相聚能够带给我们真实的人际交往和情感交流,让我们感受到生活的丰富和美好。所以,即使相聚的时间有限,我们仍然要珍惜这份意义和与彼此相聚的时光。",
    "task_type": {
        "major": [
            "问答"
        ],
        "minor": [
            "逻辑问答",
            "隐喻理解"
        ]
    },
    "domain": [
        "通用"
    ],
    "metadata": "暂无元数据信息",
    "answer_from": "llm",
    "human_verified": true,
    "copyright": "暂无版权及作者信息"
}

目标格式

{
    "messages": [
        {
            "role": "user",
            "content": ""
        },
        {
            "role": "assistant",
            "content": ""
        }
    ]
}

采用GPT的编写python转换脚本或采用在线的data analysis功能,即可完成数据的转换,prompt如下:

请编写python脚本完成jsonl数据到jsonl数据的格式转换,要求如下:
1)原始jsonl每行格式为:
{
    "instruction": "天下没有不散的筵席,那么我们相聚的意义又是什么",
    "input": "",
    "output": "尽管我们相聚的时光有限,但是相聚的意义在于创造美好的回忆和珍贵的关系。相聚让我们感受到彼此的关怀、支持和友情。我们可以一起分享喜悦、快乐和困难,互相支持和激励。相聚也可以是一个机会,让我们相互了解、学习和成长。最重要的是,相聚能够带给我们真实的人际交往和情感交流,让我们感受到生活的丰富和美好。所以,即使相聚的时间有限,我们仍然要珍惜这份意义和与彼此相聚的时光。",
    "task_type": {
        "major": [
            "问答"
        ],
        "minor": [
            "逻辑问答",
            "隐喻理解"
        ]
    },
    "domain": [
        "通用"
    ],
    "metadata": "暂无元数据信息",
    "answer_from": "llm",
    "human_verified": true,
    "copyright": "暂无版权及作者信息"
}

2)目标jsonl每行格式为:
{
    "messages": [
        {
            "role": "user",
            "content": "天下没有不散的筵席,那么我们相聚的意义又是什么"
        },
        {
            "role": "assistant",
            "content": "尽管我们相聚的时光有限,但是相聚的意义在于创造美好的回忆和珍贵的关系。相聚让我们感受到彼此的关怀、支持和友情。我们可以一起分享喜悦、快乐和困难,互相支持和激励。相聚也可以是一个机会,让我们相互了解、学习和成长。最重要的是,相聚能够带给我们真实的人际交往和情感交流,让我们感受到生活的丰富和美好。所以,即使相聚的时间有限,我们仍然要珍惜这份意义和与彼此相聚的时光。"
        }
    ]
}

3)按照从1)到2)的格式转换示例编写转换脚本
4)将转换后的数据保存为新的jsonl,中文不要转义

得到python脚本如下

import json

# 原始和目标文件路径
input_file_path = 'ruozhiba_raw.jsonl'
output_file_path = 'ruozhiba_format.jsonl'

# 打开原始文件进行读取
with open(input_file_path, 'r', encoding='utf-8') as input_file, open(output_file_path, 'w', encoding='utf-8') as output_file:
    for line in input_file:
        # 将每行的json字符串转换为字典
        original_data = json.loads(line)

        # 转换格式
        converted_data = {
            "messages": [
                {
                    "role": "user",
                    "content": original_data["instruction"]
                },
                {
                    "role": "assistant",
                    "content": original_data["output"]
                }
            ]
        }

        # 写入新的jsonl文件,确保中文不被转义
        json.dump(converted_data, output_file, ensure_ascii=False)
        output_file.write('\n')  # 每行后添加换行符,以保持jsonl格式

2.2.4 划分训练集和测试集

同样可以采用GPT完成python脚本,prompt如下:

请编写python脚本,将单个jsonl文件按照7:3的比例
拆分为训练集train.jsonl和测试集test.jsonl

得到python脚本如下:

import json

# 输入文件路径和输出文件路径
input_file_path = 'ruozhiba_format.jsonl'
train_file_path = 'train.jsonl'
test_file_path = 'test.jsonl'

# 读取原始文件,将所有行存储在一个列表中
with open(input_file_path, 'r', encoding='utf-8') as file:
    lines = file.readlines()

# 计算训练集和测试集的分割点
split_index = int(len(lines) * 0.7)

# 拆分数据
train_lines = lines[:split_index]
test_lines = lines[split_index:]

# 写入训练集
with open(train_file_path, 'w', encoding='utf-8') as file:
    for line in train_lines:
        file.write(line)

# 写入测试集
with open(test_file_path, 'w', encoding='utf-8') as file:
    for line in test_lines:
        file.write(line)

2.4 开始自定义微调

本节内容可参照 XTuner 微调个人小助手认知

3 作业

  • 选一个任务场景:角色扮演、对话助手……
  • 收集数据:公开数据集、贴吧论坛、问答网站……
  • 数据处理:预处理、格式转换、人工编写回复……
  • 使用Xtuner开始微调
  • 测试微调后的效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1630784.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文】关于网页上能打开的文章下载PDF“显示无效或损坏的 PDF 文件”的解决办法

1. 遇到的问题 今天我在 dl.acm.org/doi 下载论文时发现下载后的pdf打开出现“显示无效或损坏的 PDF 文件” 可是在原网址是可以打开并显示的 2. 解决方案 这里我用到了和之前【论文】去除PDF论文行号的完美解决方案 的相似的解决办法 就是下载的时候不直接下载&#xf…

【兼职宝典】七大靠谱手机兼职副业平台,让你乐在其中,轻松实现财务自由!

数字化时代已经到来,互联网的普及与技术的飞速发展让越来越多的人开始关注兼职工作,以此增加收入、锻炼能力或追求兴趣爱好。本文将为您详细解读几种热门的兼职方式,助您找到最适合自己的兼职岗位。 一,自媒体运营:创…

python使用opencv对图像的基本操作(3)

17.颜色空间的转换 17.1.rgb图像转gray图像 from skimage import io,color img io.imread(lbxx.jpg) img_gray color.rgb2gray(img) #将rgb图像转换成gray图像 io.imshow(img_gray)运行结果: 17.2.rgb图像转hsv图像 from skimage import io,color img io.im…

Python多线程编程深度探索:从入门到实战

title: Python多线程编程深度探索:从入门到实战 date: 2024/4/28 18:57:17 updated: 2024/4/28 18:57:17 categories: 后端开发 tags: 多线程并发编程线程安全Python异步IO性能优化实战项目 第1章:Python基础知识与多线程概念 Python简介&#xff1a…

WPF 6 命令

命令 创建一个按钮,新建一个事件,按住F12 就可以添加业务代码 运行代码 此时希望UI与后台代码分离,互不影响 此时新建一个MainViewModel类,来保存业务代码 Icommand 是所有command的父类接口 新建一个command来实现这个接口…

怎么才能让数字在横线上缩小了数字还在横线上

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>刻度</title> </head> <style typ…

遇到软件测试职业瓶颈,如何突破

作为职场人&#xff0c;遇到发展瓶颈是在所难免的&#xff0c;无论是晋升受限、技能升级缓慢&#xff0c;还是工作激情的丢失&#xff0c;这些挑战都可能让人感到挫败。但是&#xff0c;积极应对&#xff0c;你就可能找到那扇通向新机遇的窗。 1. 自我评估 识别问题 是缺乏技…

武汉星起航:挂牌上海股权中心,开启资本新篇章助力跨境电商飞跃

2023年10月30日&#xff0c;武汉星起航电子商务有限公司在上海股权托管交易中心成功挂牌展示&#xff0c;标志着这家在跨境电商领域拥有卓越声誉的企业正式迈入了资本市场的大门。对于武汉星起航来说&#xff0c;这不仅是其发展历程中的一个重要里程碑&#xff0c;更是对其业务…

<计算机网络自顶向下> Internet Protocol(未完成)

互联网中的网络层 IP数据报格式 ver: 四个比特的版本号&#xff08;IPV4 0100, IPV6 0110&#xff09; headlen&#xff1a;head的长度&#xff08;头部长度字段&#xff08;IHL&#xff09;指定了头部的长度&#xff0c;以32位字&#xff08;4字节&#xff09;为单位计算。这…

mysql 开启远程连接

登录到mysql mysql -uroot -p 打开mysql数据库并查询user表 use mysql; select user, host from user;更改需要远程连接数据库为任何ip 可以连接&#xff0c; 并刷新系统权限相关的表 update user set host% where hostlocalhost and userroot; flush privileges;

算法课程笔记——如何倍增

快速幂 读入量大于1e5不要用cin读入&#xff0c;要用也要关闭同步流 第i个o次方的父亲 #include<bits/stdc.h>usingnamespacestd; #definemaxn 110000#definell long longintn, a[maxn], f[maxn][40]; intquery(intl, intr){intk (int)(log((r - l 1) * 1.0) / log(2.0…

第3篇:创建Nios II工程之Hello_World<二>

Q&#xff1a;上一期介绍完基本设计流程和实验原理&#xff0c;接着我们完成系统硬件设计部分&#xff0c;包括Platform Designer系统及Quartus工程。 A&#xff1a;依次搜索并添加Nios II Processor、JTAG UART、On-Chip Memory和System ID IP组件&#xff0c;连接各组件并As…

扫码分享文件效果怎么做?文件转换成二维码的教程

文件如何快速分享并通过手机查看呢&#xff1f;传统方式一般会通过微信、QQ或者网盘的方式来分享在线内容&#xff0c;但是这种方式需要占用获取内容者的存储空间&#xff0c;所以很多人现在会通过文件转二维码的方式&#xff0c;将二维码分享后通过扫码来获取文件内容。这种方…

Java 基于Graphics2D 实现海报(支持自定义颜色,背景,logo,贴图)

效果&#xff1a; 海报一&#xff1a; 海报二&#xff1a; 代码&#xff1a; 参数实体类&#xff1a; package com.ly.cloud.dto;import lombok.Data;/*** Author * Date Created in 2024/4/24 下午2:16* DESCRIPTION: 海报页面所需的参数 实体类* Version V1.0*/ Dat…

防火墙对要保护的服务器做端口映射的好处是几个

防火墙对要保护的服务器进行端口映射具有多重好处&#xff0c;这些好处主要围绕网络安全性、灵活性和可管理性展开。以下是对这些好处的专业分析&#xff1a; 1. 增强网络安全性&#xff1a;端口映射允许防火墙对进入服务器的流量进行精确控制。通过映射特定端口&#xff0c;防…

volatile的相关知识点

volatitle这个关键字&#xff0c;不管是在Java还是在C中都有使用到&#xff0c;但是在两种语言中&#xff0c;由于编译器的原因&#xff0c;他们存在一点点区别。 C中的volatile关键字 在C中volatile主要用于告诉编译器&#xff0c;这个变量的值可能会意外改变 ,例如被硬件或者…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之七 简单进行人脸检测并添加面具特效实现

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之七 简单进行人脸检测并添加面具特效实现 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之七 简单进行人脸检测并添加面具特效实现 一、简单介绍 二、简单进行…

ChatGPT记忆功能终于上线了, OpenAI 官方:用得越久越聪明!

原文 ChatGPT记忆功能终于上线了, OpenAI 官方&#xff1a;用得越久越聪明&#xff01; Aitrainee | 公众号&#xff1a;AI进修生 &#x1f31f; 记得今年2月份OpenAI发布过ChatGPT上线记忆功能的消息&#xff0c;我记得当时还弹出过这个窗口给我&#xff0c;但是仅仅体验了几…

centos7 openresty lua 自适应webp和缩放图片

目录 背景效果图准备安装cwebp等命令&#xff0c;转换文件格式安装ImageMagick&#xff0c;压缩文件下载Lua API 操控ImageMagick的依赖包 代码参考 背景 缩小图片体积&#xff0c;提升加载速度&#xff0c;节省流量。 效果图 参数格式 &#xff1a; ?image_processformat,…

C语言之详细讲解文件操作

什么是文件 与普通文件载体不同&#xff0c;文件是以硬盘为载体存储在计算机上的信息集合&#xff0c;文件可以是文本文档、图片、程序等等。文件通常具有点三个字母的文件扩展名&#xff0c;用于指示文件类型&#xff08;例如&#xff0c;图片文件常常以KPEG格式保存并且文件…