概要
统计语言模型的目标是学习句子中词的联合概率,这其中有个非常严重的问题就是维度灾难。论文提出使用神经网络模型对词进行分布式表示:
- 关联词汇表中的每个词,形成一个分布式词特征向量 ∣ V ∣ × m |V| \times m ∣V∣×m
- 根据词序列中词的特征向量表示词序列的关联概率函数
- 学习词特征向量和关联概率函数的参数
特征向量可以表示词的不同方面,因为每个词都与向量空间中的一个点相关联。概率函数则是以词序列的条件概率表示,使用多层神经网络进行训练函数的参数。
为什么可以这么实现?
假如有两个词序列
The cat is walking in the bedroom
A dog was running in a room
我们知道两个句子中cat和dog语义表示应该是相似的。因为(the,a), (bedroom,room), (is,was),(running,walking)是语义相似的,概率函数在特征向量表示中的平滑作用,cat和dog的特征表示也会很相似。
NNLM模型
如图所示为NNLM模型结构
假设训练集为一个词序列
w
1
,
w
2
,
.
.
.
,
w
T
w_1,w_2,...,w_T
w1,w2,...,wT,词汇表为
V
V
V,而
w
t
∈
V
w_t \in V
wt∈V,NNLM模型的目标函数为
f
(
w
t
,
.
.
.
,
w
t
−
n
+
1
)
=
P
^
(
w
t
∣
w
1
t
−
1
)
f(w_t,...,w_{t-n+1})=\hat P(w_t|w^{t-1}_1)
f(wt,...,wt−n+1)=P^(wt∣w1t−1)其中
w
1
t
−
1
=
(
w
1
,
w
2
,
.
.
.
,
w
t
−
1
)
w^{t-1}_1=(w_1,w_2,...,w_{t-1})
w1t−1=(w1,w2,...,wt−1)下同。
对任意词序列 w 1 t − 1 w_1^{t-1} w1t−1都满足: ∑ i = 1 ∣ V ∣ f ( i , w t − 1 , w t − 2 , . . . , w t − n + 1 ) = 1 , f > 0 \sum_{i=1}^{|V|}f(i,w_{t-1},w_{t-2},...,w_{t-n+1})=1,\quad f>0 i=1∑∣V∣f(i,wt−1,wt−2,...,wt−n+1)=1,f>0其中 f ( i , w t − 1 , w t − 2 , . . . , w t − n + 1 ) f(i,w_{t-1},w_{t-2},...,w_{t-n+1}) f(i,wt−1,wt−2,...,wt−n+1)表示前 n n n个词预测词 i i i的概率。通过这些条件概率的乘积,可以得到词序列的联合概率模型。
NNLM模型将函数 f ( w t , . . . , w t − n − 1 ) = P ^ ( w t ∣ w 1 t − 1 ) f(w_t,...,w_{t-n-1})=\hat P(w_t|w_1^{t-1}) f(wt,...,wt−n−1)=P^(wt∣w1t−1)分解为两个部分:
- 词汇表中的任意一个元素 i i i使用映射矩阵 C ∣ V ∣ × m C_{|V|\times m} C∣V∣×m得到向量表示 C ( i ) ∈ R m C(i) \in \Reals^m C(i)∈Rm。它表示与词汇表中每个单词相关联的分布式特征向量。
- 将词特征向量序列 ( C ( w t − n + 1 ) , . . . , C ( w t − 1 ) ) (C(w_{t-n+1}),...,C(w_{t-1})) (C(wt−n+1),...,C(wt−1))函数 g g g得到条件概率分布,估计 P ^ ( w t ∣ w 1 t − 1 ) \hat P(w_t|w_1^{t-1}) P^(wt∣w1t−1),如上图。 C C C和 g g g的组合就是函数 f f f: f ( i , w t − 1 , w t − 2 , . . . , w t − n + 1 ) = g ( i , C ( w t − 1 ) , . . . , C ( w t − n + 1 ) ) f(i,w_{t-1},w_{t-2},...,w_{t-n+1})=g(i,C(w_{t-1}),...,C(w_{t-n+1})) f(i,wt−1,wt−2,...,wt−n+1)=g(i,C(wt−1),...,C(wt−n+1))
C
C
C和
g
g
g都各自有一些关联参数,映射矩阵
C
C
C的参数就是其特征向量本身。第
i
i
i行就是第
i
i
i个词的特征向量
C
(
i
)
C(i)
C(i)。而函数
g
g
g则可以由前向神经网络、循环神经网络或其他的参数化函数实现,模型的整体参数表示为
θ
=
(
C
,
ω
)
\theta=(C,\omega)
θ=(C,ω),其中
ω
\omega
ω是函数
g
g
g的参数。
整个模型训练的损失函数
L
=
1
T
∑
t
l
o
g
f
(
w
t
,
w
t
−
1
,
.
.
.
,
w
t
−
n
+
1
;
θ
)
+
R
(
θ
)
L=\frac{1}{T}\sum_tlogf(w_t,w_{t-1},...,w_{t-n+1};\theta)+R(\theta)
L=T1t∑logf(wt,wt−1,...,wt−n+1;θ)+R(θ)其中
R
(
θ
)
R(\theta)
R(θ)是惩罚性,训练目标就是最大化损失函数。
以论文中实验部分设计的模型梳理整个模型的流程
从上面的模型图中可以看出,NNLM模型有两个隐藏层(hidden layer):共享此特征层 C C C(the shared word features layer C)和普通的双切曲线tanh隐藏层(the ordinary hyperbolic tangent hidden layer):
- 第一个隐藏层:将词序列通过矩阵 C C C转换成特征向量序列: x = ( C ( w t − 1 ) , . . . , C ( w t − n + 1 ) ) x=(C(w_{t-1}),...,C(w_{t-n+1})) x=(C(wt−1),...,C(wt−n+1))
- 第二个隐藏层:计算每个输出词 i i i的对数概率(log-probabilities) y = b + W x + U t a n h ( d + H x ) y=b+Wx+Utanh(d+Hx) y=b+Wx+Utanh(d+Hx)其中 b , W , U , d , H b,W,U,d,H b,W,U,d,H为函数参数。
最后输出层中为了保证所有词的概率之和等于1,使用softmax函数 P ^ ( w t ∣ w t − 1 , . . . , w t − n + 1 ) = e y w t ∑ i e y i \hat P(w_t|w_{t-1},...,w_{t-n+1})=\frac{e^{y_{w_t}}}{\sum_ie^{y_i}} P^(wt∣wt−1,...,wt−n+1)=∑ieyieywt
总结
NNLM模型对词表示的能力比n-gram模型好很多,并且通过学习分布式词表示解决了维度灾难问题。同时,模型设计了并行计算,如数据的并行处理、参数的并行处理,更好的提升模型的性能。
论文地址