当前位置: 首页 > news >正文

Transformer的前世今生 day04(ELMO、Attention注意力机制)

ELMO

前情回顾

  • NNLM模型:主要任务是在预测下一个词,副产品是词向量
  • Word2Vec模型:主要任务是生成词向量
    • CBOW:训练目标是根据上下文预测目标词
    • Skip-gram:训练目标是根据目标词预测上下文词

ELMO模型的流程

  • 针对Word2Vec模型的词向量不能表示多义词的问题,产生了ELMO模型,模型图如下:
    在这里插入图片描述
  • 通过不只是训练单单一个单词的Q矩阵,而是把这个词的上下文信息也融入到这个Q矩阵中,从而解决一词多义的问题
  • 注意:左侧的LSTM是融入上文信息,右侧的LSTM是融入下文信息。E已经是将独热编码经过一层Q矩阵得到的
  • 在我们做具体任务T时,会先将E1、E2、E3三层的特征信息做一个叠加之后,得到新的词向量K,其中(E2、E3为双向的句法和语义特征),所以K1为第一个词的词向量,且包含了这个词的单词特征、句法特征、语义特征
  • 注意:在Word2Vec中,只是单纯将几个连续的单词按顺序拼接输入,所以只有这个单词的词向量,并没有上下文信息的叠加

ELMO模型怎么使用

  • 虽然同一个词的单词特征相同,但是在不同句子中的上下文信息会不同,也就代表着最后的词向量K会不同,如下:
    在这里插入图片描述
  • 我们可以用训练好的ELMO模型,去掉该模型针对任务的改造部分,比如只选用T层往下的部分,用它来替换下图其他任务中的W到e的这一部分,即替换之前Word2Vec预训练部分,从而实现ELMO模型的预训练效果,解决一词多义问题:
    在这里插入图片描述

Attention注意力机制

  • 我看这张图,注意力可以被可视化为下图:
    在这里插入图片描述
  • 其中:想要查询这张图中的部分原始图像(查询对象Q),这张图中红色的部分(Key),红色部分所具体指的在原图中的部分(Value)
    • 注意:Key和Value有着某种联系,是可以做对应的。如由于原图中有很多的信息(Values),这些Values可以拆分为Key-Value键值对
    • 所以,查看哪些V对Q比较重要,即哪些V与Q相似,就可以转换成查看哪些K与Q相似,而计算相似度我们一般采用点乘的方法
    • 所以QK点乘才能近似于QV点乘,即才能知道哪些V比较重要
      在这里插入图片描述
  • 上图的流程为:传入一个查询Q,计算Q和K的点乘s(K与V有对应关系),进行softmax归一化得到对应概率a,乘上对应V,最后做一个汇总,得到整体的V’,即最后的注意力V‘,公式如下:
    V ′ = ( a 1 , a 2 , ⋯ , a n ) ∗ + ( v 1 , v 2 , ⋯ , v n ) = ( a 1 ∗ v 1 + a 2 ∗ v 2 + ⋯ + a n ∗ v n ) V' = (a_1,a_2,\cdots,a_n)*+(v_1,v_2,\cdots,v_n) = (a_1*v_1+a_2*v_2+\cdots+a_n*v_n) V=(a1a2an)+(v1v2vn)=(a1v1+a2v2++anvn)
  • 而这个新的V’就包含了原图中,哪些重要,哪些不重要的信息,最后就可以用带有注意力的图来代替原图
    在这里插入图片描述
  • 这里softmax要除 d k \sqrt{d_k} dk 是因为,在softmax中,如果两个数的差距比较大,那么归一化后,概率差距会特别大,这很不合理,所以我们通过除 d k \sqrt{d_k} dk 来缩小两个数之间的差距,这样能减小它们之间的概率差距,如下图:
    在这里插入图片描述

参考文献

  1. 08 ELMo模型(双向LSTM模型解决词向量多义问题)
  2. 09 什么是注意力机制(Attention )
http://www.lryc.cn/news/321677.html

相关文章:

  • 稀碎从零算法笔记Day19-LeetCode:相交链表
  • AI系统性学习03—ChatGPT开发教程
  • 每日一练 | 华为认证真题练习Day201
  • nginx日志统计qps
  • 9.登入页面
  • js封装SDK 在VUE、小程序、公众号直接调用js调用后端接口(本文以vue项目为例)
  • ideaSSM社区二手交易平台C2C模式开发mysql数据库web结构java编程计算机网页源码maven项目
  • 利用子类化技术拦截win32窗口各种消息(包括但不限于鼠标键盘消息)
  • HCIP—OSPF课后练习一
  • Android 13.0 kenel和frameworks中修改ram运行内存的功能实现
  • 如何将应用程序发布到 App Store
  • Python进程与线程开发
  • 【3DsMax】UVW展开——以制作牙膏盒为例
  • Mysql数据库概念与安装
  • 【Java - 框架 - SpringMVC】(01) SpringMVC框架的简单创建与使用,快速上手
  • 框架篇常见面试题
  • 【刷题】滑动窗口入门
  • 【Python 48小时速成 3】输入与输出
  • API开发小红书接口获得小红书笔记详情API接口请求接入演示
  • Python条件语句深度解析:从基础到应用的全面指南
  • 【leetcode热题】 地下城游戏
  • Centos7安装ffmpeg
  • 安卓面试题多线程 81-85
  • Java基础知识总结(8)
  • C++基础入门(命名空间,函数,引用)
  • 【译】矢量数据库 101 - 什么是矢量数据库?
  • Python Web开发记录 Day12:Django part6 用户登录
  • SpringTask实现的任务调度与XXL-job实现的分布式任务调度【XXL-Job工作原理】
  • 【java】图书管理系统
  • C#实现约瑟夫环算法