几种使用了CNN(卷积神经网络)的文本分类模型

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

他用的结构比较简单,就是使用长度不同的 filter 对文本矩阵进行卷积,filter的宽度等于词向量的长度,然后使用max-pooling 对每一filter提取的向量进行操作,最后每一个filter对应一个数字,把这些filter拼接起来,就得到了一个表征该句子的向量。最后的预测都是基于该句子的。该模型作为一个经典的模型,作为很多其他改领域论文里实验参照。
2 《A Convolutional Neural Network for Modelling Sentences》(2014 ACL会议)

这个模型看起来就相对复杂一些,不过其基础也是基于卷积的。每一层的卷积操作之后同样会跟上一个max pooling操作。整个模型操作相对于上面的那个模型比较繁琐,同时我有以下几个比较质疑的地方:
1 倒数第二到倒数第三层使用了k-max 的pooling操作,也就是说第三层中相邻的词语对应于原来的句子可能不再是相邻的,而且它们只有相对的先后关系保存了下来。倒数第三层中不同卷积平面对应的词语在原句子中可能处于不同的位置,甚至是不同的词语,因此倒数第三道倒数第四之间的卷积是没有意义的。
2 关于这里的folding操作。把同一个词语向量的不用维度之间进行加法操作,这样原文里是这样解释的“With a folding layer, a feature detector of the i-th order depends now on two rows of feature values in the lower maps of order i -1.”。但是这样的操作有意义吗??从来没有见人提到用过,也许我们未来可以探索一下这样是否能够提高卷积器的性能。
3《A C-LSTM Neural Network for Text Classification》(arXiv preprint arXiv)

其实这篇论文里只是用cnn对原文的词向量以某一长度的filter进行卷积抽象,这样原来的纯粹词向量序列就变成了经过卷积的抽象含义序列。最后对原句子的encoder还是使用lstm,由于使用了抽象的含义向量,因此其分类效果将优于传统的lstm,这里的cnn可以理解为起到了特征提取的作用。
4 《Recurrent Convolutional Neural Networks for Text Classification》(2015 AAAi会议)

正如标题所说的,把lstm和cnn结合起来了,不过这个结合的方式和上面的不一样。举例来说对于词序列: A B C D E F来说,在形成C词的向量化表示的时候,使用的不再仅仅是C的word embedding,而是C左边的内容构成的向量和C以及C右边内容构成的向量的拼接形式。由于使用到了左右两边的内容故使用的是双向的Lstm。然后如图中所示使用1-d convolution的方式得到一系列的y,最后经过max-pooling的方式得到整个句子的向量化表示,最后的预测也是基于该句子的。
5 《Learning text representation using recurrent convolutional neural network with highway layers》(arXiv preprint arXiv)

这个模型几乎就是稍微的更改了一下4中的模型,只不过在C向量拼接完毕将要进行卷积操作之前经过了一个highway而已。(本人对于仅仅加了一个highway就能提高模型准确率的做法感到十分怀疑,毕竟这个网络的层数并不深)

转载自:http://blog.youkuaiyun.com/guoyuhaoaaa/article/details/53188918

### 卷积神经网络 (CNN)文本分类中的实现方法 卷积神经网络(Convolutional Neural Network, CNN)最初被设计用于图像处理任务,但在自然语言处理(Natural Language Processing, NLP)领域中同样表现出了强大的能力。特别是在文本分类任务中,CNN可以通过提取局部特征并组合这些特征来进行高效的模式匹配。 #### 1. 数据预处理 在使用CNN进行文本分类之前,需要对原始文本数据进行一系列的预处理操作。这包括但不限于分词、去除停用词以及将文本转化为数值形式以便输入到模型中。一种常见的做法是将每个单词映射为一个固定长度的向量表示,比如通过Word Embedding技术(如Word2Vec或GloVe)[^1]。 ```python import numpy as np from keras.preprocessing.text import Tokenizer from keras.preprocessing.sequence import pad_sequences tokenizer = Tokenizer(num_words=5000) tokenizer.fit_on_texts(texts) sequences = tokenizer.texts_to_sequences(texts) data = pad_sequences(sequences, maxlen=100) ``` #### 2. 构建CNN模型架构 构建适用于文本分类CNN模型时,通常会包含以下几个部分: - **嵌入层(Embedding Layer)**: 将离散的词语索引转换成密集的实数向量。 - **卷积层(Convolutional Layers)**: 使用不同大小的滤波器捕获n-gram特征。 - **池化层(Pooling Layers)**: 对卷积后的特征图执行降维操作,保留最重要的信息。 - **全连接层(Fully Connected Layers)**: 输出最终预测结果。 下面是一个简单的Keras代码示例展示如何搭建这样的CNN模型: ```python from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten, Conv1D, MaxPooling1D, Embedding model = Sequential() model.add(Embedding(input_dim=5000, output_dim=128, input_length=100)) model.add(Conv1D(filters=64, kernel_size=3, activation='relu')) model.add(MaxPooling1D(pool_size=2)) model.add(Flatten()) model.add(Dense(units=256, activation='relu')) model.add(Dropout(rate=0.5)) model.add(Dense(units=num_classes, activation='softmax')) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) ``` #### 3. 训练与评估模型 完成上述步骤之后就可以开始训练模型了。在此过程中需要注意调整超参数以获得最佳性能,并且要防止过拟合现象的发生。常用的技巧有增加Dropout比例或者采用正则化手段等[^3]。 ```python history = model.fit(data_train, labels_train, epochs=10, batch_size=32, validation_data=(data_test, labels_test)) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值