语言模型

语言模型计算一串句子的概率

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

传统的语言模型:通常我们会以一个突破点为基础条件在尝试预测一个词之前 我们会尝试仅仅根据它前面的n个词语预测下一个词 这是使用传统的机器学习模型必要的 但却是错误的

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 但是占用的内存较大 效率不好

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 解决办法:RNN 从理论层面上来讲 我们可以根据所有前序字组来进行预测 如此一来 内存需求只会取决于字词的数量规模而不受我们想依据的序列长度的影响

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 RNN语言模型

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 主要思想:我们使用相同的权重进行更新在所有时间步长中

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 如何进行训练 仍然可以利用cross entropy

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 整个语料上的交叉熵误差为:J 如果以2为底数会得到“perplexity困惑度”,代表模型下结论时的困惑程度,越小越好:

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

训练RNN很难--会产生梯度消失问题 定义一个简单的类递归神经网络 借助此神经网络 更加直观的理解梯度消失问题 并简化下游的数学计算

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

指数项(βWβh)^t−k在βWβh显著地大于或小于1的时候,经过足够多的t−k次乘法之后就会趋近于0或无穷大。小于1更常见,会导致很长时间之前的词语无法影响对当前词语的预测。

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 有个IPython Notebook专门演示梯度消失,对于如下数据:

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 学习非线性的决策边界:

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

用经典的三层网络结构,得到蓝色的第一层梯度的长度和绿色的第二层梯度的长度,可视化:

sigmoid**函数下:

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 ReLU**函数下:

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

梯度爆炸 一种暴力的方法是,当梯度的长度大于某个阈值的时候,将其缩放到某个阈值。虽然在数学上非常丑陋,但实践效果挺好。其直观解释是,在一个只有一个隐藏节点的网络中,损失函数和权值w偏置b构成error surface,其中有一堵墙:

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 每次迭代梯度本来是正常的,一次一小步,但遇到这堵墙之后突然梯度爆炸到非常大,可能指向一个莫名其妙的地方(实线长箭头)。但缩放之后,能够把这种误导控制在可接受的范围内(虚线短箭头)。

但这种trick无法推广到梯度消失,因为你不想设置一个最低值硬性规定之前的单词都相同重要地影响当前单词。

减缓梯度消失 与其随机初始化参数矩阵,不如初始化为单位矩阵。这样初始效果就是上下文向量和词向量的平均。然后用ReLU**函数。这样可以在step多了之后,依然使得模型可训练

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 让困惑度变小

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

softmax有时候很大 词表太大的话,softmax很费力。一个技巧是,先预测词语的分类(比如按词频分),然后在分类中预测词语。分类越多,困惑度越小,但速度越慢。所以存在一个平衡点:

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 最后一个小技巧:记录每个t的误差不要丢,反向传播的时候将其累加起来。

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 序列模型应用到其他任务上

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

其中,意见挖掘任务就是将每个词语归类为: DSE:直接主观描述(明确表达观点等)ESE:间接主观描述(间接地表达情感等)

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

 实现这个任务的朴素网络结构就是一个裸的RNN:

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

但是这个网络无法利用当前词语的下文辅助分类决策,解决方法是使用一些更复杂的RNN变种。这里箭头表示从左到右或从右到左前向传播,对于每个时刻t的预测,都需要来自双向的特征向量,拼接后进行分类。箭头虽然不同,但参数还是同一套参数

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

Deep 双边 RNN 理解了上图之后,再加几个层,每个时刻不但接受上个时刻的特征向量,还接受来自下层的特征表示:

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式

如何评测 评测方法是标准的F1(因为标签样本不均衡),在不同规模的语料上试验不同层数的影响:

斯坦福CS224n NLP课程【八】——RNN (循环神经网络)和语言模式