【InternLM】基于弱智吧数据的微调数据构造实验

1. 数据处理流程

在AI领域有句名言:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。可见数据对整个AI的决定性影响,在模型开源化的今天,很多厂商的模型结构都大同小异,那影响最终模型的一大决定因素就是:数据的数量和质量。

1.1 数据选择和采集

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

1)领域相关性:选择与预期应用场景密切相关的文本数据。例如,如果目标是法律助理,应选择法律文档和案例。本实验目的是提升模型的推理和识别逻辑陷阱的能力,因此选择弱智吧的数据。

2)质量高:这里指的是问题和回答都要是高质量的,通常需要语法正确,信息准确,风格一致。具体来说,好的回复应该遵循“无害(Harmless)、诚实(Honest)、有帮助(Helpful)”的三H原则。其中Harmless最重要,即回复应避免有害内容、保护隐私、同时避免文化偏见和刻板印象;其次是Honest,即回复应当是真实的,而不是虚构的事实;最后是Helpful,即回复是否能帮助到使用者,这个方面通常比较主观。

3)多样性:确保数据覆盖所有相关子话题,以促进模型的泛化能力。

1.2 数据预处理

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

1)清洗:去除无关的内容,如广告、HTML标签、无意义的填充词等。

2)标准化:统一词汇的格式,比如时间、日期、货币单位等。
3)分词:根据目标模型的需求进行适当的分词处理。

去噪声:消除文本中的错误,如拼写错误、语法错误等

1.3 数据标注

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

1)人工标注:由人工专家进行标注,确保标注的准确性和一致性。采用人工的方式成本比较高,但质量相对较好,尤其在涉及一些专业领域的时候,领域专家能够更好的理解问题并给出回复。

2)自动标注:使用已有的模型进行初步标注,然后由人工校验和修正。可以采用GPT4来生成回复,再由人工来判断回答的好坏,并进行修正。

1.4 数据增强

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

1) 文本重述:用不同的方式表达同一意思,增加文本的多样性。

2) 翻译循环:将文本翻译成一种语言,然后再翻译回原语言,通常用于生成新的文本表达。

3) 合成数据生成:使用规则或模型生成新的训练样本。

1.5 数据划分

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

2. 模型微调

类似于【InternLM】XTuner微调LLM的流程,在internlm2_1.8b模型的基础上,利用弱智吧数据进行微调训练。

2.1 数据构造

2.1.1 数据的获取

为什么要采用弱智吧的数据进行构造?论文COIG-CQIA: Quality is All You Need for Chinese Instruction Fine-tuning
的试验结果让人大跌眼镜:采用弱智吧在内的数据进行微调,模型在8项测试第一,远超知乎豆瓣小红书等传统意义上的优质数据源,其原因可能是弱智吧的数据像脑筋急转弯,增加了指令多样性,所以提升了模型最终性能,具体分析可参考:https://zhuanlan.zhihu.com/p/690701799

访问 OpenDatalab ,利用cli直接进行弱智吧数据集的下载:

pip install openxlab #安装pip install -U openxlab #版本升级openxlab login #进行登录,输入对应的AK/SKopenxlab dataset ls --dataset-repo OpenDataLab/COIG-CQIA #数据集文件列表查看, 发现弱智吧数据的目录为/ruozhiba/ruozhiba_ruozhiba.jsonlopenxlab dataset download --dataset-repo OpenDataLab/COIG-CQIA --source-path /ruozhiba/ruozhiba_ruozhiba.jsonl --target-path /root/ft-ruozhiba/data #数据集文件下载
2.1.2 数据格式转换&划分

参考官方教程将数据转为 XTuner 的数据格式和划分训练集和测试集部分的论述,利用ChatGPT等AI工具,通过自然文本描述生成对应的python代码,最终得到的数据集目录如下:
在这里插入图片描述

2.2 微调

调用xtuner命令进行微调:

xtuner train /root/ft-ruozhiba/config/internlm2_1_8b_qlora_ruozhiba_e3.py --work-dir /root/ft-ruozhiba/train --deepspeed deepspeed_zero2

注意:这里有个隐形的坑,若前面下载数据库阶段在同一个python环境下安装了openxlab,那requests库的版本是不符合xtuner要求的,将无法正常进行微调。此外还缺少axiver库,具体提示如下图:
在这里插入图片描述
对这两个冲突的库进行重新安装:

pip install requests==2.31.1
pip install arxiv

2.3 测试数据效果

选择测试数据集中的三条样本作为效果验证:

测试样本原始模型问答微调过程中模型回答最终模型回答
为什么我爸妈结婚的时候没邀请我参加婚礼对不起,我无法回答你的问题。请告诉我其他问题,我会尽力回答。你可以选择与家人一起庆祝,或者选择与朋友一起庆祝。你可以选择参加婚礼,或者选择不参加这个问题很有趣,但是无法从提供的信息中得出准确的答案。有可能你爸妈没有邀请你是因为你还没有结婚,或者你还没有到法定结婚年龄。另外,也可能是因为你还没有成为他们家庭的重要成员,没有得到他们的邀请。无论是什么原因,这都反映了他们对你的一种期待和希望,希望你在他们结婚的时候能够祝福他们,而不是成为他们婚礼上的焦点。
听说拼多多可以假一赔十,那我开店卖假货自己买,岂不是一本十利啊抱歉,您所描述的拼多多假一赔十的规则并不正确。抱歉,您所描述的拼多多假一赔十的规则并不正确。拼多多是一个电商平台,其商品销售规则是由商家自行制定的。如果您想通过拼多多销售假货,建议您遵守平台的销售规则,并确保您的商品符合质量标准。同时,建议您在销售前进行充分的调查和研究,以确保您的商品能够满足消费者的需求。对不起,我无法回答您的问题。如果您有其他问题,欢迎随时向我提问,我会在我能力范围内尽力为您解答。
明明是食品级不锈钢,为什么还是这么难以下咽。食品级不锈钢,是指在食品加工过程中,能保持其原有质量,不改变食品的化学成分,不破坏食品的物理结构,不产生任何有害物质的金属材料。食品级不锈钢是一种经过特殊处理的钢材,其表面具有防腐蚀、防锈、防氧化等特性。但是,由于其表面处理工艺和材料的不同,食品级不锈钢与普通不锈钢相比,其口感和质量可能会略有不同。这个问题涉及到食品卫生和安全的问题,需要从多个方面进行考虑和解释。首先,食品级不锈钢的制造过程中可能存在一些杂质或缺陷,这些杂质或缺陷可能会影响食品的卫生和安全。例如,不锈钢表面的氧化物、金属氧化物、金属微粒等可能会与食品中的细菌、病毒等微生物发生反应,导致食品变质或产生有害物质。其次,食品接触面(如食品容器、餐具等)的卫生和安全问题也需要得到重视。如果食品接触面没有得到适当的清洁和消毒,就可能存在交叉污染的风险,导致食品受到污染或产生有害物质。最后,食品的口味和质量也是影响其口感和质量的重要因素。如果食品本身的味道和质量不好,即使使用食品级不锈钢也无法改善其口感和质量。综上所述,食品级不锈钢虽然具有较好的卫生和安全性能,但在实际使用中仍然需要注意食品的卫生和安全问题,并尽可能选择高质量的食品接触面,以保证食品的质量和口感。

可见,在整个微调,模型的效果会有一些波动,整体而言微调后的模型相较于原始模型有所提升,但在问题1和问题2上的回答也很牵强。

其原因,可能是:
1)测试样本的bias,即只是孤例,并不能反应模型的真实表现;
2)弱智吧数据的难度大,涉及逻辑和脑筋急转弯等,模型难以学习。

2.3 部署和验证

利用xtuner convert命令将上面得到的 PTH 模型转换为 HuggingFace 模型,利用xtuner convert 命令将 HuggingFace adapter 合并到大语言模型,最后利用xtuner chat命令在终端与合并后的模型进行对话。采用和与合并后的模型对话部分一样的两个问题进行测试:

问题1: 浓硫酸里有2%的水,那我喝50杯硫酸是不是相当于喝了杯纯水?

回答1:不,喝50杯浓硫酸实际上喝的是浓硫酸,而不是水。浓硫酸是一种高度腐蚀性的强酸,其密度比水大,因此会浮在水面上。如果你将浓硫酸倒入水中,浓硫酸会溶解在水中,形成硫酸溶液。然而,喝浓硫酸是非常危险的,因为它会迅速导致烧伤和失明。因此,喝浓硫酸是不安全的,应该避免。

问题2:我用水兑水,得到的是稀水还是浓水

回答2:这个问题看似简单,但实际上包含了文字游戏和思维陷阱的元素。在这里,我们需要深入思考“兑”字的含义。首先,让我们来分析这个问题。“兑”在中文中通常表示“混合、混合液体或水”。在这个问题中,“兑”字的使用暗示了一种将一种液体与另一种液体混合的情况。接下来,我们来看看“稀水”和“浓水”这两个词。“稀水”通常是指一种液体中水分的含量较少,通常用于描述液体中水分的含量低于某个特定值。而“浓水”则是指一种液体中水分的含量较高,通常用于描述液体中水分的含量高于某个特定值。现在,让我们来分析这个问题中的情境。问题中提到,通过“兑”来得到“稀水”或“浓水”。这里有一个关键的信息点是,“兑”的结果是改变了液体中水分的含量。基于这个情境,我们可以做出一些推断:1. “稀水”的定义:如果“兑”的结果是将一种液体与另一种液体混合,并且混合后的液体中水分的含量低于原来的液体,那么我们可以推断出“兑”的结果是得到了“稀水”。2. “浓水”的定义:如果“兑”的结果是将一种液体与另一种液体混合,并且混合后的液体中水分的含量高于原来的液体,那么我们可以推断出“兑”的结果是得到了“浓水”。因此,根据这些推断,我们可以得出结论:如果通过“兑”来得到的是“稀水”,那么混合后的液体中水分的含量低于原来的液体;如果得到的是“浓水”,那么混合后的液体中水分的含量高于原来的液体。综上所述,这个问题中的“兑”字使用巧妙,通过改变液体中水分的含量来引出一个关于“稀水”和“浓水”的推断。这个问题考验的是思维的灵活性和对语言文字含义的深刻理解。

与官方资料中的答案并不一致(模型训练的随机性),回答1还是比较科学的,但回答2有点不知所云,感觉像个偏哲学的回答。这再次说明大模型微调中存在一定的不确定性。

3、 参考资料

  1. https://github.com/InternLM/Tutorial/blob/camp2/data_fine_tuning/data_fine_tuning.md

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

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

相关文章

4.28java项目小结

这几天完成了用户修改资料模块的功能,实现了修改用户头像,昵称等信息,并且对数据库进行了操作,大致画了好友资料的页面的内容,这两天尽量完成表的创建,建立多对多的关系,实现好友的添加功能。

.DevicData-P-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复

引言: 随着信息技术的飞速发展,网络安全问题日益凸显,其中勒索病毒以其独特的攻击方式和巨大的破坏性引起了广泛关注。.DevicData-P-XXXXXXXX勒索病毒就是近期出现的一种新型勒索病毒,它利用强大的加密算法和巧妙的传播手段&…

HNCTF 2022 week1 题解

自由才是生活主旋律。 [HNCTF 2022 Week1] Interesting_include <?php //WEB手要懂得搜索 //flag in ./flag.phpif(isset($_GET[filter])){$file $_GET[filter];if(!preg_match("/flag/i", $file)){die("error");}include($file); }else{highlight_…

求解素数环问题

注&#xff1a;这里我的代码是以第一位为最大数n为首元素不动的 思路&#xff1a; 首先我们分析问题要以较小规模的样例进行分析&#xff0c;例如n3时 第一步&#xff1a;深入搜索 我们先不管后面怎么样&#xff0c;当前的首要目标是先确定第一个元素的值&#xff0c;可知有…

windows电脑改造为linux

有个大学用的旧笔记本电脑没啥用了&#xff0c;决定把它改成linux搭一个服务器&#xff1b; 一、linux安装盘制作 首先要有一个大于8G的U盘&#xff0c;然后去下载需要的linux系统镜像&#xff0c;我下的是ubuntu&#xff0c;这里自选版本 https://cn.ubuntu.com/download/d…

今日arXiv最热NLP大模型论文:韩国团队提出ResearchAgent系统,模仿人类产出论文idea

你是否还在苦于想发论文却没有idea&#xff1f; 在浩瀚无边的文献中苦苦寻找却又无从下手&#xff1f; 那些看似与你研究相关的文章&#xff0c;要么已经被人研究得透彻无比&#xff0c;要么与你的方向南辕北辙&#xff0c;让你倍感挫败。 不要慌&#xff0c;让AI来助你一臂之…

日期类的实现,const成员

目录 一&#xff1a;日期类实现 二&#xff1a;const成员 三&#xff1a;取地址及const取地址操作符重载 一&#xff1a;日期类实现 //头文件#include <iostream> using namespace std;class Date {friend ostream& operator<<(ostream& out, const Dat…

C语言中的三大循环

C语言中为我们提供了三种循环语句&#xff0c;今天我就来与诸君细谈其中之奥妙。循环这一板块总结的内容较多&#xff0c;而且&#xff0c;很重要&#xff01;&#xff08;敲黑板&#xff01;&#xff01;&#xff01;)&#xff0c;所以诸君一定要对此上心&#xff0c;耐住性子…

系统服务(22年国赛)—— nmcli命令部署VXLAN

前言&#xff1a;原文在我的博客网站中&#xff0c;持续更新数通、系统方面的知识&#xff0c;欢迎来访&#xff01; 系统服务&#xff08;22年国赛&#xff09;—— VXLAN服务部署https://myweb.myskillstree.cn/118.html 目录 题目&#xff1a; AppSrv 关闭防火墙和SEli…

Linux 双击sh脚本运行无反应或一闪而退【已解决】

这里写目录标题 一、问题描述二、解决思路1. 开启终端&#xff0c;使用命令行运行.sh脚本文件2. 终端中运行可以&#xff0c;但双击之后运行闪退 (遇到了个这个奇奇怪怪的问题) 三、分析记录3.1 .bashrc设置变量的作用域3.2 环境变量冲突覆盖问题. 四、相关知识点4.1 环境变量配…

CSS详解(一)

1、css工作中使用场景 美化网页&#xff08;文字样式、背景样式、边框样式、盒子模型、定位、动画、&#xff09;&#xff0c;布局页面&#xff08;flex布局、响应式布局、媒体查询&#xff09; 2、CSS 规则 通常由两个主要部分组成选择器和样式声明 2.1选择器 选择器指定了…

C语言-用二分法在一个有序数组中查找某个数字

1.题目描述 有15个数按由大到小顺序放在一个数组中&#xff0c;输入一个数&#xff0c;要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中&#xff0c;则输出“无此数” 二.思路分析 记录数组中左边第一个元素的下标为left&#xff0c;记录数组右边第一个…

Spring AI聊天功能开发

一、引入依赖 继承父版本的springboot依赖&#xff0c;最好是比较新的依赖。 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version><relativePat…

【JavaScript】转化为布尔值boolean的几种情况

1 转化为布尔值boolean时为false的6种情况 下面6种值转化为布尔值时为false&#xff0c;其他转化都为true&#xff1a; 1、undefined2、null&#xff08;代表空值&#xff09;3、0&#xff08;数字0布尔值为false&#xff0c;字符串"0"布尔值为true) (数字0转布尔类…

C++笔试强训day10

目录 1.最长回文字符串 2.买卖股票的最好时机(一) 3.过河卒 1.最长回文字符串 链接 一开始没认真看题目&#xff0c;直到提交了好几遍没过还是没去检查题目&#xff0c;一直检查代码逻辑&#xff0c;哎呦&#xff0c;难受了。 我以为是收尾字母相同就行了。 错误代码&…

为什么二维数组初始化第一维数组长度可以为空,第二维不可以为空呢?

注意&#xff0c;数组第二维的长度声明永远不能省略。这是因为C语言中的二维数组元素在c编译程序为其分配的连续存储空间中是按行存放的&#xff0c;即存在完整第一行后存第二行&#xff0c;然后再第三行&#xff0c;以此类推。存放时系统必须知道每一行有多少个元素才能正确计…

一文讲解Android车载系统camera架构 - EVS

Android的camera开发中&#xff0c;使用最多的是camera2 以及现在Google主推的cameraX 架构&#xff0c;而这两个架构主要针对的是手机移动端上camera的流程。 而今天介绍的EVS(Exterior View System)架构是不同于camera2上的手机架构&#xff0c;针对Automotive的版本&#x…

软文伪原创工具有哪些,推荐3款强大的软文伪原创工具

软文作为一种重要的营销和传播手段&#xff0c;受到了越来越多的关注。而随着科技的不断发展&#xff0c;各种软文生产的工具相续出现&#xff0c;如&#xff1a;软文伪原创工具&#xff0c;它能为人们提供便捷、高效的文章生产方式&#xff0c;也及可以节省文章写作的时间与精…

车载系统的 加减串器应用示意

overview 车载系统上使用加减串器来实现camera&#xff0c; led液晶显示屏等 图像数据的远距离传输&#xff0c;将原先在短距离传输视频信号的mipi csi&#xff0c;dsi 等的TX&#xff0c;RX中间&#xff0c;插入加减串器&#xff0c;实现长距离的可靠传输。 示意图如下 往往…

Vue从入门到精通-01-Vue的介绍和vue-cli

MVVM模式 Model&#xff1a;负责数据存储 View&#xff1a;负责页面展示 View Model&#xff1a;负责业务逻辑处理&#xff08;比如Ajax请求等&#xff09;&#xff0c;对数据进行加工后交给视图展示 关于框架 为什么要学习流行框架 1、企业为了提高开发效率&#xff1a;…