BERT模型基本原理及实现示例

  BERT(Bidirectional Encoder Representations from Transformers)是Google在2018年提出的预训练语言模型,其核心思想是通过双向Transformer结构捕捉上下文信息,为下游NLP任务提供通用的语义表示。

一、模型架构

  BERT基于Transformer的编码器(Encoder)堆叠而成,摒弃了解码器(Decoder)。每个Encoder层包含:

  自注意力机制(Self-Attention):计算输入序列中每个词与其他词的关系权重,动态聚合上下文信息。
前馈神经网络(FFN):对注意力输出进行非线性变换。
残差连接与层归一化:缓解深层网络训练中的梯度消失问题。

  与传统单向语言模型(如GPT)不同,BERT通过同时观察左右两侧的上下文(双向注意力)捕捉词语的完整语义。

二、预训练任务

  BERT通过以下两个无监督任务预训练模型:

1.遮蔽语言模型(Masked Language Model, MLM)

  训练过程中,输入句子中一部分词会被 (MASK) 标记替换,模型需根据上下文信息预测这些被遮蔽的词。这种任务迫使模型在训练时同时考虑文本前后信息,学习更丰富的语言表征。具体操作是,随机选择 15% 的词汇用于预测,其中 80% 情况下用 (MASK) 替换,10% 情况下用任意词替换,10% 情况下保持原词汇不变。

2.下一句预测(Next Sentence Prediction, NSP)

  旨在训练模型理解句子间的连贯性。训练时,模型接收一对句子作为输入,判断两个句子是否是连续的文本序列。通过该任务,模型能学习到句子乃至篇章层面的语义信息。在实际预训练中,会从文本语料库中随机选择 50% 正确语句对和 50% 错误语句对进行训练。

三、输入表示

  BERT的输入由三部分嵌入相加组成:

  Token Embeddings:词向量(WordPiece分词)。
Segment Embeddings:区分句子A和B(用于NSP任务)。
Position Embeddings:Transformer本身无位置感知,需显式加入位置编码。

四、微调(Fine-tuning)

  预训练后,BERT可通过简单的微调适配下游任务:

  分类任务(如情感分析):用(CLS)标记的输出向量接分类层。
序列标注(如NER):用每个Token的输出向量预测标签。
问答任务:用两个向量分别预测答案的起止位置。

  微调时只需添加少量任务特定层,大部分参数复用预训练模型。

五、Python实现示例

(环境:Python 3.11,paddle 1.0.2, paddlenlp 2.6.1)

import paddle
from paddlenlp.transformers import BertTokenizer, BertForSequenceClassification# 1. 加载预训练模型和分词器
model_name = 'bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name, num_classes=2)  # 2分类任务# 2. 准备示例数据 (正面和负面情感文本)
texts = ["这部电影太棒了,演员表演出色!", "非常糟糕的体验,完全不推荐。"]
labels = [1, 0]  # 1表示正面,0表示负面# 3. 数据预处理
encoded_inputs = tokenizer(texts, max_length=128, padding=True, truncation=True, return_tensors='pd')
input_ids = encoded_inputs['input_ids']
token_type_ids = encoded_inputs['token_type_ids']# 转换为Paddle张量
labels = paddle.to_tensor(labels)# 4. 模型前向计算
outputs = model(input_ids, token_type_ids=token_type_ids)
logits = outputs# 5. 计算损失和预测
loss_fct = paddle.nn.CrossEntropyLoss()
loss = loss_fct(logits, labels)# 获取预测结果
predictions = paddle.argmax(logits, axis=1)# 打印结果
print("Loss:", loss.item())
print("Predictions:", predictions.numpy())
print("True labels:", labels.numpy())

在这里插入图片描述



End.

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

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

相关文章

NPM组件包 json-cookie-csv 等窃取主机敏感信息

【高危】NPM组件包 json-cookie-csv 等窃取主机敏感信息 漏洞描述 当用户安装受影响版本的 json-cookie-csv 等NPM组件包时会窃取用户的主机名、用户名、工作目录、IP地址等信息并发送到攻击者可控的服务器地址。 MPS编号MPS-xo1f-4kue处置建议强烈建议修复发现时间2025-07-…

【Netty+WebSocket详解】WebSocket全双工通信与Netty的高效结合与实战

一、 Netty网络框架、WebSocket协议基础 1.1 Netty网络框架介绍 1.2 WebSocket简介 1.3 WebSocket握手流程 二、为什么选择NettyWebSocket? 三、NettyWebSocket与Spring WebSocket 3.1 架构层级对比 3.2 核心组件差异 3.3 协议支持深度 3.4 性能基准测试 3.5 开发…

5、Vue中使用Cesium实现交互式折线绘制详解

引言 Cesium是一款强大的开源3D地理信息可视化引擎,广泛应用于数字地球、地图可视化等领域。在Vue项目中集成Cesium可以快速构建高性能的地理信息应用。本文将详细介绍如何在Vue项目中实现交互式折线绘制功能,包括顶点添加、临时绘制、距离计算等核心功…

mysql实战之主从复制

原理图理论:一、配置准备每台主机都安装mysql对每台主机都进行对时操作,减少时间误差[rooteveryone ~]# timedatectl set-timezone Asia/Shanghai [rooteveryone ~]# systemctl restart chronyd.service 对每台主机都进行关闭防火墙、上下文等&#xff0…

中望CAD2026亮点速递(5):【相似查找】高效自动化识别定位

本文为CAD芯智库整理,未经允许请勿复制、转载!原文转自:www.xwzsoft.com/h-nd-594.html CAD的相似查找功能主要应用于需要重复操作、标准化控制、一致性检查或复杂模式识别的场景,通过图形相似度算法,快速找到匹配的图…

国产化条码类库Spire.Barcode教程:使用 C# 读取二维码(QR Code)——从图片或数据流解析

二维码已成为现代应用的常见组成部分,广泛应用于用户身份验证、移动支付、商品包装和活动票务等场景。很多使用 C# 开发的系统需要从图像或扫描件中提取二维码信息,因此掌握二维码识别技术显得尤为重要。 为满足这类需求,开发者需要一种既可…

IPSAN 共享存储详解:架构、优化与落地实践指南

一、IPSAN 技术定位与核心价值核心价值对比矩阵:维度IPSANFC-SAN实现方案成本端口成本$500端口成本$2000复用IP网络设备传输距离跨地域(VPN/专线)≤10公里两地三中心架构运维效率SNMP/CLI管理Zone/ALPA管理自动化运维工具链协议标准IETF RFC …

【卫星语音】基于神经网络的低码率语音编解码(ULBC)方案架构分析:以SoundStream为例

摘要 随着深度学习技术的快速发展,基于神经网络的音频编解码技术已成为下一代音频压缩的重要研究方向。本文以Google提出的SoundStream为核心分析对象,深入探讨其在低码率语音编解码领域的创新架构设计和关键技术突破。SoundStream通过全卷积编解码器网络…

技术面试问题总结一

MySQL的几种锁机制一、从锁的粒度角度划分表级锁机制:它是对整张表进行锁定的一种锁。当一个事务对表执行写操作时,会获取写锁,在写锁持有期间,其他事务无法对该表进行读写操作;而当事务执行读操作时,会获取…

Python(一)

基本语法:变量,语法变量类型:不同于Java,C语言,C,Python在创建一个变量的时候,不需要声明变量类型,由编译器自行识别Python语句在只有一个语句的时候语句末尾不需要分号,…

Adaptive AUTOSAR中的Firewall技术:智能汽车网络安全架构的核心

1 防火墙技术基础 1.1 定义与演进历程 防火墙(Firewall)作为一种位于内部网络与外部网络之间的网络安全系统,本质上是依照特定规则允许或限制数据传输的信息安全防护机制。在汽车电子电气架构从分布式向集中式转变的背景下,防火墙技术已从传统的IT领域深度融入Adaptive A…

android闪光灯源码分析

目录 一、APP层源码分析 二,framework层代码分析 ​​​​​​​2.1 binder溯源 这几天撸了android11 aosp闪光灯源码,本着前人栽树后人乘凉的原则,有志于android系统开发的新同学们提供一盏明灯,照亮你们前行。 本人撸代码风格&…

文心一言4.5开源部署指南及文学领域测评

📝个人主页:哈__ 期待您的关注 目录 一、引言 二、文心一言开源模型 2.1 MoE架构 2.2 文心一言MoE架构 三、文心一言稠密模型部署 3.1 产品选择 3.2 环境选择 3.3 Python3.12安装 3.3 PaddlePaddle-GPU安装 3.4 FastDeploy-GPU安装 ​编辑3.…

深入探讨 C++ 中的浮点数数据类型

核心概念:IEEE 754 标准 C 中的浮点数(float, double, long double)在绝大多数现代系统上遵循 IEEE 754 标准。这个标准定义了浮点数在内存中的二进制表示方式、运算规则、特殊值(如无穷大、NaN)等。数据类型与精度 fl…

相机:以鼠标点为中心缩放(使用OpenGL+QT开发三维CAD)

很多软件中(Auto CAD、ODA等)支持以鼠标点为中心进行放缩操作,有什么黑科技吗? 本章节为相机原理和实现的补充内容,支持鼠标放缩时以鼠标点为中心进行放缩。 对应视频课程已上线,欢迎观看和支持~ https:…

​​XAMPP安全升级指南:修复CVE-2024-4577漏洞,从PHP 8.2.12升级至PHP 8.4.10​​

​​1. 背景与漏洞概述​​ 近期,PHP官方披露了一个高危漏洞 ​​CVE-2024-4577​​,该漏洞影响PHP 8.2.x及更早版本,可能导致远程代码执行(RCE)或信息泄露。由于XAMPP默认捆绑的PHP版本(如8.2.12)可能受此漏洞影响,建议用户尽快升级至最新的​​PHP 8.4.10​​(或官…

ES 压缩包安装

以下是 Elasticsearch (ES) 通过 .tar.gz 压缩包安装的详细步骤(适用于 Linux/macOS 系统): 1. 准备工作 1.1 检查系统依赖 Java 环境:ES 需要 JDK,推荐 OpenJDK 11/17(ES 7.x/8.x 兼容版本)。…

RoboRefer:面向机器人视觉-语言模型推理的空间参考

25年6月来自北航、北大和北京智源的论文“RoboRefer: Towards Spatial Referring with Reasoning in Vision-Language Models for Robotics”。 空间参考是实体机器人与三维物理世界交互的基本能力。然而,即使有了强大的预训练视觉-语言模型 (VLM),近期方…

【Unity】MiniGame编辑器小游戏(十)连连看【Link】

更新日期:2025年7月9日。 项目源码:获取项目源码 索引 连连看【Link】一、游戏最终效果二、玩法简介三、正式开始1.定义游戏窗口类2.规划游戏窗口、视口区域3.方块 Block①.定义方块类②.生成方块所有类型③.生成连连看棋盘④.绘制方块阵列4.连线 Line①.点击方块连线②.尝试…

Enable ADB Debugging Before Connect

If you don’t enable Developer Options and turn on USB Debugging before plugging in the cable, adb devices won’t detect the phone because the Android system doesn’t trust the connection yet. Here’s what you need to do step-by-step to fix this:✅ 1. Enab…