毕业设计之---新闻分类系统(代码片段)

author author     2022-12-12     488

关键词:

简介

新闻分类课题是在算法类毕业设计中比较热门的, 本质上是属于自然语言分类, 可以使用机器学习算法去处理, 也可以使用深度学习算法去处理.

基本步骤如下 :

文本数据采集 --> 选择训练算法(机器学习/深度学习) --> 进行训练 --> 检效果.

本文章博主将介绍:
  • 从头开始实践中文短文本分类
  • 运用多种机器学习(深度学习 + 传统机器学习)方法比较短文本分类处理过程与结果差别

参与及比较算法

使用下面的算法来进行文本分类, 并对最后分类准确率进行比较

  • CNN 、 CNN + word2vec
  • LSTM 、 LSTM + word2vec
  • MLP(多层感知机)
  • 朴素贝叶斯
  • KNN
  • SVM
  • SVM + word2vec 、SVM + doc2vec

先说结论

技术图片

  • 引入预训练的 word2vec 模型会给训练带来好处,具体来说:(1)间接引入外部训练数据,防止过拟合;(2)减少需要训练的参数个数,提高训练效率
  • LSTM 需要训练的参数个数远小于 CNN,但训练时间大于 CNN。CNN 在分类问题的表现上一直很好,无论是图像还是文本;而想让 LSTM 优势得到发挥,首先让训练数据量得到保证
  • 将单词在 word2vec 中的词向量加和求平均获得整个句子的语义向量的方法看似 naive 有时真挺奏效,当然仅限于短句子,长度 100 以内应该问题不大
  • 机器学习方法万千,具体选择用什么样的方法还是要取决于数据集的规模以及问题本身的复杂度,对于复杂程度一般的问题,看似简单的方法有可能是坠吼地

实现过程

数据爬取

爬虫这里不公开提供, 爬取的是各大新闻网站数据, 需要的联系博主获取, 联系方式在文章最下方~

数据预处理

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

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

首先,下载下来是 xml 格式,并且是 GBK (万恶之源)编码,需要转成 UTF8,并整理成 json 方便处理。原始数据长这个样:

技术图片

对成功标出来的15个类的新闻,统计一下类别的分布,结果如下:
技术图片

分布比较不均,第 14 类和第 15 类的新闻很少,另外第 8 类和第 11 类一个新闻也没有

所以最后选了剩下的11个类,每个类抽2000个新闻,按4:1分成训练与测试,如图

技术图片
上一步选出来的训练新闻长这样,因为考虑到新闻标题的意义重大,这里就将新闻标题和新闻内容接到一起,用空格隔开,然后截取每条新闻的前 100 个字

技术图片
最后得到以下结果文件:(1)新闻文本数据,每行 1 条新闻,每条新闻由若干个词组成,词之间以空格隔开,训练文本 17600 行,测试文本 4324 行;(2)新闻标签数据,每行 1 个数字,对应这条新闻所属的类别编号,训练标签 17600行,测试标签 4324 行

CNN文本分类

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

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

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 import to_categorical
import numpy as np

tokenizer = Tokenizer()
tokenizer.fit_on_texts(all_texts)
sequences = tokenizer.texts_to_sequences(all_texts)
word_index = tokenizer.word_index
print(‘Found %s unique tokens.‘ % len(word_index))
data = pad_sequences(sequences, maxlen=MAX_SEQUENCE_LENGTH)
labels = to_categorical(np.asarray(all_labels))
print(‘Shape of data tensor:‘, data.shape)
print(‘Shape of label tensor:‘, labels.shape)

再将处理后的新闻数据按 6.4:1.6:2 分为训练集,验证集,测试集

p1 = int(len(data)*(1-VALIDATION_SPLIT-TEST_SPLIT))
p2 = int(len(data)*(1-TEST_SPLIT))
x_train = data[:p1]
y_train = labels[:p1]
x_val = data[p1:p2]
y_val = labels[p1:p2]
x_test = data[p2:]
y_test = labels[p2:]
print ‘train docs: ‘+str(len(x_train))
print ‘val docs: ‘+str(len(x_val))
print ‘test docs: ‘+str(len(x_test))

然后就是搭建模型,首先是一个将文本处理成向量的 embedding 层,这样每个新闻文档被处理成一个 100 x 200 的二维向量,100 是每条新闻的固定长度,每一行的长度为 200 的行向量代表这个单词在空间中的词向量。下面通过 1 层卷积层与池化层来缩小向量长度,再加一层 Flatten 层将 2 维向量压缩到 1 维,最后通过两层 Dense(全连接层)将向量长度收缩到 12 上,对应新闻分类的 12 个类(其实只有 11 个类,标签 0 没有用到)。

from keras.layers import Dense, Input, Flatten, Dropout
from keras.layers import Conv1D, MaxPooling1D, Embedding
from keras.models import Sequential

model = Sequential()
model.add(Embedding(len(word_index) + 1, EMBEDDING_DIM, input_length=MAX_SEQUENCE_LENGTH))
model.add(Dropout(0.2))
model.add(Conv1D(250, 3, padding=‘valid‘, activation=‘relu‘, strides=1))
model.add(MaxPooling1D(3))
model.add(Flatten())
model.add(Dense(EMBEDDING_DIM, activation=‘relu‘))
model.add(Dense(labels.shape[1], activation=‘softmax‘))
model.summary()

网络模型如下
技术图片

实验结果如下

技术图片
准确度 0.81459521

拥有11个分类的问题达到这个准确度,应该也不错(易满足)。并且搜狗给的数据本来也不是很好(甩锅)。可以看到在训练集上的准确度达到了 0.88,但是测试集上的准确度只有 0.81,说明还是有些过拟合。另外,整个模型需要训练的参数接近 1500 万,其中 1300 万都是 embedding 层的参数,说明如果利用 word2vec 模型替换 embedding 层,解放这 1300 万参数,肯定会让训练效率得到提高

其他分类方法更新中.......

学长广告

在这里为自己打个广告
学长亲自接计算机毕业设计:
有意者q746876041
技术图片

简单的一个月之设计实现内容2(代码片段)

需求:简单的新闻管理系统,要求实现简单的增删改查功能4.jsp页面有:新闻添加(NewsaAdd.jsp),新闻查询(NewsQuery.jsp),新闻查询结果(NewsQueryResult.jsp),新闻修改(NewsUpdate.jsp),新闻详细信息(NewsDetail.jsp)(前两个页面有菜单,跟后面三个页面在str... 查看详情

paddlenlp之uie分类模型以情感倾向分析新闻分类为例含智能标注方案)(代码片段)

...的项目就可以复现Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)0前言首先回顾上一个项目:Paddlenlp之UIE模型实战实体抽取任务【打车数据、快递单】会存在以下问题:自己样 查看详情

毕业设计之---基于协同过滤的商品推荐系统(代码片段)

...法的原理,以及如何使用协同过滤算法设计一个商品推荐毕业设计系统.常见推荐算法协同过滤协同过滤(CollaborativeFiltering)作为推荐算法中最经典的类型,包括在线的协同和离线的过滤两部 查看详情

datawhale之nlp学习-打卡(代码片段)

Task1赛题理解1.赛题理解赛题名称:零基础入门NLP之新闻文本分类赛题目标:入门自然语言处理,接触NLP的预处理、模型构建和模型训练等知识点赛题任务:对新闻文本进行分类2.学习目标理解赛题背景与赛题数据3.赛题数据报名... 查看详情

nlp-新闻主题分类任务(代码片段)

...就参考实现了一遍,在这记录一下。目录1.用到的包2.新闻主题分类数据3.处理数据集4.构建模型 5.训练5.1.generate_batch5.2.训练&验证函数 5.3.主流程windows系统,jupyt 查看详情

机器学习实战教程:朴素贝叶斯实战篇之新浪新闻分类(代码片段)

...将看到以下内容:拉普拉斯平滑垃圾邮件过滤(Python3)新浪新闻分类(sklearn)二、朴素贝叶斯改进之拉普拉斯平滑上篇文章提到过,算法存在一定的问题,需要进行改进。那么需要改进的地方在哪里呢?利用贝叶斯分类器对文档进行... 查看详情

简单的一个月之设计实现内容3(代码片段)

需求:简单的新闻管理系统,要求能实现简单的增删改查功能5.action(通过struts与页面交互)packagecom.pay.boss.action;importcom.pay.boss.entity.News;importcom.pay.boss.service.NewsService;/***Title:NewsAction*action里面的方法根据页面来写*/@SuppressWarn 查看详情

一.设计模式之工厂设计模式(代码片段)

...(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设... 查看详情

phpacf循环通过新闻分类(代码片段)

查看详情

机器学习之新闻文本分类。(代码片段)

新闻文本分类首先需要通过大量的训练之后获得一个存放关键字的表,之后再输入一个新闻内容,通过代码就可以自动判断出这个新闻的类别,我这里是在已经有了新闻文本的关键词表后的处理,#encoding=utf-8#遍历文件,用Prosesso... 查看详情

nlp新闻主题分类任务(代码片段)

【NLP】新闻主题分类任务前言1.构建带有Embedding层的文本分类模型2.对数据进行batch处理3.构建训练与验证函数4.进行模型训练和验证5.查看embedding层嵌入的词向量总结前言学习目标了解有关新闻主题分类和有关数据.掌握使用浅层... 查看详情

新闻管理系统app的实现与设计(基于androidstudio实现)(代码片段)

...0c;普通用户可进行注册账号、账号登录、修改密码、浏览新闻、使用个人空间签到兑换图书等。其次是系统管理员,可以对普通用户账号密码进行操作,如添加用户账号、修改用户密码、查找用户密码、删除用户账号ÿ... 查看详情

课后作业——新闻文本分类(代码片段)

引言:  本次任务是做一个新闻文本分类的算法,算法选择朴素贝叶斯实现。可以实现对新闻内容的一个具体分类。  环境:jupternookbook,py3.81.导入数据df_new=pd.read_excel(\'./data/123.xlsx\').astype(str)df_news=pd.DataFrame(df_new)df_news.head()... 查看详情

新闻信息发布系统的设计与实现——论文随笔

一、基本信息标题:新闻信息发布系统的设计与实现时间:2015-07出版源:ComputerKnowledgeandTechnology领域分类:设计理论二、研究背景问题定义:新闻管理散漫,新闻工作者的工作量大相关工作:新闻信息发布系统将新闻信息进行... 查看详情

pytorchrnn实现新闻数据分类(代码片段)

PytorchRNN实现新闻数据分类概述数据集TextRNN模型评估函数主函数输出结果概述RNN(RecurrentNeturalNetwork)是用于处理序列数据的神经网络.所谓序列数据,即前面的输入和后面的输入有一定的联系.数据集我们将使用THUCNews的一个子数据集,... 查看详情

python课程设计之学生信息管理系统(代码片段)

Python课程设计之学生信息管理系统需求分析系统设计主函数设计录入学生信息删除学生信息修改学生信息查找学生信息统计学生总人数显示所有学生信息排序模块项目所有源码下载地址需求分析系统设计主函数设计核心代码defmai... 查看详情

设计模式之桥接模式(代码片段)

...件2、奖金计算模块      •奖金分类:个人奖金、团体奖金、激励奖金   •部门分类:人事部门、销售部门、研发部门注意事项:1、针对不同维度的变化,桥接模式比较合适三、UML类图四、... 查看详情

数据挖掘算法之深入朴素贝叶斯分类(代码片段)

写在前面的话: 我现在大四,毕业设计是做一个基于大数据的用户画像研究分析。所以开始学习数据挖掘的相关技术。这是我学习的一个新技术领域,学习难度比我以往学过的所有技术都难。虽然现在在一家公司实... 查看详情