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

Posted

技术标签:

【中文标题】如何在文本分类中使用朴素贝叶斯预测所需的类【英文标题】:How to predict desired class using Naive Bayes in Text Classification 【发布时间】:2017-10-25 20:06:12 【问题描述】:

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

根据本语料库的朴素贝叶斯,两个类的先验概率均为 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 的朴素贝叶斯分类器。没有得到想要的结果。

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

提前致谢。

【问题讨论】:

【参考方案1】:

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

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

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

    什么是聊天服务(您想要 what 类别) 什么是聊天服务(您想要 为什么 类别)

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

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

【讨论】:

谢谢@Pascal。我需要一个解决方案来解决从特征计数生成的朴素贝叶斯中的偏差问题。当一个特征在第 1 类中具有高频率时,包含该特征的样本将被分类到该类别中,而不管其预分类如何。 “预分类”是什么意思 训练数据中的每个文本都被分配了一个类。在我的示例中,“what_is_chat_service”被分配给第一个文本,“why_use_chat_service”被分配给第二个文本。

以上是关于如何在文本分类中使用朴素贝叶斯预测所需的类的主要内容,如果未能解决你的问题,请参考以下文章

Quanteda 包,朴素贝叶斯:如何预测不同特征的测试数据?

朴素贝叶斯-商品评论情感分析

Weka机器学习:如何解释朴素贝叶斯分类器?

使用 TextBlob 的朴素贝叶斯文本分类:当添加更多样本量时,每个实例都预测为负数

朴素贝叶斯:朴素贝叶斯定义朴素贝叶斯公式分解朴素贝叶斯分类流程高斯型朴素贝叶斯多项式朴素贝叶斯伯努利型朴素贝叶斯朴素贝叶斯预测概率校准朴素贝叶斯优缺点

朴素贝叶斯模型——文本情感分类