网站首页  词典首页

请输入您要查询的论文:

 

标题 基于Lucene的企业门户网站问答系统设计与实现
范文 邢琪 赵卫东 刘军娜


摘 要:信息服务类企业一般都有自己的门户网站,每天在网站上咨询的人非常多,人工回复难免需要消耗大量的人力物力。用户已经习惯于通过搜索引擎获取信息,Lucene是功能强大的搜索引擎框架,应用它可以很好地进行智能回复。利用基于Java的搜索引擎框架,定制智能问答引擎,通过智能问答和人工回复相结合,大大改善了人工回复咨询问题不及时的问题,节省了开支,提高了网站性能。
关键词:智能问答;搜索引擎;Lucene;余弦相似度;Java
DOIDOI:10.11907/rjdk.151291
中图分类号:TP319 文献标识码:A 文章编号:1672-7800(2015)007-0109-02
0 引言
随着企业的发展,用户对企业门户网站的咨询问题越来越多,如果单纯依靠传统的方式人工逐一回答,势必消耗大量的人力,而且用户往往还不能得到及时响应。再者,大部分人咨询的问题或多或少有相似之处,如何快速准确地解答共性问题,受到越来越多企业的重视。
如果能像搜索引擎一样,快速定位到问题,避免工作人员重复性的解答,具有非常重要的现实意义。Lucene是目前十分流行的全文检索工具框架,已得到广泛应用。鉴于此,利用Lucene和文本分类技术,实现了一个智能问答系统,并随时间的推移和工作人员的解答进行自我学习,大大提高了问答系统的效率,该系统能方便地嵌入到各信息网站中。
1 Lucene简介
Lucene是性能优异的Java全文检索工具包。它不是一个完整的全文检索引擎,而是一个全文检索引擎架构,可以方便地和其它应用整合,以实现完整的分析、查询、索引功能。Lucene的目的是为软件开发人员提供一个简单易用的工具包,方便在目标系统中实现全文检索功能,或者以此为基础建立起完整的全文检索引擎。
Lucene作为一个全文检索引擎,具有如下突出优点[1]:
(1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。
(2)在传统全文检索引擎倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度,通过与原有索引的合并,达到优化的目的。实现一套强大的查询引擎,用户无需编写代码即可获得强大的查询能力,Lucene实现了布尔操作、模糊查询(Fuzzy Search)、分组查询等功能。
2 系统设计与实现
通过Lucene对文本库创建索引,就可以进行咨询,对用户的问题进行分词和文本相似度计算,返回与用户咨询问题最相近的答案,并让用户对答案打分。如果用户没有满意的答案,这个问题就留给工作人员解答,工作人员解答完毕后,答案将反馈给用户,同时被Lucene进行自动索引,下次有用户咨询相似问题时,系统将给出最相近的答案。下面介绍实现过程。
2.1 建立知识库
首先根据企业的业务,创建并整理成一个格式化的文本库,基于自然语言创建“问题—答案对”集合,进行动态扩展,作为原始系统的文本模型,索引方式采用倒排索引[4]。
2.2 添加索引
(1)创建存放索引的目录Directory。通过Directory创建指定索引存放位置[2]。
(2)创建分词器。分词器使用Mmseg4j中文分词器。MMSeg算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。在Mmseg4j中自定义词典来扩充词库非常简单,同时方便实现中英文的分词,根据企业特定领域问答系统的需要,可以产生相对完善的针对领域的自定义词典库。
(3)创建索引器配置管理类IndexWriterConfig。管理所有有关索引器的配置。它只有一个构造方法IndexWriterConfig(Version matchVersion,Analyzer analyzer),构造方法中的参数matchVersion是Lucene版本,analyzer是分词器,即Mmseg4j分词器。
(4)创建索引器IndexWriter,负责创建和维护索引。使用IndexWriter iw=new IndexWriter(Directory dire,IndexWriterConfig?iwc)语句,该方法有两个参数,第一个参数为索引存放位置,参数类型为Directory;第二个参数为索引器,IndexWriter的索引器配置管理类IndexWriterConfig。可以将IndexWriter看作一个特定类型的数据库,用来存放各种表,可以将Document看作一张张的表。在Lucene3.6版本,只推荐使用这一个构造方法IndexWriter(Directory d,IndexWriterConfig conf),其它构造方法都已经过时。所有关于索引器IndexWriter的配置都是通过索引器配置管理类IndexWriterConfig管理的。
(5)将Document添加到索引器IndexWriter中,通过addDocument()方法添加,并通过commit()提交。
2.3 执行搜索
Lucene搜索像建立索引一样简单、快速。建立一个搜索器,搜索用户问题的答案。
(1)使用QueryParser将查询的关键词解析成Lucene的查询对象Query。创建QueryParser时要用到分词器,这个分词器要和前面创建索引时使用的分词器一致,即Mmseg4j中文分词器。
(2)使用FSDirectory打开索引所在的目录[3]。
(3)使用IndexReader读取索引目录,使用IndexSearcher进行搜索。
(4)返回搜索结果对象TopDocs。TopDocs包含搜索结果总数和结果的集合ScoreDocs数组。
(5)遍历结果的集合ScoreDocs数组,根据每个ScoreDoc的文档编号获取Document。
(6)对用户的问题进行智能回复。在回复返回前,先用余弦相似度算法对搜索返回结果进行重新排序,算法实现过程如下:首先对用户问题进行分词,剔除停用词,然后把分词后的结果映射到n维空间的一个向量之上,把通过Lucene搜索出来的问题分词映射到n维向量之上,计算搜索出来的问题和用户问题的余弦值,余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似。用余弦相似度处理文本的相似程度,公式如下[5]:
cos(θ)=∑ni=1Ai×Bi∑ni=1(Ai)2×∑ni=1(Bi)2=A·BA×B(1)
余弦值的大小作为排序的条件,重新进行排序,然后把结果显示到用户界面。
如果通过搜索没有找到与用户问题相关的答案,或者找到的答案用户都不满意,那么用户可以对智能回复的结果进行评分,评分区间为0-10,用户评价为0分的问题,继续保存在数据库,等待人工进行回复,人工回复完毕之后,用Lucene把该问题和答案重新分词并索引,通过Lucene增量索引功能添加,并在合适的时机,自动合并索引文件。下一个用户再问相同的问题时,系统将返回用户满意的答案,流程如图1所示。
图1 系统流程
3 结语
用Lucene构建了一个智能问答系统,自动搜索出问题的答案,并结合余弦相似度和用户的评分进行排序,提高了答案的准确度。今后在计算相似度时,还会考虑加入一些比较两个问题相似度的算法及对问题进行权重排序。比如:两个问题的结构越相似,则可认为它们越接近,换句话说,将两个问题的距离、关键词顺序都看作两者相关度的考虑依据,然后进行语法和语义分析[6]。进行以上工作后,准确率定会有进一步的提升。
参考文献:
[1] OTIS GOSPODNETIC,ERIK HATCHER.Lucene in action[M].Manning Publications Co,2005.
[2] 罗刚.自己动手写搜索引擎[M].北京:电子工业出版社,2009.
[3] 李刚,宋伟,邱哲.征服Ajax+Lucene构建搜索引擎[M].北京:人民邮电出版社,2006.
[4] 陈云红,周诗和.基于Web的网络答疑系统研究与应用[J].湖北师范学院学报 :自然科学版,2005,25(2):73-76.
[5] 季永华,许华虎,沈敏,等.自动答疑系统的研究与实现[J].计算机工程与应用,2005,41(14):224-225.
[6] 李亮.基于Lucene和Heritrix的职位垂直搜索引擎的设计与实现[D].北京:中国地质大学,2010.
(责任编辑:杜能钢)
随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/2/11 0:52:23