Java课程智能问答系统设计与实现
2018-02-13张华李超
张华 李超
摘 要: 针对Java课程课堂答疑不能及时响应的问题,提出了课程智能问答系统模型。通过自然语言处理、信息关联、信息检索等技术实现了答疑问题的分析、转换与处理,并通过实例验证了模型的可行性。
关键词: Java课程; 答疑; 智能问答系统; 自然语言处理
中图分类号:TP311 文献标志码:A 文章编号:1006-8228(2018)12-12-04
Abstract: Aiming at the problem that the Q&A in the Java course can't respond in time, the model of intelligent question & answer system is proposed. The analysis, transformation and processing of the Q&A questions are realized through natural language processing, information correlation and information retrieval, and the feasibility of the model is verified by an example.
Key words: Java Course; answer questions; intelligent question & answer system; natural language processing
0 引言
近年,云計算、大数据等高新技术也有了重大突破[1]。相比之下,Java课程答疑还是遵循传统模式,即老师在上课时给出知识点及一些前沿动态,而学生的大部分问题都是在课下产生的,又不便随时联系老师,所以学生的疑问往往得不到及时解答。
本文提出一个Java课程智能问答系统,实现了问题分析、问题转化、信息检索、答案返回四个子模块。问题的答案在系统数据库中检索或动态解析搜索引擎页面可以获取,并且针对不同类别的问题,设计不同答案格式,整个问答交互的响应时间不超过1s。
1 智能问答系统现状
在自然语言处理技术的发展过程中,国外开发了一些比较成熟的英文智能问答系统,比如Start、AskJeeves自然语言检索系统、AnswerBus系统等[2]。国内对于智能问答系统也有很多地研究并应用到实际中,国内普遍的实现方法可以分为三类。第一类是将用户输入的问题构建一个同类问题集合,然后通过计算句子语义的相似度,在建立的问题集合中找到相似的问题,最后将该问题的答案返回给用户;第二类是将问题和答案的关联预先设定在知识库中,通过对问题关键字的匹配,直接返回该问题的答案给用户;第三类是通过对问题进行分词处理,在分词结果中提取问题关键字,通过关键字再结合全文检索引擎匹配结果返回给用户。这三类方法主要用在开放域智能问答系统,但对于限制域的智能问答系统还不能做到精准返回结果[3]。
2 需求分析
通过对该Java课程智能问答系统的研究内容进行分析,结合目前国内、外的技术发展的实际现状,系统的功能性需求如下:
⑴ 用户可以通过网页以自然语言语句提问,并返回结果,整个过程在会话式的人机交互界面完成;
⑵ 在进行结果检索时,能够实时在网络上获取结果返回;
⑶ 在返回结果时,多条结果只显示一条,其余信息以模态对话框的方式显示,并且提供翻页功能。
3 体系结构设计
本系统采用MVC模式开发,在服务器端搭建ICTCLAS运行环境[4]。处理用户提交的自然语言的问句,然后返回问题对应的答案。服务器端后台另外一个功能就是自动导入数据文件,然后通过实时分析维护问答数据库,在自动处理数据的基础上提供手动维护功能,系统体系结构如图1所示。
本系统体系结构主要有数据采集层、文件管理层、数据处理层、数据持久层、数据交换层、数据显示层。数据采集层主要通过互联网采集Java问答数据,包括网页、论坛、博客、论文等信息,并将这些信息整理后按特定结构打包成txt文件;文件管理层主要负责将数据从采集平台转移到数据处理层等待处理;数据处理层则对Java问答数据进行识别、关联、特征提取后,将数据存储在问答数据库中;数据持久层是整个问答系统知识库模型。数据交互层分为数据交换格式和数据传输协议,本系统数据交换格式使用JSON,数据传输协议采用TCP/IP;数据显示层为用户提供操作界面,一方面是用户输入问题语句的入口,另一方面则是问答服务返回结果的出口。
4 功能结构设计
系统功能主要实现自动问答,而在限制域的自动问答系统的应用中,主要包含问题分析、信息检索、答案抽取、用户点评四个步骤,本系统在实际需求背景下对常规问答系统中的自动问答功能模块进行重新设计,主要包括问题分析、问题转化、信息检索、答案返回四个模块。系统功能结构如图2所示。
从图2中可以看出,问题分析模块主要通过自然语言处理理解用户检索意图,处理步骤包括问题预处理、分词、问题分类、关键词抽取;问题转换模块利用问题分析产生的中间结果生成对应的SQL语句,对于无法生成查询语句的问题分析结果需要生成在网络获取相关答案的接口,生成的接口将在信息检索中调用;而信息检索的主要功能则是执行前述SQL语句封装结果,特殊地对于无法在问答数据库中查询到答案的问题,将调用在问题转换中生成的接口解析结果;答案返回中主要对检索到的答案内容进行统一格式处理,其中包括用户操作异常提示。
5 功能模块设计
主要有问题分析、问题转换、信息检索、答案返回四个功能模块。
5.1 问题分析
问题分析是理解用户检索意图的核心处理步骤。主要是将用户问句进行分析之后,把结果封装在Question对象中。问题分析算法的核心是自然语言处理技术,在本系统的实现中主要用到的是ICTCLAS,自然语言处理技术主要应用在中文分词、词性标注、命名实体识别、用户自定义词典、关键字提取等环节。
在分析用户问题时,通过以下五个步骤完成。
⑴ 将自然语言进行分析并转化到数据结构question中,同时将问题定性为统计或查询。如果碰到“总共”、“一共”、“数量”、“多少”类型的词语就说明为统计型类型,将question.type设为count,如果不含有这种词语,将question.type设为query。
⑵ 接下来就是从问题中识别出范围属性,例如:知识点、热点、岗位、视频、薪资等等,然后分别将其存入到对应范围变量中,如:question.knowledge、question.hot、question.job等,然后定义用户字典信息,添加一些特定的表示数据源的词语包含其中,然后通过分词确定问题所要查找的数据源,比如在用户字典中添加“大牛”,“大牛信息”,“大牛简介”就可以确定查找的数据源为“expert”,又比如“岗位”,“岗位信息”就可基本上确定数据源为“job”,同样的方式确定其他类型的数据源。
⑶ 采用与上面的同样的方式确定用户查询的字段名,比如输入“姓名”就可以确定字段为“expert_name”,“大牛兴趣”确定查询字段为“expert_interesting”。
⑷ 去掉句子段落之间的冗余字段,如标点符号、连词等等。
⑸ 确定关键词,查询的关键词就是字段对应的信息,比如大牛姓名为“张三的信息”,关键词就是其中的“张三”,获取的方式也是通过关键字提取算法和特定的位置进行提取。
经过上述处理之后,问题分析完毕,但是问题还没有完全解答,只是得到了一个中间结果,还需要将问题进一步分析得到最终答案。
5.2 问题转换
在这个模块中,把问题分析的结果进行处理,将得到的中间结果组装成可以进行检索的SQL语句,问题转换的处理流程经过以下六步处理就可以生成相应的SQL语句。
⑴ 明确问题分析只是为了查找数据,并不是为了增加数据和修改更新数据,因而直接初始化sql为“select”。
⑵ 判断问题的数据源(source)是否为null,如果为null,说明数据源不存在,这样就超越本身数据所能查找的领域,就将sql初始化为null,然后返回,此时后续采用的办法为从网络中获取需要的数据。
⑶ 确定查询的属性,如果“type”为null说明查询属性不存在,默认查询所有,确定为*,如果存在,则继续判断查询类型为统计型还是查询型,如果为统计型,就确定为“select count”,同时判定attr属性是否为空,如果不为null,就确定sql语句为“select count(attr)”,如果不存在,就确定为“select count(*)”,同时如果不是统计型,就确定为“select attr”。
⑷ 确定数据源,由于数据源前面已经进行了判空运算,所以直接确定sql语句为“select XXXX from source”。
⑸ 判定是否需要与数据表进行连接运算,判断属性不为null就与相应数据表进行连接运算。
⑹ 判断是否有where条件,如果属性信息有两个不为空,则增加where条件,完成question向sql语句的转化。
5.3 信息检索
5.3.1 一般问题答案
对于一般问题答案,可以在专家数据库中检索到,因此只需将答案内容封装成JSON对象即可。
5.3.2 网络答案获取
对于网络答案,需要经过以下五步处理。
⑴ 经过问题分析之后得到特定数据结果question,接着判断问题为何种类型,如果为解释型,则采用解释型问题分析流程,如果是概念型或者其他类型,就采用概念型流程。由于此两种流程基本上相似,因此下文只对其中的一套流程进行说明,若有不同之处再详细说明。
⑵ 获取关键字的主题信息,然后对其进行编码,此处编码的作用是将汉语进行编码,因为在百度百科和百度知道中抓取信息候传入参数是经过编码的,因而此处必须对检索信息进行编码。
⑶ 经过编码之后就将百度百科或百度知道的链接与当前编码之后的参数值进行组合,组合的链接将作为获取数据的URL地址。
⑷ 通过该URL地址获取文档对象,获取时有可能抛出异常,这里又有三种不同的情况:0代表网络错误,1表示网络正常且正确获取数据,2代表网络正常但无答案,这里两套流程请求的URL地址不同,解释型请求的是百度知道,其他两种类型请求的是百度百科。
⑸ 对获取的文档对象进行格式分析,之后获取指定问题的答案并返回。
5.4 答案返回
将信息检索结果和问题分析中的问题分类结果返回给用户,在返回给用户之前将答案内容进行统一格式化处理。特别地,错误信息直接当作字符串答案类型处理,具体错误描述即为字符串内容。
6 系统实现
主界面用于用户提问和观察返回结果。界面布局类似QQ、微信的聊天界面,上部是所有功能的导航栏,下部为自动问答系统的交互界面。如图3所示。
7 结束语
本文通过对Java课程答疑现状的分析,结合笔者及所在团队的教学实践,提出了Java课程智能问答系统,然后以分词技术为基础,将系统划分为问题分析、问题转换、信息检索、答案返回四个模块,最终通过答疑知识库返回预期结果,响应时间在1s内,实际使用效果良好。
参考文献(References):
[1] 罗军舟,吴文甲,杨明.移动互联网:终端、网络与服务[J].计算机学报,2011.34(11):2029-2051
[2] A Bordes,S Chopra. Question Answering with SubgraphEmbeddings[J]. Computer Science,2014.
[3] 王正华,韩永国.自动问答系统设计與实现[J].软件导刊,2014.9:111-113
[4] 毛先领,李晓明.问答系统研究综述[J].计算机科学与探索,2012.6(3):193-207