看到了包老师的那个帖子,很有启发。小弟最近也钻到这个迷魂阵里来了,就此谈谈自己的理解。
相比老包和南京猿人的深度,我做的东西要浅很多,只是用PROTEGE的OWL给一个系统做建模。这学期学了一些ONTOLOGY的内容,我也想说说自己的看法,着重说下ONTOLOGY和UML(OO)的区别。
这个领域叫KNOWLEDGE REPRESENTATION,或者叫ONTOLOTY(术语学),和NLP的联系很大,在生物医学术语方面的研究比较广泛。个人感觉它是联系自然语言和计算机语言的一座基于逻辑联系的桥梁。ONTOLOGY和它的一系列工具像PROTEGE,OWL,RDF,XML schema都是这个领域最重要的研究方法和工具。W3C公司在这个领域的研究最为显著(开创了OWL),而PROTEGE是MARK MUSEN最显著的杰作之一。
Ontology的形成基于一系列的演变。首先是在某一个领域的专有词汇的集合(controlled vocabulary),比如PROTEGE最常用的那个WINE的例子里有的wine,winery,white wine, French等等。其次是TAXONOMY,把这些有联系的词汇从逻辑概念的角度加以分类和分层(hierarchies),类似于UML里简单的CLASS DIAGRAM。再次是THESAURUS——在分类分层的基础上进一步完善结构,添加联系和一些属性。最后是ONTOLOGY,这是一个完善的知识体模型(specification of conceptualization,Logics+Taxonomy as backbone+attributes&relations+Instances)。
最开始觉得ONTOLOGY和面向对象没有什么区别,都是树形结构,继承什么的。后来看了一些例子,觉得这个模型还是设计的很有思想的。SEMANTEC WEB是一个比较新的东西,旨在建立网页上的逻辑链接,而不是仅仅现有的语义链接。这对于数据的整合和逻辑推理都有很重要的意义(data-about-data)。我们的一个例子是某一个网页的内容属于novel类,而novel又属于fiction类,这样通过这个语义网络的推理(INFER),建立起了这个网页和fiction的联系。另一个例子是同样一本小说有法语和英语两个不同的名字,原先的计算机语言无法识别二者的联系,但是一个SEMANTEC WEB可以通过逻辑内容的联系将二者合二为一。
ONTOLOGY和面向对象有很多类似也有很多不同。相比于OO,ONTOLOGY独有的东西包括:
(OO/Ontology)
Focus on class and data/Focus on meaning;
static and less flexible(OO)/dynamic(ONTOLOGY);
class fixed/change(edit) classes at runtime;
instance of same one class forever/membership of multiple classes changes over time;
Attr/Relations&Properties;
Defined locally to a class/independent of a specific class;
No hierarchies/Hierarchies;
For structuring convenience and object creation/to support inference。
另外,"ONTOLOGY DEVELOPMENT 101"里面的一个说法也很好,“OOP centers primarily around methods on classes-a programmer makes design decisions based on the operational properties of a class, whereas an ontology designer makes these decisions based on the structural properties of a class.”
对于OWL,最重要的东西应该是他在一般ONTOLOGY的模型基础上增加的REASONING机制。对于不同类的不同实例进行INFERRING,我想这是OO根本不可能做到的。
对于二者的混淆,我是这么想的:不同的目的,不同的工具,不同的过程,只是在实现的过程中有一些类似的方法和思路。
希望我的理解对其他初学者有帮助,也请前辈们多提意见。
[ 本帖最后由 koala 于 2008-3-13 09:39 编辑 ] |