神经网络语言模型NNLM(Neural Network Language Model)
用神经网络来训练语言模型的思想来源于2003年Bengjo发表的《A Neural Probabilistic Language Model》,下面我们来详细分析传统的神经网络模型—神经概率模型,即上面提到的Bengjo发表的NPLM的模型结构(包括输入层,隐藏层,输出层)。
整体模型:
在训练过程中,输入是一串词序列,输出是该序列下一个词的概率值。假设有一组序列:
w
1
,
w
2
,
⋅
⋅
⋅
,
w
t
w_{1},w_{2},\cdot \cdot \cdot ,w_{t}
w1,w2,⋅⋅⋅,wt , 其中
w
i
ϵ
v
,
v
w_{i} \epsilon v, v
wiϵv,v为所有单词的集合,最终训练的模型公式如下:
f
(
w
t
,
w
t
−
1
,
⋅
⋅
⋅
,
w
t
−
n
+
1
)
=
P
(
w
t
=
i
/
c
o
n
t
e
n
x
t
)
=
P
(
w
t
/
w
1
t
−
1
)
f(w_{t},w_{t-1},\cdot \cdot \cdot ,w_{t-n+1}) = P(w_{t}=i/contenxt)=P(w_{t}/w^{t-1}_{1})
f(wt,wt−1,⋅⋅⋅,wt−n+1)=P(wt=i/contenxt)=P(wt/w1t−1)
参数解释:
w
t
w_{t}
wt为序列中的第t个word,
w
t
−
n
+
1
w_{t-n+1}
wt−n+1为输入序列长度为n时的第一个单词。
w
1
t
−
1
w^{t-1}_{1}
w1t−1为输入序列从第一个word到第t-1个word的子序列。
该模型需要满足如下两个条件,即所求概率值大于0,所有word出现的概率之和为1
f
(
w
t
,
w
t
−
1
,
⋯
,
w
t
−
n
+
2
,
w
t
−
n
+
1
)
>
0
f\left(w_{t}, w_{t-1}, \cdots, w_{t-n+2}, w_{t-n+1}\right)>0
f(wt,wt−1,⋯,wt−n+2,wt−n+1)>0
∑
i
=
1
∣
V
∣
f
(
i
,
w
t
−
1
,
⋯
,
w
t
−
n
+
2
,
w
t
−
n
+
1
)
=
1
\sum_{i=1}^{|V|} f\left(i, w_{t-1}, \cdots, w_{t-n+2}, w_{t-n+1}\right)=1
∑i=1∣V∣f(i,wt−1,⋯,wt−n+2,wt−n+1)=1
输入层: 从one hot embedding映射到distribution representation
把输入word的0,1稀疏embedding通过权重矩阵映射到低纬度的实数矩阵。
C实际上就是一个 |V| x m的自由参数矩阵,|V| 表示词表的大小, m 表示每个词的维度。
C
ϵ
R
∣
V
∣
∗
m
C \epsilon R^{|V|*m}
CϵR∣V∣∗m为映射矩阵,将输入的每个词映射为一个特征向量。
C
(
i
)
ϵ
R
m
C(i) \epsilon R^{m}
C(i)ϵRm表示词典中第i个词对应的特征向量,其中m表示特征向量的维度。最后得到的是一个(n-1) x m维向量。
隐藏层
参数解释:
h为隐藏层神经元的个数,
H
ϵ
R
h
∗
(
n
−
1
)
m
H\epsilon R^{h*(n-1)m}
HϵRh∗(n−1)m为输入层到隐藏层的权重矩阵,
d
ϵ
R
h
d\epsilon R^{h}
dϵRh是隐藏层的偏置矩阵。
输出层
输出层受到隐藏层输出a和输入层输出x的影响。
输入为
x
=
(
C
(
w
t
−
n
+
1
)
,
.
.
.
,
C
(
w
t
−
1
)
)
x=(C(w_{t-n+1}),...,C(w_{t-1}))
x=(C(wt−n+1),...,C(wt−1))。
W
ϵ
R
∣
V
∣
∗
(
n
−
1
)
m
W\epsilon R^{|V|*(n-1)m}
WϵR∣V∣∗(n−1)m是可选参数,,如果输入层与输出层没有直接相连(如图中绿色虚线所示),则可令W=0 。
U
ϵ
R
∣
V
∣
∗
h
U \epsilon R^{|V|*h}
UϵR∣V∣∗h是隐含层到输出层的权重矩阵。
d
ϵ
R
h
d\epsilon R^{h}
dϵRh和
b
ϵ
R
∣
V
∣
b\epsilon R^{|V|}
bϵR∣V∣是隐藏层的偏置矩阵。
模型的训练
损失函数为:
参数解释:
Θ
\Theta
Θ为模型的所有参数,
R
(
Θ
)
R(\Theta)
R(Θ)为正则化项, 使用梯度下降法更新模型参数
按照自己的理解,梳理了一下整个流程的维度变化:
下图中第一层蓝框为映射层,即输入层。第二层蓝框为隐藏层。第三层蓝框为输出层。
nnlm与word2vec区别:
nnlm是根据前文生成下一个单词,而word2vec分为根据上下文预测中间词,或根据某一个词预测上下文