Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

stu-github/QAsystem

Repository files navigation

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的生成,自然语言生成现在还是一个较难的点,研究的效果也不是很好。基于知识图谱的,难点在于如何构建知识图谱,如何抽取句子中的关系。

About

Intelligent Q&A system(第七届中软杯)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

  • HTML 90.1%
  • JavaScript 4.6%
  • Python 3.2%
  • CSS 2.1%
  • PowerShell 0.0%
  • Shell 0.0%

AltStyle によって変換されたページ (->オリジナル) /