# 序列到序列（Seq2Seq）

URL: https://caijiao.org/nlp/tasks/seq2seq
Source: docs/nlp/tasks/seq2seq.md
Description: 本章介绍序列到序列（Seq2Seq）任务，包括机器翻译、文本摘要等，以及常用模型和实现示例。

序列到序列（**Sequence-to-Sequence, Seq2Seq**）是 NLP 中将一个序列映射为另一个序列的任务。  
典型应用包括：

- **机器翻译（Machine Translation）**  
- **文本摘要（Text Summarization）**  
- **对话生成（Dialogue Generation）**  
- **问答系统（Question Answering）**

示例：

```txt
输入（英文）：I love natural language processing.
输出（中文）：我喜欢自然语言处理。
```

## 一、Seq2Seq 模型原理

### 1. 编码器-解码器（Encoder-Decoder）

- **编码器（Encoder）**：将输入序列编码为上下文向量（Context Vector）  
- **解码器（Decoder）**：根据上下文向量生成目标序列  

早期 Seq2Seq 使用 **RNN / LSTM / GRU** 构建编码器和解码器。

### 2. 注意力机制（Attention）

- 解决长序列信息丢失问题  
- 每个输出位置都会动态关注输入序列不同部分  

示意：

```txt
Decoder Step 1 → attention over Encoder states → generate token1
Decoder Step 2 → attention over Encoder states → generate token2
...
````

### 3. Transformer 架构

- 完全基于注意力机制，无需循环结构  
- 并行化训练效率高  
- 广泛应用于翻译、摘要和生成任务（如 BERT、T5、GPT）

## 二、应用示例（Hugging Face）

### 1. 机器翻译

```python
from transformers import pipeline

translator = pipeline("translation", model="Helsinki-NLP/opus-mt-en-zh")
text = "Natural Language Processing is fascinating."
result = translator(text)
print(result)
````

输出示例：

```txt
[{'translation_text': '自然语言处理非常有趣。'}]
```

### 2. 文本摘要

```python
from transformers import pipeline

summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
text = """
近年来，人工智能技术迅速发展，尤其是在自然语言处理领域，
Transformer 模型和大规模预训练模型（如 BERT、GPT）表现出卓越能力。
"""
summary = summarizer(text, max_length=50, min_length=20)
print(summary)
```

输出示例：

```txt
[{'summary_text': '近年来，人工智能在自然语言处理领域表现出卓越能力。'}]
```

## 三、应用场景

- **机器翻译**：跨语言交流与文档翻译
- **文本摘要**：新闻、论文、长文档摘要
- **对话生成**：智能客服、聊天机器人
- **文本改写 / 文本生成**：创作、自动写作

## 四、小结

- Seq2Seq 是 NLP 生成任务的核心框架；
- Transformer 和注意力机制极大提高了生成质量；
- 现代 NLP 模型几乎都基于 Seq2Seq 或其变体进行训练和微调。
