ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

动手学深度学习 | 序列到序列学习(seq2seq)| 62

2021-10-07 20:31:07  阅读:181  来源: 互联网

标签:RNN seq2seq len encoder 62 decoder 序列 句子


目录

Seq2Seq

seq2seq,从一个句子翻译到另外一个句子。

封面是一个基因转录,这个也是一个seq2seq的过程。

seq2seq最早是来做机器翻译的,不过现在基本都使用bert。(听说google的翻译和搜索都使用了bert)

seq2seq是一个encoder-decoder的架构。

  • encoder是一个RNN,读取输入句子(可以是双向的)

encoder就是给一个句子,比如"hello world",然后需要翻译成法语的句子。

把最后时刻的隐藏状态传递给解码器,可以认为最后时刻的隐藏状态包含了整个句子的信息。

encoder的RNN可以是双向的,双向的RNN可以做encoder,但是不能做decoder。encoder是不需要预测的,所以可以看到完整的句子,可以正着看,反着看,encoder经常会使用双向RNN。

  • decoder使用另外一个RNN来输出

隐藏状态一过来,先给一个<bos>说明句子开始了,然后把上一个时刻的翻译做为下一个时刻的输入,当然隐藏状态也是向下传递。这样对长度是可以变化的,知道输出<eos>才结束预测,这样就不管源句子有多长,target句子有多长,不用关系如何让二者的长度一样,就按照时刻往前走,走到停为止。

encoder最后一层的最后时刻的输出,将放到和decoder的input一起输入。

训练:

decoder在训练的时候是知道真正的目标句子的,就是正常的进行RNN的训练。(这里是没有利用上一时间刻的预测结果的

推理:

因为没有正确的答案,所以只能不断利用上一时刻预测的结果作为下一个时刻的输入,不断地向前预测。

BLEU完美是1,然后越小越差。

如果label很短,但是pred很长,这样会命中很多,所以要进行惩罚\(min(0,1-\frac{len_{label}}{len_{pred}} )\)

代码


QA

  1. encoder输出和decoder输入,concat和按位相加起来有什么区别吗?

它们可能长度不一样,所以是不能相加的,这里只要保证他们的隐藏单元数量相同(列宽相同),就可以进行拼接操作。

  1. embedding层是word2vec吗?

不是的,而且现在也不打算将word2vec,因为现在也用的很少,现在基本都是用bert。

而且演示代码中也没有使用预训练的embedding,这里是是随机初始化,然后重头开始训练的。

  1. vaild_length是怎么选择的?

vaild_len不是选择,就是实际的法语句子有多长,要把vaild_len存下来,后面计算loss的时候,valid_len后面的padding的mask都是不要计算的。

  1. 现在seq2seq好像都用transformer实现了,RNN,LSTM还有什么使用场景吗?

现在是潮流,说用transformer不用RNN了,但是可能过几个月大家又说RNN好。

深度学习就是一波又一波...

  1. 实际句子的长度超过了设定的句子长度,是直接截掉不用了还是放到下一个句子?

是直接截掉不用,不能放到下一个句子。

所以要选一个差不多的长度,不要截取掉太多。

标签:RNN,seq2seq,len,encoder,62,decoder,序列,句子
来源: https://www.cnblogs.com/Rowry/p/15376939.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有