朴素贝叶斯文本分类在一个类别中失败。为什么?

时间:2013-05-17 04:28:55

标签: machine-learning nlp classification bayesian document-classification

我正在为文本类别检测实现朴素贝叶斯分类器。 我有37个类别,在测试集上我的准确度大约为36%。

我想提高准确性,所以我决定在许多来源中建议实现37个双向分类器(Ways to improve the accuracy of a Naive Bayes Classifier?就是其中之一),这些分类器将回答给定的文本:

specific_category OR everything_else

我将通过顺序应用它们来确定文本的类别。

但我遇到了第一个分类器的问题,它总是在“specific_category”类别中失败。

我有培训数据 - 37个类别,每个类别相同大小的100个文档。 对于每个类别,我找到了我通过互信息标准选择的50个特征的列表(特征只是单词)。

为了举例,我使用两个类别“农业”和“everything_else”(农业除外)。

对于“农业”类别:

number of words in all documents of this class 
(first term in denominator in http://nlp.stanford.edu/IR-book/pdf/13bayes.pdf, (13.7))
W_agriculture = 31649.

Size of vocabulary V_agriculture = 6951.
Log probability of Unknown word (UNK) P(UNK|agriculture) = -10.56
Log probability of class P(agriculture) = log(1/37) = -3.61 (we have 37 categories of same-size documents)

对于“everything_else”类别:

W_everything_else = 1030043
V_everything_else = 44221
P(UNK|everything_else) = -13.89
P(everything_else) = log(36/37) = -0.03

然后我有一个与农业无关的文本,让它主要由未知单词(UNK)组成。它有270个单词,它们对于“农业”和“所有内容”这两个类别大多是未知的。假设260个单词是“everything_else”的UNK,其他10个是已知的。

然后,当我计算概率时

P(text|agriculture) = P(agriculture) + SUM(P(UNK|agriculture) for 270 times) 
P(text|everything_else) = P(everything_else) + SUM(P(UNK|everything_else) for 260 times) + SUM(P(word|everything_else) for 10 times)

在最后一行中,我们将260个单词计为UNK,将10个单词称为类别。

主要问题。作为P(UNK |农业)>> P(everything_else)(对于日志它更大),那些270项P(UNK |农业)的影响超过了对文本中每个单词的P(word | everything_else)的总和的影响。 因为

SUM(P(UNK|agriculture) for 270 times) = -2851.2
SUM(P(UNK|everything_else) for 260 times) = -3611.4

并且第一个总和要大得多,不能用P(农业)和SUM(P(word | everything_else)10个单词)来校正,因为差异很大。然后我总是在“农业”类别中失败,尽管文本不属于它。

问题:我错过了什么吗?或者我应该如何处理大量的UNK单词,并且它们对小类别的概率要高得多?

UPD :试图扩大“农业”类别的转换数据(仅将文档连接36次),以使文档数量相等。它对少数几个类别有帮助,对其他类别没那么多,我怀疑由于单词数量和字典大小减少,P(UNK | specific_category)变得更大,并且当总和270次时,它会超过P(UNK | everything_else)。

因此,似乎这种方法对训练数据和词汇量大小的单词数量非常敏感。怎么克服这个?也许bigrams / trigrams会有帮助吗?

1 个答案:

答案 0 :(得分:4)

对,好的。你很困惑,但我会给你一些基本的指示。

首先,即使您遵循1-vs-all方案,也不能为不同的类提供不同的词汇表。如果这样做,随机变量的事件空间是不同的,因此概率不具有可比性。你需要决定所有课程的单一常用词汇。

其次,扔掉未知的令牌。它对你没有帮助。忽略任何不属于你决定的词汇的单词。

最后,我不知道你在总结概率方面做了些什么。我想,你对记录日志感到困惑。这个公式不正确:

P(文本|农业)= P(农业)+ SUM(P(UNK |农业)270次)

相反,它是:

p(文本|农业)= p(农业)* p(unk |农业)^ 270 * p(所有其他单词在doc |农业)

如果您使用日志,则会变为:

log(p(t | a))= log(p(农业))+ 270 * log(p(unk |农业))+ log(p(所有其他词语|农业))

最后,如果你的分类器是正确的,那么没有理由相信one-vs-all比直接n-way分类更好。根据经验可能,但从理论上讲,他们的结果应该是等价的。在任何情况下,您都不应该按顺序应用决策,而应该执行所有n个双向问题并分配给正概率最高的类。