当前位置:   article > 正文

一日一技:助力大语言模型训练,无压力爬取六百亿网页

大模型 自动爬虫

这是「进击的Coder」的第 832 篇技术分享

作者:kingname

来源:未闻 Code

阅读本文大概需要 8 分钟。

ChatGPT 一炮而红,让国内很多公司开始做大语言模型。然后他们很快就遇到了第一个问题,训练数据怎么来。有些公司去买数据,有些公司招聘爬虫工程师。但如果现在才开发爬虫,那恐怕已经来不及了。

即使爬虫工程师非常厉害,可以破解任意反爬虫机制,可以让爬虫跑满网络带宽,可是要训练出 GPT-3 这种规模的大语言模型,这个数据并不是一天两天就能爬完的。并且,有很多老网站的数据,早就被删除了,爬虫想爬也爬不到。

如果你看了今天这篇文章,那么恭喜你,你即将知道如何快速获取 600 亿网站的数据。从 2008 年开始爬取,这些网站数据横跨 40 多种语言。截止我写这篇文章的时候,最新的数据积累到了 2023 年 2 月。只要是 Google 现在或者曾经搜索得到的网站,你在这里都能找到。唯一制约你的,就是你的硬盘大小——仅仅 2023 年 1 月和 2 月的网页加到一起,就有 400TB。而且所有这些数据,完全免费!不需要注册登录!不需要梯子!不需要下载任何额外软件!只需要浏览器或者 Linux 中的 wget 命令就能直接下载。

这个项目叫做 Common Crawl[1],官网长这样:

d8f2b4ff1af7b5c433b815b673e89b7d.png

获取数据的方法,网站已经写到了 Get Started[2] 中。我们来看看这个页面的第一段话:

67a10ad1fc5aa7f5b70782bd3923e299.png

The Common Crawl corpus contains petabytes of data collected since 2008. It contains raw web page data, extracted metadata and text extractions.

Common Crawl语料库包含了上PB的数据。这些数据从2008年开始收集。他包含了网页的原始页面HTML、提取出来的元信息和纯文本。

Common Crawl 的数据保存在亚马逊 S3 上面,我们可以直接通过 HTTP 来下载。当然如果你硬盘够大,你可以写代码来批量下载全部数据,这个时候可以使用 Python 的 boto3 模块访问 S3.

我用 HTTP 下载的方式,来给大家演示一下这个数据怎么下载和使用。我们在上面提到的 Get Started 页面,找到你想下载数据的时间点。例如我想下载 2023 年 1 月和 2 月的网站数据,如下图所示:

e3dd6914bc196ad6b5f281645262a43f.png

点击红框中的链接,进入一个新的页面。如下图所示:

ada0f9c7d083f2bb6abbbba8b2668dde.png

从这个页面上,我们可以看到这个数据集的简介。2023 年 1 月到 2 月的数据,从 1 月 26 号开始抓取,到 2 月 9 号截止。包含 315 亿个页面。原始数据不压缩的情况下有 400TB。这些网站来自 3300 万个域名,130 亿个之前没有抓过的 URL。

在这个页面,我们可以看到一个表格,这里面显示了不同的数据类型:

f986588a1efcfad087f17cd3eb13813b.png

其中WARC files文件,记录的是网页的原始 HTML 代码。WET files文件,记录的是简单处理后,提取出来的网页所有纯文本。

大家不要被最后一列的数据大小吓到了。你不需要一次性下载这么大的数据。

以 WARC 文件为例,点击File List中的链接,会自动下载一个很小的压缩文件warc.paths.gz。这个文件需要使用 gunzip 命令来解压缩。这个命令理论上在 macOS 和 Linux 中都是自带的。使用如下命令解压缩:

gunzip warc.paths.gz

解压完成以后,会生成一个warc.paths的文件。这个文件有 9.2MB,也非常的小。我们可以使用 vim 或者 less 命令查看里面的内容,如下图所示:

73ec92ea0e368fe9974d84c4c02b35fd.png

这里面列出来的是不同时间段的文件。我们可以依次下载每个文件,分别解压缩。这样分文件,是 Common Crawl 为了方便大家下载而做的。否则一次性下载几十 TB,谁受得了。

我们随便找一个地址,例如crawl-data/CC-MAIN-2023-06/segments/1674764494826.88/warc/CC-MAIN-20230126210844-20230127000844-00001.warc.gz。把这个地址前面拼接上域名https://data.commoncrawl.org/,因此完整的 URL 应该是:https://data.commoncrawl.org/crawl-data/CC-MAIN-2023-06/segments/1674764494826.88/warc/CC-MAIN-20230126210844-20230127000844-00001.warc.gz。这就是能够下载这个时间段数据的 URL 了。这个压缩文件有好几个 G,因此不建议直接在浏览器上面打开这个 URL。我们可以使用 wget 命令来下载。当然你也可以用迅雷来下。

40baffa01a92c0b9497dc5f5a1c4770d.png

下载完成以后,会得到一个CC-MAIN-20230126210844-20230127000844-00001.warc.gz文件,继续使用gunzip命令解压缩,得到CC-MAIN-20230126210844-20230127000844-00001.warc文件。这个文件本质上是一个文本文件,可以使用 vim 或者 less 命令查看:

a49e164cab31323c5da224eaa7ff57d3.png

这里面记录的是网站的元信息和 HTML。数据是以 WARC 格式储存的。关于这个格式,在上面提到的 Get Started 页面可以看到具体的说明:

7333bc819884f3b2b178a3deb79b2de9.png

你可以直接写一个程序来解析,或者安装一些现成的程序来解析,并转成 JSON 或者其他格式。Ubuntu 下面可以使用 apt 命令安装 warcat 来解析,这里就不多说了。如果不知道怎么解析也可以问一问 ChatGPT。

我们再来看一下WET文件,打开以后如下图所示:

2cc5a7d43097cde5a52991b47e8162f7.png

算是一个比较粗糙的正文提取方法,仅仅是把页面上的所有文本全部提取出来了而已。

如果你想让新闻类、博客类文章的提取效果更好,那么可以试一试把这个 WARC 格式里面的 HTML 提取出来,然后使用我的 GNE[3] 来提取正文,提取效果就会好非常多:

a53fe9600b8eda1b6f0f7b1a0a5c2b68.png

总结

众所周知,中文互联网是封闭的互联网。但不要因此就觉得现在已经没有良心网站了。Common Crawl 就属于这样的良心网站,完全免费,不需要注册登录,没有任何限制,不需要安装任何软件,直接获取 15 年来绝大部分网站的原始数据。

希望这些数据,能让我们自己的大模型更进一步。

[1]

Common Crawl: https://commoncrawl.org/

[2]

Get Started: https://commoncrawl.org/the-data/get-started/

[3]

GNE: https://github.com/GeneralNewsExtractor/GeneralNewsExtractor

9403ef16ec0b8c719fd148b7b7c2365d.png

End

崔庆才的新书《Python3网络爬虫开发实战(第二版)》已经正式上市了!书中详细介绍了零基础用 Python 开发爬虫的各方面知识,同时相比第一版新增了 JavaScript 逆向、Android 逆向、异步爬虫、深度学习、Kubernetes 相关内容,‍同时本书已经获得 Python 之父 Guido 的推荐,目前本书正在七折促销中!

内容介绍:《Python3网络爬虫开发实战(第二版)》内容介绍

6d64dd1ac1bfadc1b029234c7519e050.jpeg

扫码购买

0e4183a0ea368c5c96eff93b5c136604.png

好文和朋友一起看~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/101648
推荐阅读
相关标签
  

闽ICP备14008679号