你真的懂Word2Vec?

       说到Word2Vec,都一直似懂非懂,不知道是搜索引擎问题还是,那些博主有些二,反正他们说的东西菜鸟(我还不算菜鸟)看了觉得以为懂了。其实要他们把这个算法写出,估计没有一个人,真正懂的人肯定是从其他渠道获知或者下功夫去理解的。个人认知这概念很久了,从一些老师讲解也好网上博客也好,我自以为懂了,现在要用了,结果都不知道原理。写这篇文章是让菜鸟们知道网上还是有懂的人愿意分享。

启文说明

       先了解这两篇文章,来自知乎里面分享,知乎里面的人感觉都是爱学习的人,而百度一天不如一天,搜索的都是广告和没有价值的废话,找很久才有一个像样解决你疑惑的文章。我主要是了解skipgram怎么个过程,所以才找了两个网文,开始是想找skipgram原始论文的。

https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/

https://www.leiphone.com/news/201706/PamWKpfRFEI42McI.html

Word2Vec用来干什么的?

       Word2Vec是一种词嵌入方法,这个方法有两个模型CBOW和Skip-Gram,在应用过程中不区分,用任何一个都可以。词嵌入就是词用向量表示的过程。先不要去理解环境预测词,词预测环境,这句话跟通常理解不一样。

       先来了解下我们熟悉的这个图:

                                                 你真的懂Word2Vec?

无论是CBOW还是SkipGram都是用的这个图的原理,输入->隐层->输出层。

问题1:我们主要目的是什么?

答:为了将“词”转换为稠密的数字向量,就是词嵌入。

问题2:我们需要的向量是计算后输出的向量?

答:当然不是,我们做的一切都是要得到隐层变量h,换句话来说是W这个最终矩阵

问题3:详细说明这个过程。

答:

                                         你真的懂Word2Vec?

     一个词的one-hot编码做输入,通过中间初始矩阵W得到一个隐向量。这个向量就是我们想要的。但是,这样结束的话,后面过程就没意义了,而且得到的向量就是普通的Embedding。所以,后面部分W'是用来训练用的,反向传播误差。就是论文写的公式,一样的东西计算。

问题4:关于W和W'注意什么?

答:输入是一个词X的one-hot,输出是一个词的概率和输出词Y的one-hot计算误差反向传播,(X,Y)样本不是同一个,W和W'是同一个,训练的时候回改变值。

 

再谈Skip-Gram

                                                                     你真的懂Word2Vec?

 Skip-Gram特别难理解,主要是多个输出的含义,我们知道一个向量乘以一个矩阵就只有一个结果,但是上图给出了 多个,怎么理解,无法理解。开始给出的文章中,英文 网文是这样理解的:

你真的懂Word2Vec?

多个词Y同时参与,用于计算总误差,然后误差反向。

 

其他 

                           你真的懂Word2Vec?

这张图的存在就是用于展示训练网络结构,是一个(X,Y)样本结构,然后用这个结构训练。

CBOW类似,要比Skip-gram容易理解些,详细见前面英文的网文。

关于Huffman和负采样具体技术可以其他地方看。它们两个应用都在训练结构部分,huffman在模型训练前建立。

注意的是,huffman和负采样这两个方法与CBOW和Skip-Gram两个模型,不是一对一的,模型想用哪个优化方法都可以。这点很多人的晓得,总有人不知道。

训练过程就是从文章生成的(X,Y)集合的迭代。