开放世界语义对本体构建的影响

来源:互联网 发布:燕京理工学院网络 编辑:程序博客网 时间:2024/05/22 14:44

From orangebench(刘升平)

看了些关于用OWL构建本体的讲义和教程,其中都会提到OWL的逻辑基础描述逻辑中的推理是基于开放世界假设(Open WorldAssumption)的,从而在构建本体时要特别注意这点。因此,我小小的总结一下,但并没有深入去研究开放世界语义,故不能保证正确性,欢迎大家讨论。

当我们对现实世界的问题做形式化描述时,不可避免地掌握的信息是不完全的,例如,我们不知道Peter是否是个Student,但这个信息的确又是很有用的。一种常用的做法是采用封闭世界假设(Closed World Assumption, CWA),即如果我们在知识库中推不出来P或P的否定,就把P的否定加入知识库。有两种情况, CWA很有用. 一是可以当假设知识库中的知识是完全的时候.例如, 在数据库中, 如果学生表中没有Peter, 则认为Peter不是学生. 二是当知道知识库的知识是不完全的, 如不足于回答一些问题,但我们必须在不完全知识的情况下做出决定, 这时候CWA就有用了. 其实, 我们人思考问题也常常是这样的, 例如, [@todo]

<!-- /* Font Definitions */ @font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"Cambria Math";panose-1:2 4 5 3 5 4 6 3 2 4;mso-font-charset:0;mso-generic-font-family:roman;mso-font-pitch:variable;mso-font-signature:-1610611985 1107304683 0 0 159 0;}@font-face{font-family:"/@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-unhide:no;mso-style-qformat:yes;mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:12.0pt;mso-bidi-font-size:10.0pt;font-family:"Times New Roman","serif";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;}.MsoChpDefault{mso-style-type:export-only;mso-default-props:yes;font-size:10.0pt;mso-ansi-font-size:10.0pt;mso-bidi-font-size:10.0pt;mso-ascii-font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-hansi-font-family:"Times New Roman";mso-font-kerning:0pt;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:612.0pt 792.0pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:36.0pt;mso-footer-margin:36.0pt;mso-paper-source:0;}div.Section1{page:Section1;}-->我们人思考问题也常常是基于CWA的;比如我们定义了“eatInsect”的定义域为“Bird, “Bear Grylls”的类型是“Person”,然而描述“Bear Grylls”的时候也出现“eatInsect”属性;这时我们的第一反应是规则有错误,然而RDF会认为规则和描述没有错误,它会推出“Person”是“Bird”的子类,因为我们没有定义“Person”不能是“Bird”的子类。by 非烟飞雾

 

对不完全知识的处理的另外一种方法就是采用开放世界假设(Open World Assumption, OWA), 它和CWA相反, 对推不出来的命题就很诚实地当作不知道这个命题的正确与否, 这样的后果就是知识库中能推导出来的结论大大减少.

但在语义Web环境下, 因为Web的开放性, 相关的知识很可能分布在Web上不同的场所, 因此在语义Web上推理, 用CWA是很不恰当的.例如, 如果在一个知识库中只说了hasFriend(Peter, Tom), 如果采用CWA, 就会得到结论: Peter只有一个朋友.这当然是不合理的, 因为很可能在别的地方说了Peter还有其他的朋友. 所以, 如果要在语义Web中聚集不同来源的知识, 应该采用OWA.(有一种中庸之道: 局部封闭世界(Local Closed World), 这里不多说). 描述逻辑中的推理刚好是采用OWA的,所以它的确适合作为语义Web的逻辑基础.

OWA对本体构造有很大的影响, 因为OWA 认为, 没有显式说明的信息就是未知, 因此,我们在构建本体的时候, 要记住一个原则: “把你知道的全说出来”!

现在,我们看看怎样在OWL本体中说出那些你实际上知道, 但容易忘了说的东西.

1) 唯一名假设(Unique Name Assumption, UNA): owl:AllDifferent
逻辑中一般采用唯一名假设,即名字不同的两个实例是不同的,而OWL由于Web的开放性,很有可能不同的人对同一个实例给出的URIref不同,因此不能采用唯一名假设。这也是要有owl:AllDifferent的原因。因为在OWL中,我们要显式地说明哪些URIref代表的资源是不同的,如果用owl:differentFrom,要表示很多个URIref两两不同,非常麻烦,因此,就有了owl:AllDifferent。

注意: RACER 支持唯一名假设. 这点使得它不是很适合做SW上的推理. 当然, 新版本也许会改进.
2) 分离和覆盖: owl:disjointWith

在定义类的时候, 可能定义B和C都是A的子类, 这时候可能会忘了说明B和C是Disjoint的, 这个信息对公理中用了否定比较有用,因为这可以推出, B的实例肯定不属于C, 另外, 还一个容易忘的是覆盖公理(covering axiom).,即说明B和C的合取覆盖了A(即A是B和C的并的子集), 因为这可以进一步推出: 如果x是A的实例, 且不是B的实例, 则x是C的实例.
最牛的覆盖定理当然是说B是C的否定, 即B和C的合取覆盖了整个论域, 这样, 一个实例x不属于B则属于C.

3) 实例识别:owl:maxCardinality , owl:allvaluesFrom

OWA还有一个很坏的影响是对有些类, 你永远没法判定这个实例是否属于这个类. 例如, 我们定义类D是具有最多2个孩子的人, 现在有个实例y,知识库中说了y有两个孩子, 但我们能推出y是属于类D的实例吗? 不能! 因为采用OWA, 推理引擎会认为也许其他地方还会说y有第3个孩子,所以推不出y至多只有2个孩子. 类似的是OWL的属性限制allvaluesFrom, 因为你也无法保证 这个”all”能成立.

结论是: 如果你的应用中需要判定实例属于某个类, 谨慎使用owl:maxCardinality和owl:allvaluesFrom.

4) 封闭公理
OWA会导致一些麻烦, 原因是我们没有把”我们知道的全说出来”. 解决方法就是采用封闭公理(closure axioms), 把路子堵死. 下面有两种常用的封闭公理.

a).用allvaluesFrom 封闭 somevaluesFrom

先举个例子, 假如类A定义为所有孩子都是学生的人, 即 A= restriction(allvaluesFrom hasChild Student); 现在已知类B定义为有孩子是高中生, 有孩子是大学生, 即:

Class(B partial
Restriction(somevaluesFrom hasChild HighSchool ) )
Class(B partial
Restriction(somevaluesFrom hasChild College ) )

这时,我们能推出B是A的子类吗?

按照OWA, 答案是不能, 因为你没说 B的孩子都是学生, 你只说他的孩子有高中生,有大学生. 所以, 为了让B是A的子类, 你要把事情说死, 即加一个封闭公理:

Class(B partial
Restriction(allvaluesFrom hasChild unionOf(College HighSchool) ) )

即说明 B 的孩子都是高中生或大学生, 再加上高中生和大学生都是学生的子类, 我们才可以推出 B 是 A 的子类.

总结:
“A closure axiom on a property consists of a universal restriction thatacts along the property to say that it can only be filled by thespecified fillers. The restriction has a filler that is the union ofthe fillers that occur in the existential restrictions for theproperty”.

b)用cardinality =n 封闭 allvaluesFrom

上面提到如果用allvaluesFrom定义一个类, 则永远无法判定一个实例是否属于这个类, 封闭的方法就是加上一个基数限制. 如,定义类A是有3个孩子且所有孩子都是博士的人,这样如果实例a有三个孩子b,c,d 且b,c,d 都不是相同的人(AllDifferent),且b,c,d都是博士, 这样就可以推出a是属于类A了.

参考
[1] Ian Horrocks的关于构建本体的课程讲义
[2] DL handbook chapter 2: P26 2.2.4.4 Closed- vs. open-world semantics
[3] protégé owl tutorial http://www.co-ode.org/resources/tutorials/ProtegeOWLTutorial.pdf