# text_classification
## 文本分类-深度学习课程大作业
### 程序运行说明
##### 硬件
- GPU: Tesla V100, 32GB显存
- 内存:32GB
- 系统:Linux(训练),Windows(展示)
##### 软件
- CUDA版本: 9.2
- Pytorch:1.5
- 其他库:gensim,sklearn,tqdm,flask,numpy等
##### 运行方法
如果直接使用,步骤为:
1. 进入"Flask"文件夹,在cmd中执行以下命令:`python NLP_flask.py`,便可启动 flask 后台,然后在浏览器地址栏输入127.0.0.1:5000,即可看到分类系统界面。
如果需要训练,步骤为:
1. 如果想要训练非bert的模型,需要先训练词向量:进入"src"目录下,在terminal中执行以下命令:`python train_w2v.py`,修改该文件的代码可以设置word2vec的窗口大小、词向量维度等。
2. (./src目录)在terminal中输入`python run.py --model model_name --word True/False`,即可启动相应模型的训练。model_name是选择的模型,word为True(默认)则进行词级别的训练,否则进行字级别的训练。word参数只针对非bert模型,因为bert是分字的。可选的模型会在后面介绍。
**注意:**训练之前请先下载数据集和bert的相关文件,在相应的文件夹内有README说明文档,内附有百度云盘下载链接。
##### 代码文件说明
下面解释./src目录下的代码:
- run.py 训练主程序
- train_eval.py 具体的训练逻辑
- utils.py 工具类函数
- train_w2v.py 训练词向量
- global_config.py 全局参数设置,如batch_size等
- ./model 下是不同模型的实现
- ./temp 下存放了预训练的词向量
##### 运行截图
![image-20200519213806079](https://github.com/Lin-Dada/text_classification/blob/main/DL/image-20200519213806079.png)
![image-20200519214118619](https://github.com/Lin-Dada/text_classification/blob/main/DL/image-20200519214118619.png)
### 背景及任务定义
随着上世纪 90 年代互联网飞速发展,到现在我们已经进入了大数据时代。在当今的互联网中,容纳了大量的数据信息,其中包含了文本,声音,图片等。文本数据相较于图片和声音,占用网络资源少,使得在网络资源中,文本占据了相当大的一部分。为了能够将这些信息有效的组织和管理,使用户能够快速、准确、全面地获取需要的信息,就成了当今信息科学面临地一个大挑战。文本分类从知识工程到九十年代基于机器学习地分类系统,再到近
十年快速发展地基于深度学习地分类系统,现在地文本分类系统已经形成了一个较为完善的体系。
对于文本分类任务,可将其定义为一组输入到输出的映射。输入一般是包含一些原始文本的数据集,数据集由每个文档中的文本序列组成,如 $D = {X_1 ,X_2 ,…,X_n }$ ,其中 $X_i $为一个文本(每个文本包含 w 个单词),每个文本都用一个离散的数值来标注,代表该文本所在的类别。
我们做的是新闻分类任务,因此输入是一组新闻文本,输出则应该是该新闻对应的类别,如“军事”、“政治”等。我们的目的,就是训练一个模型,使其能完成自动分类的任务。
### 提出方法
我们把整个训练过程分为数据预处理和训练两个阶段。下面将一一介绍。
#### 数据预处理
本系统采用了清华NLP组提供的THUCNews新闻文本分类数据集的子集。THUCNews是根据新浪新闻RSS订阅频道2005~2011年间的历史数据筛选过滤生成,包含74万篇新闻文档(2.19 GB),均为UTF-8纯文本格式。并在的原始新浪新闻分类体系的基础上,重新整合划分出14个候选分类类别:财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐。
由于本地电脑计算资源有限我们在上述14个类中,每一类随机抽取了2万条数据,有三个类别数据量不足两万,我们全部使用。每个类别的使用数据量如图1,其中一条新闻样例如图2所示。
图1 每个类别新闻数:
![img](https://github.com/Lin-Dada/text_classification/blob/main/DL/clip_image002.jpg)
图2 新闻样例(时政类):
![img](https://github.com/Lin-Dada/text_classification/blob/main/DL/clip_image004.jpg)
1. 分词
由于汉语不像英语一样有空格作为分隔符,所以我们在训练之前需要把句子分成一个个的单词。目前常用的是算法是HMM、CRF、SVM、深度学习等算法,比如Stanford、Hanlp分词工具是基于CRF算法。以CRF为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果。
本系统中采用jieba分词对数据预处理。首先使用jieba分词将所有的文章中的单词分开,单词与单词之间用空格分隔,并在最后一个单词后面加上退格符:\t,上述内容构成数据集中的一行数据。我们的对所有的文章进行遍历,按照上述内容构建我们的数据集,并划分出测试集和验证集,它们的比例为:0.9: 0.1: 0.1。
2. 词嵌入
本文使用的是近几年在深度领域非常火的技术:Word2Vec。Word2Vec方法使用具有两个隐藏层的浅神经网络:连续词袋(CBOW)和跳跃图(Skip-gram)模型,将文本中的每个单词表示为一个相对较小的稠密向量。输出向量的大小通常用 k 表示,Word2vec 将语义相似的词聚集在这个 k 维空间中比较接近的区域。在CBOW 中,根据一个词的上下文来预测该词;Skip-gram 则只看一个词来预测它的上下文。Word2Vec 最大的特点之一是它可以实现字向量之间的算术运算,即向量反映了词的相似性。
本系统采用gensim来实现Word2Vec,并将训练好的词向量放进分类深度学习模型中进行fine-tune,以根据具体任务进一步调整。
对于bert模型,不需要预训练的词向量。
3. 填充/截断
我们需要将每一个文本数据转换成一个等长的数据,以便神经网络处理。但新闻文本一般长度不一,所以我们需要对长的文本进行截断,对长度不够的文本进行填充。我们设定的长度值为500,即每篇文章都被处理成500个词的表示。
对于bert模型,由于参数量过大,我们将长度值设为256。
#### 训练
在该系统中,我们使用了9个模型进行实验,它们分别是:bert、bert-LSTM、LSTM、LSTM-Attention、LSTM-GRU、FastText、TextCNN、TextRCNN、DPCNN,由于篇幅限制,下面仅对其进行简单的介绍。值得注意的是,我们在某些模型中加入了自己的想法,虽然只是少量的改动,但我们认为也是一种微创新。在FastText模型中,由于中文没有像英文这种字符级的n-gram,而1-gram就相当于中文字级别的建模了,所以我们同时使用了1-gram,2-gram和3-gram,将其拼在一起进行分类,效果比只用1-gram要提升不少。另外,我们也自己实现了一个模型:LSTM-GRU,它是将两种变种RNN堆叠起来实现的一个模型,实际效果显示也取得不错的精度。
##### bert & bert-LSTM
谷歌团队在2018年提出了预训练模型Bert用于词向量表示,在当时NLP的11项任务中基本取得了最好的效果。Bert模型的全名是Bidirectional Encoder Representations from Transformer,是由2017年的Transformer模型的Encoder部分在大规模语料库训练而来的。Transformer舍弃了传统的CNN和RNN操作,整个模型都是由attention机制组成的,这样的好处是更好地实现了并行化,在长文本序列下依然可以有效地获取文本的依赖关系,而且模型是双向地学习上下文的关系,使得词向量表示的语义信息更加丰�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于python的文本分类-深度学习课程大作业+源代码+文档说明 - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
资源推荐
资源详情
资源评论
收起资源包目录
基于python的文本分类-深度学习课程大作业+源代码+文档说明 (114个子文件)
bootstrap.css 138KB
bootstrap.min.css 117KB
font-awesome.css 28KB
font-awesome.min.css 24KB
bootstrap-theme.css 22KB
bootstrap-theme.min.css 19KB
style.css 5KB
form-elements.css 2KB
fontawesome-webfont.eot 59KB
glyphicons-halflings-regular.eot 20KB
.gitattributes 66B
index.html 6KB
alembic.ini 770B
1.jpg 1.1MB
1@2x.jpg 1.1MB
clip_image002-1589643065510.jpg 68KB
clip_image002-1589803579184.jpg 56KB
clip_image002-1589880424472.jpg 49KB
clip_image004.jpg 34KB
clip_image002.jpg 19KB
echarts.min.js 727KB
echarts.js 305KB
jquery-1.11.1.js 276KB
jquery-1.11.1.min.js 94KB
bootstrap.js 66KB
bootstrap.min.js 35KB
jquery.backstretch.js 12KB
jquery.backstretch.min.js 4KB
retina-1.1.0.js 4KB
retina-1.1.0.min.js 3KB
scripts.js 598B
npm.js 484B
placeholder.js 176B
icons.less 36KB
variables.less 16KB
mixins.less 983B
path.less 770B
animated.less 713B
rotated-flipped.less 622B
core.less 509B
stacked.less 476B
font-awesome.less 465B
list.less 377B
larger.less 370B
bordered-pulled.less 330B
fixed-width.less 119B
LICENSE 1KB
script.py.mako 494B
bootstrap.css.map 372KB
bootstrap-theme.css.map 42KB
README.md 24KB
README.md 167B
FontAwesome.otf 92KB
contact.php 1KB
image-20200519213806079.png 1.05MB
image-20200515131256922.png 796KB
image-20200504152443888.png 257KB
image-20200516233343023.png 91KB
image-20200519214118619.png 72KB
logo.png 37KB
image-20200515145525368.png 25KB
image-20200515214843187.png 9KB
logo@2x.png 2KB
apple-touch-icon-114-precomposed.png 2KB
apple-touch-icon-144-precomposed.png 2KB
apple-touch-icon-72-precomposed.png 1KB
logo1.png 1KB
apple-touch-icon-57-precomposed.png 1KB
clip_image004.png 452B
favicon.png 437B
clip_image008.png 392B
clip_image002.png 379B
clip_image006.png 369B
TextRNN.py 4KB
DPCNN.py 4KB
TextRNN_Att.py 4KB
TextCNN.py 4KB
LSTMGRU.py 4KB
FastText.py 3KB
NLP_flask.py 3KB
TextRCNN.py 3KB
bert_RNN.py 3KB
env.py 3KB
bert.py 2KB
global_config.py 2KB
10570f800d11_.py 800B
8b5b7a145ce7_.py 660B
env.cpython-36.pyc 2KB
10570f800d11_.cpython-36.pyc 887B
8b5b7a145ce7_.cpython-36.pyc 791B
NLP_flask.cpython-36.pyc 665B
config_flask.cpython-36.pyc 193B
README 38B
_icons.scss 37KB
_variables.scss 16KB
_mixins.scss 1000B
_path.scss 783B
_animated.scss 715B
_rotated-flipped.scss 672B
_core.scss 513B
共 114 条
- 1
- 2
资源评论
机智的程序员zero
- 粉丝: 1576
- 资源: 4136
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功