简介

TextCNN模型是由 Yoon Kim提出的Convolutional Naural Networks for Sentence Classification一文中提出的使用卷积神经网络来处理NLP问题的模型.相比较nlp中传统的rnn/lstm等模型,cnn能更加高效的提取重要特征,这些特征在分类中占据着重要位置.论文所提出的模型结构如下图所示:

图1

可以看出TextCNN的结构还是比较简单的,下面我们分块介绍一下TextCNN.

输入层

首先是输入层,输入跟大多数深度学习在nlp方面的处理一样,需要将文本转换成词索引,每个句子是一个向量,向量中每个元素代表这该词在词典中的词索引.其中词向量矩阵embedding可以在该模型中一起训练,也可以使用word2vec或者其他框架预训练好的词向量,然后在模型训练过程中进行Fine tune.这也就是上图中第一部份会有两个channel,一个non-static channels是表示词向量随着模型一起训练,static channels是表示使用预训练的词向量.而实验表明,在数据量小的情况下,使用non-static channels容易引起过拟合.

这部分的变量维度分别是:输入-[batch_size,sentence_length],词向量矩阵-[vocab_size,embedding_size],经过embedding处理后输出embedded-[batch_size,sentence_length,embedding_size],也就是图1中第一部分显示的内容.下面就要使用卷积操作进行处理了,但是卷积操作是四维的,除了embedded的三维之外,还有channels(在图像处理中,最后一维是三通道的颜色编码,但是在文本处理中该维值是1).所以在使用卷积处理前需要把embedded进行扩维处理.经过扩维处理后embedded变成了[batch_size,sentence_length,embedding_size,1]的矩阵.

图2

卷积层

在该部分使用卷积核对embedded做卷积处理,在论文中卷积核的size取了三个[2,3,4],这对应着n-gram模型,使得特征信息包含临近词信息,这里就不在过深说明,详细内容可以去看n-gram语言模型.如果卷积核的size为[2,3,4],那么就有三种卷积核,其中size为2的卷积核的shape是[2,embedding_size,1,num_filter],其他类似,其中num_filter代表着卷积核的数量,是超参数.这样我们以1的步长去进行卷积,会得到size_len*num_filter个列向量,其中size_len是size的种类数,这里是3个size.对应着图1中的第二部分.这部分的作用是提取了语义信息,其中包括n-gram模型.同时因为卷积操作的特点参数共享,所以可以减少了大部分参数,节约内存使用.

池化层

文中提到的pooling操作是max_pooling,就是将列向量中最大值取出来,对输入补0做过滤(有兴趣的朋友也可以试试平均池化,看看结果有神马不同),池化操作是对整个向量,所以它的shape是[1,sentence_length-size+1,1,1],其中sentence_length-size+1是上文提到的经过卷积处理后得到的列向量长度.然后对卷积得到的每个列向量进行池化操作后,会得到size_len*num_filter个元素,将他们合并在一起形成一个size_len*num_filter维的向量.也就是图1的第三部分.

图3

全连接层

全连接层就是正常的softmax,输入是池化后的向量,输出维度是我们要分类的类别数,为了防止过拟合,可以加一个l2正则,同时也可以在上述过程后加上dropout.

图4

总结

上本文在搜狗10分类新闻数据集进行测试,只使用了停用词,由于电脑内存不足,所以对文本内容进行了截断,只取了200个单词,所以测试结果可能不是最好的,进行调参或者添加一些其他trick可以使精度更高一些.

图5

Loss

图6

ACC

图7

TextCNN结构简单,精度比较高,只是速度相比没有Fasttext快,模型这种东西,没有绝对的好坏之说,所以根据不同数据集选择不同的模型,也是一门技术.

文本分类-TextCNN的更多相关文章

  1. 文本分类TextCNN

    参考来源:https://blog.csdn.net/u012762419/article/details/79561441 TextCNN结构 TextCNN的结构比较简单,输入数据首先通过一个em ...

  2. 文本分类实战(二)—— textCNN 模型

    1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...

  3. fastText、TextCNN、TextRNN……这里有一套NLP文本分类深度学习方法库供你选择

    https://mp.weixin.qq.com/s/_xILvfEMx3URcB-5C8vfTw 这个库的目的是探索用深度学习进行NLP文本分类的方法. 它具有文本分类的各种基准模型,还支持多标签分 ...

  4. 文本分类(TFIDF/朴素贝叶斯分类器/TextRNN/TextCNN/TextRCNN/FastText/HAN)

    目录 简介 TFIDF 朴素贝叶斯分类器 贝叶斯公式 贝叶斯决策论的理解 极大似然估计 朴素贝叶斯分类器 TextRNN TextCNN TextRCNN FastText HAN Highway N ...

  5. 基于Text-CNN模型的中文文本分类实战 流川枫 发表于AI星球订阅

    Text-CNN 1.文本分类 转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结. 本文介绍NLP中文本分类任务中核心流程进行了系统的介绍,文末给出一个基于T ...

  6. 基于Text-CNN模型的中文文本分类实战

    Text-CNN 1.文本分类 转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结. 本文介绍NLP中文本分类任务中核心流程进行了系统的介绍,文末给出一个基于T ...

  7. Bert文本分类实践(二):魔改Bert,融合TextCNN的新思路

    写在前面 ​ 文本分类是nlp中一个非常重要的任务,也是非常适合入坑nlp的第一个完整项目.虽然文本分类看似简单,但里面的门道好多好多,博主水平有限,只能将平时用到的方法和trick在此做个记录和分享 ...

  8. 文本分类实战(十)—— BERT 预训练模型

    1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...

  9. 文本分类实战(九)—— ELMO 预训练模型

    1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...

随机推荐

  1. Oracle查找lobsegment、lobindex对应的表

    在查看表空间的使用情况的时候,发现有几个LOBSEGMENT.LOBINDEX类型的对象占用了大量的空间.于是想找出那些表占用了大量的空间,以便于清理.        Oracle对BLOB类型的定义 ...

  2. 多用户OFDM系统资源分配研究

    首先,OFDMA 是什么? OFDM 技术的基本原理是将无线信道划分为若干互相正交的子信道,把高速串行数据流转化为低速并行子数据流,低速并行子数据流在子信道上独立传输. OFDMA 是LTE的下行多址 ...

  3. canvas之背景特效

    需具备js基础知识以及canvas相关方法(可查阅相关文档) 下面是一篇有关js与canvas的背景特效 基于面向过程的思维 <!DOCTYPE html> <html> &l ...

  4. 新人成长之入门Vue.js常用指令介绍(一)

    写在前面 作为一个刚步入职场工作的新人,对于公司中所用的技术和框架基本上不懂,只能从最基础的开始做起,进入公司接触的第一个框架就是前端框架Vue.js,几个功能做下来,觉得Vue.js首先学习起来真的 ...

  5. core dump文件分析和调试

    core介绍 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成"核心转储").我们可以认 ...

  6. gmtime与mktime的重新编写

    这几日发现Linux的mktime与gmtime所处理的数据类型是32位的,即代表时间设置只能设置到2038年,在公司的产品要实现这个时间的突破还是得自己写一个新的处理时间的函数. 作为一个刚毕业的程 ...

  7. 结合《需求征集系统》谈MVC框架

    结合<需求征集系统>分析MVC框架. 六个质量属性: 可用性:在系统压力过大时,会提示系统繁忙. 可修改性:使用配置文件,修改配置文件即可.对于一些公共的方法,进行封装,修改时,只需修改封 ...

  8. BZOJ1968_COMMON约数研究_KEY

    题目传送门 BZOJ水题,for i=1~N,答案加上N/i即可 ANS=∑N/i(i∈{1~N}) code: /****************************************** ...

  9. 成都Uber优步司机奖励政策(1月7日)

    1月7日 奖励政策 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblog ...

  10. Java:多线程中的volatile

    一.为什么使用volatile 首先,通过一段简单的代码来理解为什么要使用volatile: public class RunThread extends Thread{ private boolea ...