LDA 主题建模生成相同/空主题

LDA Topic Modeling Producing Identical/Empty Topics

提问人:Dez Miller 提问时间:10/15/2023 最后编辑:Dez Miller 更新时间:10/17/2023 访问量:44

问:

我正在对两个大型文本文档(大约 500-750 KB)进行主题建模,并要求十个主题。我一直在重复两个话题。这可能是文件数量少的问题吗?或者我应该更改 alpha/beta 参数?

以下是模型部分的代码:


`lda_model = gensim.models.ldamodel.LdaModel(corpus=corpus,
                                           id2word=id2word,
                                           num_topics=10, 
                                           random_state=100,
                                           update_every=1,
                                           chunksize=2,
                                           passes=10,
                                           alpha='auto',
                                           per_word_topics=True)`

以下是主题:

[(0,
  '0.005*"city" + 0.004*"police" + 0.003*"people" + 0.003*"thank" + '
  '0.003*"know" + 0.003*"want" + 0.002*"go" + 0.002*"say" + 0.002*"time" + '
  '0.002*"cop"'),
 (1,
  '0.001*"people" + 0.001*"cop" + 0.001*"city" + 0.001*"want" + 0.001*"go" + '
  '0.001*"police" + 0.001*"thank" + 0.001*"time" + 0.001*"know" + 0.001*"say"'),
 (2,
  '0.001*"people" + 0.001*"police" + 0.001*"city" + 0.001*"thank" + '
  '0.001*"want" + 0.001*"cop" + 0.001*"go" + 0.001*"know" + 0.001*"say" + '
  '0.001*"make"'),
 (3,
  '0.002*"city" + 0.002*"people" + 0.001*"know" + 0.001*"want" + '
  '0.001*"police" + 0.001*"go" + 0.001*"say" + 0.001*"vote" + 0.001*"time" + '
  '0.001*"cop"'),
 (4,
  '0.001*"city" + 0.001*"police" + 0.001*"cop" + 0.001*"people" + 0.001*"go" + '
  '0.001*"thank" + 0.001*"want" + 0.001*"vote" + 0.001*"make" + 0.001*"time"'),
 (5,
  '0.020*"city" + 0.014*"people" + 0.013*"police" + 0.011*"cop" + 0.010*"go" + '
  '0.010*"thank" + 0.009*"want" + 0.009*"know" + 0.008*"say" + 0.006*"time"'),
 (6,
  '0.001*"city" + 0.001*"go" + 0.001*"know" + 0.001*"people" + 0.001*"police" '
  '+ 0.001*"cop" + 0.001*"want" + 0.001*"vote" + 0.000*"say" + 0.000*"time"'),
 (7,
  '0.002*"city" + 0.001*"people" + 0.001*"police" + 0.001*"thank" + 0.001*"go" '
  '+ 0.001*"want" + 0.001*"know" + 0.001*"cop" + 0.001*"vote" + 0.001*"say"'),
 (8,
  '0.003*"city" + 0.003*"people" + 0.003*"police" + 0.002*"thank" + 0.002*"go" '
  '+ 0.002*"know" + 0.002*"vote" + 0.002*"want" + 0.002*"say" + 0.002*"time"'),
 (9,
  '0.017*"people" + 0.014*"city" + 0.012*"police" + 0.010*"go" + 0.010*"thank" '
  '+ 0.010*"want" + 0.009*"know" + 0.009*"say" + 0.009*"vote" + 0.008*"time"')]

可视化:

`# Visualize the topics
pyLDAvis.enable_notebook()
vis = pyLDAvis.gensim.prepare(lda_model, corpus, id2word)
vis
`

在此处查看可视化图片

我尝试更改了一些参数,但没有看到结果。很难找到 alpha 和 beta 参数的正常范围。

Python 文本挖掘 Gensim LDA

评论

0赞 gojomo 10/15/2023
我没有看到附加的图片 - 也许忘记包括了?(您可以编辑 Q 进行添加。我确实只看到了 3 行重复的 pyLDAvis 代码 - 这真的是所有代码吗?您引用的输出显示 10 个主题意味着 LDA 步骤确实创建了请求数量的主题,因此可能仅显示 2 个主题的问题是可视化代码/默认值问题。
0赞 gojomo 10/15/2023
也就是说,将 2 个文档建模为 10 个不同主题的混合可能会给出合理的主题,因为您实际上只有给出单个“文档 A 与文档 B”维度对比的数据 - 并且从仅一个 A 与 B 中提取 10 个维度的区别是很困难的。因此,除了任何其他参数调整外,请尝试提供一组文档,其数量远远超过您的目标主题数量。(只需将您的 2 个文档分成几个部分就足够了,尽可能合乎逻辑:章节或部分,如果需要,甚至可以是段落或任意范围。这可能会提高找到的主题的意义。
1赞 Dez Miller 10/17/2023
对此@gojomo抱歉,我修复了丢失的图片和重复的代码。您的第二条评论对于主题建模新手来说非常有用。我没有意识到它会比较这样的文档。我想我很惊讶它似乎只给每个文档一个主题?此外,我一直在尝试各种将文档划分为更小文档的方法,但没有任何效果。如果您有任何关于如何做到这一点而不必手动操作的建议,那将非常有帮助。
0赞 gojomo 10/17/2023
从你的图像来看,它似乎绘制了所有 10 个主题 - 但可能只有 1 和 2 具有可测量的直径。我认为这与主要问题是文档数量少的想法是一致的。LDA在“词袋”表示上工作,只是整体词频,没有分段/排序。因此,(例如)您的~750KB文档(也许是125k字,一本书?)只能在主题上与其他~500KB文档进行对比。它如何从这个小小的比较对比中发现超过 2 个广泛的主题?(这些词是算法的不透明标记,仅通过同时出现的频率来表示意义。
0赞 gojomo 10/17/2023
文档可能有一些合理的可检测断点,例如章节标题,即使在非常纯正的文本中,也可以从其他标点符号不足(无尾随句号)短句周围的额外换行符中看出。或者,如果它们没有,也许你可以回到源头并确保这些提示被保留,至少足够长的时间来分解它们。但即使你不这样做,只是选择一个任意的 N 个单词,然后每 N 个单词打破文档,也可能工作正常。(就我个人而言,如果我想要 10 个主题,我至少需要 10^2 个对比鲜明的文档,如果不是更多的话。试试看它是否有效!

答: 暂无答案