模型简介
模型特点
模型能力
使用案例
🚀 BERTIN
BERTIN是一系列基于BERT的西班牙语模型。当前的模型中心指向了所有在西班牙语部分的mC4数据集上使用Flax从头开始训练的RoBERTa-base模型中表现最优的那个。所有代码和脚本都包含在内。
本项目是由HuggingFace组织的Flax/Jax社区周的一部分,TPU使用由谷歌云赞助。该项目的目标是在Flax/JAX社区活动期间从头开始预训练一个RoBERTa-base模型,在此期间谷歌云提供了免费的TPUv3 - 8,用于使用Huggingface的Flax库实现进行训练。
🚀 快速开始
本项目旨在发布西班牙语的RoBERTa模型,并探索使大型模型训练更简单、快速的技术,推动大语言模型的民主化。你可以通过以下链接查看不同版本的模型:
- 版本v2 (默认):2022年4月28日
- 版本v1:2021年7月26日
- 版本v1 - 512:2021年7月26日
- 版本beta:2021年7月15日
✨ 主要特性
- 专注西班牙语:专门为西班牙语设计,在西班牙语相关任务上表现出色。
- 创新采样技术:使用“困惑度采样”技术,减少训练数据量和训练时间,同时保持模型性能。
- 推动模型民主化:探索使大型模型训练更易实现的技术,让小团队也能在有限预算下训练模型。
📦 安装指南
暂未提供安装步骤相关内容。
💻 使用示例
基础用法
from datasets import load_dataset
for config in ("random", "stepwise", "gaussian"):
mc4es = load_dataset(
"bertin-project/mc4-es-sampled",
config,
split="train",
streaming=True
).shuffle(buffer_size=1000)
for sample in mc4es:
print(config, sample)
break
高级用法
暂未提供高级用法相关内容。
📚 详细文档
团队成员
- Javier de la Rosa (versae)
- Eduardo González (edugp)
- Paulo Villegas (paulo)
- Pablo González de Prado (Pablogps)
- Manu Romero (mrm8488)
- María Grandury (mariagrandury)
引用与相关信息
若要引用此模型,请使用以下BibTeX格式:
@article{BERTIN,
author = {Javier De la Rosa y Eduardo G. Ponferrada y Manu Romero y Paulo Villegas y Pablo González de Prado Salas y María Grandury},
title = {BERTIN: Efficient Pre-Training of a Spanish Language Model using Perplexity Sampling},
journal = {Procesamiento del Lenguaje Natural},
volume = {68},
number = {0},
year = {2022},
keywords = {},
abstract = {The pre-training of large language models usually requires massive amounts of resources, both in terms of computation and data. Frequently used web sources such as Common Crawl might contain enough noise to make this pretraining sub-optimal. In this work, we experiment with different sampling methods from the Spanish version of mC4, and present a novel data-centric technique which we name perplexity sampling that enables the pre-training of language models in roughly half the amount of steps and using one fifth of the data. The resulting models are comparable to the current state-of-the-art, and even achieve better results for certain tasks. Our work is proof of the versatility of Transformers, and paves the way for small teams to train their models on a limited budget.},
issn = {1989-7553},
url = {http://journal.sepln.org/sepln/ojs/ojs/index.php/pln/article/view/6403},
pages = {13--23}
}
另见https://arxiv.org/abs/2207.06814。
致谢
如果没有Huggingface和谷歌通过TPU研究云慷慨提供的计算资源,以及Cloud TPU团队提前提供的Cloud TPU VM访问权限,本项目将无法实现。
免责声明
本仓库中发布的模型旨在用于通用目的,并可供第三方使用。这些模型可能存在偏差和/或其他不良失真。当第三方使用这些模型(或基于这些模型的系统)向其他方部署或提供系统和/或服务,或成为这些模型的用户时,他们应注意,减轻使用这些模型所带来的风险并在任何情况下遵守适用法规(包括有关人工智能使用的法规)是他们的责任。在任何情况下,模型所有者均不对第三方使用这些模型所产生的任何结果负责。
完整报告
动机
根据维基百科的数据,按母语使用者数量计算,西班牙语是世界上第二大语言(超过4.7亿使用者),仅次于中文;若包括将其作为第二语言的使用者,则为第四大语言。然而,大多数自然语言处理(NLP)研究仍然主要以英语形式存在。像BERT、XLNet或GPT2等重要成果,有时需要数年时间才能有西班牙语版本,而且即便有,通常也是通过多语言版本实现的,其性能不如英语版本。
在活动开展时,市面上尚无西班牙语的RoBERTa模型。因此,发布这样一个模型是我们项目的主要目标。在Flax/JAX社区活动期间,我们发布了模型的beta版本,这是首个西班牙语的该类模型。此后,在活动的最后一天,巴塞罗那超级计算中心发布了他们自己的RoBERTa模型。时间上的巧合表明我们的工作促使了他们的发布,而竞争的增加正是我们项目所期望的结果。我们感谢他们在论文中提及BERTIN,并认可他们的贡献,我们在实验中也对其进行了引用。
单语西班牙语模型非常稀缺,而且即便有,通常也是在专有数据集上使用大量资源进行训练的。实际上,这意味着许多相关算法和技术仍然只为大型科技公司和组织所独有。这也促使我们项目的第二个目标的产生,即让像RoBERTa这样的大型模型的训练更接近小型团队。我们希望探索使这些架构的训练更简单、快速的技术,从而推动大语言模型的民主化。
西班牙语mC4数据集
mC4数据集是C4(Common Crawl网络爬虫语料库的庞大、清洁版本)的多语言变体。C4用于训练T5文本到文本的Transformer模型,而mC4包含从公共Common Crawl网络爬取的101种语言的自然文本,用于训练mT5(T5的多语言版本)。
西班牙语部分的mC4(mC4 - es)包含约4.16亿个样本和2350亿个单词,未压缩数据约为1TB。
$ zcat c4/multilingual/c4-es*.tfrecord*.json.gz | wc -l
416057992
$ zcat c4/multilingual/c4-es*.tfrecord-*.json.gz | jq -r '.text | split(" ") | length' | paste -s -d+ - | bc
235303687795
困惑度采样
mC4 - es中的大量文本使得在Flax/JAX社区活动的时间限制内训练语言模型变得困难。这促使我们探索采样方法,目标是创建一个数据集子集,使得在大约八分之一的数据(约5000万个样本)和大约一半的训练步骤下训练出性能良好的模型成为可能。
为了有效地构建这个数据子集,我们决定采用一种我们称之为“困惑度采样”的技术,其起源可以追溯到CCNet(Wenzek等人,2020)的构建以及他们从网络爬取数据中创建高质量单语数据集的方法。在他们的工作中,他们提出可以应用在高质量数据(如维基百科)上训练的快速语言模型来过滤掉与语言正确表达偏差过大的文本(见图1)。他们还发布了KenLM库(Heafield,2011)中实现的100种语言(包括西班牙语)的Kneser - Ney模型,并在各自的维基百科上进行了训练。
在本工作中,我们测试了困惑度采样可能有助于减少训练数据大小和训练时间,同时保持最终模型性能的假设。
方法
为了验证我们的假设,我们首先计算了mC4 - es随机子集(约四分之一的数据)中每个文档的困惑度,并提取了其分布和四分位数(见图2)。
利用提取的困惑度百分位数,我们创建了两个函数来对中间四分位数进行过采样,目的是避免对过小(短而重复的文本)或过长(可能质量较差)的样本进行采样(见图3)。
第一个函数是Stepwise
,它使用四分位数边界和每个四分位数所需的采样频率factor
对中间四分位数进行过采样,显然中间四分位数的采样频率更高(对Q2、Q3进行过采样,对Q1、Q4进行欠采样)。
第二个函数通过一个类似高斯的函数对困惑度分布进行加权,以平滑Stepwise
函数的尖锐边界,并更好地逼近所需的潜在分布(见图4)。
我们调整了Stepwise
函数的factor
参数,以及Gaussian
函数的factor
和width
参数,以便能够从mC4 - es的4.16亿个样本中采样约5000万个样本(见图4)。为了进行比较,我们还随机采样了mC4 - es,直至达到5000万个样本。在数据大小方面,我们从1TB的数据减少到了约200GB。我们发布了在流式传输时从mC4中为任何语言进行采样的代码,数据集为bertin-project/mc4-sampling
。
图5展示了每个执行的子采样程序生成的5000万个样本子集的实际困惑度分布。为了可重复性,可以使用bertin-project/mc4-es-sampled
数据集轻松访问所有子集。我们调整了子采样参数,以便从mC4的原始训练分割中采样约5000万个示例。然而,当这些参数应用于验证分割时,得到的示例太少(约40万个样本)。因此,为了验证目的,我们在每个评估步骤从我们自己的训练数据集中动态提取5万个样本。关键是,这些元素随后会从训练中排除,以免在之前见过的数据上进行验证。在mc4-es-sampled
数据集中,训练分割包含完整的5000万个样本,而验证数据则直接从原始mC4中获取。
from datasets import load_dataset
for config in ("random", "stepwise", "gaussian"):
mc4es = load_dataset(
"bertin-project/mc4-es-sampled",
config,
split="train",
streaming=True
).shuffle(buffer_size=1000)
for sample in mc4es:
print(config, sample)
break
如图6所示,“随机”采样显示出与潜在真实分布相同的困惑度分布。
虽然这不是一个全面的分析,但我们研究了训练语料库的困惑度分布。一个快速的t - SNE图似乎表明,不同主题和文档簇的分布是均匀的。交互式绘图是使用多语言USE的蒸馏版本对20000个随机示例的子集进行嵌入生成的,每个示例根据其困惑度进行着色。这很重要,因为原则上,如果困惑度恰好与我们数据的其他某些质量相关,引入基于困惑度的采样方法可能会引入不期望的偏差。复制此绘图所需的代码可在tsne_plot.py
脚本中找到,HTML文件位于images/perplexity_colored_embeddings.html
。
训练细节
然后,我们使用与Liu等人(2019)相同的设置和超参数,但在序列长度为128的情况下只训练了一半的步骤(250000步)。具体来说,Gaussian
和Stepwise
训练了250000步,而Random
在230000步时停止。Stepwise
最初需要在180000步时停止,以便进行下游测试(序列长度128),但后来恢复并完成了250000步。在进行序列长度为512的测试时,它已经达到了204000步,性能大幅提升。
然后,我们从之前序列长度为128、步数为230000步的检查点开始,在序列长度为512的情况下对最有前景的模型继续训练了几步(约50000步)。我们尝试了两种策略,因为在文献中很难找到关于如何进行的明确细节。事实证明,这个决定对最终性能有很大影响。
对于Random
采样,我们在250000步训练的最后25000步中使用序列长度512进行训练,保持优化器状态不变。如图7所示,结果并不理想。
对于Gaussian
采样,我们在序列长度为128、步数为230000步后启动了一个新的优化器,并使用了一个短的预热间隔。使用此过程的结果要好得多。由于训练需要多次重新启动,我们没有图表,但最终准确率为0.6873,而Random
(512)为0.5907,这一差异远大于它们各自序列长度为128的模型(Random
为0.6520,Gaussian
为0.6608)。按照相同的过程,Stepwise
在序列长度为512的情况下继续训练,在31000步时的掩码语言模型(MLM)准确率为0.6744。
序列长度为128时的训练批次大小为2048(8个TPU核心×256批次大小),序列长度为512时为384(8×48),学习率不变。序列长度为512时的预热步数为500。
结果
请参考评估文件夹中的下游任务训练脚本。
我们的第一次测试,在本仓库中标记为beta
,指的是使用Stepwise
在序列长度为128的情况下进行的初始实验,训练了210000步,factor
设置为10。仓库flax-community/bertin-roberta-large-spanish
包含一个几乎相同的版本,但现在已停止使用。在社区活动期间,巴塞罗那超级计算中心(BSC)与西班牙国家图书馆合作,发布了在2亿个文档(570GB)高质量数据上训练的RoBERTa基础和大型模型,使用MareNostrum 4的100个节点(每个节点48个CPU核心)进行了96小时的训练。最终,他们得到了2TB的文档级清洁数据,进一步清理后得到了最终的570GB。这与我们自己的资源(3个TPUv3 - 8,用于10天的清理、采样、训练和评估)形成了有趣的对比,是一个有价值的参考。BSC团队评估了我们早期发布的模型beta
,结果见表1。
我们的最终模型在不同的步数和序列长度下进行训练,在掩码词预测任务中实现了不同(更高)的准确率。尽管存在这些限制,但看到他们使用我们模型早期版本获得的结果仍然很有趣。请注意,BSC用于评估的一些数据集并非免费提供,因此无法验证这些数字。
所有模型在掩码语言模型任务的训练过程中都达到了良好的准确率值(在0.65左右),见表2:
🔧 技术细节
西班牙语mC4数据集
mC4数据集是C4的多语言变体,西班牙语部分mC4 - es包含约4.16亿个样本和2350亿个单词,未压缩数据约1TB。
困惑度采样
提出“困惑度采样”技术,利用该技术构建数据子集,减少训练数据量和训练时间。通过计算文档困惑度,创建函数对中间四分位数进行过采样,避免对过小或过长样本采样。
训练策略
使用与Liu等人(2019)相同的设置和超参数,在序列长度128时训练一半步骤(250000步)。对于不同采样方法(Random
、Gaussian
、Stepwise
)采用不同训练策略,在序列长度512时继续训练部分模型。
📄 许可证
本项目采用CC - BY - 4.0许可证。



