You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于topicmodels包自动移除语料中跨主题高频无意义词汇?

自动识别并移除跨主题高频共有词汇的实现方法

核心思路

先提取各主题指定数量的Top词汇,找出所有主题的共有词汇,再从文档-词矩阵(DTM)中剔除这些词汇,最后重新训练LDA模型。以下是具体的R代码实现:

步骤1:提取各主题的前20个词汇

用terms()函数提取每个主题的前20个词汇,转换为列表便于后续处理:

# 提取每个主题的前20个词汇
top_terms_per_topic <- lapply(1:3, function(topic) {
  terms(model, 20)[, topic]
})

步骤2:找出所有主题共有的词汇

通过Reduce()结合intersect计算所有主题Top词汇的交集:

# 计算跨主题共有的词汇
shared_terms <- Reduce(intersect, top_terms_per_topic)

# 查看结果(可选)
print(shared_terms)

步骤3:从DTM中移除共有词汇

假设dat_dtm是tm包的DocumentTermMatrix对象,直接过滤目标词汇:

# 过滤DTM,移除共有词汇
dat_dtm_filtered <- dat_dtm[, !colnames(dat_dtm) %in% shared_terms]

# 可选:移除过滤后无词汇的空文档
dat_dtm_filtered <- dat_dtm_filtered[rowSums(as.matrix(dat_dtm_filtered)) > 0, ]

步骤4:重新训练LDA模型

用过滤后的DTM重新训练模型:

# 重新训练LDA模型
model_filtered <- LDA(dat_dtm_filtered, method = "VEM", k = 3, control = list(alpha = 0.1))

# 查看新模型的Top词汇
terms(model_filtered, 5)

额外说明

  • 若使用quanteda包的DTM对象,可改用dfm_select()函数排除shared_terms,逻辑一致。
  • 可根据分析需求调整提取Top词汇的数量(比如将20改为其他数值),平衡词汇覆盖度与计算效率。
  • 若没有跨主题共有词汇,shared_terms会是空向量,此时过滤后的DTM与原DTM一致,无需额外处理。

内容的提问来源于stack exchange,提问作者Jonnytheriver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:35:02