文本分类-TextCNN
简介
TextCNN模型是由 Yoon Kim提出的Convolutional Naural Networks for Sentence Classification一文中提出的使用卷积神经网络来处理NLP问题的模型.相比较nlp中传统的rnn/lstm等模型,cnn能更加高效的提取重要特征,这些特征在分类中占据着重要位置.论文所提出的模型结构如下图所示:
可以看出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]的矩阵.
卷积层
在该部分使用卷积核对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的第三部分.
全连接层
全连接层就是正常的softmax,输入是池化后的向量,输出维度是我们要分类的类别数,为了防止过拟合,可以加一个l2正则,同时也可以在上述过程后加上dropout.
总结
上本文在搜狗10分类新闻数据集进行测试,只使用了停用词,由于电脑内存不足,所以对文本内容进行了截断,只取了200个单词,所以测试结果可能不是最好的,进行调参或者添加一些其他trick可以使精度更高一些.
Loss
ACC
TextCNN结构简单,精度比较高,只是速度相比没有Fasttext快,模型这种东西,没有绝对的好坏之说,所以根据不同数据集选择不同的模型,也是一门技术.
文本分类-TextCNN的更多相关文章
- 文本分类TextCNN
参考来源:https://blog.csdn.net/u012762419/article/details/79561441 TextCNN结构 TextCNN的结构比较简单,输入数据首先通过一个em ...
- 文本分类实战(二)—— textCNN 模型
1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...
- fastText、TextCNN、TextRNN……这里有一套NLP文本分类深度学习方法库供你选择
https://mp.weixin.qq.com/s/_xILvfEMx3URcB-5C8vfTw 这个库的目的是探索用深度学习进行NLP文本分类的方法. 它具有文本分类的各种基准模型,还支持多标签分 ...
- 文本分类(TFIDF/朴素贝叶斯分类器/TextRNN/TextCNN/TextRCNN/FastText/HAN)
目录 简介 TFIDF 朴素贝叶斯分类器 贝叶斯公式 贝叶斯决策论的理解 极大似然估计 朴素贝叶斯分类器 TextRNN TextCNN TextRCNN FastText HAN Highway N ...
- 基于Text-CNN模型的中文文本分类实战 流川枫 发表于AI星球订阅
Text-CNN 1.文本分类 转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结. 本文介绍NLP中文本分类任务中核心流程进行了系统的介绍,文末给出一个基于T ...
- 基于Text-CNN模型的中文文本分类实战
Text-CNN 1.文本分类 转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结. 本文介绍NLP中文本分类任务中核心流程进行了系统的介绍,文末给出一个基于T ...
- Bert文本分类实践(二):魔改Bert,融合TextCNN的新思路
写在前面 文本分类是nlp中一个非常重要的任务,也是非常适合入坑nlp的第一个完整项目.虽然文本分类看似简单,但里面的门道好多好多,博主水平有限,只能将平时用到的方法和trick在此做个记录和分享 ...
- 文本分类实战(十)—— BERT 预训练模型
1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...
- 文本分类实战(九)—— ELMO 预训练模型
1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...
随机推荐
- JasperReport4.6生成PDF中文
Web项目中PDF显示中文 本人无奈使用JasperReport4.6,因为这本书(好像也是唯一的一本国内的介绍JasperReport的书), 选择"文件"→New命令,弹出一个 ...
- MySQL优化之Explain命令解读
简述: explain为mysql提供语句的执行计划信息.可以应用在select.delete.insert.update和place语句上.explain的执行计划,只是作为语句执行过程的一个参考, ...
- 840. Magic Squares In Grid (5月27日)
开头 这是每周比赛中的第一道题,博主试了好几次坑后才勉强做对了,第二道题写的差不多结果去试时结果比赛已经已经结束了(尴尬),所以今天只记录第一道题吧 题目原文 Magic Squares In Gri ...
- centos7 php7 动态编译mysqlnd: configure: error: Cannot find OpenSSL's <evp.h> 错误解决
开始以为是没有安装openssl, openssl-devel,安装后发现还是提示这个错误,搜索了一下evp.h,这个文件也存在.GOOGLE 了一下,在stackoverflow,找到了答案,原来是 ...
- 基于Bootstrap Ace模板+bootstrap.addtabs.js的菜单
这几天研究了基于bootstrap Ace模板+bootstra.addtabs.js实现菜单的效果 参考了这个人的博客 https://www.cnblogs.com/landeanfen/p/76 ...
- 获取DOM
<template> <div> <header-vue :msg="msg" ref="header">heheh< ...
- 虚拟机下linux 系统网卡配置、固定IP地址
1.进入该目录下修改内容 vi /etc/sysconfig/network-scripts/ ifcfg-eth0 TYPE=Ethernet BOOTPROTO=static DEF ...
- python学习之文件读写入门(文件读的几种方式比较)
1.文件读写简单实例:(以w写的方式打开一个文件,以r读一个文件) # Author : xiajinqi # 文件读写的几种方式 # 文件读写 f = open("D://test.txt ...
- 利用RabbitMQ、MySQL实现超大用户级别的消息在/离线收发
由于RabbitMQ中只有队列(queue)才能存储信息,所以用RabbitMQ实现超大用户级别(百万计)的消息在/离线收发需要对每一个用户创建一个永久队列. 但是RabbitMQ节点内存有限,经测试 ...
- ACM数论-欧几里得与拓展欧几里得
ACM数论——欧几里得与拓展欧几里得 欧几里得算法: 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd ...