第 8 节大模型微调数据构造

微调数据构造实验

1 XTuner教学使用

XTuner的安装、部署、训练教程详见:XTuner 微调个人小助手认知

2 微调实战

采用弱智吧数据进行训练~

2.1 概述

2.1.1 场景需求

基于 InternLM2-chat-1.8B 模型,用弱智吧中的数据进行微调,训练一个不弱智的模型

2.2 数据准备

2.2.1 数据构造

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

  1. 数据选择和采集

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

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

2数据预处理

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

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

3 数据标注

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

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

4 数据增强

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

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

5 数据划分

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

在本次实验中我们直接采用公开数据集中处理过的微调数据给大家做个简单的演示。大家可以访问 Huggingface 或者 OpenDatalab 进行数据集下载,由于huggingface网络连接问题,推荐国内的同学访问OpenDataLab进行数据集下载。我们选择其中的弱智吧数据进行微调,这个数据集的问题来自于点赞数超过500的弱智吧问题,基本都是一些逻辑陷阱或者脑筋急转弯,然后通过人工或GPT4的方式编写正确回答,再由人工校验后筛选出200多条高质量微调数据。

https://huggingface.co/datasets/m-a-p/COIG-CQIA

OpenDataLab 引领AI大模型时代的开放数据平台

2.2.2 真实数据预览

问题

答案

石油也是油,为啥没人用它来炒菜?

石油虽然也是一种油,但它并不适用于烹饪。这主要是因为石油和食用油在化学成分和用途上有很大的不同: 1. 化学 成分:食用油是由植物或动物脂肪制成的,主要含有对人体有益的脂肪酸,如欧米伽脂肪酸。而石油是一种化石燃料,主要由碳氢化合物组成,含有多种有害的化学物质。 2. 毒性:石油中含有的化学物质对人体是有害的,甚至是致癌的。这些物质在加热时会产 生有毒的烟雾和蒸气,这对健康极为不利。 3. 风味和气味:食用油在烹饪中可以增添食物的风味,而石油的气味和味道都非常 强烈且令人不悦,不适合用于食物。

### 大模型微调数据构造作业示例 #### 构造目标 为了有效进行大模型微调数据准备阶段至关重要。这不仅涉及收集足够的标注数据,还需要确保这些数据的质量和多样性能够充分支持特定任务的学习需求。 #### 数据采集与预处理 对于任何机器学习项目来说,高质量的数据都是成功的关键因素之一。当涉及到大型预训练模型时,这一点尤为重要。因此,在开始之前,应该先确定所需解决的具体问题是什么样的自然语言处理(NLP)任务——比如情感分析、命名实体识别(NER),或是问答系统(QA)[^1]。 一旦明确了具体的应用场景之后,则需着手搜集相应的语料库作为基础素材。考虑到实际应用环境可能存在的复杂情况,建议尽可能广泛地覆盖不同领域以及风格各异的真实案例来构建初始数据库[^2]。 接下来就是对原始文本做必要的清理工作,去除无关字符、统一编码格式等操作以保证后续流程顺利开展。此外,还需考虑如何扩充现有资源量级从而进一步优化最终效果: - **文本重述**:采用同义词替换、句式变换等方式改写原文本,既保留原有含义又增加了变体形式; - **翻译循环**:借助多语言转换工具实现跨文化视角下的内容再生; - **合成数据生成**:基于规则模板或者更高级别的算法模拟创造出全新实例[^3]。 ```python import random from transformers import pipeline def augment_text(texts, method='paraphrase'): augmented_texts = [] if method == 'translate': translator_en_to_fr = pipeline('translation', model="Helsinki-NLP/opus-mt-en-fr") translator_fr_to_en = pipeline('translation', model="Helsinki-NLP/opus-mt-fr-en") for text in texts: translated = translator_en_to_fr(text)[0]['generated_text'] back_translated = translator_fr_to_en(translated)[0]['generated_text'] augmented_texts.append(back_translated) elif method == 'paraphrase': paraphraser = pipeline("text2text-generation", model="prithivida/parrot_paraphraser_on_T5") for text in texts: para_phrases = paraphraser(text) chosen_phrase = random.choice(para_phrases)['generated_text'] augmented_texts.append(chosen_phrase) return augmented_texts ``` #### 微调过程概述 完成上述准备工作后就可以进入正式的微调了。此时应选取合适的评估指标体系用来衡量改进前后的性能差异,并据此调整超参数直至达到满意的结果为止。值得注意的是,由于大规模预训练网络本身已经具备很强的语言理解能力,所以往往只需要少量针对性强的有效样本来引导其适应新情境即可取得不错的表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值