数据
数据预处理
预处理流程:
原始语料库—>质量过滤(语种过滤、统计过滤、关键词过滤、分类器过滤)—>敏感内容过滤(有毒内容、隐私内容PII)—>数据去重(句子级别、文档级别、数据集级别)—>词元化(分词)(BPE分词、WordPiece分词、Unigram分词)—>准备预训练
数据处理框架:Data-Juicer
质量过滤:
- 基于启发式规则的方法
- 基于分类器的方法
轻量级模型(如 FastText 等)、可微调的预训练语言模型(如 BERT、BART 或者 LLaMA 等)、闭源大语言模型 API(如GPT-4、Claude 3)
可以首先利用启发式规则进行初步筛选,以快速排除不符合要求的文档,随后再采用分类器方法进一步精细过滤,确保最终筛选出的语料具有较好的文本质量。在这一过程中,还可以同时应用多种分类器,可以先使用轻量级分类器进行数据过滤,进而使用更为有效但是资源消耗更高的分类器在粗滤后的数据上再次进行选择。
数据调度
完成数据预处理之后,需要设计合适的调度策略来安排这些多来源的数据,进而用于训练大语言模型。通常来说,数据调度(Data Scheduling)主要关注两个方面:各个数据源的混合比例以及各数据源用于训练的顺序(称为 数据课程,Data Curriculum)。
- 数据混合
使用多个候选策略训练多个小型语言模型,然后从中选择一个最优的训练策略。 - 数据课程
数据课程是指按照特定的顺序安排预训练数据进行模型的训练。相关研究表明,为了学习某些特定的技能,按照技能依赖顺序编排对应数据集的学习方法(例如,基本技能 → 目标技能)比直接在相关的特定语料库上学习效果更好。
模型架构
Transformer 是由多层的多头自注意力(Multi-head Self-attention)模块堆叠而成的神经网络模型。原始的 Transformer 模型由编码器和解码器两个部分构成,而这两个部分实际上可以独立使用,例如基于编码器架构的 BERT 模型和解码器架构的 GPT 模型。
解析Transformer的文章和书籍太多,这里只记录一些重点。
- 多头自注意力机制
RNN络迭代地利用前一个时刻的状态更新当前时刻的状态,在处理较长序列的时候,常常会出现梯度爆炸或者梯度消失的问题。CNN只有位于同一个卷积核的窗口中的词元可以直接进行交互,通过堆叠层数来实现远距离词元间信息的交换。而多头自注意力机制能够直接建模任意距离的词元之间的交互关系。
输入序列首先通过不同的权重矩阵被映射为一
组查询、键和值。每组查询、键和值的映射构成一个“头”,并独立地计算自注意力的输出。最后,不同头的输出被拼接在一起,并通过一个权重矩阵 W O ∈ R H × H W^O∈R^{H×H} WO∈RH×H进行映射,产生最终的输出。
M H A = C o n c a t ( h e a d 1 , . . . , h e a d N ) W O MHA = Concat(head_1,..., head_N)W^O MHA=Concat(head1,...,headN)WO
h e a d n = A t t e n t i o n ( X W n Q , X W n K , X W n V ) head_n = Attention(XW^Q_n, XW^K_n, XW^V_n) headn=Attention(XWnQ,XWnK,XWnV)
自注意力的计算过程对于基于硬件的并行优化(如 GPU、TPU 等)非常友好,因此能够支持大规模参数的高效优化。 - 前馈网络层
为了学习复杂的函数关系和特征,Transformer 模型引入了一个前馈网络层(Feed Forward Netwok, FFN),对于每个位置的隐藏状态进行非线性变换和特征提取。
未完待续…