当前位置:   article > 正文

LSTM_CNN文本分类与tensorflow实现_lstm-cnn

lstm-cnn

1. 引言

    前面我们介绍了RNN、CNN等文本分类模型,并在情感分析任务上都取得了不错的成绩,那有没有想过将RNN、CNN两者进行融合呢?答案肯定是有的!这次,我们将介绍一个将LSTM和CNN进行融合的文本分类模型,该模型同时兼具了RNN和CNN的优点,在很多文本分类任务上直接超过了RNN和CNN单个模型的效果。论文的下载地址如下:

    下面我们将对该模型的结构进行具体介绍,并用tensorflow来实现它。 

2. LSTM_CNN模型介绍

    作者在原论文中其实提出了两种类型的结构,一种是CNN_LSTM,一种是LSTM_CNN,但是作者发现CNN_LSTM的效果不如LSTM_CNN,这可能是因为先用CNN层的话,会使得句子中的序列信息丢失,这时,后面尽管再使用LSTM层,其实也没法充分发挥LSTM的序列编码能力,从而导致模型的效果相对比较一般,因此,这里我们不对CNN_LSTM的进行介绍,感兴趣的读者可以直接查看原论文。

    如图1所示,LSTM_CNN的模型结构其实也很简单,就是在TextCNN模型结构的基础上,在embedding层与CNN层之间再插入一层LSTM层,其原理就是对于句子中的词汇特征向量,先经过LSTM层进行编码,这样一来,每个时间步的输出不仅包括了当前词汇的特征向量信息,也包括了该词汇之前所有词汇的特征信息,使得每个时间步的特征向量能够包含更多的信息,接着,把每个时间步的输出向量当做TextCNN中的embedding层,后面的计算就跟TextCNN完全一模一样了,如果对TextCNN模型不了解的读者可以查看我之前的文章《TextCNN文本分类与tensorflow实现》,这里就不再赘述了。

图1 LSTM_CNN模型结构

3. LSTM_CNN模型的tensorflow实现

    接下来,利用tensorflow框架来实现LSTM_CNN模型。同样的,为了便于对比各个模型的预测效果,本文的数据集还是采用之前的文章《FastText文本分类与tensorflow实现》中提到的数据集,LSTM_CNN的模型代码如下:

  1. import os
  2. import numpy as np
  3. import tensorflow as tf
  4. from eval.evaluate import accuracy
  5. from tensorflow.contrib import slim
  6. from loss.loss import cross_entropy_loss
  7. class LSTM_CNN(object):
  8. def __init__(self,
  9. num_classes,
  10. seq_length,
  11. vocab_size,
  12. embedding_dim,
  13. learning_rate,
  14. learnin
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/1015714
推荐阅读
相关标签
  

闽ICP备14008679号