当前位置: 首页 > 面试题库 >

每当我在同一个语料库上训练时,LDA模型都会生成不同的主题

叶富
2023-03-14
问题内容

我正在使用pythongensim从231个句子的小型语料库中训练潜在Dirichlet分配(LDA)模型。但是,每次我重复该过程时,都会产生不同的主题。

为什么相同的LDA参数和语料库每次都会生成不同的主题?

我如何稳定话题的产生?

我正在使用这个语料库(http://pastebin.com/WptkKVF0)和停用词列表(http://pastebin.com/LL7dqLcj),这是我的代码:

from gensim import corpora, models, similarities
from gensim.models import hdpmodel, ldamodel
from itertools import izip
from collections import defaultdict
import codecs, os, glob, math

stopwords = [i.strip() for i in codecs.open('stopmild','r','utf8').readlines() if i[0] != "#" and i != ""]

def generateTopics(corpus, dictionary):
    # Build LDA model using the above corpus
    lda = ldamodel.LdaModel(corpus, id2word=dictionary, num_topics=50)
    corpus_lda = lda[corpus]

    # Group topics with similar words together.
    tops = set(lda.show_topics(50))
    top_clusters = []
    for l in tops:
        top = []
        for t in l.split(" + "):
            top.append((t.split("*")[0], t.split("*")[1]))
        top_clusters.append(top)

    # Generate word only topics
    top_wordonly = []
    for i in top_clusters:
        top_wordonly.append(":".join([j[1] for j in i]))

    return lda, corpus_lda, top_clusters, top_wordonly

#######################################################################

# Read textfile, build dictionary and bag-of-words corpus
documents = []
for line in codecs.open("./europarl-mini2/map/coach.en-es.all","r","utf8"):
    lemma = line.split("\t")[3]
    documents.append(lemma)
texts = [[word for word in document.lower().split() if word not in stopwords]
             for document in documents]
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]

lda, corpus_lda, topic_clusters, topic_wordonly = generateTopics(corpus, dictionary)

for i in topic_wordonly:
    print i

问题答案:

为什么相同的LDA参数和语料库每次都会生成不同的主题?

因为LDA在训练和推理步骤中都使用了随机性。

我如何稳定话题的产生?

通过在numpy.random每次训练模型或进行推理时将种子重置为相同的值,使用numpy.random.seed

SOME_FIXED_SEED = 42

# before training/inference:
np.random.seed(SOME_FIXED_SEED)

(这很丑陋,这使得Gensim的结果难以再现;请考虑提交补丁。我已经打开了一个问题。)



 类似资料:
  • ASR语言模型在线训练 分词 文本清洗 语言模型目前不支持英文,阿拉伯数字,标点符号以及特殊字符,所以需要将训练文本中英文剔除,阿拉伯数字转换成相应的中文表示,删除标点符号和特殊字符。 文本分词 一般先用结巴或清华分词器分词,再人工矫正,分词的原则是它需要具有独立的实体意义。比如,刘德华, 张学友,这些人名;还有一些地名,张家港,黑龙江等;专有名词,中国,迪士尼等.对于我们需要训练的文本,要保证分

  • 潜在狄利克雷分配(LDA)是一个主题模型,用于查找一组文档背后的潜在变量(主题)。我使用python gensim包,有两个问题: > 我打印出每个主题最频繁的单词(我尝试了10,20,50个主题),发现单词的分布非常“平坦”:意味着即使是最频繁的单词也只有1%的概率... 大多数主题都是相似的:这意味着每个主题中最常用的单词重叠很多,并且主题中的高频词几乎共享同一组单词。。。 我想问题可能是因为

  • 我想做一个图像分类器,但是我不懂Python。js与我熟悉的javascript一起工作。模型可以用它来训练吗?这样做的步骤是什么?坦白地说,我不知道从哪里开始。 ========================================= 说我有一堆图像和标签。我如何使用它们来训练一个模型?

  • 在之前的描述中,我们通常把机器学习模型和训练算法当作黑箱子来处理。如果你实践过前几章的一些示例,你惊奇的发现你可以优化回归系统,改进数字图像的分类器,你甚至可以零基础搭建一个垃圾邮件的分类器,但是你却对它们内部的工作流程一无所知。事实上,许多场合你都不需要知道这些黑箱子的内部有什么,干了什么。 然而,如果你对其内部的工作流程有一定了解的话,当面对一个机器学习任务时候,这些理论可以帮助你快速的找到恰

  • 在之前的描述中,我们通常把机器学习模型和训练算法当作黑箱子来处理。如果你实践过前几章的一些示例,你惊奇的发现你可以优化回归系统,改进数字图像的分类器,你甚至可以零基础搭建一个垃圾邮件的分类器,但是你却对它们内部的工作流程一无所知。事实上,许多场合你都不需要知道这些黑箱子的内部有什么,干了什么。 然而,如果你对其内部的工作流程有一定了解的话,当面对一个机器学习任务时候,这些理论可以帮助你快速的找到恰

  • -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------