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

时间:2017-05-25 08:37:17

标签: python machine-learning text-classification naivebayes

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

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

根据我的实施情况,我得到以下结果:

假设我有以下语料库:

import {Component} from '@angular/core';

@Component({
selector: 'app-parent-parent'
template : `
<app-parent [parentTitle] = "parentParentTitle"</app-parent>
`
})
  export class DashboardComponent {
 parentParentTitle = "Dashboard";     
 }

根据Naive Bayes对于这个语料库,两个类的先验概率将为0.5

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

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

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

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

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

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

class                     chat     service   P(class|features)

what_is_chat_service      1        1         0.5
why_use_chat_service      1        1         0.5

假设某个要素的默认概率= 1e-9

即哪个功能不属于类

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

包含停用词后的概率相等 如果我们的语料库如下:

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

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

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

但我必须得到'what_is_chat_service'课程的预测。

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

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

提前感谢。

1 个答案:

答案 0 :(得分:1)

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

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

但&#34;为什么聊天服务&#34; vs&#34;什么是聊天服务&#34;并不是一个可以通过文本分类器轻松分离的东西,因为为什么 之间的区别主要是语法分析。例如,以下句子:

  1. 什么是聊天服务(您希望 类别)
  2. 什么是聊天服务(您希望为什么类别)
  3. 只有对句子进行准确的句法分析才有助于此(而且这项任务非常难以)。使用几乎所有文本分类器使用的词袋(或向量空间模型)的任何方法都可能在此任务中失败。

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