原文:https://zhuanlan.zhihu.com/p/641013454
本文将解读 The RefinedWeb Dataset for Falcon LLM 论文,
带着问题读论文,阅读本文你将了解以下内容:
大模型预训练数据从哪里获取?主要都是什么?
只用网上爬取的数据是否可以训练一个足够好的大模型?
大模型预训练中数据重要吗?是怎么影响模型性能的?
数据如何清洗过滤?数据清洗是如何影响模型效果的?
训练大模型时,数据是训练一个epoch好,还是多训练几个epoch好?
大模型训练数据的天花板在哪?又决定了模型的天花板在哪?
为什么模型会有Scaling law?是否和训练数据有关?
如何突破模型训练的Scaling law?
大模型预训练需要从海量的文本数据中学习到充分的知识存储在其模型参数中。预训练所用的数据可以分为两类。一类是网页数据(web data),这类数据的获取最为方便,各个数据相关的公司比如百度、谷歌等每天都会爬取大量的网页存储起来。其特点是量级非常大,比如非盈利性机构构建的CommonCrawl数据集是一个海量的、非结构化的、多语言的网页数据集。它包含了超过 8 年的网络爬虫数据集,包含原始网页数据(WARC)、元数据(WAT)和文本提取(WET),包含数百亿网页,数据量级在PB级规模,可从 Amazon S3 上免费获取。第二类称之为专有数据(curated high-quality corpora),为某一个领域、语言、行业的特有数据。比如对话、书籍、代码、技术报告、论文考试等数据。
在OpenAI的GPT3,4模型以及谷歌的PaLM系列模型训练中,大量用到了专有数据,如2TB的高质量书籍数据(Books – 2TB)和社交媒体对话数据(Social media conversations)等。这些专业数据是不对公众开放的,就拿高质量的book书籍数据来说,在网上能直接获取到数据来自The pile中的Book3,量级也才85GB左右,和这些巨头所用数据量级相差数十倍。因此现在有一种普遍观点认为“GPT、PaLM等模型的成功很大程度源自于其他模型难以企及的大量的、高质量的专有数据”。比如LLaMA论文中就提到,自己所用的高质量数据只有177GB所以在MMLU等知识性推理任务上和PaLM相差了十几个点(:如果能给LLaMA更多更好的数据,LLaMA说我还能更强)。
但事实真的如此么?我们是否能仅用web data通过更好的清洗过滤策略就能训练出一个强大的模型呢?来自阿联酋阿布扎比技术创新研究所(TII)的团队就这一问题展开了研究,论文题目为The RefinedWeb Dataset for Falcon LLM: Outperforming Curated Corpora with Web Data, and Web Data Only。下面是论文的解读以及笔者自己的一些思考。
动机
为啥作者要执着证明网页数据好于专有数据呢?作者有以下三大理由:
• 网页数据的量级比公开数据大的多,仅用专有数据模型模型训练不到最佳效果:GPT3 论文中说自己模型参数是175B,使用了大约300B的token数量进行模型训练,但根据scaling law我们得知,训练175B的模型,想要获得最有效果数据量应该是3500B tokens,这几乎是现有最大训练数据库的两倍,是现有公开训练数据的10倍。
• 专有数据处理起来很麻烦:网页数据有固定的格式,我们可以根据html上面的标签进行处理,而专有数据因为来源很杂,格式不统一等原因,甚至需要一份数据,一种处理方式很费时间。
• 大部分专有数据其实在网页数据中也能找到:比如书籍数据,也可能在某些盗版书网站上就有网页版本的。
所有作者认为要想模型训练的大、耗费的人力少就不得不重新将网页数据精细化利用起来。
数据规模
先看结论
• 仅仅用CommonCrawl的网页数据中构建训练数据,训练了了Falcon-40B模型,并取得了不错的效果(huggingcase的大模型开源大模型排行榜OpenLLM Leaderboard上排名第一,但实测应该是不如LLaMA-65B的)。
• 作者通过自己的过滤清洗策略从CommonCrawl上清理出来大约5TB的数据,并公开了其中大约600G的数据。
• 作者证明了仅用web数据如果经过恰当的清洗和过滤,可以获得超过使用了专有数据模型的效果。
The pile是一个高质量数据集,作者在构建的RefinedWeb数据集上训练模型超过了在The pile数据集上训练的效果
网页数据处理方法
CommonCrawl数据特点
• 很脏:有大量的情色、暴力、诈骗以及机器生成的垃圾信息。
• 很大:百亿级别网页,PB级别数据量,因此一些深度学习的处理方法可能太慢了,更多的还是需要先用启发式规则过滤下。
• 有原始HTML网页格式WARC(raw HTML response) ,和仅包含内容文本的WET (preprocessed to only include plain text)两种格式。虽然WET类似进行了文本提取,但WET格式没有将文本清洗干净,很多广告信息,导航信息等也当成内容文本存储起来的。为了避免这些信息影响模型效果,作者使用WARC格式的数据重新进行清洗。
URL过滤
首先需要从CommonCrawl中过滤出我们需要的网站再进行内容提取。
• 作者整理了一个4.6 Million的URL黑名单,黑名单中的域名过滤掉,其中大部分是色情网站。
• 作者也训练了一个根据关键词过滤URL的工具,但发现很多嘻哈文化网站、医疗网站等被过滤了,怕可能引起bias,所以设计了一套比较复杂的规则,来尽可能的减少false positive误判样本。
• 为了证明单纯的网页数据也能有很好的训练效果,作者过滤了wikipeida、arxiv等高质量网站。
文本内容提取
需要特别注意,网页内容仅仅保留正文!URL、导航栏文本、标题、脚注、广告文本等和正文无关的信息要去除干净。作者使用
trafilatura
[1]
库用于从网页中提取正文。
文本处理Pipeline
•
目标语言识别
:将你需要的目标语言网页保留,这时候用到的模型是比较快的n-gram模型,比如fastTexts。
•
规则过滤
:将有一些包含禁用词的网页,标点符号过多的行去掉。这个要非常注意,如果过滤关键词范围很大的话,模型可能会有bias,举个栗子:如果将情色相关作为关键词进行过滤,那么很多医疗相关网页也会被过滤掉。
•
通过机器学习方法过滤出高质量语料库
:比如将wikipedia链接到的网页(注意是链接到的,而不仅仅是wikipedia网页)作为正样本,随机采样作为负样本训练模型,将模型打分高于一定阈值的网页保留。不过这种机器学习算法也可能引入额外的bais,也要尽量少的采用。因此在情色内容过滤这块,作者仅使用URL进行过滤。
•
去重(Deduplication)
:去除重复的段落和文档。去重有两种方案一种是绝对匹配(exact match)去重,就是完全一致的才叫重复,直接字符串匹配就好。一种是近似匹配(Approximate matches,也叫fuzzy duplicates)去重,就是将文档进行嵌入,通过哈希的方法进行去重,比如局部敏感哈希MinHash、SimHash等方法去重。
整体Pipeline
语言识别 Language identification
使用fastText 语言分类器 CCNet对文档进行分类,这个模型是一个训练好的n-gram模型,根据wikipedia训练的,支持176种语言。可以按照所需比如仅将英文页面拿出来。作者进行了这一步后52%的非英文网页被过滤掉了。
过滤 filtering
• 重复移除(Repetition removal):将文档中有太长的行,段落,或者n-gram repetitions的文章移除,这些很可能是机器生成的。
• 文档级别过滤(Document-wise filtering):如果文档的长度过长,或者某些单词在文档中的占比过高,那么这些文章也有可能是机器或者模板生成。
• 行级别过滤(Line-wise filtering):比如一些社交媒体正文中有点赞数量,导航跳转按钮之类的在正文里面的需要过滤的东西。并且如果一个文档中5%的行都被过滤了之后,那么整个文档也不要了。
去重 Deduplication
• 去重非常重要,如果去重做的不好,模型在这样的语料上进行学习后就会更倾向于记忆,导致泛化能力差。
•
近似去重(fuzzy deduplication
):提取文档的骨架,比如可以是词袋模型n-gram模型,主题模型等进行文档嵌入,然后使用MinHash进行去重。因为文档实在是太多了,过滤后也有十亿级别的文档,MinHash也不太容易去重,作者采用分20个桶,先计算5-gram,将相似的文档放到一个桶里面,然后桶内计算hash相似度进行去重,每个文档里面哈希位数是450,将哈希位数overlap过高的文档进行去重。作者也表示The pile数据集之所以效果表现不好,很可能是哈希位数太少了只有10位,并且过滤设定条件不严刚,很多重复文章并没有过滤掉,从而影响了在其上训练模型的效果。
•
绝对匹配去重(Exact deduplication)
:进行句子级别绝对匹配去重,如果连续50个tokens和之前的文档有重复,那么移除掉。同时作者也验证了,直接移除还是在loss上进行mask,不计算重复部分的损失两种方案那种更好,但zero-shot泛化能力方面并没有明显的差别。
•
URL去重
:作者表示Web页面实在太大了,直接进行上述的去重还是有些费力,提出的方案是将网页数据切成100份,然后100份内部各自去重,然后每一份也能共享其他部分发现的重复的部分,从而加快去重速度。此外commoncrawl中还有大量网页是转存其他网页的,因此每处理一个URL就要将其他转储的页面去掉。
清洗步骤,灰色的每一步中去除页面比例,因为语言不是英语去除了50.66%的页面,因为质量不达标去处了24%的页面,因为重复去掉了12%的页面。
处理结果
实验&结论
作者主要比的是大模型zero-shot泛化能力。
• 可以看到OSCAR-22.01数据集上训练的模型,zero-shot能力显著低于其他模型,因为其没有去重。
• 作者做的RefinedWeb数据集则显著好于之前的网页数据集C4(T5的训练数据),以及The Pile(Bloom的训练数据),说明仅仅用web数据好好清洗,也能战胜专有数据。其中The pile数据集作者在上文中也提到,其虽然有过滤和去重,但门槛太低了,导致很多重复的内容其实并没有很好的被过滤。
• 去重非常影响最终的模型效果,并且去重比例越高,最后的效果越好(Deduplication delivers a steady boost across all datasets, and removal rates are better correlated with changes in performance)。
• 如果网页提取文本哪一步就没提取干净,最后的结果也不会很好。
• 如果网页数据训练多个Epoch,会减弱模型的泛化能力,训练的epoch越多,模型泛化能力越差。(但其他研究表明,专有数据比如code和arxiv等数据训练多个epoch反而会提升模型的推理能力)并且模型超过100B后,模型会对训练数据中的重复,以及训练多个epoch非常敏感,如果数据质量不高,则会非常影响模型的泛化能力。
• 在高质量专有数据集上训练多个epoch,并不比在web数据上充分训练一个epoch的效果好。
实验结果
不同数据集训练模型的比较
训练多个epoch会降低泛化能力
除过web数据我们还有那些常见的非Web高质量数据呢?
非Web数据
高质量专有数据 The Pile
网络数据
• Pile-CC:使用 jusText提取 Common Crawl。过滤实现使用针对 OpenWebText2 数据集进行训练的 fasttext 分类器。仅处理可用 Common Crawl 数据的一小部分;我们将 2013 年至 2020 年的 url 列表分成 3679 个块,然后处理 22 个随机块。
• OpenWebText2⭐️:是 Pile 提出的信数据集,从所有截至2020年4月的 Reddit 提交中提取了URL及其相关的元数据。URL进行了去重,每个唯一的URL都具有相关提交元数据列表和聚合分数。聚合分数小于 3 的 URL 被删除。然后使用 Newspaper 对链接进行了爬取和处理。使用 DataSketch 库的内存 MinHashLSH 在文档级别执行了去重操作。生成了过滤后和原始版本,原始版本仅通过URL进行了去重。过滤版本包含了17103059个文档的65。86GB未压缩文本。原始版本更大,包含了69547149个文档的193.89GB未压缩文本。
• Stack Exchange⭐️:来自问答网站 stackexchange,每个问题只保留回答点赞数大于三的前三个回答,并组织成 QA 问答对的形式,最终得到 365 个类别下的15622475篇文档。
• Wikipedia (English): 英文 wiki 数据集,使用TensorFlow数据集中的wikipedia/20200301.en数据集。在每篇文章的正文前加上标题,中间用两个换行符隔开。
学术数据
• PubMed Central⭐️:PubMed Central(PMC)是美国国家生物技术信息中心(NCBI)运营的生物医学文章在线存储库PubMed的子集,为近500万篇出版物提供开放的全文访问。
• ArXiv⭐️:通过arXiv的S3批量源文件访问下载了截至2020年7月的所有论文的TEX源代码,并使用pandoc 1.19.2.4将这些源文件转换为Markdown。在转换过程中出现错误的论文被丢弃。这一过程产生了总共1,264,405篇论文。
• FreeLaw⭐️: 法院意见数据。
• USPTO Backgrounds⭐️: 专利相关的数据集。
• PubMed Abstracts⭐️: 生物医学领域的标题和摘要。
• PhilPapers⭐️: 哲学相关的论文。
• NIH Grand ABstracts: ExPORTER⭐️: 美国国立卫生研究院(NIH)经费数据库。
书籍数据
• Books3:Books3是一个图书数据集,包含有小说和非小说,相比于 BookCorpus2 大了一个数量级。
• Project Gutenberg: 西方古典文学的数据集,风格与线代文学很不同。
• BookCorpus2⭐️: 是 BookCorpus 的扩充,有 17868 本书,由于 BookCorpus2 的都是没出版的,因此不会跟 Books3 和 Project Gutenberg 的重叠。
对话数据
• OpenSubtitles: 电视和电影的英文字幕。
• Ubuntu IRC⭐️: Ubuntu IRC 数据集是从 Freenode IRC 聊天服务器上所有 Ubuntu 相关频道的公开聊天记录中派生出来的。聊天记录数据6提供了一个建模实时人类交互的机会,这种交互具有其他社交媒体模式通常不具备的自发性。
• EuroParl: 一个多语言平行语料库,最初是为了机器翻译而引入的。
• YouTube Subtitles⭐️: YouTube字幕数据集是从YouTube上人工生成的封闭字幕中收集的文本平行语料库。除了提供多语言数据外,YouTube字幕还是教育内容、流行文化和自然对话的来源。
• Hacker News⭐️: 用户提交的文章被定义为“满足一个人的知识好奇心的任何事物”,但提交的文章往往集中在计算机科学和创业主题上。用户可以评论提交的故事,导致评论树讨论和批评提交的故事。我们会抓取、解析和包含这些评论树,因为作者相信它们提供了高质量的讨论和辩论的细分主题。
其它数据
代码数据 The stack
下载链接:https://huggingface.co/datasets/bigcode/the-stack-dedup
跨语言数据集 ROOTS
下载 URL: https://huggingface.co/bigscience-data 清洗 URL: https://github.com/bigscience-workshop/data-preparation
• the Responsible Open-science Open-collaboration Text Sources (ROOTS)
一个1.6TB的数据集跨越了59种语言(46种自然语言,13种编程语言),用于训练拥有1760亿个参数的BigScience大型公开科学多语言开放访问(BLOOM)语言模型。(BigScience Workshop, 2022) 62%的文本来自社区选择和记录的语言数据源列表,另外38%的文本来自经过预处理的网络爬取数据集OSCAR, 并通过母语人士的帮助进行了过滤
62% 通过社区收集得到 主要包括三个来源:
三部分得到后要做一个融合和去重。后面还接了一些手工的提升方法以提高数据集的质量。
对话数据
The pile中有,尚未发现大规模开放数据。