CS224N(六)Recurrent Neural Networks and Language Models
【笔记3-1】CS224N课程笔记 - 深度自然语言处理
【笔记3-2】CS224N课程笔记 - 词向量表示 word2vec
【笔记3-3】CS224N课程笔记 - 高级词向量表示
【笔记3-4】CS224N课程笔记 - 分类与神经网络
【笔记3-5】CS224N课程笔记 - 依存分析
【笔记3-7】CS224N课程笔记 - 神经机器翻译seq2seq注意力机制
【笔记3-8】CS224N课程笔记 - 卷积神经网络
CS224n:深度学习的自然语言处理(2017年冬季)1080p https://www.bilibili.com/video/av28030942/
关键词:语言模型,RNN,双向RNN,deep RNN,GRU,LSTM
语言模型
语言模型介绍
语言模型用于计算序列当中一系列单词出现的概率。单词产生的概率与之前生成过的单词有关,并且是在一定窗口范围内有关,而不是与所有产生过的词语相关。因此序列生成概率可以表示为: P ( w 1 , . . . , w m ) = ∏ i = 1 m P ( w i ∣ w 1 , . . . , w i − 1 ) ≈ ∏ i = 1 m P ( w i ∣ w i − n , . . . , w i − 1 ) P(w_1,...,w_m)=\prod_{i=1}^{m}P(w_i|w_1,...,w_{i-1})\approx\prod_{i=1}^{m}P(w_i|w_{i-n},...,w_{i-1}) P(w1,...,wm)=i=1∏mP(wi∣w1,...,wi−1)≈i=1∏mP(wi∣wi−n,...,wi−1)这一概率计算方法对于语音和翻译系统在确定单词序列是否为输入句子的准确翻译时特别有用。在现有翻译系统中,对于每个短语/句子,软件都会生成一系列可选的单词序列并对它们进行评分,以确定最可能的翻译序列。
在机器翻译中,模型为每个备选的输出词序列分配一个优等性评分来为输入短语选择最佳词序。它通过一个概率函数为每个候选项分配一个分数,得分最高的序列是翻译的输出。如,与“small the is cat”相比,“the cat is small”得分更高;与“walking house after school”相比,“walking home after school”得分更高。
n-gram
为了计算上述概率,可以将每个n-gram的计数与每个单词的频率进行比较,称为n-gram语言模型。例如,如果模型采用bi-gram,则通过将一个单词与其前一个单词结合计算得到的每个bi-gram的频率将除以相应的uni-gram的频率,用这种思路可以得到bigram和trigram计算方法: P ( w 2 ∣ w 1 ) = c o u n t ( w 1 , w 2 ) c o u n t ( w 1 ) P ( w 3 ∣ w 1 , w 2 ) = c o u n t ( w 1 , w 2 , w 3 ) c o u n t ( w 1 , w 2 ) P(w_2|w_1)=\frac{count(w_1,w_2)}{count(w_1)}\\P(w_3|w_1,w_2)=\frac{count(w_1,w_2,w_3)}{count(w_1,w_2)} P(w2∣w1)=count(w1)count(w1,w2)P(w3∣w1,w2)=count(w1,w2)count(w1,w2,w3)上述方程的计算思路是:基于一个固定的上下文窗口(前n个单词)预测下一个单词。但是某些情况下,n个单词的窗口可能不足以捕获上下文。例如“As the proctor started the clock, the students opened their…”。如果窗口为3,“students opened their”,那么基于语料库计算的概率可能提示下一个单词是“books”,然而如果n足够大,使得上下文包含“proctor”,则可能会选择“exam”。
这就引出了n-gram的两个问题:稀疏性和存储问题。
- 稀疏性问题
模型的稀疏性问题源于两个方面。
首先,如果 w 1 , w 2 , w 3 w_1,w_2,w_3 w1,w2,w3从未同时出现在语料库中,则 w 3 w_3 w3出现的概率为0。解决这个问题可以在词汇表中每个单词的计数中添加一个较小的 σ \sigma σ,称为平滑。其次,如果 w 1 , w 2 w_1,w_2 w1,w2在语料库中没有一起出现过,就无法计算 w 3 w_3 w3的概率。解决这个问题可以只对 w 2 w_2 w2设定条件,称为后退。n的增加使稀疏性问题变得更糟。通常n = 5。 - 存储问题
需要存储在语料库中看到的所有n-gram的计数。随着n的增加(或者语料库大小的增加),模型的大小也随之增加。
基于窗口的神经语言模型
Bengio等人在神经概率语言模型中首次解决了上述问题,提出了大规模的自然语言处理深度学习模型。该模型学习单词的分布式表示,以及用这些表示来表示的单词序列的概率函数。下图显示了相应的神经网络架构。输入的词向量同时供隐藏层和输出层使用。
图中的softmax函数可以写成:(注意式子中各个权重矩阵的训练对象) y ^ = s o f t m a x ( W ( 2 ) t a n h ( W ( 1 ) x + b ( 1 ) ) + W ( 3 ) x + b ( 3 ) ) \hat{y}=softmax(W^{(2)}tanh(W^{(1)}x+b^{(1)})+W^{(3)}x+b^{(3)}) y^=softmax(W(2)tanh(W(1)x+b(1))+W