首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LDA如何提供一致的结果?

LDA如何提供一致的结果?
EN

Stack Overflow用户
提问于 2012-02-28 03:20:45
回答 4查看 5.9K关注 0票数 1

流行的主题模型,潜在狄利克雷分配(LDA),当用于从语料库中提取主题时,返回在字典单词上具有不同概率分布的不同主题。

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

在现实中,LDA被广泛用于提取主题。如果LDA在每次进行分类时都返回不同的主题分布,它如何保持一致性?

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

代码语言:javascript
复制
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次遍历后生成的主题是:

代码语言:javascript
复制
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,在这种情况下生成的主题是:

代码语言:javascript
复制
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那样具有相同的单词分布,它如何有效地工作呢?

EN

回答 4

Stack Overflow用户

发布于 2012-02-28 18:57:41

我认为这里有两个问题。首先,LDA的训练不像LSI那样是确定性的;LDA的常见训练算法是采样方法。如果多次训练的结果差异很大,这要么是一个bug,要么是你使用了错误的设置,或者只是运气不好。如果你想优化一些函数,你可以尝试多次运行LDA训练。

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

票数 4
EN

Stack Overflow用户

发布于 2013-11-20 17:20:42

如果LDA在训练和推理步骤中都使用随机性,它每次都会生成不同的主题。请参阅此链接:LDA model generates different topics everytime i train on the same corpus

票数 0
EN

Stack Overflow用户

发布于 2019-05-21 00:59:42

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

  1. set a random_seed = 123
  2. pickle -您可以将训练好的模型保存为文件,并在不更改主题的情况下随意重新访问。您甚至可以将此文件传输到另一台计算机,并通过调用。我们为预先训练好的模型创建一个文件名,打开该文件保存为一个pickle。关闭pickle实例。加载保存的LDA锤子包装的泡菜:

LDAMallet_file =‘您的模型’LDAMallet_pkl = open( LDAMallet_file,'wb') pickle.dump( ldamallet,LDAMallet_pkl) LDAMallet_pkl_15.close() LDAMallet_file=‘您的模型’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

明白了吗?pickle,因为它保留了;)

  • joblib -与pickle相同,在arrays

中效果更好

我希望这能有所帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9470899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档