您的位置:首页 > 其它

去年的齐鲁软件大赛,关于语义识别方面,一种简单的实现想法。

2012-09-19 16:30 253 查看
去年的第九届齐鲁软件大赛中,我们团队的作品《南山景区3D智能旅游咨询员》当中,其中一个功能是智能问答。就是用户通过说话或者打字向虚拟旅游咨询员提问,虚拟旅游咨询员思考后会做出相应回答。如果是用问题的关键字去匹配用户问题问题来实现,实用性就太低了。因为人们平时说话,经常存在同义词或者语义不明等情况。在实现这个功能的时候,我们尽可能的去分析人们平时说话的语义,模拟让计算机理解自然语言,做到模糊匹配。(我们本科作品,水平有限。。大牛们可以忽略。。-0-)

技术背景:MFC(主框架)+OGRE(3D图形渲染)+语音识别引擎+UDK+FLASH

首先假设,以下是人们平时可能提出的问题:

1、请给我介绍一下关于南山大佛的历史

2、推荐一下南山大佛的旅游路线

3、景区附近有什么旅馆。

4、青岛到南山景区怎么走

问题来了,人说话,千变万化,尤其是同义词。比如:“南山大佛的历史”和“南山大佛的渊源”其实意思上是一样的。如果连同义词都不处理,那这个功能基本是不可用的。所以第一步,首先替换问题中的同义词。通过摘一些现实生活中,各种各样人提问,总结这些同义词。首先进行一系列替换。这一步的关键是,同义词库一定要够量,尽量覆盖日常相关的提问。

比如关于“怎么走”一律归为“路线”,“介绍,告诉我,什么是”一律归为“简介”。所以第一步之后,有可能问题已经面目全非,但是不要紧,我们要的是分析用户的语义,所以只要计算机接下来能理解就好了。

关键词成功替换之后,第二步就是再把统一的关键词提取出来。我不是学文科的不懂语法,但是起码分析了很多平时人们常说的话之后,其实是有很多共同点的,修饰词都是没有用,其实核心那就是动宾结构,主语都可以省略。其实同义词转换之后,再抽取主干之后就是:

1、请给我简介一下关于南山大佛的历史

2、推荐一下南山大佛的旅游路线

3、景区附近有什么酒店。

4、青岛到南山景区路线

问题一下变成了精华,关键点到了。这个只是简单的一问一答,所以没有去考虑更具体的拆分句子,更深层的语义,双重否定什么的。介于很少有人提出“请不要给我介绍一下XXXX”,“XXX的XXXX是不是XXX的XXXX?还是XXXX的XXXX?”这种变态的句子。

之后要进行第三步,判断动词是否是具有方向性,因为起点和终点是不一样的。

判断动作方向性之后,最后,用关键字匹配问答库。把提取出来的关键字,放到数组里再去匹配问答库里的问题题干,如果全匹配成功,则作答。如果关键字没有全匹配成功,则返回最相近的那个。比如四个关键字,返回匹配成功三个关键字的问题题干。然后计算机反问用户一句:您想要问的是不是XXXXX(返回的题干)?一方面避免了错回答问题的几率,令一方面给用户更友好的感觉。

比如数据库里有:“青岛到南山景区的路线。”和“烟台到南山景区的路线”

用户问了:“请告诉我青岛到烟台的路线。”

首先先判断清楚了,是从青岛到烟台,而不是从烟台到青岛。其次匹配不到用户的问题,反问用户最匹配的问题,可以加入问题的提问率,每当回答一次就增加该问题的提问率,显然,返回提问率较高的问题被认可的几率更大。

这就是我们实现问答的具体思路。实践过程中感觉效果还不错。前来测试的用户都是尽可能简短的向计算机提问(可能是怕计算机听不懂-0-)。不过只要不说非常绕弯的语义,计算机都能非常正确“听懂”用户的问题。做出回答。

另外,我们还让虚拟人记录了最近问的几次问题,中间夹杂一些衔接语,调侃以及敏感词的判断,都得到了好评。比如如下:

用户:早上好

虚拟人:您好,但现在已经是下午XX点了(礼貌及调侃判断)

用户:请告诉我青岛怎么去烟台啊?

虚拟人:对不起,您的问题我不清楚,你想要问的是不是“从青岛到南山景区的路线”?(问答判断,同时记录刚才的问题)

用户:恩,是的!

虚拟人:您可以通过XXXXX高速XXXXXXXXXXXX,您还有什么要问的吗?(回答了刚才的问题,并且加上部分衔接语)

用户:不用了,谢谢。

虚拟人:不客气,希望您在南山景区玩的开心。(礼貌判断)

这只是我们团队当时的一种实现想法,实现起来不难,但是起到了非常好的效果。大家有什么好的想法互相交流,来完善3D智能旅游咨询员这个命题!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: