目录
(一)gensim.models.ldaseqmodel包
1、基本使用方法
2、缩水的地方
(二)gensim.models.wrappers.dtmmodel.DtmModel包
1、没有c语言联调怎么使用呢?
2、c语言运行的二进制文件作为参数
3、基本函数的使用
参考文献:
动态主题模型(Dynamic Topic Model)是David M. Blei[1]等人对隐狄利克雷模型LDA(Latent Dirichlet Allocation)的改进。两种模型都可以进行文本的主题分析。而动态主题模型在LDA分析的基础上引入了时间维度,可以更好的建模主题在时间序列上的发展和演变。因此,动态主题模型被广泛应用于网络话题演化的分析。
有关LDA和DTM的Python实现,网上的教程比较丰富,在此不再赘述。笔者注意到,网上很多教程在介绍gensim中动态主题模型建模的包时,经常将gensim中两个包混淆。这极容易让人产生误解,同时也会导致运行时出现奇怪的错误。因此,本文将详细梳理一下gensim中实现动态主题模型的gensim.models.ldaseqmodel包和gensim.models.wrappers.dtmmodel.DtmModel这两个包使用的方法及区别。
这个包是动态主题模型的python版(论文作者分享的原始DTM是linux下c语言实现,一般用户使用时,容易产生联调错误,入门较难)。因此,在gensim的model下的ldaseqmodel包是根据原始c语言,改变为python版本的实现(功能上有缩水,后面会谈到)。因此,在该包源文件中可以看到详细的python源代码。
其模型生成的一般形式为:
model = ldaseqmodel.LdaSeqModel(corpus=corpus, id2word=dictionary,
time_slice=time_slice,
num_topics=ntopics)
其中,corpus是利用gensim.corpora包生成的BoW或TF-IDF语料库。id2word可以传递字典(语料库词典和索引构成),也可以省略,如果省略,将会按corpus自动生成。time_silce传递的是一个列表参数,代表每个时段语料数量(不是传递时间,而是不同时间范围的文本数量)。num_topics指主题数量。这个模型我在电脑上运行的时间超级长(10000多个文本,15个主题的量,也有文献说需要运行6个小时,我的大概在4-5小时),不知原因何在。
ldaseqmodel中的函数很多,但很多都是用来模型生成的,不需要外部调用。模型生成后,主要会使用到函数如下:
def print_topic_times(self, topic, top_terms=20):#获取每个时间片下指定主题的高概率主题词
def print_topics(self, time=0, top_terms=20):#获取指定时间下,所有主题的主题词
def print_topic(self, topic, time=0, top_terms=20):#上述两个函数的合体
def dtm_coherence(self, time):#计算指定时间,主题的一致性
需要注意的是,里面还有一个dtm_vis函数,看名字貌似用于主题结果可视化的。其实不要被名字误导,这个函数仅仅是生成归一化后的主题文档矩阵等内容。如果要可视化,还需要进一步转换。
请注意看其源代码中的这一段注释。注释中明确说明下一步准备实现的功能是(DIM,Document Influence Model)。这个是Blei另一篇论文的研究[2]。在c语言版本中有,但是大牛给迁移为python版时,还没顾上实现呢。真是够皮的,既然这么牛,干啥不一劳永逸的实现了。写着写着还撂挑子(在阅读源代码时,会看到一些奇怪的判断,是为DIM实现留接口,只是不知道原作者还记得这个事情不)。因此,如果想利用DTM分析文档在主题演化中重要程度的,用这个版本无法实现,如何实现,请看下篇。
TODO: The next steps to take this forward would be:
#. Include DIM mode. Most of the infrastructure for this is in place.
#. See if LdaPost can be replaced by LdaModel completely without breaking anything.
#. Heavy lifting going on in the Sslm class - efforts can be made to cythonise mathematical methods, in particular,
update_obs and the optimization takes a lot time.
#. Try and make it distributed, especially around the E and M step.
#. Remove all C/C++ coding style/syntax.
继续阅读,请参阅gensim中动态主题模型(DTM)两种实现方法(二)
[1]Blei D M , Lafferty J D . Dynamic Topic Models[C]// Machine Learning, Proceedings of the Twenty-Third International Conference (ICML 2006), Pittsburgh, Pennsylvania, USA, June 25-29, 2006. 2006.
[2]Gerrish S, Blei D M. A Language-based Approach to Measuring Scholarly Impact[C]. international conference on machine learning, 2010: 375-382.