基于朴素贝叶斯模型的中文文本分类
这里只介绍主要实现过程,主要思想会在后面的博客中写出来,因为现在自己也是一知半解
数据集介绍
朴素贝叶斯模型是有监督分类模型,因此需要采用预处理好的训练数据集,我采用的是“复旦大学计算机信息与技术国际数据库中心自然语言处理小组”提供的小样本中文文本分类语料
https://download.csdn.net/download/qq_37077750/12692257
有能力的也可以自己写爬虫爬取文本数据。
中文分词
因为是中文文本分类,所以需要进行中文分词,本文采用python 的 jieba 分词。以下以简单的一段文本为例来说明 jieba 分词:
import jieba
content = "中文文本分类是文本处理中的一个基本问题。"
seg_list1 = jieba.cut(content,cut_all=False)
print("默认切分模式")
print(" ".join(seg_list1))
seg_list2 = jieba.cut(content,cut_all=True)
print("全切分模式")
print(" ".join(seg_list2))
seg_list3 = jieba.cut_for_search(content)
print("搜索引擎分词模式")
print(" ".join(seg_list3))
统计文本词频并计算TF-IDF
通过分词后的结果,对文本中的单词进行词频统计。
如果将文本看做一个对象,那么分词结果就是这个对象的特征,某个词的词频数量越大,说明这个特征越具有代表性(简单理解)。
但是你可能会问,像“的”,“是”,这样的常用词哪里具有代表性?
因此,我们需要降低这类普遍出现具有较低意义的词的特殊性,这类词的特性就是在大量的文本集合中都有出现,不论是这类文本具有什么样的主题。
TF-IDF值就是针对这一问题进行词频统计的。
TF是指某一给定词语该文档中的出现次数。
IDF是指含有某一指定词在文档集合中出现的次数的倒数再取对数,越多的文档包含该词,值越接近0。
TF-IDF值就是 TF*IDF。
示例:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
# 分类好的语料
corpus = ["中文 文本 分类 是 自然语言 处理 中 的 一个 基本 问题",
"我 爱 自然语言 处理",
"这 是 一个 问题 以前 我 从来 没有 遇到 过"]
# 词频统计
vectorizer = CountVectorizer()
# 计算TF-IDF
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(vectorizer