首次尝试主题建模运行R代码报错,请求错误排查与解决
刚上手主题建模就碰到这类报错确实头疼,我来帮你拆解问题根源和解决办法:
问题根源分析
你用了AssociatedPress数据集的前10条数据来运行FindTopicsNumber,这个数据量太小了——主题建模(尤其是基于Gibbs采样的LDA)需要足够的文档数量来稳定计算各类评估指标,10篇文档根本支撑不了2到15个主题的有效评估,导致FindTopicsNumber返回的结果result数据结构异常,后续的knitr::kable()和FindTopicsNumber_plot()自然会因为无法处理异常数据而报错。
另外,两条警告也指向了数据结构的问题:rep(digits, length.out = m)和seq_len(m)里的m不是有效的非负整数,说明计算出来的评估指标可能存在缺失或格式错误。
具体解决步骤
1. 扩大数据集规模
把你的dtm定义改成使用更多的文档,比如用整个AssociatedPress数据集,或者至少几百条:
# 改用整个数据集,或者至少前500条 dtm <- AssociatedPress # 或者 dtm <- AssociatedPress[1:500, ]
小数据集不仅会导致评估指标计算失效,还会让主题建模的结果毫无意义,所以这是最核心的解决点。
2. 检查并更新ldatuning工具包
旧版本的ldatuning可能存在小数据集处理的bug,先更新到最新版本:
devtools::install_github("nikita-moor/ldatuning") library(ldatuning)
3. 重新运行代码并验证结果
更新数据集和包之后,重新运行你的代码,此时result应该会是一个结构正常的数据框,包含所有指定的评估指标。你可以先打印result确认:
print(result)
如果输出是包含topics、Griffiths2004、CaoJuan2009等列的正常数据框,再运行knitr::kable(result)和FindTopicsNumber_plot(result)就不会报错了。
额外提示
- Gibbs采样的LDA本身在小数据集上结果波动极大,即使没有报错,得到的主题数量评估也没有参考价值,务必保证数据集的规模足够(至少几十到上百篇文档,越多越好)。
- 如果一定要测试小数据集,可以先把主题范围缩小,比如
topics = seq(2,5,by=1),但这也只是测试代码可行性,不能用于实际分析。
内容的提问来源于stack exchange,提问作者taurian

