【基于知识图谱的前后端(vue+django)分离的问答系统的设计与实现(一):总体介绍】

     阅读:37

基于知识图谱的前后端(vue3+django)分离的问答系统的设计与实现

基于知识图谱的前后端(vue3+django)分离的问答系统的设计与实现(一):总体介绍
基于知识图谱的前后端(vue3+django)分离的问答系统的设计与实现(二):前端搭建与插件配置
基于知识图谱的前后端(vue+django)分离的问答系统的设计与实现(三):前端开发


引言

自2021毕业以来,参加了三个月警训,而现在三个月的岗位实践也即将结束。算下来已经很久没有写代码了,在此,希望复盘一下自己的研究生毕业设计,也为各位学弟学妹写毕业设计提供一个想法和思路。

一般对于软件工程专业的研究生来说,毕业设计需要一个设计和实现一个管理信息系统。区别于本科专业的系统,研究生毕业设计的系统一般地要求加入算法辅助(推荐、分类、聚类、机器学习、深度学习)。

作者从来没有参与开发过商业化的项目,能力有限,这个项目十分简单,本文将会尽可能的用到多种工具,简要提到各种概念,丰富初学者的视野。更多地是希望能给各位的毕业设计带来灵感,如果学弟学妹们能从中学到一丁点东西,那么这些文字就没有白码。

本文旨在搭建起基于知识图谱的前后端分离的问答系统的主体架构,个别部分可能不会特别详尽。本文参考了Evan-Nightly的行文结构和些许代码。

一、项目概述

问答系统实现的方式有许多种,有问答对的,有从网络社区搜索答案的,知识图谱只是其中一种实现方式。基于知识图谱的问答系统离不开对自然语言的处理,以及知识图谱的建立。

(一)主体架构

以下是项目的架构图,在我自己的毕业设计中,是用到了分布式的部署方法。

在这里插入图片描述
功能架构图

在这里插入图片描述
技术架构图

  1. 前端部分。前端就是展示的部分,用户和系统交互的界面。前端界面采用基于node的vue.js来实现,这是一个渐进式的开发框架,可以按需添加前端组件。为了快速搭建简洁美观的页面,主要用到element UI 组件库,所涉及到的前端技术将在前端篇详细讲述。
  2. 后端部分。后端就是业务处理的部分,收到前端用户的请求或输入,经过处理,然后返回给用户想要的东西。使用python语言的Django框架,django框架可以提供方便快捷的后台管理模型,利于快速搭建系统。
  3. 问答系统有一个关键的部分就是自然语言处理。这里主要涉及到分词,命名体识别,文本分类等。文本分类直接关系到问答系统的准确性,这部分采用开源的rnn神经网络来实现,神经网络部分不作过多数学上的介绍(我也说不明白 ~手动狗头)。此处我将会把自己在学校的一些语料库贡献一下。
  4. 知识图谱部分采用neo4j数据库来构建。neo4j 数据库是一个有社区版和专业版的图数据库,开源版的性能已经足够强大,可以支撑最多支持 320 亿个节点、320 亿个关系和 640 亿个属性,完全满足学习的需求。
  5. 开发工具采用Pycharm。Pycharm可以开发前端页面, 也是主流的python项目开发IDE。
  6. 开发环境为win10系统,具体用到的框架和工具版本会在相应的章节提到。

(二)前后端分离

  1. 前后端不分离

    在ajax技术(异步JavaScript和XML)之前,一个网页哪怕要更新一个字,都必须要更新整个页面才行,也就是说,我们每次对网页的操作和请求,其实都重新加载了整个网页。、

    举个例子,我们以画画比喻。ajax技术之前,我们是用白纸画画,如果画里局部地区画错了,整张纸丢掉再重新从头画一张;而有了ajax技术,类似于我们在ipad上画画,如果想改变画面的局部,可以利用橡皮擦把局部抹白重画。

    做过java的同学都知道,java有servlet和jsp,在servlet里面可以拼接html代码,在jsp页面里面,又可以写java代码,后端将整个页面渲染后给浏览器加载,也就是说后端决定了前端长什么样子。没做过的同学可以这样理解,前后端不分离,其实就是利用后端画好一张网页,然后网页文件交给浏览器显示。

    这样前后端代码写在一起,开发的时候可能方便了,但是在维护的时候,是一个头疼的问题。关键的是,这样也造成了前后端不能同时开发,拖慢开发进度。所以,为了明确开发人员的分工,提高开发效率,方便维护,前后端分离的开发模式就应运而生。
    Alt
    转载的一位前辈的图,帮助大家理解。

  2. 前后端分离
    前端和后端分开,中间利用接口的方式来进行通信,这种开发方式有效解决了前后端同时开发的问题。前端只做界面显示和接受用户的请求或输入,后端对前端的请求进行处理,进行数据增删改查,返回给前端需要展示的数据。

    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工具完成的。