Bert预训练任务-MLM/NSP

MLM

        MLM:Masked Language Mode:在每一个训练序列中以15%的概率随机地选中某个token进行MASK,当一个token被选中后,有以下三种处理方式:

  1. 80%的概率被[MASK],如my dog is hairy->my dog is [MASK]
  2. 10%的概率修改为随机的其他token,如my dog is hairy->my dog is apple
  3. 10%的概率修改为随机的其他token,如my dog is hairy->my dog is hairy

        然后再对该位置的MASK进行预测。以上的MLM任务让BERT针对被MASK的token的上下文信息预测目标token。

NSP

        NSP:Next Sentence Prediction,对于每一个训练样例,进行如下操作。

  1. 50%的概率保持原有顺序(标注为lsNext)
  2. 50%的概率后面的句子被替换为文档的其他随机句B(标注为NotNext)。接下来把训练样例输入到BERT模型中,用[CLS]对应的信息去进行二分类。

### 掩码语言模型 (MLM) 和 下一句预测 (NSP) #### MLM 的原理 掩码语言模型(Masked Language Model, MLM)是一种用于预训练的语言建模方法。其核心在于,在输入序列中随机遮盖一定比例的词语,让模型去预测这些被遮盖掉的词。具体来说: - **掩码生成**:将句子A中的一部分词随机选择并遮盖(通常是15%的词),用特殊的掩码符号`[MASK]`替代。同时,一部分被遮盖的词将被替换为随机的其他词(通常是80%的替换概率),另一部分维持原样[^2]。 - **输入构建**:将生成的句子A作为输入传入BERT模型中。模型会对句子A中的每个词进行处理,并尝试预测被遮盖的词。 - **损失计算**:对于每个被遮盖的词,与原始句子中相应的位置进行比较,计算预测词与原始词之间的交叉熵损失。只有被遮盖的词的预测结果会被用来计算损失,其他位置的预测结果则被忽略。 - **反向传播和优化**:根据计算得到的损失,使用反向传播算法更新BERT模型中的参数。 这种机制能够使模型更好地理解上下文关系,因为模型不仅依赖于左侧的信息,还需要考虑右侧的内容来进行预测。 #### NSP 的原理 下一句预测(Next Sentence Prediction, NSP)旨在帮助模型理解两个句子之间是否存在连贯的关系。具体过程如下: - 输入一对连续或不连续的句子对给定模型。 - 如果这对句子确实来自同一文档并且是相邻的,则标记为True;反之,如果它们不是来自同一个地方或者并非紧接在一起,则标记为False。 - 训练目标就是让模型学会区分这两种情况,从而提高其捕捉长距离依赖性的能力。 这种方法有助于增强模型在自然语言推理等任务上的表现力,因为它可以更有效地识别不同片段间的逻辑联系。 #### 各自的优点与局限性 ##### MLM 的优点 - 能够充分利用双向上下文信息来提升单个词汇的理解精度; - 对抗过拟合能力强,由于引入了[MASK]操作增加了数据多样性。 ##### MLM 的局限性 - 需要额外设计复杂的采样策略以保证足够的样本覆盖度; - 实际应用时可能遇到未见过的新模式而难以泛化。 ##### NSP 的优点 - 提升跨句间关联的学习效果,有利于解决涉及多句话的任务如问答系统、对话管理等领域内的挑战; - 增强了模型的整体结构感知能力和篇章级特征提取效率。 ##### NSP 的局限性 - 可能会增加不必要的复杂性和冗余参数量; - 当面对较短文本或是孤立句子的情况下价值有限。 #### 应用场景对比 - **MLM 更适合的应用领域** - 文本填充补全 - 关键字抽取 - 翻译辅助工具 - **NSP 更擅长应对的情况** - 自然语言推断(NLI) - 主题分类/聚类分析 - 复杂语境下的意图解析 综上所述,虽然两者都属于重要的预训练技术手段之一,但在实际部署过程中应依据具体的业务需求合理选用合适的方案[^1]。 ```python # 示例代码展示如何实现简单的MLM功能 import torch from transformers import BertTokenizer, BertForMaskedLM tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertForMaskedLM.from_pretrained('bert-base-uncased') text = "The capital of France is [MASK]." inputs = tokenizer(text, return_tensors="pt") with torch.no_grad(): outputs = model(**inputs) logits = outputs.logits predicted_token_id = logits.argmax(dim=-1).item() print(f"The predicted word is {tokenizer.decode([predicted_token_id])}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世润

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值