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