其他分享
首页 > 其他分享> > NewsSort-新闻智分系统

NewsSort-新闻智分系统

作者:互联网

NewsSort-新闻智分系统

演示视频传送门: NewsSort-新闻智分系统

一.项目简介与说明

1.1 项目简介:

在往期项目2021中国软件杯——新闻智分系统中我们基于PaddleHub通过在爬取和整合的新闻10分类数据集上进行微调训练完成新闻长文本10分类模型的训练,并基于PyQt5完成了该项目的可视化界面演示。而本期项目将为大家带来该项目的web端部署,其可实现精细的新闻文本10分类任务:财经、房产、教育、科技、军事、汽车、体育、游戏、娱乐和其他。

技术栈:前端:Vue+Element UI;后端:FastAPI+PaddleHub。

对新闻文本数据进行有效的筛选和分类,可以让用户更高效的获得有价值的新闻信息,节约用户信息获取的成本;另一方面互联网公司使用文本分类技术,可以对新闻文本进行类别的划分,把不同类别放在不同类别库,根据用户需要进行精确的自动化推荐,极大节省人力物力。

1.2 技术路线:

a.首先基于PaddleHub通过预训练模型Erine-tiny在爬取和整合的新闻10分类数据集上进行微调训练,从而完成新闻长文本10分类模型的搭建。

b.接着基于FastAPI完成模型的部署与后端API接口的搭建,并通过Postman对接口逻辑和功能进行测试。

c.最后基于Vue+ElementUI完成新闻智分系统web前端界面搭建,通过Axios发送网络请求对接后端API服务从而完成前后端联调。

1.3 源码运行说明:

完整项目源码为便于管理与下载,已通过数据集的方式挂载。源码地址:https://aistudio.baidu.com/aistudio/datasetdetail/117783

感兴趣的可以将其下载到本地解压后根据提供的"项目说明文档.txt"进行配置操作。项目运行过程中遇到问题欢迎在评论区向我反馈。

希望本项目能够对大家有所帮助,感兴趣的希望可以Fork、喜欢、关注三连❤

# 完整项目通过数据集的方式挂载,下面进行解压与查看
%cd /home/aistudio/data/data117783/
!unzip NewsSort.zip
/home/aistudio/data/data117783
Archive:  NewsSort.zip
   creating: NewsSort/NewsSort-API/
   creating: NewsSort/NewsSort-API/__pycache__/
  inflating: NewsSort/NewsSort-API/__pycache__/main.cpython-37.pyc  
   creating: NewsSort/NewsSort-API/best_model/
  inflating: NewsSort/NewsSort-API/best_model/model.pdparams  
  inflating: NewsSort/NewsSort-API/main.py  
   creating: NewsSort/NewsSort-Web/
  inflating: NewsSort/NewsSort-Web/index.html  
  inflating: NewsSort/NewsSort-Web/package.json  
  inflating: NewsSort/NewsSort-Web/package-lock.json  
   creating: NewsSort/NewsSort-Web/public/
  inflating: NewsSort/NewsSort-Web/public/favicon.ico  
   creating: NewsSort/NewsSort-Web/src/
  inflating: NewsSort/NewsSort-Web/src/App.vue  
   creating: NewsSort/NewsSort-Web/src/assets/
  inflating: NewsSort/NewsSort-Web/src/assets/background.png  
   creating: NewsSort/NewsSort-Web/src/components/
  inflating: NewsSort/NewsSort-Web/src/components/HelloWorld.vue  
  inflating: NewsSort/NewsSort-Web/src/main.js  
  inflating: NewsSort/NewsSort-Web/vite.config.js  
  inflating: NewsSort/╧ю─┐╦╡├ў╬─╡╡.txt  

源码文件说明:

a.NewsSort-API文件夹为后端API服务模块,其中best_model文件夹存放基于PaddleHub训练好的新闻长文本10分类模型参数。main.py为后端API服务主程序。

b.NewsSort-Web文件夹为web前端界面模块,基于VUE+ElementUI组件搭建新闻智分系统前端页面模块。通过Axios发送网络请求对接后端API接口服务从而完成前后端联调。界面搭建主程序可查看src/App.vue文件。

二.新闻长文本10分类模型预测

新闻长文本10分类模型训练细节在之前的项目(2021软件杯——新闻智分系统)已进行详述,感兴趣的可以前往该项目进行更多了解。

本模块主要对新闻长文本10分类模型的预测效果进行简单演示。

# 下载最新版本的paddlehub
!pip install -U paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple
# 做下简单的版本对齐

!pip install numpy==1.19
!pip install matplotlib==3.3.0
# 导入paddlehub和paddle包
import paddle
import paddlehub as hub
# 查看当前所在路径下文件
!ls
NewsSort  NewsSort.zip
# 定义要进行分类的10个类别
label_list=['财经', '房产', '教育', '科技', '军事', '汽车', '体育', '游戏', '娱乐', '其他']
label_map = { 
    idx: label_text for idx, label_text in enumerate(label_list)
}

# 加载训练好的模型
model = hub.Module(
    name='ernie_tiny',
    task='seq-cls',
    num_classes=10,    # 设置分类类别为10
    load_checkpoint='./NewsSort/NewsSort-API/best_model/model.pdparams', # 加载微调训练好的模型权重,注意此处路径一定要注意设置对,否则效果会很差!
    label_map=label_map
    )
INFO:filelock:Lock 140516872109264 acquired on /home/aistudio/.paddlehub/tmp/ernie_tiny


Download https://bj.bcebos.com/paddlehub/paddlehub_dev/ernie_tiny_2.0.2.tar.gz
[##################################################] 100.00%
Decompress /home/aistudio/.paddlehub/tmp/tmprx6d3j8g/ernie_tiny_2.0.2.tar.gz
[##################################################] 100.00%


[2021-11-24 21:48:50,323] [    INFO] - Successfully installed ernie_tiny-2.0.2
INFO:filelock:Lock 140516872109264 released on /home/aistudio/.paddlehub/tmp/ernie_tiny
[2021-11-24 21:48:50,329] [    INFO] - Downloading https://paddlenlp.bj.bcebos.com/models/transformers/ernie_tiny/ernie_tiny.pdparams and saved to /home/aistudio/.paddlenlp/models/ernie-tiny
[2021-11-24 21:48:50,332] [    INFO] - Downloading ernie_tiny.pdparams from https://paddlenlp.bj.bcebos.com/models/transformers/ernie_tiny/ernie_tiny.pdparams
100%|██████████| 354158/354158 [00:07<00:00, 45763.40it/s]
W1124 21:48:58.175362   123 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W1124 21:48:58.179697   123 device_context.cc:465] device: 0, cuDNN Version: 7.6.
[2021-11-24 21:49:09,092] [    INFO] - Loaded parameters from /home/aistudio/data/data117783/NewsSort/NewsSort-API/best_model/model.pdparams
# 要进行新闻10分类的数据:新闻标题title + 新闻正文body
# 新闻标题
title = "新总督致力提高加拿大公立教育质量"
# 新闻正文
body = "滑铁卢大学校长约翰斯顿先生于10月1日担任加拿大总督职务。约翰斯顿先生还曾任麦吉尔大学长,并曾在多伦多大学、女王大学和西安大略大学担任教学职位。  约翰斯顿先生在就职演说中表示,要将加拿大建设成为一个“聪明与关爱的国度”。为实现这一目标,他提出三个支柱:支持并关爱家庭、儿童;鼓励学习与创造;提倡慈善和志愿者精神。他尤其强调要关爱并尊重教师,并通过公立教育使每个人的才智得到充分发展。"
# 检测当前GPU是否可用
paddle.utils.run_check()
Running verify PaddlePaddle program ... 
PaddlePaddle works well on 1 GPU.
PaddlePaddle works well on 1 GPUs.
PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.

ps:注意若选择的非GPU版本,运行下面代码时请手动将use_gpu=True改为use_gpu=False

from time import time

# 拼接新闻标题和正文内容
data = title + body
# 对数据进行简单清洗和格式处理
process = lambda x: x.strip().replace('\n', '').replace('\r', '').replace(" ","").replace(u'\t',u'')
data = process(data)
newslist = []
list = []
list.append(data)
newslist.append(list)

# 进行预测并计算执行效率。 注意:初次加载耗时较长,加载完后调用将加快
begin_time = time()
# 新闻长文本10分类预测,默认为cpu环境,若已配置gpu环境可设置use_gpu=True
label, probs = model.predict(newslist, max_seq_len=256, batch_size=1, return_prob=True, use_gpu=True)
end_time = time()
print('总预测耗时(毫秒):%.3f' % ((end_time - begin_time) * 1000.0))

# 输出结果
print('新闻标题: {} \n 新闻正文: {} \n 新闻类别: {} \n 置信度: {}'.format(title, body, label[0], max(probs[0])))
总预测耗时(毫秒):13.762
新闻标题: 新总督致力提高加拿大公立教育质量 
 新闻正文: 滑铁卢大学校长约翰斯顿先生于10月1日担任加拿大总督职务。约翰斯顿先生还曾任麦吉尔大学长,并曾在多伦多大学、女王大学和西安大略大学担任教学职位。  约翰斯顿先生在就职演说中表示,要将加拿大建设成为一个“聪明与关爱的国度”。为实现这一目标,他提出三个支柱:支持并关爱家庭、儿童;鼓励学习与创造;提倡慈善和志愿者精神。他尤其强调要关爱并尊重教师,并通过公立教育使每个人的才智得到充分发展。 
 新闻类别: 教育 
 置信度: 0.9986690282821655

三. 基于FastAPI+PaddleHub搭建后端API服务

该模块主要基于FastAPI完成模型部署与后端API接口的搭建,并通过Postman对接口功能和逻辑进行测试。

3.1 基于FastAPI搭建API接口

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,其快速简单,可帮助开发者高效编码,并有效减少人为导致的错误。

FastAPI文档地址:https://fastapi.tiangolo.com/zh/

本项目后端API服务搭建完整代码可到data/data117783/NewsSort/NewsSort-API/目录下查看main.py文件!

解决跨域问题:

定义API接口处理:

运行后端服务:

可以看到此时后端API服务启动成功,注意此处127.0.0.1为本地机地址。有服务器的小伙伴可以尝试将项目部署到服务器端,启动程序后,公网ip:8000/即可访问服务。

本次项目创建的API接口地址为http://127.0.0.1:8000/newssort ,HTTP方法为POST,接下来将对刚才创建的API接口进行简单测试。

3.2 Postman接口测试

Postman是一款支持http协议的接口调试与测试工具,其主要特点就是功能强大,使用简单且易用性好 。使用教程:Postman工具使用教程

接下来将通过Postman对刚才创建的API接口进行简单测试,测试API接口逻辑功能和结果返回是否正常。

四.基于Vue+ElementUI搭建前端web页面

Vue 是一套用于构建用户界面的渐进式框架。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。

VUE官方文档:https://v3.cn.vuejs.org/

Element UI 是一套为开发者、设计师和产品经理准备的基于 Vue 的桌面端组件库,提供精美丰富的组件,可以帮助开发者快速建站。

ElementUI文档:https://element.eleme.cn/#/zh-CN

web界面搭建与前后端联调

本模块主要基于Vue+ElementUI完成新闻智分系统web界面搭建,并通过Axios发送网络请求对接后端API接口完成前后端联调。

web界面搭建细节可查看data/data117783/NewsSort/NewsSort-Web/src/APP.vue文件。

下面主要介绍前端与后端API接口交互逻辑:

启动前端项目:

启动项目后,访问 http://localhost:3000/ 即可打开项目新闻智分系统界面。

五.作者介绍

昵称:炼丹师233

飞桨开发者技术专家 PPDE

主要方向:搞开发,主攻NLP和数据挖掘相关比赛或项目

https://aistudio.baidu.com/aistudio/personalcenter/thirdview/330406 关注我,下次带来更多精彩项目分享!

标签:Web,10,新闻,分系统,NewsSort,API,inflating
来源: https://blog.csdn.net/m0_63642362/article/details/121588356