LLM 数据处理方法
GPT-3数据处理方法
使用数据集:Common Crawl、WebText2、Books1、Books2以及Wikipedia的混合。
处理方法:
首先基于同更高质量数据集WebText(reddit karmma>3)的相似性对下载的Common Crawl数据集进行过滤。具体的操作是训练一个二分类的分类器,将WebText作为正样本,Common Crawl作为负样本,进行训练。然后用训练好的分类器重新对Common Crawl进行重采样(只要被预测为高质量的数据)。然后再用多种高质量数据集的并集作为正样本,未过滤的Common Crawl作为负样本进行训练,得到的分类器对Common Crawl进行打分,只保留$np.random.pareto(\alpha)>1−document_score$的内容。
利用Spark中的MinHashLSH算法(集合之间的相似度)进行了文章级别的去重操作。
增加了一些新的高质量数据集。除了筛选过的Common Crawl,还增加了WebText2、Books1、Books2以及Wikipedia数据集。
各数据集的采样比例如下:
减少数据污染[GPT-3,P29]:在大量数据上进行训练的一个问题是模型可能会在预训练中看到测试集中的样本,因此要尽量减少训练集和测试集的重叠。
PaLM数据处理方法
使用数据集:webpages,books,Wikipedia,news articles,source code,social media conversations的混合
处理方法:
跟GLaM方法中一样,对所有数据都需要先进行过滤,过滤的指标依然是同现有高质量数据集的相似度,然后根据分数的高低进行采样,也就是说并不是所有低质量数据都被过滤掉,只是占比很少。
相比GPT-3,训练数据添加了github上爬取的代码,只选用了24种主流语言的代码,共196G数据。
基于文件之间的Levenshtein distance进行了去重。
各数据集的采样比例如下:
数据污染依然是一个处理的重点[PaLM,P36],许多工作都发现了训练集和测试集之间严重的数据重叠。之前的研究仅仅关注测试数据和训练数据之间高阶N-Gram(例如,13-Gram)的出现情况,并将所有出现重叠的样本认定为是污染。然而,许多测试是通过从开放的网络中获取一些上下文,然后要求注释员为该上下文生成一个新的问题/答案(或要求注释员回答自动生成的问题)来构建的。由于这些任务是在评估时提供的上下文,即使模型之前已经针对语言建模目标训练了上下文,也不会在评估时给它带来优势,因此之前的研究过于粗暴了。因此作者将29个任务分成了四类,分别进行了研究。
GLaM数据处理方法
使用数据集:webpages,books,news,conversations,Wikipedia,forums
处理方法:
由于GLaM使用的数据集中webpages占据绝大多数,因此对网页质量进行过滤就是一个关键步骤。作者跟GPT-3中使用的方法一样,也构建了自己的文本质量分类器,但是方法不尽相同。作者使用的是基于特征哈希的线性分类器,对精选文本和其他网页进行分类。训练好之后使用这个分类器对网页的质量进行打分,接着通过使用帕累托分布来根据它们的分数采样网页。基于这种方式过滤的样本允许存在一些较低质量的网页,以防止分类器的系统性偏差。
各数据集的采样比例如下:
一如之前两项工作,数据污染的问题依旧要进行处理。
Gopher数据处理方法
使用数据集:MassiveWeb,C4,Wikipedia,books,news,code
处理方法:
从上图中我们得知,网页数据的过滤要经过全部的阶段,而其他的只需要经过内容过滤,文本去重,测试集过滤即可。
内容过滤。这一步骤所有数据都要进行,使用google的safesearch过滤器而不是手动设置单词列表进行过滤。
文本提取。这一步骤只有网页数据需要进行,从HTML标签中提取文本。
文本质量过滤。这一步骤只有网页数据需要进行。作者只采用了简单的启发式方法来过滤掉低质量的文本,没有使用基于高质量文本训练的分类器来过滤掉低质量文本,这是因为这种方法可能会无意中对某一特定人群产生偏见,或者忽略某些方言或社会用语。在保持方言覆盖和避免偏见的同时,对文本进行质量过滤是未来研究的重要方向。具体来说,作者用了一系列的简单的启发式过滤器:删除了所有单词量不在50-100000的文档,删除了平均单词长度超出3-10范围的文档,删除了哈希符号或者省略号的符号单词比大于0.1的文档,删除了90%的行是以bullet point开头的文档,删除了超过30%的行以省略号结尾的文档,删除了包含“stop word”的文档,删除了没有至少包含the, be, to, of, and, that, have, with中两个的文档。
重复文本删除。这一步骤只有网页数据需要进行,旨在去除有大量单词重复的文档。具体手段是删除具有大量重复行重复段落的文本以及过高n-grams比例的文档。
文档去重。这一步骤只有网页数据需要进行。网络上有太多重复的内容,同一篇文章可能会被数十乃至数百个网站转载,这样就造成了大量的冗余,作者借助n-grams和MinHash实现了这个操作。
测试集过滤。这一步骤所有数据都要进行。如之前工作一样,数据污染是必须要考虑的,作者使用13-gram Jaccard相似度指标,借此删除了测试数据中的泄露。
各数据集的采样比例如下:
BLOOM数据处理方法
使用数据集:ROOTS语料库(包含了498个Hugging Face数据集)
处理方法:github.com/bigscience-workshop/data-preparation
个人负责部分
- 过滤出特定语言的语料。
- 如果我们只在医学相关数据上做微调,那么使用的医学数据大多只有中英两种语言,只需要简单使用langid库筛除小概率存在的其他语言即可。
- 如果需要摒弃现有预训练模型从头开始训练,那么首先要查找大量web数据的html标签,确定这些web数据的语言,这样可以减少很大一部分工作量。接下来的工作有两种方法,首先考虑直接使用langid库筛除中英文外的语料,其次考虑训练一个三分类模型——中、英、其他,使用模型对语料分类。
- 使用模型过滤高低质量的文本(暂缓)。
- 使用启发式规则过滤高低质量的文本。BLOOM中提出了很多指标:character repetition,word repetition,ratios of special characters,ratios of closed class words,ratios of flagged words,number of words,perplexity 等等。这些指标的计算被集成在了其github项目中,直接看代码即可。