神经网络模型不仅可以得到语言模型的参数还顺便得到了词向量,即word embedding(南大周志华翻译成词嵌入),亦即得到了词的向量表示。最早用神经网络的思路训练神经网络的模型是百度IDL的徐伟2000提出的。而这篇《A neural probabilistic langulage model》是Bingio在2003年发表在JMLR上的文章。
本文需要概率论与随机过程的相关知识
语言模型
语言模型听起来非常高大上,其实做的事情很简单,计算一个句子出现的概率,或者说一组“单词”能组成一个句子的概率,例如:对于下面的两句话,s1.我在图书馆看书;s2.我在图书馆做饭。很明显s2不符合常理,而s1很合理,怎么会在图书馆做饭能,不应该是在厨房吗?在厨房做饭是大家基于平时的经验得到的结果,也就是该句子发生的概率更大或者更加合理。用概率的形式表达就是:$p(s1)>p(s2)$。但是一个句子出现的概率怎么计算呢?这就是语言模型的任务。
语言模型是根据一定的训练集合(语料库)得到的模型,该模型一般可以:
1).预测一个句子出现的概率;
2).根据不完整的句子前几个词来预测下一个词。一般的语言模型也就是统计语言模型。
统计语言模型可以计算一个句子的概率,接下来我们形式化的表示该模型。假设一个句子由T个词构成$S=(w_1,w_2,…,w_T)$,其中$w_i$表示一个单词,用$w_i^j$第$i$个词到第$j$个词的序列,则$w_1,w_2,…,w_T$的联合概率也就是S出现的概率计算如下:
$$p(S)=p(w_1^T)=p(w_1,w_2,…,w_T)$$
这就是句子的概率,根据 bayes公式得到:
$$p(w_1^T) = p(w_1)p(w_2|w_1)p(w_3|w_1^2)…p(w_T|w_1^{T-1})$$
其中的条件概率$p(w_1),p(w_2|w_1),p(w_3|w_1^2),…,p(w_T|w_1^{T-1})$就是语言模型的参数,如果得到了这些参数,我们就能够知道该句子的概率。上述例子s1=”我在/图书馆/看书”的概率计算如下:
$p(s1)=p(我在)p(图书馆|我在)p(看书|我在/图书馆)$
常见的参数求解的方法有n-gram模型,决策树,最大熵模型以及本文要介绍的神经网络模型。为了对参数的求解有更好理解,先介绍n-gram 模型。
N-gram 模型
由bayes定理有:
$$p(w_k|w_1^{k-1})=\frac {p(w_1^k)}{p(w_1^{k-1})}$$
$p(w_1^k)$表示词序列$w_1^k$出现的概率,这个概率可以通过预料中的计算所有该序列的数目得到。
$$p(w_1^k)=\frac {count(w_1^k)}{词序列综合}$$
$count(w_1^k)$表示词序列$w_1^k$在语料中出现的次数。同理:
$$p(w_1^{k-1})=\frac {count(w_1^{k-1})}{词序列综合}$$
这样两个概率相除就得到了条件概率:
$$p(w_k|w_1^{k-1})=\frac {count(w_1^k)}{count(w_1^{k-1})}$$
通过上式我们知道一个词的出现是和该词前面所有的词都相关,如果假设一个词的出现只和前面固定的词相关,比如在 Markov假设中,一个状态只和前一个状态相关。如果设定这样的一个固定值,可以降低不少的复杂度。另外一方面,从常识来看,一个词的出现只与它相邻的词相关,与较远距离的词几乎没有关系。这就是n-gram模型的基本思想,他做了一个n-1阶的Markov假设。
$$p(w_k|w_1^{k-1})=\frac {count(w_{k-n+1}^k)}{count(w_{k-n+1}^{k-1})}$$
n的大小完全决定于参数的规模,一般来说,n越大模型的效果也更好。但是由于其复杂度,一般n也不会取太大。
以上面的例子s1=”我在/ 图书馆/ 看书”中, 条件概率$p(看书|我在/图书馆)= \frac {count(我在/图书馆/看书)}{count(我在/图书馆)}$。
而1-gram模型中条件概率可以近似成 $p(看书|我在/图书馆)=p(看书|图书馆)=\frac {count(图书馆/看书)}{count(图书馆)}$。
神经网络模型(A neural probabilistic langulage model)
神经网络模型不仅可以得到语言模型的参数还顺便得到了词向量,即word embedding(南大周志华翻译成词嵌入),亦即得到了词的向量表示。最早用神经网络的思路训练神经网络的模型是百度IDL的徐伟2000提出的。而这篇《A neural probabilistic langulage model》是Bingio在2003年发表在JMLR上的文章。
Bengio的神经网络模型仍然是基于n-gram模型。
图中的wt-n+1,…,wt-1表示$w_t$的前n-1个词,现在同样的通过前n-1个词来预测下一个词$w_t$。以前n-1个词为输入层,中间一个隐藏层,输出层是softmax层,用来预测下一个词。或者简化成如下的四层:输入层-投影层-隐藏层-输出层。假设词可以用m维的向量来表示,输入层到投影层的过程就是将n-1个词的表示连接起来得到一个(n-1)m维的向量$X_w$,投影层到隐藏层是一个全连接的过程,得到一个$n_t$维度的向量$Z_w$,参数是W和p,然后隐藏层到输出层也是全连接的方式,输出层的维度等于字典的大小N,参数是U和q。
其中前向计算的过程如下:
$$z_w = tanh(Wx_w+p)$$
$$y_w = Uz_w+q$$
记过计算得到一个长度为N的向量$y_w$,用softmax归一化之后得到每个单词的概率。
$$p(w_t|w_{t-n+1},…w_{t-2},w_{t-1}) = \frac {e^{y_w^i}}{\sum e^{y_w^i}}$$
$i$表示在字典中的第$i$个词。这里需要求的参数包括:1)词向量$v(w)$,2)神经网络的参数$(W,p,U,q)$,用随机梯度下降的方法就能求解了。
优点:
1.直接得到了词向量的表示和语言模型。
2.基于词向量的模型自带平滑的功能,得到的概率不可能为零。
参考
1.word2vec 中的数学原理详解
2.Deep Learning in NLP (一)词向量和语言模型
2.NNLM: Y. Bengio, R. Ducharme, P. Vincent. A neural probabilistic language model, JMLR 2003