首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pyLDA系列︱考量时间因素的动态主题模型

终于把pyLDA系列的三部曲写完啦~

最后的这个是加入时间属性的动态主题模型,使用Python中的gensim库,要比c++的库慢上5-7倍。该系列内容的整理表格。

理论介绍:

Dynamic Topic Models (DTM) leverages the knowledge of different documents belonging to a different time-slice in an attempt to map how the words in a topic change over time.

(1)You want to find semantically similar documents; one from the very

beginning of your time-line, and one in the very end.

从一个时间点到另外时间点中,相似文章有哪些。基于时间的主题,里面的关键词却会发生相应变化。

传统的相似技术不可能做到这样的效果,相同的主题基本内容不变,但是关键词会随着时间而发生变化,也就是所谓的:Time corrected

Document Similarity 具有时间校对功能的文档相似性

(2)第二个性能:观察主题中,关键词随时间如何变化,随着时间变化,一开始主题中的词语比较发散式,之后会变得越来越成熟。相关理论可见:

(3)常规性能 the points of interest would be in what the topics are and

how the documents are made up of these topics.

先来看看python+gensim中实现该DTM模型的所需材料:

功能点归纳:

时间-主题词条矩阵

主题-时间词条矩阵

文档主题偏好

新文档预测

跨时间+主题属性的文档相似性

1、时间-主题词条矩阵

ldaseq.print_topics(time=1)

>>>[[(u'blair',0.0062483544617615841), (u'labour',0.0059223974769828398)], [(u'film',0.0050860317914258307), (u'minister',0.0044210871797581213)], [(u'government',0.0039312390246381002), (u'election',0.0038787664682510613)], [(u'prime',0.0038773564950156151), (u'party',0.0036428824115890975)], [(u'brown',0.0034964052703373195), (u'howard',0.0032628247571913969)]

返回的内容是,每个时期的5个主题,案例中为时期记号为’0’的时期中,5个主题内关键词分别是什么。

2、主题-时间词条矩阵

这点应该是该模型的主要模块。

ldaseq.print_topic_times(topic=)

>>>[[(u'blair',0.0061528696567048772), (u'labour',0.0054905202853533239)], [(u'film',0.0051444037762632807), (u'minister',0.0043556939573101399)], [(u'government',0.0038839073759585367), (u'election',0.0037979240057325865)]

返回的内容是:每个主题的3个时期,主题重要词分别是啥。

3、文档主题偏好

doc = ldaseq.doc_topics(558)

# check the 558th document in the corpuses topic distribution

print(doc)

>>>[5.46298825e-052.18468637e-015.46298825e-05

5.46298825e-057.81367474e-01]

五个主题中,第558篇文章对1,4号主题更为偏好。

4、新文档预测

如果有一个新文档过来,怎么进行预测呢?

doc_football_1 = ['economy','bank','mobile','phone','markets','buy','football','united','giggs']doc_football_1 = dictionary.doc2bow(doc_football_1)doc_football_1 = ldaseq[doc_football_1]print(doc_football_1)>>> [.00110497.00110497.00110497.00110497.99558011]

步骤就是先把文档分词,然后进行矢量化,然后就可以用模型进行预测,可见结果,与doc_topics 类似,返回的是该新文档,与四号主题比较贴合。

5、跨时间+主题属性的文档相似性

dtms主题建模更方便的用途之一是我们可以比较不同时间范围内的文档,并查看它们在主题方面的相似程度。当这些时间段中的单词不一定重叠时,这是非常有用的。

doc_football_2 = ['arsenal','fourth','wenger','oil','middle','east','sanction','fluctuation']doc_football_2 = dictionary.doc2bow(doc_football_2)doc_football_2 = ldaseq[doc_football_2]>>> array([.00141844,.00141844,.00141844,.00141844,.99432624])hellinger(doc_football_1, doc_football_2)>>>.0062680905375190245

步骤跟之前的预测差不多,先把文档矢量化,然后变成文档主题偏好向量(1*5),然后根据两个文档的主题偏好向量用hellinger距离进行求相似。

6、可视化模块DTMvis

时间维度的DTM模型、作者监督的ATM模型,让主题建模分析变得生动了不少。同一套数据,如果既有作者,又有时间维度,那么可以结合一起分析,联合分析一定更为有趣~

欢迎一起讨论该系列的更多分析玩法~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180226G0QZ0I00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券