浪潮人工智能研究院
2021 年,浪潮人工智能研究院发布了中文巨量模型“源 1.0”,其参数规模为 2457 亿,训练采用的中文数据集达 5TB,超越美国 OpenAI 组织研发的 GPT-3 模型。“源 1.0”在语言智能方面表现优异,获得中文语言理解评测基准 CLUE 榜单的零样本学习(zero-shot)和小样本学习(few-shot)两类总榜冠军。测试结果显示,人群能够准确分辨人与“源 1.0”作品差别的成功率低于 50%。
“源 1.0”训练采用的 5TB 高质量中文数据集是从约 860TB 的互联网数据中获取的,本文将介绍这一过程使用的方法和取得的效果。
1、语料质量清洗的必要性
大规模、高质量的预训练语料可以让模型学习更多的知识表达,更好地理解词的各种表征含义,从而更加智能。我们期望预训练所使用的数据足够多,并像百科词条一样语义通顺,且文本中包含一定的知识。但是事实上,百科词条极其有限,真正的大规模语料存在于各类互联网网页中。
通过网络爬虫可获得大量互联网语料,但是质量参差不齐。如表 1 所示的常见的低质量互联网语料,只使用关键词/规则过滤方法无法有效去除。
表 1 常见低质量互联网语料
2、语料质量清洗
互联网语料基本上可以分为 3 大类:高质量语料(语句通顺且包含一定知识)、低质量语料(语句不通顺)、广告语料(语句通顺但重复率过高,如广告、网站说明、免责声明等)。为了给“源 1.0”模型提供高质量的预训练数据集,浪潮人工智能研究院使用 Bert 训练了一个语料质量三分类模型。整个方案包括数据采样、语料标注、模型训练和效果评估四部分。
2. 1 数据采样
在“源 1.0”训练时,由于爬取的互联网语料非常庞大,即便经过敏感信息过滤、文章去重,数据集仍在 TB 级别。如此大规模的数据集难以直接进行处理、分析,需要进行采样。
将经过粗略过滤之后的数据,以文章为单位进行采样,再将所有采样数据分别写入到 2 个文件中,其中一个用来标注训练集语料(构建训练集,称之为“训练集”),另外一个则用来验证分类模型的效果(称之为“测试集”)。另外,为了使采样数据具有充分的代表性,在整个数据集内采用均匀采样。
2. 2 语料标注
数据采样后,使用循环迭代标注方法以提高标注速度,如图 1 所示:
如图所示,先使用“训练集”中的部分数据自动构建训练语料,然后使用分类模型进行训练,最后在剩余采样数据(“验证集”)上进行评估,并将得分较高的低质量语料和广告语料加入到标注数据中,如此循环多次。
另外,需要注意的是,互联网语料中大部分段落都比较短,多为单句,为方便叙述,下面统一将“段落”表述为“句子”。
采用 PPL(困惑度)、关键词密度筛选、句向量聚类和人工标注等方法,从采样数据中筛选出低质量语料和广告语料,默认剩下的语料为高质量文本。下面简单介绍下这几个方法:
-
针对语句不通顺的句子
互联网语料中含有较多的语义不通顺、有特殊符号的语料,为低质量数据。
本文使用困惑度(perplexity,简称 PPL)来评估语句的合理性,其基本思想是,计算一句话出现的概率,并取 -幂,其公式如下:
其中,.....代表一句话中N个 token(token 对应语言模型中的词典,对于中文而言,可能为一个字或者词)。
由上述公式可知,使用 PPL 排序,其分值越大,说明这句话出现的概率越低,表明质量越差。一句话的概率可根据如下公式计算:
其中,给定前k个词,第k+1 个词的概率可以通过 GPT 模型来计算。
计算每条语料的 PPL 值,从高到低排序,人工评估之后,确认前多少条数据为语句不通顺的语料。
值得注意的是,此方法需要大量的计算资源,且需要有训练好的中文 GPT 模型。
假设模型经过 softmax 之后的输出为对应的条件概率,则 PPL 的计算在某种程度上等价于 loss(交叉熵损失函数)的计算。
2. 针对知识表达不充分的句子
互联网语料中存在较多的短文本,如网站导航、目录结构等,为低质量数据。
我们使用了关键词密度筛选方法,根据关键词数量(最多 30)和文本长度,希望筛选剔除掉关键词少于 10 但文本很长的词条,以及文本长度小于 10 的短句。
设关键词数量为,文本长度为l,设计如下指标:
其中,m为重要性提升阈值,当>1 时,r的增长速率更快(指数函数),从而拉开不同质量数据的得分。的取值最大为 30,经过实验,这里m的取值为9。最后 min (l,50) 是为了保证当词条长度超过关键词可表示的范围时,高质量词条的得分不因词条长度过长而下降。其中的 10 为语义表示的最小字数阈值,当文本长度小于 10 时,r为0。对于长文本而言,该数值可以进一步增大。值得注意的是,r在二倍阈值时取得最大值。上式表明,当提取相同数量关键词时,用的字数越多,文本的得分越低。
使用小样本统计的指标分布图如下图所示。建议r的拆分阈值设定为 0.015。
另外,使用 jieba 分词的 TextRank 算法进行关键词的筛选。其主要思想是根据窗口大小,统计组合共现词和频率,使用频率代表共现权重,以此进行关键词抽取。
3. 针对频繁出现的句子
互联网语料中含有大量的网站说明、产品/公司广告介绍等,以及重复的广告、网站信息,会对语言模型产生误导,为广告数据。
我们使用句向量聚类的方法,对含义相近的句子进行聚类,如果超过指定阈值的句子数量达到一定比例,即认定为广告数据。其主要步骤有:
(1)获取句向量。将每条句子去重之后再进行编码,然后将句子输入到 BERT 中,使用第一个 token(<cls>)作为句子向量,并将句子编码、句向量写入到磁盘中。
(2)根据句子向量,构建 annoy 高维向量索引;
(3)遍历所有句子,通过 annoy 索引,统计相似度超过给定阈值的句子数量。
(4)对每个句子的相似问题数量进行排序,相似问题数量越高,其为频繁出现低质量语料的概率更大。
注意,由于样本数量足够庞大,在得到句子向量表征之后,如果计算一个句子的语义相近句子,使用暴力检索的方式遍历所有语句计算相似度,是非常耗时的。因此,我们使用了 Annoy 算法进行索引构建以加快检索速度。Annoy 是一种高维向量的近似索引算法,通过建立高维向量的二叉树表示,能够在较短的时间内找到任何查询点的最近点,在精度允许的条件下通过牺牲准确率来换取比暴力搜索快得多的搜索速度。
4. 其他
采用人工规则或人工标注方法。
2. 3 训练质量分类模型
将经过 PPL、关键词密度筛选得到的语料归为低质量语料,将经过语义聚类筛选得到的语料归为广告类语料,默认未被去除的为高质量语料,使用 BERT 进行有监督的三分类训练调优,并使用“验证集”进行评估。人工分析在“验证集”上的低质量文本中是否有被错分的,如果文本质量较高,则将其加入到高质量训练集中。并分析在“验证集”上的高质量文本中是否有被漏删的,将明显不合理的数据加入到低质量语料或广告语料中。重复几遍,不断扩充训练集、训练优化 BERT 模型,直至文本质量分类模型达到预期效果。
“达到预期”指的是大部分的高质量文本被保留,明显的低质量文本被去除。换句话说,我们并不期望模型能够十分准确地区分高质量语料和低质量语料,只期望模型能够将明显的低质量文本去除,对于剩余的高质量文本能有一个概率预估,文本质量越高的语句,得分越高,文本质量越低的语句,得分越低。
2. 4 效果评估
与粗过滤相比,文本质量清洗后去除了约 2TB 的数据,其中 50% 被识别为广告。考虑到广告也可能包含完整的语义信息,手动评估它们以确定是否需要召回。由于数据集分散在 36 台服务器上,为了避免人类偏见,在每台服务器上取样两组,每组由不同的评审员评估。部分统计结果见下表:
表 2 不同服务器上广告中高质量数据的百
从表 2 可以看出,样本 1 和样本 2 的高质量数据百分比是相似的,这说明评审人员在评估数据时具有高度一致性。广告中高质量数据的比例相当小,丢弃这部分数据是合理的。人工审查发现高质量语料的重复率约为 2.4%,而广告语料重复率为 12.6%,由此可见,该分类模型对高质量数据进行了一定程度的重复数据消除和广告过滤。
3. 总结
为了给“源 1.0”提供高质量的预训练数据集,我们采用了一种海量互联网语料的质量清洗和分析方法。首先对海量文本数据进行采样,通过 PPL、关键词密度筛选、聚类等方法自动筛选出低质量语料,然后使用分类模型在标注数据上进行训练,经过不断调优得到最终的文本质量分类模型。这一方法可以极大减少人工标注成本,从语义层面更加充分地去除各类低质量文本,有效提高预训练语言模型的理解能力。
关于“源 1.0”的更多信息,大家可以参阅浪潮人工智能研究院发布在 arxiv 上的论文: