一、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分类器:
传统的机器学习分类器,如贝叶斯、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个周期学习率减半;或者根据公式调整:l r = l r 0 e − k t l r=l r_{0} e^{-k t}lr=lr
0
e
−kt
,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.马尔科夫假设
马尔科夫假设:假设x ( t + 1 ) \boldsymbol{x}^{(t+1)}x
(t+1)
只依赖于前面的n-1个单词
(2)Sparsity Problems with n-gram Language Models
解决n-gram模型的稀疏问题。
问题 :如果“students open their w ww” 从未出现在数据中,那么概率值为 0
(Partial)解决方案 :为每个 w ∈ V w \in Vw∈V 添加极小数 δ \deltaδ 。这叫做平滑。这使得词表中的每个单词都至少有很小的概率。
问题 :如果“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
可以通过语言模型来生成文本。
生成的文本为:
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)。
根据滑动窗口,得到的input样本,输入网络(和NER一样的网络结构)中:
Approximately: Y. Bengio, et al. (2000/2003): A Neural Probabilistic Language Model
模型的改进:没有稀疏性问题;不需要观察到所有的n-grams
存在的问题:
固定窗口太小,即使窗口再大也可能不够
扩大窗口就需要扩大权重矩阵W WW
x ( 1 ) x^{(1)}x
(1)
和x ( 2 ) x^{(2)}x
(2)
乘以完全不同的权重,输入的处理不对称
我们需要一个可以处理任意长度的input的网络结构。
3.5 RNNs
(1)介绍
背景:生活中有很多序列化结构数据:
文本:字母和词汇的序列
语音:音节的序列
视频:图像帧的序列
时态数据:气象观测数据,股票交易数据、房价数据等
RNN的一般结构:
其中各个符号的表示:
RNN案例
重复使用相同的权重矩阵 W WW。
RNN的优势:
可以处理任意长度的input
步骤 t 的计算可以使用来自之前所有步骤的信息,而不仅是一个窗口
模型大小不会 随着输入的增加而增加
在每个时间步上应用相同的权重,因此在处理输入时具有对称性
RNN的劣势:(后面课程会继续讲)
RNN计算速度慢。因为每个时间 t tt 的计算都要先计算之前的序列,即不能并行计算多个时间步。
在实践中,很难从许多步骤中获取信息,因为存在梯度消失和爆炸问题。
(2)训练RNN模型
获取一个较大的文本语料库(单词序列)
输入RNN-LM:计算每个步骤 t 的输出分布,即预测到目前为止,每个单词的概率分布。
步骤 t 上的损失函数为预测概率 y ^ ( t ) \hat{\boldsymbol{y}}^{(t)}
y
^
(t)
与真实下一个单词 y ( t ) \boldsymbol{y}^{(t)}y
(t)
(x t + 1 x^{t+1}x
t+1
的独热向量)之间的交叉熵。
(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结构: