使用sklearn+jieba完成一个文档分类器

简介: “ 最近在学习数据分析的知识,接触到了一些简单的NLP问题,比如做一个文档分类器,预测文档属于某类的准确率,应该怎么做呢”

01.文档分类原理


文本分类是自然语言处理领域比较常见的一类任务,一般是给定多个文档类别,将文档或语句归类到某个类别中。其本质是文本特征提取+机器学习的多分类问题。

好的,这就是基本概念了,再来看看几个重要的步骤。


1.文档标注

就是要把样本文档分类,我们首先是要知道我们要把文档分为哪几类,这样才能有依据的构建模型,进而预测其他文档类型。


2.格式转换

为了方便后面的数据处理,一般是要把非txt文本,如word,excel,pdf等转换为txt格式,保证文档中不包含图片,不包含任何文档格式。


3.中文分词

这里就使用jieba了,很流行的工具,同时还要给文档加上标签,其实就是分类的数值化,后面具体说。


4.计算词语权重

如果某个词或短语在一篇文章中出现的频率很高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。通过计算词语的权重,可以找出文档中的关键词,从而确定分类的依据。常用的词语权重计算方法为TF-IDF算法,公式如下

TF-IDF = 词频(TF) * 逆文档频率(IDF)

词频(TF) = 某个词在文档中的出现次数/文章的总词数

逆文档频率(IDF) = log(语料库的文档总数/(包含该词的文档数+1))

sklearn支持该算法,使用TfidfVectorizer类,就可以帮我们计算单词的TF-IDF。


5.构建朴素贝叶斯分类器

sklearn提供的多项式朴素贝叶斯,类MultinomialNB,以单词为粒度,会计算单词在某个文件中的具体次数,用于文档分类很适合。


6.预测准确性

最后就是使用训练的模型来预测未知的文档类型了,当然这之前还要经过准确率的测试。


02.Coding


话不多说,show me the code!

本次是使用的如下数据集,stop目录放置停用词,train目录是训练使用的数据,test目录数据用来做测试准确性的,两个数据集下都有数百个txt文件。


image.png


1.获取数据,并打上标签

我这里的思路是循环获取到对应目录下的txt文件内容后,保存到一个总的文件中,用于后面使用,并增加一列,保存标签


image.png

image.png


2.生成训练数据

使用jieba工具,做中文分词,并且加载停用词,最后返回训练feature和label


image.png

3.同理,处理测试数据

直接给出完整代码


image.png

4.构建模型

调用TfidfVectorizer类,使用TF-IDF算法拟合训练数据,再使用MultinomialNB类,生成训练模型,即朴素贝叶斯分类器


image.png

5.使用生成的分类器做预测

同样,使用训练集的分词创建一个TfidfVectorizer类,然后用TfidfVectorizer类对测试集的数据进行fit_transform拟合,即可以得到测试集的特征矩阵,然后再使用MultinomialNB类的predict函数,找出后验概率最大的label,最后使用accuracy_score函数对比实际结果和预测结果。


image.png

6.准确性验证

我做了初步的验证,不同标签,准确率差别还是挺大的


image.png

到这,一个简单的文档分类器就完成了,是不是也不是很难呢,代码还要很多有待完善的地方,有兴趣的同学一起加油喽!

相关文章
|
7月前
|
机器学习/深度学习 人工智能 算法
使用Python和Scikit-learn库来实现一个基本的K-最近邻(KNN)分类器
使用Python和Scikit-learn库来实现一个基本的K-最近邻(KNN)分类器
104 0
|
7月前
|
自然语言处理 算法
文本分析-使用jieba库实现TF-IDF算法提取关键词
文本分析-使用jieba库实现TF-IDF算法提取关键词
400 1
|
7月前
|
机器学习/深度学习 自然语言处理 算法
使用sklearn+jieba完成一个文档分类器
使用sklearn+jieba完成一个文档分类器
|
自然语言处理 算法 Python
|
机器学习/深度学习 自然语言处理 数据可视化
【Pytorch神经网络实战案例】30 jieba库分词+训练中文词向量
在NLP中,一般都会将该任务中涉及的词训练成词向量,然后让每个词以词向量的形式型的输入,进行一些指定任务的训练。对于一个完整的训练任务,词向量的练大多发生在预训练环节。
457 0
|
机器学习/深度学习 数据采集 算法
Scikit-learn学习系列 | 1. sklearn的简要使用介绍与数据集获取
Scikit-learn学习系列 | 1. sklearn的简要使用介绍与数据集获取
314 0
Scikit-learn学习系列 | 1. sklearn的简要使用介绍与数据集获取
|
机器学习/深度学习 人工智能 PyTorch
Python sklearn实现SVM鸢尾花分类
Python sklearn实现SVM鸢尾花分类
474 0
Python sklearn实现SVM鸢尾花分类
|
机器学习/深度学习 数据采集 资源调度
浅析sklearn中的数据预处理方法
在日常的机器学习开发过程中,基本的机器学习过程如下图所示。
|
存储 人工智能 Python
sklearn中的文本特征提取方法
什么是特征提取? 特征提取就是将一些原始的输入的数据维度减少或者将原始的特征进行重新组合以便于后续的使用。 比如: 我们知道有的时候原始数据的特征很多,而且有的高度相关,有的却又和最终的目的没有关系。我们需要去除没有关系的特征。(减少数据维度) 对于图像来说,每个图像有很多数据,这时候如果直接拿这些原始数据去计算则会非常缓慢,这对我们实时运行没有好处,我们需要提取出新的特征。(减少数据维度) 我们通过原始数据很多维特征,得到一个新的特征,最后通过这个新的特征来指导做决策。(整理已有的数据特征) 作者:吃果冻不吐果冻皮 链接:https://juejin.cn/post/69986867315