【深度学习】常见模型-BERT(Bidirectional Encoder Representations from Transformers)(双向编码器表示)

BERT(Bidirectional Encoder Representations from Transformers)

BERT 是什么?

BERT 是 Google 在 2018 年推出的 NLP(自然语言处理)模型,全称 Bidirectional Encoder Representations from Transformers(双向编码器表示)
BERT 采用 Transformer 结构,并使用 双向(Bidirectional)学习方式,与传统的单向语言模型(如 GPT)不同,它能同时利用 上下文信息,提升 NLP 任务的理解能力。


BERT 的关键技术
  1. Masked Language Model(MLM,掩码语言模型)

    • 训练时随机 屏蔽部分单词,让模型通过上下文预测这些被遮挡的词汇。
    • 例如:
      输入I love [MASK] movies.
      目标:模型预测 [MASK] 词应该是 "watching"
  2. Next Sentence Prediction(NSP,下一句预测)

    • 训练时给定两句话,模型需要判断 第二句是否是第一句的真实下一句
    • 例如:
      • 句子 AI went to the store.
      • 句子 BI bought some apples.
      • 模型目标:判断 B 是否是 A 的下一句

BERT 的架构

BERT 采用 Transformer 的 Encoder 部分,具有多个 Self-Attention 层,可以学习 上下文关系

BERT 主要有两种版本

  • BERT-Base:12 层 Transformer,768 维隐藏层,12 头注意力,110M 参数
  • BERT-Large:24 层 Transformer,1024 维隐藏层,16 头注意力,340M 参数

BERT 的应用

BERT 在各种 NLP 任务中表现优异,包括:

  • 文本分类(如情感分析、垃圾邮件检测)
  • 命名实体识别(NER)
  • 问答系统(QA)
  • 机器翻译
  • 文本摘要
  • 代码补全

BERT 代码示例

使用 Hugging Face 加载预训练 BERT
from transformers import BertTokenizer, BertModel

# 加载 BERT 预训练模型和分词器
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertModel.from_pretrained("bert-base-uncased")

# 输入文本
text = "BERT is a powerful NLP model."
# 设置return_tensors参数为"pt",表示返回的结果是PyTorch张量格式。
inputs = tokenizer(text, return_tensors="pt")

# 运行 BERT
# inputs = {'param1': value1, 'param2': value2}
# model(**inputs) 等价于 model(param1=value1, param2=value2)
outputs = model(**inputs)
# 打印outputs.last_hidden_state的形状,输出格式为 (batch_size, sequence_length, hidden_size),分别表示批次大小、序列长度和隐藏层维度。
print(outputs.last_hidden_state.shape)  # (batch_size, sequence_length, hidden_size)

运行结果

torch.Size([1, 10, 768])

💡 输出:形状为 (1, 10, 768),表示 1 个句子,10 个 token,每个 token 由 768 维向量表示。


使用 BERT 进行文本分类
from transformers import BertForSequenceClassification
from transformers import BertTokenizer
import torch

# 加载 BERT 分词器(预训练)
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
# 加载 BERT 分类模型(预训练)
model = BertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)

# 文本输入
text = "This movie is great!"
inputs = tokenizer(text, return_tensors="pt")

# 预测类别
outputs = model(**inputs)
# 每个类别的预测得分,logits 是模型输出的未经归一化的预测值,表示每个类别的原始得分。这些得分还没有经过激活函数(如softmax)处理,因此不是概率值。
logits = outputs.logits
# 使用 torch.argmax 找到logits中最大值的索引,即预测的类别。
predicted_class = torch.argmax(logits).item()
print("Predicted class:", predicted_class)  # 0 或 1(根据分类任务定义)

运行结果 

Predicted class: 1

这个例子:加载 BERT 用于 二分类任务(如情感分析)。


BERT vs GPT(区别对比)

模型架构训练方式主要用途
BERTTransformer Encoder双向学习(MLM + NSP)适用于 NLP 任务(分类、问答、NER)
GPTTransformer Decoder单向学习(从左到右)主要用于 文本生成(如 ChatGPT)

BERT 的改进版本

  1. RoBERTa(Robust BERT):去掉 NSP 任务,增加 MLM 训练时间,提高性能。
  2. ALBERT(Lite BERT):减少参数,提高效率。
  3. DistilBERT:BERT 的精简版,速度更快。
  4. ELECTRA:用新的 替换词检测任务(RTD) 代替 MLM,提高训练效率。

总结

  • BERT 是双向 Transformer 模型,主要用于 NLP 任务
  • 通过 MLM 和 NSP 进行预训练,能理解上下文
  • 在 Hugging Face 中可以轻松加载和使用 BERT
  • BERT 还有许多改进版本,如 RoBERTa、ALBERT 等

BERT 使 NLP 进入了新时代,被广泛用于各种任务,如情感分析、问答、翻译等!

<think>嗯,用户想了解BERT技术的概念。首先,我需要回忆一下BERT的基本信息。根据引用[1],BERT是Google在2018年提出的,全称是基于Transformer的双向编码器表示。它由多个Transformer编码器堆叠而成,输入输出形状不变。然后,引用[2]提到,BERT强调双向编码,不同于GPT的单向。GPT用的是Transformer解码器,适合生成文本,但只能利用前序信息,而BERT用编码器,能利用所有上下文,增强了语义理解。 接下来要说明BERT的核心结构。Transformer编码器是关键,每个包含自注意力机制和前馈网络。引用[3]提到了encoder_inputs的结构,可能涉及到输入的处理,比如词嵌入、位置编码等。另外,BERT的预训练任务有MLM和NSP,引用[2]里的掩码训练方法应该是指MLM,随机掩盖部分词让模型预测,这样模型可以学习双向上下文。NSP是判断句子关系,提升句子级别的理解。 然后,BERT的应用和影响。引用[4]指出,BERT启发了许多变体如RoBERTa、ALBERT等,这些改进适应不同需求。应用场景包括文本分类、问答系统、命名实体识别等,说明BERT的通用性。 还要注意用户可能混淆的地方,比如BERT和GPT的区别。需要明确两者在结构(编码器vs解码器)和训练目标上的不同。此外,用户可能想知道为什么双向编码有效,或者BERT如何处理长文本等问题,但用户的问题主要是概念介绍,所以先集中在核心点。 最后,生成相关问题要考虑用户可能的后续疑问,比如BERT的优缺点、训练细节、变体比较等。确保问题覆盖技术细节和应用场景,帮助用户深入理解。</think>### Bidirectional Encoder Representations from Transformers (BERT) 技术介绍 #### 1. **基本概念** BERTBidirectional Encoder Representations from Transformers)是Google于2018年提出的预训练语言模型,其核心是通过**双向Transformer编码器**对文本进行深度语义编码。与传统的单向语言模型(如GPT)不同,BERT在训练时能同时利用词汇的**前序和后序上下文信息**,从而更全面地捕捉语义关联[^1][^2]。 #### 2. **核心结构** - **Transformer编码器堆叠**:BERT由多个Transformer编码器层堆叠而成,每层包含**自注意力机制**(Multi-Head Attention)和**前馈神经网络**。输入输出的形状保持一致,便于逐层提取特征[^1][^3]。 - **输入表示**:输入文本通过**词嵌入**(Token Embedding)、**位置编码**(Position Embedding)和**段落编码**(Segment Embedding)组合而成,支持处理句子对任务(如问答)。 #### 3. **预训练任务** BERT通过以下两种任务进行预训练: - **掩码语言模型(MLM, Masked Language Model)**:随机掩盖输入文本中的部分词汇(如15%),要求模型预测被掩盖的词。这一任务迫使模型学习双向上下文依赖。 - **下一句预测(NSP, Next Sentence Prediction)**:判断两个句子是否为连续上下文,增强模型对句子间关系的理解。 #### 4. **关键优势** - **双向编码能力**:通过Transformer编码器的双向处理,BERT能同时利用词汇的左右上下文信息,显著提升语义理解效果。 - **通用性强**:预训练后的BERT可通过微调(Fine-tuning)适配多种下游任务(如文本分类、命名实体识别、问答系统等)[^4]。 #### 5. **应用与影响** - **应用场景**:BERT在自然语言处理(NLP)领域广泛应用,例如搜索引擎优化、情感分析、机器翻译等。 - **后续发展**:BERT的成功催生了多个改进模型,如**RoBERTa**(优化训练策略)、**ALBERT**(减少参数量)、**DistilBERT**(轻量化版本)等,形成庞大的“BERT家族”。 ```python # 示例:使用Hugging Face库调用BERT模型 from transformers import BertTokenizer, BertModel tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertModel.from_pretrained('bert-base-uncased') inputs = tokenizer("Hello, BERT!", return_tensors="pt") outputs = model(**inputs) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值