人工智能之语言领域 自然语言处理 第十三章 序列到序列模型

人工智能之语言领域

第十三章 序列到序列模型


文章目录

  • 人工智能之语言领域
  • [前言 序列到序列模型](#前言 序列到序列模型)
    • [13.1 序列到序列(Seq2Seq)模型概述](#13.1 序列到序列(Seq2Seq)模型概述)
      • [13.1.1 核心应用场景:机器翻译、文本摘要、对话生成](#13.1.1 核心应用场景:机器翻译、文本摘要、对话生成)
      • [13.1.2 Seq2Seq的基本架构:Encoder-Decoder](#13.1.2 Seq2Seq的基本架构:Encoder-Decoder)
    • [13.2 传统Seq2Seq模型](#13.2 传统Seq2Seq模型)
      • [13.2.1 RNN-based Seq2Seq](#13.2.1 RNN-based Seq2Seq)
      • [13.2.2 模型的训练与推理过程](#13.2.2 模型的训练与推理过程)
    • [13.3 注意力机制融入Seq2Seq](#13.3 注意力机制融入Seq2Seq)
      • [13.3.1 Attention-based Seq2Seq架构](#13.3.1 Attention-based Seq2Seq架构)
      • [13.3.2 性能提升与原理分析](#13.3.2 性能提升与原理分析)
    • [13.4 现代Seq2Seq模型:基于Transformer的Seq2Seq](#13.4 现代Seq2Seq模型:基于Transformer的Seq2Seq)
      • [Transformer Seq2Seq架构图](#Transformer Seq2Seq架构图)
    • [13.5 实战案例:中文文本摘要生成](#13.5 实战案例:中文文本摘要生成)
  • 资料

前言 序列到序列模型

在自然语言处理(NLP)中,序列到序列(Seq2Seq)模型是用于将一个序列映射到另一个序列的框架。它们被广泛应用于各种任务,如机器翻译、文本摘要和对话系统等。本章将深入探讨Seq2Seq模型的发展历程,从基于RNN的传统模型到引入注意力机制的改进版本,再到现代Transformer架构的演变,并通过中文文本摘要生成实战演示其构建过程。


13.1 序列到序列(Seq2Seq)模型概述

13.1.1 核心应用场景:机器翻译、文本摘要、对话生成

  • 机器翻译:将一种语言的句子转换为另一种语言。
  • 文本摘要:自动产生简洁的文摘,概括原始文档的主要信息。
  • 对话生成:根据用户输入自动生成回应,实现人机交互。

13.1.2 Seq2Seq的基本架构:Encoder-Decoder

Seq2Seq模型通常由两部分组成:

  1. 编码器(Encoder):接收并理解输入序列,将其转换成固定长度的向量表示。
  2. 解码器(Decoder):基于该向量生成输出序列。

编码
源序列
编码器
上下文向量
解码器
目标序列

注意:传统上,编码器和解码器常采用循环神经网络(RNN)及其变种(LSTM, GRU)实现。


13.2 传统Seq2Seq模型

13.2.1 RNN-based Seq2Seq

最早的Seq2Seq模型依赖于递归神经网络(RNN),尤其是长短期记忆网络(LSTM)或门控循环单元(GRU)。这些模型能够捕捉序列中的时间依赖性,但随着序列长度增加,训练难度加大且容易出现梯度消失问题。

编码器结构
python 复制代码
class EncoderRNN(nn.Module):
    def __init__(self, input_size, hidden_size):
        super().__init__()
        self.hidden_size = hidden_size
        self.embedding = nn.Embedding(input_size, hidden_size)
        self.gru = nn.GRU(hidden_size, hidden_size)

    def forward(self, input, hidden):
        embedded = self.embedding(input).view(1, 1, -1)  # [1, 1, hidden_size]
        output, hidden = self.gru(embedded, hidden)
        return output, hidden

    def init_hidden(self):
        return torch.zeros(1, 1, self.hidden_size)
解码器结构
python 复制代码
class DecoderRNN(nn.Module):
    def __init__(self, hidden_size, output_size):
        super().__init__()
        self.hidden_size = hidden_size
        self.embedding = nn.Embedding(output_size, hidden_size)
        self.gru = nn.GRU(hidden_size, hidden_size)
        self.out = nn.Linear(hidden_size, output_size)
        self.softmax = nn.LogSoftmax(dim=1)

    def forward(self, input, hidden):
        output = self.embedding(input).view(1, 1, -1)
        output = F.relu(output)
        output, hidden = self.gru(output, hidden)
        output = self.softmax(self.out(output[0]))
        return output, hidden

13.2.2 模型的训练与推理过程

  • 训练阶段:使用交叉熵损失函数优化模型参数。
  • 推理阶段:采用贪心搜索或束搜索算法选择最有可能的单词作为下一个预测。

13.3 注意力机制融入Seq2Seq

13.3.1 Attention-based Seq2Seq架构

注意力机制允许解码器在生成每个词时"关注"输入序列的不同部分,而不是仅依赖于单一的上下文向量。这大大提高了对长序列的处理能力。
解码器
编码器
输入词1
隐藏状态h1
输入词2
隐藏状态h2
输入词n
隐藏状态hn
当前解码步骤t
计算注意力权重α
加权求和得到上下文向量ct
生成输出yt

实现示例
python 复制代码
def attention(encoder_outputs, decoder_hidden, encoder_lengths=None):
    energy = torch.sum(decoder_hidden * encoder_outputs, dim=2)
    attention_weights = F.softmax(energy, dim=1)
    context_vector = torch.sum(attention_weights.unsqueeze(2) * encoder_outputs, dim=1)
    return context_vector, attention_weights

13.3.2 性能提升与原理分析

注意力机制通过动态调整各输入词的重要性,有效解决了长距离依赖问题,并增强了模型的表现力。


13.4 现代Seq2Seq模型:基于Transformer的Seq2Seq

Transformer架构摒弃了RNN,完全依靠自注意力机制来处理序列数据,极大地提升了效率和效果。它不仅适用于机器翻译,还被广泛应用于文本摘要、问答系统等领域。

Transformer Seq2Seq架构图

解码器
解码器层1
...
解码器层N
编码器
编码器层1
...
编码器层N
源序列
N层编码器堆叠
N层解码器堆叠
目标序列


13.5 实战案例:中文文本摘要生成

数据准备

首先需要准备适合进行文本摘要的数据集,例如LCSTS(Large Chinese Short Text Summarization Dataset)。

模型定义

可以基于Hugging Face Transformers库快速搭建一个基于BERT的seq2seq模型来进行摘要生成。

python 复制代码
from transformers import BertTokenizer, EncoderDecoderModel

tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = EncoderDecoderModel.from_encoder_decoder_pretrained('bert-base-chinese', 'bert-base-chinese')

# Tokenize inputs and targets
inputs = tokenizer(["这是一个测试句子"], return_tensors="pt", padding=True, truncation=True)
targets = tokenizer(["这是摘要"], return_tensors="pt", padding=True, truncation=True)

# Forward pass
outputs = model(input_ids=inputs.input_ids, decoder_input_ids=targets.input_ids)

训练过程

利用AdamW优化器,设定合适的超参数进行训练。

python 复制代码
optimizer = torch.optim.AdamW(model.parameters(), lr=5e-5)
loss_fn = nn.CrossEntropyLoss(ignore_index=tokenizer.pad_token_id)

for epoch in range(num_epochs):
    for batch in train_loader:
        optimizer.zero_grad()
        outputs = model(input_ids=batch['input_ids'], decoder_input_ids=batch['decoder_input_ids'])
        loss = loss_fn(outputs.logits.view(-1, outputs.logits.size(-1)), batch['labels'].view(-1))
        loss.backward()
        optimizer.step()

推理与评估

在完成训练后,可以通过模型生成摘要,并使用ROUGE等指标评估生成质量。

python 复制代码
generated = model.generate(input_ids, max_length=max_summary_length)
summary = tokenizer.decode(generated[0], skip_special_tokens=True)
print(f"Generated Summary: {summary}")

以上便是关于序列到序列模型的详细介绍,包括其基本概念、发展历程以及具体应用实例。


资料

咚咚王

《Python 编程:从入门到实践》

《利用 Python 进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第 3 版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow 机器学习实战指南》

《Sklearn 与 TensorFlow 机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python 深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习 +(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第 2 版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨 +&+ 张孜铭

《AIGC 原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战 AI 大模型》

《AI 3.0》

相关推荐
智星云算力2 小时前
实验室无GPU如何深度学习
人工智能·深度学习·阿里云·智星云·gpu算力租用
用户5191495848452 小时前
Struts2 S2-045 远程代码执行漏洞检测工具(CVE-2017-5638)
人工智能·aigc
ZZH_AI项目交付2 小时前
iOS 首页进度卡实战:最难的不是渐变进度条,而是状态边界
人工智能·ios·ai编程
星辰_mya2 小时前
NLP((Natural Language Processing)简介
人工智能·自然语言处理
深瞳智检2 小时前
lesson-01 NLP 概述学习笔记 & 学习心得
人工智能·笔记·学习·自然语言处理·llm·大语言模型
赫尔·普莱蒂科萨·帕塔2 小时前
重构AI漫剧工业化
人工智能·重构·动画·agi
米小虾2 小时前
从MCP到A2A:AI Agent 互操作性协议的演进与实战
人工智能
2301_764441332 小时前
GitNexus:AI智能体代码库索引知识图谱
人工智能·数据挖掘·知识图谱
福客AI智能客服2 小时前
智能客服机器人正在改变电商服务模式
人工智能·机器人