卷积神经网络处理自然语言

图灵汇官网

当我们谈论卷积神经网络(Convolutional Neural Networks, CNNs)时,人们往往会想到计算机视觉领域。CNNs在图像分类方面做出了巨大贡献,是当今大多数计算机视觉系统的核心技术,从Facebook的图像自动标签到自动驾驶汽车都广泛使用。

近年来,我们开始在自然语言处理(Natural Language Processing, NLP)领域应用CNNs,并取得了显著成果。本文旨在概述CNNs的概念,以及如何将它们应用于NLP。理解CNNs在计算机视觉中的应用较为直观,因此本文将首先介绍这一背景,再逐步过渡到NLP的应用。

什么是卷积运算?

卷积运算可以形象地理解为一个滑动窗口函数作用于矩阵的过程。虽然描述起来可能略显抽象,但通过动画演示会更加直观。

卷积运算可以用一个3x3的滤波器实现。想象左侧的矩阵是一张黑白图像,每个元素代表一个像素点,0表示黑色,1表示白色。移动窗口(也称为核、滤波器或特征检测器)在矩阵上滑动,将滤波器与矩阵对应的部分逐元素相乘并求和。通过这种方式,对整幅图像进行卷积运算。

卷积运算的实际效果可以通过一些直观的例子来理解:

  • 图像模糊:通过计算邻近像素点的均值来替换原像素点的值。
  • 边缘检测:通过计算邻近像素点的差值来替换原像素点的值。例如,图像中平滑的部分,像素值的差值较小,而边缘部分的差值较大。

更多关于卷积运算的详细内容,可以参考Chris Olah的专题博客。

什么是卷积神经网络?

现在你应该了解了什么是卷积运算。那么,CNNs是什么呢?CNNs本质上是多层卷积运算,加上非线性激活函数(如ReLU和tanh)对每层的输出进行转换。在传统的前馈神经网络中,每个输入神经元与下一层的输出神经元相连,这种方式称为全连接层或仿射层。而在CNNs中,我们不是这样做的,而是用输入层的卷积结果来计算输出。这相当于局部连接,每块局部的输入区域与输出的一个神经元相连。对每一层应用不同的滤波器,通常是上百个,然后汇总它们的结果。这里还包括池化层(降采样),后面会详细解释。在训练阶段,CNN基于你想要完成的任务自动学习滤波器的权重值。

例如,在图像分类问题中,第一层CNN模型可能会学会从原始像素点检测到一些边缘线条,然后在第二层检测出一些简单的形状,最后基于这些形状检测出更高级的特征,如脸部轮廓等。最后一层利用这些高级特征进行分类。

这种计算方式有两个关键点:位置不变性和组合性。例如,在判断图片中是否包含大象时,滤波器在整个图片范围内平移,因此不需要关心大象的具体位置。池化层也有助于位置、旋转和缩放的不变性。第二个关键因素是组合性,每个滤波器对一小块局部区域的低级特征组合形成更高级的特征表示。

如何将CNNs应用于NLP?

NLP任务的输入不再是像素点,而是以矩阵形式表示的句子或文档。矩阵的每一行对应一个分词元素,通常是一个单词。也就是说,每一行是表示一个单词的向量。通常这些向量是word embeddings(低维度表示),如word2vec和GloVe,但也可以用one-hot向量表示。

在计算机视觉中,滤波器每次只对图像的一小块区域进行运算,而在处理自然语言时,滤波器通常覆盖上下几行(几个词)。因此,滤波器的宽度与输入矩阵的宽度相等。虽然高度或区域大小可以调整,但滑动窗口的覆盖范围通常是2到5行。处理自然语言的CNN结构如下:

在用于句子分类的CNN结构中,我们设置了三种尺寸的滤波器:2、3和4行,每种尺寸各有两种滤波器。每个滤波器对句子矩阵进行卷积运算,得到不同程度的特征字典。然后对每个特征字典进行最大值池化,也就是只记录每个特征字典的最大值。这样,由六个字典生成了一串单变量特征向量,然后这六个特征拼接形成一个特征向量,传给网络的倒数第二层。最后的softmax层以这个特征向量作为输入,用其来对句子进行分类;假设这是一个二分类问题,因此得到两个可能的输出状态。

计算机视觉中的直观感受在NLP中并不完全适用。位置不变性和局部组合性在图像中很直观,但在NLP中却不尽然。你可能会在意一个词在句子中的位置。相邻的像素点很可能相关,但单词并不总是如此。在很多语言中,短语之间可能被其他词汇隔开。同样,组合性也不像计算机视觉那样明显。尽管如此,CNNs仍然在NLP任务中表现出色。它们的主要优点在于速度快,卷积运算在GPU级别硬件上实现,效率很高。

CNN的超参数

在探讨如何将CNNs应用于NLP任务之前,先来看一下构建CNN网络时需要考虑的一些选择。这些选择有助于更好地理解相关文献。

窄卷积 vs 宽卷积

在解释卷积运算时,我们忽略了滤波器使用的一个小细节。在矩阵的中部使用3x3的滤波器没有问题,但在边缘该怎么办?解决办法是使用补零法,即将所有落在矩阵范围之外的元素值设为0。这样可以对输入矩阵的每一个元素进行滤波,输出一个同样大小或更大的矩阵。这种方法称为宽卷积,不使用补零的方法称为窄卷积。

步长

卷积运算的另一个超参数是步长,即每次滤波器平移的距离。所有例子中的步长都是1,相邻两个滤波器有重叠。步长越大,则用到的滤波器越少,输出的值也越少。步长为1的输出长度为(输入长度 - 滤波器长度 + 1),步长为2的输出长度为(输入长度 - 滤波器长度 + 1) / 2。

池化层

池化层是CNN的重要组成部分,一般位于卷积层之后。池化层对输入进行降采样,常用的做法是对每个滤波器的输出求最大值。我们并不需要对整个矩阵都做池化,可以只对某个窗口区间做池化。例如,2x2窗口的最大值池化。

池化的优点之一是输出一个固定大小的矩阵,这对分类问题非常重要。池化还能降低输出结果的维度,保留显著的特征。在图像识别领域,池化还能提供平移和旋转不变性。

通道

通道是指输入数据的不同“视角”。例如,在图像识别中,通常会用到RGB通道。你可以对每个通道进行卷积运算,赋予相同或不同的权重。在NLP中,可以将不同类的词向量表征视为独立的通道,或将不同语言版本的同一句话视为一个通道。

卷积神经网络在自然语言处理的应用

接下来,我们将探讨CNN模型在自然语言处理领域的实际应用。我试图涵盖一些主流的研究成果。

CNNs最适合用于分类任务,如语义分析、垃圾邮件检测和话题分类。卷积运算和池化会丢失局部区域某些单词的顺序信息,因此纯CNN结构不太适用于PoS tagging和实体提取等顺序标签任务。然而,对于分类任务,CNNs表现优异。例如,Kim (2014)的CNN模型在多个数据集上表现卓越,甚至刷新了某些任务的最佳结果。该模型包括一个表示句子的矩阵作为输入层,接着是卷积层和最大池化层,最后是softmax分类器。

其他研究也在探索CNNs在关系挖掘和关系分类任务中的应用。除了词向量表征外,作者还将词与词的相对位置作为卷积层的输入值。此外,一些研究使用CNNs直接从字符学习,而不是预训练词向量。

大多数CNN模型以某种方式学习单词和句子的词向量表征,这是训练过程的一部分。并非所有论文都关注这一步训练过程,但学习到的表征确实对任务性能有很大影响。

令人惊讶的是,字符层面的CNNs模型也取得了很好的效果。这些模型直接从字符学习,而不必预训练词向量。研究表明,字符级输入在大规模数据集上学习效果很好,但在小数据集上效果一般。

总之,CNNs模型在NLP领域已经展现出强大的能力,新成果和顶级系统不断涌现。

若有任何疑问或反馈,请在评论区留言。感谢您的阅读!

参考文献: 1. Kim, Y. (2014). Convolutional Neural Networks for Sentence Classification. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP 2014), 1746–1751. 2. Kalchbrenner, N., Grefenstette, E., & Blunsom, P. (2014). A Convolutional Neural Network for Modelling Sentences. ACL, 655–665. 3. Santos, C. N. dos, & Gatti, M. (2014). Deep Convolutional Neural Networks for Sentiment Analysis of Short Texts. In COLING-2014 (pp. 69–78). 4. Johnson, R., & Zhang, T. (2015). Effective Use of Word Order for Text Categorization with Convolutional Neural Networks. To Appear: NAACL-2015, (2011). 5. Johnson, R., & Zhang, T. (2015). Semi-supervised Convolutional Neural Networks for Text Categorization via Region Embedding. 6. Wang, P., Xu, J., Xu, B., Liu, C., Zhang, H., Wang, F., & Hao, H. (2015). Semantic Clustering and Convolutional Neural Network for Short Text Categorization. Proceedings ACL 2015, 352–357. 7. Zhang, Y., & Wallace, B. (2015). A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification. 8. Nguyen, T. H., & Grishman, R. (2015). Relation Extraction: Perspective from Convolutional Neural Networks. Workshop on Vector Modeling for NLP, 39–48. 9. Sun, Y., Lin, L., Tang, D., Yang, N., Ji, Z., & Wang, X. (2015). Modeling Mention, Context and Entity with Neural Networks for Entity Disambiguation, (Ijcai), 1333–1339. 10. Zeng, D., Liu, K., Lai, S., Zhou, G., & Zhao, J. (2014). Relation Classification via Convolutional Deep Neural Network. Coling, (2011), 2335–2344. 11. Gao, J., Pantel, P., Gamon, M., He, X., & Deng, L. (2014). Modeling Interestingness with Deep Neural Networks. 12. Shen, Y., He, X., Gao, J., Deng, L., & Mesnil, G. (2014). A Latent Semantic Model with Convolutional-Pooling Structure for Information Retrieval. Proceedings of the 23rd ACM International Conference on Conference on Information and Knowledge Management – CIKM '14, 101–110. 13. Weston, J., & Adams, K. (2014). #TAG SPACE: Semantic Embeddings from Hashtags, 1822–1827. 14. Santos, C., & Zadrozny, B. (2014). Learning Character-level Representations for Part-of-Speech Tagging. Proceedings of the 31st International Conference on Machine Learning, ICML-14(2011), 1818–1826. 15. Zhang, X., Zhao, J., & LeCun, Y. (2015). Character-level Convolutional Networks for Text Classification, 1–9. 16. Zhang, X., & LeCun, Y. (2015). Text Understanding from Scratch. arXiv E-Prints, 3, 011102. 17. Kim, Y., Jernite, Y., Sontag, D., & Rush, A. M. (2015). Character-Aware Neural Language Models.

本文来源: 图灵汇 文章作者: 飞机机器人