CamemBERT:一款出色的法语语言模型
摘要
预训练语言模型在自然语言处理中已无处不在。尽管这些模型取得了成功,但大多数可用模型要么是在英语数据上训练的,要么是在多种语言数据拼接的基础上训练的。这使得这些模型在除英语以外的所有语言中的实际应用非常有限。本文探讨了为其他语言训练基于Transformer的单语语言模型的可行性,并以法语为例,评估了我们的语言模型在词性标注、依存句法分析、命名实体识别和自然语言推理任务上的表现。我们表明,使用网络爬取的数据优于使用维基百科数据。更令人惊讶的是,我们发现,相对较小的网络爬取数据集(4GB)能够带来与使用更大数据集(130+GB)相当的结果。我们表现最好的模型CamemBERT在所有四个下游任务中达到或改进了现有技术水平。
1 引言
预训练词表示在自然语言处理(NLP)中有着悠久的历史,从非上下文相关的表示(Brown等,1992;Ando和Zhang,2005;Mikolov等,2013;Pennington等,2014)到上下文相关的词嵌入(Peters等,2018;Akbik等,2018)。词表示通常通过在大规模文本数据上训练语言模型架构获得,然后作为输入提供给更复杂的任务特定架构。最近,这些专门的架构已被大规模预训练语言模型完全取代,这些模型针对每个应用进行微调。这一转变使得在广泛任务中的性能得到了大幅提升(Devlin等,2019;Radford等,2019;Liu等,2019;Raffel等,2019)。
这些迁移学习方法相较于传统的任务特定方法具有明显的优势。特别是,它们可以以无监督的方式进行训练,从而利用大量原始文本中的信息。然而,它们也带来了实施上的挑战,即预训练所需的数据量和计算资源,可能需要数百GB的文本和数百个GPU(Yang等,2019;Liu等,2019)。这限制了这些最先进模型在单语环境中的可用性,尤其是英语以外的语言。这尤其不便,因为它阻碍了它们在NLP系统中的实际应用,也阻止了我们研究它们的语言建模能力,例如在形态丰富的语言中的表现。
尽管多语言模型取得了显著成果,但它们通常更大,并且其结果(如我们将在法语中观察到的)在高资源语言上可能落后于单语模型。为了复现和验证迄今为止仅在英语中获得的结果,我们利用新发布的多语言语料库OSCAR(Ortiz Suárez等,2019)训练了一个法语单语语言模型,称为CamemBERT。我们还训练了不同版本的CamemBERT,使用不同规模和风格多样性的较小语料库,以评估这些参数对下游任务性能的影响。CamemBERT使用了RoBERTa架构(Liu等,2019),这是高性能且广泛使用的BERT架构(Devlin等,2019)的改进版本。
我们在法语的四个不同下游任务上评估了我们的模型:词性标注(POS)、依存句法分析、命名实体识别(NER)和自然语言推理(NLI)。CamemBERT在所有四个任务中相比之前的单语和多语言方法(包括mBERT、XLM和XLM-R)改进了现有技术水平,这证实了大规模预训练语言模型在法语中的有效性。
我们的贡献可以总结如下:
• 首次发布了基于RoBERTa架构的法语单语模型,使用了最近引入的大规模开源语料库OSCAR,并且是BERT原作者之外首次为英语以外的语言发布如此大规模的模型。该模型在MIT开源许可证下公开发布。
• 我们在四个下游任务上取得了最先进的结果:词性标注、依存句法分析、命名实体识别和自然语言推理,证实了基于BERT的语言模型在法语中的有效性。
• 我们证明了小型且多样化的训练集可以达到与大规模语料库相似的性能,通过分析预训练语料库在规模和领域方面的重要性。
2 相关工作
2.1 上下文语言模型
从非上下文到上下文词嵌入
最早的神经词向量表示是非上下文化的词嵌入,最著名的是word2vec(Mikolov等,2013)、GloVe(Pennington等,2014)和fastText(Mikolov等,2018),它们被设计为任务特定神经架构的输入。上下文词表示(如ELMo(Peters等,2018)和flair(Akbik等,2018))通过考虑上下文提高了词嵌入的表示能力。它们通过处理词语的多义性,在许多任务上提高了模型性能。这为更大规模的上下文模型铺平了道路,这些模型在大多数任务中完全取代了下游架构。这些方法以语言建模为目标进行训练,范围从基于LSTM的架构(如Dai和Le,2015)到成功的基于Transformer的架构,如GPT2(Radford等,2019)、BERT(Devlin等,2019)、RoBERTa(Liu等,2019)以及最近的ALBERT(Lan等,2019)和T5(Raffel等,2019)。
非英语上下文模型
随着大规模预训练语言模型的成功,它们被扩展到多语言环境中,如多语言BERT(以下简称mBERT)(Devlin等,2018),这是一个针对104种不同语言的单一多语言模型,基于维基百科数据训练;以及后来的XLM(Lample和Conneau,2019),它显著改进了无监督机器翻译。最近的XLM-R(Conneau等,2019)通过在2.5TB数据上训练扩展了XLM,并在多语言基准测试中超越了之前的分数。研究表明,多语言模型可以通过利用其他语言的高质量数据,在特定下游任务上获得与单语模型竞争的结果。
一些非英语单语模型已经发布:日文、葡萄牙文、德文和巴斯克文的ELMo模型,以及简体中文、繁体中文(Devlin等,2018)和德文(Chan等,2019)的BERT模型。
然而,据我们所知,尚未有针对英语以外的语言训练与最新英语模型(如RoBERTa在超过100GB数据上训练)规模相当的模型的特别努力。
BERT和RoBERTa
我们的方法基于RoBERTa(Liu等,2019),而RoBERTa本身基于BERT(Devlin等,2019)。BERT是一个多层双向Transformer编码器,通过掩码语言建模(MLM)目标进行训练,灵感来自Cloze任务(Taylor,1953)。它有两种规模:BERTBASE架构和BERTLARGE架构。BERTBASE架构规模较小,因此更快且更易于使用,而BERTLARGE在下游任务中实现了更高的性能。RoBERTa通过识别关键设计选择改进了BERT的原始实现,使用动态掩码、移除下一句预测任务、以更大的批次训练、在更多数据上训练以及训练更长时间。
3 下游评估任务
在本节中,我们介绍了用于评估CamemBERT的四个下游任务,即:词性标注(POS)、依存句法分析、命名实体识别(NER)和自然语言推理(NLI)。我们还介绍了用于比较的基线方法。
任务 词性标注是一项低级别的句法任务,旨在为每个词分配其对应的语法类别。依存句法分析则是预测带标签的句法树,以捕捉词之间的句法关系。
对于这两项任务,我们使用通用依存关系(UD)框架及其对应的UD词性标注集(Petrov等,2012)和UD树库集合(Nivre等,2018)进行实验,这些数据被用于CoNLL 2018共享任务(Seker等,2018)。我们在UD v2.2中的四个免费法语UD树库上进行评估:GSD(McDonald等,2013)、Sequoia(Candito和Seddah,2012;Candito等,2014)、Spoken(Lacheret等,2014;Bawden等,2014)和ParTUT(Sanguinetti和Bosco,2015)。表1简要概述了每个树库的规模和内容。
我们还在命名实体识别(NER)任务上评估了我们的模型,NER是一项序列标注任务,旨在预测哪些词指代现实世界中的对象,如人物、地点、物品和组织。我们使用了2008年版本的法国树库(FTB)(Abeillé等,2003),该版本由Candito和Crabbé(2009)引入,并由Sagot等(2012)添加了NER标注。FTB包含超过1.1万个实体提及,分布在7种不同的实体类型中。表1中还简要概述了FTB的内容。
最后,我们使用XNLI数据集(Conneau等,2018)的法语部分在自然语言推理(NLI)任务上评估了我们的模型。NLI任务旨在预测一个假设句子是否与前提句子存在蕴含、中立或矛盾的关系。XNLI数据集是Multi-Genre NLI(MultiNLI)语料库(Williams等,2018)的扩展,通过将验证集和测试集手动翻译成15种语言。英语训练集则通过机器翻译为其他语言。该数据集包含每种语言的12.2万条训练样本、2490条开发样本和5010条测试样本。通常,NLI任务的性能通过准确率进行评估。
基线方法
在依存句法分析和词性标注任务中,我们将我们的模型与以下方法进行比较:
- mBERT:BERT的多语言版本(见第2.1节)。我们在与CamemBERT相同的条件下,对每个树库微调mBERT,并添加额外的层用于词性标注和依存句法分析。
- XLMMLM-TLM:来自Lample和Conneau(2019)的多语言预训练语言模型,在NLI任务上表现优于mBERT。我们使用Hugging Face的transformer库(Wolf等,2019)中的版本,并在与我们的模型相同的条件下进行微调。
- UDify(Kondratyuk,2019):基于mBERT的多任务多语言模型,UDify同时在124个不同的UD树库上训练,创建了一个适用于75种语言的单一词性标注和依存句法分析模型。我们报告了Kondratyuk(2019)论文中的分数。
- UDPipe Future(Straka,2018):基于LSTM的模型,在CoNLL 2018共享任务(Seker等,2018)中在依存句法分析中排名第3,在词性标注中排名第6。我们报告了Kondratyuk(2019)论文中的分数。
- UDPipe Future + mBERT + Flair(Straka等,2019):原始的UDPipe Future实现,使用mBERT和Flair作为基于特征的上下文词嵌入。我们报告了Straka等(2019)论文中的分数。
在法语中,由于标注语料库的有限性,NER任务的研究较少。因此,我们将我们的模型与Dupont(2017)设定的最新基线进行比较,他在FTB上训练了CRF(Lafferty等,2001)和BiLSTM-CRF(Lample等,2016)架构,并使用启发式方法和预训练词嵌入进行了增强。此外,与词性标注和依存句法分析一样,我们还比较了针对NER任务微调的mBERT版本。
对于XNLI任务,我们提供了Wu和Dredze(2019)报告的法语mBERT分数。我们还报告了XLMMLM-TLM(如上所述)的分数,这是Lample和Conneau(2019)的最佳模型。此外,我们还报告了XLM-R(Conneau等,2019)的结果。
4 CamemBERT:法语语言模型
在本节中,我们描述了用于CamemBERT的预训练数据、架构、训练目标和优化设置。
4.1 训练数据
预训练语言模型受益于在大规模数据集上训练(Devlin等,2018;Liu等,2019;Raffel等,2019)。因此,我们使用了OSCAR语料库(Ortiz Suárez等,2019)的法语部分,这是Common Crawl的预过滤和预分类版本。
OSCAR是从Common Crawl快照中提取的单语语料库集合。它采用了与Grave等(2018)相同的方法,使用基于fastText线性分类器(Grave等,2017;Joulin等,2016)的语言分类模型,该分类器在维基百科、Tatoeba和SETimes上预训练,支持176种语言。未进行其他过滤。我们使用了未打乱的法语数据版本,其原始文本大小为138GB,经过子词分词后包含327亿个词元。
4.2 预处理
我们使用SentencePiece(Kudo和Richardson,2018)将输入文本数据分割为子词单元。SentencePiece是字节对编码(BPE)(Sennrich等,2016)和WordPiece(Kudo,2018)的扩展,不需要预分词(在词或词元级别),从而消除了对语言特定分词器的需求。我们使用32k个子词词元的词汇表。这些子词是从预训练数据集中随机采样的107个句子中学习的。为了简化,我们没有使用子词正则化(即从多个可能的分割中采样)。
4.3 语言建模
Transformer
与RoBERTa和BERT类似,CamemBERT是一个多层双向Transformer(Vaswani等,2017)。鉴于Transformer的广泛使用,我们在此不详细描述,读者可参考(Vaswani等,2017)。CamemBERT使用了BERTBASE(12层,768隐藏维度,12个注意力头,1.1亿参数)和BERTLARGE(24层,1024隐藏维度,12个注意力头,3.4亿参数)的原始架构。
CamemBERT与RoBERTa非常相似,主要区别在于使用了全词掩码(whole-word masking)以及SentencePiece分词(Kudo和Richardson,2018)而非WordPiece(Schuster和Nakajima,2012)。
预训练目标
我们在掩码语言建模(MLM)任务上训练模型。给定由N个词元组成的输入文本序列x1, …, xN,我们选择15%的词元进行可能的替换。在这些被选中的词元中,80%被替换为特殊的标记,10%保持不变,10%被替换为随机词元。然后,模型通过交叉熵损失预测初始被掩码的词元。
遵循RoBERTa的方法,我们动态掩码词元,而不是在预处理期间为整个数据集静态固定掩码。这提高了多样性,并使模型在多次训练时更具鲁棒性。
由于我们使用SentencePiece对语料库进行分词,模型的输入词元是完整词和子词的混合。BERT的升级版本和Joshi等(2019)表明,掩码整个词而不是单个子词可以提高性能。全词掩码(WWM)使训练任务更加困难,因为模型必须预测整个词,而不是在给定其余部分的情况下仅预测词的一部分。我们通过在初始未分词的文本中使用空格作为词分隔符来训练模型。
WWM的实现方式是首先随机采样序列中15%的词,然后将这15%中每个词的所有子词词元作为候选替换。这相当于接近原始15%的选中词元比例。这些词元随后被替换为标记(80%)、保持不变(10%)或被替换为随机词元。
后续研究表明,BERT最初使用的下一句预测(NSP)任务并未提高下游任务性能(Lample和Conneau,2019;Liu等,2019),因此我们也将其移除。
优化
遵循(Liu等,2019),我们使用Adam优化器(Kingma和Ba,2014)( β 1 = 0.9 , β 2 = 0.98 \beta_{1}=0.9,\beta_{2}=0.98 β1=0.9,β2=0.98)对模型进行优化,训练100k步,批量大小为8192个序列,每个序列最多包含512个词元。我们强制每个序列仅包含完整段落(对应于预训练数据集中的行)。
预训练
我们使用fairseq库(Ott等,2019)中的RoBERTa实现。我们的学习率在前10k步预热至峰值0.0007(由于批量较大,而非原始的0.0001),然后通过多项式衰减降至零。除非另有说明,我们的模型使用BASE架构,并在256个Nvidia V100 GPU(每个32GB)上预训练100k次反向传播步骤,耗时一天。出于实际考虑,我们没有训练更长时间,尽管性能似乎仍在提升。
4.4 使用CamemBERT进行下游任务
我们以两种方式使用预训练的CamemBERT。
第一种称为微调(fine-tuning),我们以端到端的方式在特定任务上微调模型。
第二种称为基于特征的嵌入(feature-based embeddings)或简称为嵌入(embeddings),我们从CamemBERT中提取冻结的上下文嵌入向量。这两种互补的方法揭示了CamemBERT捕获的预训练隐藏表示的质量。
微调
对于每个任务,我们在CamemBERT架构的顶部附加相关的预测层。遵循BERT的工作(Devlin等,2019),对于序列标注和序列标记任务,我们附加一个线性层,分别以特殊标记的最后隐藏表示和每个词的第一个子词词元的最后隐藏表示作为输入。对于依存句法分析,我们插入一个双仿射图预测头,灵感来自Dozat和Manning(2017)。我们建议读者参考该文章以获取有关此模块的更多细节。
我们在XNLI上微调时,添加一个分类头,由一个带非线性的隐藏层和一个线性投影层组成,并对两者进行输入dropout。
我们为每个任务和每个数据集独立微调CamemBERT。我们使用Adam优化器(Kingma和Ba,2014)以固定学习率优化模型。我们对学习率和批量大小的组合进行网格搜索。我们从前30个epoch中选择在验证集上表现最佳的模型。对于NLI,我们使用RoBERTa作者在MNLI任务上提供的默认超参数。尽管这可能进一步提高了性能,但我们没有应用任何正则化技术(如权重衰减、学习率预热或判别性微调),除了NLI。我们表明,以简单的方式微调CamemBERT可以在所有任务上取得最先进的结果,并在所有情况下优于现有的基于BERT的模型。
词性标注、依存句法分析和NER实验使用Hugging Face的Transformer库扩展以支持CamemBERT和依存句法分析(Wolf等,2019)。NLI实验使用fairseq库,遵循RoBERTa的实现。
嵌入
遵循Straková等(2019)和Straka等(2019)对mBERT和英语BERT的做法,我们在基于特征的嵌入设置中使用CamemBERT。为了获得给定词元的表示,我们首先计算Transformer最后四层中每个子词表示的平均值,然后对生成的子词向量进行平均。
我们在嵌入设置中评估CamemBERT的词性标注、依存句法分析和NER任务;使用Straka等(2019)和Straková等(2019)的开源实现。
5 CamemBERT的评估
在本节中,我们通过评估模型在四个任务上的表现来衡量其性能:词性标注(POS)、依存句法分析、命名实体识别(NER)和自然语言推理(NLI)。
词性标注和依存句法分析
对于词性标注和依存句法分析,我们在两种设置下将CamemBERT与其他模型进行比较:微调(fine-tuning)和基于特征的嵌入(feature-based embeddings)。结果如表2所示。
CamemBERT在所有树库和指标上均达到了最先进的分数。两种方法得分相近,微调版本的CamemBERT略占优势,这引发了对复杂任务特定架构(如UDPipe Future)需求的质疑。
尽管优化过程更简单且没有任务特定的架构,微调CamemBERT在所有树库上均优于UDify,有时优势显著(例如在Sequoia上LAS提高4.15%,在ParTUT上LAS提高5.37%)。CamemBERT在所有树库上的表现也优于其他多语言预训练模型(如mBERT和XLMMLM-TLM)。
CamemBERT总体上略优于之前的最先进任务特定架构UDPipe Future+mBERT+Flair,除了在Sequoia的词性标注和Spoken的词性标注上,CamemBERT分别落后0.03%和0.14%的UPOS分数。UDPipe Future+mBERT+Flair使用了Flair(Akbik等,2018)的上下文字符串嵌入,这些嵌入实际上是预训练的上下文字符级词嵌入,专门用于处理拼写错误以及前缀和后缀等子词结构。这种设计选择可能解释了CamemBERT在词性标注上的分数差异,尤其是在Spoken树库中,单词未大写,这可能对CamemBERT造成问题(因为其训练数据是大写的),但Flair在UDPipe Future+mBERT+Flair模型中可能能够正确处理。
命名实体识别
对于NER,我们同样在微调设置和作为任务特定架构LSTM+CRF的输入嵌入中评估CamemBERT。结果如表3所示。
在两种情况下,CamemBERT的F1分数均高于传统的基于CRF的架构(包括非神经网络和神经网络)以及微调的多语言BERT模型。将CamemBERT作为嵌入用于传统的LSTM+CRF架构时,得分略高于微调模型(89.08 vs. 89.55)。这表明,尽管CamemBERT可以在没有任何任务特定架构的情况下成功使用,但它仍然可以生成高质量的上下文嵌入,这在存在强大下游架构的场景中可能非常有用。
自然语言推理
在XNLI基准测试中,我们将CamemBERT与之前最先进的多语言模型在微调设置下进行比较。除了标准的BASE架构CamemBERT模型外,我们还训练了一个LARGE架构的模型,称为CamemBERTLARGE,以便与XLM-RLARGE进行公平比较。该模型使用第6节中描述的CCNet语料库训练了100k步。我们预计,更长时间的训练会带来更好的性能。
CamemBERT的准确率高于其BASE架构的同类模型,比mBERT高出5.6%,比XLMMLM-TLM高出2.3%,比XLM-RBASE高出2.4%。CamemBERT使用的参数数量仅为XLM-RBASE的一半(1.1亿 vs. 2.7亿)。
CamemBERTLARGE在XNLI基准测试中达到了85.7%的最先进准确率,而最近的XLM-RLARGE为85.2%。CamemBERT使用的参数比多语言模型少,主要是因为其词汇量较小(例如32k vs. XLM-R的250k)。有两个因素可能解释了CamemBERT优于XLM-R的原因。尽管XLM-R在2.5TB的数据上进行了训练,但其中只有57GB是法语数据,而我们使用了138GB的法语数据。此外,XLM-R还处理100种语言,作者表明,当将语言数量减少到7种时,他们的BASE架构可以在法语XNLI上达到82.5%的准确率。
CamemBERT结果总结
CamemBERT在考虑的4个下游任务中改进了现有技术水平,从而在法语上证实了基于Transformer模型的有效性。无论是将CamemBERT作为微调模型使用,还是将其作为上下文嵌入与任务特定架构结合使用,我们都取得了这些结果。这引发了对更复杂下游架构需求的质疑,类似于在英语中展示的结果(Devlin等,2019)。此外,这表明CamemBERT无需进一步调整即可生成高质量的表示。
6 语料库来源和规模的影响
在本节中,我们研究了预训练语料库的同质性和规模对下游任务性能的影响。为此,我们通过改变预训练数据集来训练不同版本的CamemBERT。在本实验中,我们将预训练步数固定为100k,并允许epoch数相应变化(数据集较小时epoch数更多)。所有模型均使用BASE架构。
为了研究是否需要同质的干净数据,还是更需要多样化且可能噪声较多的数据,我们除了使用OSCAR外,还使用了其他预训练数据来源:
- 维基百科:在文体和风格上具有同质性。我们使用2019年法文维基百科的官方数据,并使用Giuseppe Attardi的WikiExtractor去除HTML标签和表格。
- CCNet(Wenzek等,2019):从Common Crawl中提取的数据集,其过滤过程与OSCAR不同。它使用在维基百科上训练的语言模型来过滤低质量文本(如代码或表格)。由于这一过滤步骤将Common Crawl中的噪声数据偏向于更类似维基百科的文本,我们预计CCNet将作为未过滤的“噪声”OSCAR数据集和“干净”维基百科数据集之间的中间地带。由于不同的过滤过程,CCNet平均包含更长的文档,而OSCAR中的文档较短且通常噪声较多。
表6总结了这些不同语料库的统计数据。
为了比较这三种预训练数据来源,我们从OSCAR和CCNet中随机抽取4GB文本(以文档为单位),从而创建与法文维基百科规模相同的Common Crawl语料库样本。这些较小的4GB样本还为我们提供了一种研究预训练数据规模影响的方法。表5提供了不同版本CamemBERT的下游任务性能。上半部分报告了微调设置下的分数,下半部分报告了嵌入设置下的分数。
6.1 Common Crawl vs. 维基百科?
表5清楚地表明,在4GB版本的OSCAR和CCNet(Common Crawl)上训练的模型表现始终优于在法文维基百科上训练的模型。无论是在微调设置还是嵌入设置中,这一结论都成立。不出所料,在涉及与维基百科文体和风格差异较大的任务(如Spoken树库上的标注和解析)中,差距更大。在XNLI任务上,性能差距也非常大,这可能是由于基于Common Crawl的语料库在文体和主题上的多样性更大。XNLI基于multiNLI,涵盖了多种口语和书面文本的文体。
在4GB版本的CCNet和OSCAR上训练的模型在下游任务中的表现非常相似。
6.2 需要多少数据?
我们实验的一个意外结果是,仅在4GB OSCAR样本上训练的模型与在整个138GB OSCAR上训练的标准CamemBERT表现相似。唯一存在较大性能差距的任务是NER,其中“138GB”模型的F1分数高出0.9分。这可能是由于较大语料库中存在更多的命名实体,这对该任务有益。相反,其他任务似乎并未从额外数据中获益。
换句话说,当在OSCAR和CCNet等文体和风格多样化的语料库上训练时,4GB的未压缩文本足以作为预训练语料库,在使用BASE架构时达到最先进的结果,优于在60GB文本上预训练的mBERT。这引发了对训练单语Transformer语言模型(如BERT或RoBERTa)时是否需要使用OSCAR或CCNet等大型语料库的质疑。
这不仅意味着训练最先进语言模型的计算(以及环境)成本可以降低,还意味着可以为所有能够创建4GB或更大Common Crawl语料库的语言训练类似CamemBERT的模型。OSCAR支持166种语言,并为38种语言提供了这样的语料库。此外,稍小的语料库(例如低至1GB)也可能足以训练高性能的语言模型。
我们的结果是在BASE架构上获得的。需要进一步研究以验证我们的发现在更大架构和其他更复杂的自然语言理解任务中的有效性。然而,即使使用BASE架构和4GB训练数据,验证损失在100k步(400个epoch)后仍在下降。这表明我们仍然对4GB预训练数据集欠拟合,更长时间的训练可能会提高下游性能。
7 讨论
自本工作预发表以来(Martin等,2019),许多单语语言模型相继出现,例如(Le等,2019;Virtanen等,2019;Delobelle等,2020),涵盖了多达30种语言(Nozza等,2020)。在几乎所有测试配置中,这些模型的表现均优于多语言语言模型(如mBERT)(Pires等,2019)。有趣的是,Le等(2019)表明,将他们的FlauBert(一种基于RoBERTa的法语语言模型,训练数据较少但经过更多编辑)与CamemBERT结合使用,可以提高解析模型的性能,并在法语成分句法分析中建立了新的最先进水平,从而突出了两种模型的互补性。
与BERT首次发布时的英语情况类似,法语类似规模语言模型的可用性促进了有趣的应用,例如法律文本的大规模匿名化,其中基于CamemBERT的模型在该任务上建立了新的最先进水平(Benesty,2019),或最近发布的法语Squad数据集上的首次大规模问答实验(d’Hoffschmidt等,2020),作者使用CamemBERTLARGE达到了人类水平的表现。作为第一个使用开源Common Crawl Oscar语料库的预训练语言模型,CamemBERT对社区产生了重要影响,为后续许多单语语言模型的研究铺平了道路。此外,其所有训练数据的可用性促进了可重复性,并为更好地理解此类模型迈出了一步。本着这种精神,我们通过我们的网站以及huggingface和fairseq API提供了实验中使用的模型,包括基础的CamemBERT模型。
8 结论
在本工作中,我们探讨了为英语以外的语言训练基于Transformer的语言模型的可行性。以法语为例,我们训练了CamemBERT,这是一种基于RoBERTa的语言模型。我们在四个下游任务(词性标注、依存句法分析、命名实体识别和自然语言推理)上评估了CamemBERT,在这些任务中,我们的最佳模型达到或改进了所有任务的最先进水平,即使与强大的多语言模型(如mBERT、XLM和XLM-R)相比也是如此,同时参数数量更少。
我们的实验表明,使用具有高多样性的网络爬取数据优于基于维基百科的数据。此外,我们展示了我们的模型在仅使用4GB预训练数据的情况下可以达到惊人的高性能,从而质疑了大规模预训练语料库的必要性。这表明,只要有几千兆字节的数据可用,就可以为资源远少于英语的语言训练最先进的基于Transformer的语言模型。这为资源匮乏语言的单语上下文预训练语言模型的兴起铺平了道路。关于在小规模领域特定内容上进行预训练是否比微调等迁移学习技术更好的问题仍然开放,我们将其留给未来的工作。
CamemBERT基于纯开源语料库进行预训练,并通过MIT许可证免费提供,可通过流行的NLP库(fairseq和huggingface)以及我们的网站camembert-model.fr获取。
#附录
在附录中,我们分析了CamemBERT的不同设计选择(表8),包括全词掩码的使用、训练数据集、模型规模以及训练步数,并结合语料库来源和规模的影响分析(第6节)。在所有消融实验中,所有分数均来自至少4次运行的平均值。对于词性标注和依存句法分析,我们在4个树库上取平均分数。我们还在表7中报告了不同模型的所有平均测试分数。
A 全词掩码的影响
在表8中,我们比较了使用传统子词掩码和全词掩码训练的模型。全词掩码对自然语言推理(NLI)的下游性能有积极影响(尽管仅提高了0.5个准确率点)。令人惊讶的是,这种全词掩码方案对命名实体识别(NER)、词性标注和依存句法分析等较低层次任务的帮助不大。
B 模型规模的影响
表8比较了使用BASE和LARGE架构训练的模型。出于实际原因,这些模型使用CCNet语料库(135GB)进行训练。我们证实了较大模型对NLI和NER任务的积极影响。LARGE架构分别减少了19.7%和23.7%的错误率。令人惊讶的是,在词性标注和依存句法分析上,增加三倍的参数并未带来与BASE模型相比的显著差异。Tenney等(2019)和Jawahar等(2019)表明,BERT的低层已经学习了低层次的句法能力,而高层次的语义表示则存在于BERT的高层中。词性标注和依存句法分析可能不会从增加更多层中受益,因为BASE架构的低层已经捕捉到了完成这些任务所需的信息。
C 训练数据集的影响
表8比较了在CCNet和OSCAR上训练的模型。两个数据集的主要区别在于CCNet的额外过滤步骤偏向于类似维基百科的文本。在OSCAR上预训练的模型在词性标注和依存句法分析上表现略好,但在NER上提高了1.31分。CCNet模型在NLI上表现更好(提高了0.67分)。
D 训练步数的影响
图1展示了下游任务性能随训练步数的变化情况。本节中的所有分数均为至少4次不同随机种子运行的平均值。对于词性标注和依存句法分析,我们还在4个树库上取平均分数。
我们每个epoch(1个epoch等于8360步)评估一次模型,并报告掩码语言建模的困惑度以及下游任务的表现。图1表明,任务越复杂,训练步数的影响越大。我们观察到,依存句法分析和NER在大约22k步时达到早期平台期,而对于NLI,尽管随着预训练步数的增加,边际改善变小,但在100k步时性能仍在缓慢提升。
在表8中,我们比较了两个在CCNet上训练的模型,一个训练了100k步,另一个训练了500k步,以评估总训练步数的影响。训练500k步的模型在词性标注和解析任务上的分数相比100k步并没有显著提高。对于XNLI,提升略高(+0.84分)。
这些结果表明,低层次的句法表示在语言模型训练的早期阶段就被捕捉到,而提取NLI所需的复杂语义信息则需要更多的训练步数。
相关文章:
CamemBERT:一款出色的法语语言模型
摘要 预训练语言模型在自然语言处理中已无处不在。尽管这些模型取得了成功,但大多数可用模型要么是在英语数据上训练的,要么是在多种语言数据拼接的基础上训练的。这使得这些模型在除英语以外的所有语言中的实际应用非常有限。本文探讨了为其他语言训练…...
解决 IntelliJ IDEA 项目包后出现“% classes”和“% lines covered”的问题
前言 在使用 IntelliJ IDEA 开发 Java 或其他支持的语言时,您可能会遇到项目包后面意外地出现了“% classes”和“% lines covered”的信息。这些百分比表示的是代码覆盖率(Coverage),它们展示了您的测试覆盖了多少比例的类和代码…...
Matlab总提示内存不够用,明明小于电脑内存
目录 前言情况1(改matlab最大内存限制)情况2(重启电脑)情况3 前言 在使用matlab中,有时候需要占用的内存并没有超过电脑内存依旧会报错,提示内存不够用,可以尝试下面几种方法,总有一…...
Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)
1. OpenCV简介 1.1 OpenCV定义与功能 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它为计算机视觉应用程序提供了一个通用的基础设施,并加速了在商业产品中使用机器感知。作为BSD许可的产品&…...
leetcode707-设计链表
leetcode 707 思路 本题也是用了虚拟头节点来进行解答,这样的好处是,不管是头节点还是中间的节点都可以当成是中间节点来处理,用同一套方法就可以进行处理,而不用考虑太多的边界条件。 下面题目中最主要的实现就是添加操作addA…...
Linux操作命令之云计算基础命令
一、图形化界面/文本模式 ctrlaltF2-6 图形切换到文本 ctrlalt 鼠标跳出虚拟机 ctrlaltF1 文本切换到图形 shift ctrl "" 扩大 ctrl "-" 缩小 shift ctrl "n" 新终端 shift ctrl "t" 新标签 alt 1,…...
HTML<bdo>标签
例子 指定文本方向: <bdo dir"rtl"> This text will go right-to-left. </bdo> <!DOCTYPE html> <html> <body> <h1>The bdo element</h1> <p>This paragraph will go left-to-right.</p> …...
将IDLE里面python环境pyqt5配置的vscode
首先安装pyqt5全套:pip install pyqt5-tools 打开Vscode: 安装第三方扩展:PYQT Integration 成功配置designer.exe的路径【个人安装pyqt5的执行路径】,便可直接打开UI文件,进行编辑。 配置pyuic,如果下图填写方法使用…...
【C++】结构体(下)
4、结构体指针 作用:通过指针访问结构体中的成员 利用操作符“----->”可以通过结构体指针访问结构体成员。 示例: #include<iostream> #include<string> using namespace std; struct student {//姓名string name;//年龄int age;//分数…...
YOLOv10-1.1部分代码阅读笔记-dataset.py
dataset.py ultralytics\data\dataset.py 目录 dataset.py 1.所需的库和模块 2.class YOLODataset(BaseDataset): 3.class ClassificationDataset(torchvision.datasets.ImageFolder): 4.def load_dataset_cache_file(path): 5.def save_dataset_cache_file(prefix,…...
【电视盒子】HI3798MV300刷机教程笔记/备份遥控码修复遥控器/ADB/线刷卡刷/电视盒子安装第三方应用软件
心血来潮,看到电视机顶盒满天飞的广告,想改造一下家里的电视盒子,学一下网上的人刷机,但是一切都不知道怎么开始,虽然折腾了一天,以失败告终,还是做点刷机笔记。 0.我的机器 年少不会甄别&…...
Mixly米思齐1.0 2.0 3.0 软件windows版本MAC苹果电脑系统安装使用常见问题与解决
Mixly软件应用常见问题 Mixly米思齐编译或上传报错? 1、软件安装与驱动(Mixly1-2) 1-1 Windows版本 软件及驱动可以在Mixly群(QQ群号621937623)的群文件夹中找到,或到Mixly在线软件下载链接中重新下安装…...
在 QNAP NAS中使用 Container Station 运行 Docker 的完整指南
QNAP 为用户提供了一个名为 Container Station 的应用,它在 QNAP NAS 上将 Docker 和 LXC 结合在一起,通过图形化界面,让用户更轻松地在 NAS 上管理容器。本文将带你一步步了解如何在 QNAP NAS 上安装和使用 Container Station,以…...
Spark RPC 学习总结
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:https://www.captainai.net/dongkelun 前言 本文从API层面学习总结Spark RPC,暂不涉及源码分析。 Spark 通信历史 最开始: …...
JAVA安全—JWT攻防Swagger自动化Druid泄露
前言 依旧是Java安全的内容,今天主要是讲JWT这个东西,JWT之前讲过了,是Java中特有的身份校验机制,原理我就不再多说了,主要是看看它的安全问题,至于Swagger和Druid顺便讲一下。 Druid泄露 Druid是阿里巴…...
深度学习核函数
一、核函数的基本概念 核函数在机器学习中具有重要应用价值,常用于支持向量机(SVM)等算法中。 核函数是面试中经常被考到的知识点,对于找工作和实际数据转换都有重要作用。 二、数据建模与核函数的作用 数据越多,可…...
【神经网络基础】
目录 一、神经网络的构成 1.1什么是神经网络? 1.2 激活函数 1.2.1 Sigmoid 1.2.2 Tanh 1.2.3 ReLU 1.2.4 softmax 1.2.5 其他激活函数 1.2.6 选择激活函数 1.3 参数初始化 1.4 模型构建 二、损失函数 2.1 分类问题 2.1.1多分类(多分类交叉…...
一些面试常见问题及其回答参考
1、请你自我介绍一下你自己? 回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有。其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研…...
[JavaScript] 深入理解流程控制结构
文章目录 1. **if-else 语句**基本语法:示例:扩展:else if 2. **switch-case 语句**基本语法:示例:注意事项: 3. **for 循环**基本语法:示例:扩展:for-in 和 for-of 4. *…...
Mysql常见问题处理集锦
Mysql常见问题处理集锦 root用户密码忘记,重置的操作(windows上的操作)MySQL报错:ERROR 1118 (42000): Row size too large. 或者 Row size too large (> 8126).场景:报错原因解决办法 详解行大小限制示例:内容来源于网…...
高级java每日一道面试题-2025年01月19日-框架篇[Mybatis篇]-MyBatis 中见过什么设计模式 ?
如果有遗漏,评论区告诉我进行补充 面试官: MyBatis 中见过什么设计模式 ? 我回答: 1. 工厂模式(Factory Pattern) 定义:工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式,将对象创建过程抽象化ÿ…...
C++,设计模式,【目录篇】
文章目录 1. 简介2. 设计模式的分类2.1 创建型模式(Creational Patterns):2.2 结构型模式(Structural Patterns):2.3 行为型模式(Behavioral Patterns): 3. 使用设计模式…...
C/C++内存管理(超详解)
目录 1.C/C内存分布 2.C语言动态内存管理 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 3.C动态内存管理 3.1new/delete操作内置类型 3.2new/delete操作自定义类型 3.3operator new与operator delete函数 3.4定位new表达式(placement-new) 1.C/C内存分布 内存中是如…...
【前端】用OSS增强Hexo的搜索功能
文章目录 前言配置 _config.fluid.yml云端实时更新 local-search.xml解决 OSS.Bucket 的跨域问题 前言 原文地址:https://blog.dwj601.cn/FrontEnd/Hexo/hexo-enhance-local-search-with-oss/ 考虑到某著名云服务商提供的云服务器在两年的 99 计划后续费价格高达四…...
智慧校园平台中的信息处理与技术应用
随着信息技术的迅速发展,智慧校园平台已经成为现代教育领域的重要组成部分。智慧校园平台不仅能够提高教学效率,还能够改善学生的学习体验,以及优化学校的管理流程。为了实现这些目标,信息处理技术在智慧校园平台的应用中扮演了至…...
Spring MVC(一)
RestController RestController 是由 Controller 和 ResponseBody 两个注解构成的。 Spring 启动的时候会扫描所有包含 Controller 或者 RestController 注解的类,创建出对外的接口,这样外界就可以从这里与服务器实现交互,如果没有这个注解…...
【王树森搜索引擎技术】概要01:搜索引擎的基本概念
1. 基本名词 query:查询词SUG:搜索建议文档:搜索结果标签/筛选项 文档单列曝光 文档双列曝光 2. 曝光与点击 曝光:用户在搜索结果页上看到文档,就算曝光文档点击:在曝光后,用户点击文档&…...
imbinarize函数用法详解与示例
一、函数概述 众所周知,im2bw函数可以将灰度图像转换为二值图像。但MATLAB中还有一个imbinarize函数可以将灰度图像转换为二值图像。imbinarize函数是MATLAB图像处理工具箱中用于将灰度图像或体数据二值化的工具。它可以通过全局或自适应阈值方法将灰度图像转换为二…...
ThinkPHP 8的一对多关联
【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...
医工交叉合作信息汇总,第三期名单分享,近期需要联合申请基金以及课题合作的老师/同学重点关注一下!|合作信息·25-01-17
小罗碎碎念 之前出过两期医工交叉领域合作信息的汇总推送,最近一直没顾上这事,现在重新捡起来,并且把需求向所有的粉丝公开,直接在后台回复“合作信息”就可以获取表格。 截至目前为止,共收集了92条合作信息…...
深度学习中的张量 - 使用PyTorch进行广播和元素级操作
深度学习中的张量 - 使用PyTorch进行广播和元素级操作 元素级是什么意思? 元素级操作在神经网络编程中与张量的使用非常常见。让我们从一个元素级操作的定义开始这次讨论。 一个_元素级_操作是在两个张量之间进行的操作,它作用于各自张量中的相应元素…...
浅谈云计算20 | OpenStack管理模块(下)
OpenStack管理模块(下) 五、存储管理5.1 存储管理概述 5.2 架构设计5.2.1 Cinder块存储架构5.2.2 Swift对象存储架构 六、网络管理6.1 网络管理概述6.2 架构解析6.2.1 Neutron网络服务架构6.2.2 网络拓扑架构 6.3 原理与流程6.3.1 网络创建原理6.3.2 网络…...
GitLab集成Jira
GitLab与Jira集成的两种方式 GitLab 提供了两种 Jira 集成,即Jira议题集成和Jira开发面板集成,可以配置一个或者两个都配置。 具体集成步骤可以参考官方文档Jira 议题集成(极狐GitLab文档)和Jira 开发面板集成(极狐G…...
如何用selenium来链接并打开比特浏览器进行自动化操作(1)
前言 本文是该专栏的第76篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者将基于“比特浏览器”,通过selenium来实现链接并打开比特浏览器,进行相关的“自动化”操作。 值得一提的是,在本专栏之前,笔者有详细介绍过“使用selenium或者pyppeteer(puppeteer)…...
Docker私有仓库管理工具Registry
Docker私有仓库管理工具Registry 1 介绍 Registry是私有Docker仓库管理工具,Registry没有可视化管理页面和完备的管理策略。可借助Harbor、docker-registry-browser完成可视化和管理。Harbor是由VMware开发的企业级Docker registry服务。docker-registry-browser是…...
《Hands_On_LLM》8.1 语义搜索和 RAG 概述(Semantic Search and RAG)
说明 接下来的这三篇文章是《On Large Language Models》的第8章:语义搜索和检索增强生成(Retrieval-Augmented Generation)的翻译。 概述 搜索是最早被业界广泛采用的语言模型应用之一。在开创性论文《BERT:用于语言理解的深度…...
C++实现设计模式---迭代器模式 (Iterator)
迭代器模式 (Iterator) 迭代器模式 是一种行为型设计模式,它提供了一种方法,顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 意图 提供一种方法,可以顺序访问一个容器对象中的元素,而无需暴露其…...
skywalking的使用
面试常问的面试题: 你们的服务监控怎么做的? 其实就可以回答skywalking,skywalking是一个开源的分布式追踪与性能监视平台,特别适用于微服务架构、云原生环境以及基于容器(如Docker、Kubernetes)的应用部…...
【C语言系列】深入理解指针(1)
前言 总所周知,C语言中指针部分是非常重要的,这一件我们会介绍指针相关的内容,当然后续我还会出大概4篇与指针相关的文章,来深入的讲解C语言指针部分,希望能够帮助到指针部分薄弱或者根本不会的程序员们,后…...
医院挂号就诊系统设计与实现(代码+数据库+LW)
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装医院挂号就诊系统软件来发挥其高效地信息处理的作用&#…...
Mysql 主从复制原理及其工作过程,配置一主两从实验
主从原理:MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执行这些日志中的操作…...
verilog笔记1
1. 阻塞赋值 阻塞赋值,顾名思义即在一个 always 块中,后面的语句会受到前语句的影响,具体来说就是在同一个always 中,一条阻塞赋值语句如果没有执行结束,那么该语句后面的语句就不能被执行,即被“阻塞”。也…...
人工智能之数学基础:线性代数中的线性相关和线性无关
本文重点 在线性代数的广阔领域中,线性相关与线性无关是两个核心概念,它们对于理解向量空间、矩阵运算、线性方程组以及人工智能等问题具有至关重要的作用。 定义与直观理解 当存在一组不全为0的数x1,x2,...,xn使得上式成立的时候,那么此时我们可以说向量组a1,a2...,an…...
Flask简介与安装以及实现一个糕点店的简单流程
目录 1. Flask简介 1.1 Flask的核心特点 1.2 Flask的基本结构 1.3 Flask的常见用法 1.3.1 创建Flask应用 1.3.2 路由和视图函数 1.3.3 动态URL参数 1.3.4 使用模板 1.4 Flask的优点 1.5 总结 2. Flask 环境创建 2.1 创建虚拟环境 2.2 激活虚拟环境 1.3 安装Flask…...
Ubuntu22.04安装paddle GPU版本
文章目录 确立版本安装CUDA与CUDNN安装paddle 确立版本 查看官网信息,确立服务版本:https://www.paddlepaddle.org.cn/documentation/docs/zh/2.6/install/pip/linux-pip.html 安装CUDA与CUDNN 通过nvidia-smi查看当前显卡驱动版本: 通过…...
读《SQL经典实例》学数据库(系列一)
目录 友情提醒第一章、数据库简述1.1)数据库简述1.2)常见的数据库软件1.3)MySQL数据库安装 第二章、SQL语句分类2.1)操作数据仓库/数据表:DDL2.1.1)创建数据仓库/数据表2.1.2)删除数据仓库/数据表2.1.3&…...
Android系统开发(一):AOSP 架构全解析:开源拥抱安卓未来
引言 当我们手握智能手机,流畅地滑动屏幕、切换应用、欣赏动画时,背后其实藏着一套庞大且精密的开源系统——Android AOSP(Android Open Source Project)。这套系统不仅是所有安卓设备的根基,也是系统开发者的终极 pl…...
git系列之revert回滚
1. Git 使用cherry-pick“摘樱桃” step 1: 本地切到远程分支,对齐要对齐的base分支,举例子 localmap git pull git reset --hard localmap 对应的commit idstep 2: 执行cherry-pick命令 git cherry-pick abc123这样就会将远程…...
【统计的思想】假设检验(一)
假设检验是统计学里的重要方法,同时也是一种“在理想与现实之间观察求索”的测试活动。假设检验从概率的角度去考察理想与现实之间的关系,籍此来缓解测试可信性问题。 我们先来看一个例子。民航旅客服务系统,简称PSS系统,有一种业…...
Linux 管道操作
Linux 管道操作 在 Linux 中,管道(Pipe)是一个非常强大且常用的功能,它允许将一个命令的输出直接传递给另一个命令作为输入,从而能够高效地处理和分析数据。管道在多个命令之间建立数据流,减少了文件的读写…...