Gensim中動態(tài)主題模型之dtmmodel的使用-創(chuàng)新互聯(lián)

>import gensim

永德網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),永德網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為永德上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的永德做網(wǎng)站的公司定做!

import jieba

import pandas as pd

from gensim import corpora,models

from gensim.models.wrappers import DtmModel

from gensim.corpora import Dictionary

from collections import defaultdict

gensim模塊中的動態(tài)主題模型并不在官方所提供的代碼里。想要使用動態(tài)主題模型,必須先下載保存在github上的二進(jìn)制文件,這個文件有適合linux、win和darwin使用的版本,可直接下載,很方便。

文本要求

根據(jù)我的理解,簡單來說,動態(tài)主題模型就是一種動態(tài)調(diào)參的LDA主題模型,通常將時間線分為幾個等長的時間片。因此按照gensim里的這個模型要求,你必須先把整個事件片里的文本整合到一起,簡而言之,就是你最后放到模型里跑的那個文本列表的長度,必須等于你把時間線分成的段數(shù)。

我在使用的時候,一共八個月,被我分為了八段,所以你最后的corpus的這個list的len也要是8

分詞處理

接下來,你需要先對你需要分析的文本進(jìn)行分詞處理,我使用的代碼如下:

train = []#儲存分詞結(jié)果的list

for line in comment:

line = line.strip()

line = "".join(line.split())

if not len(line):#判斷是否為空行

continue

outstr = ' '

seg_list =jieba.cut(line)

for word in seg_list:

if word not in stopword:

if word != '\t' and word != u'\u200b' and word != '~':

outstr += word

outstr += " "

train.append(outstr.strip().split(" "))

得到train后,還可以篩選掉低頻的單詞:

frenquecy = defaultdict(int)

for patch in train:

for token in patch:

frenquecy[token] += 1

train = [[token for token in patch if frenquecy[token] > threshold]

for patch in train]

然后把分詞結(jié)果向量化:

dic = Dictionary(train)

corpus = [dic.doc2bow(text) for text in train]

這里需要用doc2bow函數(shù)把分詞結(jié)果轉(zhuǎn)化為bow格式的向量list

dtm模型構(gòu)建

可以先去官網(wǎng)看一下,看不懂英文的chrome翻一下就好了

class gensim.models.wrappers.dtmmodel.DtmModel(dtm_path,corpus = None,time_slices = None,mode ='fit',model ='dtm',num_topics = 100,id2word = None,prefix = None,lda_sequence_min_iter = 6,lda_sequence_max_iter = 20,lda_max_em_iter = 10,alpha = 0.01,top_chain_var = 0.005,rng_seed = 0,initialize_lda = True )

dtm_path(str) - dtm二進(jìn)制文件的路徑,例如/ home / username / dtm / dtm / main。

corpus(iterable of (int ,int )的迭代) - BoW格式的文本集合。

time_slices(int的列表) - 時間戳序列。

mode({'fit' ,'time'} ,可選) - 控制模式的模式:'fit'用于訓(xùn)練,'time'用于根據(jù)DTM分析文檔,基本上是一組。

model({'fixed' ,'dtm'} ,可選) - 將運(yùn)行的控制模型:'fixed'用于DIM,'dtm'用于DTM。

num_topics(int ,optional) - 主題數(shù)。

id2word(Dictionary,可選) -令牌ID和從胼字之間的映射,如果不是指定的-將被從推斷語料庫。

prefix(str ,optional) - 生成的臨時文件的前綴。

lda_sequence_min_iter(int ,optional) - LDA的最小迭代次數(shù)。

lda_sequence_max_iter(int ,optional) - LDA的大迭代次數(shù)。

lda_max_em_iter(int ,optional) - LDA中的大em優(yōu)化迭代。

alpha(int ,optional) - 超參數(shù),它影響每個時間片中LDA模型的文檔主題的稀疏性。

top_chain_var(int ,optional) - 影響的超參數(shù)。

rng_seed(int ,optional) - 隨機(jī)種子。

initialize_lda(bool ,optional) - 如果為True - 使用LDA初始化DTM

這里的第一個參數(shù)dtm_path,就是指放置你下載的二進(jìn)制文件的位置。

整個函數(shù)中,最玄幻的參數(shù)就是這個time_slices。源代碼中要求,sum(time_slices)要等于你時間片的個數(shù),即len(corpus),但是這個實際上可以有無數(shù)種組合,可是官方文檔里并沒有寫具體這個參數(shù)會對模型有什么樣的影響,我也沒搞懂,就只能使用官方文檔例子的寫法time_slices = [1] * len(corpus)

其他參數(shù)可以使用函數(shù)的默認(rèn)值,也可以自己慢慢調(diào)整。

根據(jù)官方文檔中說的,模型有兩種模式,一種是fit,一種是time。fit完全正常運(yùn)行,但是time這個模式是根據(jù)時間戳進(jìn)行分析的模式,可見這是我們想要的模式。但是在實際調(diào)用時卻出現(xiàn)問題:

問題1

會告訴你某一個函數(shù)返回了非0值,報錯。根據(jù)錯誤提示,我們一直找到gensim中的utils.py中的1916行,把這里改成:

try:無錫人流多少錢 http://www.bhnfkyy.com/

error = subprocess.CalledProcessError(retcode,cmd)

except Exception:

error = None

問題2

接下來還會報錯,會告訴你各種模型所需要的文件均不存在。我用了好久才明白是怎么回事,原來這個模式自己并不會生成這些初始化的文件,而是需要先運(yùn)行一次fit模式,再使用fit模式初始化的文件來運(yùn)行time模型,但是源代碼里并沒有寫這個部分,導(dǎo)致運(yùn)行失敗,因此修改源代碼dtmmodel.py中的164行:

if corpus is not None:

if self.mode == 'time':

print("time mode")

self.train(corpus, time_slices, 'fit', model)

self.train(corpus, time_slices, mode , model)

elif self.mode == 'fit':

print("train mode")

self.train(corpus, time_slices, mode , model)a

這樣,就能正常運(yùn)行time模式。代碼如下:

model = DtmModel(path_to_dtm_binary,corpus = corpus,time_slices=time_slice,

id2word=dic,num_topics = num_topics,alpha = alpha,mode='time')

查看的得到的主題:

model.show_topics(num_topics = 10,times=1)

其他使用方法看官方文檔就好了

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站標(biāo)題:Gensim中動態(tài)主題模型之dtmmodel的使用-創(chuàng)新互聯(lián)
當(dāng)前地址:http://muchs.cn/article12/dssodc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)網(wǎng)站設(shè)計公司、網(wǎng)站策劃域名注冊、小程序開發(fā)、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)