赛尔笔记 | CNN介绍及代码实现

2019 年 1 月 23 日 哈工大SCIR

作者&代码:哈工大SCIR石继豪


一、介绍

1.1 文章组织

本文简要介绍CNN的基本原理,并以句子级情感分类任务为例介绍使用CNN方法进行特征抽取建模。文章的最后,我们给出Pytorch下CNN的实现代码,供读者参考。


1.2 情感分类任务

自然语言处理中情感分类任务是对给定文本进行情感倾向分类的任务,粗略来看可以认为其是分类任务中的一类。对于情感分类任务,目前通常的做法是先对词或者短语进行表示,再通过某种组合方式把句子中词的表示组合成句子的表示。最后,利用句子的表示对句子进行情感分类。


举一个对句子进行褒贬二分类的例子。

句子:我爱赛尔

情感标签:褒义


1.3 什么是CNN

CNN的全称是Convolutional Neural Network, 是一种前馈神经网络。由一个或多个卷积层、池化层以及顶部的全连接层组成,在图像处理领域表现出色。本文主要讲解CNN如何在自然语言处理方面的运用。


1.4 为什么使用CNN

卷积神经网络主要用于提取卷积对象的局部特征,当卷积对象是自然语言文本时,比如一个句子,此时其局部特征是特定的关键词或关键短语,所以利用卷积神经网络作为特征提取器时相当于词袋模型,表示一个句子中是否出现过特定的关键词或关键短语。用在分类任务上,相当于提取出对于分类最有用的特征信息。


相比其他模型,卷积神经网络的参数更少。还有一个优点是CNN不存在序列依赖问题,可以并行计算。


二、CNN原理简介

以早期将CNN引入NLP的一篇工作为例(EMNLP 2014. Convolutional Neural Networks for Sentence Classification),进行讲解。

我们将上图分成4部分,分别进行介绍:


第一部分,将句子“wait for the video and do n’t rent it”向量化。利用word embedding的方法得到每个词xi的向量表示,向量的维度为k。对于长度为n的句子,其向量表示如下(即n*k的矩阵):

这里的static channel和non-static channel分别指词向量固定(即在训练过程中不进行调节)和词向量更新(通过反向传播进行fine-tuning)。


第二部分,带有多个卷积核的卷积层以及特征映射。图中红颜色和黄颜色的虚线代表着卷积操作提取出来的特征,映射得到的输出。图示中展示了4个卷积核。下面介绍一下卷积操作的公式:

对于包含h个单词的滑动窗口,其数学符号表示为xi:i+h-1。w表示卷积核,每次通过滑动h个单词,得到特征ci。每个卷积核对句子进行h个单词的窗口滑动,分别得到对应的特征映射。


第三部分,最大池化。本文采用的是最大池化的方法,还可以采用平均池化。针对每个卷积核得到的特征映射向量,从中分别挑选出最大的值。这种想法的出发点是提取出每个特征映射中最重要的信息,池化过程还可以应对句子长度可变的情况。


第四部分,全连接层。将池化层得到的特征通过全连接softmax层后,能够得到每个类别的概率。


三、CNN代码实现样例

代码地址:

https://github.com/Shijihao/CNN_for_classification


3.1 模型搭建

示例代码使用了两个卷积核,卷积核的滑动窗口分别为2个词和3个词。本示例的数据采用的是MR数据(Movie Review Data),该数据用于情感分析任务,利用电影评论文本进行情感极性(positive或negtive)的分类。


3.2 模型训练


3.3 模型测试


四、总结

本文介绍了卷积神经网络模型如何与NLP任务相结合的早期运用。随着近几年的不断发展,CNN模型不断完善,也出现了一系列的改进,例如可以用dilated卷积、增加网络深度等方法捕获长距离依赖特征。感兴趣的读者可参阅参考资料中的相关文献。


五、参考资料

[1]  KIM Y. Convolutional Neural Networks for Sentence Classification[C]//Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP). Association for Computational Linguistics, 2014: 1746–1751.

[2]  YU F, KOLTUN V. Multi-scale context aggregation by dilated convolutions[J]. arXiv preprint arXiv:1511.07122, 2015.

[3]  KALCHBRENNER N, ESPEHOLT L, SIMONYAN K et al. Neural Machine Translation in Linear Time[J]. CoRR, 2016, abs/1610.10099.

[4]  GEHRING J, AULI M, GRANGIER D et al. Convolutional Sequence to Sequence Learning[C]//PRECUP D, TEH Y W. Proceedings of the 34th International Conference on Machine Learning. International Convention Centre, Sydney, Australia: PMLR, 2017, 70: 1243–1252.


赛尔笔记 | BiLSTM介绍及代码实现


本期责任编辑:崔一鸣

本期编辑:刘元兴




“哈工大SCIR”公众号

主编:车万翔

副主编: 张伟男,丁效

责任编辑: 张伟男,丁效,刘一佳,崔一鸣


编辑: 李家琦,吴洋,刘元兴,蔡碧波,孙卓,赖勇魁


长按下图并点击 “识别图中二维码”,即可关注哈尔滨工业大学社会计算与信息检索研究中心微信公共号:”哈工大SCIR” 。

登录查看更多
7

相关内容

情感分类是对带有感情色彩的主观性文本进行分析、推理的过程,即分析对说话人的态度,倾向正面,还是反面。它与传统的文本主题分类又不相同,传统主题分类是分析文本讨论的客观内容,而情感分类是要从文本中得到它是否支持某种观点的信息。
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
卷积神经网络的概述论文:分析、应用和展望,21页pdf
专知会员服务
89+阅读 · 2020年4月7日
【教程】自然语言处理中的迁移学习原理,41 页PPT
专知会员服务
94+阅读 · 2020年2月8日
近期必读的9篇 CVPR 2019【视觉目标跟踪】相关论文和代码
必读的10篇 CVPR 2019【生成对抗网络】相关论文和代码
专知会员服务
31+阅读 · 2020年1月10日
计算机视觉最佳实践、代码示例和相关文档
专知会员服务
17+阅读 · 2019年10月9日
赛尔笔记 | 自然语言处理中的迁移学习(下)
AI科技评论
11+阅读 · 2019年10月21日
【论文笔记】基于LSTM的问答对排序
专知
12+阅读 · 2019年9月7日
赛尔笔记 | BiLSTM介绍及代码实现
哈工大SCIR
23+阅读 · 2018年10月24日
【干货】使用Pytorch实现卷积神经网络
专知
13+阅读 · 2018年5月12日
【CNN】一文读懂卷积神经网络CNN
产业智能官
18+阅读 · 2018年1月2日
循环神经网络的介绍、代码及实现
AI研习社
3+阅读 · 2017年11月21日
tensorflow系列笔记:流程,概念和代码解析
北京思腾合力科技有限公司
30+阅读 · 2017年11月11日
卷积神经网络(CNN)学习笔记1:基础入门
黑龙江大学自然语言处理实验室
14+阅读 · 2016年6月16日
Attend More Times for Image Captioning
Arxiv
6+阅读 · 2018年12月8日
Arxiv
15+阅读 · 2018年2月4日
Arxiv
5+阅读 · 2017年12月29日
VIP会员
相关资讯
赛尔笔记 | 自然语言处理中的迁移学习(下)
AI科技评论
11+阅读 · 2019年10月21日
【论文笔记】基于LSTM的问答对排序
专知
12+阅读 · 2019年9月7日
赛尔笔记 | BiLSTM介绍及代码实现
哈工大SCIR
23+阅读 · 2018年10月24日
【干货】使用Pytorch实现卷积神经网络
专知
13+阅读 · 2018年5月12日
【CNN】一文读懂卷积神经网络CNN
产业智能官
18+阅读 · 2018年1月2日
循环神经网络的介绍、代码及实现
AI研习社
3+阅读 · 2017年11月21日
tensorflow系列笔记:流程,概念和代码解析
北京思腾合力科技有限公司
30+阅读 · 2017年11月11日
卷积神经网络(CNN)学习笔记1:基础入门
黑龙江大学自然语言处理实验室
14+阅读 · 2016年6月16日
Top
微信扫码咨询专知VIP会员