具有潜在狄利克雷分配的子主题

数据挖掘 Python nlp 低密度脂蛋白 gensim
2022-02-19 19:20:52

我正在用 gensim 的 LdaMulticore 训练一个 LDA 模型。主题看起来很棒,但知道我知道主题中存在主题的领域,但我不太确定最好的建模方法。

我遇到了分层 LDA 的这种实现,但我很难实现它(没有社区支持)。考虑到这个讨论,我认为 gensim 的 hdpModel 不是我想要的。

我目前正在这样做:

1) 在所有记录上训练 LDA 模型以获得一般主题

2) 使用此 LDA 模型为每条记录分配一个主主题

3) 对于每个主题,仅检索分配给该主题的记录

4) 仅在过滤后的记录上训练一个新的 LDA 模型(例如,主题 ID == 3),以从过滤后的集合中生成子主题

5)为每条记录分配一个通用主题ID和一个子主题ID

这是获取主题和子主题的有效方式吗?我应该厌倦这种方法吗?

感谢您的任何见解。

2个回答

我实际上不认为您的方法是查找子主题的好方法。考虑具有主题分布 z 的文档 X。X 由主题 Z 的混合模型分布组成。如果你只是给一个文档最显着的分布,然后再次运行 lda,你可能会找到子主题,但你也会重新找到不应该被视为子主题的主题.

例如,让我们考虑一份关于食物和锻炼以及为什么某些食物和有氧运动对心脏健康有益的文件。假设我们找到主题 1 和 2,主要主题是食物和锻炼。假设主要分布是主题 1。然后再次在该特定文档上运行 LDA,您将改进食物、锻炼,也许还有营养、维生素等。但是,如果不检查每个主题,就没有真正的理由应该将其视为主题一个并对此做出推断。你也没有真正的方法来辨别你应该在这棵树下走多深。

关于 hLDA 的原始论文可以证明是有用的,它利用了中国餐厅过程及其与狄利克雷分布的关系来形成主题关系和树深度问题。同样在 David Blei github (bleilab) 上有一个 c++ 实现。在以您可能更熟悉的语言处理数据并使用他的代码后,您基本上可以设置一个小 shell 脚本。

运行 LDA 之后,你的结果不应该是这样的吗:Record1-> 71% topic 1, 14% topic 2, 15% topic 3,所以 topic 2 和 topic 3 会是记录 1 的子主题吗?

如果要查找主题 1 的子主题,您可以搜索所有记录,其中主题 1 是一般主题,并查找出现在主题 1 是一般主题的记录中最常见的主题。