从数据集视角看——大语言模型(LLMs)的训练、微调和推理

1. 大语言模型训练的整体框架

大语言模型的训练是一个复杂的过程,涉及数据准备、模型架构、优化策略和推理部署。以下是整体框架的详细分解:

1.1 训练阶段

  • 预训练:在海量文本数据上学习通用语言表示,类似于“学习语言的百科全书”。
  • 微调:针对特定任务调整模型参数,类似于“针对考试复习重点内容”。
  • 指令微调:在对话或指令数据集上优化,使模型更适合交互式任务。
  • 推理:使用训练好的模型进行预测或生成。

1.2 核心组件

  • 数据集:提供训练所需的文本和标签。
  • 特征:将文本转换为模型可处理的数值表示。
  • 损失函数:衡量模型预测与目标的差距,指导优化。
  • 模型架构:通常是 Transformer,包含编码器、解码器或两者组合。
  • 优化器:如 AdamW,用于更新模型参数。
  • 评估指标:如准确率、F1 分数、BLEU 分数,用于监控性能。

2. 数据集的全面解析

数据集是大语言模型训练的基石,其质量、规模和多样性直接决定模型的性能。以下是对数据集的详细剖析。

2.1 数据集的来源与类型

2.1.1 预训练数据集

  • 通用文本数据集
    • Common Crawl:从互联网抓取的网页数据,包含数十亿网页,覆盖多种语言和主题。
    • Wikipedia:高质量、结构化的百科全书文本,适合学习事实性知识。
    • BooksCorpus:开源图书数据,适合长文本建模。
    • C4 (Colossal Clean Crawled Corpus):从 Common Crawl 清洗后的数据集,广泛用于 T5、Grok 等模型。
  • 社交媒体数据
    • Reddit:捕捉口语化、实时性强的文本,需严格过滤敏感内容。
  • 多语言数据集
    • mC4:多语言版本的 C4,包含 100 多种语言。
    • XLM 数据集:支持跨语言任务的混合数据集。
  • 领域特定数据集
    • ArXiv:学术论文,适合科学领域的预训练。
    • PubMed:生物医学文献,适合医疗领域。

2.1.2 微调数据集

  • 通用 NLP 任务数据集
    • GLUE/SuperGLUE:包含文本分类、相似性判断、自然语言推理等任务。
    • SQuAD:问答数据集,包含问题、上下文和答案。
    • CoNLL-2003:命名实体识别(NER)数据集。
  • 生成任务数据集
    • WMT (Workshop on Machine Translation):机器翻译数据集,包含源语言和目标语言对。
    • CNN/Daily Mail:新闻摘要数据集。
  • 对话数据集
    • Alpaca、Dolly:开源指令微调数据集,包含用户指令和模型回答。
    • UltraChat:大规模对话数据集,模拟多轮交互。
  • 定制数据集
    • 企业或研究者根据需求手动标注,例如客户服务对话、法律文档分析等。

2.1.3 数据集规模

  • 预训练:通常需要 TB 级文本数据( 1 0 9 10^9 109 1 0 12 10^{12} 1012 词)。
  • 微调:数据集规模较小( 1 0 3 10^3 103 1 0 6 10^6 106 样本),但需要高质量标注。
  • 指令微调 1 0 4 10^4 104 1 0 6 10^6 106 条指令-回答对。

2.2 数据预处理

数据预处理是将原始文本转换为模型可处理的格式的过程,具体步骤包括:

2.2.1 清洗

  • 去噪:移除 HTML 标签、JavaScript 代码、广告、乱码等。
  • 去重:使用哈希或相似性检测(如 MinHash)移除重复文本。
  • 过滤
    • 移除低质量内容(如过短句子、色情内容)。
    • 使用语言检测工具(如 FastText)过滤非目标语言文本。
    • 应用启发式规则(如句子长度、词汇多样性)筛选高质量文本。

2.2.2 分词

  • 方法
    • WordPiece:BERT 使用的分词方法,将词拆分为子词单元(如 “playing” → “play##ing”)。
    • Byte-Pair Encoding (BPE):GPT 系列使用的分词方法,通过合并高频字节对构建词汇表。
    • SentencePiece:无监督的分词方法,适用于多语言场景。
  • 词汇表大小:通常为 30,000 到 100,000 个 token。
  • 特殊标记
    • [CLS]:BERT 中用于表示整个句子。
    • [SEP]:分隔不同句子或段落。
    • [PAD]:填充短序列到统一长度。
    • :生成任务中的开始和结束标记。

2.2.3 格式化

  • 将文本转换为模型输入格式,如:
    • JSON:存储文本、标签和其他元信息。
    • TFRecord:TensorFlow 使用的二进制格式,适合大规模数据。
    • HDF5:高效存储大型数据集。
  • 示例
    {
         
      "text": "这部电影太棒了!",
      "label": "积极",
      "tokens": ["这部", "电影", "太", "棒", "了", "!"],
      "token_ids": [101, 2023, 3185, 2003, 10392, 999, 102]
    }
    

2.2.4 数据增强

  • 同义词替换:用同义词替换句子中的词(如 “棒” → “好”)。
  • 反向翻译:将文本翻译到另一种语言再翻译回来,生成语义相近的变体。
  • 随机插入/删除:随机添加或删除词,增加数据多样性。
  • 示例
    • 原始:这部电影太棒了!
    • 增强:这部影片很精彩!

2.3 数据集的标签

标签是训练过程中模型需要预测的目标,分为以下几类:

2.3.1 预训练中的标签

预训练通常采用自监督学习,标签从数据本身生成:

  • 掩码语言建模 (MLM, BERT)

    • 任务:随机掩盖 15% 的词,预测这些词。
    • 标签:被掩盖的词。
    • 示例
      • 输入:这只 [MASK] 在垫子上。
      • 标签:猫
    • 细节
      • 80% 的掩盖词直接替换为 [MASK]。
      • 10% 替换为随机词。
      • 10% 保持不变(防止模型过于依赖 [MASK])。
  • 因果语言建模 (CLM, GPT)

    • 任务:给定前文,预测下一个词。
    • 标签:序列中的下一个词。
    • 示例
      • 输入:这只猫
      • 标签:在
    • 细节:模型逐步生成序列,适合生成任务。
  • 下一句预测 (NSP, BERT)

    • 任务:判断两个句子是否连续。
    • 标签:二分类标签(1 表示连续,0 表示不连续)。
    • 示例
      • 输入:句子 A:这只猫在垫子上。句子 B:它很舒服。
      • 标签:1
      • 输入:句子 A:这只猫在垫子上。句子 B:天空是蓝色的。
      • 标签:0
  • 排列语言建模 (PLM, XLNet)

    • 任务:预测随机排列序列中的词。
    • 标签:原始序列中的词。
    • 细节:结合了 MLM 和 CLM 的优点,考虑双向上下文。
  • 对比学习 (SimCSE)

    • 任务:通过对比正负样本学习句子表示。
    • 标签:正样本(相同句子的变体)与负样本(其他句子)。

2.3.2 微调中的标签

微调通常采用监督学习,标签由人工标注:

  • 分类任务

    • 单标签分类:如情感分析,标签为“积极”、“消极”或“中性”。
    • 多标签分类:如主题分类,标签为多个主题的组合(如“科技”、“健康”)。
    • 示例
      • 文本:这部电影太棒了!
      • 标签:积极
  • 序列标注任务

    • 任务:为序列中的每个词分配标签,如命名实体识别(NER)。
    • 标签:BIO 格式(Begin, Inside, Outside)。
    • 示例
      • 文本:埃隆·马斯克是特斯拉的首席执行官。
      • 标签:B-PER I-PER O O O O B-ORG
  • 生成任务

    • 任务:生成目标文本,如机器翻译、摘要生成。
    • 标签:目标文本序列。
    • 示例
      • 输入:这只猫在垫子上。
      • 标签:The cat is on the mat.
  • 问答任务

    • 任务:从上下文中提取答案或生成答案。
    • 标签:答案文本或答案的起始/结束位置。
    • 示例
      • 上下文:法国的首都是巴黎。
      • 问题:法国的首都是哪里?
      • 标签:巴黎
  • 指令微调

    • 任务:根据用户指令生成回答。
    • 标签:高质量的回答文本。
    • 示例
      • 指令:写一首关于月亮的诗。
      • 标签:月亮在夜空中柔和地发光……

2.3.3 标签设计的挑战

  • 噪声:人工标注可能存在错误,需通过多轮标注或一致性检查提高质量。
  • 不平衡:某些标签(如消极情感)可能较少,可通过加权损失或数据增强解决。
  • 多模态标签:如果涉及多模态任务(如图像描述),标签可能包括文本和图像区域。

2.4 数据集的特征

特征是模型输入的数值表示,决定了模型能从数据中学习到什么。

2.4.1 词嵌入

  • 定义:将词或子词映射到高维向量(如 768 维)。
  • 方法
    • 静态嵌入:如 Word2Vec、GloVe(不常用)。
    • 动态嵌入:Transformer 模型通过嵌入层生成上下文相关的表示。
  • 示例
    • 词:猫
    • 嵌入:[0.12, -0.34, 0.56, …](768 维向量)

2.4.2 位置编码

  • 作用:捕捉词序信息,因为 Transformer 不具备天然的序列感知能力。
  • 方法
    • 正弦位置编码(Vaswani 等人,2017):
      • P E ( p o s , 2 i ) = sin ⁡ ( p o s / 1000 0 2 i / d ) PE(pos, 2i) = \sin(pos / 10000^{2i/d}) PE(pos,2i)=sin(pos/100002i/d)
      • P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s / 1000 0 2 i / d ) PE(pos, 2i+1) = \cos(pos / 10000^{2i/d}) PE(pos,2i+1)=cos(pos/100002i/d)
        其中, p o s pos pos 是词的位置, i i i 是维度索引, d d d 是嵌入维度。
    • 学习位置编码:通过训练学习位置向量(如 BERT)。
  • 示例
    • 输入:这只猫
    • 位置编码:
      • 这: [sin(0), cos(0), …]
      • 只: [sin(1), cos(1), …]
      • 猫: [sin(2), cos(2), …]

2.4.3 上下文特征

  • 生成方式:Transformer 的自注意力机制生成上下文相关的特征。
  • 数学形式
    • Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V
      其中, Q Q Q K K K V V V 是查询、键、值矩阵, d k d_k dk 是键的维度。
  • 示例
    • 输入:这只猫在垫子上
    • 输出:每个词的上下文表示(如 “猫” 的表示融合了 “这” 和 “在” 的信息)。

2.4.4 任务特定特征

  • 分类任务
    • 使用 [CLS] 标记的向量表示(BERT)。
    • 示例:CLS 向量输入到线性层进行分类。
  • 问答任务
    • 拼接问题和上下文,生成联合表示。
    • 示例:输入 “[CLS] 法国的首都是哪里? [SEP] 法国的首都是巴黎。 [SEP]”。
  • 生成任务
    • 逐步生成序列,每次输入前文特征。
    • 示例:输入 “这只猫” 生成 “在”。

2.4.5 元特征

  • 语言标识:多语言模型中加入语言标记(如 “zh” 表示中文)。
  • 来源信息:如文本来自 Wikipedia 或其他来源。
  • 长度信息:用于动态调整序列长度。

2.4.6 特征工程的挑战

  • 词汇表覆盖:低频词或新词可能不在词汇表中,需使用子词或 OOV 处理。
  • 序列长度:Transformer 通常限制最大长度(如 512 或 2048),需截断或分段处理长文本。
  • 多模态特征:如图像-文本任务,需将图像特征(如 CNN 或 ViT 提取的向量)与文本特征对齐。

2.5 数据集的组织与划分

2.5.1 数据集划分

  • 训练集:80%-90%,用于优化模型参数。
  • 验证集:5%-10%,用于超参数调优和早停。
  • 测试集:5%-10%,用于评估最终性能。
  • 示例
    • 数据集:10,000 条评论
    • 训练集:8,000 条
    • 验证集:1,000 条
    • 测试集:1,000 条

2.5.2 批处理

  • 批大小:常见值为 16、32、64,取决于 GPU 内存。
  • 动态填充:将短序列填充到批次中最长序列的长度。
  • 示例
    from transformers import DataCollatorWithPadding
    data_collator = DataCollatorWithPadding(tokenizer)
    batch = data_collator(samples)  # 自动填充
    

2.5.3 数据加载

  • 使用 DataLoader(PyTorch)或 tf.data(TensorFlow)实现高效加载。
  • 并行加载:多线程读取数据,减少 I/O 瓶颈。
  • 乱序:随机打乱样本,防止模型学习数据顺序。

3. 损失函数的全面解析

损失函数是训练的核心,衡量模型预测与真实标签的差距。以下是大语言模型中常用的损失函数及其数学形式、应用场景和优化技巧。

3.1 预训练中的损失函数

3.1.1 掩码语言建模 (MLM)

  • 目标:预测被掩盖的词。
  • 损失函数:交叉熵损失。
  • 数学形式
    • L MLM = − ∑ i ∈ masked ∑ j = 1 ∣ V ∣ y i , j log ⁡ y ^ i , j \mathcal{L}_{\text{MLM}} = -\sum_{i \in \text{masked}} \sum_{j=1}^{|V|} y_{i,j} \log \hat{y}_{i,j} LMLM=imaskedj=1Vyi,j
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱看烟花的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值