NLP系列(2)_用朴素贝叶斯进行文本分类(上)

作者:寒小阳 && 龙心尘
时间:2016年1月。
出处:http://blog.csdn.net/longxinchen_ml/article/details/50597149
http://blog.csdn.net/han_xiaoyang/article/details/50616559
声明:版权所有,转载请联系作者并注明出处

1. 引言

贝叶斯方法是一个历史悠久,有着坚实的理论基础的方法,同时处理很多问题时直接而又高效,很多高级自然语言处理模型也可以从它演化而来。因此,学习贝叶斯方法,是研究自然语言处理问题的一个非常好的切入口。

2. 贝叶斯公式

贝叶斯公式就一行:

$P(Y|X)=\frac{P(X|Y)P(Y)}{P(X)} $

而它其实是由以下的联合概率公式推导出来:

$P(Y,X) = P(Y|X)P(X)=P(X|Y)P(Y) $

其中 P ( Y ) P(Y) P(Y)叫做先验概率, P ( Y ∣ X ) P(Y|X) P(YX)叫做后验概率, P ( Y , X ) P(Y,X) P(Y,X)叫做联合概率。

额,恩,没了,贝叶斯最核心的公式就这么些。

3. 用机器学习的视角理解贝叶斯公式

在机器学习的视角下,我们把 X X X理解成**“具有某特征”,把 Y Y Y理解成“类别标签”(一般机器学习问题中都是X=>特征, Y=>结果对吧)。在最简单的二分类问题(判定)下,我们将 Y Y Y理解成“属于某类**”的标签。于是贝叶斯公式就变形成了下面的样子:

$P(“属于某类”|“具有某特征”)=\frac{P(“具有某特征”|“属于某类”)P(“属于某类”)}{P(“具有某特征”)} $

我们尝试更口(shuo)语(ren)化(hua)的方式解释一下上述公式:

P ( “ 属 于 某 类 ” ∣ “ 具 有 某 特 征 ” ) = P(“属于某类”|“具有某特征”)= P()=在已知某样本“具有某特征”的条件下,该样本“属于某类”的概率。所以叫做**『后验概率』
P ( “ 具 有 某 特 征 ” ∣ “ 属 于 某 类 ” ) = P(“具有某特征”|“属于某类”)= P()=在已知某样本“属于某类”的条件下,该样本“具有某特征”的概率。
P ( “ 属 于 某 类 ” ) = P(“属于某类”) = P()=(在未知某样本具有该“具有某特征”的条件下,)该样本“属于某类”的概率。所以叫做
『先验概率』**。
P ( “ 具 有 某 特 征 ” ) = P(“具有某特征”) = P()=(在未知某样本“属于某类”的条件下,)该样本“具有某特征”的概率。

而我们二分类问题的最终目的就是要判断 P ( “ 属 于 某 类 ” ∣ “ 具 有 某 特 征 ” ) P(“属于某类”|“具有某特征”) P()是否大于1/2就够了。贝叶斯方法把计算**“具有某特征的条件下属于某类”的概率转换成需要计算“属于某类的条件下具有某特征”**的概率,而后者获取方法就简单多了,我们只需要找到一些包含已知特征标签的样本,即可进行训练。而样本的类别标签都是明确的,所以贝叶斯方法在机器学习里属于有监督学习方法。

这里再补充一下,一般**『先验概率』、『后验概率』是相对**出现的,比如 P ( Y ) P(Y) P(Y) P ( Y ∣ X ) P(Y|X) P(YX)是关于 Y Y Y的先验概率与后验概率, P ( X ) P(X) P(X) P ( X ∣ Y ) P(X|Y) P(XY)是关于 X X X的先验概率与后验概率。

4. 垃圾邮件识别

举个例子好啦,我们现在要对邮件进行分类,识别垃圾邮件和普通邮件,如果我们选择使用朴素贝叶斯分类器,那目标就是判断 P ( “ 垃 圾 邮 件 ” ∣ “ 具 有 某 特 征 ” ) P(“垃圾邮件”|“具有某特征”) P()是否大于1/2。现在假设我们有垃圾邮件和正常邮件各1万封作为训练集。需要判断以下这个邮件是否属于垃圾邮件:

“我司可办理正规发票(保真)17%增值税发票点数优惠!”

也就是判断概率 P ( “ 垃 圾 邮 件 ” ∣ “ 我 司 可 办 理 正 规 发 票 ( 保 真 ) 17 % 增 值 税 发 票 点 数 优 惠 ! ” ) P(“垃圾邮件”|“我司可办理正规发票(保真)17\%增值税发票点数优惠!”) P(17%)是否大于1/2

咳咳,有木有发现,转换成的这个概率,计算的方法:就是写个计数器,然后+1 +1 +1统计出所有垃圾邮件和正常邮件中出现这句话的次数啊!!!好,具体点说:

P ( “ 垃 圾 邮 件 ” ∣ “ 我 司 可 办 理 正 规 发 票 ( 保 真 ) 17 % 增 值 税 发 票 点 数 优 惠 ! ” ) P(“垃圾邮件”|“我司可办理正规发票(保真)17\%增值税发票点数优惠!”) P(17%)
$ =\frac{垃圾邮件中出现这句话的次数}{垃圾邮件中出现这句话的次数+正常邮件中出现这句话的次数}$

5. 分词

然后同学们开始朝我扔烂白菜和臭鸡蛋,“骗纸!!误人子弟!!你以为发垃圾邮件的人智商都停留在20世纪吗!!你以为它们发邮件像抄作业一样不改内容吗!!哪来那么多相同的句子!!"。

咳咳,表闹,确实,在我们这样的样本容量下,『完全击中』的句子很少甚至没有(无法满足大数定律,),算出来的概率会很失真。一方面找到庞大的训练集是一件非常困难的事情,另一方面其实对于任何的训练集,我们都可以构造出一个从未在训练集中出现的句子作为垃圾邮件(真心的,之前看过朴素贝叶斯分类分错的邮件,我觉得大中华同胞创(zao)新(jia)的能力简直令人惊(fa)呀(zhi))。

一个很悲哀但是很现实的结论:
训练集是有限的,而句子的可能性则是无限的。所以覆盖所有句子可能性的训练集是不存在的。

所以解决方法是?
对啦!句子的可能性无限,但是词语就那么些!!汉语常用字2500个,常用词语也就56000个(你终于明白小学语文老师的用心良苦了)。按人们的经验理解,两句话意思相近并不强求非得每个字、词语都一样。比如“我司可办理正规发票,17%增值税发票点数优惠!”,这句话就比之前那句话少了**“(保真)”**这个词,但是意思基本一样。如果把这些情况也考虑进来,那样本数量就会增加,这就方便我们计算了。

于是,我们可以不拿句子作为特征,而是拿句子里面的词语(组合)作为特征去考虑。比如**“正规发票”可以作为一个单独的词语,“增值税”**也可以作为一个单独的词语等等。

句子**“我司可办理正规发票,17%增值税发票点数优惠!”就可以变成(“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”))**。

于是你接触到了中文NLP中,最最最重要的技术之一:分词!!!也就是把一整句话拆分成更细粒度的词语来进行表示。咳咳,另外,分词之后去除标点符号、数字甚至无关成分(停用词)是特征预处理中的一项技术

中文分词是一个专门的技术领域(我不会告诉你某搜索引擎厂码砖工有专门做分词的!!!),我们将在下一篇文章探讨,这里先将其作为一个已知情况进行处理。具体细节请见下回分晓

我们观察(“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”),这可以理解成一个向量:向量的每一维度都表示着该特征词在文本中的特定位置存在。这种将特征拆分成更小的单元,依据这些更灵活、更细粒度的特征进行判断的思维方式,在自然语言处理与机器学习中都是非常常见又有效的。

因此贝叶斯公式就变成了:

P ( “ 垃 圾 邮 件 ” ∣ ( “ 我 ” , “ 司 ” , “ 可 ” , “ 办 理 ” , “ 正 规 发 票 ” , “ 保 真 ” , “ 增 值 税 ” , “ 发 票 ” , “ 点 数 ” , “ 优 惠 ” ) ) P(“垃圾邮件”|(“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”)) P(,,,,,,,,,)
= P ( ( “ 我 ” , “ 司 ” , “ 可 ” , “ 办 理 ” , “ 正 规 发 票 ” , “ 保 真 ” , “ 增 值 税 ” , “ 发 票 ” , “ 点 数 ” ,

  • 59
    点赞
  • 163
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值