text_classification
文本分类-深度学习课程大作业
程序运行说明
硬件
GPU: Tesla V100, 32GB显存
内存:32GB
系统:Linux(训练),Windows(展示)
软件
CUDA版本: 9.2
Pytorch:1.5
其他库:gensim,sklearn,tqdm,flask,numpy等
运行方法
如果直接使用,步骤为:
进入"Flask"文件夹,在cmd中执行以下命令:python NLP_flask.py,便可启动 flask 后台,然后在浏览器地址栏输入127.0.0.1:5000,即可看到分类系统界面。
如果需要训练,步骤为:
如果想要训练非bert的模型,需要先训练词向量:进入"src"目录下,在terminal中执行以下命令:python train_w2v.py,修改该文件的代码可以设置word2vec的窗口大小、词向量维度等。
(./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 下存放了预训练的词向量
运行截图
背景及任务定义
随着上世纪 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 每个类别新闻数:
图2 新闻样例(时政类):
分词
由于汉语不像英语一样有空格作为分隔符,所以我们在训练之前需要把句子分成一个个的单词。目前常用的是算法是HMM、CRF、SVM、深度学习等算法,比如Stanford、Hanlp分词工具是基于CRF算法。以CRF为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果。
本系统中采用jieba分词对数据预处理。首先使用jieba分词将所有的文章中的单词分开&#