码迷,mamicode.com
首页 > 其他好文 > 详细

【机器学习】word2vec

时间:2020-06-18 19:26:08      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:假设   特定   ack   通过   inpu   tps   问题   html   load   

 

 

在NLP中,对于把词转为向量的操作,最朴素的想法是one-hot独热编码形式,即一个词占一维向量。但这样有两个缺点:

1)不考虑词与词之间的顺序(文本中词的顺序也很重要)

2)假设词是独立的。例如猫和狗、床和沙发,词之间原本是有不同的亲疏远近关系的

3)得到的特征是稀疏的。如果所有的词各占一维,那么这个向量会过于稀疏,甚至造成维度灾难。

 

为了解决上述问题,引入distributed representation:通过训练,将每个词映射到较短的词向量上。实际中,较难对较短词向量的每个维度做很好解释。较短词向量的维度,一般训练时自己指定。

映射需满足:1)这个映射是单设;2)映射后向量不会丢失所含的信息。

这个映射过程称为word embedding(词嵌入),即将高维词向量嵌入到一个低维空间。也就是降维,但与单纯的降维也不同,这个嵌入的训练过程会引入词的上下文。感觉更像是CNN中channel数的变换。

有了distributed representation表示的较短词向量,可以更容易分析词之间的关系。例如vec(King) - vec(Man) + vec(Woman) = vec(Queen)

技术图片

 

 

 

word2vec

word2vec模型就是一个简化的神经网络

技术图片

 

 

input layer输入向量是one-hot形式。hidden layer没有激活函数,是线性单元。output layer维度与input layer维度一样,使用softmax。

当用这个模型训练好后,真正需要的是这个模型通过训练学得的参数,如隐层权重矩阵。

这个权重矩阵,

 

word2vec的输入/输出分为两种,CBOW(Continuous Bag-of-Words)与Skip-Gram。

CBOW 输入某特征词的上下文相关的词对应的词向量。输出这个特定词的词向量。

Skip-Gram与CBOW相反,输入特定一个词的词向量,输出特定词对应的上下文词向量。

CBOW对小型语料比较合适,Skip-Gram在大型语料中表现更好。

为什么??

CBOW

技术图片

 

 

输入层:

上下文单词的onehot作为输入。其中上下文单词数量为C,C这个由超参window size决定,如果window size=2 表示取target word的前两个单词和后两个单词作为input词,此时C=4。每个单词的向量dim为V。

所有onehot分别乘以共享的输入权重矩阵WV*N,其中N为超参

所得的向量相加求平均作为输入给隐层向量,得到的shape为 1*N

隐藏层:

输入的向量乘以输出权重矩阵WN*V ,得到的shape为 1*V。

输出层:

再经过softmax激活函数处理,得到 V 维的概率分布,每维代表一个单词。

概率最大的单词即为target word,即预测出的中间词。将target word与true label的onehot比较,误差越小越好。一般使用交叉熵代价函数。

根据此误差再更新权重矩阵。采用梯度下降法更新W和W‘。

 

训练完成后,输入层每个单词与W相乘得到的向量就是词向量(word embedding),W这个矩阵就是所有单词的word embedding,也叫look up table。有了look up table就可以免去训练过程直接查表得到单词的词向量了。

任一单词的onehot乘以W这个矩阵都将得到自己的word embedding了。

那 W ‘ 不需要了吗?

 

Skip-Gram

 

参考博客:

https://www.jianshu.com/p/471d9bfbd72f

https://zhuanlan.zhihu.com/p/26306795

https://www.cnblogs.com/peghoty/p/3857839.html

 

【机器学习】word2vec

标签:假设   特定   ack   通过   inpu   tps   问题   html   load   

原文地址:https://www.cnblogs.com/YeZzz/p/13159090.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!