《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. 模型图:
    一个简单的双通道模型结构
  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
  • 通过反向随机梯度下降,训练模型参数。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 卷积神经网络 (Convolutional Neural Networks, CNN) 是一种常用于文本分类的深度学习模型。它通过卷积和池化层来提取文本中的特征,并使用全连接层来进行分类。 CNN 的一个优点是能够处理变长的输入,并且不需要对文本进行预处理。 ### 回答2: 卷积神经网络是一种深度学习方法,用于对文本进行分类。在训练过程中,这种网络可以自动学习输入数据的特征表示。卷积神经网络中的卷积层可以识别输入中的局部模式,这些局部模式组合起来形成更高级别的特征,最终帮助分类器确定类别。对于文本分类问题,卷积神经网络的输入是文本的词嵌入向量,可以从先验知识中自动学习特征。 在一些文本分类任务中,卷积神经网络已经取得了很好的表现。文本分类任务通常被分为两种类型:二元分类和多分类。二元分类任务是指将数据分为两类,例如垃圾邮件和非垃圾邮件。多类分类任务是指将数据分为多类,例如新闻分类。在这两种任务中,卷积神经网络都能够进行有效的分类。 对于二元分类任务,卷积神经网络可以使用一个输出节点,并使用 sigmoid 激活函数将输入映射到 0 到 1 之间的概率。对于多分类任务,卷积神经网络可以使用多个输出节点,每个节点对应一个类别,并使用 softmax 激活函数将输入映射到 0 到 1 之间,并且所有输出节点的和为 1。 要训练卷积神经网络进行文本分类,需要对模型进行三个主要的训练步骤。首先,需要构建词嵌入矩阵,该矩阵将文本中的每个词都映射到一个向量。然后,需要将文本数据转换为卷积神经网络所需的格式。最后,需要对模型进行训练,并根据测试数据进行评估。 总之,卷积神经网络已经被证明是一种强大的工具,可以用于文本分类等任务。在处理文本数据时,卷积神经网络可以自动学习输入数据的特征表示,并使用这些特征来确定文本的类别。 ### 回答3: 卷积神经网络(CNN)是一种深度学习模型,它在图像识别、计算机视觉和自然语言处理中表现出色。最近几年,CNN 在句子分类中也获得了很大的成功。 CNN 句子分类模型的输入是一个序列,输出是类别标签。与传统的 RNN 模型不同之处在于,CNN 可以使每个神经元只能捕获一个固定大小的区域的特征,从而加快模型的训练和降低了模型的复杂度。 CNN 句子分类模型的基本架构包括词嵌入层、卷积层、池化层和全连接层。词嵌入层将输入的文本转化为向量表示。卷积层通过滑动窗口对输入的序列进行卷积操作,提取出局部特征。池化层在每个滑动窗口上提取出一个最大值或平均值,进一步降低维度。最后,全连接层将提取出的特征传递到输出层进行分类。 CNN 句子分类模型的优点在于它可以处理不定长的文本序列,并在仅有少量特征的情况下表现出色。但是,CNN 模型的缺点在于不善于处理长期依赖关系,例如情感分析中的Irony识别。为了解决这个问题,可以引入 RNN 或 Transformer 等模型。 总的来说,CNN 模型为句子分类问题提供了一个简单有效的解决方案。在实践中,需要根据具体的任务选择合适的模型结构和参数设置,才能取得最佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值