大模型预训练数据处理似乎是一道坎,我们一起来探究一下吧。

以零一万物、InternLM2的预训练数据处理为例:

1 InternLM2

1.1 文本数据

书生2的中英文本语料配比为1:3,数据配比如下:

文本的预处理分为5个步骤:数据格式预处理、规则清洗、文本去重、安全过滤、质量过滤。

  • 数据格式化:网页数据主要来自Common Crawl,需要先解压原始WARC格式文件,再使用Trafilatura进行HTML解析并提取文本内容,然后利用pycld24进行语言检测和内容分类,并记录,最终将数据按jsonl格式进行存储,得到格式化数据。
  • 规则清洗:设计一系列基于启发式的方法,对网页抽取文本进行分隔和断行的异常检测、异常字符的频率检测、标点符号的分布检测等操作进行数据的规则清洗。
  • 文本去重:采用基于局部敏感哈希(LSH)的方法对数据进行模糊去重。具体为利用MinHash方法在文档的5-Gram上构建128行的签名矩阵,通过0.7阈值对文档进行相似过滤,得到最终的去重数据。
  • 安全过滤:先采用“域名屏蔽”和“词汇屏蔽”进行初筛,再利用“色情检测器”、“毒性检测器”对文本进行二次筛选,以获取更加安全的数据集。
    • 不安全域名列表由约1300万个域名组成;
    • 敏感词汇列表由36289个敏感词汇组成;
    • 毒性检测器采用Kaggle上“毒性评论分类挑战”的数据训练一个BERT模型;
    • 色情检测器是将去重后的数据采样一部分并使用Perspective API进行数据标注,构建一个色情分类数据集,再训练BERT模型。
  • 质量过滤:网页文本中充斥着广告和难以阅读且缺乏逻辑连贯性的文本,用过“广告过滤器”和“流畅性检测器”进行文本质量过滤。其中广告数据(是否包含广告内容)以及流畅性数据(根据一致性、噪音、信息量和语法四个方面评分)均由人工标注,再对BERT模型进行微调获取。

1.2 代码数据

代码数据的来源如下:

代码数据的预处理分为5个步骤:数据格式预处理、代码去重、质量过滤、依赖排序。

  • 格式清理:将所有代码数据统一转换成markdown格式,主要是markdown兼容代码和文本混排,有利于教会大模型更好地编程。
  • 代码去重:去重方式与文本去重相似,只不过代码去重过程中,以文件为单位,可以更好地保持上下文的完整性。
  • 质量过滤:采用规则评分器和模型评分器混合过滤策略。为了获取更可靠的模型评分器(不同编程语言对模型评分器影响很大,最终只选择一致性较高的编程语言利用模型进行评分),采用如下图所示的迭代标注流程,主要标注评分器标记的高置信度的高质量和低质量数据,总共经过三次迭代。
  • 依赖排序:InternLM2上下文窗口可达到32K Tokens,可以将代码仓库中的所有代码文件进行学习,但代码文件中存在一定的连接顺序,排序代码之间的依赖关系,可以让大模型更好地学习长依赖能力。真实排序规则,将md文件排在子文件夹中第一个代码文件前面,代码文件之间的排序,采用正则表达式检测代码之间的“导入”关系(参考“__init__.py”或“include xx.h”文件),并利用拓扑排序确定文件的连接顺序选择最短路径。

1.3 长文本数据

长文本数据的预处理分为两个步骤:统计过滤和困惑度过滤。

  • 统计过滤器:根据各种词汇和语言学特征构建统计过滤器(应包含连词和其他暗示语篇结构的词汇,如“尤其是”、“正式地”等),参考LongWanjuan方法,原则是过滤掉无意义的数据,而不是选择高质量的数据。
  • 困惑度过滤器:利用文本段之间的困惑度差异指标来进行数据过滤,过滤上下文语义层面不连贯的文本,如HTML解析失败文本、媒体随机拼接的摘录文本等。困惑度差异指标主要计算两段文本之间的条件概率,其中S1是在S2之前的文本,当两个文本强相关时,条件概率值大于单独计算S2的概率,困惑度差异值为负值。

2 Yi

Yi的最后总共清洗出的数据为3.1T Tokens,数据配比如下:

具体的预训练处理如下:过滤和去重。

过滤方法:

  • 启发式过滤:该方法主要去除质量较低的文本内容。过滤规则包含:(1)根据特殊URL、域名、黑名单词表以及乱码文本进行过滤;(2)根据文本长度、特殊字符比例、短、连续或不完整的行比例;(3)根据重复词语、N-Gram片段、段落的占比;(4)识别和匿名话个人可识别信息,例如:邮箱、电话等。
  • 学习式过滤:通过困惑度、 质量、 安全和文档连贯性4种评分器来对文本进行过滤,其中,困惑度评分器利用KenLM库,按照CCNet的方法评估大量网络文本,丢弃困惑度分数明显高于平均水平的文本;质量评分器是经过维基百科数据训练的分类模型,当文本内容更偏向于维基这样高质量页面时,认为文本质量较高;安全评分器是识别并删除包含有毒内容的网络文档,如暴力、色情等;文档连贯性评分器识别文本的整体连贯性,删除句子或段落不连贯的文本
  • 聚类过滤:采用无监督语义聚类对文本进行分组,然后对聚类数据标注质量标签,为后续数据混合策略提供参考。

去重方法:

  • 基于文档级别的MinHash去重和子文档精确匹配去重,有效识别和消除文档内部和跨文档中的重复内容。
  • 主题模型对数据赋予特定的主题,在最后数据采样过程种对信息密度较低的主题内容进行下采样(主要是广告文本)

参考文献