在接下来的课程中,我们将深入探讨语言模型,其中主要介绍了统计语言模型,但这种模型也存在一些问题:
为了解决这些问题,研究者提出了一种基于神经网络的语言模型。这一创新性的工作最早由Bengio等人在2003年提出,首次将深度学习的思想引入语言模型中。该模型采用三层前馈神经网络进行建模。研究还发现,通过将训练所得神经网络语言模型(Neural Net Language Model, NNLM)的第一层参数作为词的分布式表示,可以有效地获取词语之间的相似度。
其实,NNLM也是一种n-gram模型,但它的优势在于能够处理更大的n值。接下来我们将详细探讨神经网络语言模型:
语言模型的基本任务是计算一句话的概率,公式如下: [ P(S) = P(W1, W2, ..., Wn) = P(W1) times P(W2 | W1) times P(W3 | W1W2) times ... times P(Wn | W1, W2, ..., W_{n-1}) ]
这个公式反映了语言模型的核心思想,即通过上文预测当前词,从而使概率最大化。接下来,我们将介绍第一个神经网络语言模型——NNLM。
NNLM模型非常简洁,它接受当前词( Wt )之前n-1个词作为输入,然后预测当前词( Wt ),使整个概率最大化( P(Wt | W{t-1}, ..., W_{t-n+1}) )。为了方便计算,通常对概率进行对数变换,将连乘转换为连加。
在优化过程中,我们只需要关注概率的最大化,或者等价地,最小化负对数似然(-L)。这样的模型具备判断给定句子是否符合人类语言的能力。
接下来,我们详细介绍NNLM模型的具体结构:
输入层:假设每次使用前n-1个词来预测当前词( Wt ),在这个模型中,每次输入n-1个词,并将当前词( Wt )作为预测目标。每个单词( t )用one-hot编码(维度为|V|)作为原始输入,随后乘以矩阵Q(矩阵尺寸为|V|×m,其中|V|是词汇表大小,m是词向量维度)以获得词向量( C(W_t) ),维度为m。然后将所有词向量拼接成一个(n-1)×m的向量,作为神经网络的输入。
隐藏层:隐藏层的参数矩阵尺寸为(n-1)m×h,将拼接好的向量输入此层,其维度为h。随后通过非线性激活函数tanh处理,隐藏层的输入维度变为h。
输出层:输出层的参数矩阵尺寸为h×|V|,其中V代表词汇表中的总词数。隐藏层的输入经过输出层的参数矩阵,此时维度为|V|。最后,对这个|V|维向量应用softmax函数,得到|V|维的概率向量: [ P(Wt | W{t-1}, ..., W_{t-n+1}) ]
这个概率向量的每个维度对应字典中的词索引,例如字典中词( Wt )的索引是100,那么概率向量的第100维就是词( Wt )的概率。我们的目标是使这个概率最大化。对于一句话中的所有词,通过神经网络计算出每个词的概率,并进行连乘或对数相加,最终得到的目标函数如下:
[ text{目标函数} = -sum{t=1}^{T} log P(Wt | W{t-1}, ..., W{t-n+1}) ]
其中T是训练样本中的总词数。在训练时,将训练语料转换成一个长度为T的超长词序列,使用长度为n的窗口滑动,窗口的前n-1个词作为输入,第n个词作为( W_t )。
总结来说,目前更多使用循环神经网络(RNN)构建语言模型。下一篇文章我们将进一步探讨这一话题,同时NNLM中的矩阵Q实际上提供了词向量,这将在后续课程中详细讲解。