《Convolutional Neural Networks for Sentence Classification》论文学习笔记

《Convolutional Neural Networks for Sentence Classification》论文学习笔记

本篇论文来源: Kim Y. Convolutional neural networks for sentence classification[J]. arXiv preprint arXiv:1408.5882, 2014.
文章链接:https://arxiv.org/abs/1408.5882
该篇文章是首次将CNN卷积神经网络与NLP结合的文章

摘要

摘要部分提到的点:

  1. 做了一系列卷积神经网络 CNN在预训练词向量上对句子级分类的任务
  2. 用具有少量超参数调整和静态向量在多基准测试中有很好的效果
  3. 学习任务中特定的向量通过微调性能提升
  4. 修改框架以达到可以使用特定任务和静态向量(为什么要用这个task-specific和static vectors)
  5. CNN在7个任务中有4个任务 达到了先进,包括情感分析和问题分类

介绍

  1. 自然语言处理大部分使用深度学习方法的包含词向量的表示、训练学习词向量用来进行文本分类。而词向量是从 预计的一个稀疏的1-词汇量编码通过一个隐藏层到一个更低维度的向量空间,实质上,特征提取(在词本身的维度的编码单词的语义特征)。在这种稠密表示下,语义相近的词在欧式距离和余弦距离下、在更低维度向量空间中是近似词。
  2. CNN的卷积过滤器(convolving filters)在局部特征时更适用。CNN后来用于NLP在语义分析、检索、句子构建和其他的传统NLP任务上都有很好的结果。
  3. 起初保持词向量静态,只训练模型的其他参数,尽管超参数的小调整,在词向量上只有一层卷积层的CNN在多基准测试中也达到了很好的想过。建议预训练的向量是普遍适用的特征提取器,可用于各种分类任务。通过微调学习任务特定的向量也会有进一步提升。最后描述了对体系结构的简单修改,以允许通过具有多个通道来使用预先训练的和任务特定的向量。
  4. 特征提取器的获得跟图像分类类似,是从在各项任务表现良好的预处理深度学习模型中获得。

模型

  1. 模型图:
    《Convolutional Neural Networks for Sentence Classification》论文学习笔记_第1张图片
  2. 模型算法理解:
    • x i ∈ R k x_i \in R ^ k xiRk 是这句话的第 i个词,相当于一个k维词向量
      一个长度为n的句子表示为 x 1 : n = x 1 ⊕ x 2 ⊕ . . . ⊕ x n x_{1:n} = x_1 \oplus x_2 \oplus ... \oplus x_n x1:n=x1x2...xn , ⊕ \oplus 是连接运算符,实际上, x i : i + j x_{i:i+j} xi:i+j指的是词的连接, x i , x i + 1 , . . . , x i + j x_i, x_{i+1}, ... , x_{i+j} xi,xi+1,...,xi+j.
    • 一个卷积运算包括一个过滤器filter w ∈ R h k w \in R ^ {hk} wRhk ,这个过滤器被用于h子窗口来产生一个心得特征。比如,一个特征 c i c_i ci是从一个一个词的窗口 x i : i + h − 1 x_{i:i+h-1} xi:i+h1 通过 c i = f ( w ∙ x i : i + h − 1 + b ) c_i = f (w\bullet x_{i:i+h-1} + b) ci=f(wxi:i+h1+b) 其中 b ∈ R b \in R bR 是一个偏置项,f是一个非线性函数就像超参数正切函数这样的。这种过滤 器是用于在句子 { x 1 : h , x 2 : h + 1 , . . . , x n − h + 1 : n } \{x_{1:h},x_{2:h+1},...,x_{n-h+1:n}\} {x1:h,x2:h+1,...,xnh+1:n}中每一个词的可能窗口来产生的特征谱 c = [ c 1 , c 2 , . . . , c n − h + 1 ] c = [c_1, c_2,...,c_{n-h+1}] c=[c1,c2,...,cnh+1],其中 c ∈ R n − h + 1 c \in R^{n-h+1} cRnh+1
    • 之后我们会应用最大化时间池来对特征谱进行操作,取最大值作为特定过滤器对应的特征。这种思想是对于每一个特征谱来说是捕获一个最大值作为一个最重要的特征。这种池化可处理可变长度的句子。
    • 本文的模型是多个过滤器来补货多个特征。这些特征形成倒数第二层并且传递给完全连接的softmax层,输出标签上的概率分布。
    • 在一个变形的模型中,我们利用两个词向量通道:一个是在整个训练期间保持静态,另一个是通过反向传播进行微调。在多通道结构中,说明模型图:每一个过滤器都应用于两个通道,结果相加计算方程 c i = f ( w ∙ x i : i + h − 1 + b ) c_i = f (w\bullet x_{i:i+h-1} + b) ci=f(wxi:i+h1+b) 中的 c i c_i ci
    • 每个句子中的词转化为词向量,词向量的维度是k,如果一个句子中有m个词,则该句子最终表示为m×k的词向量矩阵。假设文档中最长的句子中的词个数为n,则小于n的句子要填充为n。最终得到的词向量矩阵为 n × k。
      eg:
    def __padding_batch_data_3d(deal_x):
        max_len_document = max([len(document) for document in deal_x])
        # 处理文本中的句子,句子的长度
        max_len_sentence = max(
            [max(_len) for _len in [[len(sentence) for sentence in document] for document in deal_x]])
        for document in deal_x:
            for sentence in document:
                # 在句子数组后追加(句子最长的长度-该句子长度)个0
                sentence.extend((max_len_sentence - len(sentence)) * [0])
            document.extend((max_len_document - len(document)) * [max_len_sentence * [0]])
            return deal_x

    def __padding_batch_data_2d(self, deal_x):
        # hasattr()用于判断对象是否包含对应的属性。参数:object:对象,name:字符串、属性名,有该属性返回True,没有返回False
        if hasattr(self._config, "sequence_length"):
            max_len_document = max(max([len(document) for document in deal_x]), self._config.sequence_length)
        else:
            max_len_document = max([len(document) for document in deal_x])
        for document in deal_x:
            document.extend((max_len_document - len(document)) * [0])
        return deal_x
  1. 正则:
    对于正则在对l2-norms的约束权重向量的penultimate layer采用dropout,dropout在前向传播过程中通过随机丢弃、设置为0,隐藏层比例为p防止隐藏单元互适应(过拟合)。给定penultimate layer z = [ c ^ 1 , . . . , c ^ m ] z = [\hat c_1,...,\hat c_m] z=[c^1,...,c^m](m个过滤器),而不是使用 y = w ∙ z + b y = w\bull z + b y=wz+b,对于输出单元y在前向传播,dropout用 y = w ∙ ( z ∘ r ) + b y = w\bull(z\circ r) + b y=w(zr)+b
    在测试时,学习权重向量按p缩放 w ^ = p w \hat w=pw w^=pw,并且 w ^ \hat w w^用来对句子进行评分。通过重新调整权重w来限制 l 2 l_2 l2-norms的权重向量,有 ∣ ∣ w ∣ ∣ 2 = s ||w||_2 = s w2=s,当 ∣ ∣ w ∣ ∣ 2 > s ||w||_2 > s w2>s后一个梯度下

总结:

  • 1维卷积器的长度h分别为3,4,5.卷机器的尺度为3×k,,4×k,5×k。卷机器的数量分别是 n 0 n_0 n0 n 1 n_1 n1 n 2 n_2 n2,在实验中均取100.
  • 3种卷积器与矩阵分别做卷积,得到(n-h+1)×1×100的矩阵,卷积过程的公式是 f ( x ) = f ( w ∗ x i : i + h + 1 + b ) f(x)=f(w*x_{i:i+h+1} + b) f(x)=f(wxi:i+h+1+b)
  • (n - h + 1) × 1 × 100的矩阵然后对列最大值池化,得到1 × 1 × 100,即1×100的向量,最终3种卷积器连接在一起,得到1*300的向量。
  • 将1*300的词向量经过全连接层,做softmax二分类。 f ( x ) = w ∗ z + b f(x) = w * z + b f(x)=wz+b
  • 全连接神经网络用dropout去除过拟合,dropout率为0.5,l2正则为0.3,最小batch为50
  • 通过反向随机梯度下降,训练模型参数。

你可能感兴趣的:(自然语言处理)