循环神经网络在文本处理中的应用

前言

前几篇文章介绍了卷积神经网络,但是在另一个大的领域,在文本领域,也可以说是自然语言领域,卷积神经网络效果就不是很好了。这里介绍下循环神经网络

肯定有人会不理解,不是有卷积神经网络吗?为啥还要有循环神经网络。继续往下看。

可变长度的单词序列

对于文本跟图像领域有什么不同?对于图片而言,我们完全可以把它弄成固定长宽高的一个输入,但是对文本我们经常做不到这点。比如说留言,每个人说的话长度都不一样,对于这种长度和大小有明显的区别的,对于卷积神经网络来说就很难处理的。还有一点就是对于文本来说词的顺序是非常重要的,我们传统来表示一个文本,我们通常用磁带模型,就是会这段文本看成一个词放到一个袋子里,不考虑里边词的顺序,但是实际情况下词的顺序是非常重要的,怎么把文字顺序,也就是上下文顺序问题处理好。

词的排序很重要

我们对于词序列是逐个输入的,输出是由两个部分组成,对于这个词我们预测的结果,这个是正常的输入和输出,还有就是状态,有了这个状态我们才能循环继续下去,这个状态存的就是之前你这个词序列的信息存起来都会往下传播,也就是上面的状态会作为下一个词输入的一部分,这样的话是一个循环的过程,直到文本这段词序列都遍历完,它是一个循环递归的过程,直到所有的词序列都训练完,这样就不需要固定一个长度,这个文本中词多的话多遍历几次,少的话少遍历几次,就可以得到结果。

循环神经网络在文本处理中的应用

这个是模型的示意图,下面是输入上面是输出,和其他不一样的就是多了循环这个部分,中间状态也会作为一个输出,输入到下一个输入里边。

这部分是循环神经网络的核心。

循环神经网络在文本处理中的应用

把刚才的图展开,可以看成一个序列,每次一个一个输入,上面是输出,中间状态会作为下一个的输入。

循环神经网络在文本处理中的应用

循环神经网络在文本处理中的应用

举一个具体的栗子,现在要对一个文本判断情感倾向,积极的还是消极的,用正负号表示。具体流程看图,我们要在这里说的是,现在输入的只有4个词,不管是多少个词,也是这套流程,往下循环就行了,为什么呢?因为是共享这些参数的,每次循环每次迭代都是用的一套参数,所以说不用根据词的多少改变这个参数,所以说输入是可变的。

数学细节

循环神经网络在文本处理中的应用

前面的参数是上文图片中的那些参数,可以翻上去看下,这个就是在数学层面的理解。

有的文本分析需要得到每个词的情感状态,有的只需要关注整个句子的情感状态。

换言之:

  • 当前状态=function1(旧状态,当前输入)

  • 当前输入=function2(当前状态)

  • 我们通过训练网络来学习function1和function2

实践细节

通常我们只训练“最终”输出,忽略中间输出;

称为时序后向传播(BPTT)的轻微变化用于训练循环神经网络;

对序列长度敏感(由于梯度消失/爆炸问题)

实际上,我们仍为序列设置最大长度

  •     如果输入短于最大长度,我们将填充

  •     如果输入长于最大长度,我们将截断

这样可以批处理,并行处理好多数据,充分发挥GPU的性能。

其他用途

只要数据或者问题是序列问题都可以尝试使用循环神经网络思想去建模。

比如:

  • 时间序列数据;

  • 语音识别;

  • 传感器数据;

  • 基因组序列;

缺点

前面说的每层的输出状态可以往下传递,但是这都是存在理论上的,实际上只能记住距离近的词。怎么解决长距离问题呢?嘿嘿,记得关注我哦~

小小透露一下,通过复杂的更新机制,来更新和维护这个状态。