Nlp LDA如何给出一致的结果?
流行的主题模型,潜在Dirichlet分配(LDA),当用于从语料库中提取主题时,会返回不同的主题,这些主题在字典单词上具有不同的概率分布 而潜在语义索引(LSI)在每次迭代后给出相同的主题和相同的分布 实际上,LDA被广泛用于提取主题。 如果LDA在每次分类时返回不同的主题分布,它如何保持一致性 考虑这个简单的例子。 在D代表文件的情况下,采集文件样本:Nlp LDA如何给出一致的结果?,nlp,lda,topic-modeling,latent-semantic-indexing,Nlp,Lda,Topic Modeling,Latent Semantic Indexing,流行的主题模型,潜在Dirichlet分配(LDA),当用于从语料库中提取主题时,会返回不同的主题,这些主题在字典单词上具有不同的概率分布 而潜在语义索引(LSI)在每次迭代后给出相同的主题和相同的分布 实际上,LDA被广泛用于提取主题。 如果LDA在每次分类时返回不同的主题分布,它如何保持一致性 考虑这个简单的例子。 在D代表文件的情况下,采集文件样本: D1: Linear Algebra techniques for dimensionality reduction D2: dimensi
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,在选择的主题数为4,通过数为20的情况下执行批量LDA
现在在原始语料库上执行批量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
在这两种情况下,每个主题中的单词分布并不相同。
事实上,单词的分布是不同的
那么,如果像LSI这样的主题中没有相同的单词分布,LDA如何有效地工作呢?我认为这里有两个问题。首先,LDA训练不像LSI那样具有确定性;LDA的常用训练算法是抽样法。如果多次训练的结果相差悬殊,那要么是错误,要么是你使用了错误的设置,要么就是运气不好。如果您试图优化某些功能,可以尝试多次运行LDA培训
然后,对于聚类、查询和分类:一旦您有了经过训练的LDA模型,您就可以以确定性的方式将该模型应用到其他文档中。不同的LDA模型会给出不同的结果,但是从一个您标记为最终模型的LDA模型中,您总是会得到相同的结果。我认为这里有两个问题。首先,LDA训练不像LSI那样具有确定性;LDA的常用训练算法是抽样法。如果多次训练的结果相差悬殊,那要么是错误,要么是你使用了错误的设置,要么就是运气不好。如果您试图优化某些功能,可以尝试多次运行LDA培训
然后,对于聚类、查询和分类:一旦您有了经过训练的LDA模型,您就可以以确定性的方式将该模型应用到其他文档中。不同的LDA模型会给你不同的结果,但是从一个你标记为最终模型的LDA模型中,你总是会得到相同的结果。如果LDA在训练和推理步骤中都使用随机性,它每次都会生成不同的主题。请参阅此链接:如果LDA在训练和推理步骤中使用随机性,则每次都会生成不同的主题。请参阅此链接:此问题有三种解决方案:
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)
查看文档:
明白了吗?腌制,因为它可以保存;)我希望这有帮助:)有三种解决方案:
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)
查看文档:
明白了吗?腌制,因为它可以保存;)我希望这能有所帮助:)我不能完全确定我是否理解这个问题,但为了准确起见,您是说LDA在同一组数据的不同运行中产生不同的主题分布 首先,LDA使用随机性来获得这些概率分布,因此对于每次跑步,您将获得不同的主题权重和单词,但您可以控制这种随机性
gensim.models.ldamodel.LdaModel(
corpus, num_topics=number_of_topics, id2word=dictionary, passes=15, random_state=1)
您可以看到
随机状态的用法
如果您修正这个数字,您可以轻松地再现输出。我不完全确定是否理解这个问题,但为了准确起见,您是说LDA在同一组数据的不同运行中产生不同的主题分布
首先,LDA使用随机性来获得这些概率分布,因此对于每次跑步,您将获得不同的主题权重和单词,但您可以控制这种随机性
gensim.models.ldamodel.LdaModel(
corpus, num_topics=number_of_topics, id2word=dictionary, passes=15, random_state=1)
您可以看到
random_state
的用法,如果您修复了这个数字,您可以轻松地重现输出。我不确定是否理解这个问题。你担心两次运行LDA训练算法可能会返回不同的模型吗?@larsmans补充了一些更多的信息来阐明我的观点。希望你也明白这个问题:我不确定我是否理解这个问题。你担心两次运行LDA训练算法可能会返回不同的模型吗?@larsmans补充了一些更多的信息来阐明我的观点。希望你也明白这个问题:我在问题中添加了一个小例子来支持我的观点。金弗利,坐一会儿look@Shockeduser:是的,我见过LDA在玩具示例上给出类似的结果。但是试着把它放在类似数据集的东西上;如果您的实现是正确的,那么应该会给出更一致的结果。我在问题中添加了一个小示例信息来支持我的主张。金弗利,坐一会儿look@Shockeduser:是的,我去过