word2vec学习笔记

2019-05-17  本文已影响0人  全村希望gone

(说在前面,下面这篇笔记里有很多都是网上的内容,但考虑到没人看,所以我就不注明出处了)
由于最近在做病历处理方面的东西,需要提取病人口述的病症,根据病症预测病人患某种病的概率是多大。为了能让计算机处理病症,需要先将它们向量化,向量化有两种方式

one-hot向量

虽然onehot向量简单,但是向量维度和词语数量相等,而且因为存在大量的0,会导致浪费计算资源。另一个弊端是它无法反映词语之间的联系,所以转而用分布式表示。

分布式表示

分布式表示维度可控,不会因为词语过多而导致维度灾难,而且可以很好地反映词语之间的关系,通过计算欧式距离可以算出词语之间的相近程度。
分布式表示有以下几种

word2vec是包含CBOW和Skip-gram的训练词向量的工具。

所以学word2vec其实是在学CBOW和Skip-gram。CBOW是给定上下文单词来预测中心词,Skip-gram是给定中心词来预测上下文单词,如图所示


structure.jpg

问题及答案

1. CBOW和Skip-gram的输入和输出分别是什么形式?如何更新得到想要的词向量?
答:先说一下CBOW的网络结构,如图所示

CBOWstructure.jpg

输入层到隐藏层之间没有激活函数,隐藏层到输出层之间激活函数为softmax。
CBOW的输入是上下文单词的one-hot向量,这些向量分别乘以一个权重矩阵然后再相加求平均,输出是一个经过神经网络计算后的概率向量;
将这个概率向量与真实中心词(也是个one-hot向量)作比较,算出损失值,目标是让损失值达到最小
这样的话,模型中参数就会得到更新(这个参数就是词向量,看Notes),然后再取其它的上下文词,重复上述步骤。

CBOW1.JPG

skip-gram网络结构,如图所示

skipgramstructure.jpg

skipgram的输入是中心词的one-hot向量,输出是多个上下文单词的概率向量(它们的概率向量都是一样的),然后分别与它们所对应的真实词的one-hot向量作比较,最小化损失值。
这样的话,模型中参数就会得到更新(这个参数就是词向量,看Notes),然后再取其它的中心词,重复上述步骤,如图所示

skipgram.jpg

Notes:

上一篇 下一篇

猜你喜欢

热点阅读