ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

NewsSort-新闻智分系统

2021-11-28 11:03:45  阅读:177  来源: 互联网

标签:Web 10 新闻 分系统 NewsSort API inflating


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有