python attention机制_从零开始学Python自然语言处理(26)—— 强大的Attention机制...

前文传送门:

在上一次面试失利后,我回来仔细研究了一下Attention机制,研究完我不禁感悟,这机制真的厉害啊!因为我之前面试被问到的Encoder - Decoder框架中有个瓶颈是编码的结果以固定长度的中间向量表示,这导致较长的序列编码后很多信息被稀释了,导致解码时效果不佳。当时只记得有个Attention,但是不了解他的原理,所以上次面试没过:从零开始学自然语言处理(25)—— 通用的Encoder-Decoder模型框架

NLP中的Attention机制是在论文《NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE》被提出的,有兴趣的朋友可以去阅读论文:https://arxiv.org/pdf/1409.0473.pdf

上次面试问到的Encoder - Decoder框架如下图所示:

format,png

而加入Attention机制之后,Encoder - Decoder框架可以改为如下所示:

format,png

大家应该注意到上下两张图的主要区别在于中间向量C从固定不变的一个变成了不同的多个,在解码每个序列字符串时使用不同的Ci。

例如我们在翻译 “Through the woods, we reached the bank of the river.” 时,我们会翻译成 “穿过树林,我们到达了河岸。”,当我们在翻译 “bank” 这个词时,应该将注意力集中在 “bank ”上,同时也应该考虑上下文,例如“river”,这样我们才会将“bank”翻译为“河岸”,而不是“银行”,这符合我们人类的认知,又例如,我们翻译“woods”时,会重点关注“woods”和“through”等。所以我们每次在翻译(解码)一个词时,重点关注的内容是不同的,那如何表示在Decoder阶段解码某个输出(翻译某个词)时对原始输入关注的重点不同呢?

这个问题在上述的论文中得到了解决,论文提出了以下结构的模型:

format,png

这里使用了双层的RNN结构,关于RNN和双层RNN可以参考之前的文章:

首先,在Encoder阶段,输入的是 X 序列,X=(X1,X2,X3,...,XT),经过一个双向RNN结构编码,得到隐藏层每个单元的向量hi ,然后使用如下的公式计算得到解码不同单词时用到的Ci:

format,png

大家应该发现了,这里的C不再是传统Encoder-Decoder框架中那个固定的C了,而是根据解码不同 y 有着不同的Ci !理解这一点就理解了Attention的精髓了!

你可能会问,这里的αij是如何计算的?这里的 αij 类似权重的意思,如上图所示,在解码yt时,会综合考虑αt1,αt2,...,αtT作为对不同输入 Xi 的关注程度不同,αij计算公式如下:

format,png

所以αij其实是 eij经过softmax之后的结果,那问题变为eij是如何计算的了!eij的计算公式如下:

format,png

这里的a是一个对齐模型(Alignment model),实际上是一个前馈神经网络,这里的“对齐”你可以理解为是一种相似度的计算,计算的是当前解码内容的上一个隐藏状态s(i-1)和当前hj的关系,相当于将每个编码输入和当前输出进行匹配,从而得到权重。这样就完成了对Encoder-Decoder框架加入Attention机制,解决了一开始的问题!

这个Attention面试问题也就迎刃而解了~

format,png

扫码下图关注我们不会让你失望!

e19b4575ecdc5286c1322a7465eac0ab.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[机器人-2]:开源MIT Min cheetah机械狗设计(二):机械结构设计

目录 1、四肢朝向的选择 2、电机布局形式的选择 3、电机的选型及测试(非常重要) 4、结构优化 5、尺寸效应 6、其他 1、四肢朝向的选择 机械狗的结构设计,第一个摆在我们面前的就说四肢的朝向问题,如下图,我们是…

mysql用户权限表join_MyBatis映射利用mysql left join 解决N+1查询问题

1.权限是几乎每个系统都需要的2.一般在用户请求某个url的时候,都需要验证用户是否拥有该url的访问权限3.最简单的权限系统需要 用户表,角色表,用户角色表,权限表,角色权限表# Host: 127.0.0.1 (Version: 5.6.22)# Date…

python 爬取贝壳网小区名称_如何使用 python 爬取全国小区名称

前言笔者在做一个 NLPNLPNLP 项目时,需要识别小区名,因此想要查询网上是否有相关的数据集。经过一番搜索后一无所获…从而决定自己来爬取这份数据。由于爬取网站的内容信息之后可能会发生变更,因此此处给出具体的爬虫思路,便于应对…

python获取手机通知栏消息_Python编写简单的通知栏脚本启动工具

随着自己编写的脚本与安装的工具越来越多,电脑的桌面和文件夹也越来越乱了。就在前几天因为一个不小心,我把自己的一个项目给删了,所以决定将电脑整理一下。不过这一整理我很多脚本和工具的位置我就忘记了,所以决定写个小工具来快速启动一些常用的脚本或工具这里选择Python是因…

java 发送邮件昵称_利用JavaMail发送QQ邮件

一、RFC882文档简单说明RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔。邮件头包含的内容有:from字段   --用于指明发件人to字段    --用于指明收件…

java 访问控制权限_Java访问控制权限有哪些?区别是什么?

原标题:Java访问控制权限有哪些?区别是什么?Java中的类和方法等都是有访问控制权限的,用来控制方法、类、属性等的生效范围,Java有四种访问控制权限,其中比较常用的就是public和private,今天华清远见Java学…

java 规格overview_《Java數據結構和算法》- OverView

Q: 不同數據結構的優缺點?數據結構優點缺點數組(Array)快速訪問,如果知道下標,就可以非常快地存取查找慢, 插入或刪除慢, 大小固定有序數組(OrderedArray)比無序的數組查找快插入或刪除慢,大小固定棧(Stack…

mysql 集群怎么卸载节点_Greenplum移除节点

基于某某原因,我们的Greenplum需要卸载一个节点(测试环境的Greenplum集群),由于该集群使用了很久,里面有许多开发所需要的数据,所以在卸掉一个节点后,还要保证数据不会丢失。当然,期间也遇到了点问题&#…

python中不论类的名字是什么歌_Python自动猜歌名,还愁排名上不去嘛?

前言相传,就在前几日,在网上闲逛时,刷到了一个猜歌的小程序。这个小程序通过播放歌曲部分片段,然后让用户来猜它的歌名,大概是这样的:作为一个脑热的听歌爱好者,于是他越陷越深,越刷…

trace java_使用java动态字节码技术简单实现arthas的trace功能。

参考资料用过[Arthas]的都知道,Arthas是alibaba开源的一个非常强大的Java诊断工具。不管是线上还是线下,我们都可以用Arthas分析程序的线程状态、查看jvm的实时运行状态、打印方法的出入参和返回类型、收集方法中每个代码块耗时,甚至可以监控…

打印狗的健康值Java_嵌入式狗的JAVA之路 HTML 补课

学了JAVA WEB应用,补充一下HTML的标签,常用的,不然页面都画不出来了~~test 标题,h1h2h3 3个字号test 段落link 链接 使用 Target 属性,你可以定义被链接的文档在何处显示。下面的这行会在新窗口打开文档:Vi…

python 角度传感器模拟_python树莓派红外反射传感器

本文实例为大家分享了python树莓派红外反射传感器的程序,供大家参考,具体内容如下1、工具rpi3,微雪ARPI600,Infrared Reflective Sensor2、基本原理Infrared Reflective Sensor 输出数字和模拟信号模拟信号通过ARPI600上的AD转换芯…

java构造方法赋值内存图_java 面向对象(九):类的结构:构造器(一)简介;属性赋值顺序;JavaBean的概念...

1.构造器(或构造方法):Constructor构造器的作用:* 1.创建对象* 2.初始化对象的信息2.使用说明:* 1.如果没显式的定义类的构造器的话,则系统默认提供一个空参的构造器* 2.定义构造器的格式:权限修饰符 类名(形参列表){}…

java 集合modcount_源码|jdk源码之LinkedList与modCount字段

链表是对上一篇博文所说的顺序表的一种实现。与ArrayList思路截然不同,链表的实现思路是:不同元素实际上是存储在离散的内存空间中的。每一个元素都有一个指针指向下一个元素,这样整个离散的空间就被“串”成了一个有顺序的表。从链表的概念来…

idea 新建ssm java ee_IDEA搭建SSM项目实现增删改查

首先打开IDEA,File—>New—>Project创建项目选择左侧导航栏里的Maven,勾上勾,选择webapp按如下图进行填写创建完成后进入项目,右下角弹出的提示点击右边的Enable Auto-Import,自动配置连接数据库,我用…

php mail centos_centos怎么发送邮件

一、安装sendmail与mail1、安装sendmail:1) centos下可以安装命令:yum -y install sendmail2) 安装完后启动sendmail命令:service sendmail start2、安装mail安装命令:yum install -y mailx二、发送邮件1、通过文件内容发送发送命…

php文件的作用,php入口文件的作用-PHP问题

php入口文件的作用php入口文件能够完成主动加载性能。解析PHP入口文件的主动加载性能php的主动加载:正在php5之前,咱们要用某个类或类的办法,那必需include或许require,之后能力应用,每一次用一个类,都需求…

java中随机数边界问题,java 简单Dice问题(随机数的运用)

[java]代码库/*** Dice Write a program that simulates rolling two dice using the following* steps: 1. Prompt the user for the number of sides for two dice. 2. “Roll” the* dice three times by generating a random number between 1 (inclusive) and the* number…

java单词测试,java单词 - 在线打字测试(dazi.kukuw.com)

java单词贡献者:15533470608类别:英文 时间:2018-08-04 22:32:16 收藏数:20 评分:0返回上页举报此文章请选择举报理由:广告/谣言/欺诈政治敏感色情/违法信息垃圾文章其他收藏到我的文章改错字public static…

java vector list,Java基础之:List——ArrayList Vector

Java基础之:List——ArrayList & VectorArrayList简单介绍ArrayList实现了List接口,底层是一个数组,并实现了可变的功能。底层属性(transient Object[] elementData;)在序列化时,忽略该属性。ArrayList实现了List接口&#xf…