神经网络语言模型(Nerual Network Language Model, NNLM)
参考论文: A Neural Probabilistic Language Model
参考博客: 神经网路语言模型(NNLM)的理解
概率模型
- 传统的n元语言模型: $$(p(w_{t}|w_{t-(n-1)},…,w_{t-1}))$$
- 一般来说可以通过前n-1个词将预测第n个词的概率分布
NNLM模型原理
- NNLM模型直接通过一个神经网络结构对n元条件概率进行评估
模型结构
- NNLM网络结构图如下:
数据集预处理
- 对于给定的预料库,我们需要生成训练数据集(大量训练样本的集合),单个样本如下是长度为n的序列\((w_{1},…,w_{n})\),其中\((w_{1},…,w_{n-1})\)对应训练样本特征值,训练样本标记为\(w_{n}\),通常可以用One-Hot编码(一个维度为|V|的向量)
模型分析
模型分析主要介绍前向传播过程
输入与输出
- 将构造的数据集作为训练样本集
- 其中每个样本输入为\((w_{1},…,w_{n-1})\),输出为一个向量(维度为|V|),向量代表词的分布,该分布应该与词\(w_{n}\)的One-Hot编码(也是一个|V|维向量)尽量匹配,输出误差就是这两个向量的差异大小(不同损失函数均通过将上述两个向量作为输入,输出一个标量等(也可能n为向量,此时按照不同维度分别计算,或者是其他的值)从而实现当前样本损失的计算
模型结构分析
\(x=(C_{j|w_{j}=w_{1}};…;C_{j|w_{j}=w_{n-1}})\)
- x为输入向量,\(x\in R^{(n-1)m}\),x是词序列\((w_{1},…,w_{n-1})\)对应的拼接向量,其中每个词都会先被矩阵C映射成一个m维的向量,将(n-1)维的向量拼接起来就得到了x
\(y=b+Wx+Utanh(d+Hx)\)
- y为输出向量,\(y\in R^{|V|}\),\(y_{i}\)表示\(w_{i}\)是第n个单词的概率
模型参数分析
C:映射矩阵\(C\in R^{|V|\times m}\),其中矩阵的第j行\(C_{j}\)是词\(w_{j}\)对应的特征向量,m为特征向量的维度
H:输入层到隐含层的权重矩阵\(H\in R^{(n-1)m\times h}\),其中h为隐含层神经元的数量
W:输入层到输出层的权重矩阵\(W\in R^{(n-1)m\times |V|}\),W是可选参数,对应模型结构图中的绿色虚线,如果输入层输出层不直接相连,则直接令\(W=0\)即可
U:隐含层到输出层的权重矩阵\(U\in R^{h\times |V|}\)
b:输出层的偏执参数
d:隐含层的偏执参数
模型训练
损失函数
- 似然函数:\(L(\theta)=\prod_{t=1}^{T} p(w_{t-(n-1)},…,w_{t-1},w_{t}|\theta)+R(\theta)\)
- T为训练集D中的样本总数,即\(T=|D|\)
- \(R(\theta)\)是正则项
- 对数似然函数:\(L(\theta)=\sum_{t=1}^{T} log(p(w_{t-(n-1)},…,w_{t-1},w_{t})|\theta) + R(\theta)\),其中T为训练集D中的样本总数,即\(T=|D|\)
- 我们选择优化对数似然函数,原因如下:
- 似然函数连乘操作造成浮点数溢出,乘积越来越小(概率值都在[0,1]之间)
- 似然函数连乘操作耗时大于对数似然函数的连加操作
- 取对数的操作可以同时把函数中其他的指数项(比如出现在正则项\(R(\theta)\)中)中的处理成连加,减少运算量
- 对数似然函数的单调性与似然函数相同,最大化对数似然函数等价于最大化似然函数(最重要的一点)
训练目标
- 最大化对数似然函数(等价于最大化似然函数)
参数迭代
- 使用梯度上升法,每轮迭代时朝着正梯度方向移动
- \(\theta=\theta+\lambda\frac{\partial L(\theta)}{\partial\theta}\)
- \(\lambda\)为步长
总结
- NNLM模型使用了低维连续的词向量对上文进行表示,这解决了词袋模型带来的数据稀疏、语义鸿沟等问题
- 相比传统模型,NNLM是一种更好的n元语言模型(NNLM的n元不是由神经元决定,而是在根据语料库生成训练数据时单个训练样本中包含的词数,也就是窗口大小)
- n元模型指的是跟军前n-1个词预测第n个词的语言模型,而不是根据前n个词生成第n+1个词的模型
- 根据相似的上下文语境,NNLM模型可以预测出相似的目标词,而传统模型无法做到这一点