zl程序教程

您现在的位置是:首页 >  其他

当前栏目

神经语言模型

2023-04-18 16:57:01 时间

1. 语言模型

什么是语言模型?通俗的来讲是判断一句话是否符合人说话的模型,如可以说”猫有四条腿“,却不能说”四条腿有猫“。因为”四条腿有猫“这样的表述不符合人们的正常语言规范。在语言模型的发展过程中,分别出现了专家语法规则模型,统计语言模型,神经网络语言模型三个阶段。其中,专家语法规则模型出现在语言模型的初始阶段,我们知道,每一种语言都有其特定的语法规则,因此在早期,人们设法通过归纳出的语法规则来对语言建模;统计语言模型则是对句子的概率分布建模,通过对大量语料的统计发现,符合人们正常语言规范的句子出现的概率要大于不符合语言规范的句子,如上述的“猫有四条腿”出现的概率要大于“四条腿有猫”的概率;神经网络语言模型是在统计语言模型的基础上,通过神经网络模型对句子的概率分布建模的方法。下面将从统计语言模型开始讲起。

2. 统计语言模型

2.1. 统计语言模型

统计语言模型(statistical language modeling)通过对大量语料的统计预测出句子的分布。用形式表述,即对于一段文本序列S=w_1,w_2,cdots ,w_T ,它的概率可以表示为Pleft ( S ight )=Pleft ( w_1,w_2,cdots ,w_T ight ) 通过概率中的链式法则,可以求得上述句子的概率值:Pleft ( w_1,w_2,cdots ,w_T ight )=Pleft ( w_1 ight )cdot Pleft ( w_2mid w_1 ight )cdots Pleft ( w_Tmid w_1,w_2,cdots w_{T-1} ight ) 其中,Pleft ( w_imid w_1,cdots ,w_{i-1} ight ) 表示的是在词w_1,cdots ,w_{i-1} 出现的条件下词w_i

出现的概率,对于以上的统计语言模型,每一个词的概率便是模型的参数,如上述的Pleft ( w_1 ight )Pleft ( w_2mid w_1 ight ) 等。为了计算模型的参数,需要统计每个词出现的概率,如对于词w_i ,可以通过以下的方式统计得到:Pleft ( w_imid w_1,cdots ,w_{i-1} ight )=frac{N_{left ( w_1,w_2,cdots ,w_i ight )}}{N_{left ( w_1,w_2,cdots ,w_{i-1} ight )}} 其中,N_{left ( w_1,w_2,cdots ,w_i ight )} 表示的在文本语料中出现文本序列w_1,w_2,cdots ,w_i 的次数。

在实际的过程中,如果文本的长度比较长,要估算Pleft ( w_imid w_1,cdots ,w_{i-1} ight ) 是非常困难的,主要体现在以下的两个方面:

  1. 需要计算的参数过多。假设词库V

的大小为100000,对于包含10个词的序列,潜在的参数个数为100000^{10}-1

  1. 数据极度稀疏,长序列的出现频次较低;

2.2. n-gram模型

为了简化上述的问题,通常在估算条件概率时,距离大于等于n 的上文词会被忽略,即所谓的n-gram模型。n-gram模型是基于马尔科夫假设,即当前词出现的概率仅依赖前n−1

个词Pleft ( w_imid w_1,cdots ,w_{i-1} ight )approx Pleft ( w_imid w_{i−n+1},cdots ,w_{i-1} ight )n=1 时,又称为unigram(一元语言模型),句子的概率值为Pleft ( w_1,w_2,cdots ,w_T ight )=Pleft ( w_1 ight )cdot Pleft ( w_2 ight )cdots Pleft ( w_T ight ) ,从公式可以看出,u nigram模型中,句子的概率为其中的每个词的概率的乘积,即假设每个词是相互独立的,这样句子中的词序信息会丢失,虽然估算方便了,但是效果会有较大的损耗;为了解决性能和效率的问题,通常设置n=2 或者n=3 ,当n=2 时,又称为bigram(二元语言模型),当n=3 时,又称为trigram(三元语言模型),即当前词部分依赖上文中的词。

3. 神经网络语言模型

在n-gram模型中,为了更好地保留词序信息,构建更强大的语言模型,通常希望选择较大的n 。当n

较大时,长度为n 的序列出现的次数就会非常少,数据稀疏的问题依然没有能够解决。为了更好地解决n-gram中估算概率遇到的数据稀疏问题,神经网络语言模型应运而生。NNLM(Nerual Network Language Model)是经典的用神经语言模型,在论文《A Neural Probabilistic Language Model》中提出。

3.1. NNLM原理

对于神经网络语言模型,训练数据集与上述一致,是一系列词的集合构成的序列:S=w_1,w_2,cdots ,w_Tn ,其中,w_tin VV 表示的是词库。NNLM的目标函数为:fleft ( w_t,cdots ,w_{t-n+1} ight )=Pleft ( w_tmid w_1,cdots ,w_{t-1} ight ) 神经网络语言模型通过词w_t 的前n-1 个词w_{t-n+1},cdots ,w_{t-1} 估算出概率Pleft ( w_tmid w_1,cdots ,w_{t-1} ight ) ,从而避免大量的统计工作。这里有两个限制条件:

  1. sum_{i=1}^{left | V ight |}fleft ( i,w_{t-1},cdots ,w_{t-n+1} ight )=1
  2. f>0 神经语言模型NNLM采用普通的三层前馈神经网络结构,其网络结构如下图所示(与通常的三层前馈神经网络略有不同):

从网络结构可以看出,三层的网络中第一层为输入层,通过一个映射矩阵CC 可以认为是一个left | V ight | imes m 的共享矩阵,将词库V 中的每个词映射成对应的向量,可通过索引的方式取得对应词的词向量)将前n 个词映射成m 维的词向量,如词库V 中的第i 个词,映射成词向量后为Cleft ( i ight )inmathbb{R}^m ,生成前n-1 个词的向量表示xx=left ( Cleft ( w_{t-1} ight ),Cleft ( w_{t-2} ight ),cdots ,Cleft ( w_{t-n+1} ight ) ight ) 当输入层完成对上文的n-1 个词的词向量表示后,模型将数据送入到剩下的两层网络中,分别为隐藏层和输出层yy=b+Wx+Utanhleft ( d+Hx ight ) 假设h 表示隐藏层的神经元个数,那么Hin mathbb{R}^{h imes left ( n-1 ight )m}din mathbb{R}^{h}Uin mathbb{R}^{left | V ight | imes h}Win mathbb{R}^{left | V ight | imes left ( n-1 ight )m}bin mathbb{R}^{left | V ight |}

输出层共有left | V ight | 个神经元,依次对应着词库V 中每个词的可能性。为了使得所有神经元的结果之和为1 ,在输出层y 之后,需要加入softmax函数,将y 专程对应的概率值:Pleft ( w_tmid w_{t−n+1},cdots ,w_{t-1} ight )=frac{expleft ( y_{w_t} ight )}{sum _iexpleft ( y_i ight )}

3.2. 模型训练

综上,模型中的参数为 heta =left ( b,d,W,U,H,C ight ) ,对于整个语料,神经网络语言模型需要最大化:L=frac{1}{T}sum _tlog: fleft ( w_t,w_{t-1},cdots ,w_{t-n+1}; heta ight )+Rleft ( heta ight ) 其中Rleft ( heta ight ) 为正则项,对于神经网络的训练,通常使用梯度下降对损失函数求解,对于上述的最大化问题,可通过下述公式迭代求解: heta leftarrow heta +epsilon frac{partial L}{partial heta }

参考文献

  1. [1] Kandola E J , Hofmann T , Poggio T , et al. A Neural Probabilistic Language Model[J]. Studies in Fuzziness & Soft Computing, 2006, 194:137-186.