Git Product home page Git Product logo

qasystem's Introduction

QAsystem

第七届中软杯(智能问答系统)

非常感谢杨大帅比和张小可爱为项目所付出的所有心血,最后一次虽有遗憾却不后悔的中软杯

bilibili视频地址:视频网址

视频里可以讲解的比较仔细,可以看看。实际上整个项目完成度还很欠缺,较多地方因时间原因未完成,或者只是仓促完成,导致有些部分逻辑很简单,所以效果也不是很好,各位也就当看个思路就好。


需求介绍

题目要求:中软杯赛题网址

简略概述要求:

  1. 构建一个完整的QA系统
  2. 整个系统由三部分构成:前台,后台,知识库
  3. 前台:请设计一个程序,实现QA对话界面,该界面可以基于用户提问,自动连接后台、并从知识库寻找答案,并呈现给用户
  4. 后台:请设计一个程序从文档中提取尽可能多且质量高的问答对(QA对)
  5. 知识库:QA对存储管理的类似于数据库的东西

项目架构

功能架构划分:

分为用户端和管理员端

  1. 用户端:用户端为用户使用的页面。用户端提供了用户提问回答,热点问题,智能推荐,闲聊对话等功能。同时页面简洁美观,响应良好,为用户提供了良好的使用体验
  2. 管理员端:管理员在后台管理系统的页面。管理员端提供了文档上传,运行网页解析算法和生成QA算法,可视化图表查看数据库内容和热点问题,用户提问情况等图表

技术架构划分:

分为前端,后台,算法,知识库存储

  1. 前端:使用Bootstrap前端框架加上各种前端模块,搭建了具有风格清新,简单朴实的页面,为用户提供了良好的观看体验
  2. 后台:使用Django框架,Django作为一款性能优异,轻量级的Python的web框架,能很好的用于本系统的功能支持。作为本系统的后台,为整个系统对外提供流畅服务做到了保障。
  3. 算法:算法部分分为网页解析算法和QA对生成算法
  4. 知识库:知识库目前使用Elasticsearch搜索引擎的存储模块

使用的技术模块:

  1. 前端:大体上是使用的现成的网页进行了修改(毕竟UI设计不太行,感谢前端大佬),主要使用了Bootstarp,还有一些很多的前端插件,就不一一列举了
  2. 后台:后台主框架是基于Python的Django框架;里面的一些功能模块:比如用户聊天,使用的是图灵的聊天机器人API,可以将这个替换成seq2seq的对话生成(不过需要自己搭模型和训练);用户意图判断和情感判断使用LUIS;后台数据图表展示使用的是Elasticsearch配套的Kibana;后台的上传模块;后台的APScheduler定时管理模块
  3. 算法:算法部分因为是设计的基于逻辑的QA对生成,所以没有用到Tensorflow,scikit-learn等深度学习、机器学习的工具,用到了Stanford的语言模块、哈工大的语言工具LTP,主要是使用的LTP了,里面的基于语义的分析,基于成分的分析效果还是挺好的,这个算法主要也是使用了LTP进行分析,然后就是使用很简单逻辑进行拼接生成QA,所以很制杖,效果一般。针对本赛题的数据集华为云帮助手册的效果还可以,但是使用其他数据集的话会大打折扣,主要是因为一是LTP对于简单的短句,逻辑较为简单句子分析的很清晰,但是长难句就不行了;另外也是设计的逻辑代码也很简单,考虑不全面,生成句子的逻辑不够好。
  4. 知识库:知识库就是使用的Elasticsearch,使用K-V来保存QA,搜索速度较快。

系统流程

  1. 管理员上传文档,网页(两种文件格式,目前本系统主要是解析以华为云帮助手册的网页,其他网页需要更改网页解析程序),上传这些文件到服务器端
  2. 选择需要生成QA对的文件,调用QA对生成算法,生成QA对存入知识库中
  3. 管理员可以前往知识库管理页面,查看所有的QA对,并可以进行增删改查的操作
  4. 管理员也可以查看用户的各项信息
  5. 用户可以在用户界面进行提问,以获取答案

运行流程

整个项目是一个Django的web项目,主要的各种逻辑部分与后台的view.py相连,通过后台调用的逻辑模块。运行的话,直接部署Django,然后使用Django运行整个项目,在浏览器里面输入localhost:xxxx/index.html(好像是这个,记不清了),然后就行了。

需要配置的模块:

  1. Django
  2. Elasticsearch
  3. Kibana
  4. APScheduler
  5. LUIS(需要把配置写在view.py里面)
  6. 图灵机器人(需要把配置写在view.py里面)

问答系统介绍

这边顺便也介绍一下问答系统(因为了解时间不长,可能有误,请谅解),这些也是经过查阅网上资料总结而得的。

问答系统大概分为这几种:

  • 基于结构化数据的问答系统
  • 基于自由文本的问答系统
  • 基于问题答案对的问答系统

其中的结构化数据的问答,应该类似于数据库的匹配查询

基于自由文本,我觉得这个应该就是机器阅读理解,而且这个也是目前比较火的一个方向,这也是我目前比较了解的一个。机器阅读理解有经典的SQUAD数据集,中文的Dureader数据集,基于这些数据集设计的深度学习框架目前效果也不错,可以使用这些模型来搭建问答系统。因为这种基于自由文本的问答,不需要构建问句,直接将问句去文章中匹配即可。难点在于如何将问句匹配文章中的答案,这也是深度学习模型需要处理的问题,而且不需要过多的操作文档,这样减少了文档的信息丢失。机器阅读理解主要有三大难点:表示问题、搜索匹配问题,答案输出问题(这边就不展开了)。

基于QA对,主要是这个知识库,知识库可以是QA对,也可以是目前研究很多的知识图谱。基于QA对的,难点在于Q与A的生成,自然语言生成现在还是一个较难的点,研究的效果也不是很好。基于知识图谱的,难点在于如何构建知识图谱,如何抽取句子中的关系。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.