关于自然语言处理:斯坦福NLP课程-第6讲-循环神经网络与语言模型

5次阅读

共计 8098 个字符,预计需要花费 21 分钟才能阅读完成。

  • 作者:韩信子 @ShowMeAI,路遥 @ShowMeAI,奇异果 @ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/36
  • 本文地址:http://www.showmeai.tech/article-detail/240
  • 申明:版权所有,转载请分割平台与作者并注明出处
  • 珍藏 ShowMeAI 查看更多精彩内容

ShowMeAI 为 斯坦福 CS224n《自然语言解决与深度学习 (Natural Language Processing with Deep Learning)》课程的全副课件,做了 中文翻译和正文,并制作成了 GIF 动图!

本讲内容的 深度总结教程 能够在 这里 查看。视频和课件等材料的获取形式见 文末


引言

(本篇内容也能够参考 ShowMeAI 的对吴恩达老师课程的总结文章深度学习教程 | 序列模型与 RNN 网络

概述

  • 介绍一个新的 NLP 工作

    • Language Modeling 语言模型
  • 介绍一个新的神经网络家族

    • Recurrent Neural Networks (RNNs)

1. 语言模型

1.1 语言模型

语言建模 的工作是预测下一个单词是什么

更正式的说法是:给定一个单词序列 \(\boldsymbol{x}^{(1)}, \boldsymbol{x}^{(2)}, \ldots, \boldsymbol{x}^{(t)}\),计算下一个单词 \(x^{(t+1)}\) 的概率分布:

$$
P\left(\boldsymbol{x}^{(t+1)} \mid \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(1)}\right)
$$

  • 其中,\(x^{(t+1)}\) 能够是词表中的任意单词 \(V=\left{\boldsymbol{w}_{1}, \ldots, \boldsymbol{w}_{|V|}\right}\)
  • 这样做的零碎称为 Language Model 语言模型

1.2 语言模型

  • 还能够将语言模型看作 评估一段文本是天然句子(通顺度)的概率

  • 例如,如果咱们有一段文本 \(x^{(1)},\dots,x^{(T)}\),则这段文本的概率 (依据语言模型) 为

$$
\begin{aligned}
P\left(\boldsymbol{x}^{(1)}, \ldots, \boldsymbol{x}^{(T)}\right) &=P\left(\boldsymbol{x}^{(1)}\right) \times P\left(\boldsymbol{x}^{(2)} \mid \boldsymbol{x}^{(1)}\right) \times \cdots \times P\left(\boldsymbol{x}^{(T)} \mid \boldsymbol{x}^{(T-1)}, \ldots, \boldsymbol{x}^{(1)}\right) \\
&=\prod_{t=1}^{T} P\left(\boldsymbol{x}^{(t)} \mid \boldsymbol{x}^{(t-1)}, \ldots, \boldsymbol{x}^{(1)}\right)
\end{aligned}
$$

  • 语言模型提供的是 \(\prod_{t=1}^{T} P\left(\boldsymbol{x}^{(t)} \mid \boldsymbol{x}^{(t-1)}, \ldots, \boldsymbol{x}^{(1)}\right)\)

1.3 随处可见的语言模型

1.4 随处可见的语言模型

1.5 n-gram 语言模型

the students opened their __

  • 问题:如何学习一个语言模型?
  • 答复(深度学习之前的期间):学习一个 n-gram 语言模型

  • 定义:n-gram 是一个由 \(n\) 个间断单词组成的块

    • unigrams: the, students, opened, their
    • bigrams: the students, students opened, opened their
    • trigrams: the students opened, students opened their
    • 4-grams: the students opened their

  • 想法:收集对于不同 n-gram 呈现频率的统计数据,并应用这些数据预测下一个单词

1.6 n-gram 语言模型

  • 首先,咱们做一个简化假如:\(x^{(t+1)}\) 只依赖于后面的 \(n-1\) 个单词

$$
\begin{aligned}
P\left(\boldsymbol{x}^{(t+1)} \mid \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(1)}\right)
& =P\left(\boldsymbol{x}^{(t+1)} \mid \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(t-n+2)}\right)\\
&=\frac{P\left(\boldsymbol{x}^{(t+1)}, \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(t-n+2)}\right)}{P\left(\boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(t-n+2)}\right)}
\end{aligned}
$$

  • 问题:如何失去 n -gram 和(n-1)-gram 的概率?
  • 答复:通过在一些大型文本语料库中计算它们(统计近似)

$$
\approx \frac{\operatorname{count}\left(\boldsymbol{x}^{(t+1)}, \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(t-n+2)}\right)}{\operatorname{count}\left(\boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(t-n+2)}\right)}
$$

1.7 n-gram 语言模型:示例

假如咱们正在学习一个 4-gram 的语言模型

  • 例如,假如在语料库中:

    • students opened their 呈现了 \(1000\)次
    • students opened their books 呈现了 \(400\)次

$$
P(\text{books} \mid \text{students opened their})=0.4
$$

  • students opened their exams 呈现了 \(100\)次

$$
P(\text{exams} \mid \text{students opened their})=0.1
$$

  • 咱们应该漠视上下文中的 proctor 吗?

    • 在本例中,上下文里呈现了 proctor,所以 exams 在这里的上下文中应该是比 books 概率更大的。

1.8 n-gram 语言模型的稠密性问题

  • 问题 1 :如果students open their ww 从未呈现在数据中,那么概率值为 \(0\)
  • (Partial)解决方案:为每个 \(w \in V\) 增加极小数 \(\delta\),这叫做平滑。这使得词表中的每个单词都至多有很小的概率。

  • 问题 2 :如果students open their 从未呈现在数据中,那么咱们将无奈计算任何单词 \(w\) 的概率值
  • (Partial)解决方案:将条件改为open their,也叫做后退解决。

  • Note/ 留神: \(n\) 的减少使稠密性问题变得更糟。个别状况下 \(n\) 不能大于 \(5\)。

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

问题:须要存储你在语料库中看到的所有 n-grams 的计数

减少 \(n\) 或减少语料库都会减少模型大小

1.10 n-gram 语言模型在实践中的利用

Try for yourself: https://nlpforhackers.io/lang…

  • 你能够在你的笔记本电脑上,在几秒钟内建设一个超过 170 万个单词库 (Reuters) 的简略的三元组语言模型

    • Reuters 是 商业和金融新闻的数据集

稠密性问题

  • 概率分布的粒度不大。today the companytoday he bank 都是 4 /26,都只呈现过四次

1.11 n-gram 语言模型的生成文本

  • 能够应用语言模型来生成文本

  • 应用 trigram 运行以上生成过程时,会失去上图左侧的文本

  • 令人诧异的是其具备语法然而是不连贯的。如果咱们想要很好地模仿语言,咱们须要同时思考三个以上的单词。但减少 \(n\) 使模型的稠密性问题好转,模型尺寸增大

1.12 如何搭建一个神经语言模型?

  • 回顾一下语言模型工作

    • 输出:单词序列 \(\boldsymbol{x}^{(1)}, \boldsymbol{x}^{(2)}, \ldots, \boldsymbol{x}^{(t)}\)
    • 输入 :下一个单词的概 \(P\left(\boldsymbol{x}^{(t+1)} \mid \boldsymbol{x}^{(t)}, \ldots, \boldsymbol{x}^{(1)}\right)\) 率散布

  • window-based neural model 在第三讲中被用于 NER 问题

1.13 固定窗口的神经语言模型

  • 应用和 NER 问题中同样网络结构

1.14 固定窗口的神经语言模型

1.15 固定窗口的神经语言模型

超过 n-gram 语言模型的 改良

  • 没有稠密性问题
  • 不须要察看到所有的 n -grams

NNLM 存在的 问题

  • 固定窗口太小
  • 扩充窗口就须要扩充权重矩阵 \(W\)
  • 窗口再大也不够用
  • \(x^{(1)}\)和 \(x^{(2)}\) 乘以齐全不同的权重。输出的解决不对称

咱们须要一个神经构造,能够解决任何长度的输出

2. 循环神经网络(RNN)

2.1 循环神经网络(RNN)

  • 外围想法:重复使用雷同的权重矩阵 \(W\)

2.2 RNN 语言模型

2.3 RNN 语言模型

  • RNN 的 长处

    • 能够解决 任意长度 的输出
    • 步骤 \(t\) 的计算 (实践上) 能够应用 许多步骤前 的信息
    • 模型大小不会 随着输出的减少而 减少
    • 在每个工夫步上利用雷同的权重,因而在解决输出时具备 对称性

  • RNN 的 毛病

    • 循环串行计算速度慢
    • 在实践中,很难从许多步骤前返回信息

2.4 训练一个 RNN 语言模型

  • 获取一个 较大的文本语料库,该语料库是一个单词序列
  • 输出 RNN-LM;计算 每个步骤 \(t\) 的输入散布

    • 即预测到目前为止给定的每个单词的概率分布

  • 步骤 \(t\) 上的 损失函 数为预测概率分布 \(\hat{\boldsymbol{y}}^{(t)}\) 与实在下一个单词 \({\boldsymbol{y}}^{(t)}\) (\(x^{(t+1)}\)的独热向量)之间的 穿插熵

$$
J^{(t)}(\theta)=C E\left(\boldsymbol{y}^{(t)}, \hat{\boldsymbol{y}}^{(t)}\right)=-\sum_{w \in V} \boldsymbol{y}_{w}^{(t)} \log \hat{\boldsymbol{y}}_{w}^{(t)}=-\log \hat{\boldsymbol{y}}_{\boldsymbol{x}_{t+1}}^{(t)}
$$

  • 将其均匀,失去整个训练集的 总体损失

$$
J(\theta)=\frac{1}{T} \sum_{t=1}^{T} J^{(t)}(\theta)=\frac{1}{T} \sum_{t=1}^{T}-\log \hat{\boldsymbol{y}}_{\boldsymbol{x}_{t+1}}^{(t)}
$$

2.5 训练一个 RNN 语言模型

$$
J^{(1)}(\theta)+J^{(2)}(\theta)+J^{(3)}(\theta)+J^{(4)}(\theta)+\cdots=J(\theta)=\frac{1}{T} \sum_{t=1}^{T} J^{(t)}(\theta)
$$

2.6 训练一个 RNN 语言模型

  • 然而:计算整个语料库 \(\boldsymbol{x}^{(1)}, \ldots, \boldsymbol{x}^{(T)}\) 的损失和梯度太低廉了

$$
J(\theta)=\frac{1}{T} \sum_{t=1}^{T} J^{(t)}(\theta)
$$

  • 在实践中,咱们通常将 \(\boldsymbol{x}^{(1)}, \ldots, \boldsymbol{x}^{(T)}\) 看做一个句子或是文档
  • 回顾:随机梯度降落容许咱们计算小块数据的损失和梯度,并进行更新
  • 计算一个句子的损失 \(J(\theta)\) (实际上是一批句子),计算梯度和更新权重。反复上述操作。

2.7 RNN 的反向流传

  • 问题:对于 反复的 权重矩阵 \(W_h\) 的偏导数 \(J^{(t)}(\theta)\)
  • 答复:反复权重的梯度是每次其呈现时的梯度的总和

$$
\frac{\partial J^{(t)}}{\partial \boldsymbol{W}_{\boldsymbol{h}}}=\sum_{i=1}^{t}\left.\frac{\partial J^{(t)}}{\partial \boldsymbol{W}_{\boldsymbol{h}}}\right|_{(i)}
$$

2.8 多变量链式法则

Source: https://www.khanacademy.org/m…

  • 对于一个多变量函数 \(f(x,y)\) 和两个单变量函数 \(x(t)\) 和 \(y(t)\),其链式法则如下:

$$
\frac{d}{d t} f(x(t), y(t))=\frac{\partial f}{\partial x} \frac{d x}{d t}+\frac{\partial f}{\partial y} \frac{d y}{d t}
$$

2.9 RNN 的反向流传:简略证实

  • 对于一个多变量函数 \(f(x,y)\) 和两个单变量函数 \(x(t)\) 和 \(y(t)\),其链式法则如下:

$$
\frac{d}{d t} f(x(t), y(t))=\frac{\partial f}{\partial x} \frac{d x}{d t}+\frac{\partial f}{\partial y} \frac{d y}{d t}
$$

2.10 RNN 的反向流传

  • 问题:如何计算?
  • 答复:反向流传的工夫步长 \(i=t,\dots,0\)。累加梯度。这个算法叫做“backpropagation through time”

2.11 RNN 语言模型的生成文本

  • 就像 n -gram 语言模型一样,你能够应用 RNN 语言模型通过反复采样来生成文本。采样输入是下一步的输出。

2.12 RNN 语言模型的生成文本

Source: https://medium.com/@samim/oba…

Source: https://medium.com/deep-writi…

Source: https://gist.github.com/nylki…

Source: http://aiweirdness.com/post/1…

补充解说

  • 相比 n -gram 更晦涩,语法正确,但总体上依然很不连贯
  • 食谱 的例子中,生成的文本并没有记住文本的主题是什么
  • 哈利波特 的例子中,甚至有体现出了人物的特点,并且引号的开闭也没有呈现问题

    • 兴许某些神经元或者暗藏状态在跟踪模型的输入是否在引号中

  • RNN 是否能够和手工规定联合?

    • 例如 Beam Serach,然而可能很难做到

3. 评估语言模型

3.1 评估语言模型

  • 规范语言模型评估指标是 perplexity 困惑度
  • 这等于穿插熵损失 \(J(\theta)\) 的指数

$$
=\prod_{t=1}^{T}\left(\frac{1}{\hat{y}_{x_{t+1}}^{(t)}}\right)^{1 / T}=\exp \left(\frac{1}{T} \sum_{t=1}^{T}-\log \hat{\boldsymbol{y}}_{\boldsymbol{x}_{t+1}}^{(t)}\right)=\exp (J(\theta))
$$

  • 困惑度越低成果越好

3.2 RNN 极大地改善了困惑度

Source: https://research.fb.com/build…

3.3 为什么咱们要关怀语言模型?

  • 语言模型是一项 基准测试 工作,它帮忙咱们 掂量 咱们在了解语言方面的 停顿

    • 生成下一个单词,须要语法,句法,逻辑,推理,事实世界的常识等

  • 语言建模 是许多 NLP 工作的子组件,尤其是那些波及生成文本或预计文本概率的工作

    • 预测性打字、语音辨认、手写辨认、拼写 / 语法纠正、作者辨认、机器翻译、摘要、对话等等

3.4 要点回顾

  • 语言模型:预测下一个单词的零碎
  • 循环神经网络:一系列神经网络

    • 采纳任意长度的程序输出
    • 在每一步上利用雷同的权重
    • 能够抉择在每一步上生成输入
  • 循环神经网络 \(\ne\) 语言模型
  • 咱们曾经证实,RNNs 是构建 LM 的一个很好的办法。
  • 但 RNNs 的用途要大得多!

3.5 RNN 可用于句子分类

  • 如何计算句子编码
  • 根底形式:应用最终隐层状态
  • 通常更好的形式:应用所有隐层状态的逐元素最值或均值
  • Encoder 的构造在 NLP 中十分常见

3.6 RNN 语言模型可用于生成文本

  • 这是一个条件语言模型的示例。咱们应用语言模型组件,并且最要害的是,咱们依据条件来调整它

4. 视频教程

能够点击 B 站 查看视频的【双语字幕】版本

https://www.bilibili.com/vide…

5. 参考资料

  • 本讲带学的 在线阅翻页本
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程学习指南
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程大作业解析
  • 双语字幕视频】斯坦福 CS224n | 深度学习与自然语言解决(2019·全 20 讲)
  • Stanford 官网 | CS224n: Natural Language Processing with Deep Learning

ShowMeAI 系列教程举荐

  • 大厂技术实现 | 举荐与广告计算解决方案
  • 大厂技术实现 | 计算机视觉解决方案
  • 大厂技术实现 | 自然语言解决行业解决方案
  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
  • 自然语言解决教程 | 斯坦福 CS224n 课程 · 课程带学与全套笔记解读

自然语言解决 (NLP) 教程

  • NLP 教程(1)- 词向量、SVD 合成与 Word2vec
  • NLP 教程(2)- GloVe 及词向量的训练与评估
  • NLP 教程(3)- 神经网络与反向流传
  • NLP 教程(4)- 句法分析与依存解析
  • NLP 教程(5)- 语言模型、RNN、GRU 与 LSTM
  • NLP 教程(6)- 神经机器翻译、seq2seq 与注意力机制
  • NLP 教程(7)- 问答零碎
  • NLP 教程(8)- NLP 中的卷积神经网络
  • NLP 教程(9)- 句法分析与树形递归神经网络

斯坦福 CS224n 课程带学详解

  • 斯坦福 NLP 课程 | 第 1 讲 – NLP 介绍与词向量初步
  • 斯坦福 NLP 课程 | 第 2 讲 – 词向量进阶
  • 斯坦福 NLP 课程 | 第 3 讲 – 神经网络常识回顾
  • 斯坦福 NLP 课程 | 第 4 讲 – 神经网络反向流传与计算图
  • 斯坦福 NLP 课程 | 第 5 讲 – 句法分析与依存解析
  • 斯坦福 NLP 课程 | 第 6 讲 – 循环神经网络与语言模型
  • 斯坦福 NLP 课程 | 第 7 讲 – 梯度隐没问题与 RNN 变种
  • 斯坦福 NLP 课程 | 第 8 讲 – 机器翻译、seq2seq 与注意力机制
  • 斯坦福 NLP 课程 | 第 9 讲 – cs224n 课程大我的项目实用技巧与教训
  • 斯坦福 NLP 课程 | 第 10 讲 – NLP 中的问答零碎
  • 斯坦福 NLP 课程 | 第 11 讲 – NLP 中的卷积神经网络
  • 斯坦福 NLP 课程 | 第 12 讲 – 子词模型
  • 斯坦福 NLP 课程 | 第 13 讲 – 基于上下文的表征与 NLP 预训练模型
  • 斯坦福 NLP 课程 | 第 14 讲 – Transformers 自注意力与生成模型
  • 斯坦福 NLP 课程 | 第 15 讲 – NLP 文本生成工作
  • 斯坦福 NLP 课程 | 第 16 讲 – 指代消解问题与神经网络办法
  • 斯坦福 NLP 课程 | 第 17 讲 – 多任务学习(以问答零碎为例)
  • 斯坦福 NLP 课程 | 第 18 讲 – 句法分析与树形递归神经网络
  • 斯坦福 NLP 课程 | 第 19 讲 – AI 平安偏见与偏心
  • 斯坦福 NLP 课程 | 第 20 讲 – NLP 与深度学习的将来

正文完
 0