龙空技术网

LLMs 训练文本质量工程(二)CCNet 算法

机器学习搬运工 148

前言:

此刻你们对“net算法笔试题”可能比较关注,兄弟们都想要剖析一些“net算法笔试题”的相关文章。那么小编也在网络上网罗了一些对于“net算法笔试题””的相关知识,希望咱们能喜欢,同学们快快来学习一下吧!

CCNet 这篇论文并没有构建一个完全不同的深度网络架构,而是一个处理common crawl 数据集而提出来的一个并行流水线架构,本文研读 《CCNet:Extracting High Quality Monolingual Datasets from Web Crawl Data》这篇论文,应该是目前全网较为全面输出当前这篇论文的解读,先来看看CCNet 流程结构图:

CCNet 流程图

首先先下载所有的 WET 文本文件,每个月爬虫文件snapshot,计算每个段落的哈希值,保存为二进制文件。然后对于每一个 WET 文本文档

a.通过二进制文件进行去重

b.识别去重后文档的语言

c.用对应语言的打分模型计算文档的 ppl 分数,越低越好

最后把文档根据语言和 ppl 的分数重新分组,写到 json 文件中

虚线的部分代表是可以并行的部分。下面具体来讲,上面流程图经过了那些较为详细步骤:

1.预处理(Preprocessing)

每一个月份(snapshot)的快照包括 20~30 TB 未压缩纯文本,对应于大约30亿个网页,例如,2019年2月的快照包含24TB的数据。对于每个 snapshot 的数据下载和处理都是独立的。对于每一个快照,会把 WET 的文本文件分组成 shard,每个 shard 大约 5 GB。对于 2019 年 2 月的数据就会分成 1600 个 shard,每份保存为一个 JSON 的文件。

2.去重(Deduplication)

对于每一个 shard,计算每一个段落的哈希值,并保存为二进制文件。这里使用的是 64-bits 的 SHA-1 数字,然后通过对于每一个 shard 的哈希值去重。对于每个 shard 来说,去重环节是独立的,所以可以并行做.

3.语言分类识别( Language identification(LID)

这一步使用FastText 的语言分类器来做分类,fastText 的语言分类器是在 Wikipedia、Tatoeba、SETimes 上面训练的,使用了 n-grams 来作为特征,使用了层级的 softmax。支持 176 种语言,我们计算最可能的语言和相应的分类器得分。如果该得分高于0.5,则将文档分类为相应的语言。否则,语言无法清楚地识别,我们将丢弃相应的页面。

4.质量筛选(LM filtering)

对于每一个语言,用一个在高质量数据上训练的 perplexity 打分器筛选好的语料。使用 KenLM 库里面的 5-gram Kneser-Ney 模型,这个库在处理大量数据时有比较好的性能。然后把每一个网页在句子层面做 tokenize,然后对于每一个自然段做一次打分,ppl 的分数越低,与目标的分布越接近,质量越高。因为 ppl 代表困惑度,如果一个自然段的困惑度打分越高,代表其行文越流畅、越有逻辑,所以就更像是好的自然段。最后每个 shard 会根据 ppl 分数分为头部、中间、尾部;质量情况为头部 > 中间 > 尾部。

文章结尾分析了一些消融实验数据,1)是需要先去重,再识别语言种类,因为英文数据集非常普遍,先去重有利于下游任务进行,2)越是在更多不同的shard上去重,效果越好,但是计算量更大;

文章第五部分,作者做了相关FastText,BERT 相关模型实验在自己清洗之后的Common Crawl 上,相比在wk 数据集上有显著的提升,以此证明这种方法清洗的数据集是有效果。

标签: #net算法笔试题