1.one-hot编码
为了机器更加方便的计算,将字或者词转化为向量进行计算更加方便,机器也能更好的识别。使用one-hot编码,one-hot的编码的意思是:字典库中有n个词,每个词都有一个对应的向量,向量的维度为1*n,第2个词的向量为[0,1,0,……,0]T,同理第三个词的向量为[0,0,1,……,0]T,即第i位为1,其它位都是0。
2.word2vec编码
使用one-hot编码比较清晰易读,但是维度很大,在多层的神经网络计算中会造成维度爆炸,这个时候计算难度增加,网络进行训练使用的时间是无法忍受的。这个时候使用word2vec编码,即每一个字(词)有两个向量表示它,一个是中心向我们使用V表示,一个是上下文向量使用u表示。借用语言模型的概念,对于一个句子S,中心词为t,计算该句子的概率为:
P(θ)=t=1∏T−m≤j≤m∏P(wt+j∣wt;θ),j=0因为是训练中的句子,所以就是需要使P(θ)最大,连乘容易造成梯度消散,所以对其取对数,转化为求和,并取负数转化为求最小化,此时目标函数为:J(θ)=−T1t=1∑T−m≤j≤m∑logP(wt+j∣wt;θ)j=0softmax的操作是放大差异,对于P(wo∣wt)=∑w=1∣v∣exp(uwvt)exp(uovt),w=t所以对于中心向量vt,要使P最大,所以对P求关于vt的微分:∂vt∂logP=∂vt∂logexp(uovt)−∂vt∂logw=1∑∣v∣exp(uwvt)又因为∂vt∂logexp(uovt)=uo并且根据链式法则:∂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最终上面的式子转化为:uo−x=1∑∣v∣P(x∣t)∗ux=0进行求解。
3.语言模型
d
语言模型的使用n-gram模型,即根据前n个字推测出第n+1字,使用简单的神经网络如上所示,经过词嵌入(word2vec)的编码方式将其转化为向量,输入到隐藏层然后使用tanh的**函数,最后使用使用解码方式转化为跟one-hot一样的维度,使用softmax得到对应的评价分数,然后取值。
先挖坑
1.后续使用tensorflow,pytorch实现上述的算法,算法完成(3.27日前);使用网上的小学生作文样本集,训练出来自动写作文(3.31日前)
2.超参数和**函数的学习与讨论