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]、随机词,还是原词
相关推荐
Hello.Reader7 小时前
从零构建大语言模型——理解大语言模型 LLM 是什么、应用与训练范式(一)
人工智能·语言模型·自然语言处理
2301_764441337 小时前
OpenClaw框架的多Agent协作系统
人工智能·机器学习·语言模型·自然语言处理·ai编程
Learn Beyond Limits10 小时前
长短期记忆网络|LSTM(Long Short-Term Memory)
人工智能·rnn·深度学习·神经网络·自然语言处理·nlp·lstm
驭风少年君13 小时前
【大语言模型与智能体Agent构建】基础通识
人工智能·语言模型·自然语言处理
Omics Pro13 小时前
首款多模态生物推理大语言模型
人工智能·算法·语言模型·自然语言处理·数据挖掘·数据分析·aigc
Learn Beyond Limits13 小时前
双向循环神经网络|Bi-RNN(Bidirectional Recurrent Neural Networks)
人工智能·rnn·深度学习·神经网络·语言模型·自然语言处理·nlp
F_D_Z14 小时前
NNLM、Word2Vec(CBOW、Skip-gram) 与 BERT:神经网络语言模型的演进与对比
神经网络·bert·word2vec
极光代码工作室14 小时前
基于NLP的电商评论情感分析系统
python·深度学习·自然语言处理·情感分析·文本挖掘
请数据别和我作队15 小时前
基于 DeepSeek API 的 ASR 文本纠错脚本实战:Python 多线程批量处理 JSONL 语音转写数据
开发语言·经验分享·python·自然语言处理·nlp
Jayin_chan16 小时前
大语言模型(LLM)输出机制(方便自己查阅)
人工智能·语言模型·自然语言处理