使用“词袋”方法进行主题检测的朴素贝叶斯

Posted

技术标签:

【中文标题】使用“词袋”方法进行主题检测的朴素贝叶斯【英文标题】:Naive Bayesian for Topic detection using "Bag of Words" approach 【发布时间】:2011-02-16 10:15:43 【问题描述】:

我正在尝试实现一种朴素的贝叶斯方法来查找给定文档或单词流的主题。是否有我可以查找的朴素贝叶斯方法?

另外,我正在努力改进我的字典。最初,我有一堆词映射到一个主题(硬编码)。取决于已经映射的单词以外的单词的出现。并且根据这些单词的出现,我想将它们添加到映射中,从而改进和学习映射到主题的新单词。并且还会改变单词的概率。

我该怎么做呢?我的方法是正确的吗?

哪种编程语言最适合实现?

【问题讨论】:

【参考方案1】:

朴素贝叶斯的现有实现

您可能最好只使用支持使用朴素贝叶斯进行文档分类的现有软件包之一,例如:

Python - 要使用基于 Python 的 Natural Language Toolkit (NLTK) 执行此操作,请参阅免费提供的 NLTK book 中的 Document Classification 部分。

Ruby - 如果 Ruby 更适合您,您可以使用 Classifier gem。这是检测 whether Family Guy quotes are funny or not-funny的示例代码。

Perl - Perl 具有 Algorithm::NaiveBayes 模块,并在包 synopsis 中包含示例用法 sn-p。

C# - C# 程序员可以使用 nBayes。该项目的主页上有一个简单的垃圾邮件/非垃圾邮件分类器的示例代码。

Java - Java 人有 Classifier4J。你可以看到一个训练和评分代码sn-p here。

从关键字引导分类

听起来您想从一组已知提示某些主题的关键字开始,然后将这些关键字用于bootstrap a classifier

这是一个相当聪明的主意。看看 McCallum 和 Nigam 的论文Text Classication by Bootstrapping with Keywords, EM and Shrinkage (1999)。通过采用这种方法,他们能够将分类准确率从单独使用硬编码关键字获得的 45% 提高到使用自举朴素贝叶斯分类器的 66%。对于他们的数据,后者接近于人类的一致性水平,因为人们在 72% 的时间里就文档标签达成一致。

【讨论】:

C# 开发者也可以使用Accord Framework.NET。朴素贝叶斯文档here

以上是关于使用“词袋”方法进行主题检测的朴素贝叶斯的主要内容,如果未能解决你的问题,请参考以下文章

朴素贝叶斯

基于朴素贝叶斯分类器的情感分析

朴素贝叶斯(naive bayes)原理小结

朴素贝叶斯简介

训练朴素贝叶斯分类器

NLTK,朴素贝叶斯:为啥有些特征没有?