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

背景

我们可以粗略的将NLP类比为两个部分: 原木加工,木材加工。在前几期,我们提到了Word2Vec,Bag of Word等等方式都是原木加工的方式。 那当我们已经完成Word向量化,我们如何处理他们呢?

本期将展现实际的代码,可能会给大家一个更直接的感觉。本期的主题是Naive Bayes,第二段是Naive Bayes的讲解,如果对公式不感兴趣的同学,可以直接跳到总结和应用部分。

需要代码的同学可以留言我。

Naive Bayes 模型

首先,Naive Bayes是一个概率公式。它之所以是Naive 是因为,它假设每个特征的概率相互独立,我借鉴网上找的一个例子来说明:

我们有五段话,并且有其对应的标签。如“A great game”对应的是Sports。Naive Bayes的naive是在于假设每个特征值是不相互影响的,是没有概率交叉的如下:

Bayes Theorem

Bayes Theorem 在条件概率的场景下用处非常大。以下是Bayes的经典公式,

当我们将其应用在一个实际的例子中时如下,其代表的是 当(条件)出现“a very close game”时, 标签是"sports"的概率;

由于现在我们只需要比较 当某条件出现时,比较“Sports”和“not Sports”概率的大小就行了。所以我们可以忽略分母进而比较以下两个结果:

这个概率就简单很多。只是数Sports 出现每个词的概率就行了。如下面这个图,只要数Sports类型中出现a,very,close,game的概率

最终我们就能够计算出,对应“Sports”和“Not Sports”的概率

总结下

可以从两个方向来理解Naive Bayes,从正向来说,是通过每个特征值来推断整体的结果;从逆向来说,是通过分拆整体的结果,得出每个特征值的概率。

Naive Bayes Classifier的实际应用

可能大家对数学不感兴趣,但是并不影响对Naive Bayes的实际应用。因为在Python Scikit lib的帮助下,只要两行代码就能调用Bayes Classifier。讲了这么多,调用原来这么简单.

本次应用取的是scikit-Learn 的fetch_20newsgroups 数据库。 其X是每个文章的文本,Y是文章的分类。代码非常短,去除解释部分,总共就20~30行。

Classifier的训练

根据本系列第四篇介绍,神经网络的训练数据流分为两部分:正向和逆向。对于Bayes Classifier来说:

正向,即通过每个文本内的word,计算此文章对应20个新闻类型的概率;

逆向,计算预测值和实际值的loss(差距),通过反向传递修正预测过程中的参数;

更通俗的理解可以看成,通过特征预测整体结果和 将整体结果的概率分拆到特征值上。

预测准确率

最终测试样本的准确率是:77.38%

从过程来看,Naive Bayes 并没有考虑单词的顺序,只是通过概率公式,推断整体的概率。虽然方法简单,但是其也达到了77.38%的准确率。

下期预告

本期有讲到Bayes Classifier的内容,其是通过特征值来预测最终结果的概率。

下一期将正式引入RNN等神经网络来处理NLP,这也是第一次我们考虑了词的顺序。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180715A11G9T00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券