预训练任务
BERT 的 Masked Language Model (MLM) 具体是如何实施的?掩码比例多少?为什么?¶
BERT的MLM并不是简单粗暴地把所有选中的词都替换成[MASK]。如果那样做,预训练阶段模型只会遇到[MASK]这个特殊符号,而微调阶段真实任务中根本没有这个标记,就会出现严重的“预训练-微调不一致”问题。
BERT的实际做法分两层:先选词,再决定怎么处理。
第一层:选择掩码位置
对于每条输入序列,BERT随机挑选其中15%的token作为“掩码候选”。注意,是15%的token,而不是15%的句子。这个比例的选择经过了实验权衡:比例太低(比如5%),模型学到的上下文依赖太弱,而且训练效率低,因为大部分token都是直接可见的,预测任务太简单;比例太高(比如25%),上下文被破坏得太严重,模型缺乏足够的信息来做出合理预测,学到的表示质量也会下降。15%是BERT论文通过实验找到的平衡点——既提供了足够强的学习信号,又不至于让文本变得面目全非。
此外,BERT并不是每次只掩码一个词然后反复预测。它一次性掩码15%的词,然后让模型同时预测所有这些位置。这样做的好处是让模型一次性学习多个位置的上下文依赖关系,而不是孤立地预测每个位置。实际上,每个batch中的输入序列都会重新随机选择掩码位置,所以模型在整个预训练过程中会看到同一句话的各种不同掩码版本。
第二层:处理被选中的词
选中的15% token并不是全部替换为[MASK]。BERT将它们进一步分成三组,按不同比例处理:
-
80%替换为
[MASK]:这是模型主要学习“完形填空”的信号来源。模型看到[MASK]就知道这个位置需要预测,然后根据上下文推断最可能的原词。 -
10%替换为随机词:比如“今天天气很好”中的“天气”被选中,可能被替换为“苹果”。这一步的目的是给模型注入“噪声”,让它不能盲目信任每一个输入词——即使看到的是一个奇怪的不相关词,也要靠上下文来判断它是否合理。这有助于模型学习更强的纠错和推理能力。
-
10%保持不变:被选中的词原封不动地保留。这有两个作用:一是让模型知道并非所有“重要的位置”都需要预测,避免过度关注
[MASK]标记;二是保持模型对真实词汇分布的敏感度,让输出表示也适应正常的词汇,而不是只适应[MASK]。
所以最终,真正被替换为[MASK]的只占全部token的15%×80%=12%。这个精巧的设计既保证了充足的训练信号,又缓解了预训练和微调之间的不一致。
训练时,模型只在被掩码的这些位置上计算交叉熵损失,其他未被掩码的位置不产生损失。这意味着每条序列中约12%的token产生有效梯度,虽然看起来稀疏,但由于语料规模巨大,累积的学习信号足够丰富。
MLM 中使用的 [MASK] 标记在预训练和微调时不一致,这带来了什么问题?如何缓解?¶
问题的本质
这个问题在学术上被称为“预训练-微调分布不一致”。在预训练阶段,模型大量看到[MASK]这个特殊符号,并学会了围绕它来组织预测——模型内部学习了一套“检测到[MASK]→激活特定预测模式”的神经响应。但在微调阶段,下游任务(文本分类、序列标注、问答等)的输入中完全不会出现[MASK]标记。
这就导致两个层面的问题:
-
表示层面:预训练时学到的与
[MASK]相关的权重和激活模式在下游任务中不仅无用,还可能成为噪声源。模型需要在下游任务中“遗忘”这部分预训练知识,这浪费了模型容量。 -
行为层面:模型习惯了“看到
[MASK]就要预测缺失词”的模式,但下游任务没有这个环节,模型的行为模式需要切换,这种切换可能导致微调初期的不稳定。
缓解策略的演进
BERT本身的三种处理方式(80%掩码、10%随机替换、10%保留原词)就是针对这个问题的第一道防线。通过让模型在预训练阶段就知道:不是所有“需要关注的位置”都是[MASK],有些是随机干扰词,有些就是正确的词。这样,模型对[MASK]标记本身的依赖被削弱了,它学会了更广义的“根据上下文判断词汇合理性”的能力。
但这一防线并不彻底,后续模型做了更根本的改进:
XLNet:彻底去掉[MASK]
XLNet采用排列语言模型,完全摒弃了[MASK]标记。它将输入序列的token顺序随机打乱(实际上是打乱预测顺序,而非真正的文本顺序),然后以自回归的方式逐个预测。比如对于序列“A B C D”,一次打乱后预测顺序变为“B D A C”,模型按这个顺序自回归预测,在预测A时,可以看到B和D(因为它们在排列中排在A前面),从而获得双向上下文信息。整个过程没有引入任何[MASK],从根本上消除了不一致问题。
RoBERTa:动态掩码
RoBERTa保留了[MASK]标记,但做了关键改进——动态掩码。BERT在数据预处理阶段生成掩码后,整个预训练过程中每条数据的掩码模式是固定的。RoBERTa改为每次将数据送入模型时都重新随机生成掩码。这样:
-
模型看到同一句话的无数次不同掩码版本,学会了更鲁棒的上下文理解,不再“记忆”特定位置的掩码。
-
由于掩码模式不断变化,模型无法形成对
[MASK]的机械依赖,必须每次都重新根据上下文推理。
ERNIE:实体级掩码
ERNIE的思路是让掩码粒度更贴近语义单元。它不是随机掩码单个token,而是识别出完整的实体或短语,一次性掩码整个语义单元(比如把“北京故宫”整个掩码,而不是只掩码“北京”或“故宫”)。由于语义单元比单个token更难从局部恢复,模型被迫学习更深层的上下文推理,从而减少了对[MASK]表面形式的关注。
其他辅助手段
-
在微调时,可以适当降低与
[MASK]相关的嵌入向量的学习率,让它们缓慢适应新的输入分布。 -
在预训练后期,可以逐步降低
[MASK]替换的比例(从80%降到更低),让模型逐步过渡到更接近下游任务的输入分布。
Next Sentence Prediction (NSP) 的任务是什么?为什么后来 ALBERT 和 RoBERTa 认为它效果有限?¶
NSP的任务设计
NSP是BERT作者为增强模型对句子间关系的理解而设计的辅助预训练任务。具体做法是:
-
从语料中选取两个句子A和B。
-
50%的情况下,B是A在原始文档中的真实下一句(正样本,标签为“IsNext”)。
-
50%的情况下,B是从语料中随机抽取的其他句子(负样本,标签为“NotNext”)。
-
模型需要在
[CLS]token的最终表示上做一个二分类,判断A和B的连贯性。
设计初衷是好的:让模型具备判断句子间逻辑关系的能力,这对于问答(判断哪个句子是答案)、自然语言推理(判断前提和假设的关系)、文本摘要等下游任务都有帮助。
为什么后来被质疑
RoBERTa论文通过系统实验发现,NSP的贡献远不如预期。原因可以拆解为几个层面:
第一层:任务太简单,模型在“作弊”
随机抽取的负样本通常与正样本A在主题上毫无关联。比如A句在讲“苹果发布了新手机”,随机抽取的B句可能来自一篇完全不相关的体育新闻。模型根本不需要学习精细的句子间逻辑关系(如因果关系、转折关系、时间顺序),它只需要判断“两个句子的话题是否一致”就能答对绝大多数情况。实际上,模型学会的是一个粗粒度的“主题检测器”,而非NSP设计者期望的“关系推理器”。
实验证据是:如果仅仅把负样本改成“从同一文档中随机抽取但与A不连贯的句子”(即主题相同但逻辑不连贯),NSP的准确率会大幅下降。这说明原始NSP中的高准确率是靠主题差异“作弊”获得的。
第二层:与MLM的竞争关系
NSP和MLM共享同一个输入序列,但关注点不同。MLM需要模型理解token级别的上下文,而NSP需要模型捕捉句子级别的连贯性。在有限的序列长度(BERT使用512个token)和模型容量下,两个任务存在竞争:
-
NSP占用了两个句子的拼接空间,导致MLM能处理的连续文本长度减半。
-
如果去掉NSP,模型可以用整段连续文本进行MLM训练,从更长的上下文中学习更丰富的语义。
RoBERTa的实验直接验证了这一点:去掉NSP、只保留MLM,并在更长的连续文本上训练,下游任务性能全面提升。
第三层:NSP信号与MLM信号重叠
在MLM任务中,如果掩码位置恰好需要跨句子推理(比如代词指向前一句的实体),MLM本身就已经在隐式地学习句子间关系。NSP提供的额外信号与MLM的这部分信号高度重叠,边际收益低。
ALBERT的反思与SOP
ALBERT没有完全否定句子间关系预训练的价值,而是认为NSP的问题在于任务设计不够精细。ALBERT提出了Sentence Order Prediction(SOP),用更难的任务替代NSP:
-
正样本:两个连续句子A→B(正确顺序)。
-
负样本:将A和B的顺序颠倒(B→A),但保证两个句子来自同一文档(主题一致)。
SOP的巧妙之处在于:它彻底堵死了“靠主题差异作弊”的路。正负样本的主题完全相同,模型必须学会判断“哪个句子应该在前”——这需要理解时序、因果、逻辑连贯等真正的句子间关系。实验证明SOP比NSP对下游任务(尤其是需要关系推理的任务)的提升更大。
Sentence Order Prediction (SOP) 相比 NSP 有什么改进?如何构造负样本?¶
核心改进:从“主题检测”到“关系推理”
SOP对NSP进行了精准的“靶向升级”。NSP的负样本是随机抽取的其他句子,正负样本的主要差异在于主题是否相关。模型学会的是“主题一致=正样本,主题不同=负样本”。这不需要理解句子间的精细逻辑。
SOP做了一个关键修改:负样本不再是随机抽取的无关句子,而是将两个原本连续的句子顺序颠倒。这样,正负样本的主题完全一致,唯一的区别是句子顺序是否正确。模型无法再依赖主题差异,必须学会区分句子间的逻辑连贯性——包括时间先后(“他起床”应该在“他刷牙”前面)、因果链条(“下雨了”应该在“地湿了”前面)、叙事逻辑(“提出问题”应该在“给出答案”前面)等。
负样本构造方法
以ALBERT的实现为例:
-
从原始文档中取出两个连续的句子A和B。
-
正样本:保持原顺序[A, B],标签为“顺序正确”。
-
负样本:交换顺序变为[B, A],标签为“顺序错误”。
这样做有两个精妙之处。第一,主题一致性保证难度:正负样本涉及完全相同的词汇和主题,模型无法从内容差异判断,只能从连贯性推理。第二,构造成本几乎为零:不需要任何人工标注,不需要筛选“合适的负样本”,只需要将现成的连续文本倒序即可,可以无限量自动生成。
为什么SOP比NSP更有效
实验效果上,ALBERT在多个需要句子间推理的基准上(如RACE阅读理解、MultiNLI推理)显著优于同等配置的BERT。这是因为SOP教会了模型的是“连贯性”这个更本质的语言特性,而NSP教会的是“主题聚类”。
一个直观的理解方式:NSP像是在考“这段话和那段话是不是讲同一件事?”——这是粗粒度的语义匹配。SOP则是在考“这两句话应该谁先谁后?”——这需要理解事件逻辑、时间顺序、指代消解、因果关系等细粒度的语言结构。
由于SOP难度更高,对模型能力的要求也更高,因此它能驱动模型学习更深层的语言表示。这些表示在迁移到下游需要推理的任务时,自然具有更强的泛化能力。
自回归语言模型(AR)的训练目标是什么?它的损失函数如何定义?¶
自回归语言模型的核心思想是根据上文(或下文)逐词预测下一个词,即把文本的联合概率分解为一系列条件概率的乘积。给定一个文本序列 x=(x1,x2,…,xT)x=(x1,x2,…,xT),自回归模型将其似然建模为:

其中 x<tx<t 表示前 t−1t−1 个 token。在训练时,模型通过最大化对数似然来优化参数:

对于每个时间步 tt,模型接收前文 x<tx<t 并输出词表上的概率分布,损失函数为交叉熵:

通常将序列中所有 token 的损失求和或取平均作为最终损失。自回归的代表模型有 GPT 系列、Transformer-XL 等。单向的上下文建模使其天然适合文本生成任务,但无法像 MLM 那样同时利用双向信息进行深度理解。
训练时使用的教师强制:将真实的前缀序列输入模型,预测下一个词。因为每一步都使用 ground truth 作为历史,训练过程平稳且收敛快,但这也与推理时的自回归生成存在差异。
自回归模型训练时使用教师强制(Teacher Forcing),推理时却是自回归生成,这带来什么问题?¶
这个问题被称为 曝光偏差(Exposure Bias)。训练时,模型每一步看到的是完美、无错误的真实前缀;而推理时,模型只能使用自己上一步生成的词作为前缀。一旦生成中出现一个错误词,该错误会作为后续步骤的输入,导致模型进入训练时从未遇到过的“错误输入空间”,错误不断累积,生成质量急剧下降。这就好比一个学生平常做练习题时总看标准答案提示,一到考试没有提示就乱了阵脚。
此外,教师强制还导致训练和推理的分布不一致:训练数据的输入来自真实分布,推理时的输入却来自模型自身的输出分布。这会让模型对自身的错误缺乏纠错能力,尤其对于长序列生成,序列末尾的 token 可能完全偏离主题。
缓解策略:
-
计划采样:在训练时以一定概率用模型自己生成的词替代真实词,让模型逐渐适应自生成输入。概率通常从低到高逐渐增加(如从 teacher forcing 慢慢过渡到 free-running)。
-
强化学习:使用 REINFORCE 等算法直接优化生成序列的评价指标(如 BLEU、CIDEr),避免依赖真实前缀。
-
生成对抗网络(GAN)思路:训练一个判别器判断生成文本的真实性,给予生成器更直接的信号。
-
知识蒸馏:用大模型生成的多样文本作为软目标训练小模型,可以隐式地减轻曝光偏差。
-
BERT 式的双向预训练虽然不直接用于生成,但之后的自回归模型可引入预训练来增强表征,减少错误传播。
曝光偏差是所有自回归模型共有的固有问题,目前仍是开放研究领域。
Electra 的预训练目标有何创新?生成器和判别器如何协作?¶
ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)创新性地将预训练建模为替换 token 检测任务,类似于 GAN 的思想,但不是对抗训练。它由两个网络组成:一个小型生成器和一个大型判别器。
-
生成器:通常是一个小的 MLM(如 BERT),接收带有
[MASK]的输入,对被掩码位置生成一个替换 token(可能恢复原词也可能不是)。生成器训练目标为标准的 MLM 损失。 -
判别器:接收生成器处理过的整个序列,其中部分位置的 token 已被生成器替换。判别器的任务是逐 token 判断该位置是否被替换(二分类),即判断每个 token 是原始真实词还是生成器伪造的。训练目标为二分类交叉熵损失。
协作流程:
-
从输入文本中随机选择 15% 的位置进行掩码。
-
生成器对这些掩码位置进行预测,输出一个分布,采样得到具体的替换 token(可能和原词一样也可能不同)。
-
将生成器填充后的序列送入判别器,判别器对所有 token 预测“是否被替换”。
-
判别器的梯度会反向传播更新自身参数,但不会传给生成器(因为采样操作不可导)。生成器单独用 MLM 损失更新。
ELECTRA 的优势在于效率:判别器对每个 token 都产生监督信号,而不像 MLM 只对被掩码的 15% token 产生信号。因此同等计算量下,ELECTRA 能学习到更丰富的表示,在相同预训练时间下游性能显著超越 BERT。但生成器必须很小(通常为判别器参数量的 1/4~1/2),否则任务太简单,判别器无法学到有用信息。
SpanBERT 的 Span Masking 与 BERT 的随机掩码有什么不同?带来了什么好处?¶
BERT 的随机掩码是在输入中独立地选择 15% 的 token 进行掩码,这可能会破坏完整的语义单元(如实体、短语)。SpanBERT 提出连续片段掩码(Span Masking):随机选择一段连续的文本跨度(span)进行掩码,而不是随机独立的 token。具体做法是每次从几何分布中采样一个跨度长度(如平均长度 3.8),然后将该跨度内的所有 token 替换为 [MASK] 或 [MASK] 序列。
好处:
-
更符合语言结构:自然语言中许多信息由词组、实体表达,单独掩码单个词往往可从局部词性恢复,而掩码整个片段迫使模型理解更长的上下文和句间关系来推断缺失内容。
-
提升抽取式任务性能:在问答、命名实体识别等需要预测实体边界的任务中,SpanBERT 通过显式建模片段级别的缺失,使模型更善于理解实体的边界和上下文。
-
辅助的 Span Boundary Objective(SBO):SpanBERT 还增加了边界目标损失,使用被掩码片段两侧的 token 表示来预测片段内的每个 token,而不依赖片段内的 token 本身。这促使模型学习组合整个上下文的语义,而不是依赖局部共现。SBO 和 MLM 联合训练,显著提升了在阅读理解、指代消解等任务上的效果。
实验表明,SpanBERT 在抽取式问答(如 SQuAD)、关系抽取、共指消解等任务上大幅度超越 BERT,尤其在需要理解实体关系的下游任务上提升明显。
在多语言预训练中,MLM 和 Translation Language Modeling (TLM) 是如何结合的?¶
多语言预训练(如 XLM、XLM-R)需要让模型同时学习单语和跨语言表示。MLM 在多语言场景下正常使用,但辅以TLM(翻译语言建模),它们共同训练,共享参数。
TLM 的具体做法:
-
构造平行语料(如两个互译的句子对),将两个句子拼接作为输入。
-
随机在源语言句子和目标语言句子的任意位置进行掩码(可以只在一侧,也可以两侧同时),然后训练模型预测被掩码词。
-
因为两个句子互为翻译,模型必须利用一侧的上下文来推断另一侧被掩码的词,这会强制模型学习跨语言对齐。例如源语言句子掩码了一个词,模型可以借助目标语言句子中的对应翻译线索来恢复它。
训练结合方式:
-
通常在一个批次中混合单语 MLM 样本和双语 TLM 样本。单语 MLM 学习各语言的独立表示,TLM 学习跨语言对齐。
-
XLM 模型交替训练 MLM 和 TLM,或者将两者联合在同一个损失函数中。
-
这种结合让模型在无监督机器翻译、跨语言分类等任务上获得强大的零样本迁移能力。后来的 XLM-R 虽然放弃了 TLM 而仅用 MLM 加更大规模数据,但早期工作表明 TLM 对低资源语言的对齐特别有效。
TLM 的局限在于必须依赖平行语料,而 MLM 仅需单语数据。因此在资源受限时,TLM 是提升跨语言能力的利器;数据量极大时,纯 MLM 也能通过海量多语言共现学到跨语言对齐(隐式对齐)。
预训练任务的设计对下游任务性能影响巨大,设计一个针对代码理解的新预训练任务,你会考虑哪些?¶
针对代码理解的特点(结构化、长距离依赖、执行语义),可以设计一个多任务预训练框架,结合以下任务:
- 代码片段掩码与替换检测(类似 ELECTRA,但更懂语义)
-
随机掩码代码中的 token(保留语法结构),训练生成器预测,再用判别器判断 token 是否被替换。针对代码中常见的变量、函数名替换,让模型学习变量绑定和语义一致性。
-
执行语义预测
-
给定一段代码和输入状态,预测执行后的输出或中间状态的变化。这可让模型学习程序的执行语义而非表面语法。可以通过程序合成或测试用例自动获得标签。
-
代码结构边界的跨度掩码(Span Masking for Code)
-
掩码完整的代码块(如 for 循环、函数体),迫使模型根据上下文推断缺失的整个结构,学习代码的长距离依赖和嵌套关系。
-
代码翻译任务(Code-to-Code Translation)
-
在不同编程语言之间翻译函数,可结合平行语料或通过编译器的中间表示(IR)进行监督,强化跨语言代码理解。
-
代码-文档对齐任务
-
类似图文匹配,判断一段代码和注释/文档是否匹配。负样本可通过替换函数名或打乱注释构造。这有助于下游文档生成和代码搜索。
-
数据流分析预测
- 掩码掉变量使用位置,让模型推断该变量最后一次赋值的位置或可能的值,模拟静态分析。
这些任务联合训练,让模型同时掌握语法、语义、跨语言映射和文档理解,对代码补全、缺陷检测、代码摘要等下游任务会有显著提升。
预训练数据中,截断文档、随机打乱句子、跨文档采样等策略,分别对模型造成什么影响?¶
-
截断文档(Truncating) 通常因最大长度限制,长文档被截断,导致文档剩余部分的信息丢失,且模型无法学习到跨整个文档的超长依赖。这可能使模型在需要长程上下文的任务(如长文本分类、长文档问答)上表现不佳。优点是简单,不增加序列长度负担。改进方法包括滑动窗口处理、后处理拼接,或使用递归记忆机制。
-
随机打乱句子(Sentence Shuffling) 若在预训练时随机打乱句子顺序(或部分打乱),会破坏文档的连贯性和篇章结构,使得模型难以学到句子间的逻辑关系(如因果、转折、时间顺序)。这会对自然语言推理、摘要等任务产生负面影响。但适当的句子打乱(如 ALBERT 的 SOP)可以作为训练目标,教会模型识别句子顺序,提升句子级推理能力。
-
跨文档采样(Cross-document Sampling / Packing) 将多个短文档拼接在一起,中间用特殊分隔符隔开,以填充序列长度。这能大幅提升计算效率(减少 padding 浪费),并让模型学到“文档边界”的概念(通过分隔符和注意力掩码)。但如果分隔符不统一或训练时没有使用正确的自注意力掩码阻止不同文档之间的注意力,则可能引入跨文档噪声,降低单文档理解性能。现代实践通常使用特殊 token 分隔并配合注意力掩码实现高效且无损的跨文档采样。
总的来说,数据构造策略需要在效率、上下文长度和语义完整性之间权衡。RoBERTa 移除 NSP 后,采用跨文档采样并允许文档跨越样本边界,提升了效率且并未损害性能;但在很多情况下,保留文档内完整的句子顺序对下游生成和理解任务仍至关重要。
为什么 MLM 和 AR 预训练不能同时进行?有没有尝试结合的方法?¶
MLM(自编码)和 AR(自回归)在目标函数本质上存在冲突:
-
MLM 着眼于双向上下文,目的是重建被破坏的输入,学习全局依赖,适用于理解任务。
-
AR 着眼于单向上下文,学习从左到右的生成概率,适用于生成任务。
如果简单地联合训练,双向上下文的存在会泄露未来信息,违背自回归的因果约束,导致生成任务无法正常优化(因为 AR 损失要求看不到未来 token)。因此二者不能直接同时进行。
结合的方法:
-
XLNet 的排列语言模型(Permutation Language Model) 通过对输入进行随机排列,在自回归框架下实现某种“双向”学习:在预测某个 token 时,其上下文来自排列中前面的 token(可能是原始序列中该位置之后的部分)。这样既保持了自回归的因果性,又利用了双向信息。但本质上它仍是自回归的一种变体。
-
UniLM(Unified Language Model) 使用不同的自注意力掩码矩阵在同一模型中同时实现 MLM(双向)和 AR(单向)训练。在预训练时,一部分 batch 使用双向掩码做 MLM,另一部分使用因果掩码做自回归生成。通过共享权重,模型同时获得双向理解和单向生成能力。UniLM 在自然语言理解和生成任务上都取得了良好效果。
-
GLM(General Language Model) 改进自回归空白填充,将文本中挖掉的片段(span)自回归生成,未掩码部分保持双向上下文,实现了理解和生成的统一。这种方式巧妙地在空白填充任务中结合了双向编码和自回归解码。
-
多任务交替训练 简单地将 MLM 和 AR 作为两个预训练任务交替训练,或在一个 batch 内混合,也可使模型兼具两种能力,但需要仔细平衡损失和训练动态,避免能力竞争导致的下滑。
总之,MLM 和 AR 的结合可以产生更通用的预训练模型,但需要精心设计训练范式和掩码策略来解决双向因果冲突。
全词掩码(Whole Word Masking)和字级别掩码对中文预训练的影响分别是什么?¶
在中文预训练中,因为中文没有天然的空格分词边界,掩码策略对语义学习影响显著。
-
字级别掩码(Character-level Masking) 随机掩码单个汉字。这会迫使模型在恢复掩码字时依赖周围的字,甚至可能通过局部 n-gram 信息补全(例如“苹”后面经常跟“果”)。这可能导致模型学到过多局部共现,而忽略词级别的语义实体。对于一些需要词边界和实体理解的复杂任务,字级别掩码的语义信号较弱。
-
全词掩码(Whole Word Masking, WWM) 先对文本进行分词(如用 jieba 分词),然后在掩码时,如果一个词内的某个字被选中掩码,则该词内的所有字一起被掩码。这种策略使掩码粒度更符合语义单元,模型必须依靠更远的上下文或全局语义来预测整个词,而不是简单的字间搭配。实验表明,全词掩码在中文文本分类、阅读理解、命名实体识别等下游任务上一致优于字级别掩码,且提升幅度较为显著。
原因:全词掩码促使模型学习更丰富的词级和上下文表示,减少模型对简单字面搭配的记忆。但它的分词依赖外部分词器,可能引入分词错误传播。然而总体收益远大于风险,因此现代中文预训练模型(如 BERT-wwm、ERNIE、RoBERTa-wwm-ext)广泛采用了全词掩码。
动态掩码与静态掩码的区别?RoBERTa 为什么采用了动态掩码?¶
-
静态掩码:在数据预处理阶段,对每个样本只生成一次掩码,并将掩码后的样本固定下来。在训练的每个 epoch 中,模型看到的是完全相同的掩码模式。BERT 原始实现即是静态掩码。
-
动态掩码:每次将一个样本送入模型训练时,都重新随机生成掩码。也就是说,同一个句子在不同 epoch 或不同 batch 中可能被掩码不同的位置。RoBERTa 采用了这种策略。
RoBERTa 采用动态掩码的原因:
-
避免掩码模式过拟合:静态掩码下,模型可能在多次迭代中记住某些固定位置的掩盖,导致对训练数据的过拟合,降低泛化能力。动态掩码增加了数据多样性,相当于对输入做了隐式数据增强。
-
更充分利用数据:由于掩码每次都不同,模型必须学会依赖上下文而不是特定位置的记忆,这提高了表示鲁棒性。
-
提升下游性能:RoBERTa 论文实验表明,动态掩码相比静态掩码在多个下游任务上带来了稳定的提升。这部分是由于前两个原因,让预训练更加充分。
实现差异:动态掩码在数据加载时即时生成,稍微增加了训练时的计算开销,但通常可以忽略不计。现代预训练模型基本都沿用了动态掩码策略。