我目前有一个使用MALLET训练好的主题模型(http://mallet.cs.umass.edu/topics.php),该模型基于大约80,000篇收集的新闻文章(这些文章全部属于一个类别)。
我希望每次有新文章进来时(可能与该类别相关,也可能不相关)都能给出一个相关性评分。有没有办法实现这一点?我已经阅读了关于tf-idf的内容,但似乎它是基于现有文章给出评分的,而不是针对新进来的文章。最终目标是过滤掉可能不相关的文章。
任何想法或帮助都将不胜感激。谢谢!
回答:
根据文档说明,在你有了模型(主题)后,你可以对新的未见过文档进行测试(参数 –evaluator-filename [FILENAME] 就是你传递新未见过文档的地方) 主题保留概率:
主题保留概率
–evaluator-filename [FILENAME] 前一节描述了如何为新文档获取主题比例。我们常常希望估计新文档的对数概率,并在所有主题配置上进行边缘化。使用MALLET命令 bin/mallet evaluate-topics –help 来获取关于使用保留概率估计的信息。与主题推断一样,你必须确保新数据与你的训练数据兼容。使用选项 –use-pipe-from [MALLET TRAINING FILE] 在MALLET命令 bin/mallet import-file 或 import-dir 中指定一个训练文件。
注意:我更多地使用gensim的LDA和LSI,你可以像下面这样传递新文档:
new_doc = "Human computer interaction"new_vec = dictionary.doc2bow(new_doc.lower().split())print(lda_model[new_vec])#output: [(0, 0.020229542), (1, 0.49642297)
解释:你可以看到(1, 0.49642297),这意味着在我们有的两个主题(类别)中,新文档更接近于主题#1。因此,在你的情况下,你可以从输出列表中取最大值,这样你就有了相关性的“系数”,系数高表明属于该类别,低则不属于(为了更好地可视化,我添加了两个主题,如果你只有#1主题,那么只需添加一个你想要考虑的最小阈值,如果超过了这个阈值,例如0.40,那么就在类别内,否则不在)。