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
如果我进行一些预处理,包括转换为小写、停用词删除和标点符号删除,我会得到以下标记列表:
现在,如果我想根据朴素贝叶斯规则在预处理后预测文本“什么是聊天服务”的类别,我们将得到以下概率:
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 的朴素贝叶斯分类器。没有得到想要的结果。
如果我的问题冗长或不清楚,或者需要更多信息,请告诉我。
提前致谢。
朴素贝叶斯不考虑词序。因此,最好对文档的主要主题进行分类(通常不仅仅是一个句子,而是一个完整的文档:许多段落,例如新闻文章)。
在您的示例中,主题实际上是“聊天服务”(或者可能是“网络服务”或“客户服务”)。
但是“为什么是聊天服务”与“什么是聊天服务”实际上并不是文本分类器可以轻松区分的东西,因为“为什么”和“什么”之间的区别主要在于语法。例如下面的句子:
只有对句子进行准确的句法分析才会有帮助(而且这项任务非常困难)。几乎所有文本分类器都使用的任何使用词袋(或向量空间模型)的方法都可能无法完成此任务。
现在我知道我的回答没有多大帮助,但事实就是如此。如果您想在仍然使用朴素贝叶斯分类器的同时获得更好的分类,也许您可以尝试将 n-gram 添加到您的特征(单词序列)中。这将捕获(有时,并非总是)一些语法信息。