预训练语言模型:从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,这些模型不仅在学术研究中取得了突破性进展,也在工业界得到了广泛应用。通过本文的介绍和实战案例,希望你能对预训练语言模型有更深入的理解,并在实际项目中应用这些强大的工具来解决复杂的自然语言任务。

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

相关文章
|
11天前
|
机器学习/深度学习 人工智能 算法
GPT-4.5 竟成小丑!OpenAI 推出 GPT-4.1:百万级上下文多模态语言模型,性价比远超 GPT-4o mini
OpenAI最新发布的GPT-4.1系列语言模型通过混合专家架构与上下文优化,实现百万级token处理能力,在编码任务中准确率提升21.4%,推理成本降低83%,支持多模态内容理解与低延迟响应。
101 27
GPT-4.5 竟成小丑!OpenAI 推出 GPT-4.1:百万级上下文多模态语言模型,性价比远超 GPT-4o mini
|
8月前
|
自然语言处理 搜索推荐 API
GPT-4o mini:探索最具成本效益的语言模型及其在开发中的应用
【8月更文第5天】随着自然语言处理技术的快速发展,语言模型正变得越来越强大且易于访问。OpenAI 最新发布的 GPT-4o mini 模型以其卓越的性能和极具竞争力的价格,迅速成为了业界关注的焦点。作为开发者,您是否已经开始探索这个“迄今为止最具成本效益的小模型”?本文旨在鼓励开发者分享使用 GPT-4o mini 及其他大型语言模型的经验,并探讨如何有效地利用这些工具来提升开发效率和创新能力。
279 0
|
6月前
|
自然语言处理 PyTorch 算法框架/工具
掌握从零到一的进阶攻略:让你轻松成为BERT微调高手——详解模型微调全流程,含实战代码与最佳实践秘籍,助你应对各类NLP挑战!
【10月更文挑战第1天】随着深度学习技术的进步,预训练模型已成为自然语言处理(NLP)领域的常见实践。这些模型通过大规模数据集训练获得通用语言表示,但需进一步微调以适应特定任务。本文通过简化流程和示例代码,介绍了如何选择预训练模型(如BERT),并利用Python库(如Transformers和PyTorch)进行微调。文章详细说明了数据准备、模型初始化、损失函数定义及训练循环等关键步骤,并提供了评估模型性能的方法。希望本文能帮助读者更好地理解和实现模型微调。
335 2
掌握从零到一的进阶攻略:让你轻松成为BERT微调高手——详解模型微调全流程,含实战代码与最佳实践秘籍,助你应对各类NLP挑战!
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
【大语言模型-论文精读】谷歌-BERT:用于语言理解的预训练深度双向Transformers
【大语言模型-论文精读】谷歌-BERT:用于语言理解的预训练深度双向Transformers
546 1
|
8月前
|
机器学习/深度学习 自然语言处理
自然语言处理 Paddle NLP - 预训练语言模型及应用
自然语言处理 Paddle NLP - 预训练语言模型及应用
83 0
|
8月前
|
数据采集 人工智能 数据挖掘
2021 第五届“达观杯” 基于大规模预训练模型的风险事件标签识别】3 Bert和Nezha方案
2021第五届“达观杯”基于大规模预训练模型的风险事件标签识别比赛中使用的NEZHA和Bert方案,包括预训练、微调、模型融合、TTA测试集数据增强以及总结和反思。
79 0
|
9月前
|
存储 SQL 数据库
Python 金融编程第二版(GPT 重译)(四)(4)
Python 金融编程第二版(GPT 重译)(四)
92 3
|
9月前
|
存储 NoSQL 索引
Python 金融编程第二版(GPT 重译)(一)(4)
Python 金融编程第二版(GPT 重译)(一)
95 2
|
9月前
|
存储 机器学习/深度学习 关系型数据库
Python 金融编程第二版(GPT 重译)(四)(5)
Python 金融编程第二版(GPT 重译)(四)
62 2
|
9月前
|
存储 SQL 数据可视化
Python 金融编程第二版(GPT 重译)(四)(1)
Python 金融编程第二版(GPT 重译)(四)
92 2

热门文章

最新文章

下一篇
oss创建bucket