1

流行的主题模型 Latent Dirichlet Allocation (LDA),当用于从语料库中提取主题时,会返回在字典单词上具有不同概率分布的不同主题。

而潜在语义索引(LSI)在每次迭代后给出相同的主题和相同的分布。

实际上,LDA 被广泛用于提取主题。如果每次分类都返回不同的主题分布,LDA 如何保持一致性?

考虑这个简单的例子。取文档样本,其中 D 表示文档:

D1: Linear Algebra techniques for dimensionality reduction
D2: dimensionality reduction of a sample database
D3: An introduction to linear algebra
D4: Measure of similarity and dissimilarity of different web documents
D5: Classification of data using database sample
D6: overfitting due lack of representative samples
D7: handling overfitting in descision tree
D8: proximity measure for web documents
D9: introduction to web query classification
D10: classification using LSI 

每行代表一个文档。在上述语料库中,LDA 模型用于从文档中生成主题。Gensim 用于 LDA,执行批量 LDA,其中选择的主题数为 4,通过数为 20。

现在在原始语料库上执行批量 LDA,20 次通过后生成的主题是:

topic #0: 0.045*query + 0.043*introduction + 0.042*similarity + 0.042*different + 0.041*reduction + 0.040*handling + 0.039*techniques + 0.039*dimensionality + 0.039*web + 0.039*using

topic #1: 0.043*tree + 0.042*lack + 0.041*reduction + 0.040*measure + 0.040*descision + 0.039*documents + 0.039*overfitting + 0.038*algebra + 0.038*proximity + 0.038*query

topic #2: 0.043*reduction + 0.043*data + 0.042*proximity + 0.041*linear + 0.040*database + 0.040*samples + 0.040*overfitting + 0.039*lsi + 0.039*introduction + 0.039*using

topic #3: 0.046*lsi + 0.045*query + 0.043*samples + 0.040*linear + 0.040*similarity + 0.039*classification + 0.039*algebra + 0.039*documents + 0.038*handling + 0.037*sample

现在批量 LDA 再次在相同的原始语料库上执行,在这种情况下生成的主题是:

topic #0: 0.041*data + 0.041*descision + 0.041*linear + 0.041*techniques + 0.040*dimensionality + 0.040*dissimilarity + 0.040*database + 0.040*reduction + 0.039*documents + 0.038*proximity

topic #1: 0.042*dissimilarity + 0.041*documents + 0.041*dimensionality + 0.040*tree + 0.040*proximity + 0.040*different + 0.038*descision + 0.038*algebra + 0.038*similarity + 0.038*techniques

topic #2: 0.043*proximity + 0.042*data + 0.041*database + 0.041*different + 0.041*tree + 0.040*techniques + 0.040*linear + 0.039*classification + 0.038*measure + 0.038*representative

topic #3: 0.043*similarity + 0.042*documents + 0.041*algebra + 0.041*web + 0.040*proximity + 0.040*handling + 0.039*dissimilarity + 0.038*representative + 0.038*tree + 0.038*measure

在这两种情况下,每个主题中的单词分布都不相同。事实上,词的分布从来都不一样。

那么,如果 LDA 在 LSI 等主题中没有相同的词分布,它如何有效地工作呢?

4

4 回答 4

4

我认为这里有两个问题。首先,LDA训练不像 LSI 那样具有确定性;LDA 的常用训练算法是采样方法。如果多次训练运行的结果大相径庭,那要么是一个错误,要么是你使用了错误的设置,或者是运气不好。如果您尝试优化某些功能,您可以尝试多次运行 LDA 训练。

然后对于聚类、查询和分类:一旦你有一个训练有素的 LDA 模型,你就可以以一种确定的方式将该模型应用于其他文档。不同的 LDA 模型会给你不同的结果,但是从你标记为最终模型的一个 LDA 模型中,你总是会得到相同的结果。

于 2012-02-28T10:57:41.250 回答
0

如果 LDA 在训练和推理步骤中都使用随机性,那么每次都会生成不同的主题。请参阅此链接:每次我在同一个语料库上训练时,LDA 模型都会生成不同的主题

于 2013-11-20T09:20:42.217 回答
0

我不完全确定我是否理解这个问题,但为了准确地说,你是说 LDA 在不同的运行中为同一组数据产生不同的主题分布。

首先 LDA 使用随机性来获得这些概率分布,因此每次运行您将获得不同的主题权重和单词,但您可以控制这种随机性。

gensim.models.ldamodel.LdaModel(
    corpus, num_topics=number_of_topics, id2word=dictionary, passes=15, random_state=1)

random_state如果您修复此数字,您会看到使用,您可以轻松地重现输出。

于 2019-05-22T10:12:59.287 回答
0

这个问题有三种解决方案:

  1. 设置一个 random_seed = 123
  2. pickle - 您可以将经过训练的模型保存为文件并根据需要重新访问,而无需更改主题。您甚至可以将此文件传输到另一台机器并通过调用来实现它。我们为预训练模型创建一个文件名,打开文件以保存为 pickle。关闭泡菜实例。加载保存的 LDA Mallet 包裹的泡菜:

    LDAMallet_file = 'Your Model'
    
    LDAMallet_pkl = open(LDAMallet_file, 'wb')
    pickle.dump(ldamallet, LDAMallet_pkl)
    
    LDAMallet_pkl_15.close()
    
    LDAMallet_file = 'Your Model'
    LDAMallet_pkl = open(LDAMallet_file, 'rb')
    ldamallet = pickle.load(LDAMallet_pkl)
    
    print("Loaded LDA Mallet wrap --", ldamallet)
    

    查看文档:https ://docs.python.org/3/library/pickle.html

    得到它?泡菜,因为它可以保存;)

  3. joblib - 与 pickle 相同,使用数组更好

我希望这有帮助 :)

于 2019-05-20T16:59:42.067 回答