文本分类(下) | 卷积神经网络(CNN)在文本分类上的应用

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

正文共3758张图,4张图,预计阅读时间18分钟。


1、简介


原先写过两篇文章,分别介绍了传统机器学习方法在文本分类上的应用以及CNN原理,然后本篇文章结合两篇论文展开,主要讲述下CNN在文本分类上的应用。前面两部分内容主要是来自两位博主的文章(文章中已经给出原文链接),是对两篇论文的解读以及总结,基本上阐释了CNN文本分类模型;后半部分讲一个实例和项目实战。


2、论文1《convolutional neural networks for sentence classification》


640?wx_fmt=png

模型结构

在短文本分析任务中,由于句子句长长度有限、结构紧凑、能够独立表达意思,使得CNN在处理这一类问题上成为可能,主要思想是将ngram模型与卷积操作结合起来。


2.1.输入层


如图所示,输入层是句子中的词语对应的wordvector依次(从上到下)排列的矩阵,假设句子有 n 个词,vector的维数为  k  ,那么这个矩阵就是  n × k 的(在CNN中可以看作一副高度为n、宽度为k的图像)。


这个矩阵的类型可以是静态的(static),也可以是动态的(non static)。静态就是word vector是固定不变的,而动态则是在模型训练过程中,word vector也当做是可优化的参数,通常把反向误差传播导致word vector中值发生变化的这一过程称为Fine tune。(这里如果word vector如果是随机初始化的,不仅训练得到了CNN分类模型,还得到了word2vec这个副产品了,如果已经有训练的word vector,那么其实是一个迁移学习的过程)


对于未登录词的vector,可以用0或者随机小的正数来填充。


2.2.第一层卷积层


输入层通过卷积操作得到若干个Feature Map,卷积窗口的大小为 h ×k ,其中 h  表示纵向词语的个数,而  k  表示word vector的维数。通过这样一个大型的卷积窗口,将得到若干个列数为1的Feature Map。(熟悉NLP中N-GRAM模型的读者应该懂得这个意思)。


2.3.池化层


接下来的池化层,文中用了一种称为Max-over-timePooling的方法。这种方法就是简单地从之前一维的Feature Map中提出最大的值,文中解释最大值代表着最重要的信号。可以看出,这种Pooling方式可以解决可变长度的句子输入问题(因为不管Feature Map中有多少个值,只需要提取其中的最大值)。最终池化层的输出为各个Feature Map的最大值们,即一个一维的向量。


2.4.全连接+softmax层


池化层的一维向量的输出通过全连接的方式,连接一个Softmax层,Softmax层可根据任务的需要设置(通常反映着最终类别上的概率分布)。


2.5.训练方案


在倒数第二层的全连接部分上使用Dropout技术,Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了,它是防止模型过拟合的一种常用的trikc。同时对全连接层上的权值参数给予L2正则化的限制。这样做的好处是防止隐藏层单元自适应(或者对称),从而减轻过拟合的程度。


在样本处理上使用minibatch方式来降低一次模型拟合计算量,使用shuffle_batch的方式来降低各批次输入样本之间的相关性(在机器学习中,如果训练数据之间相关性很大,可能会让结果很差、泛化能力得不到训练、这时通常需要将训练数据打散,称之为shuffle_batch)。


项目代码:CNN_sentence
以上部分内容来自:https://www.cnblogs.com/cl1024cl/p/6205012.html


3、论文2《A Sensitivity analysis of (and practitinoners' guide to convolutional neural networks for sentence classification》


这篇论文主要工作是对“Convolutional Naural Networks for Sentence Classification”这篇论文的模型进行了各种各样的对比试验,并给出了调参的建议,进而得到了一些关于超参数的设置经验。


3.1.调参实验结论:


  • 由于模型训练过程中的随机性因素,如随机初始化的权重参数,mini-batch,随机梯度下降优化算法等,造成模型在数据集上的结果有一定的浮动,如准确率(accuracy)能达到1.5%的浮动,而AUC则有3.4%的浮动;

  • 词向量是使用word2vec还是GloVe,对实验结果有一定的影响,具体哪个更好依赖于任务本身;

  • Filter的大小对模型性能有较大的影响,并且Filter的参数应该是可以更新的;

  • Feature Map的数量也有一定影响,但是需要兼顾模型的训练效率;

  • 1-max pooling的方式已经足够好了,相比于其他的pooling方式而言;

  • 正则化的作用微乎其微。


3.2.建议


  • 使用non-static版本的word2vec或者GloVe要比单纯的one-hot representation取得的效果好得多;

  • 为了找到最优的过滤器(Filter)大小,可以使用线性搜索的方法。通常过滤器的大小范围在1-10之间,当然对- 于长句,使用更大的过滤器也是有必要的;

  • Feature Map的数量在100-600之间;

  • 可以尽量多尝试激活函数,实验发现ReLU和tanh两种激活函数表现较佳;

  • 使用简单的1-max pooling就已经足够了,可以没必要设置太复杂的pooling方式;

  • 当发现增加Feature Map的数量使得模型的性能下降时,可以考虑增大正则的力度,如调高dropout的概率;

  • 为了检验模型的性能水平,多次反复的交叉验证是必要的,这可以确保模型的高性能并不是偶然。


4、一个CNN做文本分类的简单例子

640?wx_fmt=png

I like this movie very much!


我们以上图为例,图上用红色标签标注了5部分,结合这5个标签,具体解释下整个过程的操作,来看看CNN如何解决文本分类问题的。


4.1.#sentence


上图句子为“[I like this movie very much!” ,一共有两个单词加上一个感叹号,关于这个标点符号,不同学者有不同的操作,比如去除标点符号。在这里我们先不去除,那么整个句子有7个词,词向量维度为5,那么整个句子矩阵大小为7x5。


4.2.#filters


filters的区域大小可以使不同的,在这里取(2,3,4)3种大小,每种大小的filter有两个不同的值的filter,所以一共是有6个filter。


4.3.#featuremaps


我们在句子矩阵和过滤器矩阵填入一些值,那么我们可以更好理解卷积计算过程,这和CNN原理那篇文章一样,


640?wx_fmt=png


比如我们取大小为2的filter,最开始与句子矩阵的前两行做乘积相加,得到0.6 x 0.2 + 0.5 x 0.1 + … + 0.1 x 0.1 = 0.51,然后将filter向下移动1个位置得到0.53.最终生成的feature map大小为(7-2+1x1)=6。


为了获得feature map,我们添加一个bias项和一个激活函数,比如Relu。


4.4.#1 max


因为不同大小的filter获取到的feature map大小也不一样,为了解决这个问题,然后添加一层max-pooling,选取一个最大值,相同大小的组合在一起。


4.5.#concat1max


经过max-pooling操作之后,我们将固定长度的向量给sofamax,来预测文本的类别。


5、文本分类实战


下面是利用Keras实现的CNN文本分类部分代码:


 1# 创建tensor
2print("正在创建模型...")
3inputs=Input(shape=(sequence_length,),dtype='int32')embedding=Embedding(input_dim=vocabulary_size,output_dim=embedding_dim,input_length=sequence_length)(inputs)
4reshape=Reshape((sequence_length,embedding_dim,1))(embedding)
5
6# cnn
7conv_0=Conv2D(num_filters,kernel_size=(filter_sizes[0],embedding_dim),padding='valid',kernel_initializer='normal',activation='relu')(reshape)
8conv_1=Conv2D(num_filters,kernel_size=(filter_sizes[1],embedding_dim),padding='valid',kernel_initializer='normal',activation='relu')(reshape)
9conv_2=Conv2D(num_filters,kernel_size=(filter_sizes[2],embedding_dim),padding='valid',kernel_initializer='normal',activation='relu')(reshape)
10
11maxpool_0=MaxPool2D(pool_size=(sequence_length-filter_sizes[0]+1,1),strides=(1,1),padding='valid')(conv_0)
12maxpool_1=MaxPool2D(pool_size=(sequence_length-filter_sizes[1]+1,1),strides=(1,1),padding='valid')(conv_1)
13maxpool_2=MaxPool2D(pool_size=(sequence_length-filter_sizes[2]+1,1),strides=(1,1),padding='valid')(conv_2)
14concatenated_tensor = Concatenate(axis=1)([maxpool_0, maxpool_1, maxpool_2])
15flatten = Flatten()(concatenated_tensor)
16dropout = Dropout(drop)(flatten)
17output = Dense(units=2, activation='softmax')(dropout)
18model=Model(inputs=inputs,outputs=output)


运行结果

英文:


640?wx_fmt=png

准训练结果:验证集76%左右


中文:

640?wx_fmt=png

准训练结果:验证集91%左右


项目地址:

https://github.com/yanqiangmiffy/Text-Classification-Application
6、相关资料


  • 中文文本分类对比(经典方法和CNN) - 简书

  • 文本分类(上)- 基于传统机器学习方法进行文本分类 - 简书

  • CNN在中文文本分类的应用 - 代码王子 - 博客园

  • 卷积神经网络(CNN)在句子建模上的应用 | Jey Zhang

  • Implementing a CNN for Text Classification in TensorFlow – WildML

  • dennybritz/cnn-text-classification-tf: Convolutional Neural Network for Text Classification in Tensorflow

  • Understanding how Convolutional Neural Network (CNN) perform text classification with word embeddings | Joshua Kim

  • CNN用于句子分类时的超参数分析 - CSDN博客


原文链接:https://www.jianshu.com/p/e9108a0f5ac8


查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org


请关注人工智能LeadAI公众号,查看更多专业文章

640?wx_fmt=jpeg

大家都在看

640.png?

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

NLP-使用CNN进行文本分类 CNN最初用于处理图像问题,但是在自然语言处理中,使用CNN进行文本分类也可以取得不错的效果。 在文本中,每个词都可以用一个行向量表示,一句话就可以用一个矩阵来表示,那么处理文本就与处理图像是类似的了。 目录 目录 一、卷积神经网络CNN 1.模型说明 2.卷积核 3.CNN4Text 4.两种参数调整问题 二、使用实例:word2vec+CNN进行文本分类 1.题目 2.数... 阅读详情

相关推荐

CNN文本分类原理讲解与实战

前言 卷积神经网络主要用来做图片分类、目标检测等图像相关的任务,这篇文章介绍了它在NLP中的应用文本分类。本文先介绍了CNN,然后分析了CNN为什么能用在NLP中,最后讲解了Yoon Kim (2014)提出的CNN文本分类模型,代码见github。 什么是卷积 简单介绍一下卷积运算,卷积运算作用就是用滤波器来学习或者检测图片的特征。 看上图,左边是一张5×5的黑白图片,现在是矩阵的形式,每...

huwenxing0801的博客 2万+

基于CNN文本分类

文本内容详细介绍了CNN算法和文本分类的相互关系 我觉得挺好的 希望大家喜欢

文本分类(3)-卷积神经网络CNN)实现文本分类

# cnn实现垃圾邮件分类 import warnings warnings.filterwarnings('ignore') import pandas as pd import warnings import re import matplotlib.pyplot as plt from nltk.stem import WordNetLemmatizer from nltk.corpus ...

weixin_44766179的博客 9881

深度学习之----TextCNN文本分类

1.卷积神经网络 英文名称:(Convolutional Neural Network),简称CNN。由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT-CONV-RELU-POOL-FC。是深度学习技术中极具代表的网络结构之一,最早应用在图像处理当中,现在在自然语言处理应用也非常多。 卷积神经网络示意图 2.构成部分 主要由5个部分组成:输入层,卷积层,激活层,池化层...

zaishijizhidian的博客 4098

文本分类()-卷积神经网络(CNN)文本分类上的应用

1 简介 原先写过两篇文章,分别介绍了传统机器学习方法在文本分类上的应用以及CNN原理,然后本篇文章结合两篇论文展开,主要讲述下CNN文本分类上的应用。前面两部分内容主要是来自两位博主的文章(文章中已经给出原文链接),是对两篇论文的解读以及总结,基本上阐释了CNN文本分类模型;后半部分讲一个实例和项目实战 2 论文1《Convolutional Neural Networks for Sente...

weixin_33918357的博客 1672

【NLP傻瓜式教程】手把手带你CNN文本分类(附代码)

文章来源于NewBeeNLP,作者kaiyuan写在前面本文是对经典论文《Convolutional Neural Networks for Sentence Classificatio...

fengdu78的博客 8602

自然语言处理之情感分析:卷积神经网络(CNN)文本分类中的应用

卷积神经网络(Convolutional Neural Networks, CNN)最初是为图像处理设计的,但近年来,CNN也被成功应用文本处理,包括情感分析。CNN能够捕捉文本中的局部特征和模式,这对于理解文本的情感倾向非常有用。在情感分析领域,使用CNN进行文本分类是一种常见且有效的方法。本案例将使用IMDB电影评论数据集,该数据集包含50,000条电影评论,其中25,000条用于训练,另外25,000条用于测试。每条评论被标记为正面或负面情感。

zhubeibei168的博客 1419

自然语言处理之文本分类:Convolutional Neural Networks(CNN):多通道卷积网络在NLP中的应用

文本分类是NLP中的一个经典问题,其目标是根据文本的内容将其自动分类到一个或多个预定义的类别中。文本分类可以分为监督学习和无监督学习两种类型,其中监督学习是最常见的方法,它需要一个带有标签的训练数据集来学习分类模型。文本分类在信息过滤、情感分析、主题建模和文档检索等领域有着广泛的应用。局部相关性:CNN能够捕捉文本中的局部特征,如短语和词组,这对于理解句子结构和语义至关重要。并行处理:卷积操作可以并行化,这使得CNN在处理大量文本数据时效率较高。特征学习。

zhubeibei168的博客 1124

CNN文本分类应用(内有代码实现) 论文Convolutional Neural Networks for Sentence Classification

一、CNN文本分类简介 文本分类是NLP领域的一个重要子任务,文本分类的目标是自动的将文本打上已经定义好的标签,常见的文本分类任务有: 用户评论的情感识别 垃圾邮件过滤 用户查询意图识别 新闻分类 由此看出文本分类的用途十分之广,包括知识图谱领域的关系抽取任务也是使用文本分类实现的。 有很多经典的统计学习方法可以用来做文本分类,比如SVM,LR,MaxEnt等等。这些方法的一般流程是标...

u010960155的博客 1万+

CNN文本分类中的应用

CNN文本分类中的应用 参考了:https://www.kesci.com/home/project/5d15a8fe708b90002c6c368c?tdsourcetag=s_pcqq_aiomsg 和https://blog.csdn.net/u012808902/article/details/81155509 援引论文《Convolutional Neural Networks for...

qq_43012160的博客 1173

卷积神经网络CNN)在TensorFlow文本分类中的应用

好文推荐 卷积神经网络CNN)在TensorFlow文本分类中的应用 英文原版 Implementing a CNN for Text Classification in TensorFlow github源码 cnn-text-classification-tf

liuzh的博客 414

文本分类中的卷积神经网络CNN)的应用

谈到文本分类,就不得不谈谈CNN(Convolutional Neural Networks)。这个经典的结构在文本分类中取得了不俗的结果,而运用在这里的卷积可以分为1d 、2d甚至是3d的。 下面就列举了几篇运用CNN进行文本分类的论文作为总结。1 yoon kim 的《Convolutional Neural Networks for Sentence Classification》。(201...

Jasminexjf的博客 1383

使用CNN卷积神经网络进行情感分析

说先看一下这个图,它大体介绍了CNN的自然语言处理流程: 1.首先每个单词对应一行,d=5表示分了5个维度,一般是分128维,300维之类的,这里为了方便,用d=5。 这样的话矩阵就是7*5 2.然后第一步进行卷积的操作,分别使用了四行的卷积核两个,三行的卷积核两个,两行的卷积核两个。然后分别对7*5的矩阵进行卷积,对于7*5的话,4*5放上去可以向下移动4次,所以产生了4*1矩阵(fe...

lyy的博客 7992

卷积神经网络CNN)在TensorFlow文本分类中的应用Implementing a CNN for Text Classification in TensorFlow

翻译自http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/ Implementing a CNN for Text Classification in TensorFlow 代码见GitHubThe full code is available on Github.

MOLLMY的专栏 2340

理解NLP中的卷积神经网络CNN

一、理解NLP中的卷积神经网络CNN)现在当我们听到神经网络(CNN)的时候,一般都会想到它在计算机视觉上的应用,尤其是CNN使图像分类取得了巨大突破,而且从Facebook的图像自动标注到自动驾驶汽车系统,CNN已经成为了核心。最近,将CNN应用于NLP也发现了一些有趣的结果。所以在这篇文章中,主要回答一下两个问题:1,什么是CNN?2,CNN如何应用到NLP中?1.什么是卷积?让我们先从图像...

weixin_42099595的博客 1万+

12、卷积神经网络及其在文本分类中的应用

本文详细介绍了卷积神经网络CNN)的基本概念、工作原理及其在文本分类中的具体应用。通过结合文本卷积和文本池化的实现细节,以及优化策略如注意力机制、预训练词向量和多任务学习,展示了如何有效提升文本分类的效果。

k8s6orchestrator的博客 131

自然语言处理之文本分类使用卷积神经网络(CNN)进行新闻分类实战

卷积神经网络(CNN)最初是为图像处理设计的,但近年来也被广泛应用于自然语言处理任务,如文本分类CNN通过卷积层来捕捉局部特征,池化层来减少维度,全连接层来进行分类。在文本分类中,CNN可以捕捉到词的局部组合特征,如短语或句子结构。新闻数据集是文本分类任务中常用的资源,通常包含多个类别的新闻文章。例如,一个数据集可能包括体育、科技、娱乐、政治等不同类别的新闻。这些数据集对于训练和评估自然语言处理模型至关重要,尤其是基于CNN文本分类模型。模型评估与结果分析是NLP项目中不可或缺的环节。

zhubeibei168的博客 852

自然语言处理之文本分类卷积神经网络CNN)概论

卷积神经网络(Convolutional Neural Networks, CNN)最初是为图像处理设计的,其在图像识别、图像分类、目标检测等领域取得了显著的成果。CNN能够自动学习图像的特征,通过多层的卷积和池化操作,从原始像素中提取出对图像分类有用的信息。

zhubeibei168的博客 1175
上一篇: PageRank算法原理与实现
下一篇: 命名实体识别 | NLP系列学习
LeadAI学院
博客等级 码龄9年 701粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值