深度学习在自然语言处理中的应用( 二 )


的思想是预测某个中心词附近其它词语出现的概率 。还是以之前的句子“I love NLP and I like dogs.”为例 。我们首先观察该句子的前三个单词 。因此窗口的宽度就是 m=3:
接着,我们的目标就是根据中心词“love”,预测它左右可能出现的词 。怎么实现呢?当然先要定一个优化目标函数 。假设确定了一个中心词,我们定的这个函数要使得周围词语出现的对数概率值最大:

深度学习在自然语言处理中的应用

文章插图
这个函数很重要,作者强调一定要认真理解 。还是以“love”作为中心词为例,目标函数的含义就是累加左侧“I”,“love”和右侧“NLP”,“love”四个单词的对数概率值 。变量T表示训练语句的数量 。下面的式子是对数函数的公式:
深度学习在自然语言处理中的应用

文章插图
Vc是中心词的词向量 。每个单词有两种表示向量(Uo和Uw)—— 一个用于此单词作为中心词的场景,另一个用于此单词不是中心词的场景 。我们采用随机梯度下降方法训练词向量 。这个过程是最令人费解的,如果读者对上述解释看得云里雾里,作者还向大家推荐了两篇拓展阅读文章,第一篇和第二篇 。
深度学习在自然语言处理中的应用

文章插图
一句话总结:在给出中心词的情况下,的目标就是使得上下文词语的对数函数值最大,优化方法通常是SGD 。
方法最吸引眼球的效果就是其能够发现词向量之间存在的线性关系 。经过训练,词向量似乎可以捕捉到不同的语法和语义概念:
深度学习在自然语言处理中的应用

文章插图
真是不可思议,如此简单的目标函数和优化方法就能够捕捉到这种线性关系 。
循环神经网络()
好了,现在我们已经得到了词向量,接下去就要把它们融入到循环神经网络模型中 。RNN现在已经是NLP任务最常用的方法之一 。RNN模型的优势之一就是可以有效利用之前传入网络的信息 。下图就是RNN模型的简单示意图:
深度学习在自然语言处理中的应用

文章插图
上图底部,输入的x是该词的词向量 。每个向量x对应一个隐层的向量h 。下图橙色框内的是一个输入单元:
深度学习在自然语言处理中的应用

文章插图
每个单元的隐层向量是当前输入词向量和上一个隐层状态的函数,计算公式如下:
如果你仔细观察,会发现公式中有两个上标不同的权重矩阵Whx和Whh,分别与输入的词向量和上一次的隐藏状态相乘 。这两个权重矩阵是网络的所有单元共享的 。
这就是RNN模型的关键 。仔细思考这个过程,它和传统的两层神经网络差别非常大 。在传统的两层神经网络中,每层的权重矩阵各不相同(W1和W2),而在递归算机网络中,整个序列共享同一个权重矩阵 。
具体到某个单元,它的输出值y是h和Ws的乘积,即另一个权值矩阵:
深度学习在自然语言处理中的应用

文章插图
我们再来回顾一下RNN的优点 。RNN与传统NN的最大区别在于RNN输入的是一个序列(这里就是一系列单词) 。像CNN模型的输入也只是一张单一的图片,而RNN的输入既可以是一句简短的句子,也可以是一篇5个段落的文章 。输入序列的顺序也会极大影响训练效果 。理想情况下,隐藏状态有望捕捉过去的信息(历史输入内容) 。
门控递归单元(GatedUnits )
我们再来介绍门控递归单元 。这种门控单元的目的是为RNN模型在计算隐层状态时提供一种更复杂的方法 。这种方法将使我们的模型能够保持更久远的信息 。为什么保持长期依赖是传统循环神经网络存在的问题呢?因为在误差反向传播的过程中,梯度沿着RNN模型由近及远往回传播 。如果初始梯度是一个很小的数值(例如