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

正文共5260个字,21张图,预计阅读时间28分钟。

Text-CNN转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结。本文介绍NLP中文本分类任务中核心流程进行了系统的介绍,文末给出一个基于Text-CNN模型在搜狗新闻数据集上二分类的Demo。文本分类是自然语言处理领域最活跃的研究方向之一,从样本数据的分类标签是否互斥上来说,可以分为文本多分类与文本多标签分类。

文本分类目前文本分类在工业界的应用场景非常普遍,从新闻的分类、商品评论信息的情感分类到微博信息打标签辅助推荐系统,了解文本分类技术是NLP初学者比较好的切入点,较简单且应用场景高频。

在机器学习领域有一句话:数据决定了模型最终的高度,不断优化的模型只不过是为了不断逼近这个高度而已。文本分类作为一种有监督学习的任务,毫无疑问的需要一个可用于有监督学习的语料集(X,Y)。本文中使用以下标记,X为特征,文本分类中即为文本序列,Y是标签,即文本的分类名称。

机器学习VS传统编程换言之,传统的编程方式输入的是指令代码,而机器学习输入的是结构化数据。因此,在机器学习任务中,数据的质量与数量对最终模型的预测结果好坏具有决定性的作用。常言道:Garbagein,garbageout!在文本分类中,语料集(X,Y)的质量、数量决定了文本分类模型的分类效果。

收藏数据集第一,比赛名次第二......搜狗的新闻语料集:http://www.sogou.com/labs/resource/cs.php文本的预处理,主要针对剔除无意义的符号信息,或其它的冗余信息。例如,在使用爬虫获取的语料集上可能存在一些html的标签,这些符号对于文本分类任务来说应该是冗余的无意义信息,可以剔除掉。

文本预处理推荐阅读:文本的数值化词向量技术文本的数值化,即使用数字代表特定的词汇,因为计算机无法直接处理人类创造的词汇。为了让计算机能够理解词汇,我们需要将词汇信息映射到一个数值化的语义空间中,这个语义空间我们可以称之为词向量空间(词向量模型)。文本的数值化方式有很多种,例如:TF-IDF、BOW、One-Hot、分布式的表示方式(word2vec、Glove)等。

两种模型两种优化方式它的核心优势就是实现了两个词汇信息之间的语义相似度的可计算性,也可以理解为是一种迁移学习的思想,word2vec获取的意义空间信息作为后续文本分类模型的输入。python中使用word2vec工具也是非常的便利,通过pipinstallgensim安装gensim工具包,此包汇总包含了word2vec工具。

词向量以上就是深度学习模型需要的数据格式的核心处理流程,在整个处理过程中样本数据的处理流程如下图所示:

数据处理流程文本分类模型,可以大体上分为基于传统机器学习的文本分类模型,基于深度学习的文本分类模型,目前基于深度学习模型的文本分类模型已经成为了主流,下面基于CNN的文本分类模型。

深度学习的优势文本分类模型,从最经典的2013年Kim提出Text-CNN模型开始,深度学习模型在文本分类任务上具有广泛的应用。2016年Kim跳槽FaceBook后提出了工业界的文本分类模型的“新宠”—FastText。

文本分类模型为了实现文本分类模型,需要借助开源的深度学习框架,这样在开发中就不需要自己从零实现整个深度学习模型的各个功能模块。如果你之前做过JavaWeb开发的话,肯定也使用过SSH或SSM等框架来简化你的开发工作。深度学习框架有很多优秀的框架,我一般使用比较流行的tensorflow计算框架,该框架的使用者比较多,可以查阅的学习资料非常多,Github上的开源代码也比较多,非常有利于我们学习。

tensorflow全家桶文本分类的技术路线【研二时实验室内部的技术分享PPT】:

文本分类技术路线本文选择使用2013年Kim提出的Text-CNN模型作为文本分类模型,通过验证实验以及业界的共识,在文本分类任务中,CNN模型已经能够取到比较好的结果,虽然在某些数据集上效果可能会比RNN稍差一点,但是CNN模型训练的效率更高。所以,一般认为CNN模型在文本分类任务中是兼具效率与质量的理想模型。

Text-CNN模型结构Text-CNN模型的整体网络架构如图所示,如果你学习过CNN或者CNN在图像中的使用,应该很容易就理解,因为该模型就是一个最简单的CNN网络模型。整个模型由四部分构成:输入层、卷积层、池化层、全连接层。

卷积层3.池化层:在Text-CNN模型的池化层中使用了Max-pool(最大值池化),即减少了模型的参数,又保证了在不定长的卷基层的输出上获得一个定长的全连接层的输入。

池化层卷积层与池化层在分类模型的核心作用就是特征提取的功能,从输入的定长文本序列中,利用局部词序信息,提取初级的特征,并组合初级的特征为高级特征,通过卷积与池化操作,省去了传统机器学习中的特征工程的步骤。4.全连接层:全连接层的作用就是分类器,原始的Text-CNN模型使用了只有一层隐藏层的全连接网络,相当于把卷积与池化层提取的特征输入到一个LR分类器中进行分类。

过拟合问题如何防止过拟合?那就是老生常谈的问题了:3、关于模型的上线方案1、基于Java的:

序列标注模型的上线3、基于google官方的tensorflowServing框架:我从搜狗的开源的的新闻数据集(small版)中,选择了两个类别的数据:计算机与交通两个类别,构建了一个中文文本二分类的数据集。搜狗数据集的语料实现文本二分类的Demo代码以及脚本运行的说明放在GitHub中:以上就是简单的介绍了NLP中文本分类所涉及的主要流程,并给出了一个中文文本二分类的Demo代码。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180725A1NOQ200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励