📢 转载信息
原文链接:https://machinelearningmastery.com/datasets-for-training-a-language-model/
原文作者:Adrian Tam
语言模型是一种将人类语言描述为词汇上概率分布的数学模型。要训练一个深度学习网络来模拟语言,你需要确定词汇表并学习其概率分布。你不能凭空创建模型;你需要一个数据集供模型学习。
在本文中,你将了解用于训练语言模型的数据集,以及如何从公共存储库中获取常用数据集。
让我们开始吧。
训练语言模型的数据集
照片由 Dan V 拍摄。保留部分权利。
训练语言模型的优质数据集
一个好的语言模型应该学会正确的语言用法,并且没有偏见和错误。与编程语言不同,人类语言缺乏正式的语法和句法。它们不断演变,使得不可能编目所有语言变体。因此,模型应该从数据集中学习,而不是从规则中构建。
建立一个用于语言建模的数据集是具有挑战性的。你需要一个大型、多样化的数据集来代表语言的细微差别。同时,它必须是高质量的,展示正确的语言使用。理想情况下,数据集应该经过手动编辑和清理,以去除错别字、语法错误和非语言内容(如符号或HTML标签)等噪声。
从头开始创建这样的数据集成本很高,但有几个高质量的数据集是免费提供的。常见的数据集包括:
- Common Crawl。一个庞大且持续更新的数据集,拥有超过 9.5 PB 的多样化内容。它被包括 GPT-3、Llama 和 T5 在内的领先模型所使用。然而,由于它是从网上抓取的,它包含低质量和重复内容,以及偏见和冒犯性材料。要使其有用,需要严格的清理和过滤。
- C4 (Colossal Clean Crawled Corpus)。一个从网上抓取的 750GB 数据集。与 Common Crawl 不同,这个数据集已经过预清理和过滤,更易于使用。尽管如此,仍需警惕潜在的偏见和错误。T5 模型就是在此数据集上训练的。
- Wikipedia。仅英文内容就大约有 19GB。它规模庞大但可管理。它根据维基百科的标准进行了良好策划、结构化和编辑。虽然它涵盖了广泛的常识知识并具有很高的事实准确性,但其百科全书式的风格和语调非常特定。仅凭此数据集训练可能会导致模型在该风格上出现过度拟合。
- WikiText。一个源自经过验证的优质和特色维基百科文章的数据集。它有两个版本:WikiText-2(来自数百篇文章的 200 万词)和 WikiText-103(来自 28,000 篇文章的 1 亿词)。
- BookCorpus。一个几 GB 大小的、包含长篇、内容丰富、高质量书籍文本的数据集。有助于学习连贯的叙事和长距离依赖关系。然而,它存在已知的版权问题和社会偏见。
- The Pile。一个 825GB 的精选数据集,来自多个来源,包括 BookCorpus。它混合了不同的文本类型(书籍、文章、源代码和学术论文),提供了广泛的主题覆盖,旨在实现多学科推理。然而,这种多样性导致了质量参差不齐、重复内容和不一致的写作风格。
获取数据集
你可以在网上搜索这些数据集并将其下载为压缩文件。但是,你需要了解每个数据集的格式,并编写自定义代码来读取它们。
或者,可以在 Hugging Face 存储库 https://huggingface.co/datasets 中搜索数据集。该存储库提供了一个 Python 库,允许你使用标准化格式实时下载和读取数据集。
Hugging Face 数据集存储库
让我们从 Hugging Face 下载 WikiText-2 数据集,它是适合构建语言模型的最小数据集之一:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import random
from datasets import load_dataset
dataset = load_dataset("wikitext", "wikitext-2-raw-v1")
print(f"Size of the dataset: {len(dataset)}")
# print a few samples
n = 5
while n > 0:
idx = random.randint(0, len(dataset)-1)
text = dataset[idx]["text"].strip()
if text and not text.startswith("="):
print(f"{idx}: {text}")
n -= 1
|
输出可能如下所示:
|
1
2
3
4
5
6
|
Size of the dataset: 36718
31776: The Missouri 's headwaters above Three Forks extend much farther upstream than ...
29504: Regional variants of the word Allah occur in both pagan and Christian pre @-@ ...
19866: Pokiri ( English : Rogue ) is a 2006 Indian Telugu @-@ language action film , ...
27397: The first flour mill in Minnesota was built in 1823 at Fort Snelling as a ...
10523: The music industry took note of Carey 's success . She won two awards at the ...
|
如果你还没有安装 Hugging Face datasets 库,请安装:
|
1
|
pip install datasets
|
当你第一次运行此代码时,load_dataset() 会将数据集下载到你的本地机器。请确保有足够的磁盘空间,尤其是对于大型数据集。默认情况下,数据集下载到 ~/.cache/huggingface/datasets。
所有 Hugging Face 数据集都遵循标准格式。dataset 对象是可迭代的,每一项都是一个字典。对于语言模型训练,数据集通常包含文本字符串。在此数据集中,文本存储在 "text" 键下。
上面的代码从数据集中抽取了几个元素。你将看到长度不一的纯文本字符串。
数据集后处理
在训练语言模型之前,你可能需要对数据集进行后处理以清理数据。这包括重新格式化文本(裁剪长字符串、将多个空格替换为单个空格)、移除非语言内容(HTML 标签、符号)以及移除不需要的字符(标点符号周围的额外空格)。具体的处理取决于数据集以及你希望如何向模型呈现文本。
例如,如果你正在训练一个只处理小写字母的较小的 BERT 风格模型,你可以减小词汇表大小并简化分词器。以下是一个提供后处理文本的生成函数:
|
1
2
3
4
5
6
7
|
def wikitext2_dataset():
dataset = load_dataset("wikitext", "wikitext-2-raw-v1")
for item in dataset:
text = item["text"].strip()
if not text or text.startswith("="):
continue # skip the empty lines or header lines
yield text.lower() # generate lowercase version of the text
|
创建一个好的后处理函数是一种艺术。它应该提高数据集的信噪比以帮助模型更好地学习,同时保留处理训练模型可能遇到的意外输入格式的能力。
延伸阅读
下面是一些你可能会觉得有用的资源:
- Hugging Face Datasets 库
- Hugging Face Datasets 存储库
- Common Crawl 存储库
- The Pile 数据集
- Will Orr 的 “看到一个数据集的 9 种方式:将数据集视为社会技术构件——以‘Colossal Cleaned Common Crawl’(C4)为例”
总结
在本文中,你了解了用于训练语言模型的数据集以及如何从公共存储库中获取常用数据集。这只是数据集探索的起点。考虑利用现有的库和工具来优化数据集加载速度,以免它成为训练过程中的瓶颈。
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区