简介

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. NodeJ Koa2 安装使用 reeber

    介绍 Koa 是由 Express 原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的 Web 框架. 使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的 ...

  2. BufPay.com 个人收款接口 接入步骤

    作为独立开发者产品需要收款是非常麻烦的,注册公司维护成本太高,市面上各种收款工具要么手续费太高,要么到账很慢,体验很不好. 看到 「BufPay.com 个人收款」 这个收款工具,挺有意思的.原理是监 ...

  3. About Me - 关于

    0x00 简介 97年生 计算机相关专业,无线电安全攻防方向. 涉猎较多,喜欢研究无线.硬件.软件.网络.攻击.检测.防御等各类安全技术 精通较少,主要擅长的还是硬件.渗透.无线攻击方面. 现阶段在研 ...

  4. Mac连接Linux服务器

    1.终端命令 a).打开Mac的命令终端 b).输入ssh -p 22 root@101.200.86.233 它会提示你输入密码,输入正确的密码之后,你就发现已经登陆成功了.(22: 端口号 roo ...

  5. iOS 12 真机调试 Xcode 9 提示 Could not locate device support files.

    升级 iOS 12 之后,使用 Xcode 9 真机调试会提示错误: Could not locate device support files. This iPhone 6 Plus is runn ...

  6. Elasticsearch 索引操作

    一.创建 语法: PUT /索引库名称 { "settings": { "number_of_shards": 分片数量, "number_of_re ...

  7. 【Hadoop故障处理】高可用(HA)环境DataNode问题

    [故障背景] NameNode和DataNode进程正常运行,但是网页找不到DataNode,DataNode为空.各个节点机器之间可以ping同主机名. [日志排查] 众多日志中找到如下关键点错误信 ...

  8. WIN10下WNMP开发环境部署

    刚刚开始学习PHP时,一直使用phpstudy,后面发现很多东西自己单独配置安装会理解更深刻,所以自己总结了一下windows下开发环境的部署教程. 以前经常在CSDN和博客园看别人的教程,今天才注册 ...

  9. python学习笔记:第21天 常用内置模块之collections和time

    目录 一.collections模块 二.时间模块 也可以在我的个人博客上阅读 一.collections模块 1. Counter Counter是⼀个计数器,主要⽤统计字符的数量,之前如果我们要统 ...

  10. [原创]用python检测LVS real server状态实现HTTP高可用

    import httplib import os import time def check_http(i): try: conn=httplib.HTTPConnection(i, 80, time ...