Seq2Seq

Seq2Seq

最早是用来做机器翻译的。

Seq2Seq_第1张图片
是一个encoder和decoder的架构

encoder是给一个句子,比如Hello Word,然后要翻译成法语的句子
Hello word 之后给信息压到这个地方,然后就去输出一个法语的内容

编码器是一个RNN,读取输入句子

把最后那个时刻的隐层状态传给解码器,这个状态包括了整个源码句子的信息,这个东西可以是双向的,双向的不能做语言模型,但双向可以做翻译,decoder要预测,encoder不需要

encoder可以看到整个句子,所以可以正向看一下,反向看一下,双向RNN经常会用在Encoder里面

双向RNN用来encoder里面

给定隐藏状态,之后给定一个输出

上一层的翻译做下一层的输出,得到整个原句子的输出

这样子对长度是可以变换的

所以我们可以看到不管原句子多长还是什么多长都可以

decoder一直往前走,走到看到句子的结束

隐藏状态过来,给原句子的隐层状态之后给一个输出开始翻译,把上一个刻的翻译是下一刻的输入

变长到变长

编码器解码器细节

最后一层的RNN最后那个时刻的状态输出了

句子的embedding的输出弄起来,encoder最后一层的东西回到下一层,跟输入放在一起

Seq2Seq_第2张图片

编码器不需要全连接层

编码器没有输出的RNN

编码器最后时间步的隐状态

用作解码器的最初隐状态

训练

训练时解码器使用目标句子作为输入

预测的句子

衡量生成序列的好坏的BLEU

Seq2Seq_第3张图片

所有的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来衡量生成序列的好坏

你可能感兴趣的:(研一,论文,python)