NLP(1)--NLP基础与自注意力机制

目录

一、词向量

1、概述

2、向量表示

二、词向量离散表示

1、one-hot

2、Bag of words

3、TF-IDF表示

4、Bi-gram和N-gram

三、词向量分布式表示

1、Skip-Gram表示

2、CBOW表示 

四、RNN

五、Seq2Seq

 六、自注意力机制

1、注意力机制和自注意力机制

2、单个输出

3、矩阵计算

4、multi-head self-attention     

5、positional encoding


一、词向量

1、概述

        在自然语言处理中,用词向量表示一个词,将词映射为向量的形式。

        词向量:又叫Word嵌入式自然语言处理中的一组语言建模和特征学习技术的统称,其中来自词汇表的单词或短语被映射到实数的向量。

2、向量表示

        词向量可以有两种表示方法:dispersed representation和distribution representation

        dispersed representation:离散表示,一般使用one-hot独热编码。

        distribution representation:分布式表示,词嵌入就是分布式表示的形式,可以将一个词通过嵌入空间(embedding)映射为一个定长,稠密且存在语义关系的高维向量,这样可以保证语义接近的词之间的向量相似度较高。

二、词向量离散表示

1、one-hot

        one-hot:就是独热编码,将一句话中的每个词都对应一个独热编码,如“我爱学习人工智能”,编码后为:

        “我”:[1,0,0,0]

        “爱”:[0,1,0,0]

        “学习”:[0,0,1,0]

        “人工智能”:[0,0,0,1]

        独热编码存在问题:缺少词与词之间的关系,由于单词量巨大而产生的维度爆炸和词向量稀疏。

2、Bag of words

        将每个单词在语料库中出现的次数加到one-hot编码中。

        存在问题:仍没有解决词与词之间关系问题和维度爆炸问题,单词顺序也没有考虑。

3、TF-IDF表示

        将罕见的单词加上高权重,常见的加上低权重,其实跟上面一种方法类似。

        Weight=log(1+\frac{N}{n_t})

        上述公式中,N为文档总数,n_t表示词t的文档数。

        存在问题:同上

4、Bi-gram和N-gram

        将两个单词再次组成单词表,或多个单词组成单词表。

        存在问题:仍没有解决词义关系问题。

三、词向量分布式表示

       一般以Word2Vec作为分布式表示的示例。

        Word2Vec:从大量文本中以无监督学习方式训练语义知识的模型,通过学习文本来用词向量的方式表征词的语义信息,也就是在嵌入空间中两个词的空间距离近,则相似度更高。

1、Skip-Gram表示

        通过中心词预测上下文词,在中心词已知情况下,预测上下文词出现概率

2、CBOW表示 

        通过上下文词,推理中心词,预测中心词出现的概率。在具体实现中,会使用滑动窗口的方式,读取上下文的词,来计算输出的中心词的极大似然值,训练输出词与真实中心词的相关性,利用梯度下降来进行迭代训练。

四、RNN

        RNN:循环神经网络,指在全连接神经网络的基础上增加了前后时序上的关系。RNN的目的是用来处理序列数据,通过在网络中引入循环连接,使得RNN可以记忆之前的信息,并用于当前的输入。

        RNN结构:输入层+隐藏层+输出层。RNN结构中的隐藏层,会在每个时间点进行更新,作为网络对序列数据的内部表示,也会收到当前输入和之前隐藏层的影响。

        RNN的优点:适用于处理序列数据,具有记忆能力,可以处理变长序列数据。

        RNN的缺点:处理长期依赖性问题时,容易产生梯度消失或梯度爆炸问题。由于每个时间点都要进行计算隐藏层和输出,计算效率过低,在长序列数据中会面临资源爆炸问题。

        如何解决梯度消失:合理的初始化权重,保证避免梯度消失(有点好笑了),使用ReLU函数作为激活函数,使用LSTM等新型结构。

五、Seq2Seq

        Seq2Seq:序列到序列模型,根据给定的序列,通过特定的生成方法生成另一个序列的方法,这两个序列可以不等长。这种结构又叫做Encoder-Decoder模型(编码-解码模型),也可以称为RNN的一个变种,解决了RNN序列等长的问题。

        Seq2Seq由三部分构成,Encoder编码器,语义编码c,Decoder解码器构成,编码器通过学习将输入序列编码成一个固定大小的向量c,解码器通过对c的学习进行输出。一般来说编码器和解码器都会代表一个RNN,如LSTM或GRU。(也有一般的RNN模型)

         另外另一种方式下,语义编码c将参加解码的每一个过程,而不是只作为初始化参数。

 六、自注意力机制

1、注意力机制和自注意力机制

        传统注意力机制发生在Target元素和Source元素的所有元素中,权重的计算需要Target来参与。

        自注意力机制存在于输入语句内部元素之间或者输出语句内部元素之间,计算权重时也不需要Target来参与。

2、单个输出

        对于每一个输入向量a1,经过self-attention后都会输出一个向量b1,而这个b1是考虑了所有的输入向量a1,a2,...对a1产生的作用才得到的。首先我们将计算两个输入向量之间的α也就是相关性。

        下图中两个绿框,可以代表任意两个输入,比如a1和a2,左侧方法为,a1经过一个W^q矩阵得到q(乘积运算),a2经过一个W^k矩阵得到k(乘积运算),将q和k做内积运算得到\alpha_{1,2},也就是图中的α。右侧方法为,a1经过一个W^q矩阵得到q,a2经过一个W^k矩阵得到k,将q和k做concat运算后投射到tanh激活函数,在与W矩阵(权重矩阵)做一次乘积得到\alpha _{1,2}

        接下来的操作计算每一个相关性α,下图中为\alpha_{1,1},\alpha_{1,2}\alpha_{1,3},\alpha_{1,4}

        几个注意点:W^q,W^k,W^v都是超参数,是输入进去的,通过与不同的a进行乘积运算得到的q^i,k^i,v^i也是不同的。

        将\alpha_{1,1},\alpha_{1,2}\alpha_{1,3},\alpha_{1,4}放入softmax中进行归一化处理,获得\alpha'_{1,1},\alpha'_{1,2}\alpha'_{1,3},\alpha'_{1,4},softmax的数学公式如下图右上角。

          最后将每一个a^i乘以矩阵W^v得到v^i,v^i再与α进行相乘,将每一个相乘后的值相加求和,得到输出的b。b的计算公式如下图的右上角。        

3、矩阵计算

        首先可以将一个序列sequence的每一个a都进行concat这样形成了一个矩阵I,分别与W^q,W^k,W^v进行矩阵乘法,就可以得到相应的q,k,v。      

        再将生成的每一个q和每一个k分别在x轴和y轴进行concat,形成Q和K^T(K的转置),K^T与Q进行矩阵乘法,就得到了A(也就是所有α所构成的二维矩阵),经过softmax就得到了A'(α'所构成的二维矩阵)

        第三步,将每一个v进行concat操作得到V,将V与A'做矩阵乘法,就得到了O(b进行concat构成的矩阵) 

        ​​​​​​​​​​​​​​

 

        整体来看,就是下图这样的一个矩阵运算操作。

4、multi-head self-attention     

        多头自注意力机制,由于相关性可能有不同的形式,有不同的定义,所以可以有多个q,k,v来表示多种类型的相关性,也就是在超参数W^{q}中存在W^{q,1}   ​​​​​​,W^{q,2},...。对应的k,v也有多个。

        计算每一个b^{i}的方式如下,最后需要对多个b^{i,j}进行y轴方向的concat,也就是b^T,将b^T乘上权重矩阵W,得到b^i

5、positional encoding

        对于训练self-attention时,存在位置信息缺失的问题,位置信息引入到训练数据中,所以我们可以在Self-attention中加入位置信息。

        通过设置一个新的positional vector,用e^i表示,对于不同的a^i处都有一个e^i体现位置信息,vector的长度时人为规定,也可以通过大量数据训练出适合数据的vector。

参考视频:

37.39、 自注意力机制P37_哔哩哔哩_bil​​​​​​ibili

3-注意力机制的作用_哔哩哔哩_bilibili

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

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

相关文章

同旺科技USB to I2C 适配器烧写 Arduino 模块

所需设备: 内附链接 1、同旺科技USB to I2C 适配器 2、Arduino 模块 硬件连接: 用同旺科技USB to I2C 适配器连接芯片的TX、RX、GND; 打开Arduino IDE编辑工具, 点击“上传”按钮,完成程序的编译和烧录;

基于微信小程序的自习室系统设计与实现,可作为毕业设计

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 需求分析3.1用户需求分析3.1.1 学生用户3.1.3 管理员用户 4 数据库设计4.4.1 E…

【数据结构】树的基础入门

文章目录 什么是树树的常见术语树的表示树的应用 什么是树 相信大家刚学数据结构的时候最先接触的就是顺序表,栈,队列等线性结构. 而树则是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合 非线性 体现在它是由n个有限结点(可以是零个结点)组成一个具有层次关…

HarmonyOS/OpenHarmony(Stage模型)应用开发组合手势(二)并行识别

并行识别组合手势对应的GestureMode为Parallel。并行识别组合手势中注册的手势将同时进行识别,直到所有手势识别结束。并行识别手势组合中的手势进行识别时互不影响。 以在一个Column组件上绑定点击手势和双击手势组成的并行识别手势为例,由于单击手势和…

Apinto 网关 V0.14 版本发布,6 大插件更新!

大家好! 距离上次更新已经过去一段时间了,这段日子里我们一直在酝酿新的功能,本次的迭代将给大家带来 6 大插件的更新~一起来看看有哪些变化吧! 新特性 1. 新增 额外参数v2 插件,支持对转发参数进行加密、拼接等操作…

【软件测试】单元测试、集成测试、系统测试有什么区别?

单元测试、集成测试、系统测试有什么区别 1、粒度不同 集成测试bai粒度居中,单元测试粒度最小,系统du测试粒度最大。 2、测试方式不同 集成测试一般由开发zhi小组采用白盒加黑盒的方式来测试,单元测试一般由开发小组采用白盒方式来测试&a…

基于Python开发的玛丽大冒险小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python开发的玛丽冒险小游戏程序,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含:项目源码、项目文档等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xf…

关于ChatGPT的个人的一些观点

问题 1 Q: 你认为ChatGPT是一款非常有用的工具吗? A: 我认为ChatGPT是一款非常有用的工具。它可以帮助人们解决各种问题,包括技术问题、心理问题、生活问题等等。同时,ChatGPT也可以成为人们分享想法和交流的平台,增强人与人之间…

chrome_elf.dll丢失怎么办?修复chrome_elf.dll文件的方法

Chrome是目前最受欢迎的网络浏览器之一,然而有时用户可能会遇到Chrome_elf.dll丢失的问题。该DLL文件是Chrome浏览器的一个重要组成部分,负责启动和管理程序的各种功能。当Chrome_elf.dll丢失时,用户可能无法正常启动Chrome或执行某些功能。本…

MySQL 如何避免 RC 隔离级别下的 INSERT 死锁?

本文分析了 INSERT 及其变种(REPLACE/INSERT ON DUPLICATE KEY UPDATE)的几个场景的死锁及如何避免。 作者:张洛丹,DBA 数据库技术爱好者~ 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编…

Mysql存储过程与存储函数

文章目录 1. 简介2. 存储过程的特点3. 存储过程操作语法4. 存储过程变量5. 其它语法6. 存储函数 1. 简介 存储过程是事先经过编译并存储在数据库中的一段SQL集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输&a…

vs2019 c++开发linux应用

VS2019 C的跨平台开发——Linux开发_Mr_L_Y的博客-CSDN博客前言由于前段时间正好买了一个服务器来跑Tensorflow的推理模型,所以借这个机会把Linux的开发也一并补上。先声明我的服务器是Ubuntu16.04,下面文章的内容也是基于Ubuntu16.04的。为什么标题要写…

MySQL——连接查询

2023.9.4 连接查询相关sql92语句笔记: #连接查询。 又称多表查询,当查询的字段来自多个表时,就会用到连接查询。 #等值连接 /* ①多表等值连接的结果为多表的交集部分 ②n表连接,至少需要n-1个连接条件 ③多表的顺序没有要求 ④一…

论文阅读《Nougat:Neural Optical Understanding for Academic Documents》

摘要 科学知识主要存储在书籍和科学期刊中,通常以PDF的形式。然而PDF格式会导致语义信息的损失,特别是对于数学表达式。我们提出了Nougat,这是一种视觉transformer模型,它执行OCR任务,用于将科学文档处理成标记语言&a…

数据结构之栈的实现(附源码)

目录 一、栈的概念及结构 ​二、栈的实现 三、初学栈的练习题 一、栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出…

JS数组迭代方法实操

数组迭代方法有 1. every() 2.some() 3.foreach() 4.map() 5.filter 逐一操作,并简要区分之。 1 every() every() 方法使用指定的函数测试数组中所有的项,在数组的所有项都满足该条件时,才返回true,否则返回false; …

Win10下使用vim9

作为一个经常与文字打交道的Writer,你在学会Vim的基本操作之后,就一定会爱上Vim的。 以下是Windows10_64位(专业版)环境中安装、使用Vim9的全过程,分享一下: 一、下载、安装Vim9 去Vim官网去下载最新的Vi…

切片机制和MR工作机制

InputFormat基类 TextInputFormat:TextInputFormat是默认的FileInputFormat实现类。按行读取每条记录。键是存储该行在整个文件中的起始字节偏移量, LongWritable类型。 CombineTextInputFormat:CombineTextInputFormat用于小文件过多的场景…

React原理 - React Reconciliation-上

目录 扩展学习资料 React Reconciliation Stack Reconciler【15版本、栈协调】 Stack Reconciler-事务性 事务性带来的弊端: 扩展学习资料 名称 链接 备注 官方文档 Reconciliation – React 英文 stack reconciler Implementation Notes – React 英文…

Ubuntu22.04安装Mongodb7.0

Ubuntu安装Mongodb 1.平台支持2.安装MongoDB社区版2.1导入包管理系统使用的公钥2.2为MongoDB创建列表文件2.3重新加载本地包数据库2.4安装MongoDB包1.安装最新版MongoDB2.安装指定版MongoDB 3.运行MongoDB社区版1.目录2.配置文件3.初始化系统4.启动MongoDB5.验证MongoDB是否成功…