我们知道序列预测有 one-to-one、many-to-one、many-to-many、one-to-many 几种类型。在前面的文章中,我们做过的任务大多是将一个序列映射为单个输出的问题,比如 NER 是预测单个单词的标签,语言模型是一个一个预测下一个单词的问题。
现在我们要看输出是一个序列的情况,也就是 to-many,这类问题有个挑战是它的输入和输出都是序列,而且序列的长度是不固定的,为了应对这种挑战,于是有了 seq2seq 模型。
什么是 seq2seq 模型
seq2seq 即 Sequence-to-sequence 模型,通常指 Encoder Decoder LSTM 模型,它由两个循环神经网络(可以是 RNN、LSTM、GRU 等)组成:
- 一个 Encoder 编码器,输入为文本的序列,输出为一个固定维度的“上下文向量”。
- 一个 Decoder 解码器,输入为这个“上下文向量”,输出为目标序列。
其中 Encoder 可以是双向的循环神经网络,这样的话,有一串 LSTM 是正向地读取输入序列,还有一串是反向地读取输入序列。因为是双向,我们会得到两个隐藏层状态,一个来自正向,一个来自反向,通过双向结构可以对文本的信息有更加全面的掌握。
Encoder 还可以增加层数,例如可以是多层双向 LSTM,每层的输出是下一层的输入。在一些复杂的任务中,为了得到更好的结果就可以用多层结构。
而且任务不同时,Encoder 的结构也可以选择不同的神经网络,比如做自然语言处理任务时用 LSTM