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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37043191/article/details/82011424

摘要

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

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

简介

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

基本的统计语言模型:

P ( w 1 T ) = t = 1 T P ( w t | w 1 t 1 )

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

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

P ( w t | w 1 t 1 ) P ( w t | w t n + 1 t 1 )

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

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

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

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

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

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

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

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

神经网模型

模型建立

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

f ( w t , , w t n + 1 ) = P ( w t | w 1 t 1 )

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

1. 从词到向量的映射 C

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

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

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

f ( i , w t 1 , . . . , w t n + 1 ) = g ( i , C ( w t 1 ) , . . . , C ( w t n 1 ) )

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

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

L = 1 T t l o g   f ( w t , w t 1 , . . . , w t n + 1 ; θ ) + R ( θ )

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

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

P ^ ( w t | w t 1 , . . . , w t n 1 ) = e y w t i e y i

这也可以保证概率加和为1,满足之前提到的约束。
NNLM神经网络结构

图1:NNLM神经网络结构

最优化求解

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

y = b + W x + U   t a n h ( d + H x )

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

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

θ θ + ϵ P ^ ( w t | w t 1 , . . . w t n + 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 = 10 3 , 随着训练次数递减: ε t = ε 0 1 + r t . 这里 r = 10 8

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 ^ ( w t | w 1 t 1 ) 的几何平均值)。

结果

表1:结果对比

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

其他

并行计算求解

TODO

Other hint

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

猜你喜欢

转载自blog.csdn.net/qq_37043191/article/details/82011424
今日推荐