传送门
笔者在总结时跳过了第3,4,5节课。其中第3,4节课分别介绍了神经网络和反向传播,笔者假定读者有着基本的机器学习和神经网络相关的知识,所以掠过了这两章内容。其中第5节课介绍了语法结构,但是因为与笔者目前方向不一致,故略去。
本节为第6节课,介绍了Language Model并且以此为契机引入了RNN模型。
Language Model 语言模型
天气预报说今天下雨,所以出门要________
语言模型要做的事情,就是给出一段文字,由模型生成其后的内容。语言模型是NLP领域内一个bench mark的问题。
n-gram Language Model
假设一段文字给出了前 n n n 个词 x ( 1 ) , x ( 2 ) , . . . , x ( n ) x^{(1)},x^{(2)},...,x^{(n)} x(1),x(2),...,x(n),要生成的词为 x ( n + 1 ) x^{(n+1)} x(n+1) 的概率为
P ( x ( n + 1 ) ∣ x ( 1 ) , x ( 2 ) , . . . , x ( n ) ) P(x^{(n+1)}|x^{(1)},x^{(2)},...,x^{(n)}) P(x(n+1)∣x(1),x(2),...,x(n))
如果可以计算出这个分布,就可以得到一个已知上文生成下文的概率分布,从而通过选取概率最大的结果来实现生成操作。改变 n n n 的值,即可改变上文窗口的大小,对模型做出调整。那么可以直接暴力遍历整个语料库,并且计算概率,结果保存在一个巨大的概率矩阵中。
这种做法类似于一个马尔可夫模型,其中每个节点为n个前后相继的词,也就是说其状态空间为 ( ∣ X ∣ ) n (|X|)^{n} (∣X∣)n ,其中 ∣ X ∣ |X| ∣X∣ 为词汇集的大小。然后暴力枚举语料库,并且人工标注每个转移发生的概率,需要注意的是,可能发生的转移只有 { a , b , . . . , c } → { b , . . . , c , d } \{a,b,...,c\}\rightarrow\{b,...,c,d\} { a,b,...,c}→{ b,...,c,d}
这种做法有着如下致命缺陷:
- 只能有几个上文与之相关,其余信息都被抛弃,如上文的例子,如果n过小的话则无法获取下雨的信息,则难以猜出这个词应该是伞。
- 存储容量巨大,上述的概率要完全存储需要存储 ( ∣ X ∣ ) n + 1 (|X|)^{n+1} (∣X∣