N-gram统计语言模型
- 统计语言模型: 统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性
例如:一个句子由w1,w2,w3,w4,w5,…….这些词组,使得P(w1,w2,w3,w4,w5……)概率大(可以从训练语料中得出)
-
N-Gram:
N元模型就是假设当前词的出现概率只与它前面的N-1个词有关
- 语言是一种序列,词与词之间并不是相互独立
- 一元模型(unigram model):假设某个出现的概率与前面所有词无关
- P(s) = P(w1)P(w2)P(w3)…P(w4)
- 二元模型(bigram model):假设某个出现的概率与前面一个词相关
- P(s) = P(w1)P(w2|w1)P(w3|w2)…P(w_i|w_i-1)
- 三元模型(trigram model):假设某个出现的概率与前面两个词相关
- P(s) = P(w1)P(w2|w1)P(w3|w1,w2)…P(w_i|w_i-2,w_i-1)
注:目前使用较多的是三元模型,由于训练语料限制,无法追求更大的N,并且N越大导致计算量越来越大
N-gram统计语言模型缺点
N-gram语言模型还存在OOV问题(Out Of Vocabulary),也就是序列中出现了词表外词(也叫做未登录词),或者说在测试集和验证集上出现了训练集中没有过的词。它采用一般的解决办法:
- 设置一个词频阈值,只有高于该阈值的词才会加入词表。
- 所有低于阈值的词替换为 UNK(一个特殊符号)。
NNLM神经网络语言模型
神经网络语言模型NNLM依然是一个概率语言模型,它通过神经网络来计算概率语言模型中每个参数。
-
NNLM模型解释:
-
输入层:将context(w)每个词映射成一个长度为m的词向量(长度训练者指定,一般使用tf.random_normal随机初始化生成nxm的矩阵),词向量在开始是随机的,也是超参数参与网络训练。
-
使用随机初始化的方法建立一个|m|×N个词大小的查找表(lookup table)
-
context(w):可以称之为上下文窗口长度,类似N-gram取多少个词作为添加。例如上下文窗口长度为c=3,则循环取四个词,前三个为特征值,最后一个为目标值。
-
投影层:将所有的上下文此项来给你拼接成一个长向量,作为目标w的特征向量。长度为m(n-1)
-
隐藏层:拼接后的向量会经过一个规模为h的隐藏层,论文中使用tanh
-
$$
y=U \cdot \tanh (W x+b 1)+b 2
$$ -
tanh为激活函数
-
输出层:最后输出会通过softmax输出所有n个词的大小概率分布
-
-
训练过程:
-
训练时,使用交叉熵作为损失函数,反向传播算法进行训练。初始化的矩阵查找表和神经网络的参数w b同时训练更新。
-
当训练完成时就得到了 N-gram 神经语言模型,以及副产品词向量
-
Pingback: 学习笔记:深度学习(5)——词向量的相关概念 – 源码巴士