之前已经用RNN和CNN进行文本分类,随着NLP的热门,又出现了大热的Attention,Bert,GPT等模型,接下来,就从理论进行相关学习吧。接下来,我们会经常听到“下游任务”等名词,下游任务就是NLP领域称之为利用预先训练的模型或组件的监督学习任务。

目录

1 学习路径

2 Seq2Seq

3 Attention

4 Transformer


1 学习路径

2 Seq2Seq

Seq2Seq全称是Sequence to Sequence,称之为序列到序列模型,是RNN的一个变体,常用于机器翻译、语音识别、自动对话等任务。其核心思想是通过深度神经网络将一个作为输入的序列映射为一个作为输出的序列,这一过程由编码输入到解码输出两个环节构成。编码器Encoder和解码器Decoder各由一个循环神经网络构成,两个网络是共同训练的。

Encoder-Decoder模型能有效地解决建模时输入序列和输出不等长的问题。Seq2Seq的编码器就是循环神经网络(RNN,LSTM,GRU),将句子输入至encoder中,生成一个Context vector,Context vector是Encoder的最后一个hidden state,即将输入句压缩成固定长度的context vector,再通过Decoder将context vector内的信息产生输出句。相关函数为:

其中,C为编码器函数,Y为解码器函数。

解码时采用集束搜索策略,会保存b个当前的较佳选择,然后解码时每一步根据保存的选择进行下一步扩展和排序,接着选择前b个进行保存,循环迭代直到找到最佳结果。

除此之外,堆叠RNN、增加Dropout机制、与编码器之间建立残差连接等均是常用的改进措施。但是在实际应用中,会发现随着输入序列的增长,模型的性能发生了显著的下降。因为编码时输入序列的全部信息压缩到了一个向量表示,随着序列增长,句子越前面的词的信息丢失就越严重。同时,Seq2Seq模型的输出序列中,会损失部分输入序列的信息,在解码时,当前词及对应的源语言词的上下文信息和位置信息丢失了。

3 Attention

为解决上述存在的问题(句子过长,效果不佳),引入了注意力机制(Attention Mechanism),改进点为:Seq2Seq编码之后有一个固定长度的context vector,Attention模型是生成N个(N个输入文字)固定长度的context vector,结构如图所示:

context vector是输入序列全部隐藏状态的一个加权和,即attention score乘以一个输入的隐状态,其计算为:

神经网络a将上一个输出序列隐状态s_{i-1}和输入序列隐状态h_{j}作为数据,计算得到e_{ij},然后归一化,得到\alpha _{ij}(此时存在一个softmax操作),用来衡量输入句中的每个文字对目标句中的每个文字所带来重要性的程度。其score计算为

Attention模型的编码器是双向RNN(Bi-directional RNN),每一个训练序列向前和向后分别是两个循环神经网络(RNN),而且这两个都连接着一个输出层。这个结构提供给输出层输入序列中每一个点的完整的过去和未来的上下文信息。

Attention model虽然解决了输入句仅有一个contect vector的缺点,依然存在很多问题:

  • context vector计算的是输入句、目标句间的关联,却忽略了输入句中文字间的关联,和目标句中文字间的关联性
  • RNN的自身缺点就是无法平行化处理,导致模型训练的时间很长

4 Transformer

RNN是2017年,发表了“The transformer”模型,解决了传统的Attention model 无法平行化的缺点,主要概念有(1)self attention (2)Multi-head。The Transformer和Seq2Seq有一样的结构,Encoder和Decoder,Transformer的结构是有6个Encoder和6个Decoder,结构如下:

细节结构展示:

(1)位置编码(Positional Encoding)

encoder的输入层和decoder的输入层是一样的结构,都是token embedding(词向量)+ positional embedding(位置向量),得到最终的输入向量。之所以引入positional embedding主要是解决单单使用token embedding(类似于词袋子),并没有词序的概念的问题。因为该模型并不包括任何的循环或卷积神经网络,所以模型添加了位置编码,为模型提供了关于单词再句子中相对位置的信息。这个向量能决定当前词的位置,或者说在一个句子中不同的词之间的距离。计算方法如下:

PE(pos,2i)=sin(\frac{pos}{10000^{\frac{2i}{d_{model}}}})

PE(pos,2i+1)=cos(\frac{pos}{10000^{\frac{2i}{d_{model}}}})

pos表示单词的位置,i是指单词的维度,偶数位置用正弦,奇数位置用余弦。

(2)编码器(Encoder)

Encoder的编码结构是一层self Attention,一层Feed Forward,self Attention是得到一个矩阵来最终Feed Forward的输入,在进行Feed Forward之前,还进行了残差连接和归一化操作。Feed Forward是前馈神经网络,常用的有DNN、CNN等。

a.自身注意力(self Attention)

self Attention结构里是分为Scaled-Dot-Product Attention 和Multi head Attention。

(一)Scaled-Dot-Product Attention

Scaled-Dot-Product Attention首先要计算Q(Query),K(Key),V(Value)矩阵,输入句中的每个文字是由一系列成对的<key,value>组成,而目标中的每个文件是Query,则如何用Q,K,V来重新表示context vector呢?

首先计算Query和各个key的相似性,得到每个key对应value的权重系数,即为attention score,value是对应的讯息,再对value进行加权求和得到最终的Attention。计算过程如下:

Attention到self Attention的变化为:

                    ——>          Attention(Query,Source)=\sum_{i=1}^{L}_\\\alpha _{i}\cdot Value_{i}

             ——>             

                ——>          Similarity(Query,Key_{i})=Query\cdot Key_{i}

为避免内积过大,使得softmax之后的结果非1即0,在计算相似性的时候增加一个\sqrt{d_{k}},即变为

Transformer是进行并行计算的,计算过程(忽略了\sqrt{d_{k}}的计算)如图所示:

(二)Multi-head Attention

只计算单个Attention很难捕捉输入句中所有空间的讯息,为了优化模型,论文提出了一个multi head的概念,把key,value,query线性映射到不同空间h次,但是在传入Scaled-Dot-Product Attention中时,需要固定的长度,因此再对head进行concat,结构如下:

Multi-head attention由四部分组成:

  • 用linear并分拆成Multi head(作者就将512维向量拆成8份,每64维得到一个向量);

  • 经过Scaled-Dot-Product Attention生成n(8)个B矩阵;

  • concat,新增一个权重系数,将b1,...,bn,合并成B传入下一层;

  • 再增加一层Linear Layer。

Multi Head Attention的过程如下(以两个head为例):

按照论文,将有8个b向量,在通过权重矩阵计算,得到最终的B向量。

b.残差连接(Residual Connections)

在进行self attention和feed forward两个模块连接时,增加一个sub layer,主要进行residual connection和layer normalization。

深度学习常见的归一化有BN(Batch Normalization)、LN(Layer Normalization),Batch Normalization 的处理对象是对一批样本进行纵向处理, Layer Normalization 的处理对象是单个样本,禁止横向处理。Batch Normalization 是对这批样本的同一维度特征做归一化, Layer Normalization 是对这单个样本的所有维度特征做归一化。

为什么Transformer用LN,而不用BN?

1)layer normalization 有助于得到一个球体空间中符合0均值1方差高斯分布的 embedding, batch normalization不具备这个功能。

2) layer normalization可以对transformer学习过程中由于多词条embedding累加可能带来的“尺度”问题施加约束,相当于对表达每个词一词多义的空间施加了约束,有效降低模型方差。batch normalization也不具备这个功能。

LN用于RNN进行Normalization时,取得了比BN更好的效果。但用于CNN时,效果并不如BN。

只有一个编码器(Encoder)时的结构:

有多个编码器和解码器的结构:

c.前馈神经网络(Feed Forward)

模型里边是增加了两个dense层,就是普通的全连接层。

(3)解码器(Decoder)

解码器和编码器相比略有不同,在解码器中,只允许self Attention的输出序列中较早的位置,通过在self Attention计算的softmax步骤之前屏蔽未来位置(将它们设置为-inf)来完成的。

每个解码器层包括以下子层:

  • 遮挡的多头注意力(padding mask和sequence mask)
  • 多头注意力(用填充遮挡)。V(数值)和 K(主键)接收编码器输出作为输入。Q(请求)接收遮挡的多头注意力子层的输出
  • 点式前馈网络
  • 每个子层在其周围有一个残差连接,然后进行层归一化。

a、masked mutil-head attetion

mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 padding mask 和 sequence mask。其中,padding mask 在所有的 scaled dot-product attention 里面都需要用到,而 sequence mask 只有在 decoder 的 self-attention 里面用到。

Masked是相当于盖住你当前关注的词的后面所有词,我只关心前面出现的词,而后面的词我不关注,因为我要生成后面的词(图是self Attention和Masked self Attention的区别)。

(4)线性层和softmax层( Linear and Softmax Layer)

在解码器(Decoder)之后有增加了一层Linear和Softmax,结构如下:

(5)常见面试题

a、多头机制为什么有效?

类似于CNN中通过多通道机制进行特征选择,Transformer中先通过切头(spilt)再分别进行Scaled Dot-Product Attention,可以使进行点积计算的维度d不大(防止梯度消失),同时缩小attention mask矩阵。

b、self-attention为什么要缩放,并选用\sqrt{d_{k}}?

缩放是为了防止梯度消失。

softmax把一些输入映射为0-1之间的实数,并且归一化保证和为1,公式为:softmax=\frac{e^{^{i}}}{\sum_{j=1}^{K}e^{j}}

基于Transformer的模型另开一篇博客,细节太多了。

参考:

https://jalammar.github.io/illustrated-transformer/

https://www.sohu.com/a/258474757_505915

https://tensorflow.google.cn/tutorials/text/transformer#创建_transformer

https://www.aboutyun.com/thread-27818-1-1.html

https://www.jianshu.com/p/367c456cc4cf

Transformer——李宏毅视频

https://www.zhihu.com/question/395811291/answer/1260290120

Datawhale-零基础入门NLP-新闻文本分类Task06相关推荐

  1. Task01——零基础入门NLP - 新闻文本分类之赛题理解

    本篇目标 首先本篇文章会对赛题进行介绍以及个人对赛题的理解,带大家接触NLP的预处理.模型构建和模型训练等知识点. 赛题介绍 赛题名称:零基础入门NLP - 新闻文本分类 赛题任务:赛题以自然语言处理 ...

  2. 零基础入门NLP - 新闻文本分类

    本文是对阿里云新人竞赛中的"零基础入门NLP - 新闻文本分类"解体过程进行的记录,目前仅使用了textCNN模型进行预测,后续还会考虑使用LSTM进行对比. 赛题数据 赛题以新闻 ...

  3. 零基础入门NLP - 新闻文本分类,正式赛第一名方案分享

    零基础入门NLP - 新闻文本分类,正式赛第一名方案分享:https://mp.weixin.qq.com/s/7WpZUqdlItBToLYuRLm44g

  4. 【初学者入门】零基础入门NLP - 新闻文本分类

    序言 从今天开始入门学习NLP,虽然有点晚,但是我觉得任何时候都值得开始,尤其是面对你去感兴趣的事情.今天的任务是 [零基础入门NLP - 新闻文本分类],这是天池大赛中的入门级算法比赛,入口链接请自 ...

  5. 天池零基础入门NLP - 新闻文本分类Top1方案的bert4torch复现

    天池有些长期比赛可以练习玩玩(还可以继续提交),于是试了下简单的新闻文本分类任务,Top1的解决方案思路是"预训练+fgm+交叉验证模型融合",代码是基于bert4keras的,本 ...

  6. 【学习笔记】零基础入门NLP - 新闻文本分类实战

    赛题理解   首先要理解赛题的背景及描述--赛题以新闻数据为赛题数据,数据集报名后可见并可下载.赛题数据为新闻文本,并按照字符级别进行匿名处理.整合划分出14个候选分类类别:财经.彩票.房产.股票.家 ...

  7. 阿里云天池 零基础入门NLP - 新闻文本分类 2种做法,F1=0.87

    problem 1.赛题理解 数据集: 在NLP_data_list_0715.csv中,有三个链接. 分别可以下载训练集,测试集A,测试样例. f1_score介绍: F1分数(F1-score)是 ...

  8. 【天池学习赛】零基础入门NLP - 新闻文本分类

    一.赛题描述 赛题数据为新闻文本,并按照字符级别进行匿名处理.整合划分出14个候选分类类别:财经.彩票.房产.股票.家居.教育.科技.社会.时尚.时政.体育.星座.游戏.娱乐的文本数据. 赛题任务:赛 ...

  9. Task02——零基础入门NLP - 新闻文本分类之数据读取与分析

    本期目标 学习使用Pandas读取赛题数据 分析赛题数据的分布规律 数据读取 import pandas as pd train_df=pd.read_csv('./train_set.csv/tra ...

  10. java统计文本中英文单词个数split_零基础入门NLP - 新闻文本分类Task2(天池入门赛)...

    本章主要内容是主要是通过pandas模块来进行数据分析.(注:文章只是对天池入门赛课件的学习) 一.学习目标 1.学习使用pandas读取赛题规律 2.分布赛题数据的分布规律 二.数据读取 使用pan ...

最新文章

  1. [转]Android PorterDuff.Mode效果
  2. Python:为什么只有一个元素的tuple要加逗号?
  3. 将ArXiv中的Reference导入EndNote
  4. jQuery的var that=this
  5. WeakHashMap垃圾回收原理
  6. K8S Learning(1)——简介
  7. docker导入镜像 liunx_docker扫盲?面试连这都不会就等着挂吧
  8. Arm-Linux 编译Asterisk
  9. linux网络编程之广播详细代码及文档说明 -,Linux网络编程之广播
  10. rabbitmq-plugins.bat enable rabbitmq_management
  11. 用ACL 对Dos***进行分类的示例
  12. 看看webpack打包优化
  13. Linux死锁检测-Lockdep
  14. 怎么删除计算机c盘应用,C盘垃圾文件怎么删除,清理系统盘的电脑软件-腾讯电脑管家...
  15. 企业家的“智慧”和“仁人”
  16. 银行合规程序KYC、CDD、AML和TM
  17. libuv之mingw64环境搭建及编译Libuv
  18. 词云 文字云 标签云 教程19年最新版
  19. 77.【JavaWeb文件上传和邮件发送04】
  20. 图文详解 DBMS 数据库管理系统三层架构体系(三级模式)《ClickHouse 实战:企业级大数据分析引擎》...

热门文章

  1. [Windows Phone] 为应用添加后台计划任务 – Scheduled Task Agent
  2. 升级到virtualbox-2.1.4
  3. 网络爬虫--23.动态网页数据抓取
  4. linux我如何查看一个脚本的路径,linux获取shell脚本所在绝对路径操作介绍
  5. tp5 linux路由不跳转,thinkphp5路由不生效一直跳到首页的解决方法
  6. oom 如何避免 高并发_【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!...
  7. ajax同步和异步的区别_同步电机和异步电机区别
  8. jquery中的 $(function(){})
  9. 【解决】如何打开.ipynb文件
  10. 恩智浦智能车大赛2020_内蒙古科技大学第九届智能车大赛校内公开赛总决赛