【基于知识图谱的前后端(vue+django)分离的问答系统的设计与实现(一):总体介绍】
问答系统实现的方式有许多种,有问答对的,有从网络社区搜索答案的,知识图谱只是其中一种实现方式。基于知识图谱的问答系统离不开对自然语言的处理,以及知识图谱的建立。前端部分。前端界面采用基于node的vue.js3来实现,这是一个渐进式的开发框架,主要用到element UI plus 组件库。 后端部分。使用python语言的Django框架,django框架可以提供方便快捷的后台管理模型,利于快速
基于知识图谱的前后端(vue3+django)分离的问答系统的设计与实现
基于知识图谱的前后端(vue3+django)分离的问答系统的设计与实现(一):总体介绍
基于知识图谱的前后端(vue3+django)分离的问答系统的设计与实现(二):前端搭建与插件配置
基于知识图谱的前后端(vue+django)分离的问答系统的设计与实现(三):前端开发
基于知识图谱的前后端(vue3+django)分离的问答系统的设计与实现(一):总体介绍
引言
自2021毕业以来,参加了三个月警训,而现在三个月的岗位实践也即将结束。算下来已经很久没有写代码了,在此,希望复盘一下自己的研究生毕业设计,也为各位学弟学妹写毕业设计提供一个想法和思路。
一般对于软件工程专业的研究生来说,毕业设计需要一个设计和实现一个管理信息系统。区别于本科专业的系统,研究生毕业设计的系统一般地要求加入算法辅助(推荐、分类、聚类、机器学习、深度学习)。
作者从来没有参与开发过商业化的项目,能力有限,这个项目十分简单,本文将会尽可能的用到多种工具,简要提到各种概念,丰富初学者的视野。更多地是希望能给各位的毕业设计带来灵感,如果学弟学妹们能从中学到一丁点东西,那么这些文字就没有白码。
本文旨在搭建起基于知识图谱的前后端分离的问答系统的主体架构,个别部分可能不会特别详尽。本文参考了Evan-Nightly的行文结构和些许代码。
一、项目概述
问答系统实现的方式有许多种,有问答对的,有从网络社区搜索答案的,知识图谱只是其中一种实现方式。基于知识图谱的问答系统离不开对自然语言的处理,以及知识图谱的建立。
(一)主体架构
以下是项目的架构图,在我自己的毕业设计中,是用到了分布式的部署方法。
功能架构图
技术架构图
- 前端部分。前端就是展示的部分,用户和系统交互的界面。前端界面采用基于node的vue.js来实现,这是一个渐进式的开发框架,可以按需添加前端组件。为了快速搭建简洁美观的页面,主要用到element UI 组件库,所涉及到的前端技术将在前端篇详细讲述。
- 后端部分。后端就是业务处理的部分,收到前端用户的请求或输入,经过处理,然后返回给用户想要的东西。使用python语言的Django框架,django框架可以提供方便快捷的后台管理模型,利于快速搭建系统。
- 问答系统有一个关键的部分就是自然语言处理。这里主要涉及到分词,命名体识别,文本分类等。文本分类直接关系到问答系统的准确性,这部分采用开源的rnn神经网络来实现,神经网络部分不作过多数学上的介绍(我也说不明白 ~手动狗头)。此处我将会把自己在学校的一些语料库贡献一下。
- 知识图谱部分采用neo4j数据库来构建。neo4j 数据库是一个有社区版和专业版的图数据库,开源版的性能已经足够强大,可以支撑最多支持 320 亿个节点、320 亿个关系和 640 亿个属性,完全满足学习的需求。
- 开发工具采用Pycharm。Pycharm可以开发前端页面, 也是主流的python项目开发IDE。
- 开发环境为win10系统,具体用到的框架和工具版本会在相应的章节提到。
(二)前后端分离
-
前后端不分离
在ajax技术(异步JavaScript和XML)之前,一个网页哪怕要更新一个字,都必须要更新整个页面才行,也就是说,我们每次对网页的操作和请求,其实都重新加载了整个网页。、
举个例子,我们以画画比喻。ajax技术之前,我们是用白纸画画,如果画里局部地区画错了,整张纸丢掉再重新从头画一张;而有了ajax技术,类似于我们在ipad上画画,如果想改变画面的局部,可以利用橡皮擦把局部抹白重画。
做过java的同学都知道,java有servlet和jsp,在servlet里面可以拼接html代码,在jsp页面里面,又可以写java代码,后端将整个页面渲染后给浏览器加载,也就是说后端决定了前端长什么样子。没做过的同学可以这样理解,前后端不分离,其实就是利用后端画好一张网页,然后网页文件交给浏览器显示。
这样前后端代码写在一起,开发的时候可能方便了,但是在维护的时候,是一个头疼的问题。关键的是,这样也造成了前后端不能同时开发,拖慢开发进度。所以,为了明确开发人员的分工,提高开发效率,方便维护,前后端分离的开发模式就应运而生。
转载的一位前辈的图,帮助大家理解。 -
前后端分离
前端和后端分开,中间利用接口的方式来进行通信,这种开发方式有效解决了前后端同时开发的问题。前端只做界面显示和接受用户的请求或输入,后端对前端的请求进行处理,进行数据增删改查,返回给前端需要展示的数据。ajax技术可以让页面进行局部刷新,这样当前端页面收到后端发来的数据的时候,只需要对页面中需要改变的地方做出更新即可,又提高了数据传输的效率。
前后端分离架构更方便了程序的多平台使用。后端的业务接口,可以提供给微信小程序,支付宝小程序,ios和安卓的app等一起使用。
特别是node.js的诞生,在这之前,js代码是要在浏览器才能运行的,而node.js提供了js的运行环境,甚至js这种脚本语言已经可以写后端服务了。
转载的一位前辈的图,帮助大家理解。
二、各章概述
(一)前端
前端篇,主要包括以下内容:
- vue.js 的介绍
- vue.js的环境安装与部署
- vue项目的创建
- vue项目结构与文件的分析
- vue项目中常用组件的使用,例如Vuex,router,axios,store,element ui等
- 逐步设计与搭建简易的前端页面
- 部署和打包前端应用,nginx
搭建好的问答系统主界面
(二)后端
后端篇主要包括以下内容:
- Django框架的介绍
- Python环境,Anaconda的应用
- Django项目的结构,配置文件分析
- 搭建Django项目,开启服务
- Django项目的常用配置,数据库,服务等
- 利用django的后台管理模板自动生成后台管理页面
- 后端主要写django框架,和前端的交互具体在前后端结合篇章里写。
自动生成的后台用户管理界面
(三)前后端整合
前端和后端搭建好后,这部分开始进行整合。
- 前后端的接口对接
- 解决前后端分离的造成的跨域问题
- axios请求发送与响应
- json数据
- 负载均衡的简单使用
(四)自然语言处理
自然语言处理主要包括命名体识别、分词和文本分类。这部分的主要内容有以下:
- jieba分词的使用
- 使用jieba分词建立自定义分词库
- 构建实体字典
- tensorflow的使用
- rnn神经网络(用于文本分类)
- 如何将训练好的模型部署到项目中
此处都是应用型的工具,或者别人写好的代码拿来应用。
(五)知识图谱
知识图谱的载体是图数据库,区别于结构化数据库,图数据库是非结构化的,在这个章节主要包括以下这些内容。
- 图数据库的介绍
- neo4j数据的安装与应用
- 如何利用docker使用neo4j数据库
- 如何利用python链接neo4j数据库
- 构建简易的的知识图谱
- 从知识图谱中抽取知识
备注:几乎所有的操作都是用pycharm工具完成的。
更多推荐
所有评论(0)