1、循环神经网络与NLP简述
NLP:自然语言处理是人工智能领域的一个重要分支,旨在让计算机理解、生成和翻译人类语言。
对于一些序列输入的信息,例如语音、语言等,不同时刻之间的输入存在相互的影响,需要一种模型能够“记忆”历史输入的信息,进而对整个序列进行完整的特征提取和表征。
循环神经网络就是面对这样的需求提出来的,它能够“记忆”序列输入的历史信息,从而能够较好的对整个序列进行语义建模。
目前,RNN及其变种在NLP领域有着广泛的应用。语音识别、对话系统、机器翻译、情感分析等等领域,在产业界,RNN及其变种都是最主要的特征提取工具。
2、基础
2.1 自回归模型
2.2 数据预处理
对于语言,要进行数据预处理:例如对于一个人,其包括年龄、性别、国家等=多种信息,这些信息要从文字中进行特征编码(数字化),将一个人的特征以一个多维特征向量表示出来
语言是一种文本,要进行文本预处理,一篇文章可以被简单地看作一串单词序列,甚至是一串字符序列。 我们将 解析文本的常见预处理步骤。 这些步骤通常包括:
1、将文本作为字符串加载到内存中
2、将字符串切分为词元(如单词和字符)
3、建立一个字典,将拆分的词元映射到数字索引
这样一段文本就变成一段数据了。
对于不同长度句子(训练样本) :
如何将单词映射为向量:
词嵌入 :将词汇映射到实数向量的方法
词嵌入实际上是一类技术,单个词在预定义的向量空间中被表示为实数向量,每个单词都映射到一个向量。举个例子,比如在一个文本中包含“猫”“狗”“爱情”等若干单词,而这若干单词映射到向量空间中,“猫”对应的向量为(0.1 0.2 0.3),“狗”对应的向量为(0.2 0.2 0.4),“爱情”对应的映射为(-0.4 -0.5 -0.2)(本数据仅为示意)。像这种将文本X{x1,x2,x3,x4,x5……xn}映射到多维向量空间Y{y1,y2,y3,y4,y5……yn },这个映射的过程就叫做词嵌入。
之所以希望把每个单词都变成一个向量,目的还是为了方便计算,比如“猫”,“狗”,“爱情”三个词。对于我们人而言,我们可以知道“猫”和“狗”表示的都是动物,而“爱情”是表示的一种情感,但是对于机器而言,这三个词都是用0,1表示成二进制的字符串而已,无法对其进行计算。而通过词嵌入这种方式将单词转变为词向量,机器便可对单词进行计算,通过计算不同词向量之间夹角余弦值cosine而得出单词之间的相似性。
3、循环神经网络(RNN)模型
RNN模型结构如下所示,该模型思路是,希望将模型前一时刻输出与当前时刻输入结合,产生当前时刻输出。
可以看到该模型当前输出是与前一时刻输出有关的
该模型具有一个重要的缺陷:输出值在多个Cell之间依次传递,这一过程容易产生梯度爆炸或梯度消失现象。
为了降低该问题的影响,在RNN基础上,LSTM模型被提出。
4、LSTM模型
该模型思路是通过遗忘门、输入门、输出门的控制,将往期语义信息、前一时刻输出、当前时刻输入各变量进行组合,得到当前时刻输出及当前时刻希望保留的往期语义信息。
4.1遗忘门:
4.2 输入门
用于控制当前输入有多少可被采用
4.3 更新
对经过遗忘门与输入门的信息流进行整合,更新被保留的语义信息作为下一时刻往期信息的输入。
4.4 输出门
用于控制更新后的信息有多少将作为当前时刻的输出及下一时刻的隐藏层输入