gensim中动态主题模型(DTM)两种实现方法(一)
目录
(一)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这两个包使用的方法及区别。
(一)gensim.models.ldaseqmodel包
1、基本使用方法
这个包是动态主题模型的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函数,看名字貌似用于主题结果可视化的。其实不要被名字误导,这个函数仅仅是生成归一化后的主题文档矩阵等内容。如果要可视化,还需要进一步转换。
2、缩水的地方
请注意看其源代码中的这一段注释。注释中明确说明下一步准备实现的功能是(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.
gensim中动态主题模型(DTM)两种实现方法(一)相关推荐
- gensim中动态主题模型(DTM)两种实现方法(二)
第一部分内容请点此阅读:gensim中动态主题模型(DTM)两种实现方法(一) 目录 (二)gensim.models.wrappers.dtmmodel.DtmModel包 1.如何使用呢? 2.c ...
- Gensim中动态主题模型——dtmmodel的使用
import gensim import jieba import pandas as pd from gensim import corpora,models from gensim.models. ...
- Json返回时间中出现乱码问题的两种解决方法
Json返回时间中出现乱码问题的两种解决方法 参考文章: (1)Json返回时间中出现乱码问题的两种解决方法 (2)https://www.cnblogs.com/hanyinglong/archiv ...
- 在.NET中执行Async/Await的两种错误方法
微信公众号:架构师高级俱乐部 关注可了解更多的编程,架构知识.问题或建议,请公众号留言; 如果你觉得此文对你有帮助,欢迎转发 在.NET中执行异步/等待的两种错误方法 在应用开发中,我们为了提高应用程 ...
- c++STL中的find()函数 有两种使用方法
c++STL中的find()函数 有两种使用方法 方法一: 开头引头文件:中的函数 其调用形式为 find(start,end,value) start搜寻的起点,end搜寻的终点,要寻找的value ...
- Java中关于Arrays.sort的两种重载方法的理解
前言 在java中重载排序方法的方法目前有两种,一种是实现Comparable接口的compareTo方法,还有一种是用比较器(comparator) 作为参数,其中比较器是实现了Comparator ...
- 计算机一级无法打开office,电脑中无法运行Office2016的两种解决方法
最近,有些用户在电脑中安装完office2016后打开该程序时总是提示:无法启动此程序,因为计算机中丢失 api-ms-win-crt-stdio-l1-1-0.dll .那么,遇到这问题该怎么来解决 ...
- 风控模型中特征重要度的两种筛选方法
在采用决策树算法建立模型的场景中,例如GBDT.XGBoost.LightGBM.Random Forest等,我们习惯通过Feature Importance指标作为特征筛选的重要方法之一.从特征定 ...
- python timer使用-python中timer定时器常用的两种实现方法
方法一,使用线程中现成的: 这种一般比较常用,特别是在线程中的使用方法,下面是一个例子能够很清楚的说明它的具体使用方法: #! /usr/bin/python3 #! -*- conding: utf ...
最新文章
- R使用Iris数据集构建SVM分类器
- Linux查看用户所属用户组
- NUMA的取舍与优化设置
- SAP Spartacus的PWA支持
- C语言指针和数组概述
- 《C程序设计语言》笔记 (三) 控制流
- 推荐一个高仿微信的项目 有点屌!!!
- java中容器如何维护其内容
- JavaScript打开窗口
- 书论20 袁昂《古今书评》
- 某型发动机整机测试研究
- 《小窗幽记》卷六 集景
- 字节跳动的师兄跟我说:要带着离职的心态去入职?
- ubuntu目录结构简述
- android提取串口返回nmea,实现GPS 串口 NMEA 解析的代码
- Canal同步Elasticsearch
- linux unzip和zip,zip和unzip压缩与解压
- 高级排产软件按库存生产的优缺点
- java-php-python-基于springboot+vue的线上学习系统计算机毕业设计
- c语言一行黑白相间的瓷砖,卫生间黑白色的瓷砖好看吗 4款卫生间黑白瓷砖铺贴搭配效果图...