a neural probabilistic language model 论文笔记

原文见:https://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf

统计语言模型

首先统计语言模型的学习目标本质上都是一种语言的单词序列的联合概率函数:
p(w1,w2,w3…,wt) = p(w1) p(w2|w1) p(w3|w1w2)…p(wn|w1w2…wt-1)
上式可以理解为,给定前面的t-1个词,后面第t个词出现的概率,假设语料库有100000个词,该计算的时间复杂度为100000的t次方,随着t的增加计算量将呈现指数级别的增加,为了计算可行变有了n-gram模型。

n-gram

对于n-gram模型,求第t个词出现的概率,不需要考虑前面所有的词,而是只考虑前n个词,计算的时间复杂度固定为100000的n次方,上式变为:
p(w(t-n+1),w(t-n+2),…,wt) = p(w(t-n+1)) p(w(t-n+2)w(t-n+1)) …p(wn|w(t-n+1)…wt-1)

n-gram模型被证明是成功可行的,但是对于n-gram模型,存在一些问题:

  1. 词的表示是one-hot向量,维度灾难。
  2. 变量为离散随机变量,一个变量的变化可能会对全局产生极大的影响,不够平滑。
  3. 语料库是有限的,无法识别新的相似词语/句法,比如已经学习过“猫在房间里跑”,没有学习过“狗在房间里跑”就无法识别该句,没办法实现泛化。

NNLM

说完了n-gram存在的一些问题,下面:

首先介绍本篇论文的基本思想和改进优化点:

  1. 引入词向量把n-gram的离散空间转换为连续空间(onehot映射到词特征向量),在实现降维的同时也使得两个相似的词之间的词向量也是相近的,对于连续变量,微小的变化对最终值产生的影响是平滑的,这样就可以进行很好的泛化,通过“狗”和“猫”的词向量相似,在学习过“猫在房间里跑”后就能很好的泛化出“狗在房间里跑”。
  2. 首次将神经网络引入语言模型的训练中,使得指数关系变成线性关系可以构建n更大的关系。并通过神经网络得到了词嵌入这个副产物。

接着介绍文篇论文是如何使用神经网络的:

a neural probabilistic language model 论文笔记_第1张图片
总体目标:通过输入wt的前n-1个词(Wt-1 - Wt-n+1)来预测下一个词Wt是什么。
总的来说分为3层:

  1. 输入层:前n-1个词的词向量C(wi)(如何学习词向量)首尾相接拼起来得到x
  2. 隐藏层:普通神经层 tanh(d+Hx)(即tanh函数激活线性层d+Hx)
  3. 输出层:对词汇表中V个词的隐藏层✖️输出权重H后进行softmax处理,即词汇表中每个单词可能为wt的概率
    用数学公式表示softmax前每个v(v属于V)的输出y为:
    在这里插入图片描述
    其中输入x为:
    在这里插入图片描述
    其中,所有参数为:
    在这里插入图片描述

C的维度为:Vm,m为词向量的维度、V为词汇表单词的数量
x、W的纬度为:V
(n-1)m
b的维度为:V
U的维度为:VU
d的纬度为:h ,h为隐藏层神经单元个数
h的纬度为:h
(n-1)m

上述free parameters的总数为:|V|(1 + nm + h) + h(1 + (n n 1)m),词向量和隐藏层的parameters都需要在模型迭代中学到。
最后,整体的损失函数为,采用梯度下降的方式进行反向传播:
a neural probabilistic language model 论文笔记_第2张图片
参数更新为:
a neural probabilistic language model 论文笔记_第3张图片

后续进行方法实现,目前看到c++实现的一篇博客见:https://www.cnblogs.com/Dream-Fish/p/3950024.html

你可能感兴趣的:(机器学习,自然语言处理,深度学习,神经网络)