语言模型是一种数学模型,将人类语言描述为其词汇的概率分布。要训练深度学习网络来建模语言,您需要识别词汇并了解其概率分布。您无法从无到有创建模型。您需要一个可供模型学习的数据集。
在本文中,您将了解用于训练语言模型的数据集以及如何从公共存储库获取通用数据集。
让我们开始吧。
用于训练语言模型的数据集
摄影: 第五天。保留一些权利。
用于训练语言模型的良好数据集
一个好的语言模型应该学习正确的语言用法,没有偏见和错误。与编程语言不同,人类语言缺乏正式的语法和句法。它们不断发展,使得不可能对所有语言变体进行分类。因此,模型应该根据数据集进行训练,而不是根据规则来制作。
为语言建模建立数据集具有挑战性。您需要一个大型、多样化的数据集来代表该语言的细微差别。同时,它必须是高质量的,呈现正确的语言用法。理想情况下,应该手动编辑和清理数据集,以消除打字错误、语法错误和非语言内容(例如符号或 HTML 标签)等噪音。
从头开始创建这样的数据集成本高昂,但有几个高质量的数据集是免费提供的。常见的数据集包括:
- 普通爬行。超过 9.5 PB 且内容多样且持续更新的海量数据集。它被 GPT-3、Llama 和 T5 等领先模型所使用。然而,由于它来自网络,因此包含低质量和重复的内容,以及偏见和攻击性材料。需要严格的清洁和过滤才能使其发挥作用。
- C4(巨大的干净爬行语料库)。从网络上抓取的 750GB 数据集。与 Common Crawl 不同,该数据集经过预先清理和过滤,使其更易于使用。尽管如此,还是要预料到潜在的偏见和错误。 T5 模型是在此数据集上进行训练的。
- 维基百科。仅英文内容就有19GB左右。它很大但易于管理。它按照维基百科标准精心策划、结构化和编辑。虽然它涵盖了广泛的常识性知识和高度的事实准确性,但其百科全书式的风格和语气却非常具体。仅在此数据集上进行训练可能会导致模型过度拟合这种风格。
- 维基文本。源自经过验证的优质且特色维基百科文章的数据集。存在两个版本:WikiText-2(来自数百篇文章的 200 万字)和 WikiText-103(来自 28,000 篇文章的 1 亿字)。
- 图书语料库。几个 GB 的长篇、内容丰富、高质量的书籍文本数据集。对于学习连贯的故事讲述和长期依赖关系很有用。然而,它存在已知的版权问题和社会偏见。
- 桩。来自多个来源(包括 BookCorpus)的 825GB 精选数据集。它混合了不同的文本类型(书籍、文章、源代码和学术论文),提供了专为多学科推理而设计的广泛主题覆盖。然而,这种多样性导致质量参差不齐、内容重复和写作风格不一致。
获取数据集
您可以在线搜索这些数据集并将它们下载为压缩文件。但是,您需要了解每个数据集的格式并编写自定义代码来读取它们。
或者,在 Hugging Face 存储库中搜索数据集: https://huggingface.co/datasets。该存储库提供了一个 Python 库,可让您使用标准化格式实时下载和读取数据集。
拥抱人脸数据集存储库
让我们从 Hugging Face 下载 WikiText-2 数据集,这是适合构建语言模型的最小数据集之一:
import random from datasets import load_dataset dataset = load_dataset(“wikitext”, “wikitext-2-raw-v1″) print(f”Size of the dataset: {len(dataset)}”) # 打印一些样本 n = 5 while n > 0: idx = random.randint(0, len(dataset)-1) text = dataset[idx][“text”].strip() 如果是文本而不是 text.startswith(“=”): print(f”{idx}: {text}”) n -= 1
|
进口 随机的 从 数据集 进口 加载数据集 数据集 = 加载数据集(“维基文本”, “tietext-2-raw-V1”) 打印(f“数据集的大小:{len(数据集)}”) # 打印一些样本 n = 5 尽管 n > 0: idx = 随机的。约会(0, 伦(数据集)–1) 文本 = 数据集[idx][“text”]。条() 如果 文本 和 不是 文本。开始于(”=): 打印(f“{idx}:{文本}”) n -= 1 |
输出可能如下所示:
数据集大小: 36718 31776:密苏里州三岔口以上的水源向上游延伸得比… 29504:阿拉一词的区域变体出现在异教徒和基督教的前@-@中… 19866:Pokiri(英语:Rogue)是一部 2006 年印度泰卢固语@-@ 语言动作电影,… 27397:第一个面粉厂明尼苏达州于 1823 年在斯内灵堡建成… 10523:音乐界注意到了凯里的成功。她在这次比赛中获得了两个奖项…
|
数据集大小:36718 31776:密苏里河三岔口以上的源头向上游延伸得比…… 29504:阿拉这个词的地区变体出现在异教徒和基督教的预@-@中…… 19866: Pokiri(英语:Rogue)是一部 2006 年印度泰卢固语动作片,… 27397:明尼苏达州第一家面粉厂建于 1823 年,位于斯内林堡,作为… 10523:音乐界注意到凯里的成功。她在这次比赛中获得了两个奖项… |
如果您还没有安装 Hugging Face 数据集库,请安装:
当您第一次运行此代码时, load_dataset() 将数据集下载到您的本地计算机。确保有足够的磁盘空间,尤其是对于大型数据集。默认情况下,数据集下载到 ~/.cache/huggingface/datasets。
所有拥抱脸部数据集都遵循标准格式。这 dataset 对象是一个可迭代对象,其中每个项目都是一个字典。对于语言模型训练,数据集通常包含文本字符串。在此数据集中,文本存储在 "text" 钥匙。
上面的代码从数据集中采样了一些元素。您将看到不同长度的纯文本字符串。
数据集后处理
在训练语言模型之前,您可能需要对数据集进行后处理以清理数据。这包括重新格式化文本(剪切长字符串、用单个空格替换多个空格)、删除非语言内容(HTML 标签、符号)以及删除不需要的字符(标点符号周围的多余空格)。具体处理取决于数据集以及您希望如何向模型呈现文本。
例如,如果训练仅处理小写字母的小型 BERT 风格模型,您可以减少词汇量并简化分词器。这是一个提供后处理文本的生成器函数:
def wikitext2_dataset(): dataset = load_dataset(“wikitext”, “wikitext-2-raw-v1”) 数据集中的项目:text = item[“text”].strip() if not text or text.startswith(“=”): continue # 跳过空行或标题行 yield text.lower() # 生成文本的小写版本
|
定义 维基文本2_数据集(): 数据集 = 加载数据集(“维基文本”, “tietext-2-raw-V1”) 为了 物品 在 数据集: 文本 = 物品[“text”]。条() 如果 不是 文本 或者 文本。开始于(”=): 继续 # 跳过空行或标题行 屈服 文本。降低() # 生成文本的小写版本 |
创建良好的后处理功能是一门艺术。它应该提高数据集的信噪比,以帮助模型更好地学习,同时保留处理训练模型可能遇到的意外输入格式的能力。
进一步阅读
以下是一些您可能会发现有用的资源:
概括
在本文中,您了解了用于训练语言模型的数据集以及如何从公共存储库获取通用数据集。这只是数据集探索的起点。考虑利用现有的库和工具来优化数据集加载速度,这样它就不会成为训练过程中的瓶颈。

