参考链接:
- https://www.cnblogs.com/mantch/p/11416104.html
- https://blog.csdn.net/Torero_lch/article/details/82588732
什么是textRNN
textRNN指的是利用RNN循环神经网络解决文本分类问题,文本分类是自然语言处理的一个基本任务,试图推断出给定文本(句子、文档等)的标签或标签集合。比如情感分析、新闻主题分类、虚假新闻检测等。
textRNN的结构
基于RNN的文本分类模型非常灵活,有多种多样的结构。另外,普通RNN在处理较长文本时会出现梯度消失问题,因此实际上常用LSTM或GRU。
第一种结构
x–>embedding–>BiLSTM–>concat layer—>softmax layer–>y
注:
1.单词的embedding可以是随机初始化,也可以使用预训练模型的embedding(如Word2vec、GloVe),后者效果较好。
2.最后拼接初始时间步和最终时间步的隐藏状态作为全连接层输入。
第二种结构
x–>embedding–>BiLSTM–>concat layer—>LSTM–>softmax layer–>y
与之前结构不同的是,在双向LSTM的基础上又堆叠了一个单向的LSTM。把双向LSTM在每一个时间步长上的两个隐藏状态进行拼接,作为上层单向LSTM每一个时间步长上的一个输入,最后取上层单向LSTM最后一个时间步长上的隐藏状态,再经过一个softmax层得到分类结果。
textRNN vs textCNN
1.尽管TextCNN能够在很多任务里面能有不错的表现,但CNN有个最大问题是固定filter的视野,一方面无法建模更长的序列信息,另一方面filter的超参调节也很繁琐。CNN本质是做文本的特征表达工作,而自然语言处理中更常用的是RNN,能够更好的表达上下文信息,尤其是RNN的一些变种,如LSTM(更常用),GRU。
2.文本分类任务中,CNN可以用来提取句子中类似N-gram的关键信息,适合短句子文本。TextRNN擅长捕获更长的序列信息。具体到文本分类任务中,常用的Bi-directional RNN(实际使用的是双向LSTM)从某种意义上可以理解为可以捕获变长且双向的的N-gram信息。
3.RNN模型在运行速度上丝毫不占优势,后一个时间步的输出依赖于前一个时间步的输出,无法进行并行处理,导致模型训练的速度慢,比CNN模型要慢几倍到十几倍,这是一个致命的弱点。而RNN模型引以为傲的能够捕获序列中的长距离依赖关系,只需要通过构建更深层的卷积层也可实现。如下图所示,更深层的卷积层可以捕获更长的序列信息。
TextRCNN(TextRNN + CNN)
可以先利用双向RNN得到每个词的前向和后向上下文的表示,这样词的表示就变成词向量和前向后向上下文向量拼接起来的形式了,最后再接跟TextCNN相同卷积层,池化层即可。示意图如下:
论文链接
《Recurrent Convolutional Neural Networks for Text Classification》