【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

完。

时间: 2024-08-05 07:00:33

【doc2vec】学习笔记:From word2vec to doc2vec: an approach driven by Chinese restaurant process的相关文章

LDA-Latent Dirichlet Allocation 学习笔记

以下内容主要基于<Latent Dirichlet Allocation>,JMLR-2003一文,另加入了一些自己的理解,刚开始了解,有不对的还请各位指正. LDA-Latent Dirichlet Allocation JMLR-2003 摘要:本文讨论的LDA是对于离散数据集,如文本集,的一种生成式概率模型.LDA是一个三层的贝叶斯分层模型,将数据集中每一项,如每个文本,建模为某些未知的topic组成的集合的混合.每个topic又建模为某种混合概率分布.在文本建模中,话题的概率就提供了每

学习笔记TF039:TensorBoard

首先向大家和<TensorFlow实战>的作者说句不好意思.我现在看的书是<TensorFlow实战>.但从TF024开始,我在学习笔记的参考资料里一直写的是<TensorFlow实践>,我自己粗心搞错了,希望不至于对大家造成太多误导. TensorBoard,TensorFlow官方可视化工具.展示模型训练过程各种汇总数据.标量(Scalars).图片(Images).音频(audio).计算图(Graphs).数据分布(Distributions).直方图(Hist

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Activiti 学习笔记记录(三)

上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl