cs224n-第二课-word2vec

1.one-hot编码

为了机器更加方便的计算,将字或者词转化为向量进行计算更加方便,机器也能更好的识别。使用one-hot编码,one-hot的编码的意思是:字典库中有n个词,每个词都有一个对应的向量,向量的维度为1*n,第2个词的向量为[0,1,0,,0]T[0,1,0,……,0]^T,同理第三个词的向量为[0,0,1,,0]T[0,0,1,……,0]^T,即第i位为1,其它位都是0。

2.word2vec编码

使用one-hot编码比较清晰易读,但是维度很大,在多层的神经网络计算中会造成维度爆炸,这个时候计算难度增加,网络进行训练使用的时间是无法忍受的。这个时候使用word2vec编码,即每一个字(词)有两个向量表示它,一个是中心向我们使用VV表示,一个是上下文向量使用uu表示。借用语言模型的概念,对于一个句子SS,中心词为t,计算该句子的概率为:
P(θ)=t=1TmjmP(wt+jwt;θ),j0P(\theta)=\prod_{t=1}^{T}\prod_{-m\leq j \leq m}P(w_{t+j}|w_t;\theta), \quad j\neq0因为是训练中的句子,所以就是需要使P(θ)P(\theta)最大,连乘容易造成梯度消散,所以对其取对数,转化为求和,并取负数转化为求最小化,此时目标函数为:J(θ)=1Tt=1TmjmlogP(wt+jwt;θ)j0J(\theta)=-\frac{1}{T}\sum_{t=1}^{T}\sum_{-m \leq j \leq m}\log P(w_{t+j}|w_t;\theta) \quad j\neq0softmax的操作是放大差异,对于P(wowt)=exp(uovt)w=1vexp(uwvt),wtP(w_{o}|w_t)=\frac{exp(u_ov_t)}{\sum_{w=1}^{|v|}exp(u_wv_t)},\quad w\neq t所以对于中心向量vtv_t,要使PP最大,所以对PP求关于vtv_t的微分:vtlogP=vtlogexp(uovt)vtlogw=1vexp(uwvt)\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)又因为vtlogexp(uovt)=uo\frac{\partial}{\partial v_t}\log exp(u_ov_t)=u_o并且根据链式法则:vtlogw=1vexp(uwvt)=1w=1vexp(uwvt)vtx=1vexp(uxvt)=x=1vexp(uxvt)uxw=1vexp(uwvt)=x=1vP(xt)ux\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最终上面的式子转化为:uox=1vP(xt)ux=0u_o-\sum_{x=1}^{|v|}P(x|t)*u_x=0进行求解。

3.语言模型

dcs224n-第二课-word2vec
语言模型的使用n-gram模型,即根据前n个字推测出第n+1字,使用简单的神经网络如上所示,经过词嵌入(word2vec)的编码方式将其转化为向量,输入到隐藏层然后使用tanh的**函数,最后使用使用解码方式转化为跟one-hot一样的维度,使用softmax得到对应的评价分数,然后取值。

先挖坑

1.后续使用tensorflow,pytorch实现上述的算法,算法完成(3.27日前);使用网上的小学生作文样本集,训练出来自动写作文(3.31日前)

2.超参数和**函数的学习与讨论