Seq2Seq
最早是用来做机器翻译的。
encoder是给一个句子,比如Hello Word,然后要翻译成法语的句子
Hello word 之后给信息压到这个地方,然后就去输出一个法语的内容
编码器是一个RNN,读取输入句子
把最后那个时刻的隐层状态传给解码器,这个状态包括了整个源码句子的信息,这个东西可以是双向的,双向的不能做语言模型,但双向可以做翻译,decoder要预测,encoder不需要
encoder可以看到整个句子,所以可以正向看一下,反向看一下,双向RNN经常会用在Encoder里面
双向RNN用来encoder里面
给定隐藏状态,之后给定一个输出
上一层的翻译做下一层的输出,得到整个原句子的输出
这样子对长度是可以变换的
所以我们可以看到不管原句子多长还是什么多长都可以
decoder一直往前走,走到看到句子的结束
隐藏状态过来,给原句子的隐层状态之后给一个输出开始翻译,把上一个刻的翻译是下一刻的输入
变长到变长
编码器解码器细节
最后一层的RNN最后那个时刻的状态输出了
句子的embedding的输出弄起来,encoder最后一层的东西回到下一层,跟输入放在一起
编码器不需要全连接层
编码器没有输出的RNN
编码器最后时间步的隐状态
用作解码器的最初隐状态
训练
训练时解码器使用目标句子作为输入
预测的句子
衡量生成序列的好坏的BLEU
所有的n-gram
n-gram
unigram一个词
bytegram两个词
unigram的精度考虑我们预测训练里面所有的unigram
每个是否再这里出现了
4个出现了,一个出现了5
p2-bytegram
AB,BB,BC,CD
3/4
P3-1/3
P4 – 0
有了这些东西之后,算这些东西
预测的长度和真实的长度
BLEU是越大越好
长匹配有高权重
n越大给你的权重也会变的越大
两个句子的匹配
【总结】
seq2seq从一个句子生成另一个句子
编码器和解码器都是RNN
将编码器最后时间隐状态来初始解码器隐状态来完成信息传递
常用BLEU来衡量生成序列的好坏