热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ocr小白理解Aster算法什么是sequence2sequence

目录什么是seq2seq第一种seq2seq第二种seq2seqbeam-search算法参考文献什么是seq2seqseq2seq模型就像一个翻译模型,输

目录

 

什么是seq2seq

第一种seq2seq

第二种seq2seq

beam-search算法

参考文献




什么是seq2seq

seq2seq 模型就像一个翻译模型,输入是一个序列(比如一个英文句子),输出也是一个序列(比如该英文句子所对应的法文翻译)。这种结构最重要的地方在于输入序列和输出序列的长度是可变的。


第一种seq2seq

第一次提出seq2seq应该是在论文[1](在本文中他还提出了rnn的变体,GRU结构单元代替原始的RNN单元)中,他采取了以下结构:

其中 Encoder 部分应该是非常容易理解的,就是一个RNNCell(RNN ,GRU,LSTM 等) 结构。每个 timestep, 我们向 Encoder 中输入一个字/词(一般是表示这个字/词的一个实数向量),直到我们输入这个句子的最后一个字/词 XT ,然后输出整个句子的语义向量 c(一般情况下, c=hXT , XT 是最后一个输入)因为 RNN 的特点就是把前面每一步的输入信息都考虑进来了,所以理论上这个 c 就能够把整个句子的信息都包含了,我们可以把 c 当成这个句子的一个语义表示,也就是一个句向量。在 Decoder 中,我们根据 Encoder 得到的句向量 c, 一步一步地把蕴含在其中的信息分析出来;

在decoder中,每个时刻的ht在论文中由以下公式得到:

需要注意的是在训练阶段yt-1是真实label,而不是上一时刻的预测值。测试阶段是上一时刻的预测值,可以通过beam search(见附录)来优化解码。

但是在实际训练过程中,label是否使用真实数据2种方式,可以交替进行,即一种是把标准答案作为decoder的输入,还有一种是吧decoder上一次的输出的结果作为输入,因为如果完全使用标准答案,会导致收敛的过快,导致测试的时候产生不稳定性。

好了既然我们得到了h,那我们就可以根据ht,yt-1以及encoder的输入c得到这一时刻的输出yt的条件概率,定义为:

这里有两个函数 f 和 g , 一般来说&#xff0c; f 函数结构应该是一个 RNNCell 结构或者类似的结构&#xff08;论文[1]原文中用的是 GRU&#xff09;&#xff1b;g 函数一般是 softmax &#xff08;或者是论文 [4] 中提出的 sampled_softmax 函数&#xff09;。具体实现的时候是&#xff0c;decoder先输入一个开始符号y0&#xff0c;例如start一般写成SOS&#xff08;start of seq&#xff09;&#xff0c;然后Decoder 根据 h<0>&#xff0c;y0&#xff0c;c &#xff0c;就能够计算出 y1 的概率分布了&#xff0c;同理&#xff0c;根据 h<1>,y1&#xff0c;c 可以计算y2 的概率分布…以此类推直到预测到结束的特殊标志 &#xff0c;才结束预测。


第二种seq2seq

在论文[2] 中&#xff0c;google机器翻译团队使用了encoder-decoder模型的变体&#xff0c;其模型结构如下&#xff1a;

我们可以看到&#xff0c;相比于上一个网络&#xff0c;该结构encoder的输出只作用了一次&#xff0c;也就是作为decoder的初始状态h&#xff0c;同时我们不使用SOS&#xff0c;只使用EOS&#xff0c;实际上没有什么本质区别&#xff0c;只是一词两用而已。这个结构简化了原始的模型。原文中使用的是lstm单元&#xff0c;其具体的结构图大概如下图所示&#xff0c;这是一个邮件回复系统&#xff1a;

在原文中&#xff0c;作者除了使用的是4层lstm之外还使用了一些小trick&#xff0c;就是把输入的语句倒过来&#xff0c;但是作者没有明确给出解释&#xff0c;只是大致猜测了一下&#xff0c;可能是由于这种结构会使翻译pair开头的单词距离接近&#xff0c;使语义能够更好地传递。

但是有一点应该是可以改进的&#xff0c;既然反向的效果好&#xff0c;可以在encoder的时候使用bilstm&#xff0c;然后把2个隐层的state输入到decoder。


beam-search算法

首先beam-search只在test的时候有用。假设词表是a&#xff0c;b&#xff0c;c&#xff0c;beam_size&#61;2

1.生成第一个词的时候&#xff0c;选择概率最大的两个词&#xff0c;设为a和c

2.生成第二个词的时候&#xff0c;把前一时刻的输入进去&#xff0c;得到第二时刻的a&#xff0c;b&#xff0c;c的概率&#xff0c;也就是当输入是a的时候我们得到的abc相当于aa&#xff0c;ab&#xff0c;ac的概率&#xff0c;输入是c的时候得到的是ca&#xff0c;cb&#xff0c;cc的概率&#xff0c;在这6个序列中&#xff0c;选择2个得分最高的&#xff0c;然后作为保留序列&#xff0c;例如选择了aa和cb

3.生成第三个词的时候&#xff0c;由前2个保留的序列&#xff0c;可见输入是a和b&#xff0c;也就是6个序列为&#xff0c;aaa&#xff0c;aab&#xff0c;aac和cba&#xff0c;cbb&#xff0c;cbc&#xff0c;再选2个最大的。

4.之后的重复这个过程&#xff0c;获得2个最佳序列


参考文献

文献[1]:Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation

文献[2]: Sequence to Sequence Learning with Neural Networks

文献[3]: Neural Machine Translation by Jointly Learning to Align and Translate

文献[4]:On Using Very Large Target Vocabulary for Neural Machine Translation

文献[5]: A Neural Conversational Model

文献[6]:Beam Search Algorithm

文章转载自&#xff1a;https://zhuanlan.zhihu.com/p/27766645

 


推荐阅读
  • 加密、解密、揭秘
    谈PHP中信息加密技术同样是一道面试答错的问题,面试官问我非对称加密算法中有哪些经典的算法?当时我愣了一下,因为我把非对称加密与单项散列加 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • c语言调用链表,c语言链表的实现
    本文目录一览:1、C语言创建链表,函数调用部分 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • PatchODAX8: ... [详细]
  • 点击上方“新机器视觉”,选择加”星标”或“置顶”重磅干货,第一时间送达很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间。去年有过一段时间的集中学习,做 ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
  • 转自:http:www.phpweblog.netfuyongjiearchive200903116374.html一直对字符的各种编码方式懵懵懂懂,什 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 2022.4.2学习成果
    Flink中的编程模型4.1编程模型在Flink,编程模型的抽象层级主要分为以下4种,越往下抽象度越低,编程越复杂,灵活度越高。这里先不一一介绍,后续会做详细说明。这4层中,一般用 ... [详细]
  • 数据仓库中基本概念
    一、数据仓库数据仓库(DataWarehouse)是一个面向主题的、集成的、稳定的且随时间变化的数据集合,用于支持管理人员的决策面向主题主题就是类型的意思。传统数 ... [详细]
  • https:www.bilibili.comvideoav43996494?p61补充说明(修正前面代码存在问题):#先验框筛选defchoose_anchor_boxes(sel ... [详细]
author-avatar
欣欣然人人宇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有