BERT相关知识自测

✅ 1. BERT 分为哪两种预训练任务?各自的作用是什么?

BERT 在预训练阶段使用两个无监督任务:

  1. Masked Language Model (MLM) ------ 掩码语言模型

    • 做法 :随机选择输入序列中 15% 的 token ,要求模型根据上下文预测这些位置的原始 token
      • 其中 80% 替换为 [MASK]
      • 10% 替换为随机 token
      • 10% 保持不变
    • 作用 :实现双向上下文建模,让模型学习词汇级别的语义表示。
  2. Next Sentence Prediction (NSP) ------ 下一句预测

    • 做法:输入两个句子 A 和 B,判断 B 是否是 A 的下一句(50% 是,50% 否)。
    • 作用:学习句子间关系(如连贯性、逻辑),提升问答、自然语言推理等任务表现。

⚠️ 注:后续研究(如 RoBERTa)发现 NSP 效果有限,许多改进模型已移除。


✅ 2. 在计算 MLM 预训练任务的损失函数时,参与计算的 Tokens 有哪些?是全部的 15% 的词汇,还是其中真正被 [MASK] 的那些 tokens?

答案:是被选中用于 MLM 任务的全部 15% 的 tokens,无论它们在输入中是否显示为 [MASK]

详细说明:

  • BERT 随机选择 15% 的 token 作为 MLM 的预测目标。
  • 对这 15% 的 token,输入可能被替换为 [MASK]、随机 token,或保持不变。
  • 但模型的目标是:预测这些位置的原始 token
  • 因此,这 15% 的 token 全部参与损失计算

✅ 关键:参与损失的是"被选中用于预测的 token ",不是"输入中为 [MASK] 的 token"。


✅ 3. 在实现损失函数的时候,怎么确保没有被选中用于 MLM 的 token 不参与到损失计算中去?

通过 labels 张量中的 ignore_index 机制 实现。

实现方式:

  1. 构造一个 labels 张量,形状与模型输入相同。
  2. 对于未被选中用于 MLM 的 token ,将其 label 设为 -100
  3. 对于被选中用于 MLM 的 15% 的 token,保留其原始 token ID。
  4. 使用 nn.CrossEntropyLoss(ignore_index=-100),PyTorch 会自动忽略 -100 位置的损失。

代码示例:

复制代码

Python

编辑

复制代码
loss_fn = nn.CrossEntropyLoss(ignore_index=-100)
loss = loss_fn(logits.view(-1, vocab_size), labels.view(-1))  # 只计算 15% 的损失

✅ 这样确保只有那 15% 的预测目标参与反向传播。


✅ 4. BERT 的三个 Embedding 为什么可以直接相加?(Token + Segment + Position)

因为:

  1. 维度一致:三者都是 �_modeld_model 维向量(如 768),可以直接相加。
  2. 线性可分性:Transformer 的自注意力机制能够从相加后的向量中"解耦"出不同信息。
  3. 位置编码的传统:Transformer 原始论文使用可学习或正弦位置编码,均采用相加方式。
  4. 实验有效:相比拼接(concat),相加更简洁、参数更少,且效果不差。
  5. 模型可学习:后续的 Attention 和 FFN 层会自动学习如何利用这些融合信息。

✅ 本质上:相加是一种高效、可学习的多源信息融合方式。


✅ 5. BERT 的优缺点分别是什么?

✅ 优点:
  • 双向上下文建模:通过 MLM 实现真正的双向编码。
  • 上下文相关表示:同一词在不同语境下有不同表示。
  • 预训练 + 微调范式:适用于多种 NLP 任务,无需复杂特征工程。
  • 强大的迁移能力:在多项任务上取得 SOTA。
  • 结构简洁:纯 Transformer Encoder,易于扩展。
❌ 缺点:
  • NSP 任务无效:RoBERTa 发现 NSP 对性能帮助不大。
  • 静态 masking(早期):预训练时 masking 固定,缺乏多样性(可通过动态 masking 解决)。
  • [MASK] 标记不一致 :预训练用 [MASK],微调时没有,导致分布偏移(通过 10% 不替换缓解)。
  • 计算资源消耗大:尤其是 BERT-Large。
  • 不擅长生成:是 Encoder-only 模型,无法自回归生成。

✅ 6. 你知道有哪些针对 BERT 的缺点做优化的模型?

模型 针对的缺点 改进点
RoBERTa NSP 无效、静态 masking、训练不足 去掉 NSP、动态 masking、更大 batch、更多数据
ALBERT 参数量大、内存消耗高 参数共享、嵌入分解、支持更大模型
DistilBERT 模型大、推理慢 知识蒸馏,6 层小模型,速度快,性能高
SpanBERT 无法建模短语/片段 引入 span masking,更好恢复名词短语
ELECTRA MLM 效率低(只预测 15%) 使用"替换检测"任务,判别式训练,更高效
DeBERTa 未充分利用 token 和位置 分解 attention,显式建模 token 和位置关系

✅ 7. BERT 怎么用在生成模型中?

BERT 本身是 Encoder-only 模型不能直接用于自回归生成(如 GPT 那样逐词生成),但可通过以下方式用于生成任务:

  1. 作为 Encoder + 外接 Decoder

    • 例如:在问答、摘要任务中,用 BERT 编码输入,接一个 Transformer Decoder 生成答案。
    • 类似 BART、T5 的思想。
  2. 提供上下文表示

    • 在生成模型中,将 BERT 的输出作为额外特征输入到生成器中,提升生成质量。
  3. 完形填空式生成

    • 用于短文本补全,如 The capital of France is [MASK]. → 生成 Paris
    • 但这不是真正的长文本生成。
  4. 统一建模架构(如 UniLM)

    • 修改注意力掩码,让 BERT 支持单向生成,实现"统一语言模型"。

✅ 总结:BERT 本身不生成 ,但可作为强大编码器服务于生成系统


🎯 总结:术语统一与逻辑一致性

易混淆术语 正确定义
"被 mask" 在损失计算中,指"被选中用于 MLM 预测的 15% 的 token",不是"输入中为 [MASK] 的 token"
参与损失的 token 是那 15% 的预测目标,其余 85% 通过 ignore_index=-100 忽略
MLM 目标 预测原始 token,无论输入中是 [MASK]、随机词,还是原词
相关推荐
flying_13146 小时前
自然语言处理分享系列-词语和短语的分布式表示及其组合性(一)
自然语言处理·nlp·word2vec·softmax·skip-gram·hierarchical·分层softmax
AI新兵13 小时前
AI大事记12:Transformer 架构——重塑 NLP 的革命性技术(上)
人工智能·自然语言处理·transformer
JAVA学习通14 小时前
PostgreSQL 的 hstore、arrays 数据类型
人工智能·自然语言处理
东方芷兰17 小时前
LLM 笔记 —— 08 Embeddings(One-hot、Word、Word2Vec、Glove、FastText)
人工智能·笔记·神经网络·语言模型·自然语言处理·word·word2vec
2401_841495641 天前
【自然语言处理】“bert-base-chinese”的基本用法及实战案例
人工智能·python·自然语言处理·bert·文本预处理·特征提取·训练验证
金井PRATHAMA1 天前
语义与认知中的循环解释悖论及其对人工智能自然语言处理的深层语义分析的影响和启示
人工智能·自然语言处理·知识图谱
空白到白1 天前
NLP-注意力机制
人工智能·自然语言处理
东方芷兰2 天前
LLM 笔记 —— 04 为什么语言模型用文字接龙,图片模型不用像素接龙呢?
人工智能·笔记·深度学习·语言模型·自然语言处理
siliconstorm.ai2 天前
阿里下场造“机器人”:从通义千问到具身智能,中国AI正走向“实体化”阶段
人工智能·自然语言处理·chatgpt·机器人·云计算