`
444878909
  • 浏览: 637836 次
文章分类
社区版块
存档分类
最新评论

转载:word2vec的学习思路

 
阅读更多

原文地址:http://www.douban.com/note/298095260/




2013-08-27 06:01:46
夜里坐在椅子上发着呆,想着到底接下来学点什么比较合适,大脑里把知识列举了一遍,却突然间把之前一直没有想通的word2vec明白了一些。
大致说一下该算法的学习顺序所及参考文献。不会Latex的人只能截图了…..

1. 多层神经网络




熟悉神网的人就不用再看了,总之就是一个简单的FeedForward运算, 然后通过基本的BP算法来做训练。

2. 概率语言模型

需读的paper:http://machinelearning.wustl.edu/mlpapers/paper_files/BengioDVJ03.pdf
该paper算是使用神经网络来做概率语言模型的始祖之作了,学习过LDA的同学不妨对照LDA来理解这篇paper的思路,不看其具体实现算法,其最不同的地方应该是通过N-gram引入了context的概念。
paper在第二节最初的时候就指明了我们需要优化的目标函数:



第六页的尾部及其第七页的顶部给出了待优化的参数:




优化算法就是基本的BP算法,虽然参数很多,但是别害怕,整体思路依旧是个链式的积分法则而已。

3. 通过分层优化语言模型
需读的paper:http://www.iro.umontreal.ca/labs/neuro/pointeurs/hierarchical-nnlm-aistats05.pdf
这篇paper的核心思想是如何解决所有词遍历的时间复杂度问题,可以看第三页的右侧中部:



paper将上一篇paper中的优化问题通过编码改成了一个优化编码位的问题,而接下来则是将该问题作为了一个二分类问题来解,可以看第四页的右侧中部:



在paper的第五节中使用wordnet对词进行编码:
A very important component of the whole model is the choice of the words binary encoding, i.e. of the hierarchical word clustering. In this paper we combine empirical statistics with prior knowledge from the WordNet resource (Fellbaum, 1998). Another option would have been to use a purely data-driven hierarchical clustering of words, and there are many other ways in which the WordNet resource could have been used to influence the resulting clustering
这个略作了解就可以了,并不重要。

4. Extensions of recurrent neural network language model
这篇paper从google上只能找到对应的slide,paper是麻烦在校的同学帮我下的,各位不妨去搜一下。
这篇paper主要讲了一些recurrent neural network来做language model的一些基础的方法及其优化函数,另外很重要的一点是该文在Speedup techniques的时候指出了,词出现的频率是不等的,如果将词分成20类的话,则第一类会出现很多类似“The”这种高频词,而最后一类则会是很多低频词。这也是word2vec优化效率的一个很重要的基础。
此外,该文章很重要的一个优化技术则是将词之间的条件概率模型转换成了类和词之间的条件概率模型,感兴趣的同学不妨看一下。

5. Word2vec
需读的paper:http://arxiv.org/pdf/1301.3781.pdf
嗯,就是Word2vec最基础的那篇paper,其实paper上没有讲什么内容。
2.1部分说明了时间复杂度的主要瓶颈:


在新的模型改进时,主要是做了如下的两点:



6. 工程化实现
先吐个槽,Google的这个代码写的真心是让人不忍过目,所以读代码之间各位不妨先自行整理一下代码,把方法该拆的拆开,该删的删掉,该换行的给换个行.......


<1> ExpTable:这个地方如果读过LibFm代码的人应该清楚,就是利用了Pre-Computing的思想对一些之前的东西来做缓存。
<2> 霍夫曼编码,这个地方是我之前看的最纠结的一个地方,但是读了上面第三段说的paper各位应该就明白意思了,其实通过频率对词进行霍夫曼编码的一个好处是大多数的词编码长度都很短,所以在做 P(a,b,c) = P(a | b,c) * P(b|c) * P(c) 这种运算的时候所需的次数都比较少,有效地降低了时间复杂度。

最后关于Skip-gram实现原理上没有什么区别,只是优化函数上略有不同,看一下paper的3.2节以及第五页的配图应该就很容易懂了。

2013-08-27 06:01:46
夜里坐在椅子上发着呆,想着到底接下来学点什么比较合适,大脑里把知识列举了一遍,却突然间把之前一直没有想通的word2vec明白了一些。
大致说一下该算法的学习顺序所及参考文献。不会Latex的人只能截图了…..

1. 多层神经网络




熟悉神网的人就不用再看了,总之就是一个简单的FeedForward运算, 然后通过基本的BP算法来做训练。

2. 概率语言模型

需读的paper:http://machinelearning.wustl.edu/mlpapers/paper_files/BengioDVJ03.pdf
该paper算是使用神经网络来做概率语言模型的始祖之作了,学习过LDA的同学不妨对照LDA来理解这篇paper的思路,不看其具体实现算法,其最不同的地方应该是通过N-gram引入了context的概念。
paper在第二节最初的时候就指明了我们需要优化的目标函数:



第六页的尾部及其第七页的顶部给出了待优化的参数:




优化算法就是基本的BP算法,虽然参数很多,但是别害怕,整体思路依旧是个链式的积分法则而已。

3. 通过分层优化语言模型
需读的paper:http://www.iro.umontreal.ca/labs/neuro/pointeurs/hierarchical-nnlm-aistats05.pdf
这篇paper的核心思想是如何解决所有词遍历的时间复杂度问题,可以看第三页的右侧中部:



paper将上一篇paper中的优化问题通过编码改成了一个优化编码位的问题,而接下来则是将该问题作为了一个二分类问题来解,可以看第四页的右侧中部:



在paper的第五节中使用wordnet对词进行编码:
A very important component of the whole model is the choice of the words binary encoding, i.e. of the hierarchical word clustering. In this paper we combine empirical statistics with prior knowledge from the WordNet resource (Fellbaum, 1998). Another option would have been to use a purely data-driven hierarchical clustering of words, and there are many other ways in which the WordNet resource could have been used to influence the resulting clustering
这个略作了解就可以了,并不重要。

4. Extensions of recurrent neural network language model
这篇paper从google上只能找到对应的slide,paper是麻烦在校的同学帮我下的,各位不妨去搜一下。
这篇paper主要讲了一些recurrent neural network来做language model的一些基础的方法及其优化函数,另外很重要的一点是该文在Speedup techniques的时候指出了,词出现的频率是不等的,如果将词分成20类的话,则第一类会出现很多类似“The”这种高频词,而最后一类则会是很多低频词。这也是word2vec优化效率的一个很重要的基础。
此外,该文章很重要的一个优化技术则是将词之间的条件概率模型转换成了类和词之间的条件概率模型,感兴趣的同学不妨看一下。

5. Word2vec
需读的paper:http://arxiv.org/pdf/1301.3781.pdf
嗯,就是Word2vec最基础的那篇paper,其实paper上没有讲什么内容。
2.1部分说明了时间复杂度的主要瓶颈:


在新的模型改进时,主要是做了如下的两点:



6. 工程化实现
先吐个槽,Google的这个代码写的真心是让人不忍过目,所以读代码之间各位不妨先自行整理一下代码,把方法该拆的拆开,该删的删掉,该换行的给换个行.......


<1> ExpTable:这个地方如果读过LibFm代码的人应该清楚,就是利用了Pre-Computing的思想对一些之前的东西来做缓存。
<2> 霍夫曼编码,这个地方是我之前看的最纠结的一个地方,但是读了上面第三段说的paper各位应该就明白意思了,其实通过频率对词进行霍夫曼编码的一个好处是大多数的词编码长度都很短,所以在做 P(a,b,c) = P(a | b,c) * P(b|c) * P(c) 这种运算的时候所需的次数都比较少,有效地降低了时间复杂度。

最后关于Skip-gram实现原理上没有什么区别,只是优化函数上略有不同,看一下paper的3.2节以及第五页的配图应该就很容易懂了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics