基于Attention的Seq2Seq
前言
昨天有位大神在CSDN上发表了一篇题为BERT通俗笔记:从Word2Vec/Transformer逐步理解到BERT
的文章,仔细阅读前两章后,可谓是受益匪浅。但是在研读时,由于自身对NLP相关知识有所缺乏,使我对一些基础概念不甚理解(尽管作者的描述已经特别简单易懂~)。其中Attention便是其中之一,在此之前,我一直以为在Seq2Seq之后便是Self-attention(相关介绍见自注意机制(Self-attention))这一伟大的发明。查阅相关文献后才了解到,由于Seq2Seq对于长句子具有遗忘性,在2015年ICLR会议上Bahdanau,Cho等人提出了Attention机制以解决这个问题,而Self-attention是在2016年提出的。本文主要结合B站UP主ShusenWang的所讲的关于RNN模型与NLP应用的相关内容和自己的理解构成。
1. 回顾Seq2Seq
Seq2Seq是基于RNN和LSTM的Encoder-Decoder结构的网络,它在很多领域都取得了巨大的成功,比如机器翻译,语音识别,文本摘要等。它输入是一个序列,其输出也是一个序列。在Encoder中,将序列转换成一个固定长度的向量,然后通过Decoder将该向量转换成我们想要的序列输出出来,基本结构如下:
但是这种模型在解码时只有最后一个状态向量传递给解码器,即Encoder的最后一个状态,如下图所示,由于其余位置的状态并没有直接参与后续的解码任务,这冥冥之中导致了一些信息的丢失,特别是在处理长对话时,仅仅依靠最后一个状态难以记住语句所有的信息。
下图是单词量和BLEU(双语互译质量评估辅助工具)的关系(挖坑:关于BLEU这些评价指标,后面我将通过一个文章进行总结)。从图可以看出,当单词量大于20后,不带有Attention的Seq2Seq模型的BLEU值出现了明显下降;相反带有Attention的Seq2Seq模型的BLEU值并没有下降,这说明了Attention记住的关键了信息,并实现了较好的状态解码。
2. 基于Attention的Seq2Seq
2.1 相关性计算
本小节也采用和视频RNN模型与NLP应用一致的描述方式,对Seq2Seq model for attention做出解释。在上一小节已经说过,Seq2Seq的Eecoder输出的是最后一个状态hmh_mhm,这也是Decoder的第一个输入,我们利用s0=hms_0=h_ms0=hm来表示。而基于attention的方法最大的一个特点就是,在进行Decoder时,不仅考虑的Eecoder最后一个状态hmh_mhm,也考虑之前每个的输入单词产生的状态,即h1h_1h1、h2h_2h2、h3h_3h3。。。等,如下图所示。原始作者引入了一个权重参数α\alphaα来表示和Decoder输入状态的相关性。我们将Eecoder的任意输出状态hih_ihi与Decoder的第一个输入状态s0s_0s0的相关性记为:αi=align(hi,s0)\alpha_i=\operatorname{align}\left(\mathbf{h}_i, \mathbf{s}_0\right) αi=align(hi,s0)
接下来就是α\alphaα的学习,这里提供了两种方法,第一个是原始论文的计算方法,第二个是一种更为流行的计算方法,也广泛应用于Transformer模型当中。
- 第一种包含两个可学习的参数WWW和vvv,主要做法如下所示:
- 第二种做法主要过程如下,也有两个需要学习参数矩阵WkW_kWk和WqW_qWq。
至此,我们可以得到m个权重α\alphaα,它对应了m个Eecoder的输出状态h1h_1h1、h2h_2h2、h3h_3h3。。。hmh_mhm,我们将这m个权重α\alphaα与m个hih_ihi进行加权求和,得到上下文向量(context vetor)c0c_0c0。其实这种操作是不难理解的, 简单讲,每一个α\alphaα都表示与s0s_0s0的相关性,较大的值表明与对应的状态hhh和s0s_0s0相关性较大,反之较小,我们求他们的加权平均和,自然使得重要的地方更突出,不重要的地方就不突出。
Context vector: c0=α1h1+⋯+αmhm\text { Context vector: } \quad \mathbf{c}_0=\alpha_1 \mathbf{h}_1+\cdots+\alpha_m \mathbf{h}_m Context vector: c0=α1h1+⋯+αmhm
2.2 Eecoder过程
现在开始介绍Eecoder的过程,这里我们将按照第一次输入x1‘x_1^‘x1‘,第二次输入x2‘x_2^‘x2‘,。。。,分步进行介绍~。首先是第一步。
- One step。在原始的Seq2Seq中,我们的输入有s0=hms_0=h_ms0=hm和x1‘x_1^‘x1‘,如下图所示,
而基于Attention的Seq2Seq的Eecoder操作,是在此基础上级联了之前计算得到上下文向量(context vetor)c0c_0c0,经过运算即可得到第一步的输出s1s_1s1。
2.Two step。与之前的操作类似,我们需要计算s1s_1s1(第一步的输出),与decoder输出的m个状态的相关性,具体方法与上文描述一致,进而可获得上下文向量(context vetor)c1c_1c1,最后将x2‘x_2^‘x2‘、s1s_1s1和c1c_1c1级联送入计算单元获得s2s_2s2,方法见下图:
3. Three step。这一步和上文完全相同不在赘述。
最终我们得到一系列输出c1c_1c1、c2c_2c2 … c3c_3c3:
2.3 复杂度分析和权重可视化
对于一个cjc_jcj,我们需要计算m个α\alphaα,如果解码有ttt个状态,则一个用mtmtmt个权重α\alphaα,所以该算法的时间复杂度是mtmtmt,这个计算压力也是巨大的。
下图以英语翻译为法语为例,通过可视化权重,来说明之前的关联性。图中线越粗,表示权重值越大,之间的关联性也越大。
比如英语单词Arae(面积;地区,地段)和法语单词zone(区域),他们具有相同的意思,这说明了Attention的实际意义。
3. 总结
- 改善了Seq2Seq模型,不会造成信息的遗忘。
- 解码器知道关注点在哪里。
- 需要消耗大量的计算量。
参考
BERT通俗笔记:从Word2Vec/Transformer逐步理解到BERT
RNN模型与NLP应用
基于Attention的Seq2Seq相关推荐
- 【论文写作分析】之一 《基于混合注意力Seq2seq模型的选项多标签分类》
[1] 参考论文信息 论文名称:<基于混合注意力Seq2seq模型的选项多标签分类> 发布期刊:<计算机工程与应用> 期刊信息:CSCD扩展 论文写作分析摘要: ...
- Pytorch+LSTM+Attention 实现 Seq2Seq
# !/usr/bin/env Python3 # -*- coding: utf-8 -*- # @version: v1.0 # @Author : Meng Li # @contact: 925 ...
- 基于Attention机制的轻量级网络架构以及代码实现
点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要10分钟 Follow小博主,每天更新前沿干货 导读 之前详细介绍了轻量级网络架构的开源项目,详情请看深度学习中的轻量级网络架构总结与代码实现 ...
- [深度学习] 自然语言处理 --- 基于Attention机制的Bi-LSTM文本分类
Peng Zhou等发表在ACL2016的一篇论文<Attention-Based Bidirectional Long Short-Term Memory Networks for Relat ...
- 深度CTR之AFM:基于Attention网络的FM模型
文章目录 解决的问题 介绍 FM模型 AFM 模型 Pair-wise 交互层 Attention-based 池化层 学习 过拟合的预防 Related Work Experiments Exper ...
- 基于attention机制的中英文机器翻译
前言 为了准备3月中旬的复试,今天回顾整理一下大三下学期做的机器学习课程设计,当时做的是基于attention机制的中英文机器翻译.参考的资料是pytorch官网的英法文间的机器翻译.pytorch参 ...
- 复盘:基于attention的多任务多模态情绪情感识别,基于BERT实现文本情感分类(pytorch实战)
复盘:基于attention机制的多任务多模态情绪情感识别(pytorch实战),基于BERT实现文本情感分类 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对 ...
- 第22章针对Cloze Tests基于Attention机制的的MRC
第22章:揭秘针对Cloze Tests基于Attention机制的的MRC领域开山之作:Teaching Machines to Read and Comprehend架构设计及完整源码实现 1,对 ...
- 论文笔记:使用基于Attention的卷积神经网络进行12导联的心电异常的多分类检测
论文地址:Multi-class Arrhythmia detection from 12-lead varied-length ECG using Attention-based Time-Incr ...
最新文章
- PostgreSQL技术周刊第8期:用PostgreSQL 做实时高效搜索引擎
- browsersync php,用browserSync吞下4个php
- 报名中 | 微软首席人工智能科学家邀你参加一场AI领域的私密聚会
- getBoundingClientRect的用法
- “docker exec“ requires at least 2 arguments. See ‘docker exec --help‘.
- OpenGL之矩阵堆栈绘制立体图元
- 通化红灯_我们如何构建廉价,可扩展的架构来对世界进行卡通化!
- Java 8中新的并行API:Glitz和Glamour的背后
- 黑色背景下,计算照片白色的区域面积和周长
- python 武沛齐_武沛齐 - 主页
- atom上网本 安装linux,拆东墙补西墙?多数Atom上网本或将无法安装Windows 7
- 爬虫实践-微博关键词搜索抓取
- Springmvc和poi3.9导出excel并弹出下载框
- python计算moran_空间自相关 (Global Moran's I)
- JS 如何实现获取本地文件夹名称
- 163vip邮箱提醒您谨防邮箱诈骗,点击查看常见套路
- 手机浏览器查看控制台
- 设置在线html视频几倍数播放,HTML5倍数功能视频播放器(加速2倍,1.5倍播放)...
- LC振荡电路设计原理
- WordPress缩略图美化插件ThnBoV1.3.1ThnBo
热门文章
- webpack5.x 各种开发常见配置大汇总 loader plugin devServer proxy babel 懒加载
- 数字信号处理(一)利用FFT对信号进行频谱分析
- 诺基亚Qt获得开发商支持 迎来新机遇
- 程超:突破瓶颈,思考如何不断的提高自己
- 给详细的WIN7设置wifi热点的方法
- XMind 思维导图 软件下载
- IR2127/IR2128典型接线图
- windows远程桌面 远程服务器繁忙,连接时用户收到“远程桌面服务当前繁忙”消息...
- 离散系统模型的辨识matlab程序,基于MATLAB的系统辨识及离散时间全通系统
- 给定一个文本文件,每行是一条股票信息,写程序提取出所有的股票代码