资讯详情

深度学习与自然语言处理教程(5) - 语言模型、RNN、GRU与LSTM(NLP通关指南·完结)

ShowMeAI研究中心

  • 作者:韩信子@ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/36
  • 本文地址:http://www.showmeai.tech/article-detail/239
  • 声明:所有版权,请联系平台和作者,注明来源

本系列为自然语言处理与深度学习(Natural Language Processing with Deep Learning)》全套学习笔记,相应的课程视频可以在 查看。

ShowMeAI为CS224n课程的全部课件,做了,并制作成了 GIF动图!点击 查看课件注释和带学解读。获取更多信息的方法见文末。


引言

是斯坦福大学生产的深度学习和自然语言处理专业课程,涵盖核心内容RNN、LSTM、CNN、transformer、bert、问答、摘要、文本生成、语言模型、阅读理解等前沿内容。

本笔记对应斯坦福CS224n自然语言处理语言处理知识板块:**语言模型、循环神经网络RNN、变种RNN (LSTM、GRU等) **。首先介绍语言模型及其应用场景,然后介绍循环神经网络RNN优化后的变种LSTM和GRU模型。

内容要点

  • 语言模型
  • RNN
  • 循环神经网络
  • 双向RNN
  • 深度RNN
  • 长时间记忆网络
  • LSTM
  • GRU

1.语言模型

(也可以参考语言模型的一些内容ShowMeAI吴恩达老师课程总结文章 深度学习教程 |

1.1 简介

语言模型计算特定序列中多个单词的概率。 m m m 单词序列 { w 1 , … , w m } \{w_{1}, \dots, w_{m}\} { w1,…,wm} 概率定义为 P ( w 1 , … , w m ) P\left(w_{1}, \dots, w_{m}\right) P(w1,…,wm​)。单词 w i w_i wi​ 前有一定数量的单词,其特性会根据它在文档中的位置而改变, P ( w 1 , … , w m ) P\left(w_{1}, \dots, w_{m}\right) P(w1​,…,wm​) 一般只考虑前 n n n 个单词而不是考虑全部之前的单词。

P ( w 1 , … , w m ) = ∏ i = 1 i = m P ( w i ∣ w 1 , … , w i − 1 ) ≈ ∏ i = 1 i = m P ( w m ∣ w i − n , … , w i − 1 ) P(w_{1}, \ldots, w_{m})=\prod_{i=1}^{i=m} P(w_{i} \mid w_{1}, \ldots, w_{i-1}) \approx \prod_{i=1}^{i=m} P(w_{m} \mid w_{i-n}, \ldots, w_{i-1}) P(w1​,…,wm​)=i=1∏i=m​P(wi​∣w1​,…,wi−1​)≈i=1∏i=m​P(wm​∣wi−n​,…,wi−1​)

上面的公式在语音识别和机器翻译系统中有重要的作用,它可以辅助筛选语音识别和机器翻译的最佳结果序列。

在现有的机器翻译系统中,对每个短语/句子翻译,系统生成一些候选的词序列 (例如, { I h a v e , I h a s , I h a d , m e h a v e , m e h a d } \{ I have,I has,I had,me have,me had \} { Ihave,Ihas,Ihad,mehave,mehad}) ,并对其评分以确定最可能的翻译序列。

在机器翻译中,对一个输入短语,通过评判每个候选输出词序列的得分的高低,来选出最好的词顺序。为此,模型可以在不同的单词排序或单词选择之间进行选择。它将通过一个概率函数运行所有单词序列候选项,并为每个候选项分配一个分数,从而实现这一目标。最高得分的序列就是翻译结果。例如:

  • 相比 small is the cat,翻译系统会给 the cat is small 更高的得分;
  • 相比 walking house after school,翻译系统会给 walking home after school 更高的得分。

1.2 n-gram语言模型

为了计算这些概率,每个 n-gram 的计数将与每个单词的频率进行比较,这个称为 n-gram 语言模型。

  • 例如,如果选择 bi-gram模型 (二元语言模型) ,每一个 bi-gram 的频率,通过将单词与其前一个单词相结合进行计算,然后除以对应的 uni-gram 的频率。
  • 下面的两个公式展示了 bi-gram 模型和 tri-gram 模型的区别。

p ( w 2 ∣ w 1 ) = c o u n t ( w 1 , w 2 ) c o u n t ( w 1 ) p(w_{2} \mid w_{1}) =\frac{count (w_{1}, w_{2})}{count(w_{1})} p(w2​∣w1​)=count(w1​)count(w1​,w2​)​

p ( w 3 ∣ w 1 , w 2 ) = c o u n t ( w 1 , w 2 , w 3 ) c o u n t ( w 1 , w 2 ) p(w_{3} \mid w_{1}, w_{2}) =\frac{count (w_{1}, w_{2}, w_{3})}{count (w_{1}, w_{2})} p(w3​∣w1​,w2​)=count(w1​,w2​)count(w1​,w2​,w3​)​

上式 tri-gram 模型的关系主要是基于一个固定的上下文窗口 (即前 n n n个单词) 预测下一个单词。一般 n n n的取值为多大才好呢?

  • 在某些情况下,前面的连续的 n n n 个单词的窗口可能不足以捕获足够的上下文信息。
    • 例如,考虑句子 (类似完形填空,预测下一个最可能的单词)
    • Asthe proctor started the clock, the students opened their __。如果窗口只是基于前面的三个单词 the students opened their ,那么基于这些语料计算的下划线中最有可能出现的单词就是为 books ——但是如果 n n n 足够大,能包括全部的上下文,那么下划线中最有可能出现的单词会是 exam

这就引出了 n-gram 语言模型的两个主要问题:「」和「」。

1) n-gram语言模型的稀疏性问题

n-gram 语言模型的问题源于两个问题。

① 对应公式中的,可能有稀疏性问题。

  • 如果 w 1 w_1 w1​, w 2 w_2 w2​, w 3 w_3 w3​ 在语料中从未出现过,那么 w 3 w_3 w3​ 的概率就是 0 0 0。
  • 为了解决这个问题,在每个单词计数后面加上一个很小的 δ \delta δ,这就是平滑操作。

② 对应公式中的,可能有稀疏性问题。

  • 如果 w 1 w_1 w1​, w 2 w_2 w2​ 在语料中从未出现过,那么 w 3 w_3 w3​ 的概率将会无法计算。
  • 为了解决这个问题,这里可以只是单独考虑 w 2 w_2 w2​,这就是backoff 操作。

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

2) n-gram语言模型的存储问题

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

1.3 基于文本滑窗的预估型语言模型 (NNLM)

Bengio 的论文《A Neural Probabilistic Language Model》中首次解决了上面所说的“维度灾难”,这篇论文提出一个自然语言处理的大规模的深度学习模型,这个模型能够通过学习单词的分布式表示,以及用这些表示来表示单词的概率函数。

下图展示了NNLM对应的神经网络结构,在这个模型中,输入向量在隐藏层和输出层中都被使用。

下面公式展示了由标准 tanh 函数 (即隐藏层) 组成的 softmax 函数的参数以及线性函数 W ( 3 ) x + b ( 3 ) W^{(3)} x+b^{(3)} W(3)x+b(3),捕获所有前面 n n n 个输入词向量。

y ^ = softmax ⁡ ( W ( 2 ) tanh ⁡ ( W ( 1 ) x + b ( 1 ) ) + W ( 3 ) x + b ( 3 ) ) \hat{y}=\operatorname{softmax}\left(W^{(2)} \tanh \left(W^{(1)}x+b^{(1)}\right)+W^{(3)} x+b^{(3)}\right) y^​=softmax(W(2)tanh(W(1)x+b(1))+W(3)x+b(3))

注意权重矩阵 W ( 1 ) W^{(1)} W(1)是应用在词向量上 (上图中的绿色实线箭头) , W ( 2 ) W^{(2)} W(2)是应用在隐藏层 (也是绿色实线箭头) 和 W ( 3 ) W^{(3)} W(3)是应用在词向量 (绿色虚线箭头) 。

这个模型的简化版本如下图所示:

  • 蓝色的层表示输入单词的 embedding 拼接: e = [ e ( 1 ) ; e ( 2 ) ; e ( 3 ) ; e ( 4 ) ] e=\left[e^{(1)} ; e^{(2)} ; e^{(3)} ; e^{(4)}\right] e=[e(1);e(2);e(3);e(4)]
  • 红色的层表示隐藏层: h = f ( W e + b 1 ) \boldsymbol{h}=f\left(\boldsymbol{W} e+\boldsymbol{b}_{1}\right) h=f(We+b

    标签: yt一体化液位变送器

    锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台