学习总结
(1)语言模型: 预测下⼀个单词 的系统
(2)递归神经网络:一系列神经网络
- 采用任意长度的顺序输入
- 在每一步上应用相同的权重
- 可以选择在每一步上生成输出
(3)递归神经网络 ≠ 语言模型。RNNs构建LM。
(4)困惑度(内部评价方法)越小,单词序列的概率则越大,模型能够更好地解释测试集中的数据。注意:困惑度越低的模型并不总是能在外部任务上取得更好的性能指标,但两者之间一般呈现一定的正相关性。
(5)回顾Pytorch版本的RNN实践。
(6)CNN、RNN、词向量和胶囊网络,都是需要在一个地方用到相同的思想,即可以在这些地方使用相同的权重,使得这些权重有更多的样本可以学习并提高泛化能力,从而让权重更加智能。
文章目录
- 1.1 特征指标回顾
- 1.2 first win:分布式表征
- 1.3 second win:非线性分类器
- 1.4 Neural Dependency Parser Model Architecture
- 1.5 Graph-based dependency parsers
- 2.1 正则化Regularization
- 2.2 Dropout
- 2.3 “Vectorization”向量化
- 2.4 Non-linearities, old and new
- 2.5 Parameter Initialization 变量初始化
- 2.6 Optimizers 优化器
- 2.7 Learning Rates 学习率
- (1)介绍
- (2)Sparsity Problems with n-gram Language Models
- (3)Storage Problems with n-gram Language Models
- (4)n-gram语言模型栗子
- (1)介绍
- RNN案例
- (2)训练RNN模型
- (3)Backpropagation for RNNs
- (4)Generating text with an RNN Language Model
- (5)Evaluating Language Models
- 四、小结
一、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
1.2 first win:分布式表征
将每个单词表示为一个d维稠密向量(如词向量),并且相似的单词之间应有相近的向量。POS(part-of-speech tags)词性标注和dependency labels也表示为d维向量。
NNS(复数名词)应该接近NN(单数名词)
num(数值修饰语)应该接近amod(形容词修饰语)。
我们根据堆栈 / 缓冲区中提取一组tokens:
将其转换为词向量并将它们联结起来作为输入层,再经过若干非线性的隐藏层,最后加入softmax layer得到shift-reduce解析器的动作。
1.3 second win:非线性分类器
一个softmax分类器:
通过minimize loss来更新训练weight:
传统的机器学习分类器,如贝叶斯、SVM、逻辑回归和softmax分类器等性能不太强,因为它们是用线性的decision boundaries进行分类。而非线性的decision boundaries才能像如下右图的效果进行分类:
1.4 Neural Dependency Parser Model Architecture
Dependency parsing for sentence structure
神经网络可以准确地确定句子的结构,支持解释,神经网络能够训练出一个简单且性能更优秀的dependency parser:
Further developments in transition-based neural dependency parsing
这项工作google一直在研究,用更大更深的网络和更好调优的超参数;使用beam search;全局、条件随机场CRF推理出决策序列。
SyntaxNet and the Parsey McParseFace model (2016):
1.5 Graph-based dependency parsers
为每条边的每⼀个可能的依赖关系计算⼀个分数
然后将每个单词的边缘添加到其得分最高的候选头部
并对每个单词重复相同的操作
二、A bit more about neural networks (15 mins)
2.1 正则化Regularization
如果特征很多,为了防止过拟合,可以对损失函数加上L2正则化:
2.2 Dropout
如果模型参数过多,训练样本少,训练出来的模型容易过拟合(即model在训练数据集上损失函数较小,预测的accuracy较高;但是在测试集上相反)。
- Dropout 可以看作是bagging的一种近似方法
- 训练时是对子网络的训练,预测则是对子网络的ensemble
2.3 “Vectorization”向量化
可以看到用矩阵比单纯for循环计算要快:
2.4 Non-linearities, old and new
各种激活函数:
2.5 Parameter Initialization 变量初始化
2.6 Optimizers 优化器
- 一般使用SGD就够了,但是为了得到更好结果,我们需要手动微调学习率
- 为了应对更复杂的网络,可使用更复杂的自适应性优化器(that scale the parameter
adjustment by an accumulated gradient.) - 其他优化器:Adagrad、RMSprop、Adam(常用)、SparseAdam等
2.7 Learning Rates 学习率
- 学习速率太大则模型可能发散或不收敛;太小则训练时间长;
- 随着训练的推进,可以适当减低学习率:可以手工调整,每k个周期学习率减半;或者根据公式调整:,t为第t个epoch轮次。
三、Language modeling + RNNs (45 mins)
3.1 Language Modeling
语言建模的任务:预测下一个单词是啥。
即给定单词序列 计算下一个单词(可以是词表中的任意单词)的概率分布:
- 上面这样的系统叫做语言模型;还可以将语言模型看作是将一个概率分配给一段文本的系统
- 如果我们有一段文本,则这段文本的概率(根据语言模型)为:
思路:收集关于不同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.马尔科夫假设
马尔科夫假设:假设只依赖于前面的n-1个单词
具体含义:
2.一个4-gram栗子
例如,假设在语料库中:
“students opened their” 出现了1000次
“students opened their books” 出现了400次
“students opened their exams” 出现了100次
(2)Sparsity Problems with n-gram Language Models
解决n-gram模型的稀疏问题。
问题 :如果“students open their ” 从未出现在数据中,那么概率值为 0
(Partial)解决方案 :为每个 添加极小数 。这叫做平滑。这使得词表中的每个单词都至少有很小的概率。
问题 :如果“students open their” 从未出现在数据中,那么我们将无法计算任何单词 的概率值
(Partial)解决方案 :将条件改为“open their”。这叫做后退。
Note: n 的增加使稀疏性问题变得更糟。⼀般情况下 n 不能大于5。
(3)Storage Problems with n-gram Language Models
增加 n 或增加语料库都会增加模型大小。
(4)n-gram语言模型栗子
我们可以建立⼀个超过170万个单词库(Reuters)的简单的三元组语言模型。
可以参考:https://nlpforhackers.io/language-models/
稀疏性问题:概率分布的区分度不大,可以看到上面前两个都是概率相同,都只出现过4次。
3.3 Generating text with a n-gram Language Model
可以通过语言模型来生成文本。
生成的文本为:
可以上看上面生成的文本,虽然语法基本正确,但是语句并不连贯,如果考虑 n=3 以上,可以更好地模拟语言,但是随着 n 增大,模型的稀疏性问题也会更大。
3.4 基于窗口的神经网络语言模型
window-based neural model在lecture 3 中提到,用于命名实体识别(Named Entity Recognition)。
根据滑动窗口,得到的input样本,输入网络(和NER一样的网络结构)中:
Approximately: Y. Bengio, et al. (2000/2003): A Neural Probabilistic Language Model
模型的改进:没有稀疏性问题;不需要观察到所有的n-grams
存在的问题:
- 固定窗口太小,即使窗口再大也可能不够
- 扩大窗口就需要扩大权重矩阵
- 和乘以完全不同的权重,输入的处理不对称
我们需要一个可以处理任意长度的input的网络结构。
3.5 RNNs
(1)介绍
背景:生活中有很多序列化结构数据:
- 文本:字母和词汇的序列
- 语音:音节的序列
- 视频:图像帧的序列
- 时态数据:气象观测数据,股票交易数据、房价数据等
RNN的一般结构:
其中各个符号的表示:
- 分别表示的是时刻的输入、记忆和输出;
- 是RNN的连接权重,
- 是RNN的偏置,
- 是激活函数,
- 通常选tanh或sigmoid,
- 通常选用softmax。其中 softmax 函数,用于分类问题的概率计算。本质上是将一个K维的任意实数向量压缩 (映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)之间。这里就是输出层计算时刻词表上的概率分布。
RNN案例
重复使用相同的权重矩阵 。
RNN的优势:
- 可以处理任意长度的input
- 步骤 t 的计算可以使用来自之前所有步骤的信息,而不仅是一个窗口
- 模型大小不会 随着输入的增加而增加
- 在每个时间步上应用相同的权重,因此在处理输入时具有对称性
RNN的劣势:(后面课程会继续讲)
- RNN计算速度慢。因为每个时间
- 在实践中,很难从许多步骤中获取信息,因为存在梯度消失和爆炸问题。
(2)训练RNN模型
获取一个较大的文本语料库(单词序列)
输入RNN-LM:计算每个步骤 t 的输出分布,即预测到目前为止,每个单词的概率分布。
步骤 t 上的损失函数为预测概率 与真实下一个单词 (的独热向量)之间的交叉熵。
将其去平均,得到整个训练集的总体损失函数:
(3)Backpropagation for RNNs
反向传播:
(4)Generating text with an RNN Language Model
(5)Evaluating Language Models
标准语言模型评估指标是 perplexity 困惑度(该值越小越好)
困惑度的基本思想:给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完后,测试集中的句子都是正常的句子,则:
(1)上面取了一个几何平均值的倒数;
(2)困惑度越小,句子概率越大,语言模型越好。
这种做法和交叉熵损失函数的指数类似:
预测输入、语音识别、手写识别、拼写/语法修正、身份识别、机器翻译、摘要、对话。
几种语言模型的困惑度的比较:
四、小结
4.1 Language Modeling
语言模型是一项 基准测试 任务,它帮助我们 衡量 我们在理解语言方面的进展。生成下一个单词,需要语法,句法,逻辑,推理,现实世界的知识等。
语言建模是许多NLP任务的子部分,尤其是涉及生成文本和估计文本概率的任务:
4.2 RNNs有啥用
RNN除了我们提到的序列标注、文本分类(情感分析等)、生成文本等,RNN还能作为一个编码器,如应用在QA问答系统、机器翻译等。
各种不同的RNN结构:
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