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

EffectiveApproachestoAttentionbasedNeuralMachineTranslation【论文笔记】

一、摘要attention机制通过在翻译过程中选择性地专注于部分原句来提高神经机器翻译(NeuralMachineTranslation,NMT

一、摘要

  attention机制通过在翻译过程中选择性地专注于部分原句来提高神经机器翻译(Neural Machine Translation,NMT)的性能。然而,目前很少有用的基于attention的NMT架构。本篇论文介绍了两种简单有效的attention机制。全局attention关注原句的所有单词,局部attention关注原句的一部分单词。


二、介绍

  NMT通常是一个大型的神经网络,以端到端的方式进行训练,并且能够很好地推广到很长的单词序列。这意味着模型不用像标准的MT一样存储巨大的短语表和语言模型。NMT占用内存很少。实现NMT解码器比标准的MT更容易。
  在这篇论文中,作者提出了两种attention:global attention和local attention。前一种方法类似于(Bahdanau et al.,2015)的模型,但在结构上更简单。后者可被视为(Xu et al.,2015)中提出的soft attention 和 hard attention的混合:它比global attention或soft attention消耗更少的计算资源,同时,与hard attention不同,容易实现与训练。并且,作者也对基于attention的模型的各种对齐函数做了实验。


三、NMT

  神经机器翻译系统是直接建模条件概率p(y∣x)p(y|x)p(yx)的神经网络,将原句x1,...,xnx_1,...,x_nx1,...,xn翻译为目标句y1,...,ymy_1,...,y_my1,...,ym。NMT的基本形式由两个组件构成:一个编码器,用于计算每个原句的表示 sss;一个解码器,一次生成一个目标词,因此将条件概率分解为:
在这里插入图片描述

  在解码器中对这种分解进行建模的自然选择是使用递归神经网络(RNN)架构。可以用公式来表示解码每一个单词yjy_jyj的概率:
在这里插入图片描述
  其中 ggg 是转换函数,输出一个词表大小的向量。hjh_jhj是RNN隐藏单元的输出,可以用以下公式计算:
在这里插入图片描述
  给定之前的隐藏层状态,fff 函数计算当前的隐藏层状态。本篇论文中,作者使用了堆叠的LSTM结构,训练目标函数如下:
在这里插入图片描述


四、Attention-based Models

  两种attention:global attention 和 local attention。两种的不同在于是用到了全部单词还是部分单词。共同之处在于,在解码阶段的每个时间步 ttt,两种方法首先将堆叠LSTM的顶层处的隐藏层状态 hth_tht 作为输入。然后目标是推导出一个上下文向量 ctc_tct,其捕获了相关的原测信息以帮助预测当前的目标词 yty_tyt。虽然这两种attention在推导上下文向量是不同的,但它们的后序步骤是相同的。
  给定目标隐藏层状态 hth_tht,和原侧的上下文向量 ctc_tct,将两个向量拼接在一起生成注意力的隐藏层状态:
在这里插入图片描述
  然后将其喂给softmax层,生成概率形式的向量。
在这里插入图片描述


1.global attention

  global attention 的主旨就是在推导上下文向量 ctc_tct时,考虑编码器的所有隐藏层状态。在这种模型中,一个变长的对齐向量 ata_tat,大小等于原侧的时间步数,通过比较目前的target隐藏层状态 hth_tht与每一个原测的隐藏层状态 _hs^\_h_s_hs:
在这里插入图片描述
在这里插入图片描述
然后根据所有原状态和 ata_tat 计算全局上下文向量ct作为加权平均值。最后通过Eq.(5)和Eq.(6)进行预测。
在这里插入图片描述


2.local attention

  global attention有个缺点就是它为每个目标词必须要关注原侧的所有单词,代价昂贵,并且可能使得翻译更长的序列变得不切实际,不如段落、文档。为了解决这个不足,作者提出了local attention机制,对每一个目标词,选择性地关注原句的一小部分单词。该方法具有避免在soft attention中引起的昂贵计算的优点,同时比hard attention更容易训练。具体细节来说,模型首先在时间t为每个目标词生成一个对齐位置 ptp_tpt。然后,上下文向量 ctc_tct 通过窗口内 [pt−D,pt+D][p_t-D,p_t+D][ptD,pt+D] 的源隐藏状态集合的加权平均值推导得出。D的大小是凭经验选择的。与global attention不同,局部对齐向量 ata_tat 是固定维度的,比如 ∈R2D+1∈R^{2D+1}R2D+1。下面考虑模型的两个变种:
  **Monotonic alignment:**假设原序列和目标序列大致单调对齐,我们只需设置 pt=tp_t = tpt=t
  **Predictive alignment:**而不是假设单调对齐,我们的模型预测对齐位置如下:
在这里插入图片描述
   WpW_pWpvpv_pvp 是模型参数,SSS 是原句长度。那么通过 sigmoidsigmoidsigmoid 函数后,pt∈[0,S]p_t∈[0, S]pt[0,S]。为了支持 ptp_tpt 附近的对准点,我们将高斯分布置于 ptp_tpt 附近。 具体来说,我们的对齐权重现在定义为:
在这里插入图片描述
  我们使用Eq.(7)中的相同对齐函数,标准偏差根据经验设定为 σ=D/2σ = D/2σ=D/2,ptp_tpt 是一个实数。
在这里插入图片描述


3.Input-feeding Approach

  作者提出的两种attention都是独立进行的,然而这是不理想的。在标准的MT中,通常在翻译过程中保持覆盖集以跟踪已翻译过的单词。同样,在注意力NMT中,应该在考虑过去的对比信息的情况下共同做出对比决策。为了解决这个问题,作者提出了input-feeding的方法,其中attention向量 ht~ h_t ht 在下一个时间步时会与输出拼接在一起。 这会有两个方面的影响:我们希望让模型充分了解先前的对齐选择,我们创建了一个跨越水平和垂直的非常深的网络。
在这里插入图片描述


推荐阅读
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • Lua IO操作详解
    本文介绍了Lua中的IO操作,包括简单模式和完整模式下的文件处理方法,以及相关的系统调用。 ... [详细]
  • 深入解析Java中的空指针异常及其预防策略
    空指针异常(NullPointerException,简称NPE)是Java编程中最常见的异常之一。尽管其成因显而易见,但开发人员往往容易忽视或未能及时采取措施。本文将详细介绍如何有效避免空指针异常,帮助开发者提升代码质量。 ... [详细]
  • 本文探讨了 TypeScript 中泛型的重要性和应用场景,通过多个实例详细解析了泛型如何提升代码的复用性和类型安全性。 ... [详细]
  • WPF项目学习.一
    WPF项目搭建版权声明:本文为博主初学经验,未经博主允许不得转载。一、前言记录在学习与制作WPF过程中遇到的解决方案。使用MVVM的优点是数据和视图分离,双向绑定,低耦合,可重用行 ... [详细]
  • 解决Unreal Engine中UMG按钮长时间按住自动释放的问题
    本文探讨了在Unreal Engine中使用UMG按钮时,长时间按住按钮会导致自动释放的问题,并提供了详细的解决方案。 ... [详细]
  • 普通树(每个节点可以有任意数量的子节点)级序遍历 ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
author-avatar
手机用户2602939233
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有