【cs224n-6】The probability of a sentence? Recurrent Neural Networks and Language Models

    主体内容:

       这节课主要讲解什么语言模型?如何构建语言模型,传统的方法有哪些缺陷?从而引入神经网络方法,讲解RNN\GRU\LSTM的架构原理。

  1.语言模型(Language Model)

       1.1 语言模型定义

           语言模型的任务是基于现有的单词序列预测下一个单词是什么。更正式的说法是:给定一个单词序列x^{(1)},x^{(2)},...,x^{(t)},计算下一个单词x^{(t+1)}的概率分布

          

其中x^{(t+1)}可以是词表中的任意单词,词表V={w_{1},....,w_{|v|}};这样的系统称为语言模型

如何衡量它的概率呢?让我们假设,每一个单词wi都要依赖于从第一个单词w1到它之前一个单词wi−1 的影响

是不是很简单?是的,不过这个衡量方法有两个缺陷:参数空间过大和数据稀疏严重。引入马尔科夫假设(Markov Assumption)一个词的出现仅与它之前的若干个词有关,也就是下文的n-gram。

1.2 n-gram Language Models

     N-gram本身也指一个由N个单词组成的集合,各单词具有先后顺序,且不要求单词之间互不相同。例如uni-gram(N=1),Bi-gram (N=2) ,Tri-gram (N=3)等。为了计算这些概率,每个 n-gram 的计数将与每个单词的频率进行比较,这个称为 n-gram 语言模型。例如,如果选择 bi-gram 模型,每一个 bi-gram 的频率,通过将单词与其前一个单词相结合进行计算,然后除以对应的 uni-gram 的频率。下面的两个公式展示了 bi-gram 模型和 tri-gram 模型的区别。

        n-gram 模型主要是基于一个固定的上下文窗口(即前n个单词)预测下一个单词。一般 n 的取值为多大才好呢?在某些情况下,前面的连续的 n 个单词的窗口可能不足以捕获足够的上下文信息。例如,“Asthe proctor started the clock, the students opened their ____”。如果窗口只是基于前面的三个单词“the students opened their”,那么基于这些语料计算的下划线中最有可能出现的单词就是为“books”,但是如果 n 足够大,能包括全部的上下文,考虑到“proctor”这个单词,那么下划线中最优可能出现的单词会是“exam”。

    这引出了 n-gram 语言模型的两个主要问题:稀疏性和存储。

    1)稀疏性问题(Sparsity problems

          首先,注意公式中的分子。如果 w1,w2.w3 在语料中从未出现过,那么 w3 的概率就是 0。为了解决这个问题,在每个单词计数后面加上一个很小的 δ ,这就是平滑操作。

         然后,考虑公式中的分母。 如果 w1,w2 在语料中从未出现过,那么 w3 的概率将会无法计算。为了解决这个问题,这里可以只是单独考虑 w2 ,这就是“backoff”操作。

         增加 n 会让稀疏问题更加严重,所以一般 n≤5 。

    2)存储性问题(Storage problems) 

         我们知道需要存储在语料库中看到的所有 n-gram 的统计数。随着 n 的增加(或语料库大小的增加),模型的大小也会增加。

   1.3 Window-based Neural Language Model

        使用和第三讲NER问题中同样网络结构

         

    超越 n-gram 语言模型的 改进

  • 没有稀疏性问题
  • 不需要观察到所有的n-grams

   存在的问题

  • 固定窗口太小
  • 扩大窗口就需要扩大权重矩阵 W
  • 窗口再大也不够用
  • x(1) 和 x(2) 乘以完全不同的权重。输入的处理 不对称

  我们需要一个神经结构,可以处理任何长度的输入

2.Recurrent Neural Networks (RNN)

  核心想法:重复使用 相同 的权重矩阵 W

      传统的翻译模型只能以有限窗口大小的前 n 个单词作为条件进行语言模型建模,循环神经网络与其不同,RNN 有能力以语料库中所有前面的单词为条件进行语言模型建模。

每个这样的隐藏层都有若干个神经元,每个神经元对输入向量用一个线性矩阵运算然后通过非线性变化(例如 tanh 函数)得到输出。在每一个时间步,隐藏层都有两个输入:前一个时间步的隐藏层 h_{t-1}和当前时间步的输入 x_{t} ,前一个时间步的隐藏层 h_{t-1}通过和权重矩阵 W^{(hh)} 相乘和当前时间步的输入 x_{t} 和权重矩阵 W^{(hx)} 相乘得到当前时间步的隐藏层 h_{t} ,然后再将 h_{t}和权重矩阵 W^{(S)} 相乘,接着对整个词表通过 softmax 计算得到下一个单词的预测结果 ^y ,如下面公式所示:

 

    RNN的 优点:

  • 它可以处理任意长度的序列
  • 对更长的输入序列不会增加模型的参数大小
  • 对时间步 t 的计算理论上可以利用前面很多时间步的信息 对输入的每个时间步都应用相同的权重,因此在处理输入时具有对称性

     RNN 的缺点:

  • 计算速度很慢——因为它每一个时间步需要依赖上一个时间步,所以不能并行化
  • 在实际中因为梯度消失和梯度爆炸,很难利用到前面时间步的信息。

3 Gated Recurrent Units(GRU)

      虽然理论上 RNN 能捕获长距离信息,但实际上很难训练网络做到这一点。门控制单元可以让 RNN 具有更多的持久性内存,从而更容易捕获长距离信息。

    GRU 的基本结构和计算流程:

    数学角度上:

   

 

  •  New memory generation:一个新的记忆 \widetilde{h_{t}} 是由一个新的输入单词x_{t}和过去的隐藏状态 h_{t-1}共同计算所得。这个阶段是将新输入的单词与过去的隐藏状态 h_{t-1}相结合,根据过去的上下文来总结得到向量 \widetilde{h_{t}}
  • Reset Gate:复位信号 r_{t}是负责确定h_{t-1}对总结\widetilde{h_{t}}的重要程度。如果确定\widetilde{h_{t}}与新的记忆的计算无关,则复位门能够完全消除过去的隐藏状态(即忽略之前隐藏的信息)。
  • Update Gate:更新信号z_{t}负责确定有多少h_{t-1}可以向前传递到下一个状态。例如,如果 z_{t}≈1 ,然后h_{t-1}几乎是完全向前传递到下一个隐藏状态。反过来,如果 z_{t}≈0 ,然后大部分的新的记忆\widetilde{h_{t}} 向前传递到下一个隐藏状态。
  • Hidden state:利用更新门的建议,使用过去的隐藏输入h_{t-1}和新生成的记忆\widetilde{h_{t}}生成隐藏状态h_{t} 。

      需要注意的是,为了训练 GRU,我们需要学习所有不同的参数:W,U,W(r),U(r),W(z),U(z)。这些参数同样是通过反向传播算法学习所得。

4.Long-Short-Term-Memories(LSTM)

    LSTM是和 GRU 有一点不同的另外一种类型的复杂激活神经元。它的作用与 GRU 类似,但是神经元的结构有一点区别。

    LSTM 的基本结构和计算流程:

数学角度:

  •  New memory generation:这个阶段是类似于 GRU 生成新的记忆的阶段。我们基本上是用输入单词x_{t} 和过去的隐藏状态来生成一个包括新单词x^{(t)} 的新的记忆\widetilde{c_{t}}
  •  Input Gate:我们看到在生成新的记忆之前,新的记忆的生成阶段不会检查新单词是否重要——这需要输入门函数来做这个判断。输入门使用输入词和过去的隐藏状态来决定输入值是否值得保存,从而用来进入新内存。因此,它产生它作为这个信息的指示器。
  • Forget Gate:这个门与输入门类似,只是它不确定输入单词的有用性——而是评估过去的记忆是否对当前记忆的计算有用。因此,遗忘门查看输入单词和过去的隐藏状态,并生成f_{t}
  • Final memory generation:这个阶段首先根据忘记门f_{t}的判断,相应地忘记过去的记忆  c_{t-1}。类似地,根据输入门i_{t}的判断,相应地输入新的记忆\widetilde{c_{t}} 。然后将上面的两个结果相加生成最终的记忆 c_{t} 。
  • Output/Exposure Gate:这是 GRU 中没有明确存在的门。这个门的目的是从隐藏状态中分离最终的记忆。最终的记忆c_{t} 包含很多不需要存储在隐藏状态的信息。隐藏状态用于 LSTM 的每个单个门,因此,该门是要评估关于记忆单元c_{t} 的哪些部分需要显露在隐藏状态h_{t} 中。用于评估的信号是o_{t} ,然后与c_{t} 通过 o_{t}∘tanh(c_{t}) 运算得到最终的 h_{t} 。

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值