赞
踩
当收集了丰富的文本数据之后,为了确保数据的质量和效用,还需要对数据进行预处理,从而消除低质量、冗余、无关甚可能有害的数据。一般来说,需要构建并使用系统化的数据处理框架(如开源库 Data-Juicer),从而保证预训练数据的质量。
直接收集到的文本数据往往掺杂了很多低质量的数据。例如,从网页抓取的数据中可能包含由机器自动生成的广告网页。为了优化模型学习的性能,需要去除语料库中的低质量数据。目前,研究人员主要使用以下两种数据清洗方法:(1)基于启发式规则的方法,和(2)基于分类器的方法。
基于启发式规则的方法,我们可以通过精心设计的规则来针对地识别和剔除低质量的文本数据。然而,不同类型的文本数据往往需要设计不同的清洗规则。例如,在处理Reddit 数据时,可以通过过滤点赞数过少的帖子来剔除低质量内容;而在处理代码语料时,可以过滤掉非代码相关格式的数据。
基于语种的过滤,为了训练特定目标语言为主导的大语言模型,通常要过滤掉其他语言的文本数据。需要注意的是,目前英文的高质量开放数据数量最多,已经成为了开源大语言模型的主要数据来源。例如,LLaMA-2 模型主要以英文数据为主,占比为 89.70%。因此,即使是训练非英文主导的大语言模型时(如中英双语大模型),不仅要保留特定目标语言数据,还需要同时保留英文高质量数据。在训练中英文为主要语言的 YuLan 模型时,针对网页数据使用了语言识别器过滤非中英文数据。但是对于多语的维基百科数据,由于其含有丰富的多语资源,并且数量规模相对较小,可以直接将这些数据添加至模型的训练数据中。
基于简单统计指标的过滤,为了识别高质量的文本数据,可以使用语料中标点符号分布、符号与单词比率、句子长度等特征来衡量文本质量,并过滤低质量数据。除了这些统计特征以外,也可以利用困惑度(Perplexity)等文本生成的评估指标来检测和删除表达不自然的句子。
基于关键词的过滤,在收集到的预训练语料中,可能会存在着大量的重复文本模式,诸如常见的 HTML 标签、超链接以及各种模板等。进一步,这些语料中还可能包含了一些具有攻击性、冒犯性的不良信息。为了应对这些问题,针对不同的语料来源以及应用场景,我们可以制定精准的清洗规则,结合相应的关键词集合,对文本进行扫描过滤,从而有效地识别和删除其中的噪声或无用元素。
基于分类器的方法,除了利用上述启发式的规则,我们也可以训练用于判别数据质量的文本分类器,进行预训练语料的清洗。具体来说,可以选取部分代表性的数据进行质量标注,以此训练出一个精准的文本质量分类器。在选取样本时,可以将维基百科等高质量数据作为正样本,同时从网页中筛选出含有不良内容或低质量数据的样本作为负样本。利用这个训练好的文本分类器,我们能够精准地识别和过滤低质量数据,从而显著提升整个语料库的质量。文本过滤的粒度可以是文档级别也可以是句子级别。需要注意的是,基于分类器的方法也可能无意中删除一些低资源但高质量的文本,如文言文数据等,数据清洗人员需要意识到这种情况,并且建立合理的数据召回与保留机制。为了减少数据的误筛,可以使用多个分类器进行联合过滤或召回,从而来实现对低质量文本的高可信过滤。此外,也可以针对不同的评估维度训练不同的分类器,并采用类似集成的方式对于语料进行全面的过滤。
目前常用来实现分类器的方法包括轻量级模型(如 FastText 等)、可微调的预训练语言模型(如 BERT、BART 或者 LLaMA 等)以及闭源大语言模型 API(如GPT-4、Claude 3)。这三个方法各自具有不同的优缺点:轻量级模型效率较高,但是分类的准确率和精度可能受限于模型能力;预训练语言模型可以针对性微调,但是分类性能的通用性和泛化性仍然有一定的限制;闭源大语言模型的能力较强,但是无法灵活针对任务进行适配,而且用于预训练数据清洗需要花费较高的成本。对于后两种方法来说,除了简单地进行数据过滤,还可以针对性进行数据的改写,从而使得一些整体质量还不错、但存在局部数据问题的文本仍然可以被保留下来使用。
值得一提的,在进行数据清洗时,过滤效率也是我们需要考虑的因素之一。例如,基于启发式的方法,其规则设计得相对简洁,因此能够迅速过滤 10M 乃至100M 级别的庞大文档集。然而,对于基于分类器的方法而言,虽然它们在评估文本质量方面能够展现出更高的精确度,但是这些方法也需要消耗更多的计算资源。为了平衡效率与准确性,可以针对具体数据集合进行清洗策略的灵活组合。例如,可以首先利用启发式规则进行初步筛选,以快速排除不符合要求的文档,随后再采用分类器方法进一步精细过滤,确保最终筛选出的语料具有较好的文本质量。在这一过程中,还可以同时应用多种分类器,可以先使用轻量级分类器进行数据过滤,进而使用更为有效但是资源消耗更高的分类器在粗滤后的数据上再次进行选择。
除了去除低质量内容,收集到的数据还可能包括有毒内容或隐私信息,需要进一步进行更为细致的过滤和处理。与质量过滤类似,不同类型的数据内容往往需要采用特定的过滤规则。
过滤有毒内容. 为了精确过滤含有有毒内容的文本,可以采用基于分类器的过滤方法。Jigsaw 评论数据集提供了用于训练毒性分类器的数据。该数据集收集了近 160K 条论坛评论数据,每条评论都经过细致的标注,包括“有毒”、“严重有毒”、“有威胁”、“侮辱性”、“暴力”以及“身份仇恨”等六个类别。利用这一数据集进行训练,可以构建出高效的毒性文本分类器。通过设置合理的阈值,训练完成的分类器将能够有效识别并过滤掉含有有毒内容的信息。在进行分类阈值设置时,需要在精确度和召回率之间寻求平衡,避免过多或者过少去除候选数据。Dolma 的技术报告指出,使用高阈值时去除的数据会过少,语料中未过滤掉的有毒内容会导致模型在下游任务上的性能下降;而低阈值则会过滤更多的有毒内容,但同时也会造成大量数据的浪费。考虑到后续的预处理操作(如质量筛选、去重等)同样能够有效剔除有害内容,Dolma 选择为分类器设定了一个相对较高的阈值(0.4),从而保留更多的候选数据。最终,Dolma 在这一阶段仅过滤了 Common Crawl 中 30% 左右的数据。
过滤隐私内容. 预训练文本数据大多来自互联网,其中可能包括用户生成 的敏感信息或可识别的个人信息(Personally Identifiable Information, PII),如姓名、地址和电话号码等。这些信息如果不加处理,将增加隐私泄露的潜在风险。例如,在 2023 年 11 月有用户发现,反复要求 ChatGPT 重复某个单词可能会使其无意间泄露训练数据中的个人隐私信息,这个漏洞现在已经修复。因此,在预处理阶段,需要去除这些可识别的个人信息。一种直接且有效的方法是使用启发式方法,如关键字识别,来检测和删除这些私人信息 [99]。Dolma 采用了基于规则的方法来过滤数据集中的隐私内容,主要标注了三类敏感信息:邮箱地址、IP 地址以及电话号码。在文本收集过程中,一旦检测到这些隐私信息,Dolma 会根据其出现的频率采取不同的处理策略。具体来说,如果某个文档中的隐私信息少于五条,Dolma 会使用特定的词元(如“|||EMAIL_ADDRESS|||”、“|||PHONE_NUMBER|||”和“|||IP_ADDRESS|||”)来替换这些信息,以保护用户的隐私。然而,如果文档中的隐私信息达到六条或更多,Dolma 会选择直接删除整个文档。这是因为当文档中频繁出现隐私信息时,很可能还隐藏着其他未标注的敏感内容。
对预训练数据进行去重处理是一个重要步骤。由于大语言模型具有较强的数据拟合与记忆能力,很容易习得训练数据中的重复模式,可能导致对于这些模式的过度学习。研究工作发现,预训练语料中出现的重复低质量数据可能诱导模型在生成时频繁输出类似数据,进而影响模型的性能。此外,这些数据也可能导致训练过程的不稳定(训练损失震荡),可能导致训练过程崩溃。此外,为了避免数据集污染问题,还需要从预训练数据集中删除在测试集中可能出现的重复或者相关文本,从而防止训练集和测试集之间的重叠。总体来说,去重算法的设计可以基于不同的计算粒度以及匹配方法。
计算粒度,去重可以在句子级别、文档级别和数据集级别等多种粒度上进行。在句子级别上,可以删除包含重复单词和短语的低质量句子,因为它们可能会在语言建模中引入重复的表达模式。在文档级别上,现有方法主要依靠单词或
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。