语义计算、知识图谱与智能问答(实例)
本文,以医药知识图谱“神机医药”APP为例,简述如何通过“语义计算”构建知识图谱,利用知识图谱进行“智能问答”服务。
“神机医药”APP搜集了15606条“药品”信息,14172条“疾病”信息,5756条“症状”信息,12万条以上的“问答”信息,通过“语义计算”确定知识之间的相关性、相关度,自动构建“医药知识图谱”,动态解答医药常识问题。
在介绍“语义计算”自动构建“医药知识图谱”,动态解答医药常识问题之前,先讨论一些相关概念。
一、知识图谱相关概念
1、知识图谱与智能问答
Google公司于2012年提出知识图谱,目的是根据知识之间的关系、构建知识结构,在关键词搜索基础上,利用知识图谱自动搜索相关知识。
从广义上看,搜索引擎也是解答问题的一种形式,加入知识图谱后,可通过“知识图谱”寻找相关答案。知识图谱应用于智能问答的关键在于“语义计算”,具体为三点:
第一、 构建知识图谱
在构建知识图谱时,通过“语义计算”确定说明知识文本的含义;
第二、 理解问题
回答问题的前提是理解问题,通过“语义计算”确定问题的含义;
第三、 解答问题
在解答问题时,通过“语义计算”与知识图谱中的知识进行最优匹配。
2、知识图谱是“图”吗?
从字面上看,知识图谱是图,是知识结构图。对于少量知识,用图来表示知识结构更为清晰,容易理解,但Google是互联网搜索引擎公司,网页数量巨大,无法在一个屏幕上用图来表示知识结构,显然,简单地将“知识图谱”理解为“图”或“知识可视化”是片面的,Google 公司提出“知识图谱”目的是构建搜索引擎,而不是“知识可视化”,显示知识结构图。
3、知识图谱表达的是“知识结构关系”吗?
通常,所谓“图谱”,是用图的形式来表示某种事物关系结构,如“家谱”,表示家族关系结构。因此,知识图谱是“知识关系结构”,用图来表示为,由“节点”和“连线”(边)组成,“节点”为“知识”,“连线”(边)为“知识”之间的关系。
4、什么是知识图谱中的“知识”?
既然知识图谱表达的是“知识结构关系”,那么,什么是“知识”?
对汉字而言,一个“词”、甚至是一个“字”都有特定含义,都是“知识”。那么,一个“词”或一个“字”就是知识图谱中的“知识”吗?显然不是,因为,“字”或“词”存在多义性,在不同的语境下含义不同,仅看一个“字”或“词”不知道其具体含义是什么?必须用一段文字进行说明,配合一定的语境才可确定其具体含义。因此,从自然语言处理NLP来看,“知识”是一段文本说明的含义,对于互联网搜索引擎来说,是URL页面记载内容说明的含义 。
5、知识图谱是“语义网络”吗?
所谓“语义”是语言的含义,从自然语言处理NLP角度看,“知识”是一段自然语言文本所表达的含义。即便是数学,其中用数学符号语言(公式)来定义数学模型,但离开文字说明,人们也很难理解其含义。因此,对于计算机处理而言,“知识”是一段文本表达的含义,也可以说是“语义”。
用二维平面图来表示,知识图谱是由节点和连线做组成的网络图:
一个“知识”是一个节点,可能与其他很多“知识”相关,在图上表现为有很多连接的边,由此形成复杂的连接网络。
因为,“知识”是一段文本说明的含义,所以说,是知识图谱是“语义网络”,是将诸多说明“知识”的文本进行“语义计算”后,组成的“语义网络”。
6、如何运用“语义计算”进行“知识节点”关联?
构建知识图谱的关键在于,如何确定知识之间的关联?因为,“节点”之间的“连线”表示为“知识”与“知识”之间存在关系,但是什么关系?关联度有多大?如何计算?这是构建知识图谱的重点。
(1)定性关系
在知识图谱中,“知识”之间的“关系”可以是一个简单的定性说明,仅仅是一个文本描述,如:父子关系、夫妻关系、业务关系、隶属关系等。在计算上,这样的关系是0,1二值关系,即为是否存在关系?什么关系?无需计算。
(2)定量关系
在自然界很多情况,一个“知识”与其他很多“知识”都有关系,关系有强弱之分。简单的0,1关系不足以表达关系的强弱,需要更详细的定量分析,计算“相关度”(或关联度)。对搜索引擎来说,“相关度”也就是搜索结果排序Page Rank;对“知识图谱搜索引擎”来说,“相关度”需要“语义计算”,也就是计算语言含义的相似度,因此,定量分析为根据“语义”的相似度,以此来确定知识之间的定量关系。
定义:
(1)设:K(X)为一个知识“节点”,是一段说明“知识”的文本;
(2)设:KR(X,Y)为知识 X与知识Y之间的关联度,在图中,为“知识”节点之间连线(边)的计算权重。
(3)设:相关度KR(X,Y)是一个0-1之间的数,0≤KR(X,Y)≤1=100%。
若,KR(X,Y)=0, 则,两个“知识”没有关系;
若,KR(X,Y)= 100%,则,两个“知识”相等;
若,KR(X,Y)≥80%,则,两个“知识”相近,在具体应用时可以设定阀值,根据应用情况来设置。
虽然K(X)知识“节点”是一段说明“知识”的文本,但不能简单地用字符串比较来计算关联度KR(X,Y)。因为,文本的长度也不同,证人语言中有很多同义词或意思相近的词,因此,虽然文本长度不同、用词不同,但说明的内容相同或相近,所以,简单的字符串比较无法确定知识的相关性,而“内容相似度计算”可以解决“语义计算”问题,计算知识之间的关联度KR(X,Y)。
7、“知识本体”、“知识实体(实例)”、半结构化数据
(1)知识本体
所谓“知识本体”相当于关系数据库RDB中的表结构,是记录知识的结构,也就是用X维特征来描述“知识”。
(2)知识实体(实例)
所谓“知识实例”相当于关系数据库RDB中的记录,是一个独立的知识记录。
(3)半结构化数据
虽然知识可以存储为格式化记录,但知识记录并非关系数据库RDB中的结构化数据。因为,虽然“知识记录”有结构,但字段存放的是文本说明的内容,无法用字符串比较进行计算,无法用结构化查询语言SQL查询,因此,“知识记录”虽然有结构,但不是“结构化数据”,而是“半结构化数据”。
二、“语义计算”自动构建“知识图谱”
以下用一个实例来说明,如何利用“语义计算”来自动构建医药知识图谱,该实例可在华为应用商店,搜索“神机医药”进行下载。
在“神机医药”APP中,有“药品”和“病症”两类知识,在互联网上爬网页,每个“药品”、“病症”都是一个知识K(X),“药品”和“病症”存在以下4种关系:
“药品”对应的“病症”(药品治疗的病症);
“病症”对应的“药品”(病症用什么药品治疗);
“药品”相关的“药品”(可以治疗相同或相近疾病的药品);
“病症”相关的“病症”(相似或相关的病症);
通过“语义计算”,得到上述4种关系的相关度KR(X,Y),建立索引,由此完成自动构建 “医药知识图谱搜索引擎”,加上手机交互界面,形成“神机医药”APP。以下是具体步骤和方法。
1、抽取知识本体(实例),形成知识记录
构建知识图谱第一步是,定义“知识本体”,也就是根据知识的特点,定义存储知识记录的格式。
对同一类的知识K(X),可用多个维度来描述,在关系数据库RDB中也就是记录的字段变量:
例如,对“疾病”可有:症状、检验方法、治疗手段等字段;
例如,对“药品”可有:适应病症、用法、成分、副作用、禁忌、注意事项等。
可见,对于一类的知识本体,可用统一的格式来描述,形成格式化记录(知识实例),不同类型的知识,有不同格式的记录,在知识图谱中,每个K(X)知识节点,都是一个独立的知识记录。
2、知识记录
“神机医药”APP通过对自由格式网页处理,得到半结构化知识记录,其中包括两种知识本体:“药品”和“疾病”,有两种格式的知识记录,每个都是一条独立的“知识记录”。
3、计算相关性
用“内容相似度计算”,对“知识记录”进行相关性计算,得到“知识记录”之间的相关度KR(X,Y),也是“节点”之间的连接权重,是0 – 100%之间的小数。
4、非对称性
相关度KR(X,Y)具有非对称性,KR(X,Y)≠ KR(Y,X)。
也就是说,知识K(X)对知识K(Y)的关联度,与知识K(Y)对知识K(X)的关联度不同,需要单独计算。
5、构建“医药知识图谱”
通过“内容相似度计算”,得到“药品”、“疾病”知识记录的相关度,由此得到关系结构图(知识图谱)。
6、知识网络KN
每个知识K(X),都可能与很多其他知识K(Y)相关,相关度KR(X,Y)>0的知识形成“知识网络”KN(Knowledge Network)。
例如:在“图-3”中,有4个知识网络KN(i),i=1,2,3,4:
知识1、知识3、知识7,具有相关性, KN(1)= {知识1,知识3,知识7};
知识2、知识4、知识5,具有相关性, KN(2)= {知识2,知识4,知识5};
知识3、知识8, 具有相关性, KN(3)= {知识3,知识8};
知识4、知识6、知识7,具有相关性, KN(4)= {知识4,知识6,知识7}。
7、知识网络桥KNB
知识图谱最重要的用途是相似内容“推荐”,可根据知识之间的相关性进行智能化“推荐”,但这只能在一个“知识网络”KN(i)中进行,因为,只有在一个“知识网络”KN(i)中的知识节点具有“连线”,无法“推荐”其他“知识网络”KN(j)中的知识,由此形成了“知识壁垒”。
如何建立不同“知识网络”KN(i,j)之间的通道,打通“知识壁垒”?将不同的知识体系融会贯通,这就需要在各“知识网络”KN寻找通道。具体方法如下:
在各“知识网络”KN中,寻找相同的“知识”K(X),得到交集:
“知识交集”= KN(i)∩ KN( j ),
“知识交集”为不同“知识网络”KN( i - j )之间的连接“桥”,称之为“知识网络桥”KNB(Knowledge Network Bridge),KNB连接各个“知识网络”。
例如:在“图-3”中:
知识1、知识3、知识7,具有相关性, KN(1)= {知识1,知识3,知识7};
知识2、知识4、知识5,具有相关性, KN(2)= {知识2,知识4,知识5};
知识3、知识8, 具有相关性, KN(3)= {知识3,知识8};
知识4、知识6、知识7,具有相关性, KN(4)= {知识4,知识6,知识7}。
KN 1与KN 3存在交集KN 1 ∩ KN 3 = {“知识3”},KN 1与KN 3通过“知识3”进行连接,“知识3”是KN 1与KN 3连接的“桥”KNB(1-3);
KN 2与KN 4存在交集KN 2 ∩ KN 4 = {“知识4”},KN 2与KN 4通过“知识4”进行连接,“知识4”是KN 2与KN 4连接的“桥”KNB(2-4)。
8、知识融合
“知识网络桥”KNB连接不同的“知识”体系,因此,“知识网络桥”KNB可以打破“知识壁垒”,使不同体系的知识相互融会贯通。
科技领域很多重要进步,正是因为将其他“知识体系”的引入到本“知识体系”,推动技术进步。
9、知识系统组成知识神经元网络
首先,将众多分散、独立的“知识”连接起来,组成相互联通的“知识网络”KN。
其次,将众多的“知识网络”KN用“知识网络桥”KNB连接起来,组成“知识网络系统”KNS(Knowledge Network System),将分散的知识有机地连接起来,便于相关主题知识聚类和自动搜索。
在“知识网络系统”KNS中,每个问题的“解”都是一组“知识集合”组成的“知识网络”KN。
例如在通过“语义计算”,确定连接关系如下:
{ 药品1,药品2,病症3,病症5}关联,KN 1={ 药品1,药品2,病症3,病症5};
{ 药品2,病症1、病症2、病症3}关联,KN 2={ 药品2,病症1,病症2,病症3}。
在KN 1、KN 2中,都存在“药品2”和“病症3”,交集:
KN 1 ∩KN 2 = {“药品2”,“病症3”},
KN 1与KN 2通过“药品2”、“病症3”进行关联,KNB={药品2、病症3}。
从KN 1与KN 2的关联可知,在看似相互独立的知识体系之间,存在复杂的关联。人类的知识系统是由众多相互连通的“知识网络”组成得多回路复杂的知识系统,由此构成“知识神经元网络”。而恰恰正是因为在独立的知识之间存在复杂的关联,因此,普通人不经过长期的强化训练,很难形成解决具体问题的系统知识。
三、知识图谱搜索
“神机医药”APP是基于“语义计算”构建的知识图谱搜索引擎,在网上搜集了:
15606条“药品”信息;
14172条“疾病”信息;
5756条“症状”信息;
12万条“问答”信息。
。由于爬取网页信息本身不规范,信息不规范,因此,没有进行完全的规范“知识本体”设计(知识格式化)。
1、“语义计算”
构建知识图谱的第一步是“语义计算”。
(1)“药品”与“疾病”相关性语义计算
通过对15606条“药品”说明书文本“语义计算”,抽取对应“疾病”的语义;再与14172条“疾病”信息文本、5756条“症状”信息文本进行“语义计算”,得到:
15606
X (14172 + 5756)个“药品”与“疾病”、“症状”的相关度。
(2)“药品”与“药品”相关性语义计算
通过对15606 条“药品”说明书文本的“语义计算”,抽取对应“疾病”的“语义”,分别与其他“药品”信息进行“语义计算”,得到:
15606
X(15606 -1)个“药品”的相关度。
(3)“疾病”与“疾病”相关性语义计算
通过对14172条“疾病”信息、5756条“症状”信息进行“语义计算”,得到:
(14172 + 5756)X (14172
+ 5756 – 1 )个“疾病”的相关度。
(4)“问答”与“药品”、“疾病”、“疾病”相关性语义计算
通过对12万条“问答”,与14172条“疾病”信息、15606条“药品”信息、5756条“症状”信息进行“语义计算”,得到:
12万X(14172+15606+5756)个“问答”与“药品”、“疾病”、“疾病”的相关度。
2、构建“语义网络”
通过上述“语义计算”,得到“药品与疾病”、“药品与药品”、“疾病与疾病”、“问答与药品、疾病”相关度,由此构成医药知识相关“语义网络”。
3、医药知识图谱“神机医药”APP
在华为应用商店,搜索“神机医药”进行下载APP,安装后,在手机桌面出现“神机医药“图标,点击图标,进入“神机医药”APP。
点击搜索框,进入搜索页面,
选择“药品”或“疾病”,在搜索框内输入查询的关键词(或选择历史搜索关键词),搜索包含关键词的“药品”或“疾病”。
如,选择“药品”,在搜索框内输入“干眼症”, 搜索出“知识记录”文本中,包含“干眼症”的药品,
如,选择“卡波姆滴眼液”,屏幕上显示详细信息,
上面显示“相关药品”(关联药品)、“相关疾病”(该药品治疗的疾病)。这是通过“语义计算”得到“药品”与“药品”之间的相关性,确定了“卡波姆滴眼液”与其他“药品”的相关度。点击“相关药品”,
屏幕上出现与其相关的药品,其中,“复方门冬维甘滴眼液”、“七叶洋地黄双苔滴眼液”、“维生素C”、“鱼肝油”等,都是与“卡波姆滴眼液”治疗病症相关的药品。点击“相关问答”,屏幕出现:�关药品”,
四、智能问答
1、目前的“智能问答”
目前在各大“电商”网站上看到的所谓“智能问答”,其实没有任何“智能”,都是模式化问答。事先准备“问题”和匹配的“答案”,用户选择事先准备好的问题,计算机给出实现准备好的答案,没有任何智能而言。
2、“语义计算 - 知识图谱”与“智能问答”
“语义计算– 知识图谱”不同于各大“电商”网站上的自动问答。从“神机医药”APP可以看出,与现在各大“电商”网站上所谓的“智能问答”比较,存在以下区别:
(1)问题
目前,各大“电商”网站上所谓的“智能问答”没有任何“智能”而言,其中的“问题”,都是针对用户经常提问问题的整理、归纳,而用户提出的问题五花八门,如果不是事先准备好的提问,“智能问答”无法进行回答。
“神机医药”上搜集了12万个医生问答,但并没有像“电商”网站上所谓的“智能问答”给出12万个“提问”,而是根据用户当前阅读浏览的内容(语义),通过“知识图谱”,自动地给出相关的问答。
(2)答案
虽然搜集的12万个医生问答,都是医生根据用户的提问所做的回答,是“一对一”的问答,但“神机医药”通过对医生回答进行“语义计算”,抽取“语义”,再通过“语义计算”与“药品”、“疾病”、“症状”描述文本进行“语义计算”,得到相关性,可以将12万“医生回答”应用到:15606条“药品”、14172条“疾病”和5756条“症状”中,计算机可以自动回答提问的任何问题,而不是“一对一解答问题”。
从“神机医药”可以看出,“语义计算 - 知识图谱”可以做到真正的“智能问答”,无需实现准备模式化的提问、也无需事先指定回答,“知识图谱搜索引擎”可根据提问的只言片语(关键词),给出回答问题的“解集合”,再通过“知识图谱”的语义计算得到的“相关度”,迅速在现有回答知识中,最符合问题的回答。
六、结束语
《神机医药》app,通过“语义计算”,形成“语义网络”,进一步通过“知识网络桥”KNB打通不同“语义网络”,构建知识图谱搜索引擎。改变了传统“关键词搜索引擎”的结构,将用户输入关键词的搜索引擎“被动搜索”,变成了知识图谱的“主动搜索”,大幅度搜索提高了搜索效率,使搜索引擎更加“智能化”。
在“智能问答”方面,“知识图谱”可以根据语义计算,快速、动态地寻找最优答案,准确回答用户提出的问题。