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

Jah*_*lam 5 python machine-learning text-classification naivebayes

我一直在从头开始实现多项朴素贝叶斯分类器,用于在 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'}
        ]
Run Code Online (Sandbox Code Playgroud)

根据该语料库的朴素贝叶斯,两个类别的先验概率将为 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
Run Code Online (Sandbox Code Playgroud)

我得到两个类的相同概率。我一直在研究如何改善这种情况。

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

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
Run Code Online (Sandbox Code Playgroud)

假设一个特征的默认概率 = 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'}
        ]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,两个类别的所有特征概率都将为 1。

以及预测文本“什么是聊天服务?”的概率。也将是平等的。

但我必须预测 'what_is_chat_service' 类。

如何预测所需的课程?我已经尝试过 sklearn 的朴素贝叶斯分类器。没有得到想要的结果。

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

提前致谢。

Pas*_*ucy 1

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

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

但是“为什么是聊天服务”与“什么是聊天服务”实际上并不是文本分类器可以轻松区分的东西,因为“为什么”和“什么”之间的区别主要在于语法。例如下面的句子:

  1. 什么是聊天服务(您想要什么类别)
  2. 聊天服务的用途是什么(您需要“原因”类别)

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

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