14.8.5 预训练任务
BERT的任务是构建一个通用的模型,那么在NLP里面,语言模型(看一些词,预测下一个词)显然是最通用的,所以我们将BERT训练成一个语言模型,即带掩码的语言模型。但是Transformer是双向的,而语言模型是单向的,这显然就不能直接训练,于是这就是我们带掩码的原因。<mask>
就是我们要填写的词,相当于完形填空,此时就不是预测未来了,所以看双向信息是没问题的
那么书上的<mask>
那一段到底是为什么要这么换呢?
在BERT的掩蔽语言模型训练中,“要预测一个掩蔽词元而不使用标签作弊”指的是:
如果直接将被掩盖的词元保留在输入中(例如,输入是原句“this movie is great”,而标签是“great”),模型可能会直接“偷看”输入中的原词元来预测,而非真正学习上下文关系。这种依赖输入中的原始词元信息的行为称为“标签作弊”。
为了避免这种情况,BERT采用以下方法:
- 始终用“<mask>”替换被掩盖的词元(如将“great”替换为“this movie is <mask>”)。
- 此时,输入中不再包含被掩盖词元的原始信息,迫使模型必须通过双向上下文(如“this movie is”和周围词元)来推断被掩盖的词元。
但为了避免模型过度依赖“<mask>”标记(因为实际下游任务中不会有“<mask>”),BERT进一步引入:
- 80%时间用“<mask>”
- 10%时间用随机词元(如“this movie is drink”)
- 10%时间保留原词元(如“this movie is great”)
这种策略既防止了标签作弊(通过掩盖原词元),又通过随机噪声增强了模型的鲁棒性,使其更专注于上下文推理而非标记本身。
在BERT的掩蔽语言模型训练中,“过度依赖<mask>标记” 指模型在训练过程中可能形成以下依赖模式:
- 仅在有<mask>标记时进行预测:若训练时所有被掩盖的词元都被替换为<mask>(如“this movie is <mask>”),模型可能仅在输入中存在<mask>时激活预测能力,而忽略上下文的全局推理。也就是模型可能只有在看到
<mask>
标记的时候才努力预测,剩下的情况就水一水 - 无法泛化到真实场景:实际下游任务(如文本分类、问答)中,输入文本不会包含<mask>标记。若模型仅通过<mask>触发预测逻辑,在无<mask>的输入中将难以有效推理。
为何需要避免这种依赖?
BERT通过以下策略打破模型对<mask>的机械性依赖:
- 80%时间使用<mask>:确保模型主要学习通过上下文推断被掩盖的词元。
- 10%时间替换为随机词元(如“this movie is drink”):
- 迫使模型区分错误词元(如“drink”与上下文不匹配),强化上下文理解。
- 10%时间保留原词元(如“this movie is great”):
- 防止模型因完全看不到原词元而过度拟合<mask>模式,同时让模型学会“不总是需要修改输入”。
核心目标
通过引入随机性和保留原词元,模型被强制关注全局上下文,而非仅依赖<mask>标记的存在。这种设计使BERT在预训练后能灵活适应各类下游任务(即使没有<mask>),真正实现“通过上下文理解语义”的能力。
注意,在BERT引入的三种方法中,无论是哪种方法,模型始终都知道要预测的词的位置(比如上文举的例子的三种情况,模型知道预测的词分别是<mask>
,drink
和great
)
那么除了语言模型,另一个预训练任务就是下一个句子预测
这两个数据一个是正例一个是负例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2024-03-04 XOR Break — Solo Version
2024-03-04 回家路线