一、语言模型
1.1 定义
语言模型Language Model,是指预测一个句子(词语有序序列)出现的概率的模型,即,一般可用于以下场景:
1. 判断什么词序出现的可能性更高:p(六点吃饭)>p(六点饭吃)
2. 判断在上下文中,什么词汇出现的可能性更高:p(七点下班回家)>p(七点下班回公司)
1.2 n-gram
语言模型一般基于一个错误但有必要的马尔科夫假设:一个单词的出现概率仅取决于前n个单词是什么,即
在足量数据的支撑下,概率可用频率估计:
当n越大时,模型的表现越好,但相应的,训练模型时所需的资源越多。
2 循环神经网络
2.1 next-word prediction
例:以next-word prediction任务为例,假设有句子
从而
我们可以以此构建出两种损失函数:一种是交叉熵损失函数
.
另一种是以,即perplexity作为损失函数
2.2 核心思想
第一,所有W均独立于t,也就是说,每一个时间步都共享参数,因此我们有“循环”的概念
第二,是随机初始辅助向量,它随着时间步而更新,目的是为了存储上文的信息。
2.3 梯度消失与梯度爆炸
在对W进行更新时,我们需要求解梯度
其中,
因此,如果t-k过大,就会导致多个梯度相乘,形成类似指数的运算结果,可能导致梯度过大(梯度爆炸)或者梯度过小(梯度消失)。
梯度爆炸的解决方法:裁剪,即在梯度下降更新参数时,使用。
梯度消失的解决方法:下节课详细讲述,有GRU、LSTM等经过改良的RNN版本。
2.4 双向RNN与深度双向RNN
双向RNN:上述过程的主要问题在于,判断一个位置的词汇出现条件概率只使用了上文的信息。但实际上基于我们对于语言的认知,结合上下文的信息才能更准确的判断一个空位应该填入什么词语。因此我们引入了双向RNN,即:
也就是说,我们从左到右和从右到左分别计算一个辅助向量,然后结合两者做出预测。
深度双向RNN:如果我们认为一层网络不足以刻画次序关系,我们可以采用多层循环神经网络来刻画,即: