摘要:
无论何时我们询问一个问题,都期望得到一个有价值的回复。不仅在会话中是这样的, 我们和信息系统交互时有同样的期望。尽管人们在设计数据库和知识库时通常都带有这样的目的,但是未必一定能够取得成功。事实上,数据库和信息系统通常很难使用,因为他们并不明确的尝试和用户协作。他们提供所获取的原始查询结果。这些结果通常不是最好的。它们可能是正确的,但是可能不包含用户真正需要的信息或者是空的。用户需要更多的或者与查询要求不同的信息。而且,这些系统还没有考虑模糊的查询。所以说它们缺乏灵活性。原因是因为查询只获取和给定的布尔查询精确匹配的元素。也就是说,如果对某个元素来说,查询为真,则其属于查询结果;否则,没有应答返回给用户。实际上,当查询失败时,返回给用户一个空应答。为了解除这个限制,已经开始研究将传统的查询概念扩展至协作应答。实际上,协作应答系统在90年代早期已经大量的兴起。这些系统旨在产生满足用户需求、设想和兴趣的应答。相对来说,含附加信息或者可选择信息的应答对用户来说可能更有用,更不容易误导用户。为达到这个目标, 一个查询应答处理应该和用户协作以便于找到他们寻找的信息。
假定向一个人类专家咨询一个问题。如果咨询没有答案或者答案中的信息完全不能用,我们不会简单的得到一个空应答。人类专家会尝试理解查询的要点,分析失败的原因,提供最接近的答案。受上述观点的启发,这篇文章的目标是开发具有这些特点的信息系统。我们提出一种和用户交互的方法来查找查询失败的原因并且提供可供选择的应答。这些应答和用户的原始查询接近,可以满足用户的需要。这篇论文中的查询是用形式化概念分析(FCA)和模糊逻辑建模的模糊集。一方面, FCA被认为是表达数据集中的逻辑蕴涵式、分析大量数据中潜藏的背景知识的有用工具。另一方面,模糊技术被证明在非精确数据建模和数据获取方面非常成功。首先,我们提出了一个将FCA和数据库结合的架构。 一个数据库的关系可以被看作是一个多值的上下文。 其实,形式化定义间的偏序关系允许从一个查询转移到另外一个查询,变得更普遍或者更具体。我们的方法利用导航来检测空应答的最小前提。在查询失败时,我们也利用概念框架提供用户最接近的子查询。事实上,最小的前提是对空应答负有责任的最小标准组合。为了产生这些前提, 我们首先检测由一个标准构成的前提。第二步, 我们确定拥有更多标准的前提。换句话来说,我们按照下面的步骤产生大小为i( 2 ≤ i≤ n-1)的前提:
产生的所有大小为i的标准组合。
从这些组合中选取不代表任何概念目标的大小为i组合。
删除最少包含一个以前获取的最小失败前提(size?i-1)的组合。
删除包含在大小为j>i概念目标中的组合。
将产生的组合插入到最小的失败前提中。
重复上述过程直至i= n-1。
产生近似的子查询包括概念的演化。对每一个概念, 目标代表了一系列的标准, 范围代表了一系列满足这些标准的对象。因此, 每一个产生的概念代表了一个包含最多查询条件的最接近的子查询。
我们的主要贡献如下:
生成一个和用户查询相关的概念框架,而不是整个的概念框架 (减少了框架建设的复杂性)。
检测空查询产生的前提。
产生没有空应答的临近子查询,子查询根据用户的满意度来定级。
提供的前提让用户了解和模糊条件不兼容的情况。因此,用户可以重新规划他的查询以来查找满足需要的答案。算法1的时间复杂度主要是基于产生所有标准的组合的时间复杂度。这部分的复杂度为 ,其中n 是 模糊条件的个数, p 概念的个数。整个算法1的复杂度是 。 算法2的时间复杂度是 其中 n是模糊条件的个数, p是概念的个数, s是对象的个数。
我们用C语言开发了一个支持灵活查询的原型系统。实验环境如下: Pentium Centrino Dual Core 2 GHz CPU, 3 GB 内存, Microsoft Windows XP。通过这些实验, 我们可以认为程序在我们的应用中非常有效。其中,我们的查询不包含太多的条件。假定两个算法的目标是改善查询响应的质量, 运行时间可以不考虑。我们设定从一个没有答案的查询开始。因此,程序的主要功能是寻找失败的原因并且给出最接近的答案,这些答案尽可能和查询标准相近。这并不意味着运行时间和用户的实际需求相差甚远。例如,我们考虑12个模糊条件,这比日常应用中的条件要多, 此时程序检测查询失败的原因大概只花1秒时间。未来的工作将集中在进一步改善现有方法,主要包括在查询中引入优先级、从数据库中推导出语义规则,以来帮助预测查询失败。我们还将改善算法的响应时间,以便于使其能够应用到大型的实时数据库中。