NLP+深度学习:paper(1) Bengio: A Neural Probabilistic Language Model, word2vec蓝本NNLM方法

摘要

统计语言模型的目的是想去学一系列词的联合概率分布,但如果不加技巧直接硬解的话会出现维数灾难(curse of dimensionality)问题。本文想通过学习每个词的分布表示(distributed representation)来解决这种维数灾难。本模型:

  • 学习词汇的分布式表示(distributed representation)
  • 学习词序列的概率函数(probability function for word sequences)

简介

收到非参数密度估计(non-parametric density estimation)的启发,一种将learning algorithm效果可视化的方法是,去看初始化时聚集在training points附近的概率质量在更广阔的数据集下的分布,比如在training points周围的一些词汇上的分布。

基本的统计语言模型:

P(w1T)=t=1TP(wt|w1t1)

wij=(wi,wi+1,,wj1,wj),是一个词序列,wt是第t个词。上式可以理解为整句话的概率是前面所有词的条件概率的乘积。

建立自然语言统计模型的时候,需要消除维数灾难带来的影响,这时n-gram的思想就很有用了。一般来说语义库的context都很大,n-gram只取某个词的前n个词作为context,可以大大减小计算量。

P(wt|w1t1)P(wt|wtn+1t1)

下面来继续说明一下本文的工作:

1. 用分布式表示解决维数灾难问题

这里的想法可以总结为如下三条:

  1. 把每个单词和一个单词特征向量(Rm)对应起来
  2. 写出单词序列的联合概率分布,in terms of 序列中的单词特征向量
  3. 自动学习这些单词特征向量和概率分布函数的参数

曾经的统计语言模型有两个重要的flaw,本文将重点关注这两个点:

1. 没有考虑多余1或2个单词的上下文(context)

曾经,我们只考虑那些在我们的训练集中出现过的连续单词的组合,但同时我们又不希望给那些从来没出现过的单词组合赋概率值0。

2. 没有考虑单词之间的语义相似性(similarity between words)

神经网模型

模型建立

现有词典V,训练集是一个大的词序列w1,,wTV。我们需要学:

f(wt,,wtn+1)=P(wt|w1t1)

这里把要学的东西拆成两部分:

1. 从词到向量的映射C

把每个V中的词用one-hot方式表示,那么每个单词都是一个1×|V|的向量wi。记C为从词one-hot向量映射到Rm的映射,那么显然C为一个|V|×m的矩阵,一共有|V|×m个自由参数。这里词特征向量与词One-hot向量之间的关系为:vi=wiC.

2. 从词向量到结果f的映射g

将词转换为特征向量后,设现有一个函数g将特征向量序列映射到我们需要求的概率函数:

f(i,wt1,...,wtn+1)=g(i,C(wt1),...,C(wtn1))

这里函数g可以通过一个前向传播或者循环神经网络实现,设其中的参数集合为ω. 那么所有参数的集合为θ=(C,ω)

这里再给出loss function.我们需要maximize下式:

L=1Ttlog f(wt,wt1,...,wtn+1;θ)+R(θ)

这里R是一个正则化项,包含C matrix的参数和神经网络中的权重,不包括偏置b

经过词特征映射后还有一个神经网络隐层。这里使用softmax来作为Output layer:

P^(wt|wt1,...,wtn1)=eywtieyi

这也可以保证概率加和为1,满足之前提到的约束。
NLP+深度学习:paper(1) Bengio: A Neural Probabilistic Language Model, word2vec蓝本NNLM方法

图1:NNLM神经网络结构

最优化求解

接下来讨论模型的求解。设y为每个输出单词i的未正则化的log概率,它可以被这样计算:

y=b+Wx+U tanh(d+Hx)

其中,x=(C(wt1,...,C(wtn+1)) 为特征词序列,tanh逐个对元素进行处理,W在没有直接联系的元素时为0。

使用SGD进行优化,每次随机选取一个sequence:

θθ+ϵP^(wt|wt1,...wtn+1)θ

实验结果

使用含有1,181,041个单词的Brown语义库。这里800,000单词背用于训练集,200,000用于validation,另外181,041用于测试。不同的单词有47,578个,出现次数<=3次的稀有单词被全部替换为一个统一的单词。这样词典的大小为|V|=16,383

另外还测试了Associated Press(AP) News的数据,包含14M个单词,一共有148K不同的单词,经过同样方法过滤之后有|V|=17964

学习率一开始设为ε0=103, 随着训练次数递减:εt=ε01+rt. 这里r=108

N-Gram模型

第一个benchmark时内插或平滑的3-gram模型(Jelinkek and Mercer, 1980)。

此外还有一些当时比较先进的n-gram模型如Modified Kneser-Ney algorithm, class-based n-gram models等

结果

对比的criteria是考察test set perplexity(1/P^(wt|w1t1)的几何平均值)。

NLP+深度学习:paper(1) Bengio: A Neural Probabilistic Language Model, word2vec蓝本NNLM方法

表1:结果对比

表1展示了Brown语义库上的结果,MLP10意思是这里词的特征取了10个,也就是m=10n是模型的阶数,cclass-based n-gram中词class的个数,h是hidden unit的个数,m是词特征的个数,direct是词特征和输出之间有没有直接连接,mix是有没有与trigram组成混合模型。

其他

并行计算求解

TODO

Other hint

  1. 使用混合模型,将神经网络的概率预测和内插3-gram方法可以获得更好效果。
  2. Out-of-vocabulary words。本模型能很好的适用于没在字典里出现过的单词。比如,当出现一个新单词jV,我们可以先将C(j)这样初始化:C(j)iVC(i)P^(i|wtn1t1),然后把j放入V中再重新跑一遍我们的算法,这个计算相对较快。