模型:
pdelobelle/robbert-v2-dutch-base
RobBERT 是最先进的荷兰语BERT模型。它是一个大型预训练的通用荷兰语言模型,可以在给定的数据集上进行微调,以执行任何文本分类、回归或标记标记任务。因此,它已被许多 researchers 和 practitioners 成功用于实现各种荷兰语自然语言处理任务的最先进性能,包括:
并且在以下任务中也取得了卓越的接近SOTA结果:
*请注意,几个评估使用了RobBERT-v1,并且第二个改进的RobBERT-v2在我们测试的所有内容上都优于第一个模型
*还请注意,此列表并非详尽无遗。如果您在应用程序中使用了RobBERT,我们很乐意了解!通过发送电子邮件告诉我们,或者通过使用编辑发送请求将其自己添加到此列表。
关于RobBERT的更深入的信息可以在我们的 blog post 、 our paper 和 the RobBERT Github repository 中找到。
RobBERT使用 RoBERTa 的架构和预训练,但使用荷兰语分词器和训练数据。RoBERTa是经过优化的英语BERT模型,使其比原始BERT模型更强大。给定相同的架构,RobBERT可以使用 code to finetune RoBERTa 模型和BERT模型使用的大多数代码进行微调和推理,例如通过 HuggingFace Transformers 库提供的代码。
默认情况下,RobBERT使用了训练中使用的掩码语言模型头。这可以用作一种零-shot方式来填充句子中的掩码。您可以在 RobBERT's Hosted infererence API of Huggingface 上免费测试它。您还可以通过使用HuggingFace的 RoBERTa-runners 和 their fine-tuning notebooks 中的任何一个来为自己的任务创建一个新的预测头,只需将模型名称更改为pdelobelle/robbert-v2-dutch-base,或使用原始的fairseq RoBERTa 训练方案。
使用以下代码下载基础模型并进行微调,或使用我们的微调模型之一(在 our project site 中有记录)。
from transformers import RobertaTokenizer, RobertaForSequenceClassification tokenizer = RobertaTokenizer.from_pretrained("pdelobelle/robbert-v2-dutch-base") model = RobertaForSequenceClassification.from_pretrained("pdelobelle/robbert-v2-dutch-base")
从transformers v2.4.0开始(或从源代码安装),您可以使用AutoTokenizer和AutoModel。然后,您可以使用大多数 HuggingFace's BERT-based notebooks 为不同类型的荷兰语言数据集上的RobBERT进行微调。
所有实验在我们的 paper 中有更详细的描述,代码在 our GitHub repository 中。
使用 Dutch Book Reviews Dataset 预测评论是积极的还是消极的。
Model | Accuracy [%] |
---|---|
ULMFiT | 93.8 |
BERTje | 93.0 |
RobBERT v2 | 95.1 |
我们通过预测句子中应该填入“die”还是“dat”来衡量模型进行指代消解的能力。为此,我们使用了 EuroParl corpus 。
完整数据集微调Model | Accuracy [%] | F1 [%] |
---|---|---|
12336321 (LSTM) | 75.03 | |
mBERT | 98.285 | 98.033 |
BERTje | 98.268 | 98.014 |
RobBERT v2 | 99.232 | 99.121 |
我们还使用仅有1万个训练示例的性能进行了测量。此实验清楚地表明,当数据量有限时,RobBERT的性能优于其他模型。
Model | Accuracy [%] | F1 [%] |
---|---|---|
mBERT | 92.157 | 90.898 |
BERTje | 93.096 | 91.279 |
RobBERT v2 | 97.816 | 97.514 |
由于BERT模型是使用词掩蔽任务进行预训练的,我们可以使用它来预测“die”或“dat”的可能性更大。这个实验显示RobBERT比其他模型内部化了更多荷兰语信息。
Model | Accuracy [%] |
---|---|
ZeroR | 66.70 |
mBERT | 90.21 |
BERTje | 94.94 |
RobBERT v2 | 98.75 |
使用 Lassy UD dataset 。
Model | Accuracy [%] |
---|---|
Frog | 91.7 |
mBERT | 96.5 |
BERTje | 96.3 |
RobBERT v2 | 96.4 |
有趣的是,我们发现在处理小的数据集时,RobBERT v2明显优于其他模型。
使用 CoNLL 2002 evaluation script 。
Model | Accuracy [%] |
---|---|
Frog | 57.31 |
mBERT | 90.94 |
BERT-NL | 89.7 |
BERTje | 88.3 |
RobBERT v2 | 89.08 |
我们使用RoBERTa的训练方案预训练了RobBERT。我们对荷兰语部分的 OSCAR corpus 进行了预训练。这是一个大型的多语言语料库,通过在Common Crawl语料库中进行语言分类获得。这个荷兰语语料库有39GB大小,包含66亿个单词,分布在1.26亿行文本中,每行可能包含多个句子,因此使用的数据比同时开发的其他荷兰语BERT模型更多。
RobBERT共享其架构 RoBERTa's base model ,它本身是BERT的复制和改进版本。与原始BERT模型不同,RoBERTa指定的预训练任务仅使用了MLM任务,而不是NSP任务。因此,在预训练期间,它只预测了给定句子中特定位置的单词是否被掩盖。训练过程使用Adam优化器,学习率采用多项式衰减l_r=10^-6,并具有1000个迭代的渐变增加期,超参数beta_1=0.9和RoBERTa的默认值beta_2=0.98。此外,权重衰减为0.1,小的dropout为0.1有助于防止模型过拟合。
RobBERT在每个节点上使用4个Nvidia P100 GPU的计算集群进行训练,节点数在保持固定批量大小为8192个句子的情况下进行动态调整。最多使用20个节点(即80个GPU),中位数为5个节点。通过使用梯度累积,可以独立设置批量大小,而不受可用GPU数量的限制,以最大限度地利用集群。使用 Fairseq library ,该模型经过了两个时期的训练,总共超过16000批次,计算集群中大约需要三天时间。在计算集群的训练作业之间,2个Nvidia 1080 Ti还完成了对RobBERT v2的一些参数更新。
在 RobBERT paper 中,我们还调查了RobBERT的潜在偏见来源。
我们发现,无论实际工作性别比例如何,零shot模型估计"hij"(he)的概率大于"zij"(she)在漂白的模板句子中的绝大多数职业中。
通过将DBRB荷兰书籍情感分析数据集与评论作者的陈述性别相结合,我们发现RobBERT更准确地检测到女性撰写的高度正面的评论比男性撰写的评论更积极。
复制我们的论文实验 described in detail on teh RobBERT repository README 。
大多数类似BERT的模型的名称中都包含单词BERT(例如 RoBERTa 、 ALBERT 、 CamemBERT 和 many, many others )。因此,我们使用掩码语言模型查询我们训练的模型,用 all 、 kinds 、 of 、 prompts 让其自己为自己命名,它一致地称呼自己为RobBERT。我们认为这非常合适,因为RobBERT是一个 very Dutch name (因此明显是一个荷兰语言模型),并且与其根架构BERT RoBERTa 非常相似。
由于“rob”是荷兰语中表示海豹的词,我们决定画一只海豹,并像Robbie穿上 Bert from Sesame Street 为了 RobBERT logo 。
该项目由 Pieter Delobelle 、 Thomas Winters 和 Bettina Berendt 创建。如果您要引用我们的论文或模型,可以使用以下BibTeX:
@inproceedings{delobelle2020robbert, title = "{R}ob{BERT}: a {D}utch {R}o{BERT}a-based {L}anguage {M}odel", author = "Delobelle, Pieter and Winters, Thomas and Berendt, Bettina", booktitle = "Findings of the Association for Computational Linguistics: EMNLP 2020", month = nov, year = "2020", address = "Online", publisher = "Association for Computational Linguistics", url = "https://www.aclweb.org/anthology/2020.findings-emnlp.292", doi = "10.18653/v1/2020.findings-emnlp.292", pages = "3255--3265" }