AB
AiBoss
Wiki

什么是掩码语言建模(Masked Language Modeling)?

掩码语言建模(Masked Language Modeling,MLM)是一种自监督训练目标:把序列中的部分词元遮住,让模型根据左右两侧的上下文把它们还原出来。Hugging Face 官方文档指出,该目标下模型可以双向关注词元,因此特别适合需要理解整段序列上下文的任务,BERT 就是典型的掩码语言模型。

掩码语言建模(Masked Language Modeling,MLM)是一种自监督的预训练目标:在输入序列中把一部分词元(token)遮挡或替换掉,让模型根据剩余上下文去预测这些被遮住的词元。它要解决的问题是——在没有人工标注的情况下,如何让模型学会对整段文本的上下文理解。按照 Hugging Face 官方文档的描述,掩码语言建模「预测序列中被掩码的词元,并且模型可以双向地关注词元」,也就是说模型对左侧和右侧的词元都有完整访问权限。

为什么重要

在掩码语言建模被广泛采用之前,语言模型的主流做法是自回归式的:从左到右逐词预测下一个词元。这种目标天然只能看到左侧上下文,模型在预测某个位置时无法利用它右边的信息。对于分类、抽取、问答这类需要「读懂整句话」的任务,单向可见性构成了一种结构性限制。

另一条路是依赖人工标注数据做监督训练。但标注成本高、规模受限,很难覆盖足够广泛的语言现象。掩码语言建模的价值在于,它把「标注」这件事从人身上转移到了文本自身:任何一段自然文本都可以自动生成训练信号,只要按规则遮住一部分词元,被遮住的原文就是标签。这样一来,海量无标注语料就能直接用于训练,模型规模和数据规模不再被标注预算卡住。

同时,因为被遮住的词元在预测时对左右两侧都可见,模型被迫学习整段序列的上下文表示,而不是仅仅做一个「接龙」器。Hugging Face 官方文档明确指出,掩码语言建模「非常适合需要理解整段序列上下文的任务」,并把 BERT 列为掩码语言模型的例子。

工作机制

掩码语言建模的核心流程可以拆成以下几个环节。

  1. 分词与掩码。先把原始文本切成词元序列,然后按一定比例随机挑选一部分位置进行遮挡。遮挡通常不是简单删除,而是替换成一个特殊的掩码词元,使序列长度和位置结构保持不变。
  2. 双向编码。被处理过的序列送入编码器。与自回归模型不同,这里的位置之间没有因果可见性限制,每个位置都能同时看到它左边和右边的词元。Hugging Face 官方文档对此的表述是「模型可以双向地关注词元」,即「模型对左侧和右侧的词元都有完整访问权限」。
  3. 预测被遮词元。模型在每个被遮挡的位置上输出一个在整个词表上的分布,训练目标就是让正确词元的概率尽可能高。损失通常只在被遮挡的位置上计算,未被遮挡的位置不参与或只以较小权重参与。
  4. 微调与推理。预训练完成后,编码器部分可以迁移到下游任务上做微调。Hugging Face 官方文档给出的示例流程是:先在数据集上微调一个掩码语言模型,再用微调后的模型做推理。

需要区分的是「训练目标」和「下游用途」两个层面。掩码语言建模本身是一个预训练目标,它的直接产物是一个能还原被遮词元的模型;而它在实际系统中的常见角色,是作为下游任务的初始化权重来源。Hugging Face 官方文档也把「查看与该任务兼容的所有架构和检查点」指向了任务页面,说明这一目标在生态中被当作一类独立任务来组织。

典型例子

Hugging Face 官方文档给出的完整示例,是在 ELI5 数据集的一个子集上微调 DistilRoBERTa,然后用微调后的模型做推理。文档中提到的具体数据操作包括:

  • 使用数据集库加载 ELI5-Category 数据集,并只取训练集中的前 5000 条作为实验规模,文档说明这样做的目的是「在花更多时间训练完整数据集之前,先有机会做实验并确认一切正常」。
  • 用 train_test_split 方法把训练划分拆成训练集和测试集,其中测试集比例为 0.2。
  • 文档展示了一条样例数据,字段包括 q_id、title、selftext、category、subreddit 以及 answers,其中 answers 又包含 a_id 和 text 两个子字段。
  • 文档建议先安装 transformers、datasets、evaluate 这几个库,并鼓励登录 Hugging Face 账号以便上传和分享模型。

在模型层面,文档明确把 BERT 作为掩码语言模型的例子。这说明掩码语言建模并不是某一个模型的专有方法,而是一类被多种编码器架构采用的训练目标。

边界与常见误解

它不是万能的预训练目标。掩码语言建模擅长的是需要理解整段序列上下文的任务,这一点在 Hugging Face 官方文档中有明确表述。但文档并没有声称它适用于所有任务类型,尤其是那些天然需要逐词生成的任务,双向可见性反而与生成过程的自回归性质不匹配。

「双向」不等于「没有方向性代价」。模型在预测被遮词元时能看到左右两侧,这是它的优势来源;但这也意味着它不能直接拿来做标准的从左到右文本生成。把掩码语言模型当作通用生成器使用,是一种常见的误用。

掩码比例和掩码方式是需要选择的超参数。遮多少、怎么遮,会直接影响训练信号的难度和分布。素材中没有给出具体的最优比例数值,因此不应臆断某个具体数字是标准做法。

微调示例的规模不代表完整训练规模。Hugging Face 官方文档在示例中只取了前 5000 条数据,并明确说明这是为了先做实验、确认流程可用,之后再考虑在完整数据集上花更多时间训练。把示例中的 5000 条和 0.2 的测试集比例当成推荐配置,是对文档意图的误读。

它不等于「完形填空」这一种交互形式。掩码语言建模是训练目标层面的机制,虽然它的推理表现看起来像在填空,但它的主要产出是可供下游迁移的表示,而不是一个填空应用本身。

参考资料