详细介绍了主题风格模型的基本概念和ld a优化算法的基本原理,并举例子了怎样用Python搭建一个基本上的LDA主题模型,用pyLDAvis数据可视化主题风格。
照片:卡米尔·波拉克
序
主题风格模型包含从文本文档专业术语中获取特点,并应用数学课构造和架构(如矩阵分解和svd分解)转化成可互相区别的专业术语簇或组,这种专业术语簇或组又产生主题风格或定义。
主题风格模型是一种无监管的文本文档分类方法,类似数值数据的聚类算法。
这种定义能够用于表述词库的主题风格,还可以在不同文本文档中经常发生在一起的词中间创建词义关联。
主题风格模型能够运用于下面一些层面:
发觉数据信息集中化掩藏的主题风格;
将文本文档归类为察觉的主题风格;
应用类型来机构/归纳/检索文本文档。
有多种多样架构和优化算法可用来搭建主题模型:
潜在性词义数据库索引(潜在性词义数据库索引)。
潜在性狄利克雷分派。
非负矩阵分解(NMF)。
在这篇文章中,大家将关键探讨怎么使用Python对LDA主题风格开展模型。从总体上,大家将探讨:
什么叫潜在性狄利克雷分派?
LDA优化算法怎样工作中;
怎样用Python搭建LDA主题模型?
什么叫潜在性狄利克雷分派?
潜在性狄利克雷分派(LDA)是一种转化成概率模型,它假定每一个文本文档都是有类似几率潜在性词义数据库索引实体模型的主题风格组成。
简单点来说,LDA身后的思维是,每一个文本文档都能够根据主题风格的遍布来叙述,每一个主题风格都能够根据英语单词的遍布来叙述。
LDA优化算法是怎样工作中的?
英国伦敦发展署由两部份构成:
我们知道的英语单词归属于文档;
归属于某一主题风格的词汇或归属于某一主题风格的英语单词的测算几率。
留意:LDA不关注文本文档中英语单词的次序。一般,LDA应用词袋特点表明来表明文本文档。
下列流程比较简单地解读了LDA优化算法的原理:
1.针对每一个文本文档,任意复位每一个英语单词为k个主题风格之一(提早挑选k个主题风格);
2.针对每一个文本文档d,访问每一个英语单词w并测算:
P(T | D):文本文档D中安排给主题风格T的英语单词占比;
P(W | T):在全部包括W的文本文档中,分派给主题风格T的占比。
3.充分考虑全部别的英语单词以及题型分派,英语单词W和题型T以几率p (P(T | D) P(W | T)分配。
LDA主题模型如下所示所显示。
图片出处:维基百科
下面的图形象化地表明了每一个主要参数是如何连接回文本文件和专业术语的。假定自己有m个文本文档,文本文档中有n个英语单词,大家要想转化成的主题风格数量是k。
图上的白框意味着关键优化算法,它应用前边看到的主要参数从文本文档中获取k个主题风格。
照片:斯图尔·多伊格。
怎样用Python搭建LDA主题模型?
大家将应用Gensim库中的潜在性狄利克雷分派(LDA)。
最先,大家必须导进包。关键包是re,gensim,spacy和pyLDAvis。除此之外,大家必须应用matplotlib,numpy和panases开展数据整理和数据可视化。
1. import re2. import numpy as np3. import pandas as pd4. from pprint import pprint5. 6. # Gensim7. import gensim8. import gensim.corpora as corpora9. from gensim.utils import simple_preprocess10. from gensim.models import CoherenceModel11. 12. # spacy for lemmatization13. import spacy14. 15. # Plotting tools16. import pyLDAvis17. import pyLDAvis.gensim # don't skip this18. import matplotlib.pyplot as plt19. %matplotlib inline20. 21. # Enable logging for gensim - optional22. import logging23. logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.ERROR)24. 25. import warnings26. warnings.filterwarnings("ignore",category=DeprecationWarning)
像am/is/are/of/a/the/but/…那样的词不包含一切有关“主题风格”的信息内容。因而,做为预备处理流程,我们可以从文本文档中清除他们。
因此,大家必须从NLT键入终止词。您也能够根据加上一些附加的英语单词来拓展初始的终止英语单词目录。
1.# NLTK Stop words2. from nltk.corpus import stopwords3. stop_words = stopwords.words('english')4. stop_words.extend(['from', 'subject', 're', 'edu', 'use'])
在本实例教程中,大家将应用20个新闻组数据,在其中包括来源于20个不一样主题风格的大概11k个新闻组贴子。这能够做为新闻组得到
1. # Import Dataset2. df = pd.read_json('https://raw.GitHubusercontent.com/selva86/datasets/master/newsgroups.json')3. print(df.target_names.unique())4. df.head()
删掉电子邮箱连接和回车符。
在逐渐主题风格模型以前,大家必须清理空间集。最先,删掉电子邮箱连接,附加的空框和新的行标识符。
1. # Convert to list2. data = df.content.values.tolist()3. 4. # Remove Emails5. data = [re.sub('S*@S*s?', '', sent) for sent in data]6. 7. # Remove new line characters8. data = [re.sub('s ', ' ', sent) for sent in data]9. 10. # Remove distracting single quotes11. data = [re.sub("'", ", sent) for sent in data]12. 13. pprint(data[:1])
标识英语单词并清除文字。
使我们将每一个语句标识为英语单词目录,并删掉标点和没必要的标识符。
1.defsent_to_words(sentences):2. for sentence in sentences:3. yield(gensim.utils.simple_preprocess(str(sentence), deacc=True)) # deacc=True removes punctuations4. 5. data_words = list(sent_to_words(data))6. 7. print(data_words[:1])
建立一个二元实体模型和一个三元实体模型。
1. # Build the bigram and trigram models2. bigram = gensim.models.Phrases(data_words, min_count=5, threshold=100) # higher threshold fewer phrases.3. trigram = gensim.models.Phrases(bigram[data_words], threshold=100) 4. 5. # Faster way to get a sentence clubbed as a trigram/bigram6. bigram_mod = gensim.models.phrases.Phraser(bigram)7. trigram_mod = gensim.models.phrases.Phraser(trigram)8. 9. # See trigram example10. print(trigram_mod[bigram_mod[data_words[0]]])
删掉stopword,创建二进制实体模型并引理。
在这里一步中,大家界定了删掉stopword,创建二进制实体模型和修复word表格的涵数,并先后启用这种涵数。
1.# Define functions for stopwords, bigrams, trigrams and lemmatization2. def remove_stopwords(texts):3. return [[word for word in simple_preprocess(str(doc)) if word not in stop_words] for doc in texts]4. 5. def make_bigrams(texts):6. return [bigram_mod[doc] for doc in texts]7. 8. def make_trigrams(texts):9. return [trigram_mod[bigram_mod[doc]] for doc in texts]10. 11. def lemmatization(texts, allowed_postags=['NOUN', 'ADJ', 'VERB', 'ADV']):12. ""https://spacy.io/api/annotation""13. texts_out = []14. for sent in texts:15. doc = nlp(" ".join(sent)) 16. texts_out.append([token.lemma_ for token in doc if token.pos_ in allowed_postags])17. return texts_out1. # Remove Stop Words2. data_words_nostops = remove_stopwords(data_words)3. 4. # Form Bigrams5. data_words_bigrams = make_bigrams(data_words_nostops)6. 7. # Initialize spacy 'en' model, keeping only tagger component (for efficiency)8. # python3 -m spacy download en9. nlp = spacy.load('en', disable=['parser', 'ner'])10. 11. # Do lemmatization keeping only noun, adj, vb, adv12. data_lemmatized = lemmatization(data_words_bigrams, allowed_postags=['NOUN', 'ADJ', 'VERB', 'ADV'])13. 14. print(data_lemmatized[:1])
为主题风格模型建立字典和词库。
Gensim为文本文档中的每一个英语单词建立一个唯一的id,但在此之前,大家必须建设一个词典和词库做为实体模型的键入。
1. # Create Dictionary2. id2word = corpora.Dictionary(data_lemmatized)3. 4. # Create Corpus5. texts = data_lemmatized6. 7. # Term Document Frequency8. corpus = [id2word.doc2bow(text) for text in texts]9. 10. # View11. print(corpus[:1])
创建主题模型。
如今大家提前准备进到关键流程,应用LDA开展主题风格模型。使我们逐渐模型。大家将搭建20个不一样主题风格的LDA实体模型,在其中每一个主题风格全是关键字的组成,每一个关键字在主题风格上都有一定的权重值。
一些主要参数表述如下所示:
num _ topics-必须预订义的主题风格数;
组块尺寸-每一个练习组块时要应用的文本文档总数;
alpha——危害主题风格稀少性的非常参数;
passness-培训效果评估的数量。
1. # Build LDA model2. lda_model = gensim.models.ldamodel.LdaModel(corpus=corpus,3. id2word=id2word,4. num_topics=20, 5. random_state=100,6. update_every=1,7. chunksize=100,8. passes=10,9. alpha='auto',10. per_word_topics=True)
查询LDA实体模型中的主题风格。
我们可以数据可视化每一个风格的关键字和每一个关键字的权重值(必要性)。
1.# Print the Keyword in the 10 topics2. pprint(lda_model.print_topics())3. doc_lda = lda_model[corpus]
测算实体模型疑惑度(Perplexity)和一致性成绩(Coherence Score)测算实体模型的疑惑度和一致性成绩。
实体模型搞混是概率分布函数或概率模型预测分析的样版品质的衡量。主题风格一致性根据精确测量主题风格中评分高的单词中间的词义相似性来考量单独主题风格的评分。
简单点来说,他们给予了一种分辨给出主题模型有多么好的方便快捷方式。
1. # Compute Perplexity2. print('nPerplexity: ', lda_model.log_perplexity(corpus)) # a measure of how good the model is. lower the better.3. 4. # Compute Coherence Score5. coherence_model_lda = CoherenceModel(model=lda_model, texts=data_lemmatized, dictionary=id2word, coherence='c_v')6. coherence_lda = coherence_model_lda.get_coherence()7. print('nCoherence Score: ', coherence_lda)
视觉效果主题风格-关键字。
如今,我们可以查验转化成的题材和关键词。最好是的办法是用pyLDAvis数据可视化大家的实体模型。
PyLDAvis致力于协助客户在合适文字数据信息词库的主题模型中表述主题风格。从线性拟合的线形判别分析主题模型中获取信息内容,完成根据互联网的互动式数据可视化。
1.#数据可视化主题风格2。pyLDAvis.enable_notebook()3。vis = pylDaviS . gensim . prepare(LDA _ model,词库,id2word)4。魅力
到此,大家取得成功构建了一个丰厚的主题模型!到此,大家早已取得成功构建了非常可观的主题模型!
简要说明結果:左则的每一个泡沫意味着一个话题讨论。泡沫塑料越大,主题风格越受大家喜爱。依据工作经验,一个好的话题讨论实体模型会出现大的,不重合的泡沫塑料。
大家还可以点一下右侧的边栏来调节alpha主要参数。
标识
主题风格模型是语义解决的关键运用之一。文中致力于表明什么是主题模型,及其怎样结合实际完成潜在性狄利克雷分派(LDA)实体模型。
因而,大家深入分析了LDA的基本原理,在Gensim包选用LDA搭建了一个基本上的主题模型,并且用pyLDAvis数据可视化了主题风格。
期待大伙儿喜爱本文,有一定的获得。
1.本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:duhaomu@163.com,我们将第一时间处理!
2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。
3.所有资源仅限于参考和学习,版权归原作者所有,更多请阅读网站声明。