>import gensim
永德網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),永德網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為永德上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ù)種組合,可是官方文檔里并沒有寫具體這個參數(shù)會對模型有什么樣的影響,我也沒搞懂,就只能使用官方文檔例子的寫法time_slices = [1] * len(corpus)
其他參數(shù)可以使用函數(shù)的默認(rèn)值,也可以自己慢慢調(diào)整。
根據(jù)官方文檔中說的,模型有兩種模式,一種是fit,一種是time。fit完全正常運(yùn)行,但是time這個模式是根據(jù)時間戳進(jìn)行分析的模式,可見這是我們想要的模式。但是在實(shí)際調(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ù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。