# 人工智能原理实验:中文文本分类器
数据集来源:[http://thuctc.thunlp.org/](http://thuctc.thunlp.org/)
## 【实验目的】
1.掌握数据预处理的方法,对训练集数据进行预处理;
2.掌握文本建模的方法,对语料库的文档进行建模;
3.掌握分类算法的原理,基于有监督的机器学习方法,训练文本分类器;
4.利用学习的文本分类器,对未知文本进行分类判别;
5. 掌握评价分类器性能的评估方法。
## 【实验类型】
数据挖掘算法的设计与编程实现。
## 【实验要求】
1.文本类别数:>=10 类;
2.训练集文档数:>=50000 篇;每类平均 5000 篇。
3.测试集文档数:>=50000 篇;每类平均 5000 篇。
4. 分组完成实验,组员数量 <=3,个人实现可以获得实验加分。
## 【实验内容】
利用分类算法实现对文本的数据挖掘,主要包括:
1.语料库的构建,主要包括利用爬虫收集 Web 文档等;
2.语料库的数据预处理,包括文档建模,如去噪,分词,建立数据字典,使用词袋模型或主题模型表达文档等;
注:使用主题模型,如 LDA 可以获得实验加分;
3.选择分类算法(朴素贝叶斯(必做)、SVM/其他等),训练文本分类器,理解所选的分类算法的建模原理、实现过程和相关参数的含义;
4.对测试集的文本进行分类
5.对测试集的分类结果利用正确率和召回率进行分析评价:计算每类正确率、召回率,计算总体正确率和召回率。
## 【实验分析与总结】
### 1.数据获取
从清华新闻语料库中获取 10 类每类一万文本数据,共总计 10 万数据。其中,一万数据对半分为训练集和测试集,将其拷贝至项目资源文件中。这么做的原因是能够利用贝叶斯的极大似然估计。
![](https://www.writebug.com/myres/static/uploads/2021/12/3/3d22f33bfbae4f307604b02845a877ca.writebug)
图 1 数据获取
### 2.数据预处理
![](https://www.writebug.com/myres/static/uploads/2021/12/3/c6cc4aa7e636136c4e6362a38700f10b.writebug)
图 2 数据示例
利用 jeiba 库,将数据文本分为仅有名词的干净文本。其中,除了利用 jieba 库去除了专有名词、人名等无用名词外,还根据老师所给的停用词表删除了停用词。不仅仅如此,停用词操作也同时考虑到了名词和符号拼接的特殊情况。
![](https://www.writebug.com/myres/static/uploads/2021/12/3/3d22f33bfbae4f307604b02845a877ca.writebug)
图 3 判断停用词
![](https://www.writebug.com/myres/static/uploads/2021/12/3/99daa5b9491b50ab60a8ffcd2a7646cd.writebug)
图 4 分词并生成干净文本
![](https://www.writebug.com/myres/static/uploads/2021/12/3/9708abb8b462f69ddc32a8e48d92798a.writebug)图 5 干净文本示例
随后,将处理后的文件在每个类下整合为一个 all.txt 文件,以避免重复 IO
![](https://www.writebug.com/myres/static/uploads/2021/12/3/208f58164ea487182e49e3bdf8e227d6.writebug)
图 6 数据整合
### 3.建立词典
词典的生成即特征提取部分,按如下方案执行:对于每一个类的训练集,先利用 jieba 内置的 TF/IDF 方法加权,得到前 1000 个关键词(得到 1000*2 的一个矩阵),对于每个词,其权值再与卡方检验值相乘得到综合权值,每个类排序后的前 500 个词为该类的关键特征词。
首先需要将训练集中整合的干净文档转为 Python 的 Counter 数据结构方便后续处理:
![](https://www.writebug.com/myres/static/uploads/2021/12/3/36e183275ab281307209493f19b7d0fe.writebug)
图 7 文件数据初始化
利用 TF/IDF 与卡方值处理文本代码如下,利用 Counter 数据结构取得每类训练集中综合权值最大的前 500 个词
![](https://www.writebug.com/myres/static/uploads/2021/12/3/618754cf8e455ec0702245135993620d.writebug)
图 8 每类的字典生成
对于卡方检验,有如下定义:
假设欲得到词 W 和类 C 的关系,设置如下参数
Parm_A:包含 W 且属于 C 的文档数 Parm_B:包含 W 但不属于 C 的文档数 Parm_C:不包含 W 却属于 C 的文档数
Parm_D:既不包含 W 也不属于 C 的文档数则有:
表格 1 卡方检验表
| 特征选择 | 属于 C | 不属于 C | 总计 |
| -------- | ------ | -------- | ---- |
| 包含 W | A | B | A+B |
| 不包含 W | C | D | C+D |
| 总数 | A+C | B+D | N |
因此卡方值为
![](https://www.writebug.com/myres/static/uploads/2021/12/3/21321ef7fc62ee041f213f3635f2455b.writebug)
求卡方值函数代码编写如下:
![](https://www.writebug.com/myres/static/uploads/2021/12/3/ac287a7ba6a643a58082c6dd2b185962.writebug)
图 9 求卡方值
生成总体关键词表,则需要将各个类的字典中的 500 个词进行整合去重,利用 Counter 数据结构即可方便的实现这个功能,随后将总体特征关键词表保存于本地
![](https://www.writebug.com/myres/static/uploads/2021/12/3/76ecdc95c1e157e11a66cd1e0102f8af.writebug)
图 10 生成所有文档的关键词表
得到关键词维度为 3685
### 4.生成词向量
通过所有文档的关键词表,首先生成 50000*3685 的词向量矩阵,由于数据稀疏性很大,因此采用 scipy 库的稀疏矩阵进行存储,生成的词向量稀疏矩阵用二进制保存在本地
![](https://www.writebug.com/myres/static/uploads/2021/12/3/27252fe2fca9797fcf1cb06943c9acdc.writebug)
图 11 生成词向量
![](https://www.writebug.com/myres/static/uploads/2021/12/3/20830d03c00c5241f7e940212273666e.writebug)
图 12 生成并保存稀疏矩阵
## 5.贝叶斯分类器
贝叶斯分类器的主要公式如下所示:
![](https://www.writebug.com/myres/static/uploads/2021/12/3/7ead3e7a2b2a98ca3f7934597e1ba041.writebug)
其中 a 代表类别,b 代表特征关键词
而在本实验中,测试集、训练集的每个类的数据量都是相同的(5000 个),即(a )的值将不影响训练结果,因此可以利用贝叶斯公式的极大似然估计,公式可以简化为:
![](https://www.writebug.com/myres/static/uploads/2021/12/3/b84e18754d24e087bb03a3850af7bb8e.writebug)
贝叶斯分类器的训练过程关键在于构造每一类(10 类)的词频矩阵以便于 m-估计,由于在字典生成的过程中,干净文档转为 Counter 数据结构后实际上就生成了词频向量,因此通过读取先前存储的二进制文件即可较为容易的生成词频矩阵,随后,为了解决 0 概率问题,使用 m-估计来估计每个词相对于 10 个类各自的条件概率,公式如下(TF 为词频):![](https://www.writebug.com/myres/static/uploads/2021/12/3/a5c6f2801cc75f0b0ac8ce6cd54ef00c.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/12/3/a20272ec8126fa81c49c5b4a1c118151.writebug)
图 13 训练贝叶斯分类器
训练数据集,则直接读取条件概率矩阵中的值,利用公式 2 对其概率相乘得到后验概率。排序 10 个类的后验概率,最高者即预测类。测试集采用词向量的稀疏矩阵进行读取,以加快测试速度。
![](https://www.writebug.com/myres/static/uploads/2021/12/3/4580155362913f989c532ef272cb191c.writebug)
图 14 利用贝叶斯分类器进行测试
![](https://www.writebug.com/myres/static/uploads/2021/12/3/9cf3302d122b9c38c253a53d7e820ed0.writebug)
图 15 贝叶斯分类器主要运行过程
训练与测试的主要过程则如下所示,结果将生成混淆矩阵:
得到的混淆矩阵如下所示:
![](https://www.writebug.com/myres/static/uploads/2021/12/3/3f3c56c884df76f3bcd3c5cee9d79e6e.writebug)表格 2 贝叶斯混淆矩阵
评价数据如下:
![](https://www.writebug.com/myres/static/uploads/2021/12/3/8107dce65185e3c1c18a609305b0e257.writebug)
图 16 贝叶斯分类器评价数据
### 6.SVM
调用 sklearn 的 SVM 分类模型,由于其接口支持 scipy
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.文本类别数:>=10 类; 2.训练集文档数:>=50000 篇;每类平均 5000 篇。 3.测试集文档数:>=50000 篇;每类平均 5000 篇。 分组完成实验,组员数量 <=3,个人实现可以获得实验加分。 【实验内容】 利用分类算法实现对文本的数据挖掘,主要包括: 1.语料库的构建,主要包括利用爬虫收集 Web 文档等; 2.语料库的数据预处理,包括文档建模,如去噪,分词,建立数据字典,使用词袋模型或主题模型表达文档等; 注:使用主题模型,如 LDA 可以获得实验加分; 3.选择分类算法(朴素贝叶斯(必做)、SVM/其他等),训练文本分类器,理解所选的分类算法的建模原理、实现过程和相关参数的含义; 4.对测试集的文本进行分类 5.对测试集的分类结果利用正确率和召回率进行分析评价:计算每类正确率、召回率,计算总体正确率和召回率。
资源推荐
资源详情
资源评论
收起资源包目录
text-master.zip (32个子文件)
text
TermVector.py 2KB
CreatAllFile.py 1KB
LR.py 2KB
Evaluation.py 1022B
coo_test.npz 3.18MB
LICENSE 1KB
Confusion_Matrix.csv 681B
Preprocessing.py 3KB
coo_train.npz 3.21MB
coo_train_dic.npz 3.76MB
Bayes.csv 831KB
Confusion_Matrix_SVM.csv 462B
.idea
other.xml 233B
vcs.xml 180B
misc.xml 201B
inspectionProfiles
Project_Default.xml 993B
profiles_settings.xml 174B
modules.xml 268B
AI-Final.iml 731B
.gitignore 224B
人工智能实验报告.pdf 999KB
coo_test_dic.npz 3.18MB
stop_words_ch.txt 4KB
CreatDict.py 4KB
Bayes.py 4KB
SVM.py 2KB
GetData.py 2KB
.gitignore 2KB
TF_Matrix.csv 194KB
Confusion_Matrix_LR.csv 471B
README.md 12KB
stop_sign.txt 249B
共 32 条
- 1
资源评论
- 内酷少女2023-07-29了提供代码和数据,这个文件还附有一些实战经验分享,非常有助于我深入理解机器学习中文文本分类的应用场景。
- 史努比狗狗2023-07-29个文件的编写人员将步骤详细地列出,让我能够一步步地完成文本分类任务,很实用。
- 胡说先森2023-07-29个文件的代码简洁易懂,让我轻松理解了机器学习中文文本分类的基本原理。
- 八位数花园2023-07-29份文件提供了丰富的实战代码和数据,帮助初学者快速入门机器学习中文文本分类。
- 茶啊冲的小男孩2023-07-29件中给出的数据集真实可靠,我在实践中得到了很好的实验效果。
计算机毕设论文
- 粉丝: 9990
- 资源: 398
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功