【doc2vec】学习笔记:From word2vec to doc2vec: an approach driven by Chinese restaurant process

主要内容:
在google word2vec的基础上,考虑文章(document)的向量化方法,借鉴了随机过程中的Chinese restaurant process过程。


Chinese restaurant process过程:
基本上的过程就是,餐馆中有无限多个桌子,每个桌子可以坐无限多个人。当第一位顾客过来的时候,直接开辟一张桌子坐下;当第n+1位顾客过来的时候,他有n/(n+1)的概率坐到前面n个人已经占据的桌子上,也有1/(n+1)的概率开辟一张新的桌子独自坐下。细节可以参考wiki上的介绍(http://en.wikipedia.org/wiki/Chinese_restaurant_process)

作者主要想法:
1. google word2vec能够把词语表示成为实属向量,如何表示由词语组成的文章?一个最简单的方法就是把文章中所有词语的实属向量的每个维度的值相加,形成新的向量。(也有方法是求平均、或者是求加权平均)。不过这样做恐怕会损失文章的语义信息。
2. 作者的想法是,将文章中的词语聚类,挑选具有代表性的一个词语聚类结果,来表示文章(的主要语义内容),并用这个聚类结果中的词语向量,进行相加,最终获得代表文章的实属向量。
3. 聚类方法有很多,kmean、层次聚类、等等。不过,这些方法依赖于词语向量之间的“几何距离”,如:欧氏距离。google word2vec的结果,计算cosine的效果比较好,在几何距离的度量上,效果还有待验证。所以上述方法有风险。
4. 作者最终利用Chinese restaurant process这个随机过程做词语聚类——按需求对原始随机过程做了一定的变形

作者的实际做法:
step1:当遇见文章第一个词语的时候,以这个词语创建一个cluster,并记住该词语对应的实属向量(实际记住的应该是该cluster中所有词语的实属向量在各个维度上的和——如果把这个cluster看成一篇doc的话,就是该doc的表示方式)
step2:当第n+1个词语过来的时候,假设此时之前的n个词语聚类成为C个类别,则计算当前词语和这C个词语类别的cosine距离(如step1所述:每个词语类别的代表向量是该类别中所有词语的向量的求和),并记住最相似的那个类别C_i,以及对应的相似度值Sim_i。此时,有两种不同的作法:
step3-1:以1/(n+1)的概率创建一个新的词语cluster,或者,将这第n+1个词语归并到类别C_i中去,并更新类别Ci的表示向量。
这种做法,更容易形成更多的类别,且每个类别中的词语并不太多。作者最终没有采用这种方法,而是采用了下面这种更复杂的作法。
step3-2:判断是否 Sim_i > 1/(n+1),如果是,则第n+1个词语归并到类别C_i中去,并更新类别Ci的表示向量;否则,以1/(n+1)的概率创建一个新的词语cluster,以n/(n+1)的概率将第n+1个词语仍旧归并到类别C_i中去。
这种做法,作者评价,会产生较少的类别,且每个类别中的词语比较多,这是作者最终采用的方法。

如何选择cluster作为doc的代表cluster?
在文章中,作者是靠肉眼看的——汗!不过作者也提供了一些思路,来作自动选择:
1. idf:cluster中词语的idf越大,说明该类别中的词语和文章关联越大。
2. pos:......
3. 用同样的方法生成doc中每个类别的表示向量、以及title的表示向量,计算cluster和title的关联,关联越大越能够代表文章


附:《From word2vec to doc2vec: an approach driven by Chinese restaurant process》的文章链接:http://eng.kifi.com/from-word2vec-to-doc2vec-an-approach-driven-by-chinese-restaurant-process/


如转载请注明出处:http://blog.csdn.net/xceman1997/article/details/46277129


完。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。