1 查询三元组的构建
1.1 SPARQL查询语言
SPARQL提供了强大的基于图形匹配的查询功能:提炼查询结果(ORDER BY,PROJECTION,DISTINCT,REDUC-D,OFFSET,LIMIT)、可选匹配(optional)、值约束条件(filter)、替换匹配、以及直接回答YES/NO等其他形式的查询。最简单的图形模式是三元组模式与RDF的三元组类似,不同的是三元组模式允许查询变量出现在主体、谓词或者客体的位置上,三元组模式合并形成一个基本的图形模式,下面是一个本体三元组模型例子:
PREFIX dc:<http://purl.org/dc/elements/1.1/>
PREFIX :<http://example.org/book/ >
SELECT? title
WHERE{:book1 dc:title ?title}
SPARQL查询Q={V,P,DS,SM}可以分成四部分,V是结果形式,具体有:具体有SELECT,CONSTRUCT,DESR-IBF,ASK;P是图形模式;DS是数据源,可以有多个本体组建而成,在SPARQL中DS经常是可以省略掉的;SM是结果修改。
1.2 Stanford Parse
stanford parse是概率自然分析器,解决了自然语言查询中的分词、词性标注、语法分析、和短语识别等问题。例如"who reads the book"的树形结构图
1.3 建立查询三元组
查询三元组:根据语法树转换而来的三元组,其形式是<S,P,O>,由主、谓、宾三部分组成,他们都是关键字或者短语。主语和宾语都是名词性结构,谓语通常是动词、介词和动词结构。因此在抽取三元组时,可以先确定谓语和宾语再通过它们确定谓语,这种方法在实际操作中比较有效。抽取查询三元组的主要工作如下所示:
1)识别基本名词短语。在解析书中一个名词性短语被标记为NP,由于NP可以被嵌套,因此需要找出那些能够映射到本体中的名词,可以利用已经标注出来的词性和解析树的位置来确定。
2)找出中心名词。名词性结构的基本形式是【前置定于,中心名词,后置定语】,需要识别出中心名词。例如the book,中心名词为book。
3)找出疑问句。例如:what、who、how。
4)词语的规范化。a)次干提取。过去时、现在时、将来时都转化为现在时;复数转化为单数等。b)连字符号-和下划线_的复合词,进行拆分。例如,project-name或者project_name拆分为project name 。c)单位转换。last week转换为对应的时间。
2. 用户词典
用户词典主要用来帮助理解自然语言查询以及把他们正确的映射到本体实例中,字典主要由三部分组成。
1)本体实体。这是词典中最重要的组成部分,从本体中抽取出实体用来快速匹配,这些实体包含类(概念)、属性(关系)、实例(个体)。由于同一个实体可以有不同的名字,不同的名字可以表示同一个实体,因此可以考虑把他们存放在Hash表中。
2)通用词典。用来解决用户词汇和本体词汇的差别,可以利用英文worldNet、中文HowNet、维基百科等。例如:用户输入work而本体中只存在job;用户输入how long 而本体中只有length。
3)用户自定义词表。由于用户可能使用行话或者缩写等,因此只利用通用词典还远远不够。词典允许用户自定义同义词,常用的匹配词。用户还可以自定义规则,例如:人口密度=人口数/面积。通过这样的定义,系统即使碰到了新词也能够根据这种规则进行处理。
3.本体三元组映射
查询三元组并不能直接转化为本体三元组,主要原因有:1)查询三元组里面的词语都是用户自定义的词语,不一定是本体知识库里面的术语;2)查询三元组的结构与本体结构可能不同。因此需要利用用户词典与本体实体建立映射关系。
3.1 相似度计算
把用户的词汇映射到本体实体中,需要找到本体中对应的实体,目前主要由两种方法。1)形式匹配。利用字符串度量、编辑距离、启发式规则等找到形式上形式的词语。2)语义匹配。主要使用通用词典wordNet、HowNet等来查找同义词、上下位关系词等。语义匹配主要考虑语义相似度和相关度。语义相似度指概念词汇的可替换度和词义的匹配程度,例如“计算机-电脑”。语义相关度是指语义间的关联度,如“老师-学生”,其相似度小,相关度却很大。一般情况下,相似度和相关度成正相关。假设查询三元组中的词语为QT,进行查询扩展变为EQT。在本体中先找到形式相似的实体或者实例,然后再找语义匹配的实体或者实例。假设在本体中对应的词汇为ET,形式相似度为sim1,语义相似度为sim2语义相似度的阈值为α。因此查询三元组与本体三元组的相似度为:SIM=w1*sim1+w2*sim2,其中w1和w2为权值,并且w2>w1因此语义相似更为重要。
3.2降低模糊性
因为本体中的实例通过它所属的概念以及与其它实例的关系来描述,因此下面两个因素决定了一个查询变量的语义含糊性。
1)概念节点的深度决定泛化程度。例如:车比汽车含糊,因为车的深度比汽车低,因此它的泛化程度比较高。2)实例的关系:查询变量限制条件的多少,限制少的比较含糊,因此应该尽量返回具体的概念,且增加严格的限制条件。
3.2.1 节点的深度
由于节点的深度越大,概念之间的差别越小,因此概念也就越具体,而且由于子类继承了父类的特征,语义也比较丰富和具体。例如属性hasSibling通常不考虑性别,而子属性hasBrother只用来描述男性。因此在匹配时,深度越大其权重也越大,
深度权重(DepthWeight, DW)为:
其中 depth(node)表示节点 node的深度, α为调整参数, 根节点的深度为 0。
3.2.2 节点的宽度
一个节点的兄弟节点越少,则这个概念越模糊,因此其模糊性与兄弟节点的个数成负相关,设节点的模糊度为NA(Node Ambiguity);
NA(node)=β/(sibling(node)+1) (3) 其中 sibling(node)为节点 node的兄弟节点个数, β 为调整参数。
3.3 分值排序
本体映射除了考虑词汇和实体节点的相似度以外,还应考虑其含糊性,即实体节点的深度和宽度,因此其分值为:
Score=w1 ×SIM+w2 ×DW(node)-w3 ×NA(node)
这样分别计算出S,P,Q的分值。本体三元组的分值为:
ScoreSum =Score(S)×Score(P)×Score(O)
由于构建的本体三元组可能有多个,因此需要对ScoreSum进行降序排序,然后选择前K个。
3.4 主谓语顺序
在构建本体三元组时需要注意主语和谓语之间的顺序。例如:x有一个电话号码y可以表示成<x,phone_number,y>或者<y,phone_number,x>两种表示的区别在于主动形式和被动形式。
3.5本体推理
本体及其本体实例中,有很大一部分信息隐藏在关系中,没有明显表达出来。利用本体推理,能够识别隐藏在本体概念之间的关系。本体中的的基本关系有:partof(部分整体关系)、kind-of(继承关系)、instance-of(实例关系)、attribute-of(属性关系);基于本体上的关系的属性有:equivalence(等价关系),inherit(关系继承性),symmtry(对称性),transitivity(传递性)。有效地利用本体推理能够提高查全率和查准率并且能够发现潜在的语义冲突。
4 SPARQL查询语句
4.1 过滤结果
利用SPARQL提供的功能对结果从范围、数据类型、节点名字、定义域和值域等方面进行过滤和限制。利用filter关键字对绑定变量的值进行约束,从而限制查询的范围。约束条件是逻辑表达式可以和逻辑操作符&& || 组合使用。还可以结合正则表达式返回符合需要的结果,例如:检索含有“web”的title FILTER regex(? title,"web","i")。这些限制条件可以从相应的修饰成分中提取出来,例如:前置定语、补语等。
4.2 可选信息
查询时一些需要返回的数据可能不存在,而他们所在的数据元素中有其他需要返回的信息,此时可以通过可选查询信息进行查询,比如:
?person vcard FN ?name
OPTIONAL {?person info age? age}
4.3 特殊查询
1)否定查询,通过FILTER(? vary!=value)来实现。
2)最高级查询,包括最高级形容词和副词,通过orderby排序返回最前面的结果。
3)比较级查询,利用相应的比较符号,例如数字类型的利用“>”符号
4)and,or查询,目前还很难识别出自然语言中的相容和非相容与,可以利用UNION。
5.用户交互界面和结果显示
5.1 图形交互界面
当系统无法理解用户输入的查询时,将失败的原因告诉用户,例如未知词语、语法错误、本体中不相关概念等。当有多个匹配的本体三元组时,用户也可以进行选择或者增加一些条件进行筛选。用户交互界面如下图所示。
5.2树形查询结果
查询结果用树形表示,包括路径(从根节点到父节点),兄弟节点,子节点以及相应的同义词,这样用户能够清晰地知道查询的位置及周围的信息。格式为:path路径(Thing ->父节点->查询节点),深度值;兄弟节点:brother Node1,brother Node2……子节点:child Node1,child Node2……当深度值比较大时概念差别比较小,可以返回较多的相关信息。
6.实验与分析
实验采用protege构建本体,jena进行本体的读取和推理,SPARQL语言进行查询,stanford parse进行语法分析,实验的主要过程如下:
1)构建一个教育技术方面的本体,部分内容如下图所示
2)用户输入查询语句:“kind of OS”或者“what are the kind of OS”。系统经过处理,得到查询三元组、本体映射、本体三元组、SPARQL语句,如5.1中的图所示
3)
Path:Thing->EducationTechnology->Utility->Program->OperatingSystem, 4
Brothernodes:DevelopmentTool, EducationSystem,
ManagementTool, Virus
Subclassesorinstances:Windows, Linux
参考文献:
《基于自然语言理解的 SPARQL本体查询》 张宗仁, 杨天奇