如何在文本分类中使用朴素贝叶斯预测所需的类

我一直在从头开始实现Multinomial朴素贝叶斯分类器,用于
python中的文本分类.

我计算每个类的特征计数和特征的概率分布.

根据我的实现,我得到以下结果:

假设我有以下语料库:

corpus = [
            {'text': 'what is chat service?', 'category': 'what_is_chat_service'},
            {'text': 'Why should I use your chat service?', 'category': 'why_use_chat_service'}
        ]

根据Naive Bayes的说法,这两个类的先验概率为0.5

如果我做一些预处理,包括转换为小写,停止单词删除和标点符号删除我得到以下标记列表:

>文字1:[聊天,服务]
>文字2:[使用,聊天,服务]

现在如果我想预测文本“什么是聊天服务”之后的类
根据朴素贝叶斯规则进行预处理,我们得到以下概率:

class                     chat     service   P(class|features)

what_is_chat_service      1        1         0.5
why_use_chat_service      1        1         0.5

我得到了2个等级的相等概率.我一直在研究改善这种情况.

一种可能的方法是包括停用词.如果我们包含停用词,我们会得到以下特征概率:

class                   what      is    chat     service   P(class|features)

what_is_chat_service    1         1     1        1         0.5(higher)
why_use_chat_service    1e-9      1e-9  1        1         5e-19

假设特征的默认概率= 1e-9

即哪个特征不属于一个类

在那种情况下,我们获得了第1类的更高概率:what_is_chat_service

包括停用词之后的概率仍然相等
如果我们的语料库如下:

corpus = [
            {'text': 'what is chat service?', 'category': 'what_is_chat_service'},
            {'text': 'what is the benefit of using chat service?', 'category': 'why_use_chat_service'}
        ]

在这种情况下,两个类的所有特征概率都是1.

以及预测文本“什么是聊天服务?”的可能性.也将是平等的.

但是我必须预测’what_is_chat_service’课程.

如何预测所需的课程?我从sklearn尝试过Naive Bayes Classifier.没有得到理想的结果.

如果我的问题冗长或不清楚,或者如果需要更多信息,请告诉我.

提前致谢.

最佳答案 朴素贝叶斯没有考虑词序.因此,对文档的主要主题进行分类是很好的(通常不仅仅是一个句子,而是一个完整的文档:许多段落,例如新闻文章).

在您的示例中,主题实际上是“聊天服务”(或者可能是“Web服务”或“客户服务”).

但是“为什么聊天服务”与“什么是聊天服务”并不是真正可以通过文本分类器轻松分离的东西,因为为什么和主要是语法之间的区别.例如,以下句子:

>什么是聊天服务(你想要什么类别)
>什么是聊天服务(你想要的原因类别)

只有对句子进行准确的句法分析才有帮助(这项任务非常困难).使用几乎所有文本分类器使用的词袋(或向量空间模型)的任何方法都可能在此任务中失败.

现在我知道我的答案没有多大帮助,但事实就是如此.如果你想在仍然使用Naive Bayes分类器的同时获得更好的分类,也许你可以尝试在你的特征(单词序列)中添加n-gram.这将捕获(有时,并非总是)一些语法信息.

点赞