1.1.2 神经网络语言模型
神经网络语言模型(Neural Network Language Model,NNLM)指的是一类利用神经网络分类器来计算某个上下文中的单词或单词序列的概率的语言模型。神经网络语言模型依赖于词嵌入(Word Embedding)和多层神经网络结构来完成上述概率的计算。词嵌入是一种在机器学习领域广泛应用的技术,旨在将高维度的数据(如文字和图片)通过某种算法映射到低维度的向量空间。在该空间上,几何距离相近的词嵌入向量在原始空间上的语义也相近。
神经网络语言模型的理论基础是通用近似定理(Universal Approximation Theorem)[2]:神经网络可以在欧氏空间以任意精度拟合任意函数。由于语言模型本质上是概率分布,神经网络自然可以用来构建语言模型。与n-gram语言模型相比,神经网络语言模型的一个显著优点是它可以轻松处理未登录词。神经网络语言模型可以对可能出现在同一上下文中的其他词的词嵌入进行加权组合,并以此作为未登录词的词嵌入计算未登录词的概率。另外,神经网络语言模型并不需要显式存储每个n-gram及其对应的概率,因而可以有效减轻n-gram语言模型中的维数灾难问题。
根据神经网络的结构不同可以将神经网络语言模型分为两种:前馈神经网络语言模型和循环神经网络语言模型。如图1-1所示,在前馈神经网络语言模型中,我们首先将上下文中的每个单词映射为其对应的词嵌入,然后将这些词嵌入拼接起来作为输入。通过数层神经网络的映射后,在最后一层通过Softmax函数最终输出一个在词汇表上的概率分布。基于该分布并结合一定的策略,我们选取一个词(比如选取该分布中概率最大的词)作为该上下文中模型预测的下一个词。由于前馈神经网络语言模型只能处理固定长度的单词序列,研究者又提出了循环神经网络语言模型来支持处理任何长度的单词序列。
图1-1 前馈神经网络语言模型(左)与循环神经网络语言模型(右)
循环神经网络语言模型和前馈神经网络语言模型的主要区别在于神经网络中隐层的计算方式。循环神经网络语言模型的隐层计算公式为:
其中,hi表示第i个隐层,emb(wi)表示单词wi的词嵌入,W表示循环神经网络的权重,σ表示激活函数,每个隐层依赖于当前单词的词嵌入和循环神经网络中上一个状态的隐层,通过这样的机制,循环神经网络语言模型便能利用任意长度的上下文信息。
神经网络语言模型的训练采用监督学习(Supervised Learning)方式,其损失函数引导神经网络将正确的单词的概率最大化。训练语料中单词wi的损失函数为:
其中,表示神经网络最终的隐层。我们可以采用随机梯度下降(Stochastic Gradient Descent,SGD)的方法对神经网络语言模型的参数进行优化。实践经验表明,神经网络语言模型在多种场景中的效果均优于n-gram语言模型。然而,神经网络语言模型只能在一定程度上解决文本序列的长距离依赖问题,当遇到较长的文本时,其效果不甚理想,在这方面仍有很大的提升空间。