朴素贝叶斯文本分类案例

我们通过一个案例,来了解朴素贝叶斯如何实现垃圾邮件分类。步骤为:

  1. 文本转换为数值
  2. 朴素贝叶斯训练
  3. 朴素贝叶斯推理

我们使用到的训练数据如下:

样本标签
您中奖了!点击链接领取您的百万大奖。垃圾
免费试用我们的产品,不满意全额退款。垃圾
您的银行账户需要紧急验证,请点击以下链接。垃圾
会议通知:下周的会议安排。正常
我在超市买了一些食物。正常
明天我们将一起庆祝生日。正常

待预测类别的数据如下:

样本标签
您的百万大奖正在等待您的领取。

1. 文本转换为数值

对所有的文本进行分词,去除停用词,得到每一邮件分词之后的结果:

样本标签
[‘中奖’, ‘点击’, ‘链接’, ‘领取’, ‘百万’, ‘大奖’]垃圾
[‘免费’, ‘试用’, ‘产品’, ‘满意’, ‘全额’, ‘退款’]垃圾
[‘银行’, ‘账户’, ‘需要’, ‘紧急’, ‘验证’, ‘请’, ‘点击’, ‘以下’, ‘链接’]垃圾
[‘会议’, ‘通知’, ‘下周’, ‘会议’, ‘安排’]正常
[‘超市’, ‘买’, ‘食物’]正常
[‘明天’, ‘一起’, ‘庆祝’, ‘生日’]正常

什么是停用词?


停用词(Stop Words)是自然语言处理(NLP)中的一个概念,指的是在文本中经常出现的,但通常被忽略或删除的常见词语。这些词语通常对文本分析和处理任务没有特定的信息或含义,因此在文本处理过程中通常被过滤掉,提高处理效率。

常见的停用词通常包括:连接词、冠词、代词、介词和其他高频词汇,例如 “的”、”是”、”在”、”我”、”你”、”他们”等。这些词在句子中频繁出现,但往往不提供有关文本主题或内容的有用信息。

我们把这些词去重,组合成一个词表(共30个词):

['中奖', '点击', '链接', '领取', '百万', '大奖', '免费', '试用', '产品', '满意', '全额', '退款', '银行', '账户', '需要', '紧急', '验证', '请', '以下', '会议', '通知', '下周', '安排', '超市', '买', '食物', '明天', '一起', '庆祝', '生日']

接下来,我们统计每个邮件中包含词表中的词的个数多少,从而将文本内容转换为数值表示:

[
[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]
]
  1. 转换之后的向量中的每一个分量和词表中的词是一一对应的;
  2. 如果某个位置为 1、2 或者其他值则表示词表中对应位置的词在当前文档中出现的次数;

至此,我们就将所有的训练文档转换为数值表示。这里需要大家理解的是,将文档转换为数值向量并不是仅仅有上面这一种方法。

2. 朴素贝叶斯训练

训练过程就是统计先验概率和每个特征词条件概率的过程,例如:P(领取|垃圾) 表示所有垃圾邮件中领取出现的次数占所有的词的比重:

先验概率特征词条件概率
P(垃圾) = 1/2P(领取|垃圾)=0.039215686
P(正常) = 1/2P(百万|垃圾)=0.039215686
P(大奖|垃圾)=0.039215686
P(领取|正常)=0.0238095
P(百万|正常)=0.0238095
P(大奖|正常)=0.0238095

至此,我们就训练结束了。

3. 朴素贝叶斯推理

将待预测类别的文本数据转换为数值表示:

样本标签
您的百万大奖正在等待您的领取。

分词之后的结果:

样本标签
[‘百万’, ‘大奖’, ‘正在’, ‘等待’, ‘领取’]

转换为数值表示:

[0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

P(领取|垃圾) * P(百万|垃圾) * P(大奖|垃圾) * P(垃圾) = 0.039215686**3 = 6.0308628144529635e-05
P(领取|正常) * P(百万|正常) * P(大奖|正常) * P(正常) = 0.023809500**3 = 1.3497421984707377e-05

很显然属于垃圾邮件的分数较高,最终:

样本标签
您的百万大奖正在等待您的领取。垃圾

至此,我们已经通过朴素贝叶斯得到了垃圾邮件分类的结果。

未经允许不得转载:一亩三分地 » 朴素贝叶斯文本分类案例
评论 (0)

1 + 6 =