内容来自于论文、知乎、csdn、雷锋等各类网站。因为在学习过程中也看了不少过分“深入”的教程,导致起初学习进度缓慢,因为将觉得较为适合的内容整理在此处。以下内容不会过多地涉及数学公式推导。当然使用Gensim就可以轻松调用Word2vec,并且w2v也并非最新的理论成果,但是在使用时能理解其中含义,就算调参也会让人更嗨。为了方便记录,本着利人利己的考虑写下这篇文章。
这两篇强推,写得很清楚简洁
https://blog.csdn.net/bitcarmanlee/article/details/82291968
https://www.jianshu.com/p/d6a0aec6e9a1
xinron的论文,当然我是看了一些之后再看的这篇,进一步验证了想法
https://arxiv.org/abs/1411.2738
来自机器不学习,以Skip-Gram为例子讲解了结构,并给出了代码示例
https://www.leiphone.com/news/201706/PamWKpfRFEI42McI.html
训练篇
https://www.leiphone.com/news/201706/PamWKpfRFEI42McI.html
使用TensorFlow实现
https://www.leiphone.com/news/201706/QprrvzsrZCl4S2lw.html
PS.以上三篇机器不学习的内容属于一个系列,主要以Skip-Gram为例子讲解了Word2vec的结构,给出了实例代码,经验证此团队提供TF1.0代码做一些简单的改动就可以跑通。
当然上面的几篇内容也足以完成入门,同时自己再看看各类博客或者代码了解一些技巧便会有极大的提高。以下是我归纳总结的内容。
尽管这两张图只要读者看过博客或者是教程都快看吐了,但是还是得放,因为什么叫经典,这**就叫经典。
首先单就这两张图而言,看起来是借助上下文预测中间词,或者是借助中间词预测上下文。但Word2vec最重要的内容就诞生于此,通过前向传播和反向传播,训练隐藏层权重矩阵,而最后得到的Hidden layer就是我们这里需要的词向量,which means 当训练完成后Hidden layer 后面的部分都可以不去理会。因为训练出模型后,转换成的词向量就是中间的Hidden layer。
从skip-gram出发,input层是将单词转换成one-hot向量进行输入。
什么是one-hot向量?
就是比如一个词库有N个单词,以此构建一个1*N向量,假设输入单词排在第6个,那么向量只有第6个是1其余都是零。只有一个是hot的。
因而input输入了一个1*V的向量,经过权重矩阵V*N 成为1*N向量,就是中间的Hidden layer,接下来经过并行的C个N*V权重矩阵,得到的依然是C个1*V的向量,并且经过output上的softmax,得到的output是对每个单词出现的预测概率。
而对于Cbow
正如图上所示,Cbow一开始有C个词的input,但这不是问题,依然和前文一样只不过这里将C个1*V的input分别和同一个V*N的权值矩阵相乘,从而得到C个1*N的Hidden layer,此时将这C个hidden layer平均,成为唯一一个1*N的hidden layer。随后的步骤便如同上文。
①尽管我们有了output但是真考虑的还是我们的hidden layer 还有前面的权值矩阵。我们在上文提到了input无论何时都是one hot向量。所以,当我们真正使用Word2vec时,无需真的正直的做一遍矩阵乘法,而是找到1是第几个,然后再矩阵找到对应的行。这就成了一个查表问题。
②当然在计算时因为计算量过大,所以会有些注入negative word等的方法来帮助减少计算等的小技巧,他人的推文已经写得很具体,推荐看这篇最后的内容
https://www.leiphone.com/news/201706/eV8j3Nu8SMqGBnQB.html
③写到这里我开始发现,当坐着了解这个内容的时候会过多的纠结深层次的问题,比如数学细节或者是一些更细致末梢的内容。而忽略了真正的观众是对这一块内容并不了解的人,是渴望用最浅显语言和数字和图片来揭示实质,而非期待一上来用大量的推导劝退。希望这篇博文能够帮到有需要的人,不管是我手写的内容或者文中的推荐