新闻分类器的模型训练与单篇分类(cnn+word2vec)

本文介绍了如何在CNN模型中应用word2vec进行新闻分类,通过预处理数据、构建CNN模型,展示了使用word2vec提高模型准确率至85.9%,同时减少了训练时间和过拟合风险。文章指出使用预训练的word2vec模型导致部分词汇丢失,提出自我构造embedding层以改善这个问题。
摘要由CSDN通过智能技术生成

新闻分类器的模型训练与单篇分类(cnn+word2vec)

在cnn之上引入word2vec的好处:(1)间接引入外部训练数据,防止过拟合;(2)减少需要训练的参数个数,提高训练效率

数据预处理

将下载的原始数据进行转码,然后给文本标类别的标签,然后制作训练与测试数据,然后控制文本长度,分词,去标点符号

哎,坑多,费事,比较麻烦

首先,搜狗实验室提供的数据下载下来是 xml 格式,并且是 GBK (万恶之源)编码,需要转成 UTF8,并整理成 json 方便处理。原始数据长这个样:这里写图片描述

利用 python 先读入数据然后转码再保存
挑选出的11个类分别为:
  • 政治
  • 社会
  • 军事
  • 财经
  • 教育
  • 体育
  • 娱乐
  • 反腐
  • 科技
  • 健康

用序号1~11表示

对这些新闻的长度进行统计结果如下:这里写图片描述
由于发现短文本居多所以选择截取每段文字的前100字进行短文本的训练。去掉停用词并用jieba进行分词后的新闻如下图:这里写图片描述

1 CNN

深度学习用的 keras 工具,操作简单易懂,模型上手飞快,居家旅行必备。keras 后端用的 Tensorflow,虽然用什么都一样

不使用预训练 word2vec 模型的 CNN:

首先一些先设定一些会用到的参数

MAX_SEQUENCE_LENGTH = 100 # 每条新闻最大长度
EMBEDDING_DIM = 200 # 词向量空间维度
VALIDATION_SPLIT = 0.16 # 验证集比例
TEST_SPLIT = 0.2 # 测试集比例

第一步先把训练与测试数据放在一起提取特征,使用 keras 的 Tokenizer 来实现,将新闻文档处理成单词索引序列,单词与序号之间的对应关系靠单词的索引表 word_index 来记录,这里从所有新闻中提取到 65604 个单词,比如 [苟,国家,生死] 就变成了 [1024, 666, 233] ;然后将长度不足 100 的新闻用 0 填充(在前端填充),用 keras 的 pad_sequences 实现;最后将标签处理成 one-hot 向量,比如 6 变成了 [0,0,0,0,0,0,1,0,0,0,0,0,0],用 keras 的 to_categorical 实现

from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.utils 
  • 4
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值