NLP 主题抽取 Topic LDA代码实践 gensim包 代码

NLP 主题抽取Topic LDA代码实践 gensim包 代码

原创作品, 转载请注明出处:[ Mr.Scofield  http://blog.csdn.net/scotfield_msn/article/details/72904651  ]

From RxNLP.




        分享一个代码实践:用gensim包的LDA模型实践NLP的一个典型任务,主题抽取。

        顺带提一点,对于NLP任务,最好的方式就是先在代码上跑通起来,然后再进行理论深究,最后自己实现DIY学习模型算法框架。

        顺带再提一点,跑通NLP或者ML任务,推荐在Python下用成熟的包如sklearn、numpy等进行,高效。对自己要求严一点的话,再在Java下用相关包跑一遍,然后就能对比不同的语言平台下的差异了。


        不废话了,上代码,注释很清楚明了(注释英文写的,将就着阅读吧谢谢)。


import gensim
from sklearn.datasets import fetch_20newsgroups
from gensim.utils import simple_preprocess
from gensim.parsing.preprocessing import STOPWORDS
from gensim.corpora import Dictionary
import os
from pprint import pprint



# 第一步 准备数据,fetch_20newsgroups来自于sklearn的dataset

news_dataset = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'))

documents = news_dataset.data

print "In the dataset there are", len(documents), "textual documents"
print "And this is the first one:\n", documents[0]


# 第二步 token化句子(分词、去stopword、等等),并词袋表示出句子向量

def tokenize(text):
    return [token for token in simple_preprocess(text) if token not in STOPWORDS]


# print "After the tokenizer, the previous document becomes:\n", tokenize(documents[0])


# Next step: tokenize all the documents and build a count dictionary, that contains the count of the tokens over the complete text corpus.
processed_docs = [tokenize(doc) for doc in documents]
word_count_dict = Dictionary(processed_docs)
# print "In the corpus there are", len(word_count_dict), "unique tokens"

# print "\n",word_count_dict,"\n"

word_count_dict.filter_extremes(no_below=20, no_above=0.1)  # word must appear >10 times, and no more than 20% documents
# print "After filtering, in the corpus there are only", len(word_count_dict), "unique tokens"

bag_of_words_corpus = [word_count_dict.doc2bow(pdoc) for pdoc in processed_docs]  # bow all document of corpus



# 第三步 LDA 上模型


model_name = "./model.lda"
if os.path.exists(model_name):
    lda_model = gensim.models.LdaModel.load(model_name)
    print "loaded from old"
else:
    # preprocess()
    lda_model = gensim.models.LdaModel(bag_of_words_corpus, num_topics=100, id2word=word_count_dict, passes=5)#num_topics: the maximum numbers of topic that can provide
    lda_model.save(model_name)
    print "loaded from new"


# 第四步 验证非登录句子或者文档的主题抽取能力情况,做了三个实验

# 1.
# if you don't assign the target document, then
# every running of lda_model.print_topics(k) gonna get top k topic_keyword from whole the corpora documents in the bag_of_words_corpus from 0-n.
# and if given a single new document, it will only analyse this document, and output top k topic_keyword from this document.

pprint(lda_model.print_topics(30,6))#by default num_topics=10, no more than LdaModel's; by default num_words=10, no limitation
print "\n"
# pprint(lda_model.print_topics(10))

# 2.
# when you assign a particular document for it to assign:
# pprint(lda_model[bag_of_words_corpus[0]].print_topics(10))
for index, score in sorted(lda_model[bag_of_words_corpus[0]], key=lambda tup: -1 * tup[1]):
    print "Score: {}\t Topic: {}".format(score, lda_model.print_topic(index, 5))
print
print news_dataset.target_names[news_dataset.target[0]]  # bag_of_words_corpus align to news_dataset
print "\n"

# 3.
# process an unseed document
unseen_document = "In my spare time I either play badmington or drive my car"
print "The unseen document is composed by the following text:", unseen_document
print
bow_vector = word_count_dict.doc2bow(tokenize(unseen_document))
for index, score in sorted(lda_model[bow_vector], key=lambda tup: -1 * tup[1]):
    print "Score: {}\t Topic: {}".format(score, lda_model.print_topic(index, 7))






refs:

http://nbviewer.jupyter.org/gist/boskaiolo/cc3e1341f59bfbd02726
http://www.voidcn.com/blog/u010297828/article/p-4995136.html
http://radimrehurek.com/gensim/models/ldamodel.html
http://blog.csdn.net/accumulate_zhang/article/details/62453672


  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处理中文情感分类源代码自然语言处
### 回答1: LDA(Latent Dirichlet Allocation)是一种用于主题建模的概率图模型。Gensim是一个用于主题建模和自然语言处理的Python库,它提供了一个实现LDA模型的工具。 使用Gensim实现LDA时,首先需要准备好文本语料库。然后,我们需要将语料库进行预处理,括分词、去除停用词、词形还原等操作。接下来,我们使用Gensim的语料库和字典工具来创建BOW(Bag of Words)表示法的文档向量。通过将每个文档表示为一个稀疏向量,其中词袋中的每个单词代表一个维度,可以将文本数据转换为数字形式。 在创建好文档向量后,我们使用GensimLDA模型类进行训练。该类提供了许多参数,如主题数量、迭代次数和随机种子等。通过调整这些参数,我们可以得到更准确的主题模型。 训练完成后,我们可以通过查看每个主题的关键词来了解模型的结果。Gensim提供了一个函数来获取每个主题的前n个最相关的词语。我们还可以通过将新文档传递给训练好的LDA模型,获取该文档的主题分布。这可以帮助我们理解文档所属的主题类别。 总之,使用Gensim实现LDA可以帮助我们从大量文本数据中抽取主题信息。它可以应用于文本分类、信息检索和推荐系统等领域。同时,Gensim还提供了一些其他的主题模型算法和工具,如LSI(Latent Semantic Indexing)和Word2Vec等,可以进一步扩展我们的文本分析和挖掘能力。 ### 回答2: LDA (Latent Dirichlet Allocation) 是一种用于主题建模的概率模型,是从文本集合中自动发现隐含主题的一种方法。Gensim 是一个用于处理文本数据的 Python 库,提供了 LDA 模型的实现。 使用 Gensim 进行 LDA 建模的过程分为以下几步: 1. 数据预处理:首先,需要将文本数据进行预处理,括去除停用词、标点符号和数字,并进行词干化或词形变换等操作。这一步的目标是将文本数据转换为更容易处理的形式。 2. 构建词袋模型:将预处理后的文本数据转换为词袋模型,即将每个文本表示为一个向量,向量中的每个维度表示一个词语在该文本中出现的频率或权重。 3. 训练 LDA 模型:使用 GensimLdaModel 类训练一个 LDA 模型。需要指定词袋模型、主题数量和其他参数。可以通过调整参数来控制模型的性能和建模结果。 4. 分析主题结果:训练完成后,可以使用模型的方法来分析主题结果。例如,可以使用模型的 show_topics() 方法来查看每个主题的关键词。 5. 应用模型预测:训练好的 LDA 模型可以应用于新的文本数据,预测其所属的主题。可以使用模型的 get_document_topics() 方法来获取文本的主题分布。 Gensim 提供了一种简单、高效的方式来实现 LDA 主题建模,并且还支持通过调整参数来优化建模结果。因此,使用 Gensim 进行 LDA 实例化可以帮助我们更好地理解和分析文本数据,发现其中的潜在主题。这对于文本挖掘、信息检索和自然语言处理等领域具有重要的应用价值。 ### 回答3: LDA(Latent Dirichlet Allocation)是一种常用的主题模型算法,旨在通过分析文档集合中的词汇分布,发现文档背后的潜在主题Gensim是一个开源的Python库,提供了简单而高效的方式来实现LDA模型。 使用Gensim实现LDA模型的步骤如下: 1. 准备数据:首先,需要准备一组文档集合作为输入数据。文档可以是字符串的列表,每个字符串代表一个文档。 2. 预处理文本:接下来,需要对文本进行预处理,括去除停用词、词干提取等。Gensim提供了一些工具函数来帮助进行预处理。 3. 构建词袋模型:使用Gensim的`corpora.Dictionary`类可以将文本转换为词袋模型。词袋模型将每个词映射到一个唯一的整数ID。 4. 构建语料库:使用词袋模型,可以将文本转换为数字化的表示形式,形成一个语料库。语料库可以由Gensim的`corpora.MmCorpus`类表示。 5. 训练LDA模型:使用Gensim的`models.LdaModel`类可以训练LDA模型。在训练模型之前,需要设置一些超参数,比如主题数、迭代次数等。可以通过调用`lda_model = models.LdaModel(corpus, id2word=dictionary, num_topics=5, passes=10)`来创建一个LDA模型对象,并指定数据、词袋模型和主题数等。 6. 解释结果:训练完成后,可以使用`lda_model.show_topics()`函数来查看每个主题的关键词以及其在整个语料中的权重。可以进一步通过Gensim的可视化工具,如`pyLDAvis`来展示主题模型的结果,帮助解释数据。 总之,Gensim提供了简单而强大的工具来实现LDA模型。通过准备数据、预处理文本、构建词袋模型、构建语料库、训练LDA模型以及解释结果,可以使用Gensim轻松实现LDA主题模型分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值