自然语言处理-第六期-Naive Bayes

图灵汇官网

背景

我们可以把自然语言处理(NLP)类比为两个步骤:原木加工和木材加工。在之前的讨论中,我们介绍了诸如Word2Vec和Bag of Words等技术,这些都是原木加工的方法。那么,当我们已经完成了Word向量化之后,接下来该如何处理这些向量呢?

本期将展示一些实际的代码,这可能会让大家有一个更直观的理解。本期的主题是朴素贝叶斯(Naive Bayes)。如果对公式不感兴趣的读者可以直接跳到总结和应用部分。

需要代码的读者可以留言给我。

朴素贝叶斯模型

首先,朴素贝叶斯是一种概率模型。之所以被称为“朴素”,是因为它假设每个特征的概率相互独立。这里借用一个网上找到的例子来说明:

我们有五句话,并且每句话都有对应的标签。例如,“A great game”对应的标签是“Sports”。朴素贝叶斯的“朴素”在于假设每个特征值是相互独立的,不存在概率交叉。

贝叶斯定理

贝叶斯定理在条件概率的场景中非常有用。以下是贝叶斯定理的经典公式:

当应用于具体实例时,它表示的是,在“a very close game”出现的情况下,标签为“Sports”的概率。

由于我们现在只需要比较“Sports”和“Not Sports”两种情况下的概率,因此可以忽略分母,只需比较以下两个结果:

这个概率相对简单。我们只需统计“Sports”类型中每个词的概率即可。如下图所示,只需统计“Sports”类别中出现“a”,“very”,“close”,“game”的概率。

最终,我们能够计算出“Sports”和“Not Sports”两种情况的概率。

朴素贝叶斯的应用

尽管很多人可能对数学不感兴趣,但这并不会影响到朴素贝叶斯的实际应用。借助Python Scikit库的帮助,调用朴素贝叶斯分类器只需要两行代码。虽然听起来简单,但实际操作起来确实如此。

本次应用使用的是Scikit-Learn的fetch_20newsgroups数据库。其中,X是每篇文章的文本内容,Y是文章的分类。代码非常简洁,去掉解释部分后,总共只有20到30行。

分类器的训练

根据本系列之前的文章介绍,神经网络的训练数据流分为正向和逆向。对于朴素贝叶斯分类器来说:

  • 正向:通过每个文本中的单词,计算该文章属于20种新闻类型之一的概率;
  • 逆向:计算预测值和实际值之间的损失(误差),并通过反向传播修正预测过程中的参数。

更通俗地理解,就是通过特征值预测整体结果,以及将整体结果的概率分拆到各个特征值上。

预测准确率

最终测试样本的准确率为77.38%。虽然朴素贝叶斯方法简单,但它仍然达到了77.38%的准确率,这表明其在某些情况下是非常有效的。

下期预告

本期介绍了朴素贝叶斯分类器的内容,它通过特征值来预测最终结果的概率。

下一期我们将正式引入循环神经网络(RNN)等神经网络技术来处理NLP问题,这也是第一次考虑单词的顺序。

本文来源: 图灵汇 文章作者: valiant