NLP任务的基石模型BERT

一、NLP技术主要解决的问题

人工智能主要包括自然语言处理/NLP、计算机视觉和传统机器学习(非多层神经网络)三个领域。基于自然语言处理技术又衍生出AI逻辑推理和AI智能体技术。以下为自然语言处理技术主要解决的问题和方案。任何与自然语言有关的问题都属于自然语言处理/NLP领域。但具体来看,根据不同的自然语言处理任务,自然语言处理又分为多种不同的任务类型;比如说:对话,问答,分类等。自然语言处理主要包括以下六大任务类型,而每个大的任务类型下又有多个小的子任务类型。

  • 文本生成(Text Generation)指通过算法让计算机自动生成符合语言规范、语义连贯且具有特定目标的可读文本。
  • 文本摘要提取(Text Summarization Extraction)旨在从长文本中提取或生成简洁、连贯且保留核心信息的短文本。
  • 文本中的实体识别问题(通常称为命名实体识别,Named Entity Recognition, NER)是指从非结构化文本中自动识别、定位并分类特定类型实体的任务。这些实体通常包括人名、地名、组织机构名、时间、日期、货币、百分比等具有明确语义意义的词汇或短语。识别文本中的实体任务还包括从大量文本中进行信息检索与抽取。识别文本中的实体属于语言理解类任务,是自然语言处理(NLP)中的一项核心任务。
  • 文本分类任务(Text Classification Task)是指通过算法将文本数据划分到预定义的类别或标签中,是NLP中最基础且应用最广泛的问题之一。
  • 语义相似度识别(Semantic Similarity Measurement)是指通过计算模型量化两个文本片段(词、短语、句子或段落)在语义层面的相似程度。语义相似度识别属于语义与结构分析类任务,旨在衡量两个文本片段在语义上的相似程度。
  • 语音识别与合成:语音转文本(ASR)或文本转语音(TTS)。多模态NLP:结合文本与图像/视频的理解(如描述图片内容)。

二、BERT核心思想和架构

BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型,由Google在2018年提出。它在自然语言处理(NLP)任务中表现出色,尤其在理解上下文语义方面。以下是BERT的工作原理简介:

1. 核心思想

  • 双向上下文编码:传统模型(如LSTM或GPT)只能单向(从左到右或从右到左)处理文本,而BERT通过 双向Transformer 包括Masked Language Model (MLM) 和 Next Sentence Prediction (NSP) 任务, 同时学习上下文信息,捕捉单词与前后文的关联。
  • 预训练+微调:
    • 预训练:先在大规模语料(如 Wikipedia、BookCorpus)上预训练。
    • 微调:针对具体任务(如分类、问答)用少量标注数据调整模型。

2. 模型架构

BERT基于 Transformer的编码器(Encoder) 堆叠而成,主要组件包括:

a、输入表示

每个输入token由三部分相加:

  • Token Embeddings:词向量(WordPiece分词)。将单词映射为向量。
  • Segment Embeddings:区分句子(如句子A/B,用于问答或句对任务)。
  • Position Embeddings:位置编码(标记单词在序列中的位置)。

特殊标记:

  • [CLS]:分类任务的聚合标记。
  • [SEP]:分隔句子。
  • [MASK]:掩码标记(用于 MLM 任务)。
[CLS] 我 喜 欢 猫 [SEP] 但 讨 厌 狗 [SEP]  
^     ^ ^ ^ ^   ^   ^ ^ ^
|     | | | |   |   | | |
CLS标记 Token Embeddings   SEP标记
  • Transformer Encoder:
    • 由多层(如BERT-base为12层)相同的Encoder堆叠。
    • 每层包含:
      • 多头自注意力(Multi-Head Self-Attention):计算单词间依赖关系。
      • 前馈神经网络(FFN):非线性变换。
      • 残差连接(Residual Connection) 和 层归一化(LayerNorm):稳定训练。

b、参数配置

模型层数(L)隐藏层维度(H)注意力头数(A)参数量
BERT-Base1276812110M
BERT-Large24102416340M

3、关键优势

  • 上下文感知:双向注意力机制能捕捉“银行”在“存钱”和“河边”中的不同含义。
  • 通用性强:预训练模型通过微调可适配多种任务,减少从头训练的成本。
  • 并行计算:Transformer的自注意力机制比RNN更高效。

4、适用场景

  • 文本分类(情感分析、新闻分类)
  • 命名实体识别(NER)
  • 问答系统(如 SQuAD)
  • 语义相似度计算

5、优缺点分析

✅ 优势

  • 上下文感知能力强:优于传统 Word2Vec、LSTM。
  • 通用性强:通过微调适配多种任务(分类、问答、NER)。
  • 开源生态完善:Hugging Face 提供预训练模型和工具链。

❌ 局限性

  • 计算资源消耗大:Base 版需 3GB+ GPU 显存。
  • 长文本处理弱:输入长度限制(通常 512 Token)。

6、性能表现

(1) GLUE 基准测试(通用语言理解)

任务BERT-Base 得分
MNLI(文本蕴含)84.4%
QQP(相似度)91.3%
SST-2(情感分析)93.5%

(2) 中文任务(如 CLUE)

  • 使用 bert-base-chinese 在以下任务表现优异:
    • 文本分类(THUCNews):96%+ 准确率。
    • 命名实体识别(MSRA-NER):95%+ F1。

7、典型变体

  • RoBERTa:移除NSP任务,动态掩码,更大批次训练。
  • ALBERT:参数共享减少计算量。
  • ERNIE:引入实体级掩码,提升知识理解能力。

三、预训练任务

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

1、掩码语言模型(Masked Language Model, MLM)

方法:随机遮盖15%的输入token(如将“猫”替换为[MASK]),让模型预测被遮盖的词。

例如:输入"The [MASK] sat on the mat." 目标为预测 [MASK] = "cat"

改进:80%替换为[MASK],10%替换为随机词,10%保留原词,防止模型过度依赖[MASK]

掩码语言模型主要作用是通过对输入文本中部分单词的掩码(替换为[MASK]),迫使模型基于上下文预测被掩码的单词,从而学习深层次的双向上下文语义表示。

a、学习双向上下文依赖

传统语言模型(如GPT)通常基于单向(从左到右或从右到左)的上下文预测单词,而MLM通过随机掩码迫使BERT同时利用左右两侧的上下文信息来预测被掩码的词。例如句子:"The cat sat on the [MASK]." 模型需要结合"cat sat on the""the"前后的信息,预测[MASK]可能是"mat""floor"。这种双向性使BERT能更全面地理解单词在句子中的含义。

b、提升模型泛化能力

采用随机掩码策略,BERT在预训练中随机掩码15%的输入词(其中80%替换为[MASK],10%替换为随机词,10%保持不变)。这种策略让模型:

  • 学会处理不完整输入(鲁棒性)。
  • 避免过度依赖局部特征(防止过拟合)。

c、为下游任务提供通用语义表示

MLM任务使BERT学习到的词向量包含丰富的上下文信息(如多义词区分、语法结构等)。例如:

  • "bank""river bank""bank account"中通过上下文能生成不同的表示。
  • 这种通用表示可通过微调(fine-tuning)迁移到各类下游任务(如文本分类、问答、NER等)。

d、解决自编码与自回归模型的局限性

  • 自回归模型(如GPT)只能单向建模,而MLM属于自编码模型,允许双向信息流动。
  • MLM的掩码预测任务避免了像传统语言模型那样简单地“记住”下一个词,而是必须理解全局上下文。

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

方法:给定两个句子(A和B),预测B是否是A的下一句。

输入格式:

[CLS] 句子A [SEP] 句子B [SEP]

[CLS]标记的最终隐藏状态用于分类(是/否)。

输入:("The cat sat on the mat.", "It was very furry.") → 标签 IsNext

MLM专注于单词级理解,NSP补充句子间关系建模,两者结合使BERT同时捕捉细粒度语义和篇章结构。

下一句预测样例:CCF-BDCI-2020贝壳房地产行业聊天问答匹配

四、微调(Fine-tuning)

将预训练的BERT适配到具体任务,例如:

  • 文本分类:用[CLS]标记的表示作为整个序列的摘要,接一个分类层。
  • 序列标注(如NER):用每个token的隐藏状态预测标签。
  • 问答任务:用两个线性层分别预测答案的起始和结束位置。

五、如何使用

1、通过 Hugging Face 加载

from transformers import BertTokenizer, BertModel

# 加载模型和分词器
model_name = "bert-base-uncased"  # 英文版本
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertModel.from_pretrained(model_name)

# 编码文本
inputs = tokenizer("Hello, BERT!", return_tensors="pt")
outputs = model(**inputs)
print(outputs.last_hidden_state.shape)  # [1, 7, 768]

2、微调示例(文本分类)

from transformers import BertForSequenceClassification

model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2)
# 训练代码(需准备数据集)...

3、中文模型

选择中文版BERT模型:

model_name = "bert-base-chinese"  # 中文版本

4、扩展样例

样例:CCF-BDCI-2021爱奇艺剧本角色情感识别

代码中的 IQIYModelLite 模型在BERT基础上:

  1. 提取隐藏状态:获取最后一层的所有token表示。
  2. 注意力池化:学习每个token的重要性权重,生成上下文向量。
  3. 多标签输出:为每个情感标签(如“love”“joy”)独立预测。

总结

BERT通过双向Transformer和预训练任务,学习深层次的上下文语义表示,成为NLP任务的基石模型。其核心在于 双向编码 和 预训练-微调范式,使得模型能高效适配多样化下游任务。

发表评论