预训练语言模型:从BERT到GPT,NLP的新纪元

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
NLP自然语言处理_高级版,每接口累计50万次
简介: 自然语言处理(NLP)近年来因预训练语言模型(PLMs)的崛起而发生巨大变革。BERT和GPT等模型在学术与工业界取得突破性进展。本文探讨PLMs原理、发展历程及其实际应用,涵盖文本分类、命名实体识别、问答系统等场景,并通过实战案例展示如何使用这些强大的工具解决复杂的NLP任务。

自然语言处理(NLP)在过去几年中经历了翻天覆地的变化,而这一变化的催化剂无疑是预训练语言模型(Pre-trained Language Models, PLMs)的崛起。从BERT到GPT,这些模型不仅在学术研究中取得了突破性进展,也在工业界得到了广泛应用。本文将深入探讨预训练语言模型的原理、发展历程以及如何在实际项目中应用这些强大的工具。

1. 预训练语言模型的背景

在深度学习时代之前,NLP任务主要依赖于手工设计的特征和规则系统。随着词嵌入技术的引入,NLP开始转向数据驱动的方法。然而,传统的词嵌入模型(如Word2Vec)只能捕捉静态的词汇语义,无法根据上下文动态调整词义。

预训练语言模型的提出解决了这一问题。通过在大量无标签文本上进行预训练,模型能够学习到丰富的语言表示,这些表示可以迁移到各种下游任务中,如文本分类、命名实体识别、问答系统等。

2. BERT:双向编码器表示

2018年,Google提出了BERT(Bidirectional Encoder Representations from Transformers),它彻底改变了NLP领域的格局。BERT的核心思想是通过双向Transformer编码器捕捉上下文信息,从而生成动态的词向量。

2.1 BERT的架构

BERT基于Transformer的编码器部分,通过多层自注意力机制(Self-Attention)和前馈神经网络(Feed-Forward Neural Network)来捕捉文本中的上下文信息。与传统的单向语言模型(如GPT)不同,BERT采用双向训练策略,即同时考虑目标词的左右上下文。

BERT的预训练任务包括:

  • 掩码语言模型(Masked Language Model, MLM):随机掩盖输入文本中的一些词,模型需要预测这些被掩盖的词。
  • 下一句预测(Next Sentence Prediction, NSP):给定两个句子,模型需要判断它们是否是连续的。
2.2 BERT的实战应用

让我们通过一个简单的例子来理解如何使用BERT进行文本分类。我们将使用Hugging Face的transformers库来加载预训练的BERT模型,并在一个情感分析任务上进行微调。

from transformers import BertTokenizer, BertForSequenceClassification, AdamW
from torch.utils.data import DataLoader, Dataset
import torch

# 准备数据
class TextDataset(Dataset):
    def __init__(self, texts, labels, tokenizer, max_len):
        self.texts = texts
        self.labels = labels
        self.tokenizer = tokenizer
        self.max_len = max_len

    def __len__(self):
        return len(self.texts)

    def __getitem__(self, idx):
        text = self.texts[idx]
        label = self.labels[idx]
        encoding = self.tokenizer.encode_plus(
            text,
            add_special_tokens=True,
            max_length=self.max_len,
            return_token_type_ids=False,
            padding='max_length',
            truncation=True,
            return_attention_mask=True,
            return_tensors='pt',
        )
        return {
   
            'text': text,
            'input_ids': encoding['input_ids'].flatten(),
            'attention_mask': encoding['attention_mask'].flatten(),
            'label': torch.tensor(label, dtype=torch.long)
        }

# 示例数据
texts = ["我喜欢这部电影", "这部电影很糟糕", "自然语言处理很有趣"]
labels = [1, 0, 1]  # 1表示正面,0表示负面

# 加载BERT tokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')

# 创建数据集
dataset = TextDataset(texts, labels, tokenizer, max_len=16)
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)

# 加载BERT模型
model = BertForSequenceClassification.from_pretrained('bert-base-chinese', num_labels=2)

# 定义优化器
optimizer = AdamW(model.parameters(), lr=2e-5)

# 训练模型
model.train()
for epoch in range(3):
    for batch in dataloader:
        optimizer.zero_grad()
        input_ids = batch['input_ids']
        attention_mask = batch['attention_mask']
        labels = batch['label']
        outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)
        loss = outputs.loss
        loss.backward()
        optimizer.step()
        print(f"Epoch {epoch + 1}, Loss: {loss.item()}")

# 预测
model.eval()
with torch.no_grad():
    for batch in dataloader:
        input_ids = batch['input_ids']
        attention_mask = batch['attention_mask']
        outputs = model(input_ids=input_ids, attention_mask=attention_mask)
        logits = outputs.logits
        predictions = torch.argmax(logits, dim=1)
        print(f"Predictions: {predictions}")

在这个例子中,我们使用BERT模型对中文文本进行情感分析。通过微调预训练的BERT模型,我们能够在少量标注数据上取得很好的效果。

3. GPT:生成式预训练模型

与BERT不同,GPT(Generative Pre-trained Transformer)是一种生成式预训练模型。它基于Transformer的解码器部分,通过自回归方式生成文本。GPT的核心思想是通过预测下一个词来学习语言模型。

3.1 GPT的架构

GPT采用单向Transformer解码器,通过自注意力机制和前馈神经网络生成文本。与BERT不同,GPT只能利用目标词的左侧上下文信息,因此在生成任务中表现出色。

GPT的预训练任务是语言模型(Language Model, LM),即给定前面的词,预测下一个词。

3.2 GPT的实战应用

让我们通过一个简单的例子来理解如何使用GPT生成文本。我们将使用Hugging Face的transformers库来加载预训练的GPT模型,并生成一段文本。

from transformers import GPT2Tokenizer, GPT2LMHeadModel

# 加载GPT tokenizer和模型
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')

# 生成文本
input_text = "自然语言处理"
input_ids = tokenizer.encode(input_text, return_tensors='pt')

# 生成文本
output = model.generate(input_ids, max_length=50, num_return_sequences=1)
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)

print(generated_text)

在这个例子中,我们使用GPT模型生成了一段文本。通过输入一个起始词,模型能够生成连贯的文本内容。

4. 预训练语言模型的应用场景

预训练语言模型在NLP的各个领域都有广泛的应用,以下是一些典型的应用场景:

  • 文本分类:如情感分析、垃圾邮件检测等。
  • 命名实体识别:从文本中提取人名、地名、组织名等实体。
  • 问答系统:根据给定的问题和上下文生成答案。
  • 机器翻译:将一种语言的文本翻译成另一种语言。
  • 文本生成:如自动摘要、对话生成等。

5. 总结

预训练语言模型的崛起标志着NLP进入了一个新的纪元。从BERT到GPT,这些模型不仅在学术研究中取得了突破性进展,也在工业界得到了广泛应用。通过本文的介绍和实战案例,希望你能对预训练语言模型有更深入的理解,并在实际项目中应用这些强大的工具来解决复杂的自然语言任务。

未来,随着模型规模的不断扩大和训练数据的不断丰富,预训练语言模型还将在更多领域展现出其强大的潜力。让我们一起期待并探索这个充满无限可能的领域!

相关文章
|
17天前
|
机器学习/深度学习 编解码 自然语言处理
深入BERT内核:用数学解密掩码语言模型的工作原理
BERT通过掩码语言建模(MLM)实现双向语言理解,随机遮蔽15%的词并预测,结合Transformer的自注意力与多头机制,利用上下文信息生成深层语义表示。其数学设计如√d_k缩放、80-10-10掩码策略和交叉熵优化,显著提升模型性能,奠定现代NLP基础。
101 8
|
1月前
|
人工智能 自然语言处理 调度
24_BERT模型详解:从预训练到微调的全方位指南
BERT(Bidirectional Encoder Representations from Transformers)是由Google AI在2018年推出的革命性预训练语言模型,它彻底改变了自然语言处理(NLP)领域的格局。通过创新的双向训练方式,BERT能够捕捉词语在上下文环境中的完整语义信息,从而在各种下游任务中取得了突破性的表现。
|
7月前
|
机器学习/深度学习 人工智能 算法
GPT-4.5 竟成小丑!OpenAI 推出 GPT-4.1:百万级上下文多模态语言模型,性价比远超 GPT-4o mini
OpenAI最新发布的GPT-4.1系列语言模型通过混合专家架构与上下文优化,实现百万级token处理能力,在编码任务中准确率提升21.4%,推理成本降低83%,支持多模态内容理解与低延迟响应。
300 27
GPT-4.5 竟成小丑!OpenAI 推出 GPT-4.1:百万级上下文多模态语言模型,性价比远超 GPT-4o mini
|
机器学习/深度学习 人工智能 自然语言处理
【大语言模型-论文精读】谷歌-BERT:用于语言理解的预训练深度双向Transformers
【大语言模型-论文精读】谷歌-BERT:用于语言理解的预训练深度双向Transformers
|
人工智能 自然语言处理
【NLP自然语言处理】NLP中的常用预训练AI模型
【NLP自然语言处理】NLP中的常用预训练AI模型
|
机器学习/深度学习 自然语言处理 数据处理
|
存储 SQL 数据库
Python 金融编程第二版(GPT 重译)(四)(4)
Python 金融编程第二版(GPT 重译)(四)
164 3
|
存储 NoSQL 索引
Python 金融编程第二版(GPT 重译)(一)(4)
Python 金融编程第二版(GPT 重译)(一)
181 2
|
存储 机器学习/深度学习 关系型数据库
Python 金融编程第二版(GPT 重译)(四)(5)
Python 金融编程第二版(GPT 重译)(四)
117 2
|
存储 SQL 数据可视化
Python 金融编程第二版(GPT 重译)(四)(1)
Python 金融编程第二版(GPT 重译)(四)
152 2