当前位置: 首页 > news >正文

BERT(Bidirectional Encoder Representations from Transformers)模型详解

一、BERT 简介

BERT(Bidirectional Encoder Representations from Transformers)是由 Google 在 2018 年提出的一种预训练语言表示模型。它基于 Transformer 编码器结构,首次提出了 双向上下文建模 的方法,大幅度提升了自然语言处理(NLP)任务的表现。

传统的语言模型(如 RNN、LSTM)多是 单向建模,只能从左到右或从右到左学习语义。而 BERT 通过 Mask Language Model (MLM) 技术,使得模型能够同时利用 前文和后文信息,达到深度双向表示的效果。

二、BERT 的模型结构

BERT 的核心是 多层 Transformer Encoder,每一层由以下部分组成:

  • 输入嵌入层(Input Embedding)

    • Token Embedding:词的向量表示。

    • Segment Embedding:表示句子对中的句子 A 或 B。

    • Position Embedding:位置编码,用于保留词序信息。

    输入向量表示为:E = E_{\text{token}} + E_{\text{segment}} + E_{\text{position}}

  • 多头自注意力层(Multi-Head Self-Attention)
    与 Transformer Encoder 一致,计算公式为:

    \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V
  • 前馈神经网络(Feed Forward Network, FFN)

    \text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2
  • 残差连接 + 层归一化(Residual Connection + LayerNorm)

三、BERT 的预训练任务

BERT 通过 大规模语料预训练 + 下游任务微调 的方式工作。其预训练包含两大任务:

1. Masked Language Model (MLM)

在输入句子中,随机遮盖 15% 的词,然后让模型预测这些被遮盖的词。
例如:

  • 输入:"I love [MASK] learning"

  • 预测:"I love machine learning"

其损失函数为交叉熵:

\mathcal{L}_{\text{MLM}} = - \sum_{i \in M} \log P(w_i | w_{\setminus M})

其中 M 表示被 Mask 的位置,w_{\setminus M}​ 表示上下文。

2. Next Sentence Prediction (NSP)

给定两句话,预测第二句是否是第一句的真实后续。

  • 正样本:句子 B 紧跟句子 A。

  • 负样本:句子 B 来自语料中的随机句子。

其损失函数为二分类交叉熵:

\mathcal{L}_{\text{NSP}} = - \big[ y \log P(\text{IsNext}) + (1-y) \log (1 - P(\text{IsNext})) \big]

四、BERT 的训练与微调

  1. 预训练阶段

    • 使用大规模语料(BooksCorpus, Wikipedia)进行训练。

    • 学习通用的语言表示。

  2. 微调阶段

    • 将预训练好的 BERT 模型参数作为初始化。

    • 根据具体任务(文本分类、问答、命名实体识别等)在最后接入不同的输出层,并在小规模任务数据上训练。

五、BERT 的应用场景

  • 文本分类(情感分析、新闻分类)

  • 问答系统(SQuAD 竞赛表现优异)

  • 命名实体识别(NER)

  • 自然语言推理(NLI)

  • 机器翻译、对话系统

六、总结

  • BERT 基于 Transformer Encoder 架构,采用 双向上下文建模

  • 通过 MLM + NSP 的预训练任务,使模型学到深层语义表示。

  • 在多个 NLP 下游任务上达到 SOTA(state-of-the-art)表现。

BERT 的提出是 NLP 领域的里程碑,为后续的 RoBERTa、ALBERT、DistilBERT 等改进模型奠定了基础。

http://www.dtcms.com/a/348107.html

相关文章:

  • 2.7 提示词调优编码实战(二)
  • 2025年8月第3周AI资讯
  • 将C++资源管理测试框架整合到GitLab CI/CD的完整实践指南
  • Ansible自动化配置
  • 手写MyBatis第31弹-用工厂模式重构MyBatis的SqlSession创建过程
  • 小迪安全v2023学习笔记(七十一讲)—— Python安全反序列化反编译格式化字符串安全
  • 深入解析MyBatis中#{}和${}的区别与应用场景
  • Implementing Redis in C++ : E(AVL树详解)
  • spring源码之事务篇(事务管理器整个流程)
  • 笔记 | Anaconda卸载重装
  • Hyperledger Fabric官方中文教程-改进笔记(十五)-从通道中删除组织
  • 【机器学习】3 Generative models for discrete data
  • HTML网页游戏五子棋
  • 电路学习(四)二极管
  • Spring框架相关面试题
  • 【机器学习】4 Gaussian models
  • 【网络运维】Shell 脚本编程:while 循环与 until 循环
  • Python自学笔记11 Numpy的索引和切片
  • Shell脚本-expect
  • VirtualBox安装openEuler24.03
  • 【C++】函数返回方式详解:传值、传引用与传地址
  • 校园跑腿小程序源码 | 跑腿便利店小程序 含搭建教程
  • 如何在 Ubuntu 上安装和配置 Samba ?
  • 2025年渗透测试面试题总结-30(题目+回答)
  • Java 20 新特性及具体应用
  • Cisdem Video Converter for mac 优秀的视频格式转换工具
  • 夜间跌倒检测响应速度↑150%!陌讯多模态骨架追踪算法在智慧养老院的落地实践
  • 埃氏筛|树dfs|差分计数
  • JVM OOM问题排查与解决思路
  • Meta AI 剧变:汪滔挥刀重组,Llama 开源路线告急,超级智能梦碎还是重生?