从 gensim 的 LDA 获得主题的统一分布?

数据挖掘 Python 文本挖掘 低密度脂蛋白 gensim
2022-02-27 09:36:56

我正在尝试学习语料库中每个文档的主题分布。

我有术语文档矩阵(dim 的稀疏矩阵:num_terms * no_docs)作为 LDA 模型的输入(num_topics=100),当我尝试为每个文档推断向量时,我得到了它们的均匀分布。这是极不可能的,因为文档具有不同的主题。

相关的代码片段是:

#input : scipy sparse term-doc matrix (no_terms * no_docs)

corpus = gensim.matutils.Sparse2Corpus(term_doc)

lda = gensim.models.LdaModel(corpus, 100)

vec_gen = lda[corpus]

vecs = [vec for vec in vec_gen]

现在对于 vecs 中的每个向量,我得到每个主题的相同概率。

谁能指出我哪里出错了?

2个回答

我解决了这个问题。gensim 的 LDA 中有一个最小概率参数,默认设置为 0.01。所以有问题的话题。< 0.01 从输出中删除。

一旦我设置了分钟。prob 到非常低的值,结果具有所有主题及其相应的概率。

可能对 OP 没有用,但主题的统一分布可能来自在文档中持续存在的某些术语。这个讨论更符合真实主题分布与模型连贯性的关系,但与这个问题相切,这可能有助于模型性能。

前任。)

doc_1 = ['A','B','C','X'],

doc_2 = ['A','C','D','Y'],

doc_3 = ['A','D','F','Y'],

doc_4 = ['A','B','F','X']

如果我们希望保留较少数量的主题(也许我们将 LDA 用作探索性模型,而不是将其部署用于回归或分类,或者希望使用它向观众解释主题) .

我们可以看到“A”在所有文档中都存在,我们可以从每个文档的标记列表中删除“A”是合理的。

这很可能是我们正在分析与“A”作为主题而不是主题或更直观的思维框架有关的文档的情况,假设我们仅分析有关苹果的文档......是吗如果我们已经假设语料库主要由心脏病组成,是否有必要包括苹果?现在,与其隐藏我们在“B”和“X”和“D”和“Y”之间看到的数学关系,我们可以减少准确建模细微关系所需的主题数量。

简单地删除一个过度表示的术语可以帮助扩大包含非常小的(按比例)主题的可能性,但是有一个论点是这是否可以导致一个更接近主题内真实主题分布的模型,这种方法假定没有仅通过主题词共享关系的词条。例如,如果 doc_2 和 doc_4 中出现了一个新术语“Z”,则唯一可交换的关系是通过“A”,因此如果删除“A”,这可能会丢失。(虽然在大型语料库中不太可能)