学习总结

(1)语言模型: 预测下⼀个单词 的系统
(2)递归神经网络:一系列神经网络

  • 采用任意长度的顺序输入
  • 在每一步上应用相同的权重
  • 可以选择在每一步上生成输出

(3)递归神经网络 ≠ 语言模型。RNNs构建LM。
(4)困惑度(内部评价方法)越小,单词序列的概率则越大,模型能够更好地解释测试集中的数据。注意:困惑度越低的模型并不总是能在外部任务上取得更好的性能指标,但两者之间一般呈现一定的正相关性。
(5)回顾​​​Pytorch版本的RNN实践​​​。
(6)CNN、RNN、词向量和胶囊网络,都是需要在一个地方用到相同的思想,即可以在这些地方使用相同的权重,使得这些权重有更多的样本可以学习并提高泛化能力,从而让权重更加智能。

文章目录

一、Neural dependency parsing (20 mins)

1.1 特征指标回顾

以往的parsing的问题:
稀疏;不完整;计算复杂(超过95%的时间都用于特征计算)

A neural dependency parser [Chen and Manning 2014]
斯坦福依赖关系的英语解析结果指标:

UAS (unlabeled attachment score) 指 无标记依存正确率 ,
LAS (labeled attachment score) 指有标记依存正确率。

  • Unlabeled attachment score (UAS) = head
  • Labeled attachment score (LAS) = head and label

【CS224n】(lecture5)Language Models and RNN_神经网络

1.2 first win:分布式表征

将每个单词表示为一个d维稠密向量(如词向量),并且相似的单词之间应有相近的向量。POS(part-of-speech tags)词性标注和dependency labels也表示为d维向量。
NNS(复数名词)应该接近NN(单数名词)
num(数值修饰语)应该接近amod(形容词修饰语)。

我们根据堆栈 / 缓冲区中提取一组tokens:

【CS224n】(lecture5)Language Models and RNN_自然语言处理_02


将其转换为词向量并将它们联结起来作为输入层,再经过若干非线性的隐藏层,最后加入softmax layer得到shift-reduce解析器的动作。

1.3 second win:非线性分类器

一个softmax分类器:【CS224n】(lecture5)Language Models and RNN_权重_03

通过minimize loss来更新训练weight:【CS224n】(lecture5)Language Models and RNN_自然语言处理_04

传统的机器学习分类器,如贝叶斯、SVM、逻辑回归和softmax分类器等性能不太强,因为它们是用线性的decision boundaries进行分类。而非线性的decision boundaries才能像如下右图的效果进行分类:

【CS224n】(lecture5)Language Models and RNN_语言模型_05

1.4 Neural Dependency Parser Model Architecture

【CS224n】(lecture5)Language Models and RNN_语言模型_06


Dependency parsing for sentence structure

神经网络可以准确地确定句子的结构,支持解释,神经网络能够训练出一个简单且性能更优秀的dependency parser:

【CS224n】(lecture5)Language Models and RNN_权重_07

Further developments in transition-based neural dependency parsing

这项工作google一直在研究,用更大更深的网络和更好调优的超参数;使用beam search;全局、条件随机场CRF推理出决策序列。

SyntaxNet and the Parsey McParseFace model (2016):

【CS224n】(lecture5)Language Models and RNN_自然语言处理_08

1.5 Graph-based dependency parsers

为每条边的每⼀个可能的依赖关系计算⼀个分数

然后将每个单词的边缘添加到其得分最高的候选头部

并对每个单词重复相同的操作

【CS224n】(lecture5)Language Models and RNN_自然语言处理_09

二、A bit more about neural networks (15 mins)

2.1 正则化Regularization

如果特征很多,为了防止过拟合,可以对损失函数加上L2正则化:【CS224n】(lecture5)Language Models and RNN_神经网络_10

【CS224n】(lecture5)Language Models and RNN_语言模型_11

2.2 Dropout

如果模型参数过多,训练样本少,训练出来的模型容易过拟合(即model在训练数据集上损失函数较小,预测的accuracy较高;但是在测试集上相反)。

  • Dropout 可以看作是bagging的一种近似方法
  • 训练时是对子网络的训练,预测则是对子网络的ensemble

2.3 “Vectorization”向量化

可以看到用矩阵比单纯for循环计算要快:

【CS224n】(lecture5)Language Models and RNN_自然语言处理_12

2.4 Non-linearities, old and new

各种激活函数:

【CS224n】(lecture5)Language Models and RNN_语言模型_13

2.5 Parameter Initialization 变量初始化

【CS224n】(lecture5)Language Models and RNN_自然语言处理_14

2.6 Optimizers 优化器

  • 一般使用SGD就够了,但是为了得到更好结果,我们需要手动微调学习率
  • 为了应对更复杂的网络,可使用更复杂的自适应性优化器(that scale the parameter
    adjustment by an accumulated gradient.)
  • 其他优化器:Adagrad、RMSprop、Adam(常用)、SparseAdam等

2.7 Learning Rates 学习率

  • 学习速率太大则模型可能发散或不收敛;太小则训练时间长;
  • 随着训练的推进,可以适当减低学习率:可以手工调整,每k个周期学习率减半;或者根据公式调整:【CS224n】(lecture5)Language Models and RNN_神经网络_15,t为第t个epoch轮次。

三、Language modeling + RNNs (45 mins)

3.1 Language Modeling

语言建模的任务:预测下一个单词是啥。

即给定单词序列 【CS224n】(lecture5)Language Models and RNN_自然语言处理_16 计算下一个单词【CS224n】(lecture5)Language Models and RNN_权重_17(可以是词表中的任意单词)的概率分布:【CS224n】(lecture5)Language Models and RNN_自然语言处理_18

【CS224n】(lecture5)Language Models and RNN_语言模型_19

  • 上面这样的系统叫做语言模型;还可以将语言模型看作是将一个概率分配给一段文本的系统
  • 如果我们有一段文本【CS224n】(lecture5)Language Models and RNN_权重_20,则这段文本的概率(根据语言模型)为:【CS224n】(lecture5)Language Models and RNN_语言模型_21
    思路:收集关于不同n-gram出现频率的统计数据,并使用这些数据预测下⼀个单词。

3.2 n-gram Language Models

(1)介绍

句子:the students opened their ______
定义 :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”
1.马尔科夫假设

马尔科夫假设:假设【CS224n】(lecture5)Language Models and RNN_权重_17只依赖于前面的n-1个单词【CS224n】(lecture5)Language Models and RNN_语言模型_23

具体含义:

【CS224n】(lecture5)Language Models and RNN_语言模型_24

2.一个4-gram栗子

【CS224n】(lecture5)Language Models and RNN_自然语言处理_25


例如,假设在语料库中:

“students opened their” 出现了1000次

“students opened their books” 出现了400次

【CS224n】(lecture5)Language Models and RNN_语言模型_26

“students opened their exams” 出现了100次

【CS224n】(lecture5)Language Models and RNN_权重_27

(2)Sparsity Problems with n-gram Language Models

解决n-gram模型的稀疏问题。

【CS224n】(lecture5)Language Models and RNN_权重_28


问题 :如果“students open their 【CS224n】(lecture5)Language Models and RNN_语言模型_29” 从未出现在数据中,那么概率值为 0

(Partial)解决方案 :为每个 【CS224n】(lecture5)Language Models and RNN_神经网络_30 添加极小数 【CS224n】(lecture5)Language Models and RNN_语言模型_31 。这叫做平滑。这使得词表中的每个单词都至少有很小的概率。

问题 :如果“students open their” 从未出现在数据中,那么我们将无法计算任何单词 的概率值
(Partial)解决方案 :将条件改为“open their”。这叫做后退

Note: n 的增加使稀疏性问题变得更糟。⼀般情况下 n 不能大于5。

(3)Storage Problems with n-gram Language Models

【CS224n】(lecture5)Language Models and RNN_神经网络_32


增加 n 或增加语料库都会增加模型大小。

(4)n-gram语言模型栗子

我们可以建立⼀个超过170万个单词库(Reuters)的简单的三元组语言模型。

可以参考:https://nlpforhackers.io/language-models/

【CS224n】(lecture5)Language Models and RNN_自然语言处理_33


稀疏性问题:概率分布的区分度不大,可以看到上面前两个都是概率相同,都只出现过4次。

3.3 Generating text with a n-gram Language Model

可以通过语言模型来生成文本。

【CS224n】(lecture5)Language Models and RNN_语言模型_34


生成的文本为:

today the price of gold per ton , while production of shoe 
lasts and shoe industry , the bank intervened just after it
considered and rejected an imf demand to rebuild depleted
european stocks , sept 30 end primary 76 cts a share .

可以上看上面生成的文本,虽然语法基本正确,但是语句并不连贯,如果考虑 n=3 以上,可以更好地模拟语言,但是随着 n 增大,模型的稀疏性问题也会更大。

3.4 基于窗口的神经网络语言模型

window-based neural model在lecture 3 中提到,用于命名实体识别(Named Entity Recognition)。

【CS224n】(lecture5)Language Models and RNN_语言模型_35


根据滑动窗口,得到的input样本,输入网络(和NER一样的网络结构)中:

【CS224n】(lecture5)Language Models and RNN_自然语言处理_36


Approximately: Y. Bengio, et al. (2000/2003): A Neural Probabilistic Language Model

模型的改进:没有稀疏性问题;不需要观察到所有的n-grams
存在的问题:

  • 固定窗口太小,即使窗口再大也可能不够
  • 扩大窗口就需要扩大权重矩阵【CS224n】(lecture5)Language Models and RNN_权重_37
  • 【CS224n】(lecture5)Language Models and RNN_语言模型_38【CS224n】(lecture5)Language Models and RNN_自然语言处理_39乘以完全不同的权重,输入的处理不对称

我们需要一个可以处理任意长度的input的网络结构。

3.5 RNNs

(1)介绍

背景:生活中有很多序列化结构数据:

  • 文本:字母和词汇的序列
  • 语音:音节的序列
  • 视频:图像帧的序列
  • 时态数据:气象观测数据,股票交易数据、房价数据等

【CS224n】(lecture5)Language Models and RNN_权重_40


RNN的一般结构:

【CS224n】(lecture5)Language Models and RNN_自然语言处理_41


其中各个符号的表示:

  • 【CS224n】(lecture5)Language Models and RNN_自然语言处理_42分别表示的是【CS224n】(lecture5)Language Models and RNN_语言模型_43时刻的输入、记忆和输出;
  • 【CS224n】(lecture5)Language Models and RNN_语言模型_44是RNN的连接权重,
  • 【CS224n】(lecture5)Language Models and RNN_语言模型_45是RNN的偏置,
  • 【CS224n】(lecture5)Language Models and RNN_神经网络_46是激活函数,
  • 【CS224n】(lecture5)Language Models and RNN_自然语言处理_47通常选tanh或sigmoid,
  • 【CS224n】(lecture5)Language Models and RNN_自然语言处理_48通常选用softmax。其中 softmax 函数,用于分类问题的概率计算。本质上是将一个K维的任意实数向量压缩 (映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)之间。这里就是输出层计算【CS224n】(lecture5)Language Models and RNN_语言模型_43时刻词表上的概率分布。
    【CS224n】(lecture5)Language Models and RNN_自然语言处理_50

RNN案例

重复使用相同的权重矩阵 【CS224n】(lecture5)Language Models and RNN_语言模型_51

【CS224n】(lecture5)Language Models and RNN_自然语言处理_52


【CS224n】(lecture5)Language Models and RNN_自然语言处理_53


RNN的优势:

  • 可以处理任意长度的input
  • 步骤 t 的计算可以使用来自之前所有步骤的信息,而不仅是一个窗口
  • 模型大小不会 随着输入的增加而增加
  • 在每个时间步上应用相同的权重,因此在处理输入时具有对称性

RNN的劣势:(后面课程会继续讲)

  • RNN计算速度慢。因为每个时间【CS224n】(lecture5)Language Models and RNN_语言模型_43
  • 在实践中,很难从许多步骤中获取信息,因为存在梯度消失和爆炸问题。

(2)训练RNN模型

获取一个较大的文本语料库(单词序列)
输入RNN-LM:计算每个步骤 t 的输出分布,即预测到目前为止,每个单词的概率分布。
步骤 t 上的损失函数为预测概率 【CS224n】(lecture5)Language Models and RNN_权重_55 与真实下一个单词 【CS224n】(lecture5)Language Models and RNN_权重_56【CS224n】(lecture5)Language Models and RNN_权重_57的独热向量)之间的交叉熵。【CS224n】(lecture5)Language Models and RNN_神经网络_58

将其去平均,得到整个训练集的总体损失函数:
【CS224n】(lecture5)Language Models and RNN_权重_59

(3)Backpropagation for RNNs

反向传播:

【CS224n】(lecture5)Language Models and RNN_权重_60

(4)Generating text with an RNN Language Model

(5)Evaluating Language Models

标准语言模型评估指标是 perplexity 困惑度(该值越小越好)

困惑度的基本思想:给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完后,测试集中的句子都是正常的句子,则:

【CS224n】(lecture5)Language Models and RNN_语言模型_61


(1)上面取了一个几何平均值的倒数;

(2)困惑度越小,句子概率越大,语言模型越好。

这种做法和交叉熵损失函数的指数类似:
【CS224n】(lecture5)Language Models and RNN_语言模型_62
预测输入、语音识别、手写识别、拼写/语法修正、身份识别、机器翻译、摘要、对话。

几种语言模型的困惑度的比较:

【CS224n】(lecture5)Language Models and RNN_权重_63

四、小结

4.1 Language Modeling

语言模型是一项 基准测试 任务,它帮助我们 衡量 我们在理解语言方面的进展。生成下一个单词,需要语法,句法,逻辑,推理,现实世界的知识等。

语言建模是许多NLP任务的子部分,尤其是涉及生成文本和估计文本概率的任务:

4.2 RNNs有啥用

RNN除了我们提到的序列标注、文本分类(情感分析等)、生成文本等,RNN还能作为一个编码器,如应用在QA问答系统、机器翻译等。

【CS224n】(lecture5)Language Models and RNN_权重_64


各种不同的RNN结构:

【CS224n】(lecture5)Language Models and RNN_神经网络_65

Reference

(1)课程ppt:https://web.stanford.edu/class/cs224n/slides/
(2)Speech and Language Processing :https://web.stanford.edu/~jurafsky/slp3/
(3)课程官网:https://see.stanford.edu/Course/CS224N#course-details
(4)https://nlpforhackers.io/language-models/
(5)https://datawhalechina.github.io/unusual-deep-learning/#/06.RNN
(6)​​​CS224N笔记(五)——语言模型和RNN​