卷积神经网络在自然语言处理中的应用
Posted 机器学习blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了卷积神经网络在自然语言处理中的应用相关的知识,希望对你有一定的参考价值。
卷积神经网络最典型的应用领域是计算机视觉,卷积神经网络在图像分类中取得了重大突破,典型应用有facebook的图像自动标注,还有自动驾驶等。
卷积神经网络也可以用于自然语言处理。由于卷积神经网络在计算机视觉中的应用最广,首先阐述这个,然后再介绍其在自然语言处理中的应用。
首先介绍下卷积。卷积即为将一个划窗函数用于一个矩阵,示例如下
图片来源:http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution
假设左边的矩阵表示黑白图像,每个元素表示一个像素,0为黑,1为白,对于灰度图像,取值一般在0到255之间。划窗一般称为核函数,滤波函数或特征探测函数。这里的滤波函数是3×3的,将其与原矩阵的对应元素点乘,然后相加。将这种操作遍历整个矩阵就可以得到整个卷积。
将每个像素与其邻近的像素作平均会使得图像变得模糊,
将一个像素跟其周边的作差可以探测边界,如果一个图像的某个部分是光滑的,即该像素的颜色跟邻近像素的颜色相同,此时作差就抵消了,结果为0,或者是黑色的。如果有个明显的边界,比如由白变黑,作差结果就比较大,结果为白色。
各种效果的卷积滤波参见https://docs.gimp.org/en/plug-in-convmatrix.html,卷积的详细解释也可以参见http://colah.github.io/posts/2014-07-Understanding-Convolutions/
下面介绍下卷积神经网络,卷积神经网络是由多层卷积和非线性激活函数对卷积作用构成的,激活函数有ReLU或tanh等。传统前向神经网络中每个输入神经元跟下一层的每个输出神经元都有连接,这种连接称作全连接层或称仿射层。在卷积网络中,将卷积用于输入层,即可得到输出层,这种连接是局部连接的,输入层中的某个小区域跟输出层的某个神经元有连接。每一个卷积层对应的滤波函数都不同。卷积层后面通常带有池化层或次采样层。训练过程中,卷积神经网络可以自动学习滤波。比如,在图像分类中,第一层可能用于探测边界,第二层用于探测简单的形状,然后推断更高层的特征,比如脸部形状。最后一层是分类器。
示例如下
比如我们希望对一个图像分类,含有大象是一类,不含是另一类。由于是将滤波函数遍历整个图像,所以不必关注大象在图像的哪个位置,实际应用中,池化层可以使得模型具有平移不变性,旋转不变性以及缩放不变性等。另外,卷积网络具有组合性,它可以从像素学到边界,从边界学到形状,从形状学到更复杂的物体。
下面转到自然语言处理问题中,自然语言处理的输入通常是句子或文档构成的矩阵。矩阵的每一行通常表示一个单词,或者一个字符。每一行都是一个向量,通常这些向量是低纬的词嵌入,比如word2vec或GloVe,或者one-hot形式的向量。比如句长为10的100维词嵌入的矩阵大小为10×100。
在计算机视觉中,滤波函数在图像的局部小块上滑动,在自然语言处理中,通常将滤波函数用于矩阵的整行。即滤波的宽度跟输入矩阵的宽度相同。高度,即区块大小,可以取多种值,通常划窗大小为2-5。示例如下
来源 Zhang, Y., & Wallace, B. (2015). A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification.
位置不变性和局部组合性在自然语言处理中就没那么适用,这是由于某个单词出现的位置还是比较重要的。单词组合的方式有多种,比如形容词修饰名词,这种高层次的特征没有像计算机视觉那么有规律。
如此看来,卷积神经网络并不适用于自然语言处理任务。递归神经网络更适用于自然语言处理。递归神经网络的思路跟我们从左往右读的习惯很相通。但是,这并不意味着卷积神经网络不能用于自然语言处理中。结果表明,卷积神经网络在自然语言处理中的效果令人乐观。比较简单的词袋模型就有一些不合理的假设,但是它已经成为标杆方法,并且取得的效果还挺好。
卷积是计算机图像学中的核心,并且是在GPU上实现的,因此卷积神经网络的速度非常快。跟n-grams相比,卷积神经网络在词表示中也非常高效。词汇量比较大时,计算3-grams就比较昂贵了。即使谷歌针对5-grams在计算速度上也没有好的解决方案。卷积滤波可以自动学到好的表达,并且勿需表示整个词汇。滤波大小超过5也完全合理。第一层的滤波学到的特征相对n-grams可能更简单,但是表达方式更加紧致。
接下来了解下卷积神经网络中的超参数。
应用滤波时需要考虑邻近的元素,如果某个元素左边或者上面没有邻居,此时,如何滤波呢?可以利用0补位。所有矩阵之外的元素都可以用0来补充,如此一来,就可以将滤波用于矩阵中的每个元素。此时的输出层会更大。如果用0补位称为宽卷积,否则称为窄卷积。1维情况的示例如下
图片来源 : A Convolutional Neural Network for Modelling Sentences (2014)
另一个超参数是步幅大小,即每一步滤波移动的大小。如果步幅为1,则滤波会有重叠。如果步幅比较大,则滤波比较少,输出单元个数越少。下面是示例
图片来源 http://cs231n.github.io/convolutional-networks/
卷积神经网络比较重要的一个方面是池化层,通常用于卷积层之后。池化层对卷积层进行次采样。比较常用的池化方法是针对每个滤波取最大值。不需要对整个矩阵进行池化,利用划窗来池化即可。但是,在自然语言处理中,需要对整个卷积层进行池化,对于某个滤波得到一个输出。示例如下
图片来源: http://cs231n.github.io/convolutional-networks/#pool
池化的一个特性在于使得输出矩阵大小固定,这对于分类是必须的。比如,有1000的滤波函数,每个滤波函数都是max pooling,此时会有1000个输出,跟滤波的大小无关,跟输入单元的个数也无关。这就可以允许各种句子长度,各种大小的滤波函数,但是输入到分类器的特征个数都一样。
池化也可以使得输出的维度降低,同时保留最重要的信息。每种滤波所能检测的特征不同,比如,检测句子包含消极词汇"没有新意"。如果这个短语出现在某个句子中,滤波移到该短语时池化层的输出较大,其他地方对应的输出较小。最大池化法可以保留句子中是否包含该词汇,但是同时丢失了该词汇出现的位置信息。而位置信息也很重要,这种做法类似与n-grams词袋模型。
在图像识别中,池化具有旋转不变性和平移不变性。无论旋转和平移,最大池方法都可以返回一样的值。
卷积神经网络中还有一个重要概念,通道。不同的通道反映了数据的不同方面。比如,在图像识别中,通常有RGB 红 绿 蓝 三个通道。可以跨通道进行卷积,权值可以不同,也可以相同。在自然语言处理中,也可以有多个通道,比如不同的词嵌入模型,word2vec和GloVe,不同语言对应不同的通道等。
卷积神经网络在自然语言处理中的应用主要有情感分析,垃圾检测或主题分类等。卷积和池化无法考虑词序,因此序列标注或实体抽取不太容易用纯正的卷积神经网络来处理,需要借助于其他方式。
文献[1]将卷积神经网络用于多个分类数据集,主要用于情感分析和主题分类。文中的网络结构比较简单,输入层是由word2vec词嵌入模型得到的,卷积层后面有多个滤波,紧接着最大池化层,最后是softmax分类器。实验时利用了两个不同的通道,包含了静态的词嵌入和动态的词嵌入模型,其中动态的词嵌入模型在训练过程中会有所调整。类似的结构文献[2]也有提到,不同的是文献[2]中的结构更加复杂一些。文献[6]加了一层语义聚类。
图片来源 :Kim, Y. (2014). Convolutional Neural Networks for Sentence Classification
文献[4]训练的卷积神经网络没有利用预训练的词向量,比如word2vec或GloVe。直接将卷积用于one-hot编码的向量。该文的作者对输入数据提出了一种节省空间的类似与词袋模型的表示方式,这样可以减少需要学习的参数。文献[5]中,对该模型进行了扩展,加入了一层无监督的区域嵌入,这一层基于卷积神经网络学习得到,用来预测上下文。这种方法对长文本效果较好,比如电影评论,但是在短文本效果没那么明显,比如推特。针对短文本,加入预训练的词嵌入模型效果更佳。
卷积神经网络中的超参数有输入的表达,如word2vec,GloVe以及one-hot等,卷积滤波的个数,卷积滤波的大小,池化方法(最大池或平均池),激活函数(ReLU或tanh)。文献[7]对各个超参数的影响做了评估。部分结果表明最大池方法优于平均池化法,滤波大小依赖于具体任务。
文献[8]探索了卷积神经网络在关系抽取和关系分类中的应用。除了词向量,作者把感兴趣的实体词的相对位置加入了卷积层的输入。该模型假设实体的位置是给定的,并且每个示例输入包含一种关系。类似的文献还有[9]和[10]。
来自微软研究院的文献[11]和[12]将卷积神经网络用于自然语言处理中,该应用比较有意思。这两篇文献学习句子的语义表示用于信息检索。比如基于用户现在阅读的内容,来推荐有意思的文档,其中句子表示的训练基于搜索引擎的日志数据。
文献[13]给出一种卷积网络的结构,用于预测facebook中的#,同时也生成了词和句子的有意思的嵌入模型。所学习的嵌入模型可以用于给用户推荐潜在的有意思的文档,该文的训练基于点击流数据。
卷积网络也可以用于字符。文献[14]学习了字符级的嵌入模型,并将其与预训练的词嵌入模型联合起来,然后用于词性标注。文献[15]和[16]利用卷积神经网络直接从字符中学习,不需要预先训练的嵌入模型。作者将九层的深度网络模型用于情感分析和文本文类。结果显示效果在大数据集(百万级别的样本)较好,小数据集效果欠佳。文献[17]将字符级的卷积神经网络用于语言模型,将卷积网络的输出作为LSTM模型的输入,用于多种语言。
参考文献
http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-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). # T AG S PACE : 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.
以上是关于卷积神经网络在自然语言处理中的应用的主要内容,如果未能解决你的问题,请参考以下文章