• 深度学习之文本分类模型-基于attention机制


    1、HAN

    HAN(Hierarchical Attention Networks)是由Zichao Yang[1]等人提出的一种算法,其主要思想是利用attention机制,将单词进行编码,得到句子的向量s,接着用同样的方式对句子进行编码,最终得到文章的向量V,最终,可以在V上加入softmax,进而进行分类模型的构建。最终在多个数据集上达到了SOTA,其模型结构图如下所示:

    整体的架构包括四个部分:word encoder, word attention, sentence encoder, sentence attention。

    • word encoder
      给定一个句子中的单词(w_{it} t in [0,T]),我们首先得到单词的embedding信息,通过矩阵(W_{e})(x_{ij} = W_{e} * w_{it}),接着,我们将得到的单词信息依次的通过双向的GRU网络,分别得到相应每个单词隐藏层输出信息。公式如下所示
    接下来,我们将每个单词双向的GRU输出拼接成一个向量$h_{it} =left[overrightarrow{h}_{i t}, overleftarrow{h}_{i t} ight]$
    • Word Attention
      我们将(h_{it})输入到一个多层感知机(MLP)中,激活函数是tanh函数,并得到(u_{it})向量,接下来,我们通过上下文向量(v_{w})(u_{it})进行向量操作,并通过一个softmax层,最终得到单词的重要性矩阵(alpha _{it}),表示第(i)个句子中第t的位置的重要性。最后我们将重要性的矩阵加到(h_{it})上,得到句子的向量(s_{i}),具体公式如下:
    • Sentence Encoder
      Sentence Encoder和word encoder相似,同样输入到一个双向的GRU中,并将两个双向的向量进行拼接,得到第(i)个句子(h_{i})
    • Sentence Attention
      接下来我们按照上述方式,得到句子的重要性矩阵(alpha _{i}),并将其作用到(h_{i})中,最终得到文章的向量(v),公式如下
    • Document Classification
      当我们得到文档的向量后,我们就可以加上全连接层,输出节点的个数是类别数量,构建模型进行训练了。

    2、inner-attention for NLI

    这里介绍一个自然语言推测(NLI)的任务,NLI讲的是一个句子是否可以推测出另外一个句子,这种可以看做是一个分类任务,类别有三种,分别是Entailment (inferred to be true), Contradiction (inferred to be false) and Neutral (truth unknown),例如:

    Yang Liu[2]等人提出了将mean pooling 和 inner-attention方法加入到了这种任务中。其思想整体架构图如下所示

    其网络结构可以看做是孪生网络结构,我们输入"前提"句子和"假设"句子,通过共享的多层网络,最终得到两个句子的表达,最后将两个句子做一个拼接,最后加上一个softmax层,作为最终的分类。

    其网络结构由三部分组成:sentence input,sentence encoding, sentence matching

    • sentence input
      sentence input 模块主要是将单词转化为词向量,这里就不做过多的讲解了,可以利用固定词向量,或者是随着网络自己训练。
    • sentence encoding
      sentence encoding首先将词向量通过双向的LSTM,得到对应的表达,接下来包括两个阶段,第一个阶段是将最顶端的LSTM的输出进行average pooling操作,得到对应的向量,第二个阶段是Inner attention,其公式如下

    其中Y表示双向LSTM的输出,(R_{ave})表示的平均池化的输出,(alpha)表示attention矩阵,这里论文中的参数介绍的并不是很详细,我理解之所以叫Inner attention是因为它用了内部的LSTM的表达。

    • sentence matching
      我们将两个句子分别得到相应的表达,那么拼接的方式有三种:a、直接拼接。b、元素之间相乘。c、元素之间求差异(没明白啥意思)。最终,我们在最后加上softmax层。

    3、Attentive Pooling

    AP(Attentive Pooling)是用于QA的,其由IBM的Cicero dos Santos(3)等人提出的一种算法,其基本思想是利用一个权重矩阵,将问题Q和答案A进行信息的交互关联,也就是说Q的表达中包含A的一些信息,A的表达中又包含了Q的一些信息,在最后,我们各自提取每个维度的max pooling的值,各自经过softmax,得到相应的表达。总体的结构图如下所示

    由图所示,我们首先得到question和answer的表达,即各自的词向量WEs,接下来,我们利用LSTM或者是CNN提取深层次的特征,对于模型利用LSTM来说,我们叫AP-LSTM,对于利用CNN的模型来说,叫做AP-CNN,接着,我们得到对应的输出Q和A,接着建立一个向量矩阵G,我们利用(tanh(Q^{T} G A))得到Q和A相关的表达G,接下来,利用max pooling,得到row的表达和column的表达,将这两个表达分别进行softmax,进而乘以各自的原始向量Q,A,得到表达(r_{q})(r_{a}),我们利用向量相似性计算方式,得到两者的结果。

    4、LEAM

    LEAM是Guoyin Wang[4]等人提出的将单词和分类的label同时进行embedding,接着利用两者向量的cosin余弦值获得矩阵向量,利用"划窗"方法(这个名字是我自己取得)得到对应的向量,最后输出层依旧是softmax,进行分类预测。整体逻辑架构如下图所示

    这里(a)表示的是传统的分类方法,(b)是作者提出的算法。我们分别来进行讲解。

    • step1
      我们首先得到单词的embedding向量和label的embedding向量。假设单词的embedding向量维度为V=(128,100),label的embedding向量为C=(10,100)其中,128代表输入单词的个数,10代表类别标签的个数。

    • step2
      接下来进行C和V的cosin操作,这里将C和V进行矩阵操作,得到(128,10)的矩阵,(hat{G})也是(128,10)的矩阵,将这两个向量进行相除,得(G)。为啥会有个(hat{G})这个矩阵呢,我们知道cosin余弦最后要除以两个向量模的乘积,所以在(hat{G})的每个单元格中,分别代表各自向量模的乘积。

    • step3
      接着,我们将这个(128,10)的矩阵进行一些操作,对于其中的一条向量,我们选择其上下各r个向量,包括该向量本身,组成一个(2r+1,10)的矩阵,这里(W_{1})是一个(2r+1)的向量,(b_{1})为(10)维向量,我们对(2r+1,10)的这个矩阵进行操作,首先与(W_{1})进行矩阵乘法,得到(10)维向量,再与(b_{1})进行相加,得到(10)维向量。最后,我们利用max_pooling取这个(10)维向量中最大的,得到(m_{l})

    • step4
      经过多次这样的操作,我们会得到一个长度为L的向量(m),对(m)进行softmax操作,最终得到(eta)

    • step5
      (eta)为一个长度为L的向量,其中每一个维度都表示当前单词(l)的一些权重信息,我们将权重信息乘以最后的单词信息(v_{l})上,本质上是对单词向量加上权重,并将所有词向量的各个维度进行相加,最终得到向量维度为10的固定向量。有了这个表达向量,我们就可以进行最后的softmax操作,进行分类的训练了。

    5、DRCN

    DRCN(Densely-connected Recurrent and Co-attentive neural Network )是由韩国人Seonhoon Kim[5]等人提出的一种算法,其整体思想是将embedding层,RNN隐藏层和经过attention之后的向量进行拼接,并进行多次这样的操作,最终通过一个AE,池化,和全连接操作,得到相应的结果。其主要包括Word Representation Layer、Densely connected Recurrent Networks、Densely-connected Co-attentive networks、Bottleneck component、Interaction and Prediction Layer。接下来我们一步一步来进行解释。

    首先我们先放上论文中模型的结构图。

    • Word Representation Layer
      词向量的输入,词向量的输入分为四个部分,并将这四个部分进行拼接,第一部分是用固定词向量,这里可以利用word2vec或者glove等其他词向量获取方式得到词向量。第二部分是可训练词向量,这里其实也可以利用word2vec或者glove等训练的词向量,或者使用随机初始化的词向量,这一部分的词向量会在训练时更新参数。这里作者给出了两者的优缺点,固定词向量可以防止过拟合,但是对于特定领域的数据不灵活,可训练的词向量可以得到特征间的关系的表达,但是容易过拟合,所以将两者一起使用。第三个部分是字符级别的embedding,这里的embedding经过一个卷积神经网络,得到对应的表达,第四个部分表示当前单词是否出现在另外一个句子中,这样将这四个部分词向量进行拼接,得到模型的输入词向量。公式如下

    其中(e_{p_{i}}^{fix})表示第二部分,固定词向量。(e_{p_{i}}^{tr})表示第二部分,可训练词向量。(c_{p_{i}})表示第三部分,字符级别向量。(f_{p_{i}})表示第四部分。最后将这些向量进行拼接,得到输入向量。

    • Densely connected Recurrent Networks
      这一部分就是得到RNN的输出向量,这里也有三种方式,第一种,直接利用RNN的输出向量(h_{i}),第二种,将RNN的输出向量(h_{i})和输入向量(x_{i})进行加和,第三种,将(h_{i})(x_{i})进行拼接。

    • Densely-connected Co-attentive networks
      这一部分,我们需要获得attention的表达,公式如下

    在每一个步骤中,我们都会得到两个句子的RNN隐藏层表达,分别为(h_{p_{i}})(h_{q_{j}}),我们初始化有一个attention权重矩阵(alpha_{ij})表示第一个句子第(i)个单词和第二个句子第(j)个单词的权重,首先,我们根据权重矩阵(alpha_{ij})和第二个句子(h_{q_{j}})得到第一个句子相应的表达(alpha_{p_{i}}),接下来,我们更新权重矩阵(alpha_{ij}),首先我们获得(h_{p_{i}})(h_{q_{j}})(cosin)余弦值以及(h_{p_{i}})和其他单词的余弦值,但其实这里我有个疑问,就是在第一轮的时候,后面的RNN隐藏层单元还没有得到,这里我们怎么计算余弦值?这里先空着,如果后续有答案了再补上。最终,我们将上面两个部分得到的向量进行拼接,最终得到新的输入向量。

    • Bottleneck component
      这里加入了一个AE,说是由于参数量过大,目的是为了减少参数量。
    • Interaction and Prediction Layer
      最终,我们得到两个句子的输出,我们可以利用(p+q)(p-q)(|p-q|)等操作,以及原始(p,q)进行拼接,再加上一个全连接层,最终得到相应的输出。

    6、ABCNN

    ABCNN(attention based CNN)是由Wenpeng Yin[6]等人提出,其目的是将attention机制加入到CNN中,实验结果取得了SOTA的效果。其模型总共由三个,分别是ABCNN-1,ABCNN-2,ABCNN-3。下面分别来进行介绍。

    这两节主要介绍了文本匹配,其实文本匹配在形式上也是一种分类任务,在输出端为二分类,表示相关和不相关,所以将其放在文本分类中进行讲解。

    • ABCNN-1
      红色框框为输入的文本向量表达,我们看到由两个红色的框框,分别表示两段文本,假设其中一段文本维度为[5,8],另一段文本为[7,8],首先,我们利用一些求相似性的手段,论文中用(1/(1 + |x - y|))其中,x,y分别表示[1,8]和[1,8]的文本,其中(|.|)表示欧式距离,这样我们就可以得到attention matrix的矩阵A,其维度为[5,7],接下来,我们用两个向量(w_{0},w_{1})来对矩阵(A)进行向量操作,其中(w_{0})的维度是[7,8],(w_{1})的维度是[5,8],这样就可以得到attention feature map,其维度分别为[5,8]和[7,8],我们将这两个attention feature map 和 原始的representation feature map进行组合,输入到卷积神经网络中,得到输出。

    • ABCNN-2
      由图所示,我们假设conv input的两个句子分别为[5,8]和[7,8]的矩阵,首先,经过一个卷积层,得到[7,8]和[9,8]的矩阵,之所以维度会增大是因为在输入的句子中加入了padding向量。接下来,我们依旧通过一些操作得到attention matrix A,A的维度是[7,9],方法依旧可以用ABCNN-1的方法来进行获得。接着,我们将A的行和列分别进行相加,得到[1,7]和[1,9]的向量,并用卷积层对原始的[7,8]和[9,8]的矩阵进行卷积操作,这里不进行padding,窗口大小为3,filter大小为[3,8],我们先将[1,7]的对应3维向量和filter,以及原始矩阵进行相乘,并在相应维度进行相加求平均操作,得到[1,8]向量,经过5次卷积,得到[5,8]向量,最后,我们可以根据得到的两个[5,8]矩阵进行操作。

    • ABCNN-3
      ABCNN-3就是将ABCNN-1和ABCNN-2进行合并

    7、Multiway Attention Networks

    这篇论文是Chuanqi Tan[7]等人发表的,这篇论文的主要思路是使用了四种attention的方式对句子进行表达,分别是Concat Attention、Bilinear Attention、Dot Attention、Minus Attention四种attention方式,模型整体架构如图所示分为编码层,多方式attention匹配层,聚合层、预测输出层。

    • 编码层
      这一层对输入的单词进行编码,这里使用预训练的语言模型来获取单词的词向量。对于句子P,Q来说,得到这两个句子中每个单词的词向量。接下来我们分别将其输入到双向GRU得到输出(h_{t}^{q} = [ xrightarrow [h_{t}^{q}] , xleftarrow[h_{t}^{q}] ])以及(h_{t}^{p} = [ xrightarrow [h_{t}^{p}] , xleftarrow[h_{t}^{p}] ])
    • 多方式attention匹配层
      这一层为整体逻辑的核心层,其中attention的方式包括四种,分别是Concat Attention、Bilinear Attention、Dot Attention、Minus Attention,接下来,我们罗列出每一种attention相应的公式。


      我们以Concat Attention方式进行讲解,(h_{t}^{p})表示(t)时刻p的输出,我们将这个输出乘以一个(W_{c}^{2})接着加上q中第(j)个单词输出乘以(W_{c}^{1})的结果,在外层加上一个tanh激活函数,再乘以(v_{c}^{T})得到q的第j个单词的输出(s_{j}^{t}),当我们得到q中所有单词的(s_{j}^{t})后,进行一个softmax操作,得到(alpha_{i}^{t}),将结果加在(h_{t}^{q})上,得到结果(q_{t}^{c})。其他几种方式得到类似的结果。
    • 聚合层
      聚合层的作用是将上一层多种方式得到的输出进行合并
    • 预测输出层
      将上一层得到的结果进行组合输出。

    8、aNMM

    aNMM(Attention-Based Neural Matching Model)是由Liu Yang[8]等人提出的一种方法,其主要创新点是应用了一个Value-shared Weighting的方式将变长的矩阵转换成固定维度的矩阵,其整体逻辑结构如下图所示

    主要部分有word embedding,QA Matching Matrix,Value-shared Weighting,Question Attention Network四个部分,接下来我们一一进行讲解

    • word embedding
      首先,我们获取Q,A的单词的词向量,这里论文中用的方式是word2vec。假设Q中有M个单词,A中有N个单词,向量维度为D,则我们会得到两个矩阵[M,D],[N,D]。
    • QA Matching Matrix
      这一步我们得到上述两个矩阵相乘的结果矩阵,维度为[M,N],其中第(i)行第(j)列表示Q中第(j)个单词和A中第(j)个单词的词向量进行cosin余弦操作。
    • Value-shared Weighting
      由于A是变长的序列,所以这里的N是变长的,如果我们想把向量输出到固定维度,传统的做法是利用CNN进行卷积操作,得到固定维度向量。论文中提出了一种新的方法,即由于cosin余弦值的范围是在[-1,1]那么我们可以将其以0.1进行分割,分成21份,[-1,-0.9),[-0.9,-0.8).....[0.9,1),[1]。这样,我们建立一个参数个数为21的向量,这样,对于其中一个值为0.85,我们就可以用[0.8,0.9)的这个权值和0.85进行相乘操作,这个输出的维度我们可以固定,这一部分的结构图如下所示。图中的21变为了3。
    • Question Attention Network
      图中得到的固定维度的输出,图中为4,我们将这4个值进行相加并利用sigmoid函数将进行激活,并作用到Q向量上,加上一个softmax,输出层利用一个两个节点表示相关与否,并将上一层与这一层进行一个全连接操作。
    参考文献
    [1]Zichao Yang(2016)Hierarchical Attention Networks for Document Classification.
    [2]Yang Liu(2016)Learning Natural Language Inference using Bidirectional LSTM model and Inner-Attention
    [3]Cicero dos Santos(2016)Attentive Pooling Networks.
    [4]Guoyin Wang(2018)Joint Embedding of Words and Labels for Text Classification.
    [5]Seonhoon Kim(2018)Semantic Sentence Matching with Densely-connected Recurrent and Co-attentive Information
    [6]Wenpeng Yin(2018)ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs
    [7]Chuanqi Tan.Multiway Attention Networks for Modeling Sentence Pairs
    [8]Liu Yang(2019)aNMM: Ranking Short Answer Texts with Attention-Based Neural Matching Model.
  • 相关阅读:
    oracle批量更新之使用游标进行分批次更新的5种方式及速度比对
    oracle 两个网络不通的远程数据库如何将一个库中的表数据导入到另一个库中?
    惠星球史上最全攻略,手把手带你飞
    oracle 批量删除表数据的4种方式
    zabbix client安装配置执行
    Neural Networks for Machine Learning by Geoffrey Hinton (4)
    代码坏味道之过长的參数列
    Codeforces Round #313 (Div. 1) Gerald's Hexagon
    java界面编程(3) ------ 控制布局
    数据结构实验之队列一:排队买饭
  • 原文地址:https://www.cnblogs.com/stephen-goodboy/p/12867236.html
Copyright © 2020-2023  润新知