最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

拓端tecdat:Python主題建模LDA模型、t-SNE 降維聚類、詞云可視化文本挖掘新聞組數(shù)據(jù)

2021-12-16 16:55 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=24376

原文出處:拓端數(shù)據(jù)部落公眾號(hào)

在這篇文章中,我們討論了基于gensim?包來(lái)可視化主題模型 (LDA) 的輸出和結(jié)果的技術(shù)?。

介紹

我們遵循結(jié)構(gòu)化的工作流程,基于潛在狄利克雷分配 (LDA) 算法構(gòu)建了一個(gè)主題模型。

在這篇文章中,我們將使用主題模型,探索多種策略以使用matplotlib?繪圖有效地可視化結(jié)果?。

我將使用 20 個(gè)新聞組數(shù)據(jù)集的一部分,因?yàn)橹攸c(diǎn)更多地放在可視化結(jié)果的方法上。

讓我們從導(dǎo)入包和 20 News Groups 數(shù)據(jù)集開始。


  1. import matplotlib.pyplot as plt


  2. # NLTK停止詞

  3. fom nlt.copus imort stowods

  4. sop_wrds = stowords.wrds('chinse')




導(dǎo)入新聞組數(shù)據(jù)集

讓我們導(dǎo)入新聞組數(shù)據(jù)集并僅保留 4 個(gè)?類別。

  1. # 導(dǎo)入數(shù)據(jù)集


  2. d = f.oc[dftargt_name.in([so.relion.chritan], 'ec.sot.okey', 'ak.piticmdast' 'rec.oorcyces']) , :]

  3. prin(f.hpe) #> (2361, 3)

  4. df.(

標(biāo)記句子并清理

刪除電子郵件、換行符、單引號(hào),最后使用 gensim 將句子拆分為單詞列表?simple_preprocess()。設(shè)置?deacc=True?選項(xiàng)會(huì)刪除標(biāo)點(diǎn)符號(hào)。


  1. def snds(seecs):

  2. for setees in sntces:

  3. sent = r.sub('\S*@\S*\s?', '', sent) # 刪除電子郵件

  4. snt = re.sb('\s+', '', sent) # 移除換行字符

  5. set = re.sb("\'", "", sent) # 刪除單引號(hào)

  6. set = geim.uls.smplprerss(str(sent), deacc=True)


  7. # 轉(zhuǎn)換為列表

  8. data = df.cnt.lus.tolist()


構(gòu)建雙字母組、三字母組模型和推理

讓我們使用模型形成雙字母組、三字母組。為了提高執(zhí)行速度,這個(gè)模型被傳遞給Phraser()。

接下來(lái),將每個(gè)詞詞形還原為其詞根形式,僅保留名詞、形容詞、動(dòng)詞和副詞。

我們只保留這些POS標(biāo)簽,因?yàn)樗鼈儗?duì)句子的含義貢獻(xiàn)最大。在這里,我使用spacy進(jìn)行詞法處理。


  1. # 建立大詞和三詞模型

  2. bigrm = endl.Pres(dta_ords, mncnt=5, thrshl=100) # 更高的閾值會(huì)減少短語(yǔ)。

  3. tigam = genm.del.Prses(bga[dtawors], thrhld=100)

  4. bigm_od = gsim.molpss.Pasr(bgrm)

  5. tigrmod = genm.mos.pres.hrser(tigam)


  6. # 在終端運(yùn)行一次


  7. ""刪除止損詞,形成大詞、三詞和詞組""

  8. texts = [[wor fo wrd in sipeeproe(tr(dc))

  9. [iram_od[oc] for doc in txts]

  10. tets = [rirammod[igrmmod[dc]] for dc in tets]

  11. tetout = []

  12. np = scy.oad('en', dial=['解析器', 'ner'])

  13. for set in txs:

  14. dc = np(" ".join(sn))

  15. tex_.ppd([tknlea_ fr toen in oc if toenpo_ in aowed_ots])

  16. # 在詞法化之后,再一次刪除停止詞



  17. atady = roe_os(daa_ds) # 處理過的文本數(shù)據(jù)!


構(gòu)建主題模型

要使用 構(gòu)建 LDA 主題模型,您需要語(yǔ)料庫(kù)和字典。讓我們先創(chuàng)建它們,然后構(gòu)建模型。訓(xùn)練好的主題(關(guān)鍵字和權(quán)重)也輸出在下面。

如果你檢查一下主題關(guān)鍵詞,它們共同代表了我們最初選擇的主題。教會(huì)、冰球、地區(qū)和摩托車。很好!


  1. # 創(chuàng)建字典

  2. id2od = copoDciary(dta_eay)


  3. # 創(chuàng)建語(yǔ)料庫(kù)。術(shù)語(yǔ)文檔頻率

  4. crpus = [i2wod.o2bow(ext) for txt in daa_ey]


  5. # 建立LDA模型

  6. Lal(copus=copus,

  7. id2wrd=id2wrd,

  8. nu_tpic=4,

  9. radom_ate=100,

  10. updaeeery=1,

  11. chnsie=10,

  12. pas=10。

  13. alha='symmetric',

  14. iteatos=100,

  15. prdics=True)


  16. (ldampcs())

什么是主導(dǎo)主題及其在每個(gè)文檔中的百分比貢獻(xiàn)

在 LDA 模型中,每個(gè)文檔由多個(gè)主題組成。但是,通常只有一個(gè)主題占主導(dǎo)地位。下面的代碼提取每個(gè)句子的主要主題,并在格式良好的輸出中顯示主題和關(guān)鍵字的權(quán)重。

這樣,您將知道哪個(gè)文檔主要屬于哪個(gè)主題。

  1. # 啟動(dòng)輸出

  2. se_tpcf = p.Dataame()


  3. # 獲取每個(gè)文檔中的主要話題

  4. for i, ro_isin enate(ldmoel[crps]):

  5. rw = rw_s0] if lamoel.pe_wortopis else rowlis

  6. row = soed(ow, ky=laba x: (x[1]), evre=True)

  7. # 獲取每個(gè)文檔的主導(dǎo)主題、perc貢獻(xiàn)和關(guān)鍵詞

  8. for j, (toicum, pr_pic) in enate(row):

  9. if j == 0: # => 主導(dǎo)話題

  10. wp = ldel.shotoic(topic_num)



  11. # 在輸出的最后添加原始文本



  12. deeos = fratcs(lodel=damoe, copus=crpus, tets=dary)


  13. # 格式化

  14. topic = os.retidex()


每個(gè)話題最有代表性的一句話

有時(shí)您想獲得最能代表給定主題的句子樣本。此代碼為每個(gè)主題獲取最典型的句子。


  1. # 顯示設(shè)置,在列中顯示更多的字符


  2. for i, grp in serpd:

  3. senlet = pd.cnct([senlet,

  4. gp.srtes(['Peion'], asng=Fase).hed(1)]

  5. ais=0)


  6. # 重置索引

  7. seet.resex(drp=True, inlce=True)


  8. # 格式化

  9. senllet.couns = ['Toum', "TopCorib", "Kywrds", "rsa xt"]


  10. # 顯示

  11. sencoet.head(10)


文檔中字?jǐn)?shù)的頻率分布

在處理大量文檔時(shí),您想知道文檔的整體大小和主題大小。讓我們繪制文檔字?jǐn)?shù)分布。



  1. # 繪圖

  2. plt.fiue(fe=(6,7), dpi=60)



  3. plt.xtcs(nplic(0,00,9))



  1. import sebon as sns

  2. fig.titat()

  3. fig.sbts_juo0.90)

  4. plt.xticks(np.lisa(0,00,9))

  5. plt.sow()

每個(gè)話題的前N個(gè)關(guān)鍵詞詞云

雖然你已經(jīng)看到了每個(gè)主題中的主題關(guān)鍵詞是什么,但字?jǐn)?shù)大小與權(quán)重成正比的詞云是很好的可視化方法。


?


  1. # 1. 每個(gè)主題中前N個(gè)詞的詞云

  2. from matplotlib import pyplot as plt

  3. from worcloud mport WrCloud,STOPWODS




  4. clod = WordClud(stopwds=stp_ords,

  5. barounolr='white',


  6. reer_oronal=1.0)



  7. plt.sow()


主題關(guān)鍵詞的字?jǐn)?shù)

當(dāng)涉及主題中的關(guān)鍵字時(shí),關(guān)鍵字的重要性(權(quán)重)很重要。除此之外,這些單詞在文檔中出現(xiàn)的頻率也很有趣。

讓我們?cè)谕粓D表中繪制字?jǐn)?shù)和每個(gè)關(guān)鍵字的權(quán)重。

您要關(guān)注出現(xiàn)在多個(gè)主題中的詞以及相對(duì)頻率大于權(quán)重的詞。通常,這些詞變得不那么重要。我在下面繪制的圖表是在開始時(shí)將幾個(gè)這樣的詞添加到停用詞列表并重新運(yùn)行訓(xùn)練過程的結(jié)果。


  1. tops = l_mdl.swtcs(foatd=Fase)



  2. # 繪制主題關(guān)鍵詞的字?jǐn)?shù)和權(quán)重圖

  3. fig, as = pltuls(2, 2, fiiz=(16,10), sey=rue, di=160)

  4. fig.tigh_lyut_pad=2)

  5. plt.shw()


按主題著色的句子圖表

文檔中的每個(gè)單詞都代表 4 個(gè)主題之一。讓我們根據(jù)給定文檔中的每個(gè)單詞所屬的主題 id 為其著色。
?


  1. # 對(duì)N個(gè)句子進(jìn)行著色的句子



  2. for i, ax in eumate(xes):

  3. cour = corp[i-1] 。

  4. topprcs, wrdits, wrdihius = lda[copr]

  5. wodoac = [(lmod2word[wd], tpic[0]) or w, tpc in odid_opcs]


  6. # 繪制矩形區(qū)域

  7. tpcred = soted(tpps, key= x: (x[1]), rvese=True)


  8. word_pos = 0.06



  9. plt.subdt(wsace=0, hsace=0)


  10. plt.show()




文件中討論最多的話題是什么?

讓我們計(jì)算歸因于每個(gè)主題的文檔總數(shù)。


  1. # 對(duì)N個(gè)句子進(jìn)行著色

  2. 主導(dǎo)話題 = []

  3. 話題百分比 = []

  4. for i, crp in euete(opu_el):

  5. topcs, wordics, wrlues = moel[crp]

  6. dopic = soted(torcs, key = lmda x: x[1], reerse=Tue)[0][0] 。


  7. doics, toages = topent(mol=lda, copus=crus,en=-)


  8. # 每個(gè)文檔中主導(dǎo)話題的分布


  9. dfc = dh_dc.t_frme(ame='cunt').eeinex()


  10. # 按實(shí)際權(quán)重計(jì)算的總主題分布

  11. topweig = pd.DaaFae([dct(t) for t in toges] )



  12. # 每個(gè)主題的前三個(gè)關(guān)鍵詞

  13. [(i, tpic) for i, tocs in lda.shcs(fted=Flse)

  14. for j, (tic, wt) in eae(toic)if j < 3)




讓我們做兩個(gè)圖:

  1. 通過將文檔分配給該文檔中權(quán)重最大的主題來(lái)計(jì)算每個(gè)主題的文檔數(shù)。

  2. 通過總結(jié)每個(gè)主題對(duì)各自文檔的實(shí)際權(quán)重貢獻(xiàn)來(lái)計(jì)算每個(gè)主題的文檔數(shù)量。


  1. from mtpltli.tiker import ucFattr


  2. # 繪圖

  3. fig, (ax1, ax2) = pl.supot(1, 2)


  4. # 按主要議題分布的議題

  5. ax1.bar(data=df_dc)



  6. # 按主題權(quán)重的主題分布

  7. ax2.ar(x='iex', hegh='cout', dat=dfoc, with=.5,


  8. plt.sow()


t-SNE(t分布-隨機(jī)鄰近嵌入)聚類圖

讓我們使用 t-SNE(t分布-隨機(jī)鄰近嵌入)算法在 2D 空間中可視化文檔集群。


  1. # 獲取話題權(quán)重和主導(dǎo)話題 ------------


  2. # 獲取主題權(quán)重

  3. for i, row_list:

  4. tophts.apd([w for i, w in rost[0]] )


  5. # 主題權(quán)重的數(shù)組

  6. arr = pd.Dame(tohts).fna(0).vales


  7. # 保持良好的分離點(diǎn)(可選)

  8. rr = ar[p.aax(rr) > 0.35] 。


  9. # 每個(gè)文檔中的主要議題編號(hào)

  10. to_n = np.agax(rr, ais=1)


  11. # tSNE降維

  12. tsel = TSE(n=2, vre=1, rae=0, ae=.99, int='pca')

  13. tlda = tsl.frm(arr)


  14. # 使用Bokeh繪制主題集群圖

  15. oueook()

  16. n_tics = 4

  17. m

  18. plot.scatter(xda[:,])



pyLDAVis

最后,pyLDAVis 是最常用的,也是一種將主題模型中包含的信息可視化的好方法。


  1. pyLDvis.enaok()

結(jié)論

我們從頭開始導(dǎo)入、清理和處理新聞組數(shù)據(jù)集構(gòu)建 LDA 模型。然后我們看到了多種可視化主題模型輸出的方法,包括詞云,它們直觀地告訴您每個(gè)主題中哪個(gè)主題占主導(dǎo)地位。t-SNE 聚類,?pyLDAVis?提供了更多關(guān)于主題聚類的細(xì)節(jié)。

最受歡迎的見解

1.探析大數(shù)據(jù)期刊文章研究熱點(diǎn)

2.618網(wǎng)購(gòu)數(shù)據(jù)盤點(diǎn)-剁手族在關(guān)注什么

3.r語(yǔ)言文本挖掘tf-idf主題建模,情感分析n-gram建模研究

4.python主題建??梢暬痩da和t-sne交互式可視化

5.疫情下的新聞數(shù)據(jù)觀察

6.python主題lda建模和t-sne可視化

7.r語(yǔ)言中對(duì)文本數(shù)據(jù)進(jìn)行主題模型topic-modeling分析

8.主題模型:數(shù)據(jù)聆聽人民網(wǎng)留言板的那些“網(wǎng)事”

9.python爬蟲進(jìn)行web抓取lda主題語(yǔ)義數(shù)據(jù)分析


拓端tecdat:Python主題建模LDA模型、t-SNE 降維聚類、詞云可視化文本挖掘新聞組數(shù)據(jù)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
七台河市| 社会| 文昌市| 邵武市| 博乐市| 日喀则市| 乐昌市| 林周县| 治县。| 东阳市| 弥勒县| 三穗县| 静宁县| 二手房| 金门县| 乳源| 新乡市| 山东| 壤塘县| 普定县| 黄石市| 肃北| 含山县| 称多县| 民勤县| 嘉定区| 偏关县| 龙门县| 太和县| 友谊县| 富裕县| 互助| 门源| 宣汉县| 阿巴嘎旗| 东港市| 宁武县| 缙云县| 金平| 海城市| 通山县|