文本分类之TextRNN

  1. TextRNN

     文本分类任务中,CNN可以用来提取句子中类似N-Gram的关键信息,适合短句子文本。TextRNN擅长捕获更长的序列信息。具体到文本分类任务中,从某种意义上可以理解为可以捕获变长、单向的N-Gram信息(Bi-LSTM可以是双向)。普通RNN在处理较长文本时会出现梯度消失问题,因此文本中RNN选用LSTM进行实验。

  2. 模型:

    image.png

  3. 实验代码

    image.png

  4. 模型说明

输入层:和TextCNN一样,输入层也是将每个词从onehot类型embedding成稠密的词向量,句子的词语个数设400,每个词语50维的embedding维度。对于不同长度的问题文本,pad和截断成一样长度的。太短的就补空格,太长的就截断。

LSTM层:LSTM层中,设定输出的维度为128维向量,LSTM其实对每个词语都会有一个隐向量,这里是用最后一个词语ht作为最终使用的隐向量,可以看做是包含了前面所有词语的信息(LSTM层默认就是输出最后一个词语的隐向量,如果要使用其他词语的隐向量,需要设定return_sequences=Ture),因此该层输出是128维向量

全连接层:输出层与TextCNN相同,使用全连接层,使用softmax作为激活函数进行输出。

Bi-LSTM:Bi-LSTM是LSTM的改进版本,将单向RNN结构改成了双向RNN,希望不仅能考虑正向编码的信息,也能考虑反向编码的信息。双向LSTM的代码实现只需要在lstm代码块中添加bidirectional=True。

Bi-LSTM层中,内部有两个LSTM,分别为Forward层和Backward层,表示前向与后向,每个LSTM设定输出的维度为256维向量,在Forward层从1时刻到t时刻正向计算一遍,得到并保存每个时刻向前隐含层的输出。在Backward层沿着时刻t到时刻1反向计算一遍,得到并保存每个时刻向后隐含层的输出。最后在每个时刻结合Forward层和Backward层的相应时刻输出的结果进行拼接得到最终的输出。因此输出的维度为512维。

image.png

相关论文

Recurrent Neural Network for Text Classification with Multi-Task Learning

A Bi-LSTM-RNN Model for Relation Classification Using Low-Cost Sequence Features


            
            

本博客源码Github地址:

https://github.com/zeus-y/

请随手给个star,谢谢!

打赏

评论