Datawhale AI夏令营第四期-大模型应用开发Task4笔记

目录

理论学习

轻量化微调技术简介

LoRA技术简介

实战

数据处理

任务挑选和训练集构建

任务挑选原则

数据收集

数据预处理

微调实战

效果测试

效果调优

调整策略


理论学习

大模型微调技术简介

模型微调也被称为指令微调(Instruction Tuning)或者有监督微调(Supervised Fine-tuning, SFT),该方法利用成对的任务输入与预期输出数据,训练模型学会以问答的形式解答问题,从而解锁其任务解决潜能。经过指令微调后,大语言模型能够展现出较强的指令遵循能力,可以通过零样本学习的方式解决多种下游任务。

然而,值得注意的是,指令微调并非无中生有地传授新知,而是更多地扮演着催化剂的角色,激活模型内在的潜在能力,而非单纯地灌输信息。

相较于预训练所需的海量数据,指令微调所需数据量显著减少,从几十万到上百万条不等的数据,均可有效激发模型的通用任务解决能力,甚至有研究表明,少量高质量的指令数据(数千至数万条)亦能实现令人满意的微调效果。这不仅降低了对计算资源的依赖,也提升了微调的灵活性与效率。

轻量化微调技术简介

然而,由于大模型的参数量巨大, 进行全量参数微调需要消耗非常多的算力。为了解决这一问题,研究者提出了参数高效微调(Parameter-efficient Fine-tuning),也称为轻量化微调 (Lightweight Fine-tuning),这些方法通过训练极少的模型参数,同时保证微调后的模型表现可以与全量微调相媲美。

常用的轻量化微调技术有LoRA、Adapter 和 Prompt Tuning。

LoRA技术简介

LoRA 是通过低秩矩阵分解,在原始矩阵的基础上增加一个旁路矩阵,然后只更新旁路矩阵的参数。

实战

创建实例后设置环境运行下面代码,下载文件,并将Task 4:源大模型微调实战中内容拷贝到当前目录。

git lfs install
git clone https://www.modelscope.cn/datasets/Datawhale/AICamp_yuan_baseline.git
cp AICamp_yuan_baseline/Task\ 4:源大模型微调实战/* .

点进去之后运行

数据处理

运行 2.3 数据处理 下面的单元格。我们使用 pandas 进行数据读取,然后转成 Dataset 格式:

# 定义数据处理函数
def process_func(example):
    MAX_LENGTH = 384    # Llama分词器会将一个中文字切分为多个token,因此需要放开一些最大长度,保证数据的完整性

    instruction = tokenizer(f"{example['input']}<sep>")
    response = tokenizer(f"{example['output']}<eod>")
    input_ids = instruction["input_ids"] + response["input_ids"]
    attention_mask = [1] * len(input_ids) 
    labels = [-100] * len(instruction["input_ids"]) + response["input_ids"] # instruction 不计算loss

    if len(input_ids) > MAX_LENGTH:  # 做一个截断
        input_ids = input_ids[:MAX_LENGTH]
        attention_mask = attention_mask[:MAX_LENGTH]
        labels = labels[:MAX_LENGTH]

    return {
        "input_ids": input_ids,
        "attention_mask": attention_mask,
        "labels": labels
    }

任务挑选和训练集构建

任务挑选原则
  • 是否必须微调:评估任务是否可以通过简单的提示工程(prompt engineering)或检索增强生成(RAG)来解决。如果任务较为复杂,需要模型具备较强的上下文理解和生成能力,则可能需要微调。
  • 已有任务:对于传统的NLP任务(如文本分类、命名实体识别等),可以直接复用开源的数据集。
  • 新任务:对于新出现的任务,首先检查是否有现成的开源数据集可以复用。如果没有,需要自行收集数据。
数据收集
  • 已有任务:直接使用开源数据集,如IMDB电影评论数据集(文本分类)、CoNLL 2003数据集(命名实体识别)等。
  • 新任务:如果找不到合适的开源数据集,可以考虑以下几种方式收集数据:
    • 人工标注:雇佣专业人员或众包平台进行数据标注。
    • 爬虫采集:从公开网站上爬取相关数据。
    • 合成数据:使用已有的模型生成模拟数据。
    • 合作共享:与其他研究机构或公司合作共享数据。
数据预处理
  • 数据清洗:去除无关字符、HTML标签、非标准符号等。
  • 去重:确保数据集中没有重复样本。
  • 格式统一:确保所有样本格式一致,便于后续处理。
  • 分词和编码:对文本进行分词,并转换为模型可接受的输入格式。

微调实战

效果测试
  • 测试集构建:从训练集中划分一部分作为验证集,也可以单独准备一个测试集。
  • 轻量化微调:使用少量数据进行初步微调,观察模型的表现是否能够满足基本需求。
  • 评估指标:根据任务类型选择合适的评估指标,如准确率、F1分数、BLEU得分等。
效果调优
  • 未达到预期的原因
    • 数据质量:数据可能存在噪声或标注错误。
    • 数据量不足:数据量不足以支撑模型学习复杂的模式。
    • 参数设置不当:学习率、批次大小等超参数设置不合适。
    • 模型容量不足:模型规模较小,不足以捕捉复杂的关系。
    • 训练不足:训练轮次不够多,模型没有充分收敛。
调整策略
  • 增加数据量:收集更多高质量的数据。
  • 改进数据预处理:提高数据的质量,减少噪声。
  • 调整超参数:优化学习率、批次大小等超参数。
  • 使用更大模型:如果条件允许,可以尝试使用更大规模的预训练模型。
  • 增加训练轮次:适当增加训练轮次,确保模型充分收敛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值