自然语言处理 | (23) 基于RCNN的文本分类原理

目录

1.文本分类任务介绍

2.RCNN原理概述

3.RCNN模型处理步骤

4.RCNN小结


1.文本分类任务介绍

文本分类是自然语言处理的一个基本任务,试图推断出给定文本(句子、文档等)的标签或标签集合。

文本分类的应用非常广泛,如:

  • 垃圾邮件分类:2分类问题,判断邮件是否为垃圾邮件
  • 情感分析:2分类问题:判断文本情感是积极还是消极;多分类问题:判断文本情感属于{非常消极,消极,中立,积极,非常积极}中的哪一类。
  • 新闻主题分类:判断一段新闻属于哪个类别,如财经、体育、娱乐等。根据类别标签的数量,可以是2分类也可以是多分类。
  • 自动问答系统中的问句分类
  • 社区问答系统中的问题分类:多标签多分类(对一段文本进行多分类,该文本可能有多个标签),如知乎看山杯
  • 让AI做法官:基于案件事实描述文本的罚金等级分类(多分类)和法条分类(多标签多分类)
  • 判断新闻是否为机器人所写:2分类

不同类型的文本分类往往有不同的评价指标:

  • 2分类:accuracy,precision,recall,f1-score...
  • 多分类(单标签多分类):Micro-Averaged-F1,Macro-Averaged-F1...
  • 多标签多分类:Jaccard相似系数...

 

2.RCNN原理概述

在之前的博客中,我们学习了基于CNN和RNN的文本分类原理。RCNN是一种结合了RNN和CNN的模型用于文本分类。

这里的文本一般包含若干句子,因此每段文本的长度都不尽相同。在对文本进行分类时,我们一般会指定一个固定的输入序列/文本长度:该长度可以是最长文本/序列的长度,此时其他所有文本/序列都要进行填充以达到该长度;该长度也可以是训练集中所有文本/序列长度的均值,此时对于过长的文本/序列需要进行截断,过短的文本则进行填充。总之,要使得训练集中所有的文本/序列长度相同,该长度除之前提到的设置外,也可以是其他任意合理的数值。在测试时,也需要对测试集中的文本/序列做同样的处理。

假设训练集中所有文本/序列的长度统一为n,我们需要对文本进行分词,并使用词嵌入得到每个词固定维度的向量表示。在RCNN中,我们不仅要考虑每个词的词向量还要考虑该词上下文的向量表示,三者共同构成该词最终的嵌入表示,作为CNN卷积层的输入。接下来我们具体如何操作。

 

3.RCNN模型处理步骤

  • RCNN模型图解

上图中中间是输入序列中每个单词的嵌入表示,左右使用双向RNN分别学习当前词w_{i}的左上下文表示cl(w_{i})和右上下文表示cr(w_{i}),在与当前词w_{i}本身的词向量连接,构成后续卷积层的输入x_{i}。具体如下:

与TextCNN比较类似,都是把文本表示为一个嵌入矩阵,再进行卷积操作。不同的是TextCNN中的文本嵌入矩阵每一行只是文本中一个词的向量表示,而在RCNN中,文本嵌入矩阵的每一行是当前词的词向量以及上下文嵌入表示的拼接。

例如:上图中的along这一个单词,中间是他的词向量,左边利用一个RNN得到along之前上文所有单词的嵌入表示(当前时间步骤上RNN的隐藏状态),右边同样利用一个反向的RNN得到along之后所有单词的嵌入表示(当前时间步骤上RNN的隐藏状态)。三者共同构成along的嵌入表示,文本中的其他词同理。最后文本被表示为上图左边的一个嵌入矩阵。

然后将x_{i}作为当前词w_{i}的嵌入表示,输入到卷积核大小为1*d(d为x_{i}的长度)激活函数为tanh的卷积层,得到w_{i}潜在的语义向量:

在TextCNN中我们曾经设置了多个卷积核f*d,RCNN中将卷积核大小设置为1*d的原因是x_{i}中已经包含了w_{i}左右上下文的信息,无需再使用窗口大于1的卷积核进行特征提取。需要说明的是,实践中依然可以同时使用多个不同大小的卷积核,如[1,2,3],可能会取得更好的实践效果,一种解释是窗口大于1的卷积核强化了w_{i}左右最近的上下文信息。此外实践中一般使用更复杂的RNN来捕捉w_{i}的上下文信息,如LSTM和GRU等。

 

再经过卷积层以后,获得了文本中所有词的语义表示y_{i}^{(2)},然后经过一个max-pooling层和softmax层(输出层使用softmax激活函数)进行分类:

 

4.RCNN小结

  • 在RCNN论文的所有实验上,神经网络比传统方法效果好
  • 基于CNN的方法比基于RNN的方法好
  • RCNN可以捕获更长的模式
  • 在RCNN论文的使用实验数据集上,RCNN比CNN好
  • CNN使用固定词窗口(捕获上下文信息),实验结果受窗口大小的影响;RCNN使用循环结构捕获广泛的上下文信息。

但是在实际应用中,CNN的效果已经足够好了,RCNN未必能有比CNN更好的效果,而且CNN的训练速度更快,可以尝试多种方法,找一个效果最好的。

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/sdu_hao/article/details/88099535