前言


昨天有位大神在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模型当中。

  1. 第一种包含两个可学习的参数WWW和vvv,主要做法如下所示:
  2. 第二种做法主要过程如下,也有两个需要学习参数矩阵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​=α1​h1​+⋯+αm​hm​

2.2 Eecoder过程

现在开始介绍Eecoder的过程,这里我们将按照第一次输入x1‘x_1^‘x1‘​,第二次输入x2‘x_2^‘x2‘​,。。。,分步进行介绍~。首先是第一步。

  1. 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. 总结

  1. 改善了Seq2Seq模型,不会造成信息的遗忘。
  2. 解码器知道关注点在哪里。
  3. 需要消耗大量的计算量。

参考

BERT通俗笔记:从Word2Vec/Transformer逐步理解到BERT
RNN模型与NLP应用

基于Attention的Seq2Seq相关推荐

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

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

  2. Pytorch+LSTM+Attention 实现 Seq2Seq

    # !/usr/bin/env Python3 # -*- coding: utf-8 -*- # @version: v1.0 # @Author : Meng Li # @contact: 925 ...

  3. 基于Attention机制的轻量级网络架构以及代码实现

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要10分钟 Follow小博主,每天更新前沿干货 导读 之前详细介绍了轻量级网络架构的开源项目,详情请看深度学习中的轻量级网络架构总结与代码实现 ...

  4. [深度学习] 自然语言处理 --- 基于Attention机制的Bi-LSTM文本分类

    Peng Zhou等发表在ACL2016的一篇论文<Attention-Based Bidirectional Long Short-Term Memory Networks for Relat ...

  5. 深度CTR之AFM:基于Attention网络的FM模型

    文章目录 解决的问题 介绍 FM模型 AFM 模型 Pair-wise 交互层 Attention-based 池化层 学习 过拟合的预防 Related Work Experiments Exper ...

  6. 基于attention机制的中英文机器翻译

    前言 为了准备3月中旬的复试,今天回顾整理一下大三下学期做的机器学习课程设计,当时做的是基于attention机制的中英文机器翻译.参考的资料是pytorch官网的英法文间的机器翻译.pytorch参 ...

  7. 复盘:基于attention的多任务多模态情绪情感识别,基于BERT实现文本情感分类(pytorch实战)

    复盘:基于attention机制的多任务多模态情绪情感识别(pytorch实战),基于BERT实现文本情感分类 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对 ...

  8. 第22章针对Cloze Tests基于Attention机制的的MRC

    第22章:揭秘针对Cloze Tests基于Attention机制的的MRC领域开山之作:Teaching Machines to Read and Comprehend架构设计及完整源码实现 1,对 ...

  9. 论文笔记:使用基于Attention的卷积神经网络进行12导联的心电异常的多分类检测

    论文地址:Multi-class Arrhythmia detection from 12-lead varied-length ECG using Attention-based Time-Incr ...

最新文章

  1. PostgreSQL技术周刊第8期:用PostgreSQL 做实时高效搜索引擎
  2. browsersync php,用browserSync吞下4个php
  3. 报名中 | 微软首席人工智能科学家邀你参加一场AI领域的私密聚会
  4. getBoundingClientRect的用法
  5. “docker exec“ requires at least 2 arguments. See ‘docker exec --help‘.
  6. OpenGL之矩阵堆栈绘制立体图元
  7. 通化红灯_我们如何构建廉价,可扩展的架构来对世界进行卡通化!
  8. Java 8中新的并行API:Glitz和Glamour的背后
  9. 黑色背景下,计算照片白色的区域面积和周长
  10. python 武沛齐_武沛齐 - 主页
  11. atom上网本 安装linux,拆东墙补西墙?多数Atom上网本或将无法安装Windows 7
  12. 爬虫实践-微博关键词搜索抓取
  13. Springmvc和poi3.9导出excel并弹出下载框
  14. python计算moran_空间自相关 (Global Moran's I)
  15. JS 如何实现获取本地文件夹名称
  16. 163vip邮箱提醒您谨防邮箱诈骗,点击查看常见套路
  17. 手机浏览器查看控制台
  18. 设置在线html视频几倍数播放,HTML5倍数功能视频播放器(加速2倍,1.5倍播放)...
  19. LC振荡电路设计原理
  20. WordPress缩略图美化插件ThnBoV1.3.1ThnBo

热门文章

  1. webpack5.x 各种开发常见配置大汇总 loader plugin devServer proxy babel 懒加载
  2. 数字信号处理(一)利用FFT对信号进行频谱分析
  3. 诺基亚Qt获得开发商支持 迎来新机遇
  4. 程超:突破瓶颈,思考如何不断的提高自己
  5. 给详细的WIN7设置wifi热点的方法
  6. XMind 思维导图 软件下载
  7. IR2127/IR2128典型接线图
  8. windows远程桌面 远程服务器繁忙,连接时用户收到“远程桌面服务当前繁忙”消息...
  9. 离散系统模型的辨识matlab程序,基于MATLAB的系统辨识及离散时间全通系统
  10. 给定一个文本文件,每行是一条股票信息,写程序提取出所有的股票代码