文章目录

  • 一、简介
  • 二、transformer结构
  • 三、用于文本分类的transformer
    • 1. embedding layer(嵌入层)
    • 2. positional encoding(位置编码)
    • 3. Scaled dot-product attention(缩放的点乘注意力机制)
    • 4. Multi-head attention(多头注意力)
    • 5. Padding mask
    • 6. 残差连接
    • 7. Layer Normalization
    • 8.Position-wise Feed-Forward network
  • 四、代码实现
  • 五、参考

文章:Attention is all you need
文章链接:https://arxiv.org/abs/1706.03762


一、简介

Transformer 是谷歌在 17 年做机器翻译任务的 “Attention is all you need” 的论文中提出的,引起了相当大的反响。 每一位从事 NLP 研发的同仁都应该透彻搞明白Transformer,它的重要性毫无疑问,尤其是你在看完我这篇文章之后,我相信你的紧迫感会更迫切,我就是这么一位善于制造焦虑的能手。不过这里没打算重点介绍它,想要入门 Transformer 的可以参考以下三篇文章:一个是 Jay Alammar 可视化地介绍 Transformer 的博客文章 The Illustrated Transformer ,非常容易理解整个机制,建议先从这篇看起, 这是中文翻译版本;第二篇是 Calvo 的博客:Dissecting BERT Part 1: The Encoder ,尽管说是解析 Bert,但是因为 Bert 的 Encoder 就是 Transformer,所以其实它是在解析 Transformer,里面举的例子很好;再然后可以进阶一下,参考哈佛大学 NLP 研究组写的 “The Annotated Transformer. ”,代码原理双管齐下,讲得也很清楚。

对于Transformer来说,需要明确加入位置编码学习position Embedding。因为对于self Attention来说,它让当前输入单词和句子中任意单词进行相似计算,然后归一化计算出句子中各个单词对应的权重,再利用权重与各个单词对应的变换后V值相乘累加,得出集中后的embedding向量,此间是损失掉了位置信息的。因此,为了引入位置信息编码,Transformer对每个单词一个Position embedding,将单词embedding和单词对应的position embedding加起来形成单词的输入embedding。

Transformer中的self Attention对文本的长距离依赖特征的提取有很强的能力,因为它让当前输入单词和句子中任意单词进行相似计算,它是直接进行的长距离依赖特征的获取的,不像RNN需要通过隐层节点序列往后传,也不像CNN需要通过增加网络深度来捕获远距离特征。此外,对应模型训练时的并行计算能力,Transformer也有先天的优势,它不像RNN需要依赖前一刻的特征量。

张俊林大佬在https://blog.csdn.net/malefactor/article/details/86500387中提到过,在Transformer中的Block中不仅仅multi-head attention在发生作用,而是几乎所有构件都在共同发挥作用,是一个小小的系统工程。例如Skip connection,LayerNorm等也是发挥了作用的。对于Transformer来说,Multi-head attention的head数量严重影响NLP任务中Long-range特征捕获能力:结论是head越多越有利于捕获long-range特征。

二、transformer结构

详见我的博客总结《Attention is all you need》

三、用于文本分类的transformer

Transformer结构有两种:Encoder和Decoder,在文本分类中只使用到了Encoder,Decoder是生成式模型,主要用于自然语言生成的。

1. embedding layer(嵌入层)

获得词的分布式表示

2. positional encoding(位置编码)

由于attention没有包含序列信息(即语句顺序并不影响结构),因此需要加入位置的信息,在transformer中选择将顺序的信息加入到embedding中。

设某个词在句子中的位置为pos,词的embeding维度为dmodeld_{model}dmodel,我们需要产生一个关于pos的维度为dmodeld_{model}dmodel的向量。因此可以使用公式:PE(pos,i)=pos100002i/dmodelP{E_{(pos,i)}} = \frac{{pos}}{{{{10000}^{2i/{d_{\bmod el}}}}}}PE(pos,i)=100002i/dmodelpos, 来计算pos对应的位置向量的各个维度的值。

pos=1pos=1pos=1来举例,[1100000,1100002/dmodel,1100004/dmodel,...,1100002][\frac{1}{10000^0},\frac{1}{10000^{2/d_{model}}} ,\frac{1}{10000^{4/d_{model}}},...,\frac{1}{10000^{2}} ][1000001,100002/dmodel1,100004/dmodel1,...,1000021];但是这种方式的编码并没有考虑到相对位置,因此在论文中使用了三角函数对奇偶维进行变化,下面是论文中的位置编码公式:

PE(pos,2i)=sin⁡(pos100002i/dmodel)PE(pos,2i+1)=cos⁡(pos100002i/dmodel)\begin{array}{l} P{E_{(pos,2i)}} = \sin (\frac{{pos}}{{{{10000}^{2i/{d_{\bmod el}}}}}})\\\\ P{E_{(pos,2i + 1)}} = \cos (\frac{{pos}}{{{{10000}^{2i/{d_{\bmod el}}}}}}) \end{array}PE(pos,2i)=sin(100002i/dmodelpos)PE(pos,2i+1)=cos(100002i/dmodelpos)

3. Scaled dot-product attention(缩放的点乘注意力机制)

在attention中query、key、value的来源各不相同,但是在该attention中query、key、value均是从同一个输入中产生。如下图中query、key、value均是将输入的embedding乘以一个矩阵产生的:

(可以观测到q,k,vq,k,vq,k,v的维度是由权重矩阵的维度决定的,因此维度的大小由设计者决定)

有了q,k,vq,k,vq,k,v后,我们先通过点积计算kkkqqq的相似度,并且为了防止相似度放入softmaxsoftmaxsoftmax中太大,因此将点积结果除以dk\sqrt{d_k}dk

,其中dkd_kdkkkk的维度。在将结果放入到softmaxsoftmaxsoftmax中输出当前qqq与各个kkk的相似度,如下图:


有了qqq与各个kkk的相似度以后,使用这些相似度对vvv进行加权求和,得到当前queryqueryquery的输出:


上面介绍了Scaled dot-product attention的向量计算方式,但是在实际中为了加速计算需要使用矩阵的计算方式。下面介绍矩阵计算:
首先对于所有的输出计算对应的q、k、vq、k、vqkv,如下图:

(这样可以一次计算出所有输入的q、k、vq、k、vqkv,并记输出的矩阵为Q、K、VQ、K、VQKV)

计算相似度并加权求和

论文中的计算公式:

4. Multi-head attention(多头注意力)

在论文中他们发现将Q、K、VQ、K、VQKVdq,dk,dvd_q,d_k,d_vdq,dk,dv, (即每个q、k、vq、k、vqkv的维度)维度上切成hhh份,然后分别进行scaled dot-product attention,并将最终的结果合并在一起,其中超参数hhh就是headheadhead的数量。
论文中的公式:

5. Padding mask

因为文本的长度不同,所以我们会在处理时对其进行padding。但是在进行attention机制时,注意力不应该放在padding的部分。因此将这些位置设置为非常大的负数,这样经过softmax后的概率接近0

对于矩阵QKTQK^TQKT的第iii行第jjj列的元素表示的是第iiiqueryqueryquery与第jjjkeykeykey的相似度,为了进行padding mask,那么必须要将所有与padding key的相似度设为负无穷。因此生成一个形状与QKTQK^TQKT相同的padding 矩阵,其中所有padding key对应的列设为false,其余为true。

6. 残差连接


假设网络中某个层对输入xxx作用后的输出是F(x)F(x)F(x),那么增加残差连接后为F(x)+xF(x)+xF(x)+x。当对该层求偏导时,

7. Layer Normalization

Batch Normalization:设某个batch中的样本均值为μB\mu_BμB,样本方差为σB2\sigma^2_BσB2,那么BN的公式就是BN(xi)=α×xi−μBσB2+ϵ+βBN(x_i)=\alpha\times\frac{x_i-\mu_B}{\sqrt{\sigma^2_B+\epsilon}}+\betaBN(xi)=α×σB2+ϵ

xiμB+β。其主要是沿着batch方向进行的。

Layer Normalization:BN是在batch上计算均值和方差,而LN则是对每个样本计算均值和方差;LN(xi)=α×xi−μLσL2+ϵ+βLN(x_i)=\alpha\times\frac{x_i-\mu_L}{\sqrt{\sigma^2_L+\epsilon}}+\betaLN(xi)=α×σL2+ϵ

xiμL+β。可以方向公式中只是均值和方差不同而已。

8.Position-wise Feed-Forward network

这是一个全连接层,包含两个线性变换和一个非线性激活函数ReLU,公式为FFN(x)=max(0,xW1+b1)W2+b2FFN(x)=max(0,xW_{1}+b_1)W_{2}+b_2FFN(x)=max(0,xW1+b1)W2+b2。这个公式还可以用两个大小为111的一维卷积来实现,其中中间层的维度为204820482048

四、代码实现

详情参考:https://www.cnblogs.com/jiangxinyang/p/10210813.html

五、参考

  1. https://blog.csdn.net/bqw18744018044/article/details/89501595
  2. https://www.cnblogs.com/jiangxinyang/p/10210813.html

6. 文本分类——transformer模型相关推荐

  1. 【NLP】深度学习文本分类|模型代码技巧

    文本分类是NLP的必备入门任务,在搜索.推荐.对话等场景中随处可见,并有情感分析.新闻分类.标签分类等成熟的研究分支和数据集. 本文主要介绍深度学习文本分类的常用模型原理.优缺点以及技巧,是「NLP入 ...

  2. 4.文本分类——textRNN模型

    文章目录 一.简介 二.先验知识:LSTM详解 2.1 RNN 2.2 长短期记忆网络(LSTM) (1)细胞状态(Cell State) (2)遗忘门 (3)输入门 (4)更新门 (5)输出门 2. ...

  3. 3.文本分类——textCNN模型

    文章目录 一. 简介 二. 模型结构 2.1 嵌入层 2.2 卷积层 2.3 池化层 2.4 全连接层 2.5 softmax层 三.textCNN总结 四.实现 五.参考 一. 简介 TEXTCNN ...

  4. 【NLP】使用Transformer模型进行文本分类

    作者 | Eric Fillion 编译 | VK 来源 | Towards Data Science 文本分类是NLP最常见的应用.与大多数NLP应用一样,Transformer模型近年来在该领域占 ...

  5. 【NLP】相当全面:各种深度学习模型在文本分类任务上的应用

    论文标题:Deep Learning Based Text Classification:A Comprehensive Review 论文链接:https://arxiv.org/pdf/2004. ...

  6. [深度学习] 自然语言处理 --- 文本分类模型总结

    文本分类 包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMO,BERT等)的文本分类 fastText 模型 textCNN 模型 charCNN 模型 Bi-LSTM 模型 ...

  7. 文本分类模型_【文本分类】几个可作为Baseline的模型

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要9分钟 跟随小博主,每天进步一丢丢 来自:AINLP 作者:老宋的茶书会 知乎专栏:NLP与深度学习 研究方向:自然语言处理 前言 最近,从Te ...

  8. 【多标签文本分类】MSML-BERT模型的层级多标签文本分类方法研究

    ·阅读摘要:   本文在BERT模型上,提出了利用多任务架构来解决层级多标签文本分类问题. ·参考文献:   [1] MSML-BERT模型的层级多标签文本分类方法研究 [0] 摘要   在摘要中,作 ...

  9. 文本分类——常见分类模型

    内容提要 基于规则的模型 基于概率的模型 基于几何的模型 基于统计的模型   文本分类方法模型主要分为两个大类,一类是基于规则的分类模型:另一类是基于概率统计的模型. 基于规则的模型   基于规则的分 ...

  10. 【文本分类】Deep Pyramid Convolutional Neural Networks for Text Categorization

    ·阅读摘要:   本文提出了DPCNN(深度金字塔CNN)模型.在transformer.bert还没兴起的年代,模型越深效果越好,但是模型的复杂度会随着深度提升.粗略地说,DPCNN就是为了解决CN ...

最新文章

  1. C# 枚举在项目中的应用总结
  2. linux+crontab执行php,如何使用Linux的Crontab执行PHP脚本
  3. 【HDU - 1301】Jungle Roads(并查集+最小生成树)(内附最小生成树两种算法 克鲁斯特尔算法amp;amp;普里姆算法)
  4. 我给女朋友讲编程html系列(1) -- Html快速入门
  5. 实现拍照_成电最强拍照地点合集,以及帮你实现它们的拍照师傅
  6. 马士兵老师Java虚拟机调优
  7. 【python技巧】RGB值组合三元色(红绿蓝)
  8. 一个自己实现的js表单验证框架。
  9. 什么是无监督学习?概念、使用场景及常用算法详解
  10. 2017 我所分享的技术文章总结(下)
  11. LINUX:拷贝文件src/指定目录下,文件夹图标上有个叉.更改文件权限可解决该问题。
  12. el-table表头自定义总计
  13. 服务器热备份、虚拟,VMware虚拟机热备份的几种方法
  14. 毕业设计-基于微信小程序与云开发的成绩查询系统
  15. 大数据集群搭建所遇问题(最重要的是各个组件必须版本匹配)
  16. sql查询涵盖的时段_涵盖的主题
  17. 深圳大数据培训:大数据开发之掌握Hive的静态分区与动态分区
  18. 制作一个网站前你应该了解哪些东西?怎么搭建网站?
  19. Qt C++局域网聊天(一)
  20. 信息系统项目管理重点:信息技术发展趋势

热门文章

  1. java选择,智力,数量,推理
  2. 大厂智力题讲解,学它!!!!(一)
  3. Domain Adaptation
  4. Test-time Adaptation论文合集
  5. python数据分析新手入门课程学习——(五)特征工程概述(数据预处理)(来源:慕课网)
  6. 京东商城选择地址信息
  7. 上海车牌拍牌辅助工具
  8. 转载(吃货告诉你,PAAS、IAAS和SAAS之间的区别)
  9. javascript提取顶级域名 js获取一级域名
  10. 家庭小药箱(常见疾病医疗指南,知识科普)