主题建模:确定最佳主题数

在我对主题建模的持续探索中,我遇到了The Programming Historian博客,以及一篇文章,展示了如何使用Java库 从主题集衍生主题

博客上的说明使安装和运行变得非常容易,但是与我使用的其他库一样,您必须指定文集包含多少个主题。 我不确定要选择什么值,但是作者提出以下建议:

您如何知道要搜索的主题数? 是否有自然而然的话题? 我们发现,必须运行带有不同数量主题的火车主题,以查看合成文件如何分解。 如果我们最终将大部分原始文本都包含在非常有限的主题中,那么我们认为这是我们需要增加主题数量的信号。 设置太粗糙了。

搜索的方式有很多,包括使用MALLETs hlda命令,但是对于本教程的读者来说,循环进行多次迭代可能会更快一些(但更多信息请参见Griffiths,TL,&Steyvers,M.( 2004)。 寻找科学主题 。国家科学院院刊,101,5228-5235)。

由于我还没有时间深入研究论文或探讨如何在短槌中使用适当的选项,所以我想我会对停用词和主题数进行一些改动,看看结果如何。

据我了解,其想法是尝试使主题均匀分布->文档,即我们不希望所有文档都具有相同的主题,否则我们进行的任何主题相似度计算都不会那么有趣。

我试过用10、15、20和30个主题运行槌,还改变了所用的停用词。 我有一个版本只剥离了主要字符和“旁白”一词,而另一个版本中,我按出现次数和出现次数少于10次的词都剔除了前20%的单词。

这样做的原因是,它应该比TF / IDF更好地识别情节中的有趣短语,而不仅仅是在整个语料库中选择最受欢迎的单词。

我从命令行使用了槌,然后将其分为两个部分运行。

  1. 产生模型
  2. 根据超参数计算主题和文档的分配

我写了一个脚本来帮助我:

#!/bin/sh
 
train_model() {
  ./mallet-2.0.7/bin/mallet import-dir \
    --input mallet-2.0.7/sample-data/himym \
    --output ${2} \
    --keep-sequence \
    --remove-stopwords \
    --extra-stopwords ${1}
}
 
extract_topics() {
  ./mallet-2.0.7/bin/mallet train-topics \
    --input ${2} --num-topics ${1} \
    --optimize-interval 20 \
    --output-state himym-topic-state.gz \
    --output-topic-keys output/himym_${1}_${3}_keys.txt \
    --output-doc-topics output/himym_${1}_${3}_composition.txt
}
 
train_model "stop_words
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值