大模型预训练需要从海量的文本数据中学习到充分的知识存储在其模型参数中。预训练所用的数据可以分为两类。一类是网页数据(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。下面是论文的解读以及笔者自己的一些思考。
①人工智能/大模型学习路线
②AI产品经理入门指南
③大模型方向必读书籍PDF版
④超详细海量大模型实战项目
⑤LLM大模型系统学习教程
⑥640套-AI大模型报告合集
⑦从0-1入门大模型教程视频
为啥作者要执着证明网页数据好于专有数据呢?作者有以下三大理由:
- • 网页数据的量级比公开数据大的多,仅用专有数据模型模型训练不到最佳效果: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,将相似的文档放到一个桶里面