Seq2Seq model个人小记

Seq2Seq模型在许多自然语言处理的任务中表现良好,比如:机器翻译,聊天机器人等。它主要由两个RNN(经常使用LSTM或者GRU)模块构成,分别充当encoder和decoder的角色,encoder有序的读取不同长度的输入,每个timestep读取一个symbol(word),encoder把不同长度的句子(inputs)转换为固定长度的向量c,decoder在根据这个固定长度的向量解码为不同长度的输出(outputs)。

使用模型需要考虑的一些问题

  • Padding
  • bucketing && dynamic-rnn
  • attention Mechanism

Padding

细心的读者可能会说,你前面不是说encoder有序的读取不同长度的输入(inputs)吗?这里表达的意思是模型能够处理不同长度的输入,但是模型训练的时候,我们需要先把中文(英文)先转换成计算机能够识别的表达(这里通常说的是向量形式),我们知道神经网络训练其实就是大量的矩阵计算,长度不统一会给计算和参数更新带来一定的困难,所以需要每个输入保持固定长度(或者每个minibatch内的输入保持固定长度),这里就需要用到padding,通常是zero-padinng,即把每个minibatch内的输入都不足的地方补零,直到所有句子的长度都等于该minibatch内最长句子的长度。

除了zero-padding补足长度之外,还需要对句子做一些其他特殊的padding,这里需要用到下面几个字符
1. PAD (zero-padding)
2. SOS (start of sentence)
3. EOS(end of sentence)
4. UNK(Unknown; word not in vocabulary)

SOS主要用来告诉decoder什么地方开始decoding,EOS用来告诉decoder什么地方结束decoding。
当遇到一些词典里面没有的词的时候,通常使用UNK替换。

Bucketing && Dynamic-rnn

尽管Padding能够解决不同长度输入的问题,但接下来考虑这种情况,如果所有输入中最长的句子的长度为100,而最短的只有2,rnn有要求所有输入长度必须一样,那就需要把所有句子都padding到100,而长度为2的句子padding到100,得加入98个0, 这样做的后果就是:
1. 向量稀疏问题(存在大量0)
2. 增大计算量
3. 短句子的信息可能被大量0所掩盖

Bucketing

bucketing的思想其实很简单,就是根据句子长度把句子放入不同大小的buckets中,例如我们定义了 [ (5,10), (10,15), (20,25), (40,50) ]这几个buckets,如果输入(input)的长度为4,我们就把这个input放入(5,10)这个bucket中,这样最后相似长度的句子都会被放到同一个bucket中,也就解决了前面提到的问题。

有的同学可能接着会问,这样的话,不同的bucket里的句子还是不同大小的啊,还是不满足rnn需求。答案是最rnn会为每一个buckets都创建一个sub graph。训练的时候,根据当前batch data所归属的bucket id,找到它对应的sub graph,进行参数更新(虽然是不同的sub graph,但参数是共享的。至少tensorflow中是这么实现的)。

Dynamic-rnn

Dynamic-rnn会更灵活一点,它可以让不同迭代传入的batch可以是长度不同数据,但同一次迭代一个batch内部的所有数据长度仍然是固定的。例如,第一时刻传入的数据shape=[batch_size, 10],第二时刻传入的数据shape=[batch_size, 12],第三时刻传入的数据shape=[batch_size, 8]等。

attention Mechanism

Seq2Seq model也存在一些限制,encoder把输入(input)中的所有信息整合为一个固定输入的向量,decoding的时候,对短句可能影响不太明显,但是对于长句,则将丢失大量信息(context)。对于长句丢失信息,有一种方法是encoder倒着读入输入,这样的话encoding后的上下文向量c和的从顶时更接近,比如对于中英翻译:source:“这是一个太阳”。target:”this is a sun”,倒着读的时候, encoding读入的顺序是:“阳太个一是这“,“这”和”this”更接近,这可以在一定程度上缓解长时依赖的问题。

但有没有一种更好的方法能在每次decoding的时候着重关注对当前decoding影响较大的encoding, 比如,对于input: 这是一个太阳 decoding 预测this的t时候,我们知道主要取决于于”这是”,所以我们期望,decoding时能着重关注对当前output的词影响较大的词,我们能不能给input中的每个词一个权重,根据decoding时候的场景不同选择不同的权重,对于前面例子,我们就可以给“这是”这个词分配更高的权重。每次decoding的时候,对于encoder中的每个词的信息都会有不同的权重。(这只是一个粗略的比喻,如有不对,欢迎指正,细节的公式推导不在给出,网上都有)

Seq2Seq model个人小记相关推荐

  1. 翻译:seq2seq model in Machine Learning

    原文链接:seq2seq model in Machine Learning seq2seq 首次被谷歌引用是用于机器翻译.在那之前的翻译方式十分朴素.敲入的每个单词会被忽视语法和上下文直接转换成目标 ...

  2. 【深度学习人类语言处理】1 课程介绍、语音辨识1——人类语言处理六种模型、Token、五种Seq2Seq Model(LAS、CTC、RNN-T、Neural Transducer、MoChA)

    Deep Learning for Human Ianguage Processing 1. DLHLP-Introduction 1.1 概述 1.2 六种模型与应用 1.2.1 语音到文本 1.2 ...

  3. Seq2Seq Model(序列到序列模型)

    Seq2Seq 是一种循环神经网络的变种,包括编码器 (Encoder) 和解码器 (Decoder) 两部分.Seq2Seq 是自然语言处理中的一种重要模型,可以用于机器翻译.对话系统.自动文摘. ...

  4. Sequence-to-Sequence Model (Seq2Seq)

    Sequence-to-Sequence Model (Seq2Seq) 用Seq2Seq实现机器翻译:多对多问题 机器翻译数据Machine Translation Data http://www. ...

  5. [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)2

    最近有个任务:利用 RNN 进行句子补全,即给定一个不完整的句子,预测其后续的字词. 本文使用了 Seq2Seq 模型,输入为 5 个中文字词,输出为 1 个中文字词. 目录 关于RNN 语料预处理 ...

  6. [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)

    最近有个任务:利用 RNN 进行句子补全,即给定一个不完整的句子,预测其后续的字词. 本文使用了 Seq2Seq 模型,输入为5个中文字词,输出为一个中文字词. 目录 关于RNN 语料预处理 搭建数据 ...

  7. Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译

    NLP FROM SCRATCH: TRANSLATION WITH A SEQUENCE TO SEQUENCE NETWORK AND ATTENTION Author: Sean Roberts ...

  8. pytorch记录:seq2seq例子看看这torch怎么玩的

    https://blog.csdn.net/nockinonheavensdoor/article/details/82320580 先看看简单例子: import torch import torc ...

  9. 【论文写作分析】之一 《基于混合注意力Seq2seq模型的选项多标签分类》

    [1] 参考论文信息   论文名称:<基于混合注意力Seq2seq模型的选项多标签分类>   发布期刊:<计算机工程与应用>   期刊信息:CSCD扩展   论文写作分析摘要: ...

最新文章

  1. asp.net学习之 数据绑定控件--List数据绑定控件
  2. comparator 与comparable之间的关系 注意实现接口comparable<T>时候,T的取值为实现类的类型,眼高手低容易犯迷糊的地方提醒
  3. javaee校园信息服务器,基于javaEE服务器 学生考勤管理系统的设计与实现开题报告...
  4. ---WebCam网络摄像头11 http协议
  5. .net core grpc 实现通信(一)
  6. spring----Bean的生命周期和循环依赖
  7. 围观神龙架构首次开箱,现场直播暴力拆机
  8. VSCode Editing Code
  9. C语言进阶——使用C语言与gnuplot结合画一些波形
  10. Q127:PBRT-V3,理解“体渲染”积分器的关键竟然是这张图
  11. 计算机视觉算法_RANSAC 估计
  12. 软件应用:HexorBase Tool 实战测试!
  13. ROS(9):机器人开源项目poppy-project
  14. html表白代码大全可复制,浪漫的html表白特效网页制作源
  15. 一文看不懂方差和标准差
  16. python制作ico图标_Python 批量 png 转 ico
  17. 【AI能否取代设计师】「Stable Diffusion」AI绘画黑科技将告诉你答案
  18. c#设计一个Windows应用程序,模拟一个简单的银行账户管理系统。完成“创建账A款”“存款”和“查询余额”的模拟操作。程序功能如下:
  19. 扇贝python编程课_扇贝编程app下载-扇贝编程手机版python「附如何设置自由职业」 - 超好玩...
  20. 10以内的分解与组成怎么教_如何教宝宝熟记10以内分解?

热门文章

  1. Okio原理分析之Segment数据管理
  2. 过河问题(两种方法随时!!比较)
  3. 20210330某农业公司前端面试总结
  4. C++ static_cast相同父类的子类之间强制转换(子类A的指针转换成子类B)(Ray Tracing the next week 中BVH部分遇到的问题)
  5. 如何解决 could not open `E:\java\lib\amd64\jvm.cfg‘
  6. MapReduce序列化之统计各部门员工薪资总和
  7. 微信小程序数组对象的添加及删除(Vue2)
  8. 2014计算机二级vfp,2014计算机二级VF试题及答案解析(第十二套)
  9. LVM逻辑卷管理与磁盘配额
  10. go之生成随机字符串