项目实现地址:https://github.com/ysc/QuestionAnsweringSystem
QuestionAnsweringSystem是一个Java实现的人机问答系统,能够自动分析问题并给出候选答案。IBM人工智能计算机系统"沃森"(Watson)在2011年2月美国热门的电视智力问答节目"危险边缘"(Jeopardy!)中战胜了两位人类冠军选手,QuestionAnsweringSystem就是IBM Watson的Java开源实现。本文从系统架构、主要数据结构、关键技术及代码实现四个方面对该系统的技术实现进行简要分析。
1、系统架构- 证据获取:从本地数据库或互联网上获取支撑问题的证据。若本地数据库存储有该问题的证据,则直接返回支撑问题的证据。否则,需要利用搜索引擎(如百度、谷歌)从互联网上抓取与该问题相关的片段,并抽取出其中的正文作为该问题的支撑证据。
- 证据评分:为评价不同证据对问题的支撑度,需建立一套证据评分机制。证据评分模型,采用了基于词频的、基于bigram的和基于skip-bigram的三种评价方法及基于上述三种方法加权的组合方法。评分过程中,可以由用户设定以上四种评价方法的任意一种。
- 问题分类:对问题所属的类别进行判定。该系统将可识别的问题类别划分为人名、地名、机构名、数字、时间、定义和对象七类(暂时仅支持前五类),并预先定义这几类问题的匹配模式。分类过程为:1)提取问题的模式,2)和预定义的问题类型模式进行正则匹配,3)根据匹配的结果确定问题的类别。针对同一类问题,系统又定义了五大类数小类的匹配模式,用户可以自由设定匹配模式为大类别或基于五大类的加权组合。
- 候选答案评分:为评估候选答案的质量,需建立一套候选答案评分机制。在候选答案评分模型中,基础的评价方法有基于词频的、基于词距的、基于最短词距的、基于文本对齐的、基于宽松文本对齐的、基于回带文本对齐的和基于热词的七类方法;综合的评价方法有基于基础评价方法加权的组合方法。评价过程为:1)根据问题类型确定答案类型,然后从证据词集中筛选出命名实体标记与答案类型一致的词,作为候选答案,2)针对每个候选答案,利用评分模型进行打分,用户可以自由设定八类评价方法中的一种作为评分模型。在打分过程中,每类评价方法均有一个权值,候选答案的得分是评价方法的打分与该评价方法权值的乘积。
| 属性 | 类型 |
question | 问题 | 字符串 |
支撑证据 | evidence列表 | |
问题类型 | 枚举 | |
预期答案 | 字符串 | |
候选问题类型 | 问题类型集合 | |
候选答案过滤器 | 方法 | |
evidence | 标题/title | 字符串 |
片段/snippet | 字符串 | |
得分/score | Double | |
候选答案 | 集合 |
3.1 证据评分模型
3.2 候选答案评分模型
3.3 问题分类模型
4、代码实现