LSTM_CNN文本分类与tensorflow实现

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的模型代码如下:

import os
import numpy as np
import tensorflow as tf
from eval.evaluate import accuracy
from tensorflow.contrib import slim
from loss.loss import cross_entropy_loss


class LSTM_CNN(object):
    def __init__(self,
                 num_classes,
                 seq_length,
                 vocab_size,
                 embedding_dim,
                 learning_rate,
                 learnin
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值