一.传统的神经网络与循环神经网络处理文本序列的区别
1.传统神经网络处理文本序列
(1)在不同的例子中,输入长度Tx和输出长度Ty可能不一样,因此可能用的padding或零填充,但是效果不是很好。
(2)传统的神经网络,并不能共享从文本的不同位置上学到的特征。
2.循环神经网络处理文本序列
循环神经网络(RNN)对于自然语言处理和其他序列任务非常有效,因为它们具有“记忆”功能。 它们可以一次读取一个输入(如单词),并且通过隐藏层激活从一个时间步传递到下一个时间步来记住一些信息/上下文,这允许单向RNN从过去获取信息来处理后面的输入,双向RNN可以从过去和未来中获取上下文。
二、循环神经网络(RNN)
1.符号说明
- 上标[l]表示第l层。如, 表示。
- 上标(i)表示第 i 个样本。如,表示第i个输入样本。
- 上标< t >表示第 t 个时间步。如,表示输入x的第t个时间步,表示输入第i个样本的第t个时间步。
- 下标 i 表示向量的第 i 项。如,表示l层中的第i个项的激活值。
2.不同循环神经网络类型
RNN网络结构类型主要有四种:一对多结构、多对一结构和多对多结构(Tx=Ty和Tx≠Ty)。
(1)一对多结构:常用于音乐生成、序列生成等。
(2)多对一结构:常用于情感分类,判断用户的喜欢程度。
(3)多对多结构(Tx=Ty和Tx≠Ty):
Tx=Ty的多对多结构,常用于命名实体识别,即自动识别句子中人名位置的序列模型。
Tx≠Ty的多对多结构,常用于机器翻译。
3.RNN单元
4.循环神经网络(RNN)的前向传播
RNN的前向传播,只能学习到句子中当前单词之前的特征,若想同时学习到单词前后的特征,则也应该添加RNN的反向传播,进行双向传播,即BRNN模型。
5.双向循环神经网络(BRNN)的双向传播
6.RNN模型缺点
当RNN模型的层数很多时,可能出现梯度消失或者梯度爆炸。
(1)解决梯度消失的方法
采用GRU单元,可以帮助在序列中学习更深层的链接,可以帮助解决梯度消失问题。
(2)解决梯度爆炸的方法
采用梯度修剪方法,可以帮助解决梯度爆炸问题。
整个循环结构通常包括前向传播、成本计算、反向传播和参数更新。在更新参数之前,我们将在需要时执行梯度修剪,以确保我们的梯度不是“爆炸”的,比较简单的一种方法是clip函数。
clip函数原理:clip函数使得梯度向量的每一个元素都被限制在 [-N,N]的范围,即如果梯度的任何值大于10,那么它将被设置为10,如果梯度的任何值小于-10,那么它将被设置为-10,如果它在-10与10之间,那么它将不变。
三、长短时记忆(Long Short-Term Memory (LSTM))网络
1.LSTM单元(GRU单元的改进)
LSTM单元由遗忘门、更新门、更新单元和输出门组成,与GRU单元一样,能够处理更深层次的链接,可以避免梯度消失,在处理文本序列时,使用LSTM单元通常比GRU的效果要好。
(1)遗忘门
(2)更新门
(3)更新单元
为了要更新主题,我们需要创建一个新的向量,我们可以将其添加到之前的单元状态中。
最后,单元的新状态是:
(4)输出门
为了决定我们将使用哪种输出,我们将使用以下两个公式:
2.LSTM的前向传播
LSTM的前向传播,只能学习到句子中当前单词之前的特征,若想同时学习到单词前后的特征,则也应该添加LSTM的反向传播,进行双向传播,即BiLSTM模型。
3.BiLSTM的双向传播
采用双向传播的结构,在分析句子中某个单词时,可以同时考虑到上下文的信息。
4.BiLSTM模型以及BRNN模型的缺点
BiLSTM模型与众多的BRNN模型有着相同的缺点,需要得到完整的数据序列后,才能预测任意位置。比如,在语音识别系统中,需要考虑到整个语音表达,要等待人员说完话才可以语音识别,时效性是不够强的,因此不适合用BiLSTM模型处理语音识别。
四.语言模型和序列生成
1.语言模型
(1)工作原理
语言模型会计算某个特定句子或文本序列出现的概率是多少。语言模型是语音识别系统和机器翻译系统两种模型的基本组成部分,能够正确输出最接近的句子。
语言模型的工作原理:输入一个句子,即文本序列,然后语言模型会估计文本序列中各个单词出现的可能性。
(2)建立语言模型
首先,拥有一个很大的用于构建模型语言的语料库。
其次,是实现句子标记化过程,即建立一个字典(vocabulary),将每个单词转化为对应的one-hot向量,即字典中的索引。
另外,还需定义句子的结尾,一般做法是增加额外的标记<EOS>,帮助搞清楚句子在哪结束。如果想要模型能够准确识别句子结尾的话,也可以在训练集每个句子后加上<EOS>标记。若输入的句子中存在不属于子典中的单词,可以将其替换为<UNK>标志,代表未知词。
最后,构建RNN模型,利用代价函数计算句子中每个单词出现的概率,并最后计算整个句子出现的概率。
2.序列生成
(1)序列生成原理
序列生成是从训练好的RNN模型中生成一个随机选择的句子。一个序列模型,模拟了任意特定单词或字符序列的概率。我们可以根据向量中概率分布进行采样,来生成一个新的单词序列或字符序列。
(2)判断生成句子的结束
1)若代表句子结束的标志<EOS>在字典中,那么可以一直进行采样,当采样到<EOS>标志时,代表句子结束,停止采样。
2)若字典中没有<EOS>,则可以一直采样,直到达到规定的时间步数,停止采样。不过这种方法可能在生成的句子中出现<UNK>未知标志,解决办法是若采样到<UNK>时,从其他单词或字符中再采样。