seq2seq:Sequence to sequence
也称为序列网络模型
应用
- 机器翻译
谷歌翻译做的比较好。还会做目标语言检测。 - 文本摘要
- 情感对话生成
- 代码补全
结构
包含两个循环神经网络,它们共同工作从而将一个序列转化为另一个序列:
- 编码器网络:将输入压缩成矢量;
- 解码器网络:将该矢量展开成新的序列。
如同截获一封电报,敌方编码,我方解码。
统计模型的问题:没有上下文信息。
RNN 要求输入大小一致。
文本数据长度不同,可以补全。
特殊符
起始符:GO
终止符:EOS (end of sentence)
存在的问题
- 压缩损失了信息
- 输入长度有限制,在10–20之间,如果过长,如40–50,表达效果会直线下降。
以上两个问题,引出 attention 机制来解决
Attention
在图片的某个特定领域 以 高分辨率 展示,周边区域使用 低分辨率。即注意区域。
将 attention 机制应用在 NLP 领域,取得的效果显著。在 seq2seq 中加上 attention机制。
本质:对 Encoder 层状态进行加权,从而掌握输入语句中的所有细节信息。
加权有不同的算法,不同算法指定的加权方式不同
加权效果:
如果用热度图来说
对于机器翻译,对角线位置最重要。
每一个词有他们对应的特定的概率分布。可以根据概率来计算,结果的每个词应该聚焦哪几个输入的词。
Bucket 机制
正常情况要对所有句子进行补全。
Bucker 可以先分组,再计算。
假如有很多组对话,输入输出都可能有 0–100个字符。
可以从 0–100 中取一个区间,对每个区间进行训练。
tf 的 seq2seq 会自动加入 bucket 机制。
https://www.cnblogs.com/HolyShine/p/9850822.html