全文链接:http://tecdat.cn/?p=24376

最近咱们被客户要求撰写对于主题建模的钻研报告,包含一些图形和统计输入。

在这篇文章中,咱们探讨了基于gensim 包来可视化主题模型 (LDA) 的输入和后果的技术 

介绍

咱们遵循结构化的工作流程,基于潜在狄利克雷调配 (LDA) 算法构建了一个主题模型。

在这篇文章中,咱们将应用主题模型,摸索多种策略以应用matplotlib 绘图无效地可视化后果 。

我将应用 20 个新闻组数据集的一部分,因为重点更多地放在可视化后果的办法上。

让咱们从导入包和 20 News Groups 数据集开始。

import matplotlib.pyplot as plt# NLTK进行词fom nlt.copus imort stowodssop_wrds = stowords.wrds('chinse')

导入新闻组数据集

让咱们导入新闻组数据集并仅保留 4 个 类别。

# 导入数据集d = f.oc[dftargt_name.in([so.relion.chritan], 'ec.sot.okey', 'ak.piticmdast' 'rec.oorcyces']) , :]prin(f.hpe) #> (2361, 3)df.(

标记句子并清理

删除电子邮件、换行符、单引号,最初应用 gensim 将句子拆分为单词列表 simple_preprocess()。设置 deacc=True 选项会删除标点符号。

def snds(seecs):    for setees in sntces:        sent = r.sub('\S*@\S*\s?', '', sent) # 删除电子邮件        snt = re.sb('\s+', '', sent) # 移除换行字符        set = re.sb("\'", "", sent) # 删除单引号        set = geim.uls.smplprerss(str(sent), deacc=True) # 转换为列表data = df.cnt.lus.tolist()

构建双字母组、三字母组模型和推理

让咱们应用模型造成双字母组、三字母组。为了进步执行速度,这个模型被传递给Phraser()。

接下来,将每个词词形还原为其词根模式,仅保留名词、形容词、动词和副词。

咱们只保留这些POS标签,因为它们对句子的含意奉献最大。在这里,我应用spacy进行词法解决。

# 建设大词和三词模型bigrm = endl.Pres(dta_ords, mncnt=5, thrshl=100) # 更高的阈值会缩小短语。tigam = genm.del.Prses(bga[dtawors], thrhld=100)  bigm_od = gsim.molpss.Pasr(bgrm)tigrmod = genm.mos.pres.hrser(tigam) # 在终端运行一次    ""删除止损词,造成大词、三词和词组""    texts = [[wor fo wrd in sipeeproe(tr(dc))      [iram_od[oc] for doc in txts]    tets = [rirammod[igrmmod[dc]] for dc in tets]    tetout = []    np = scy.oad('en', dial=['解析器', 'ner'])    for set in txs:        dc = np(" ".join(sn))         tex_.ppd([tknlea_ fr toen in oc if toenpo_ in aowed_ots])    # 在词法化之后,再一次删除进行词atady = roe_os(daa_ds) # 解决过的文本数据!

构建主题模型

要应用 构建 LDA 主题模型,您须要语料库和字典。让咱们先创立它们,而后构建模型。训练好的主题(关键字和权重)也输入在上面。

如果你检查一下主题关键词,它们独特代表了咱们最后抉择的主题。教会、冰球、地区和摩托车。很好!

# 创立字典id2od = copoDciary(dta_eay)# 创立语料库。术语文档频率crpus = [i2wod.o2bow(ext) for txt in daa_ey]# 建设LDA模型Lal(copus=copus,                                           id2wrd=id2wrd,                                           nu_tpic=4,                                            radom_ate=100,                                           updaeeery=1,                                           chnsie=10,                                           pas=10。                                           alha='symmetric',                                           iteatos=100,                                           prdics=True)(ldampcs())

什么是主导主题及其在每个文档中的百分比奉献

在 LDA 模型中,每个文档由多个主题组成。然而,通常只有一个主题占主导地位。上面的代码提取每个句子的次要主题,并在格局良好的输入中显示主题和关键字的权重。

这样,您将晓得哪个文档次要属于哪个主题。

    # 启动输入    se_tpcf = p.Dataame()    # 获取每个文档中的次要话题    for i, ro_isin enate(ldmoel[crps]):        rw = rw_s0] if lamoel.pe_wortopis else rowlis                    row = soed(ow, ky=laba x: (x[1]), evre=True)        # 获取每个文档的主导主题、perc奉献和关键词        for j, (toicum, pr_pic) in enate(row):            if j == 0: # => 主导话题                wp = ldel.shotoic(topic_num)     # 在输入的最初增加原始文本deeos = fratcs(lodel=damoe, copus=crpus, tets=dary)# 格式化topic = os.retidex()

每个话题最有代表性的一句话

有时您想取得最能代表给定主题的句子样本。此代码为每个主题获取最典型的句子。

# 显示设置,在列中显示更多的字符for i, grp in serpd:    senlet = pd.cnct([senlet,                                              gp.srtes(['Peion'], asng=Fase).hed(1)]                                             ais=0)# 重置索引    seet.resex(drp=True, inlce=True)# 格式化senllet.couns = ['Toum', "TopCorib", "Kywrds", "rsa xt"]# 显示sencoet.head(10)

文档中字数的频率散布

在解决大量文档时,您想晓得文档的整体大小和主题大小。让咱们绘制文档字数散布。

# 绘图plt.fiue(fe=(6,7), dpi=60)plt.xtcs(nplic(0,00,9))

import sebon as snsfig.titat()fig.sbts_juo0.90)plt.xticks(np.lisa(0,00,9))plt.sow()


点击题目查阅往期内容

Python之LDA主题模型算法利用

左右滑动查看更多

01

02

03

04

每个话题的前N个关键词词云

尽管你曾经看到了每个主题中的主题关键词是什么,但字数大小与权重成正比的词云是很好的可视化办法。

# 1. 每个主题中前N个词的词云from matplotlib import pyplot as pltfrom worcloud mport WrCloud,STOPWODSclod = WordClud(stopwds=stp_ords,                  barounolr='white',                                   reer_oronal=1.0)plt.sow()

主题关键词的字数

当波及主题中的关键字时,关键字的重要性(权重)很重要。除此之外,这些单词在文档中呈现的频率也很乏味。

让咱们在同一图表中绘制字数和每个关键字的权重。

您要关注呈现在多个主题中的词以及绝对频率大于权重的词。通常,这些词变得不那么重要。我在上面绘制的图表是在开始时将几个这样的词增加到停用词列表并从新运行训练过程的后果。

tops = l_mdl.swtcs(foatd=Fase)    # 绘制主题关键词的字数和权重图fig, as = pltuls(2, 2, fiiz=(16,10), sey=rue, di=160)fig.tigh_lyut_pad=2)    plt.shw()

按主题着色的句子图表

文档中的每个单词都代表 4 个主题之一。让咱们依据给定文档中的每个单词所属的主题 id 为其着色。

# 对N个句子进行着色的句子      for i, ax in eumate(xes):            cour = corp[i-1] 。            topprcs, wrdits, wrdihius = lda[copr]            wodoac = [(lmod2word[wd], tpic[0]) or w, tpc in odid_opcs]                            # 绘制矩形区域            tpcred = soted(tpps, key= x: (x[1]), rvese=True)            word_pos = 0.06               plt.subdt(wsace=0, hsace=0)      plt.show()

文件中探讨最多的话题是什么?

让咱们计算归因于每个主题的文档总数。

# 对N个句子进行着色    主导话题 = []    话题百分比 = []    for i, crp in euete(opu_el):        topcs, wordics, wrlues = moel[crp]        dopic = soted(torcs, key = lmda x: x[1], reerse=Tue)[0][0] 。doics, toages = topent(mol=lda, copus=crus,en=-)            # 每个文档中主导话题的散布dfc = dh_dc.t_frme(ame='cunt').eeinex()# 按理论权重计算的总主题散布topweig = pd.DaaFae([dct(t) for t in toges] )# 每个主题的前三个关键词 [(i, tpic) for i, tocs in lda.shcs(fted=Flse)                                  for j, (tic, wt) in eae(toic)if j < 3)

让咱们做两个图:

  • 通过将文档调配给该文档中权重最大的主题来计算每个主题的文档数。
  • 通过总结每个主题对各自文档的理论权重奉献来计算每个主题的文档数量。
from mtpltli.tiker import ucFattr# 绘图fig, (ax1, ax2) = pl.supot(1, 2)# 按次要议题散布的议题ax1.bar(data=df_dc)# 按主题权重的主题散布ax2.ar(x='iex', hegh='cout', dat=dfoc, with=.5, plt.sow()

t-SNE(t散布-随机邻近嵌入)聚类图

让咱们应用 t-SNE(t散布-随机邻近嵌入)算法在 2D 空间中可视化文档集群。

# 获取话题权重和主导话题 ------------# 获取主题权重for i, row_list:    tophts.apd([w for i, w in rost[0]] )# 主题权重的数组    arr = pd.Dame(tohts).fna(0).vales# 保持良好的分离点(可选)rr = ar[p.aax(rr) > 0.35] 。# 每个文档中的次要议题编号to_n = np.agax(rr, ais=1)# tSNE降维tsel = TSE(n=2, vre=1, rae=0, ae=.99, int='pca')tlda = tsl.frm(arr)# 应用Bokeh绘制主题集群图oueook()n_tics = 4mplot.scatter(xda[:,])

pyLDAVis

最初,pyLDAVis 是最罕用的,也是一种将主题模型中蕴含的信息可视化的好办法。

pyLDvis.enaok()

论断

咱们从头开始导入、清理和解决新闻组数据集构建 LDA 模型。而后咱们看到了多种可视化主题模型输入的办法,包含词云,它们直观地告诉您每个主题中哪个主题占主导地位。t-SNE 聚类, pyLDAVis 提供了更多对于主题聚类的细节。


本文摘选 Python主题建模LDA模型、t-SNE 降维聚类、词云可视化文本开掘新闻组数据集 ,点击“浏览原文”获取全文残缺材料。


点击题目查阅往期内容

自然语言解决NLP:主题LDA、情感剖析疫情下的新闻文本数据
【视频】文本开掘:主题模型(LDA)及R语言实现剖析游记数据
NLP自然语言解决—主题模型LDA案例:开掘人民网留言板文本数据
Python主题建模LDA模型、t-SNE 降维聚类、词云可视化文本开掘新闻组数据集
自然语言解决NLP:主题LDA、情感剖析疫情下的新闻文本数据
R语言对NASA元数据进行文本开掘的主题建模剖析
R语言文本开掘、情感剖析和可视化哈利波特小说文本数据
Python、R对小说进行文本开掘和档次聚类可视化剖析案例
用于NLP的Python:应用Keras进行深度学习文本生成
长短期记忆网络LSTM在工夫序列预测和文本分类中的利用
用Rapidminer做文本开掘的利用:情感剖析
R语言文本开掘tf-idf,主题建模,情感剖析,n-gram建模钻研
R语言对推特twitter数据进行文本情感剖析
Python应用神经网络进行简略文本分类
用于NLP的Python:应用Keras的多标签文本LSTM神经网络分类
R语言文本开掘应用tf-idf剖析NASA元数据的关键字
R语言NLP案例:LDA主题文本开掘优惠券举荐网站数据
Python应用神经网络进行简略文本分类
R语言自然语言解决(NLP):情感剖析新闻文本数据
Python、R对小说进行文本开掘和档次聚类可视化剖析案例
R语言对推特twitter数据进行文本情感剖析
R语言中的LDA模型:对文本数据进行主题模型topic modeling剖析
R语言文本主题模型之潜在语义剖析(LDA:Latent Dirichlet Allocation)R语言对NASA元数据进行文本开掘的主题建模剖析
R语言文本开掘、情感剖析和可视化哈利波特小说文本数据
Python、R对小说进行文本开掘和档次聚类可视化剖析案例
用于NLP的Python:应用Keras进行深度学习文本生成
长短期记忆网络LSTM在工夫序列预测和文本分类中的利用
用Rapidminer做文本开掘的利用:情感剖析
R语言文本开掘tf-idf,主题建模,情感剖析,n-gram建模钻研
R语言对推特twitter数据进行文本情感剖析
Python应用神经网络进行简略文本分类
用于NLP的Python:应用Keras的多标签文本LSTM神经网络分类
R语言文本开掘应用tf-idf剖析NASA元数据的关键字
R语言NLP案例:LDA主题文本开掘优惠券举荐网站数据
Python应用神经网络进行简略文本分类
R语言自然语言解决(NLP):情感剖析新闻文本数据
Python、R对小说进行文本开掘和档次聚类可视化剖析案例
R语言对推特twitter数据进行文本情感剖析
R语言中的LDA模型:对文本数据进行主题模型topic modeling剖析
R语言文本主题模型之潜在语义剖析(LDA:Latent Dirichlet Allocation)