名词释义
- 预训练:大模型训练的第一个阶段
- 数据集污染:预训练数据中包含测试数据中的部分或全部
数据来源
- 通用数据
- 网页
- 书籍
- 专用数据
- 多语文本
- 科学论文
- 代码
数据预处理
质量过滤
- 基于启发式规则
- 规则建议
- 基于语种过滤(过滤不支持的语种数据)
- 基于简单统计指标过滤(针对论坛数据,过滤掉任何点赞数少于 3 的用户评论)
- 基于关键词过滤(针对网页数据,过滤掉 HTML 标签)
- 优缺点
- 优点:清晰效率高
- 缺点:质量差
- 规则建议
- 基于分类器规则
- 实际方式:使用一个训练好的文本分类器来分类
- 具体方案:
- 轻量级模型
- 优点:效率高
- 缺点:准确度、精度差
- 可微调预训练模型
- 优点:可微调
- 缺点:通用性、泛用性有限
- 闭源大模型API
- 优点:能力强
- 缺点:成本高、灵活性差
- 轻量级模型
- 优缺点
- 优点:质量高
- 缺点:效率低
敏感内容过滤
- 过滤内容
- 有毒内容
- 隐私内容
- 过滤方法
- 基于启发式方法
- 基于分类器方法
去重
- 方法
- 计算粒度
- 去重匹配方法
- 精确匹配
- 近似匹配(哈希)
词元化(分词)
- 定义:将原始文本分割成可被模型识别和建模的词元序列,作为模型的输入数据
- 作用:生成模型输入数据
- 特殊说明:模型的输入输出都需要词元化,输出来的词元化数据经过反词元化,抓换成人类能直接阅读的数据
- 词元化方法
- 基于词汇分词
- 子词分词器
- 分词器关注点
- 无损重构(可分词可还原)
- 高压缩率
- 不同数据类型要使用不同分词算法(比如数字分词就不能用BPE)
- 常用分词算法:
- BPE:从字符开始,逐步合并出现频率最高的字符对
- WordPiece:类似BPE,但会在合并过程中考虑子词概率
- Unigram:从一个初始的子词字典开始,逐步移除低频子词,保留高概率子词
- 分词器关注点
数据调度
调度解决的问题:
- 各种数据混合比例
- 各种数据源用于训练的顺序
数据混合(比较依赖经验)
- 数据混合常见策略
- 增加数据多样性
- 优化数据混合(使用代理小模型测试验证已获得某种最佳比例)
- 优化特定能力(增加特定能力对应的原始训练数据比例)
- 举例:LLaMA
- 80%网页
- 6.5%代码
- 4.5%书籍
- 2.5%科学论文
数据课程(训练顺序)
- 定义:按照特定顺序安排预训练数据进行模型训练
- 举例:
- 代码大模型(CodeLLaMA):2T通用->500B代码
- 数学大模型(L1emma):基于CodeLLaMA,最后追加50-200B数学数据
- 长文本大模型(CodeLLaMA): 基于LLaMA-2,追加2.5T词元-4K上下问窗口->20B词元,16K上下文窗口
预训练数据准备示例(YuLan)
- 数据收集
- 网页
- 代码
- 书籍
- 科学论文
- 知乎、维基百科
- 数据清洗
- 质量过滤:启发式方法,去除低质量及有害数据
- 去重、隐私去除:采用MinHash算法
- 词元化:LLaMA的词表+中文数据BPE之后的词元化数据
- 数据调度:
- 采用代理小模型进行探索获得具体数据混合及数据课程数据