计算机系统应用教程网站

网站首页 > 技术文章 正文

NLP系列之词向量-NNLM(八)

btikc 2024-09-02 17:07:33 技术文章 10 ℃ 0 评论

在上一期中遗留了以下问题:

  • 矩阵X的维度经常改变
  • 由于大部分词并不共现而导致的稀疏性
  • 矩阵维度过高带来的高计算复杂度

在本期中将引入神经网络语言模型来解决上述问题。


咱们先来了解下什么是语言模型:

语言模型是一个可以计算一个句子出现的概率的模型. 一个句子S是由n个词语


组成的. 那么, 根据贝叶斯公式, 我们可以计算:

但是,像


这种概率,参数空间是非常大的, 太多可能, 难以计算. 同时, 这种很多词汇的组合出现在语料库中的概率是大概率为零的,非常稀疏, 整个句子的概率


也会因为与其相乘变为0。这也是所谓的curse of dimensionality.为了解决这个问题,著名的马尔可夫假设被引入了:在给定当前知识或信息的情况下,过去(即当前以前的历史状态)对于预测将来(即当前以后的未来状态)是无关的。

基于马尔可夫假设, n-gram模型被提出了, 其核心思想是:第i个词仅与其前面(n-1)个词有关

所以当n=1时, 计算句子的概率就变成了:

当n=2时:

依次类推, n = 3, 4 .... 但是一般用的都是二元, 三元模型,这就是N-gram


神经网络语言模型:

N-gram作为传统方法虽然有不俗的效果, 但它依然有如下问题:

  • 无法利用大于n距离的词汇信息
  • 无法计算词汇间的相似度,
  • 无法应付从未出现过的词组(out-of-vocabulary)

为了解决上面的问题, Bengio 等人于2003年提出了第一篇运用神经网络搭建语言模型的文章: A Neural Probabilistic Language Model, 也被称作NNLM (Neural Network Language Model). 这也是第一次提出了词向量的概念, 即将文本用稠密, 低维, 连续的向量表达.NNLM的主要任务是利用前n-1个词汇,预测第n个词汇。

NNLM整体的框架非常的简单, 所以直接上框架图:

可以看到, NNLM主要由三层网络构成:输入层,隐含层,输出层。

输入层

输入层一共有n-1个词汇的输入,每个词汇将由one-hot vector的形式编码。

对于每个one-hot vector (

), 它们将会与Embedding size为m的矩阵 C (

)相乘, 得到一个distribution vector (

).其中,

为词表的大小(即语料库中出现过的所有唯一词汇数量),m为embedding size, 通常比

小很多,这样也就达到了降维的目的。C这个参数矩阵其实相当于一本字典,每一行都储存了相应位置词汇的词向量,每当有词汇输入的时候,根据词汇的one-hot-vector, C提取出相应行的向量,即为该词汇的词向量。C由神经网络的back propagation训练,不断优化,从而得到更好的词向量,即更优秀的表达能力。


隐含层

得到所有词的词向量后(即一个

的矩阵),为了利用所有词汇信息,将它们concatenate到一起,得到一个

的向量

隐含层为一个简单的tanh激活层,其公式为:

其维度信息为:

输出层

输出层利用了隐含层的输出以及原始合并词向量,最后套上softmax, 其公式为:

其维度信息为:

如果不想利用原始合并词向量的信息的话,可以将W设为零矩阵。

其损失函数为:


实验结果表明,NNLM模型比smoothed trigram(平均分布, unigram, bigram, trigram的加权结果)表现更好.


NNLM的问题:

  • 计算复杂度过大
  • 参数较多

因而,基于NNLM,研究人员又提出了word2vec、GloVe、EMLo、GPT及BERT等词向量生成模型,这些模型在实际中有广泛应用。

我们会在后续文章中详细介绍。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表