1.one-hot编码
为了机器更加方便的计算,将字或者词转化为向量进行计算更加方便,机器也能更好的识别。使用one-hot编码,one-hot的编码的意思是:字典库中有n个词,每个词都有一个对应的向量,向量的维度为1*n,第2个词的向量为 [ 0 , 1 , 0 , … … , 0 ] T [0,1,0,……,0]^T [0,1,0,……,0]T,同理第三个词的向量为 [ 0 , 0 , 1 , … … , 0 ] T [0,0,1,……,0]^T [0,0,1,……,0]T,即第i位为1,其它位都是0。
2.word2vec编码
使用one-hot编码比较清晰易读,但是维度很大,在多层的神经网络计算中会造成维度爆炸,这个时候计算难度增加,网络进行训练使用的时间是无法忍受的。这个时候使用word2vec编码,即每一个字(词)有两个向量表示它,一个是中心向我们使用
V
V
V表示,一个是上下文向量使用
u
u
u表示。借用语言模型的概念,对于一个句子
S
S
S,中心词为t,计算该句子的概率为:
P
(
θ
)
=
∏
t
=
1
T
∏
−
m
≤
j
≤
m
P
(
w
t
+
j
∣
w
t
;
θ
)
,
j
≠
0
P(\theta)=\prod_{t=1}^{T}\prod_{-m\leq j \leq m}P(w_{t+j}|w_t;\theta), \quad j\neq0
P(θ)=t=1∏T−m≤j≤m∏P(wt+j∣wt;θ),j=0因为是训练中的句子,所以就是需要使
P
(
θ
)
P(\theta)
P(θ)最大,连乘容易造成梯度消散,所以对其取对数,转化为求和,并取负数转化为求最小化,此时目标函数为:
J
(
θ
)
=
−
1
T
∑
t
=
1
T
∑
−
m
≤
j
≤
m
log
P
(
w
t
+
j
∣
w
t
;
θ
)
j
≠
0
J(\theta)=-\frac{1}{T}\sum_{t=1}^{T}\sum_{-m \leq j \leq m}\log P(w_{t+j}|w_t;\theta) \quad j\neq0
J(θ)=−T1t=1∑T−m≤j≤m∑logP(wt+j∣wt;θ)j=0softmax的操作是放大差异,对于
P
(
w
o
∣
w
t
)
=
e
x
p
(
u
o
v
t
)
∑
w
=
1
∣
v
∣
e
x
p
(
u
w
v
t
)
,
w
≠
t
P(w_{o}|w_t)=\frac{exp(u_ov_t)}{\sum_{w=1}^{|v|}exp(u_wv_t)},\quad w\neq t
P(wo∣wt)=∑w=1∣v∣exp(uwvt)exp(uovt),w=t所以对于中心向量
v
t
v_t
vt,要使
P
P
P最大,所以对
P
P
P求关于
v
t
v_t
vt的微分:
∂
∂
v
t
log
P
=
∂
∂
v
t
log
e
x
p
(
u
o
v
t
)
−
∂
∂
v
t
log
∑
w
=
1
∣
v
∣
e
x
p
(
u
w
v
t
)
\frac{\partial}{\partial v_t}\log P=\frac{\partial}{\partial v_t}\log exp(u_ov_t)-\frac{\partial}{\partial v_t}\log \sum_{w=1}^{|v|}exp(u_wv_t)
∂vt∂logP=∂vt∂logexp(uovt)−∂vt∂logw=1∑∣v∣exp(uwvt)又因为
∂
∂
v
t
log
e
x
p
(
u
o
v
t
)
=
u
o
\frac{\partial}{\partial v_t}\log exp(u_ov_t)=u_o
∂vt∂logexp(uovt)=uo并且根据链式法则:
∂
∂
v
t
log
∑
w
=
1
∣
v
∣
e
x
p
(
u
w
v
t
)
=
1
∑
w
=
1
∣
v
∣
e
x
p
(
u
w
v
t
)
∂
∂
v
t
∑
x
=
1
∣
v
∣
e
x
p
(
u
x
v
t
)
=
∑
x
=
1
∣
v
∣
e
x
p
(
u
x
v
t
)
∗
u
x
∑
w
=
1
∣
v
∣
e
x
p
(
u
w
v
t
)
=
∑
x
=
1
∣
v
∣
P
(
x
∣
t
)
∗
u
x
\frac{\partial}{\partial v_t}\log \sum_{w=1}^{|v|}exp(u_wv_t)=\frac{1}{\sum_{w=1}^{|v|} exp(u_wv_t)}\frac{\partial}{\partial v_t}\sum_{x=1}^{|v|} exp(u_xv_t)=\sum_{x=1}^{|v|}\frac{exp(u_xv_t)*u_x}{ \sum_{w=1}^{|v|}exp(u_wv_t)}=\sum_{x=1}^{|v|}P(x|t)*u_x
∂vt∂logw=1∑∣v∣exp(uwvt)=∑w=1∣v∣exp(uwvt)1∂vt∂x=1∑∣v∣exp(uxvt)=x=1∑∣v∣∑w=1∣v∣exp(uwvt)exp(uxvt)∗ux=x=1∑∣v∣P(x∣t)∗ux最终上面的式子转化为:
u
o
−
∑
x
=
1
∣
v
∣
P
(
x
∣
t
)
∗
u
x
=
0
u_o-\sum_{x=1}^{|v|}P(x|t)*u_x=0
uo−x=1∑∣v∣P(x∣t)∗ux=0进行求解。
3.语言模型
d
语言模型的使用n-gram模型,即根据前n个字推测出第n+1字,使用简单的神经网络如上所示,经过词嵌入(word2vec)的编码方式将其转化为向量,输入到隐藏层然后使用tanh的激活函数,最后使用使用解码方式转化为跟one-hot一样的维度,使用softmax得到对应的评价分数,然后取值。