6. 文本分类——transformer模型
文章目录
- 一、简介
- 二、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后,我们先通过点积计算kkk与qqq的相似度,并且为了防止相似度放入softmaxsoftmaxsoftmax中太大,因此将点积结果除以dk\sqrt{d_k}dk
有了qqq与各个kkk的相似度以后,使用这些相似度对vvv进行加权求和,得到当前queryqueryquery的输出:
上面介绍了Scaled dot-product attention的向量计算方式,但是在实际中为了加速计算需要使用矩阵的计算方式。下面介绍矩阵计算:
首先对于所有的输出计算对应的q、k、vq、k、vq、k、v,如下图:
(这样可以一次计算出所有输入的q、k、vq、k、vq、k、v,并记输出的矩阵为Q、K、VQ、K、VQ、K、V)
计算相似度并加权求和
论文中的计算公式:
4. Multi-head attention(多头注意力)
在论文中他们发现将Q、K、VQ、K、VQ、K、V在dq,dk,dvd_q,d_k,d_vdq,dk,dv, (即每个q、k、vq、k、vq、k、v的维度)维度上切成hhh份,然后分别进行scaled dot-product attention,并将最终的结果合并在一起,其中超参数hhh就是headheadhead的数量。
论文中的公式:
5. Padding mask
因为文本的长度不同,所以我们会在处理时对其进行padding。但是在进行attention机制时,注意力不应该放在padding的部分。因此将这些位置设置为非常大的负数,这样经过softmax后的概率接近0。
对于矩阵QKTQK^TQKT的第iii行第jjj列的元素表示的是第iii个queryqueryquery与第jjj个keykeykey的相似度,为了进行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+ϵ
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+ϵ
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
五、参考
- https://blog.csdn.net/bqw18744018044/article/details/89501595
- https://www.cnblogs.com/jiangxinyang/p/10210813.html
6. 文本分类——transformer模型相关推荐
- 【NLP】深度学习文本分类|模型代码技巧
文本分类是NLP的必备入门任务,在搜索.推荐.对话等场景中随处可见,并有情感分析.新闻分类.标签分类等成熟的研究分支和数据集. 本文主要介绍深度学习文本分类的常用模型原理.优缺点以及技巧,是「NLP入 ...
- 4.文本分类——textRNN模型
文章目录 一.简介 二.先验知识:LSTM详解 2.1 RNN 2.2 长短期记忆网络(LSTM) (1)细胞状态(Cell State) (2)遗忘门 (3)输入门 (4)更新门 (5)输出门 2. ...
- 3.文本分类——textCNN模型
文章目录 一. 简介 二. 模型结构 2.1 嵌入层 2.2 卷积层 2.3 池化层 2.4 全连接层 2.5 softmax层 三.textCNN总结 四.实现 五.参考 一. 简介 TEXTCNN ...
- 【NLP】使用Transformer模型进行文本分类
作者 | Eric Fillion 编译 | VK 来源 | Towards Data Science 文本分类是NLP最常见的应用.与大多数NLP应用一样,Transformer模型近年来在该领域占 ...
- 【NLP】相当全面:各种深度学习模型在文本分类任务上的应用
论文标题:Deep Learning Based Text Classification:A Comprehensive Review 论文链接:https://arxiv.org/pdf/2004. ...
- [深度学习] 自然语言处理 --- 文本分类模型总结
文本分类 包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMO,BERT等)的文本分类 fastText 模型 textCNN 模型 charCNN 模型 Bi-LSTM 模型 ...
- 文本分类模型_【文本分类】几个可作为Baseline的模型
点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要9分钟 跟随小博主,每天进步一丢丢 来自:AINLP 作者:老宋的茶书会 知乎专栏:NLP与深度学习 研究方向:自然语言处理 前言 最近,从Te ...
- 【多标签文本分类】MSML-BERT模型的层级多标签文本分类方法研究
·阅读摘要: 本文在BERT模型上,提出了利用多任务架构来解决层级多标签文本分类问题. ·参考文献: [1] MSML-BERT模型的层级多标签文本分类方法研究 [0] 摘要 在摘要中,作 ...
- 文本分类——常见分类模型
内容提要 基于规则的模型 基于概率的模型 基于几何的模型 基于统计的模型 文本分类方法模型主要分为两个大类,一类是基于规则的分类模型:另一类是基于概率统计的模型. 基于规则的模型 基于规则的分 ...
- 【文本分类】Deep Pyramid Convolutional Neural Networks for Text Categorization
·阅读摘要: 本文提出了DPCNN(深度金字塔CNN)模型.在transformer.bert还没兴起的年代,模型越深效果越好,但是模型的复杂度会随着深度提升.粗略地说,DPCNN就是为了解决CN ...
最新文章
- C# 枚举在项目中的应用总结
- linux+crontab执行php,如何使用Linux的Crontab执行PHP脚本
- 【HDU - 1301】Jungle Roads(并查集+最小生成树)(内附最小生成树两种算法 克鲁斯特尔算法amp;amp;普里姆算法)
- 我给女朋友讲编程html系列(1) -- Html快速入门
- 实现拍照_成电最强拍照地点合集,以及帮你实现它们的拍照师傅
- 马士兵老师Java虚拟机调优
- 【python技巧】RGB值组合三元色(红绿蓝)
- 一个自己实现的js表单验证框架。
- 什么是无监督学习?概念、使用场景及常用算法详解
- 2017 我所分享的技术文章总结(下)
- LINUX:拷贝文件src/指定目录下,文件夹图标上有个叉.更改文件权限可解决该问题。
- el-table表头自定义总计
- 服务器热备份、虚拟,VMware虚拟机热备份的几种方法
- 毕业设计-基于微信小程序与云开发的成绩查询系统
- 大数据集群搭建所遇问题(最重要的是各个组件必须版本匹配)
- sql查询涵盖的时段_涵盖的主题
- 深圳大数据培训:大数据开发之掌握Hive的静态分区与动态分区
- 制作一个网站前你应该了解哪些东西?怎么搭建网站?
- Qt C++局域网聊天(一)
- 信息系统项目管理重点:信息技术发展趋势