抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

blaire

👩🏻‍💻ブレア🥣

image

textCNN 是 2014年 提出的用来做文本分类的卷积神经网络,结构简单、效果好.

论文链接: Convolutional Neural Networks for Sentence Classification 在文本分类等 NLP 领域应用广泛.

一般结构: 降维 -> conv -> 最大池化 -> 完全连接层 -> softmax .

将文本当做是一维图像,从而可以用一维卷积神经网络来捕捉临近词之间的关联。

1. 一维卷积层

在介绍模型前我们先来解释一维卷积层的工作原理。和二维卷积层一样,一维卷积层使用一维的互相关运算。在一维互相关运算中,卷积窗口从输入数组的最左方开始,按从左往右的顺序,依次在输入数组上滑动。

当卷积窗口滑动到某一位置时,窗口中的输入子数组与核数组按元素相乘并求和,得到输出数组中相应位置的元素。

1.1 多输入通道 * 一维互相关

如下图所示,输入是一个宽为 7 的一维数组,核数组的宽为 2。可以看到输出的宽度为 7−2+1=6,且第一个元素是由输入的最左边的宽为 2 的子数组与核数组按元素相乘后再相加得到的。

<img src="/images/nlp/conv1d.svg" width=“650” /img>

一维互相关运算。阴影部分为第一个输出元素及其计算所使用的输入和核数组元素:0×1+1×2=2。

1.2 多输入通道 * 一维互相关

多输入通道的一维互相关运算也与多输入通道的二维互相关运算类似:在每个通道上,将核与相应的输入做一维互相关运算,并将通道之间的结果相加得到输出结果。下图展示了含 3 个输入通道的一维互相关运算。

<img src="/images/nlp/conv1d-channel.svg" width=“650” /img>

含3个输入通道的一维互相关运算。阴影部分为第一个输出元素及其计算所使用的输入和核数组元素:

0×1+1×2+1×3+2×4+2×(1)+3×(3)=20×1+1×2+1×3+2×4+2×(−1)+3×(−3)=2

1.3 单输入通道 * 二维互相关

<img src="/images/nlp/conv1d-2d.svg" width=“650” /img>

2×(1)+3×(3)+1×3+2×4+0×1+1×2=22×(−1)+3×(−3)+1×3+2×4+0×1+1×2=2

结论 : 多输入通道 一维互相关 <=> 单输入通道 二维互相关

1.4 多输入通道 * 二维互相关

<img src="/images/nlp/conv_multi_in.svg" width=“650” /img>

(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56

1.5 多输出通道 1×1 卷积层

当输入通道有多个时,由于我们对各个通道的结果做了累加,所以不论输入通道数是多少,输出通道数总是为 1

<img src="/images/nlp/conv_1x1.svg" width=“650” /img>

1.6 小结

  • 使用多通道可以拓展卷积层的模型参数.
  • 假设将通道维当做是特征维,将高和宽维度上的元素当成数据样本,那么 1×1 卷积层的作用与全连接层等价.
  • 1×1 卷积层通常用来调整网络层之间的通道数,并控制模型复杂度.

2. 时序最大池化层

类似地,我们有一维池化层。TextCNN 中使用的时序最大池化层(max-over-time pooling)实际上对应一维全局最大池化层:假设输入包含多个通道,各通道由不同时间步上的数值组成,各通道的输出即该通道所有时间步中最大的数值。因此,时序最大池化层的输入在各个通道上的时间步数可以不同。

为提升计算性能,我们常常将不同长度的时序样本组成一个小Batch,并通过在较短序列后附加**特殊字符(例如 0)**令批量中各时序样本长度相同。这些人为添加的特殊字符当然是无意义的。由于时序最大池化的主要目的是抓取时序中最重要的特征,它通常能使模型不受人为添加字符的影响。

3. TextCNN 模型

TextCNN 主要使用了一维卷积层和时序最大池化层。假设输入的文本序列由 n 个词组成,每个词用 d 维的词向量表示。那么输入样本的宽为 n,高为 1,输入通道数为 d。

textCNN 的计算主要分为以下几步:

(1). 卷积层: 定义多个一维卷积核,并使用这些卷积核对输入分别做卷积计算。宽度不同的卷积核可能会捕捉到不同个数的相邻词的相关性。

(2). 池化层: 对输出的所有通道分别做时序最大池化,再将这些通道的池化输出值连结为向量。

(3). 全连层: 通过全连接层将连结后的向量变换为有关各类别的输出。这一步可以使用丢弃层应对过拟合。

<img src="/images/nlp/conv_textcnn.svg" width=“700” /img>

用一个例子解释了 textCNN 的设计。这里的输入是一个有 11 个词的句子,每个词用 6 维词向量表示。因此输入序列的宽为 11,输入通道数为 6。给定 2 个一维卷积核,核宽分别为 2 和 4,输出通道数分别设为 4 和 5。因此,一维卷积计算后,4 个输出通道的宽为 11−2+1=10,而其他 5 个通道的宽为 11−4+1=8。尽管每个通道的宽不同,我们依然可以对各个通道做时序最大池化,并将 9 个通道的池化输出连结成一个 9 维向量。最终,我们使用全连接将 9 维向量变换为 2 维输出:正面情感和负面情感的预测。

4. CNN 的特点

CNN的三个优点:

  1. sparse interaction(稀疏的交互)
  2. parameter sharing(参数共享)
  3. equivalent respresentation(等价表示)。

经典的简化卷积公式表示如下:

<img src="/images/nlp/textcnn-1.webp" width=“700” /img>

假设每个词用三维向量表示,左边是4个词,右边是卷积矩阵,那么得到输出为:

<img src="/images/nlp/textcnn-2.webp" width=“700” /img>

如果基于这个结果做1-MaxPool池化(最大值池化),那么就取卷积层结果 o 中的最大值,即提取最显著的特征。

针对海量的文本多分类数据,也可以尝试一下浅层的深度学习模型FastText模型,该模型的分类效率更高。

<img src="/images/nlp/textcnn-3.webp" width=“700” /img>

整个模型由四部分构成: 输入层卷积层池化层全连接层

5. 小结

  • 我们可以使用一维卷积来处理和分析时序数据。
  • 多输入通道的一维互相关运算可以看作是单输入通道的二维互相关运算。
  • 时序最大池化层的输入在各个通道上的时间步数可以不同。
  • TextCNN 主要使用了一维卷积层和时序最大池化层。

Reference

Comments