【NLP】朴素贝叶斯——新闻、邮件分类以及语种检测

前言

  从贝叶斯谈到N-gram语言模型,此文中我们对贝叶斯定理、朴素贝叶斯、N-gram语言模型的相关理论,本篇主要针对上篇的理论进行案例实现。

  • 使用工具:jupyter notobook
  • 代码地址:Github

一、手写朴素贝叶斯分类器

  此部分主要是根据理论部分的一些概率求解方式,用Python实现朴素贝叶斯分类函数,并通过手动创建的数据进行简单文本分类。

主要包括内容:

  • 词向量构建;
  • 相关概率计算;
  • 平滑处理;
  • 朴素贝叶斯分类函数;
  • 测试

代码可见: ./01_垃圾邮件分类/01_手写朴素贝叶斯分类器(简单应用).ipynb

jupyter notebook便于写笔记,所以具体内容可查看原源代码中的笔记

二、使用朴素贝叶斯分类器进行垃圾邮件分类

  此部分主要是使用上个文件中手写的朴素贝叶斯分类器进行垃圾邮件(具体数据)分类,详细内容可查看源代码。

数据说明:

  • 数据在当前目录下的email目录下
  • ham目录下:表示正常邮件
  • spam目录下:表示垃圾邮件
  • 邮件内容为英文

代码可见:./01_垃圾邮件分类/02_手写朴素贝叶斯分类器进行垃圾邮件分类.ipynb

三、使用sklearn中的库进行垃圾邮件分类

  此部分使用Python自带的库进行垃圾邮件分类

数据说明:

  • 解压data.rar
  • 数据在当前目录下的data目录下,一共包括215个文件夹,每个文件夹大概有300封邮件,所以一共有215*300 = 64500封邮件
  • 每封邮件的标签在当前目录下的full目录下的index文件,其格式如下:
		spam ../data/000/000
		ham ../data/000/001
		spam ../data/000/002
		spam ../data/000/003
		spam ../data/000/004
		spam ../data/000/005
  • 邮件内容为中文
  • spam:表示垃圾邮件
  • ham:表示正常邮件

使用不同模型效果如下表:

准确率召回率F1值耗时
BernoulliNB(伯努利朴素贝叶斯)0.815920.988570.89398
随机森林0.926490.990920.95762
KNN0.974800.943770.95903
SVM_rbf0.948580.948130.94836
决策树0.891360.847220.86873
GBDT0.940530.989980.96462

每次运行结果可能不一样,但是大体趋势差不多;

  • 通过上表,我们可以总结,朴素贝叶斯在垃圾邮件分类中的模型效果综合而言最好;虽然召回率不如随机森林、GBDT,但是后两者耗时比较长;
  • 对于垃圾邮件分类,我们一般关注召回率,因为如果有1000封邮件,其中有10封垃圾邮件,如果模型将1000封都分类为正常邮件,那么准确率为 990 / 1000 = 99%,显然,虽然准确率高,但是并不是我们想要的。

代码可见:./01_垃圾邮件分类/03_使用Python库进行垃圾邮件分类.ipynb

此部分属于完整的项目实战,可多花点时间研究研究,工作中大体也如此。

四、新闻主题分类

  此部分使用多项式朴素贝叶斯模型,进行新闻主题分类,主要设计:分词、文本处理(词频、去重、停用词)、特征提取、模型构建训练、模型评估

数据说明:

在这里插入图片描述

  • 所有数据都在以上文件夹下

在这里插入图片描述
每个txt文件就是一篇新闻

  • 文件夹对应标签信息如下:

      C000008	财经
      C000010	IT
      C000013	健康
      C000014	体育
      C000016	旅游
      C000020	教育
      C000022	招聘
      C000023	文化
      C000024	军事
    

代码可见: ./02_新闻主题分类/新闻主题分类.ipynb

详细内容可见源代码

五、简单语种分类

  此部分主要介绍使用多项式朴素贝叶斯进行简单的语种检测的分类器

数据说明:

  • 数据在当前目录下的data.csv中,包含English, French, German, Spanish, Italian 和 Dutch 6种语言,数据如下:
1 december wereld aids dag voorlichting in zuidafrika over bieten taboes en optimisme,nl

主要包括:

  • 数据准备
  • 数据分割
  • 数据去噪
  • 特征提取(CountVectorizer)
  • 模型构建,训练
  • 模型评估

代码可见:./03_简单语种检测/简单语种检测.ipynb

六、总结

  几个案例看下来,基本的框架的都一样,在实际项目中,大体也是如此。但是在实际项目中,我们的数据可能没有这么的干净,需要我们做大量的数据清洗、预处理。其实工作中,我们大部分的时间都会花在这一部分,也就是机器学习中的特征工程。特征确定好了,其他的交给模型就好了,我们可以通过交叉验证使用不同的模型,最后选择最优的模型。

相信,通过理论+实践的过程,大家对朴素贝叶斯已经有了很好的理解。博主也是边学习边整理,希望大家多多指教,可加我主页的QQ,主要是用于机器学习、深度学习、NLP交流。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值