基于CNN+GRU的文本分类实践
获取中... 获取中...
前情提要
最近打比赛用到了这个,记录一下,方便以后复用。下面是比赛的要求
赛题简介:介绍整个赛题的实现目标、实用价值、涉及技术和整体要求 | 新闻发展越来越快,每天各种各样的新闻令人目不暇接,对新闻进行科学的分类既能够方便不同的阅读群体根据需求快速选取自身感兴趣的新闻,也能够有效满足对海量的新闻素材提供科学的检索需求。 |
---|---|
赛题业务场景:描述赛题相关的真实企业业务背景。从真实场景中,适当简化或者提炼出适合比赛的赛题场景 | 赛题以新闻数据为赛题数据,整合划分出如下候选分类类别:财经、房产、教育、科技、军事、汽车、体育、游戏、娱乐和其他共十类的新闻文本数据。选手根据新闻标题和内容,进行分类。输入为新闻的标题和正文内容,输出为新闻的分类。 |
说了这么多,实际上就是要解决一个文本十分类的问题,下面是题目中给出的数据集。如图所示,数据集被分成了很多sheet,每一张sheet对应了一类新闻,其中有三列,分别是新闻内容、新闻分类、新闻标题
但是这样的数据集我们还用不了,于是我进行了如下处理。将所有数据合并到同一张表下,再导出为以制表符分隔的txt文件
经过观察发现,数据存在许多空缺,如有的新闻只有标题没有内容,这些问题我将在后面的代码中解决。
首先还是import相关模块
1 | from sklearn.model_selection import train_test_split |
悲伤的是由于最近博主显卡出了,现在只能先拿cpu计算。
1 | # 用cpu进行运算 |
使用pandas读入数据,注释中有详解
1 | # 若不存在处理后已保存的数据,则调用else后面的语句 |
刚刚是对训练数据的读入和缺失内容处理,现在来把数据从中文字符转化为计算机可读的数字
1 | # 先直接使用train_test_split操作以10:1的比例分割数据集 |
下面是先对标签进行处理
1 | y_labels = list(y_train.value_counts().index) |
再对训练的数据进行处理
1 | # 将每个样本中的每个词转换为数字列表,使用每个词的编号进行编号 |
后面就是老套路啦,建立,模型。这次使用的是CNN+GRU串联的结构,其内部网络结构在这里不过多介绍。由于在训练时过拟合的情况出现的较为严重,于是Dropout的比例稍高
1 | model = Sequential() |
未完待续
但是目前该模型任存在一些问题(如十分要命的过拟合,以及数据集分布不均匀等问题),博主正在研究调试中。。
本文由 rufus 创作,采用 知识共享署名 4.0 国际许可协议。
本站文章除注明转载/出处外,均为本站原创或翻译,转载请务必署名。