今天参加了一次讨论会,一个主题是Social Network的search方法,另一个是关于本体中添加删除三元式时的一致性问题和环路解决方法。
我对这次讨论会的内容有一些想法,想法有几个方面,但我发现它们是有联系的
首先是关于推理的问题。在讨论会上提到Sesame在加入一个三元式的时候选取一些规则尽可能作一些相对有价值的推理,我想能不能反其道而行之:使得整个模型中的三元式的数量尽可能少,也就是尽力去除可以被其他现有三元式推理出来的三元式,使得整个模型最小化。也就是说,在每次添加新的三元式的时候,要做的不是推理出更多的三元式,而是看看有没有三元式可以删除,并尽可能这样做。一个例子:如果已经有A subClass B,A subClass C,那么新加入B subClass C时就可以去除A subClass C,因为它可以由另两个三元式推理得到。这样想的直接考虑是在应用中删除三元式时不存在一致性等种种问题,可以直接删除;相应的增加三元式时时间代价会大一些,但是空间代价小了。
然而问题就是表面上看直接信息量少了很多,可能应用于查询时的时间代价会很大,在查询时可能要做很多推理。但我觉得也许这是可以解决的,这是我的第二个想法,关于Social Network。可不可以将所有的本体中的所有的实体看成一个个结点,它们也许组成了一个Social Network。这个需要进一步论证是否符合Social Network的定义和相关概念。我先假定是符合的。考虑一个实际的查询,比如可能需要知道两个给定结点(实体)之间的关系(路径),不妨就采用穷举法,假定两个结点之间最短可以通过k个关系联结,假定每个结点的度数是a,那么穷举的推理相当于a^k数量级,这个数量级理论上是不可接受的,但是实际上可能是可以接受的,原因如下:首先两边同时进行,也许指数可以减半,仅需要a^(k/2)就可以解决;第二,因为Social Network有小世界的性质,那么平均两个结点可以通过大约6个关系就能连接,这样k通常是小于6的,这样开销大约是a^3以内(统计意义上的);另外,Social Network中,每个结点的度数是极其有限的,仅和有限的结点关联,典型的值比如100(我随意估计的),这样整个推理次数大约是10^6(请注意这个数字已经不是数量级,而是实际的次数),这个值可能仍然不能接受,但我认为是可以继续降低的,原因如下:
可以考虑Social Network中的社区的概念,每个结点更多的是和有限的结点关联,它们组成了社区,社区内连接比较密集,我的理解就是:在一个社区内部,彼此之间路径应当很短(否则就不叫社区了),比如大约1-2步就可以到达对方;社区间的联系是相对比较稀疏的,那么可不可能去管理社区间的关系(通过某种方式记录),也就是将关注的焦点抽象一下,在查询时先关注社区级别的关系:如果两个结点在一个社区中,显然查询是很快的;如果不在一个社区中,那么可以很容易找到社区间的关系,因为社区间的关系是很稀疏的,记录并提供合理和有效的索引也许是有可能的,这样建立社区间的联系以后再考虑社区内的联系,最终得到两个结点的关系,其实与讨论会上的所谓Social Netword的组织结构的search方式有类似。
没有考虑太仔细,我这方面基本功还很薄