对于seq2seq模型,网上很多文章直接就把抽象模型拿出来,这样对初学者很不友好,这里采用例子进行阐述,最后在通过抽象模型理解
英语翻译成德语
这个网站有很多的数据集
- Tokenization 和创建字典
Tokenization
因为是翻译任务,因此需要构建两个input_texts和两个target_texts,即如下:
对于两种语言使用两种不同的tokenizers,构建两个不同的字典,为什么构建两个字典呢?
Tokenization 可以是字符级的也可以是单词级
字符级:
这里采用字符级进行学习,理论上,翻译任务最好采用单词级
例如:
这里解释为什么翻译需要构建两个基于字符级的字典
因为在字符级,每种语言有不同的字母组成或者字符组成,单个字典很难做到,因此两种语言采用两种不同的字典:
创建字典
训练模型
预测第一个字符后,继续预测下一个字符
同理
这个过程,一直下去,一直等到输出停止字符为止
推理很简单,在上面的基础上,去掉便签和交叉熵,prediction就是输出即可
Seq2Seq Model
这里简单的说一下,为什么在编码器中只需要使用最后一个状态的输出,为什么不使用中间的状态,因为最后一个状态包含了输入的所有信息,中间的状态,包含的信息不全
接着:
总结:
1.LSTM虽然比RNN效果好,但是还是无法解决长序列的依赖问题,如何解决呢?
- 采用双向LSTM替换单向的LSTM在编码阶段,解码只能使用单向的LSTM
双向的LSTM好处在于,长序列的中,正向学习的到的偏向后部分,忘记前部分,而反向学到的是前项部分,忘记的是后续部分,把他们合并可以同时获取到前后重要信息
- Word-Level Tokenization
使用word-level替换字符级的token ,一方面英语单词平均是4.5个字符组成,那么需要长度比字符级段4.5倍,但是训练需要更大的数据集进行词向量的预训练
- 多任务学习(Multi-Task Learning)
多任务的学习更有利于编码器的训练,变相的增加了数据集,这样也可以提升性能
- Attention机制