基于卷积神经网络的中文文本分类

最近工作中一直在用基于CNN的文本分类模型,可平时太忙没时间总结,借此机会把最近的学习经验再梳理一遍。

自然语言处理(NLP)技术已经不断渗透并应用于互联网垂直领域,在诸如文本分类、实体识别、问答系统、翻译系统中扮演着重要角色。深度学习处理自然语言任务可以避免传统算法对特征是重度依赖性,准确度也更高,近来颇受重视。作为深度学习领域两大阵营的CNN和RNN各具特色,一般来说CNN适用于空间任务(如图像),RNN适用于时序任务(如语音),自然语言处理任务一般以文本的形式出现,所以使用RNN较为自然,但有学者做了对比试验发现CNN在一些任务上的表现要比RNN更为出色[1]

各种深度学习模型在NLP中的应用

经对比发现CNN在文本分类上表现良好,又因为RNN模型的训练时间普遍较长,所以使用CNN做文本分类是更明智的选择。用卷积网络做文本分类最著名的模型就是TextCNN[2]. 此模型简单、高效、又能获得很高的准确率,模型结构如下。

TextCNN

1.数据处理

1.1分词

比如“这个地方景色不错,但人也实在太多了”分词之后的结果为'这个,地方,景色,不错, ,但,人,也,实在,太多,了'。

对于中文文本分类,词粒度远好于字粒度。

1.2 WordEmbedding.

分词之后,建立词汇表,每一个词可用索引数字化为one-hot向量,但这样词汇变量维度与词汇量相等,这显然太高且太稀疏了。Word

Embedding可以将词汇向量化为较小的固定的维度,起到降维作用。目前最常用的就是Word2Vec方法,这一步可以单独训练也可以在分类训练过程中不断优化。

2.卷积

卷积运算

经过Embedding的一个句子实际上形成了一个矩阵,比如“这个,地方,景色,不错”可转化为4xn的矩阵,n为Embedding size. 与图像处理的二维卷积不同,文本处理使用一维卷积,因为矩阵的每一行代表一个分词,截断分词没有数学意义,故卷积filter的长度恒等于n.

一维卷积需要多个宽度的filter来获得不同的感受野,如上图右侧方框分别是1xn,2xn,3xn的filter.

3.池化

采用MaxPooling,选取卷积结果计算后的最强特征。池化可自适应输入宽度从而将不同长度的输入转化为统一长度的输出。

4.全连接、分类

经池化后的数据按深度方向拼接成一个向量后提供给全连接层,经softmax激活后输出最终结果。

Ref:

[1] https://arxiv.org/abs/1702.01923

[2] https://arxiv.org/abs/1408.5882

你可能感兴趣的:(基于卷积神经网络的中文文本分类)