从文本自动构建OWL本体的研究
摘 要:随着语义检索的发展,近年来涌现了许多基于本体的研究和应用,但本体本身仍离不开领域专家手工或半自动化的构建,成为了本体研究领域的一个瓶颈。因此,本文着眼于本体的自动化构建,提出了一种用FCA(形式概念分析)从文本中提取并自动生成符合W3C标准的OWL通用本体库的方法。解决了目前本体构建自动化程度低,领域依赖性强的问题,使得本体的发展和应用不再是空中楼阁。
关键词:本体;形式概念分析;本体描述语言
一、背景介绍
近年来,“万维网之父”Berners-Lee提出的语义网进行形式概念分析,得到如下图3的概念格:
图3 Live In Water概念格
自顶向下地考察这个概念格,为方便描述,称相邻两个节点中,位于上方的是父节点(直接超概念),位于下方的叫子节点(直接子概念)。图3为便于展示简化了概念格,只显示每个节点相对其父节点新增的属性和相对其子节点新增的对象。因此,不难看出最顶端的节点拥有所有对象但拥有的属性最少或为空,最底端节点拥有所有属性但对象最少或为空。这不难理解,因为概念格中的每个节点的含义是,该节点中所有对象所共有的属性,所以把越多对象放在一起,能找到的共同点(即共有属性)就越少。正好说明概念格结构与本体想要描述的客观现实是一致的。
我们按节点生成的次序将每个概念格节点标上序号,并作为其id存储到整个格
数组中。其中每个格节点存储的信息应包括:该节点的对象集E和属性集I,该节点新增的对象和属性,该节点的父节点id以及子节点id。得到这样的概念格后,还需理解格的语义信息,从中提取本体要素,并输出生成OWL描述的本体。
三、从概念格到OWL本体
3.1 OWL介绍
OWL(本体论Web 语言,Ontology Web Language)是W3C推荐的本体描述语言的标准。 其基本元素有类、属性和实例。
综上所述,得到概念格至OWL本体的生成转化算法:
for (i=0;i<length of lattice;i++) { //遍历每个格节点
//输出类及其子类
fprintf(outputFile, "<owl:Class rdf:ID=/"_%i/">n", i);
sup = getFirstSet (supC); //获取第一个直接超概念
while(sup != -1) { //判断是否还存在直接超概念
fprintf(outputFile, " <rdfs:subClassOf rdf:resource=/"#_%i/"/>n", sup);
sup = getNextSet(supC, sup); //获取下一个直接超概念}
fprintf(outputFile, "</owl:Class>n");
//输出该类的属性
if((atr = getFirstSet(newAtrs))!=-1) //判断该节点是否有新增属性
fprintf (outputFile, "n");
while (atr != -1) { //若存在新增属性,则将新增属性作为该类的属性输出
fprintf(outputFile, "<owl:ObjectProperty rdf:>n", atr);
fprintf(outputFile, " <rdfs:domain rdf:resource="#_%i"/>n", i);
fprintf(outputFile, "</owl:ObjectProperty>n");
atr = getNextSet(newAtrs, atr); //获取下一个新增属性}
//输出该类的实例
if((obj = getFirstSet(newObjs))!=-1) //判断该节点是否有新增对象
fprintf (outputFile, "n");
while (obj != -1) { //若存在新增对象,则将新增对象作为该类的实例输出
fprintf (outputFile, "<owl:Thing rdf:/>n", obj);
fprintf (outputFile, "<owl:Thing rdf:about="#%s">n", obj);
fprintf (outputFile, " <rdf:type rdf:resource="#_%i"/>n", i);
fprintf (outputFile, "</owl:Thing>n");
obj = getNextSet(newObjs, obj); //获取下一个新增对象}
}
4.1 实验结果展示
经过FCA处理和OWL转化,得到Live In Water的本体片段如下:
….
<owl:Class rdf:>
<rdfs:subClassOf rdf:resource="#_3"/>
</owl:Class>
<owl:ObjectProperty rdf:>
<rdfs:domain rdf:resource="#_6"/>
</owl:ObjectProperty>
<owl:Thing rdf:/>
<owl:Thing rdf:about="#Bean">
<rdf:type rdf:resource="#_6"/>
</owl:Thing>
….
为可视化查看生成的本体,我们将Live In Water本体的OWL文档导入由斯坦福大学的Stanford Medical Informatics开发的一个开放源码的本体编辑器Protégé软件中,以便作进一步评价和修正。通过点击Protégé中的Properties标签可以查看类所具有的属性。此外,用OWL Viz插件还可图形化展示该本体结构,但如图4所示,只显示类名,属性和实例不可见。可以看出此时的本体与之前的概念格结构如出一则。说明本体的转化与概念格的语义是一致的,但由于类名只是简单地用节点的序号表示无实际意义,所以该本体仍待改进。
4.2 本体修正
通过查看类的属性和实例,根据类所在的层次,自顶向下,借助领域专家或知识库的帮助,不难对类名进行标注。如:节点_6,它是TerrestrialPlant(陆生植物)的子类,相对其父类新增的属性是Dicotyledon(双子叶的),因此推测该类描述的是陆生双子叶植物,再根据其实例Bean(大豆),将其类名精确到Legumes(豆科)。由于Protégé对中文图形化的支持不理想,且考虑到数据本身为英文,故对类名的标注仍用英文。然后,去除一些无意义的节点,例如:对象集为空的节点_18。得到如下图5语义信息丰富明确的Live In Water本体。该本体描述了生物有机体(Organism)的粗简分类,从生长环境的角度分为水生(AquaticOrganism)和陆生(TerrestrialOrganism),从是否能动角度分为植物(Plant)和动物(Animal)……如此交错划分直至豆科(Legumes)、禾本科(Gramineae)、哺乳动物(Mammal)、两栖动物(Amphibian)等具体的科目为止。使用该方法生成本体,解决了手工构建本体时对同一个类进行不同角度的划分的层次问题,以及一个类隶属于多个父类时的交叉包含问题。
该本体构建方法的时间复杂度主要依赖于建格算法的时间复杂度,目前最快的建格算法可以达到随属性个数线性增长的速度。由于本体一旦构建完成就极少修
改,对时间复杂度要求并不高,故不多加分析。
4.3 本体语法检查
最后,经racer推理机的一致性检查,该本体不存在语义冲突。
至此,我们得到了语义完整正确的Live In Water本体,完成了从形式背景数据到OWL本体的转化。配合之前提到的自然语言处理工具Parser对普通文本进行语法分析和提取形成形式背景,辅以少许的类名标注,便可实现从文本到OWL本体的自动构建。
五、总结与展望
本文提出了一种本体自动化构建的方法。通过自然语言处理工具从文本中得到形式背景,经FCA方法从形式背景得到概念格,又通过一定的逻辑规则将概念格转化输出为OWL本体,最后在Protégé工具中对生成的本体进行类名标注,得到语义丰富满足逻辑推理的本体,为进一步进行各种诸如语义检索、知识管理、数据挖掘等的智能处理奠定了基石。
该方法相比其他本体构建方法的优点在于,首先,它能处理非结构化文档,数据来源丰富;其次,它能自动生成OWL本体,虽然类名的描述不够精确;最后,它解决了同一层次上不同角度的分类问题及类之间交叉隶属的复杂问题,这是本体构建工程师最常面临和最易产生分歧的地方。
不过,该方法在类名的获取方面仍需改进,类名的手工标注降低了该本体构建方法的自动化程度,下一步的研究将通过专业词典或领域知识库的自动匹配来完成类名自动标识别和标注。进一步提高该本体构建方法的自动化程度,从而真正意义上实现本体的自动构建。
综上所述,本体的自动构建是语义检索等基于本体的研究和应用的基石,具有广阔的研究空间和重要的研究意义。
参考文献:
Christian Lindig. Fast Concept Analysis. April 21, 2002
上一篇:电视画面的编辑艺术