1.seq2seq是什么
seq2seq 是一个Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列。Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。
很多自然语言处理任务,比如聊天机器人,机器翻译,自动文摘,智能问答等,传统的解决方案都是检索式(从候选集中选出答案),这对素材的完善程度要求很高。seq2seq模型突破了传统的固定大小输入问题框架。采用序列到序列的模型,在NLP中是文本到文本的映射。其在各主流语言之间的相互翻译以及语音助手中人机短问快答的应用中有着非常好的表现。
RNN的encoder和decoder结构是什么?
2.增加attention的seq2seq
- 带注意力的解码器RNN接收的嵌入(embedding)和一个初始的解码器隐藏状态(hidden state)。
- RNN处理输入,产生输出和新的隐藏状态向量(h4),输出被摒弃不用。
- attention的步骤:使用编码器隐藏状态(hidden state)和h4向量来计算该时间步长的上下文向量(C4)。
- 把h4和C4拼接成一个向量。
- 把拼接后的向量连接全连接层和softmax完成解码
- 每个时间点上重复这个操作
encoder之后的向量,不一定包含了所有信息,能让decoder输出。加入attention,让decoder自己选择需要什么信息,来缓解信息瓶颈的问题。
注意力机制,可以粗略地理解为是一种对于输入的信息,根据重要程度进行不同权重的加权处理(通常加权的权重来源于softmax后的结果)的机制
attention
attention计算的变体
1.通常情况下,query向量和value向量的维度相同时,可以使用直接点积相乘。
2.维度不同时,可以增加一个权重矩阵,让他们可以相乘
3.使用一层前馈神经网络,将两个向量,变成一个标量。
attention的优点
1.解决了encoder往decoder方向传递信息时的信息瓶颈的问题
2.缓解了rnn的梯度消失的问题,通过在encoder和decoder之间提供了一种直接连接的方式,防止了梯度在rnn中传播过程中过长,进而导致梯度消失
3.attention给神经网络增加了 一些可解释,通过权重大小,表示语义关系
3.transformer
这是一个具体的模型结构。
为什么需要它?因为rnn是序列计算,顺序执行,不能并行。尽管后面用了GRU、lstm,rnn还需要加入attention,这一个机制不允许同时触达太多状态。计算速度上不去,是不行的。
整体情况:
通过堆叠的形式得到一个更深和表达能力更强的模型
输入编码:
之前RNN切词,通常使用空格等进行切分,这样切分存在的问题是跟词表长度有关,会导致词表数量很大,还会存在一些没出现在词表中的词;另外一个是一个单词的复数跟原单词可能表示不同的embedding。
这里全新的分词方式:BPE(byte pair encoding):
4区别
参考:
1.https://www.bilibili.com/video/BV1rS411F735?p=22&vd_source=2e3106349b9444378baccafe2d93e018
2.https://www.cnblogs.com/liuxiaochong/p/14399416.html
3.https://blog.csdn.net/Wisimer/article/details/104419977
4.https://cloud.baidu.com/article/3248548