BERT框架:自然语言处理的革命性突破

引言

在自然语言处理(NLP)领域,2018年Google推出的BERT(Bidirectional Encoder Representations from Transformers)框架无疑是一场革命。作为基于Transformer架构的双向编码器表示模型,BERT通过预训练学习丰富的语言表示,并在各种NLP任务中取得了显著的成绩。本文将详细介绍BERT的核心原理、技术特点以及实际应用。


一、BERT框架简介

BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer编码器的预训练语言模型。与传统的单向语言模型(如GPT)不同,BERT采用双向结构,能够同时考虑文本中的上下文信息,从而更准确地捕捉语义特征。

1. 模型结构

BERT基于Transformer的编码器部分,主要由以下组件构成:

  • 自注意力机制(Self-Attention):通过计算词与词之间的匹配程度,动态分配权重,捕捉上下文关系。
  • 多头注意力机制(Multi-Head Attention):使用多组注意力头(通常为8个)生成多种特征表达,增强模型的表达能力。
  • 前馈神经网络(Feed Forward Network):对注意力机制的输出进行进一步处理。
  • 位置编码(Positional Encoding):通过三角函数为词向量添加位置信息,解决Transformer无法直接处理序列顺序的问题。
    在这里插入图片描述

2. 预训练任务

BERT通过两个无监督任务进行预训练:

  • 遮蔽语言模型(Masked Language Model, MLM):随机遮蔽输入句子中15%的词汇,让模型预测被遮蔽的词。例如:

    输入:我 [MASK] 天 去 [MASK] 试
    预测:今, 面
    
  • 下一句预测(Next Sentence Prediction, NSP):判断两个句子是否连续。例如:

    输入:[CLS] 我 今天 去 面试 [SEP] 准备 好 了 简历 [SEP]
    标签:Yes
    

3. 双向性

BERT的核心优势在于其双向性。传统模型(如RNN或GPT)只能单向处理文本(从左到右或从右到左),而BERT通过自注意力机制同时考虑前后上下文,显著提升了语义理解能力。


二、BERT的核心技术

1.自注意力机制 self.attention

BERT基于Transformer的编码器部分,其核心是自注意力机制。以下是自注意力的计算流程:
在这里插入图片描述

  1. 输入编码:将词向量与三个矩阵(WQ, WK, WV)相乘,得到查询(Q)、键(K)和值(V)矩阵。
    在这里插入图片描述

  2. 注意力得分计算:通过Q与K的点积计算词与词之间的匹配程度。
    在这里插入图片描述

  3. 特征分配:根据得分对V进行加权求和,得到每个词的最终特征表示。
    在这里插入图片描述

2. 多头注意力机制 multi-headed

通过多组注意力头,BERT能够从不同角度捕捉词与词之间的关系。例如:

  • 一个注意力头可能关注语法关系,另一个可能关注语义关系。
  • 最终将所有头的输出拼接并通过全连接层降维。
    在这里插入图片描述

3. 多层堆叠

BERT的核心是由多层Transformer编码器堆叠而成的深度神经网络结构:
在这里插入图片描述

4. 位置编码

Transformer本身不具备处理序列顺序的能力,因此BERT引入了三角函数位置编码:

  • 公式:
    在这里插入图片描述

pos:指当前字符在句子中的位置(如:”你好啊”,这句话里面“你”的pos=0),

dmodel:指的是word embedding的长度(例“民主”的word embedding为[1,2,3,4,5],则dmodel=5),

2i表示偶数,2i+1表示奇数。取值范围:i=0,1,…,dmodel−1。偶数使用公式,奇数时使用公式。

在这里插入图片描述
word embedding:是词向量,由每个词根据查表得到
pos embedding:就是位置编码。
composition:word embedding和pos embedding逐点相加得到,既包含 语义信息又包含位置编码信息的最终矩阵。

5. Add与Normalize

预训练完成后,BERT可以通过微调适应具体任务,如文本分类、命名实体识别、问答系统等。微调只需在预训练模型的基础上添加任务特定的输出层,并在目标数据集上进行训练。

6.outputs(shifted right)

在这里插入图片描述
outputs(shifted right):指在解码器处理过程中,将之前的输出序列向右移动一位,并在最左侧添加一个新的起始符(如 ‘SOS’ 或目标序列开始的特殊token)作为新的输入。这样做的目的是让解码器在生成下一个词时,能够考虑到已经生成的词序列。
作用:通过“shifted right”操作,解码器能够在生成每个词时,都基于之前已经生成的词序列进行推断。这样,解码器就能够逐步构建出完整的输出序列。

三、BERT的优势与影响

  • 解决RNN的局限性:RNN需要串行计算,训练时间长;BERT通过并行计算大幅提升效率。
  • Word2Vec的静态词向量:Word2Vec生成的词向量无法适应不同语境;BERT通过动态上下文编码解决这一问题。

四、总结

BERT通过双向Transformer架构和预训练任务,彻底改变了NLP领域的游戏规则。它不仅解决了传统模型的诸多局限,还为后续研究奠定了坚实基础。无论是学术研究还是工业应用,BERT都是当今NLP领域不可或缺的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Fifty Project - D31】

结束了一个超级消耗周末,满安排之健身梅溪湖游泳做饭喝酒羽毛球赛 完全力竭了,久久不能恢复过来,暂停健身安排了 端午后再继续 今日完成记录 TimePlan完成情况7:30 - 8:10有氧爬坡√9:00 - 11:…

信息学奥赛一本通 1547:【 例 1】区间和

【题目链接】 ybt 1547:【 例 1】区间和 【题目考点】 1. 线段树 2. 树状数组 【解题思路】 本题要求维护区间和,实现单点修改、区间查询。 解法1:线段树 线段树原理,及实现方法见:洛谷 P3374 【模板】树状数组…

力扣面试150题--求根节点到叶节点数字之和

Day 48 题目描述 思路 我们利用sum这个全局变量来保存总和值,递归函数sum来计算每个根到叶子节点路径所代表的数,由于我们需要遍历到每条根到叶子节点的路径,所有我采取了前序遍历,如果不是叶子节点,就计算到该节点代…

DJI上云API官方demo学习

1、websocket,所在位置如下图,调用的可以用//websocket搜索 2、用到的http客户端,axios 3、很多和后端交互都是走的http请求

uniapp开发小程序,如何根据权限动态配置按钮或页面内容

前言 写了好几个项目,发现小程序对权限控制非常麻烦,于是有了这个想法,但是网上找了一圈没有一个比较完善的讲解,因为小程序不支持自定义指令,所以不能像后台那样方便,于是就将几个博主的想法结合。 思路就…

LSTM+Transformer混合模型架构文档

LSTMTransformer混合模型架构文档 模型概述 本项目实现了一个LSTMTransformer混合模型,用于超临界机组协调控制系统的数据驱动建模。该模型结合了LSTM的时序建模能力和Transformer的自注意力机制,能够有效捕捉时间序列数据中的长期依赖关系和变量间的复…

测量尺子:多功能测量工具,科技改变生活

测量尺子是一款专业的测距仪测量万能工具箱类型手机APP,旨在为用户提供最贴心的测量助手。它拥有和现实测量仪器一样的测量标准,更简单便捷且精准的测量方式,最新AR科技测量更是大大拓宽了可以被测量的高度和深度。无论是日常使用、学习还是工…

结课作业01. 用户空间 MPU6050 体感鼠标驱动程序

目录 一. qt界面实现 二. 虚拟设备模拟模拟鼠标实现体感鼠标 2.1 函数声明 2.2 虚拟鼠标实现 2.2.1 虚拟鼠标创建函数 2.2.2 鼠标移动函数 2.2.3 鼠标点击函数 2.3 mpu6050相关函数实现 2.3.1 i2c设备初始化 2.3.2 mpu6050寄存器写入 2.3.3 mpu6050寄存器读取 2.3.…

深入浅出 Python Testcontainers:用容器优雅地编写集成测试

在现代软件开发中,自动化测试已成为敏捷开发与持续集成中的关键环节。单元测试可以快速验证函数或类的行为是否符合预期,而集成测试则确保多个模块协同工作时依然正确。问题是:如何让集成测试可靠、可重复且易于维护? 这时&#…

JVM 的垃圾回收器

新生代回收器 通性 会触发StW,暂停所有应用线程复制算法 Serial 单线程回收适合单线程系统 ParNew 多线程回收优先保证响应速度,降低 STW(STW 越大,执行垃圾回收的时间越长,回收的垃圾越多,减少垃圾回…

【笔记】排查并解决Error in LLM call after 3 attempts: (status code: 502)

#工作记录 一、问题描述 在部署运行部署对冲基金分析工具 ai-hedge-fund 时,不断出现以下报错,导致项目运行异常: Error in LLM call after 3 attempts: (status code: 502) Error in LLM call after 3 attempts: [WinError 10054] 远程主…

GO 语言进阶之 Template 模板使用

更多个人笔记见: github个人笔记仓库 gitee 个人笔记仓库 个人学习,学习过程中还会不断补充~ (后续会更新在github上) 文章目录 Template 模板基本示例语法1. 基本输出语法2. 控制结构3. 空白字符控制4. Must函数 Temp…

origin绘图之【如何将多条重叠、高度重叠的点线图、折线图分开】

在日常的数据可视化工作中,Origin 作为一款功能强大的科研绘图软件,广泛应用于实验数据处理、结果展示与论文图表制作等领域。然而,在处理多组数据、特别是绘制多条曲线的折线图或点线图时,常常会遇到这样一个困扰:多条…

Java基础 Day19

一、泛型(JDK5引入) 1、基本概念 在编译阶段约束操作的数据类型,并进行检查 好处:统一数据类型,将运行期的错误提升到了编译期 泛型的默认类型是 Object 2、泛型类 在创建类的时候写上泛型 在创建具体对象的时候…

Gitlab-Runner安装

文章目录 helm方式安装在K8S上参考gitlab CI/CD 文件变量缓存服务器K8S部署 docker镜像mavendocker安装docker buildx minionodehelmkubectlsonar-scanner-cli 问题清除cachehelm执行时无权限 下载镜像失败下载gitlab-runner镜像失败 Gitlab-ci中使用java前端 helm方式安装在K8…

在 Ubuntu linux系统中设置时区的方案

查看时区 在 Ubuntu 系统中,可以通过以下方法查看当前时区设置: 1. 使用 timedatectl 命令(推荐) 在终端运行以下命令: timedatectl输出示例: Local time: Sun 2025-05-25 10:30:00 CST Universal t…

YOLOv8模型剪枝笔记(DepGraph和Network Slimming网络瘦身)

文章目录 一、DepGraph剪枝(1)项目准备1)剪枝基础知识2)DepGraph剪枝论文解读12)DepGraph剪枝论文解读23)YOLO目标检测系列发展史4)YOLO网络架构(2)项目实战(YOLOv8应用DepGraph剪枝+finetune)1)安装软件环境(基础环境、Pytorch、YOLOv8)Windows1)安装软件环境(…

MySQL:11_事务

事务 一.CURD不加控制,会有什么问题? 二.什么是事务? 事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制&#xf…

【notepad++如何设置成中文界面呢?】

“Notepad”是一款非常强大的文本编辑软件,将其界面设置成中文的方法如下: 一、工具/原料: 华为 Matebook 15、Windows 10、Notepad 8.4.6。 二 、具体步骤: 1、找到任意一个文本文件,比如 txt 格式的文…

职坐标嵌入式MCU/DSP与RTOS开发精讲

嵌入式系统开发作为现代智能设备与工业控制的核心技术领域,其架构设计与实现逻辑直接影响系统性能与可靠性。本课程以嵌入式系统架构为切入点,系统化梳理从硬件选型到软件调度的全链路知识体系,重点聚焦微控制器(MCU)与…