传送门
笔者在总结时跳过了第3,4,5节课。其中第3,4节课分别介绍了神经网络和反向传播,笔者假定读者有着基本的机器学习和神经网络相关的知识,所以掠过了这两章内容。其中第5节课介绍了语法结构,但是因为与笔者目前方向不一致,故略去。
本节为第6节课,介绍了Language Model并且以此为契机引入了RNN模型。
Language Model 语言模型
1 | 天气预报说今天下雨,所以出门要________ |
语言模型要做的事情,就是给出一段文字,由模型生成其后的内容。语言模型是NLP领域内一个bench mark的问题。
n-gram Language Model
假设一段文字给出了前
如果可以计算出这个分布,就可以得到一个已知上文生成下文的概率分布,从而通过选取概率最大的结果来实现生成操作。改变
这种做法类似于一个马尔可夫模型,其中每个节点为n个前后相继的词,也就是说其状态空间为
这种做法有着如下致命缺陷:
- 只能有几个上文与之相关,其余信息都被抛弃,如上文的例子,如果n过小的话则无法获取下雨的信息,则难以猜出这个词应该是伞。
- 存储容量巨大,上述的概率要完全存储需要存储
个概率,严格限制了n的大小,进而更加暴露了第一个缺点。 - 结果稀疏,对于相同的上文,其生成的下一个词的概率只分布在少数几个词上,在语料库中没有出现的搭配概率完全为0;即便出现了,其概率往往也不大。
所以考虑神经网络版本的n-gram Language Model。
Neural Language Model
还是一样的模型,只不过这一次我们用神经网络来代替暴力枚举马尔可夫模型中转移边的概率。即输入有序的n个词向量
的映射,并通过神经网络来学习这个映射。从而解决了基于概率矩阵的第2,3个问题,结果变成连续值,且只需要存储神经网络的权重即可。但是但是第一个问题仍然存在,且因为窗口固定,无法适应不同长度的文本。此外,每个位置上对于每个输入值带来的影响是独立计算的,但是事实上他们之间往往有着某些关系,该模型也无法刻画这种关系。
因此,引出循环神经网络RNN模型。
RNN
RNN和普通的神经网络相比,多了一个模型自带的参数,不妨记为 h,且有着一个time-step的概念,即每一时刻会发生一些不同的操作。假设在
其中,
(其中
则总损失函数可以表示为所有时刻之损失函数之均值,即
有了损失函数后,和对应的feature和label,待优化参数,则可以使用各种优化手段进行优化。
此外,需要补充的是,对于文本的开头和结尾要分别设置两个对应的词向量作为标识符,标点也同样处理,将这些非文本信息都视为独立的词进行处理即可。
考虑Language Model问题,在
但是RNN仍然有着一些缺陷:
- 因为要做大量矩阵运算,对于语料库中,每个词都要做若干次矩阵运算(还要BP),所以速度很慢
- 对于长序列而言,某个位置处的
与附近的 相关性大,而与较远的 相关性逐渐减弱至消失,需要其他手段来保存这些信息,长短时循环神经网络LSTM是解决该问题的一个有效手段。