Bert遇见文本分类

首先简要介绍下bert中涉及到的有关技术点 ,Self-Attention、Multi-Headed、Positional Embedding、Layer normalization。

Self-Attention,主要是构建三个矩阵Query,Key,Value来确定当前位置的字或词(以下均以字代替)对句子所起的权重,换一句话说就是根据当前位置和句子进行点积相似度的计算(QK^{T}),然后为了减小维度除以\sqrt{d}进行Softmax得到当前字对句子的权重Softmax(QK^{T}/\sqrt{d}),最后再乘以矩阵V便得到了和句子紧密相关的当前位置的字向量表征Attention(Q,K,V)=Softmax(QK^{T}/\sqrt{d_{k}})V

不管在自然语言中还是图片中,神经网络进行特征提取,我们无法保证每一次都能提取到我们想要的特征。或者说就自然语言的分类任务而言,我们自己在评判一句话属于哪一类时,是分多次提取的。举一个例子,一句话中,可能第一次提取到运动相关的人名“姚明”,然后再看一次又看到了“篮球”,又看一次“火箭队”......多次之后,我们有很多把握将其归为运动一类。所以Bert当中通过初始化多组(Q,K,V)矩阵来进行特征提取,也就是我们说的Multi-Headed了。

在自然语言中,时序特征是很重要的。而Self-Attention并没有引入时序信息,所以Bert使用Positional Embedding来进行时序特征的引入。在论文中阐述了两种构造位置向量的方法,一种是通过正余弦公式直接构造位置向量,在偶数位置,使用了正弦编码,而奇数位置则使用了余弦编码;另一种方法则是对句子进行id编码,例如将句子根据句子长度seq_len,进行1~seq_len编号,构造权重矩阵W,然后进行one_hot查表W就能得到每个位置的位置向量了。

Layer normalization(LN),normalization的目的是为了防止每一层学到的数据不一致,从而导致数据偏差越来越大。层归一化和批量归一化(Batch normalization, BN)有所不同,BN是在一个batch基础上进行归一化,而LN是在一个样本基础上进行归一化。而对于这两个归一化方法,均有归一化、变换重构两步。归一化是使得每一层输入的数据保持在一个稳定的分布中,而归一化破坏了上一层对数据提取的特征,所以进行变换重构以保证数据提取的特征没有被破坏掉。有兴趣的可以详细了解一下。

Bert中主要涉及到的内容就是这些了。顺便说一下Bert中采取了残差连接的技巧,这是为了解决深度学习的退化问题。简而言之,深度学习的深层网络按道理效果一定要比浅层网络大于或者等于,因为浅层网络如果提取特征足够,后面的层保持不学习的状态便是和浅层的效果一致。浅层提取的不足,深层一定会在浅层的基础上进一步提取。然而实际上,我们让深层网络中的后面几层保持不学习是很难的。而我们知道神经网络如果不引入非线性因素(激活函数),再多层也只是复合函数的线性变换,其效果与单层神经网络无异。所以所谓的残差连接就是对于某一层的输入是由上一层的输入+上一层的输出叠加得到的。

最后我使用了tensorflow进行Bert预训练+cnn做了文本分类,欢迎大家自行取用。https://github.com/Xu22/tensorflow-nlp/tree/master/text-classification。这里所使用的数据集是复旦文本分类数据集。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlphaU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值