N-gram和NNLM语言模型

N-gram统计语言模型

  • 统计语言模型: 统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性

例如:一个句子由w1,w2,w3,w4,w5,…….这些词组,使得P(w1,w2,w3,w4,w5……)概率大(可以从训练语料中得出)

  • N-Gram:

    N元模型就是假设当前词的出现概率只与它前面的N-1个词有关

    • 语言是一种序列,词与词之间并不是相互独立
    • 一元模型(unigram model):假设某个出现的概率与前面所有词无关
    • P(s) = P(w1)P(w2)P(w3)…P(w4)
    • 二元模型(bigram model):假设某个出现的概率与前面一个词相关
    • P(s) = P(w1)P(w2|w1)P(w3|w2)…P(w_i|w_i-1)
    • 三元模型(trigram model):假设某个出现的概率与前面两个词相关
    • P(s) = P(w1)P(w2|w1)P(w3|w1,w2)…P(w_i|w_i-2,w_i-1)

注:目前使用较多的是三元模型,由于训练语料限制,无法追求更大的N,并且N越大导致计算量越来越大

N-gram统计语言模型缺点

N-gram语言模型还存在OOV问题(Out Of Vocabulary),也就是序列中出现了词表外词(也叫做未登录词),或者说在测试集和验证集上出现了训练集中没有过的词。它采用一般的解决办法:

  • 设置一个词频阈值,只有高于该阈值的词才会加入词表。
  • 所有低于阈值的词替换为 UNK(一个特殊符号)。

NNLM神经网络语言模型

神经网络语言模型NNLM依然是一个概率语言模型,它通过神经网络来计算概率语言模型中每个参数。

  • NNLM模型解释:

    • 输入层:将context(w)每个词映射成一个长度为m的词向量(长度训练者指定,一般使用tf.random_normal随机初始化生成nxm的矩阵),词向量在开始是随机的,也是超参数参与网络训练。

    • 使用随机初始化的方法建立一个|m|×N个词大小的查找表(lookup table)

    • context(w):可以称之为上下文窗口长度,类似N-gram取多少个词作为添加。例如上下文窗口长度为c=3,则循环取四个词,前三个为特征值,最后一个为目标值。

    • 投影层:将所有的上下文此项来给你拼接成一个长向量,作为目标w的特征向量。长度为m(n-1)

    • 隐藏层:拼接后的向量会经过一个规模为h的隐藏层,论文中使用tanh

    • y=U \cdot \tanh (W x+b 1)+b 2

    • tanh为激活函数

    • 输出层:最后输出会通过softmax输出所有n个词的大小概率分布

  • 训练过程:

    • 训练时,使用交叉熵作为损失函数,反向传播算法进行训练。初始化的矩阵查找表和神经网络的参数w b同时训练更新。

    • 当训练完成时就得到了 N-gram 神经语言模型,以及副产品词向量

2 comments

  1. Pingback: 学习笔记:深度学习(5)——词向量的相关概念_Johngo学长

  2. Pingback: 学习笔记:深度学习(5)——词向量的相关概念 – 源码巴士

发表评论

邮箱地址不会被公开。 必填项已用*标注