【深度学习】常见模型-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(区别对比)

模型 架构 训练方式 主要用途
BERT Transformer Encoder 双向学习(MLM + NSP) 适用于 NLP 任务(分类、问答、NER)
GPT Transformer 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 进入了新时代,被广泛用于各种任务,如情感分析、问答、翻译等!

你可能感兴趣的:(深度学习,人工智能,深度学习,bert,人工智能)