Seq2Seq 模型
本节定位
前面的分类和序列标注任务,输出通常还是“标签”。
而从这一章开始,我们进入另一类问题:
输入是一段文本,输出也是一段文本。
例如:
- 翻译
- 摘要
- 改写
- 问答生成
这类任务最经典的起点,就是 encoder-decoder 结构。
学习目标
- 理解 Seq2Seq 和分类类任务的根本差别
- 理解 encoder 和 decoder 各自负责什么
- 通过可运行示例建立“编码再生成”的直觉
- 理解 Seq2Seq 为什么成为很多生成任务的基础结构
先建立一张地图
Seq2Seq 这节最适合新人的理解顺序不是“先看模型细节”,而是先看清任务形态变了什么:
所以这节真正想解决的是:
- 为什么“文本到文本”任务和分类任务根本不是一类问题
- 为什么要把系统拆成 encoder 和 decoder 两部分
一、Seq2Seq 在解决什么问题?
1.1 它不是“给整句打标签”
它更像:
- 输入一串 token
- 输出另一串 token
例如:
- “我爱学习” -> “I love studying”
1.2 为什么普通分类器不适合做这类任务?
因为分类器输出通常是固定集合里的一个标签。
而 Seq2Seq 任务的输出:
- 长度不固定
- 内容不固定
- 生成过程有顺序依赖
1.3 一个类比
分类像给作文打一个分数。
Seq2Seq 更像把中文作文重新写成英文作文。
二、编码器和解码器分别在做什么?
2.1 编码器
它负责:
- 读入输入序列
- 把输入压成内部表示
2.2 解码器
它负责:
- 基于编码结果
- 一步一步生成输出序列