专利名称:一种高效的数据驱动理论修正系统的制作方法
技术领域:
本发明涉及理论修正系统的一部分,此系统给出了一个产生具有最高精度的理论的修正。更具体地,本发明涉及高效地使用一套固定的注解会话转录(session transcripts)和一套固定的可能的理论到理论修正操作符来修改给定的理论的系统,此给定的理论编码为一个错误层次(fault hierarchy),从而形成一个具有最理想精度的新理论。
许多专家系统使用一错误层次来对依据一组所报告的症状测试值的装置提出修补。遗憾的是,如果它们的这种基础层次是不正确的,那么这些种系统就可能又回到错误的修补。一种理论修正系统使用一个带标记的会话转录C(每一转录包括由该专家系统给出的对测试的答案及由人类专家提供的正确的修补)来修改不正确的错误层次,以生成一个更精确的新层次。典型的修正系统将初始层KB与它的每个相邻层N(KB)={KBk}进行比较,其中KBk是对KB进行一个简单的修正而形成的,例如去掉一对错误节点之间的连接,或者改变考虑某些错误节点的顺序。如果KB*对C的经验精度大大高于KB的精度,则这些修正系统将从KB上升至相邻KB*∈N(KB)。
在机器学习文献中描述有许多理论修正系统。其大多数与本发明类似使用一组变换以从一种理论转变成另一种理论。然而很多其他系统则集中注意力于霍恩子句知识库(Horn clause knowledge bases)或判定树;不是很适于展开应用系统的表示法。本发明的一个目的是使用广泛展开的错误层表示法。而且,现有的理论修正系统建议的修改可能产生会被本领域专家否定的理论。本发明的另一个目的是建议保留错误层次的结构的修改,这样就很可能被本领域专家接受。最后,这些现有技术系统假定用来确定哪个知识库最精确的训练数据(即注解会话转录)将包括对所有相关测试的答案。在许多标准情况下这是不现实的,在这些标准情况下,每一个训练事例仅包括相对于一特定理论得到答案所需要的最小量信息。相比之下,本发明的DELTADELTA系统是设计来测定任何理论的精度,即使是用不完全的数据来进行。
而且这些系统很少考虑计算效率。特别地,实现爬山法(hill climbing)的每一步的明显的方法包括了第一步经验地对整体的一组情况报告来求出初始KB及每个KBi∈N(KB)。可是,对于单个报告来求出单个层所花的代价很高,而且更糟的是其可能有大量的报告和大量的相邻层。本发明的一个目的是提供一个高效的方法来确定哪个KBi∈N(KB)具有最高的经验精度,如果该精度大于KB的精度。
本发明是一个计算机系统,称作DELTADELTA,它取一个初始错误层KB0和一组注解会话转录C={<πj,rj>}作为输入,其中πj包括对该专家系统提供的所有测试的答案,并且正确的修补rj由人类专家提供。本发明有一组专用的修正操作符T={θi},这里每一个θi∈T将一错误层KB映射到一稍微不同的层θi(KB)。这种修正的错误层θi(KB)称为KB邻层。所有KB的邻层的集合,N(KB)={θi(KB)},是KB的邻域。
本发明使用T来从初始错误层KB0经过连续具有超过C的较高经验精度的连续层KB1...KBm进行爬山过程;最终层KBm在由修正操作符所定义的空间中为局部最佳。在每个阶段,为了从错误层KBk进到它的邻层KBk+1,本发明必须求出KBk对C的精度,同时求出每个KB′∈N(KBk)的精度。令KB为经验精度最高的层。如果此KB*比KBk更精确,则该KB*层为新标准,记为KBk+1,并反复进行理论修正过程,寻找此KBk+1的对于事例集合C比KBk+1更为精确的相邻层,并如此进行下去。否则,如果没有比KBk更精确的KB′,则爬山过程将返回此KBk并结束。本发明不同于美国专利中描述的Delta系统之处在于提供了一种高效装置来求出一组知识库KB′∈N(KBk)的精度。
如果带标记的会话转录C={<πj,rj>}是完备的(即每个Cj∈C包括对KB中每个可能的测试的答案),则可直接求出KB对C的经验精度,然而实际上,C总是不完备的,因为每个πj仅包含一个很小的KB中的测试值的子集。本发明的理论修正系统提供了一种求出KB和每个KB′∈N(KB)的经验精度的方法,即使在C是不完备的时候。
而且,本发明的求值器(在理论修正系统内)提供了一种高效的求出KBk及每一个θi(KBk)的方法,以确定是否有θi(KBk)比KBk更精确。它利用了一些关键的观测结果。第一,由于本发明中使用的将一层映射到其相关层的每次变换只对该层进行局部改变,所以对任一事例,将只产生较小的并容易计算的影响;第二,大多数变换对很多事例不产生影响;最后,可以根据任一事例,给出对一知识库可以变化的精度大小的界限,这意味着可用分支界限(branchand-bound)技术来避免计算不是最佳的不同层的精度大小。由于这些原因,直接分析就使该系统避免了大量的用蛮力的(brute-force)经验计算。
图1表示一个利用本发明的总体理论修正任务的系统。
图2表示本发明的一个实施例应用的一个错误层(KB0)的结构。
图3表示各节点是相关的,即使各相异测试是独立的,ACCNODE*将解决这个问题。
图4表示父与子节点间的依赖关系,这会导致ACCNODE*子例程产生错误应答。
图5表示本发明的一个实施例应用的初始层KBbefore和相继的层KBafter。
图6表示在理论修正过程中由任一单步所取得的信息。
图1表示总体理论修正任务,此总体任务在第08/583,249号美国专利申请中也有描述。其名称是“使用专家意见来修正诊断专家系统错误层次的Delta学习系统(The Delta Learning System For Using Expert Advice To ReviseDiagnostic Expert System Fault Hierarchies)”,申请日为1996年1月5日,转让给了与本发明相同的受让人,这里用作参考。给定一个知识库11KB和使用者反馈(一套训练示例,每一个会话转录12由一个正确的答案作注解),则理论修正系统13产生一个新的知识库KB′,此知识库对于这些训练示例具有更好的性能。更详细地,会话转录12在将专家系统给现场用户15使用之后进行收集。每个转录12将包括由该专家系统14要求的对测试的答案及由该专家系统14建议的修补。在适当的时候(如给出的修补是不正确的),本领域专家16则对这些转录进行注解以指示错漏的测试及适当的修补。该理论修正系统13(如本发明)使用这些注解的转录作为训练数据来对知识库11提出修正。最后,本领域专家16评估这些修正以决定是否将其结合到知识库11中,然后可对知识库11进行重新利用。
目前使用的许多专家系统,根据一组报告的症状,使用一错误层来给一个设备提出一个修补。遗憾的是,由于这些基础设备的改变,由于设备的使用年数及新设备的安装而产生的新的错误分布,也由于原来的知识库中的错误,所以,这些提供的修补不可能是正确的修补。“理论修正”系统使用一组“带标记的会话转录”来修改不正确的错误层以产生更精确的新层。由于没没有有效的算法来保证找到全局最优层,所以许多方案以爬山法过程来实现它的理论修正系统,爬山法是以一些连续的步骤来爬向精度为局部最优的层。在每一步中,每个这种系统计算相对于给定的带标记会话转录的集合C的当前层KB和KB的每个相邻层N(KB)={KBk}的经验精度,其中每个相邻层KBk∈N(KB)只是对KB稍加修改。然后该理论修正系统选择具有最高经验精度的相邻层KB*∈N(KB)。并且如果KB*的精度大于KB的精度,则理论修正过程反复进行。它进而比较KB*和它的相邻层,并爬到任何一个更好的层。如果带标记的会话转录C={<πj,rj>}是完备的(即每个Cj∈C包含KB中每个可能测试的答案),就直接求出C上的KB的经验精度。然而实际上,C通常是不完备的,这是因为每个Cj仅包括一个KB中的测试值的小子集。本发明的理论修正系统提供了一种对相对于给定的一组带标记会话转录的错误层及其每个相邻层的经验精度进行求值的方法,即使是在转录是不完备的时候。
本发明提供了一种高效的方法来求出相对于一组给定的带标记情况报告的错误层及其每一相邻层的经验精度。本申请将提供本发明的结构,描述基本的专家系统的操作过程,并总结其理论修正任务,以下将描述为此任务而实现理论修正系统的方法首先,总结明显的穷举算法,然后,提供导致一个更高效的“数据驱动”理论修正系统的原理方法,最后描述本发明的DELTADELTA算法。
下文给出两个错误层及问题事例的结构,然后描述一个以错误层为基础的专家系统是如何工作的在某一事例的上下文求出一个层以产生一个修补。每个错误层KB=<N,E,Ts,R,t(·),r(·),child(·,·))是一个直接非周期性森林(directed-acyclic forest)<N,E>,其结点N代表错误,其边缘E连接错误与从属错误。每个节点n∈N用测试t(n)=t或t(n)=t作标记,其中t∈TS。而且,每个叶节点也用一个“repair”,r(n)=r∈R作标记。每个节点下的弧是有序的;child(n,i)表示“n的第i个子”。为解释方便,用kN→Z+函数将每个节点映射成它的子数目。用lN→Z+函数将每个节点映射成它的父数目。
例如,考虑图2所示的层,这里与节点X相关的测试为TX。由此,与节点A相关的测试为TA,等等。表达方式rX是标记有关叶节点X的修补。因此,与节点D相关的修补头rD,其测试为TD。A的子(Children)按顺序为C,D及E。由此,Child(A,1)=C,Child(A,2)=D及Child(A,3)=E,这里k(A)=3,类似地,l(A)=1。
应用KB层的专家系统,称为SKB,在运行时会向用户提出一系列的问题,这些问题符合深度优先,从左到右、无回溯遍历的(no-backtracktraversal)(部分的)KB结构。这里,SKBo从根开始,提出与那个节点相关的问题;这里“TZ为真?”如果用户回答“是”,则SKBo往下去考虑Z的子,按从左到右的顺序,接着问“TA为真?”。如果用户回答“是”,则SKBo往下去考虑A的子。如果用户对Tc回答“否”。SKB0将继续到C的兄弟D,问关于TD的情况。假定这里用户回答“是”,则SKB0将返回到与叶节点D相关的修补,即rD。相反,如果用户对TD回答“否”,SKB0就接着问TE。如果回答“是”,SKB0就返回到rE。否则,如果还是回答“否”,SKB0就返回到“未找到修补(NO-Repair-Found)答案,r⊥。注意,SKB0不再继续到B;对TA回答“是”表示用户仅考虑此节点下的测试及修补。
表1表示本发明的一个实施例的子例程EVALKB和EvALNODE。表2表示本发明的一个实施例的子例程ACCKB。
不考虑实际用户交互作用的细节,每个“总共问题事例(toral problem in-stance)”是一个赋值πTS→{+,-},表示将每个测试映射成{+,-}之一,这里“+”表示测试被证实(通过),“-”表示测试未被证实(失败)。给定一个事例π,SKB就返回一个修补r∈R,记为EVALKB(KB,π)=r。这里的r是使用表1所示的子例程EvALNode,由EVALNode(ROOT(KB),π)返回到的值。其中nroot=ROOT(KB)是KB的根。在调用EVALNode时,假定与nroot相关的测试已经被证实即其π(t(nroot))=+。此测试t(nroot)视为症状或触发信息。在测到这个测试值后,SKB仅考虑使用这个子树。在处理下面定义的子例程ACCKB时,假定此根(root)的测试已经被证实。
对事例π,KB层的精度是
这里,对此事例的正确答案是rcor∈R。(此rcor修补通常由人类专家提供)。一般来说,这样一对<π,rcor>将称为“带标记的(全部)问题事例。对于一组带标记的事例(a.k.a.会话转录)C={<πi,ri>}i,KB的(经验)精度是acc(KB,C)=Σ(π,r)ϵCacc(KB,(π,r))---(1)]]>其平均精度为此值除以示例数,|C|。
这些计算假定SKB总可得到对相关测试的答案,在理论修正的上下文中这不总是真的。这里,理论修正系统可能仅知道所需的某些答案。为了便于我们考虑在这样的上下文中一专家系统可能产生的结果,我们应用一个“部分问题事例”πTS→{+,-,?},其中“π(t)=?”表示测试t的值未知。
每个这样的部分事例π实际上与一些总体事例π′相对应,其中某些测试值没有得到。这一点更精确地讲,只要π(t)是绝对的(即不为“?”),如果π′与π一致,就称总的问题事例π′ TS→{+,-}是π的完备π′使π完备,iff[π(t)≠?π′(t)=π(t)]由此,总的事例πT1={TZ/+,TA/+,TB/-,TC/-,TD/+,TE/+,TF/-}是以下部分事例的完备πP1={TZ/+,TA/+,TB/?,TC/-,TD/+,TE/?,TF/?}。设complete(π)={π′TS{+,-}|π′completesπ}表示使一给定的部分事例完备的总的事例集。
一般来说,已观测的部分事例对应于总的事例π′∈Complete(π)的概率Pr[π′|π]依赖于每个未观测的测试t(即其中π(t)=“?”)具有特定值π′(t)的概率。这里,已观察的πP1对应于实际总体πT1的概率依赖于TB=-,TE=+及TF=-的概率。假定这些测试是不相关的(互不相关及上下文互不相关),这即表示这种条件概率可用概率函数pTS→
来表示,其中p(t)是未观察的测试t将接下去进行的概率,只要它已被运行及报告。
注意,每个π′∈Complete(π)有一个相关的修补,rπ′=EVALKB(KB,π′);我们因此可使用p(·)值来计算SKB0将返回每个rπ′的概率,这里给定已观察值π。一般情况下,我们需计算SKB0将返回正确修补rcor的概率Pr[SKB0return rcor|πobserved]([SKB0返回rcor|π已观测])。因为在π是总体事例时此量对应于acc(KB,<π,rcor>),所以一般情况下acc(·,·)可扩充为这个概率值,即使是在π为部分事例时。(函数p(·)隐含在acc(KB,<π,rcor>)描述中)。
表2所示的子例程ACCKB对于部分事例π计算精度值。无论在什么时候,只要与节点相关的测试是独立的。即只要确认一个节点测试t(n)的事件是独立而不必考虑其它节点t(n′)是否是独立的,它都返回到正确值。然而,并不总是这种情况。如果所有的节点都用不同的测试作标记,(例如n≠n′暗示t(n)≠t(n′)),那么只要这些测试是独立的,这种条件就应满足。可假定满足此条件。但是,即使这些测试是独立的,而如果不同的节点用相同的测试作标记,那么这种独立节点条件就不能满足。例如,参见图3所示的结构,其中n1=child(n,1)用测试t1作标记,n2=child(n,2)用测试t1作标记并且n3的修补为正确的rcor;还假定SKB以概率1已达到并越过此顶点n(即已知接着进行to测试)。这里,ACCKB将计算到达n3=child(n,3)的概率为(1-p(t1))×p(t1),其给出的成功概率为p(t3)×[(1-p(t1))×p(t1)]。当然,这种事件的实际概率为0。
然而,对于一般的dag-structures(dag结构),计算达到任何特别修补的概率并由此计算acc(KB,C)的任务是NP-hard(很难的),不可能有一种高效的算法能在任何场合下计算正确的答案。相反,在许多典型情况下,很多算法可用来正确地进行运算。
表3表示本发明的一个实施例的ACCNODE*子例程。
因此,本发明应用了稍有扩展的ACCKB子例程,称ACCKB*,如表3所示,其保留了兄弟节点之间的依赖关系,并以此正确解决前面提到的情况。然而,它没有保留其他依赖关系。即如果说n和n1=child(n,1)都用t1作标记,其中π(t1)=“?”如图4所示,则它不可能返回(retum)正确的答案。这里,与ACCKB类似,ACCKB*可得出假定其达到n的情况下,达到rcor修补的概率为p(t1)×p(t1);简单地,过程(course)的正确值简单为p(t1)。
表4-1和4-2表示本发明的一个实施例的DELTADELTA子例程。
下面描述理论修正任务,主要的DELLADELTA例程(表4-1和4-2)用初始层KB0和一组带标记会话转录C=(Ci)作为输入。DELTADETA使用了一组变换T={θK},其中θK将一层映射成另一层。DELTADELTA考虑四种的修正操作符-每个Deletepar,n(删除)修正操作符删除节点par与其子节点n之间现存的链接。因此,DeleteB,E(KB0)是一个层KB1,包括所有KB0的节点和它的除从B至E的弧外的所有弧(arcs)。由此,在KB1中,child(B,1)=F,注意此删除过程隐性地重新定义了child(·,·)函数。
-每个Addpar,n,i(增加)修正操作符在par和n之间增加一个新链接、即par下的第i弧。由此,层KB2=AddA,F,2(KB0)包括KB0中的所有节点和弧以及在<A,C>之后和<A,D>之前得到的从A至F的附加弧。从而,在KB2中,chold(A,1)=C,child(A,2)=F,child(A,3)=D,child(A,4)=E,注意,DeleteA,F(AddA,F2(KB0))≡KB0。
-每个Movepar1,par2,n,i(移动)修正操作符删除par1和n之间现存的链接,再然后从par2至n增加一个链接。作为Par2下的第i弧,从而Movepar1,par2,n,i(KB)=Addpar2,n,i(Deletepar1,n(KB))。
-每个SWitchpar,n1,n2(交换)修正操作符交换从par至n1的链接和从par至n2的链接的顺序。注意,每个Switchn1,n2,par修正操作符最多对应于两个Move(移动)修正操作符。
图5表示对错误层KBbefore应用AddA,B,1修正操作符的结果。注意每个操作符都有一个相关的操作符可消除(undo)此操作符的影响。例如应用图5的DeleteA,B操作过程给KBafter,会将错误层恢复为KBbefore中。假设N(KB)={θ1(KB)|θ1∈T}是KB的相邻层的集合。
DELTADELTA用一个特定的知识库KB_i来开始每一个爬山步骤。然后要确定是否有任何KB′∈N(KB_i)比KB_i更好;即确定在带标记事例的集合C={<πj,rj>}上,是否有任何KB′具有更高的经验精度。(如果是这样,则DELTADELTA将从KB_i爬到具有最高经验精度的KB*∈N(KB))。
计算这种最优KB*实际上需要获得{(acc(KB,Cj)}Cj∈C的|C|值以计算acc(KB,C),还需要对每个θi∈T和C中的每个Cj计算{acc(θi(KB,Cj)}的|C|×|T|值,以计算{acc(θi(KB),C)}i的|T|值,然后确定这些值中的哪些超过acc(KB,C)(如有的话)。用于这种任务的一个算法应先装入KB层,然后用结果的SKB来对每个(πj,rj)∈C求得EValKB(KB,πj),进而先计算acc(KB,πj)的值,然后计算他们的总和acc(KB,C)=∑jacc(KB,<πj,rj>)。然后要用第一修正操作符θ1作用于KB来建立KB1=θ1(KB)。然后装入此层以获取SKB1,并再次考虑|C|事例{<πj,rj>}以计算acc(KB1,C)。接下来,将产生KB2=θ2(KB)。并遍历所有的|C|事例来产生acc(KB2,C);并对所有的|T|变换这样做。实质上,此过程包括相继计算图6所示矩阵的每一行。此修正算法然后确定这些KB*=argmaxi{acc{KBi,C}}中最大者,如果acc(KB*,C)>acc(θi(KB,C)则爬到这一KB层。
这就需很高的代价,因为(1)计算每个acc(KBi,<πj,rj>),需要对一个事例求出一层,这是很费时的;而且更糟的是(2)|T|和|C|都是很大的,例如,在一次研究中,经常发现有|T|≈10,000这样的值。
提高效率有两种基本的方法第一种方法是求出{acc(θi(KB),Cj)}i,j入口的更少部分;以下是这种做的三种技术。第二种方法提供一种更有效的方式来计算此量。由于下面解释的原因,我们实际上使用等效值diff′(θ,C)=acc(θ(KB),C)-acc(KB,C)Diff(θ,K)=∑j=1..kdiff(θ,Cj)此即在事例C上,θ(KB)和KB之间的精度差。(代表K个事例后的变换的θ(KB)知识库的相对分值),计算DELTADELTA的系统如表4-1和4-2所示。
第一种方法,称为RTI,根据所考虑的事例<πj,rj>限定变换。此方法利用正在考虑的特定的一组变换。这通过观察来完成,即对于几乎每个πj,对于大量的θi,acc(θj(KB),<πj,rj>)的值都等于acc(KB,<πj,rj>)。这表示大多数变换θi并不影响在一个事例上的一层是否正确。作为一个示例,考虑KB0层(图2)和证实(confirm)t(Z),t(A),和t(D)和非证实(disconfirm)t(C)的部分事例π1={t(Z)/+,t(A)/+,t(C)/-,t(D)/+};这里,SKB0返回rD=EVALKB(KB0,π1)。(注意,SKB0仅关于这4个测试提问,并仅记录它们的值,其他测试不再被提问,因为在这里它们的值不相关;因此,π1将每个其他测试映射成“?”)。现在,考虑删除<B,E>弧的DeleteB,E变换并观察到由于在曾达到B之前,原来层KB0达到其答案(rD),所以新层KB1=DeleteB,E(KB0)将达成相同的判定,这里为rD。由于EVALKB(KB0,π1)=EVALKB(KB1,π1),显然acc(KB0,<π1,r>)=acc(DeleteB,E(KB0),<π1,r>)。(注意,这并不依赖于rD是否过去是正确的答案如果KB0对π1是正确的,则KB1正确;同样,如果KB0对π1不正确,则KB1不正确)。
现在考虑其他删除。例如删除<B,F>或<A,E>弧;通过上面的讨论,我们立即可知acc(KB0,<π1,r>)=acc(DeleteB,F(KB0),<π1,r>)=acc(DeleteA,E(KB0),<π1,r>),注意删除<A,C>不产生影响,因为到底C节点是非证实(disconfirmed)的。(这里,由于我们仅考虑该层的精度,并不是其效率,求出额外的TC测试不是出发点)。很清楚,这里只有删除<Z,A>和<A,D>是可能产生一个差值(即,产生一个层KB′=Delete(KB0),其对π1的精度可能不同于KB′0的精度)的删除。(当然,仍可能有acc(DeleteZ,A(KB0),<π1,r>)=acc(KB0,<π,r>)。例如,如果为正确修补rc,则两个系统将都会具有0的值。如果在初始层中有几个路径能导致相同的正确的节点,或者如果此层包括具有相同修补的不同节点,则此情况也会发生)。
增加新链接的类似要求也会被考虑,由于SKB0从未达到B,所以包括从B到任意点的新链接的新层可能在事例π1中返回相同的rD,即对任意节点X1和索引(index)X2,有acc(AddB,X1,X2(KB0),<π1,r2>)=acc(KB0,<π1,r2>)。类似地,由于SKB0降至A的第二子点,所以对任意新子点X,AddA,X,3也无影响。如果我们从A到某个其他节点,假定是W增加一个链接,如果不管在何处AddA,W,i增加此新链接W的测试失败(即如果π1(t(W))=-),则也没有影响。这里,可能产生差异的唯一的增加变换Add是这样的一些变换它们通过从可达到的节点(如Z或A)降至可证实的节点从而产生新层KB2=Add(KB0),这些新层引起SKB2采取一个不同的路径。类似地,大多数移动(Move)和交换(Switch)变换也没有影响。特别是,只要Deletepar1,n和Addpar2,n,i无影响时,Movepar1,par2,n,i肯定是无影响的。
更精确地说,DELTADELTA将只考虑通过RTI_ELIGIBLE子例程返回的变换的子集,称它们为RTI(T,N,CK),它们不包括其difjf(θ,Cj)=0的多个变换θ。
表5表示本发明的一个实施例的RTP和RTM子例程。
表6-1到表6-6表示本发明的一个实施例的RTI_ELIGBLE及相关的子例程。
在本发明的一个实施例中,根据初始错误层KB和注解情况<π,r>,RTI_ELIGIBLE子例程(见表6-1到6-6)返回一组变换,其包括·Delete(par,n),只要n当前为par之子点,与par相关的测试的状态(表示n)是+或是?(即π(t(par)∈{+,?})以及par将被达到(即用下面定义的τ(·)函数,τ(par>0)·Add(par,n,i),只要与par相关的测试的状态(表示n)是+或是?i在0和K(par)之间par将被达到(即τ(par)>0)n已不为par之子点,及在par下加n将不会引起循环·Switch(par,n1,n2),只要
n1和n2均为par之子点与par相关的测试(表示n1,n2)的状态是+或是?par将被达到(即τ(par)>0)·Move(par1,par2,n,i),只要根据上面的说明,Add(par2,n,i)合法根据上面的说明,Delete(par1,n)合法另外,即使由Add(par2,n,i)产生循环,只要它由Delete(par1,n)操作打断了循环,Move(par1,par2,n,i)是允许的。
第二种方法,称RTP即“根据一个正的分值来限制变换”,其来自于两种观察首先,如果对于所有的M个事例,KB*的经验值严格大于KB的经验值,即如果diff(θ,M)>0,则DELTADELTA仅会从KB爬到变换理论KB=θ(KB);第二,由于acc(θ(KB),CK)≤1,diff(θi,K)和Diff(θi,K-1)之间的差值最大可为Diff(θ,K)-Diff(θ,K-1)=acc(θ(KB),CK)-acc(KB,CK)≤1-acc(KB,CK)一般地这表示Diff(θ,M≤Diff(θ,K)+Err_k,其中Errk=∑Mj=K+1(1-acc(KB,<πj,rj>))是剩余的M-k个事例上的KB的总误差。如果Diff(θ,K)≤-Errk,则显然Diff(θ,M)≤0,这意味着DELTADELTA将不会爬至θ(KB),因此,RTP(KB,N,Errk,Diff(·,K))={θi∈N|Diff(θi,k)>-Errk},这由RTP子例程完成,见表5。
第三种方法,称为RTM,即“根据极大分值限制变换”。其与上面提到的RTP过滤器相关,也是基于动态规划。它使用两种观察第一,如果KB的经验分值在所有的N(KB)的元素上为最大,即如果θi∈N,Diff(θ*,M)≥Diff(θi,M),则DEITADELTA将仅从KB爬至变换形式KB*=θ′(KB);第二,对于任意θg,θh∈N,Diff(θg,k)-Diff(θh,k)和Diff(θg,k-1)-Diff(θh,k-1)之间的差最大可为1。这一般意味着Diff(θg,M)-Diff(θh,M)≤Diff(θg,k)-Diff(θh,k)+(M-k)这样就得到如果Diff(θg,k)<Diff(θh,k)-(M-k)则Diff(θg,M)<Diff(θh,M)这表示DELTADELTA不会爬至θg(KB),在k个采样之后,对于所有的变换,设Bestk=Maxθ∈N{Diff(θ,k)}为最大的经验(相对的)分值,则我们定义RTM(KB,N,k,M,Diff(·,k))={θi∈N|Diff(θi,k)>Bestk-(M-k)},这由RTM子例程完成,见表5。
下面描述最后一种方法,即QE(“快速求值”)。由于以上分析,我们仅对变换的一个子集,即仅对集合RTI(KB,N,Ck)∩RTp(KB,N,Errk,Diff(·,k))∩RTM(KB,N,k,M,Diff(·,k))中的θi只需计算acc(θi,Ck)的值。
我们先综合每个KBi=θi(KB),然后在每个Cj=<πj,rj>事例上“运行”每个KBi以获取各自的修补及相关的精度分值,以此我们可以计算这些acc(θi(KB),Ck)值。然而,DELTADELTA算法使用了一种更有效的方法来计算这些精度分值。
首先要注意的是计算Diff(θm,C)而不是acc(θm(KB),C)是充分的,此量变得相对地容易计算(尤其是因为对于许多<θm,C>对,有diff(θm,C)=0;见上面RTI的讨论)。
给定一个(部分的)事例π和正确的修补rcor,则子例程QE_COMPUTERHOTAU用初始KB中的每一个节点给出SKB可能达到rcor的概率ρ(n)。假定其已达到n。注意,acc(KB,<π,rcor>)=ρ(nroot),其中nroot是KB的根;也有ρ(n)=p′(n)×ACCKB*(n,π,rcor),采用{0如πt((n))=-p′(n)={1如π(t(n))=+{p(t(n)) 如π(t(n))=?QE_COMPUTERHOTAU还找出KB中的具有SKB达到并越过弧a的概率τ(a)的每一个弧;以及找出具有到达n的可能性的每个节点n。显然τ(nroot)=1。给定一个有子点ni=child(n,i)的内部节点n,令ei=<n,ni>是连接n到ni的弧,再反复定义τ(el)=τ(n)×p′(n)τ(ej+1)=τ(ej)×(1-p′(nj))最后,为计算每一个τ(nj),只要把达到nj的各弧的τ值加起来;即一般来说τ(m)=∑<n,m>∈Eτ(<n,m>)。注意,这可以在层的大小中的时间线性中计算。
然后,对每个变换θ∈T,QE_DIFF以基本上恒定时间使用这些ρ(°)和τ(·)值计算diff((θ,<π,rcor>)。(时间实际上由从任意假定为一小常数的节点所下降到的弧的最大数量来界定。)注意,DELTADELTA修正算法并不产生一个明确的Sθj(KB)执行系统,也不对事例π明确地计算值acc(θj(KB),π)。相反,它利用ρ(·)和τ(·)值来直接产生它所需要的信息。
下面描述QE_DIFF计算diff(τk,C)=acc(θk(KB),C)-acc(KB,C)的值的方法。对于每个“删除链接”变换Deletea,b,令KB′=Deletea,b(KB)是从连接节点a到节点b的链接KB经删除而产生的层。显然acc(KB′,<π,r>)=acc(KB,<π,r>),只要π(t(a))=-或π(t(b))=-。因此,仅需处理π(t(a))∈{+,?}和π(t(b))∈{+,?}的情形。不失普遍性,我们有acc(KB,<π,rcor>)=P[紧挨<a,b>之前]+τ[<a,b>]×ρ(b)+τ[<a,b>](1-p′(b))×P[紧挨<a,b>之后|已到达<a,b>]+τ[a](1-p′(a))P[紧挨a之后]其中,P[紧挨<a,b>之前]是到达rcor的概率,此rcor跟随严格在达到<a,b>弧之前发生的各弧(在明显的越过中);P[紧挨<a,b>之后|已到达<a,b>]是达到rcor的概率,此rcor跟随严格地在<a,b>弧之后发生的各弧,假定SKB已达到<a,b>弧;P[紧挨a之后]是达到rcor的概率,此rcor跟随严格在节点a之后发生的弧。
例如,应用图2中的KB0,找出带有错误节点“A”的a和带有错误节点“E”的b。那么,P[紧挨<a,b>之前]是这样的概率或者是(1)TZ,TA和TC都成功,并且正确修补为rc,或者是(2)TZ,TA和TD都成功,TC失败,正确修补为rD。这里,P[紧挨<a,b>之后|已到达<a,b>]为0,因为这是严格地在达到并越过<a,b>≡<A,E>之后达到A下的后继节点的概率。(注意E没有在A之下的“左边的兄弟”)。最后,P[紧挨a之后]是这样的概率TA失败,TB成功,及或者TE成功,正确修补为rE,或者TE失败,TF成功,正确修补为rF。
类似地,acc(KB′,<π,rcor>)=P[紧挨<a,b>之前]+τ[<a,b>]×P[紧挨<a,b>之后|已到达<a,b>]
+τ[a](1-p′(a))×P[紧挨a之后]减去这些量,可以发现diff′(Deletea,b,<π,rcor>)=τ[<a,b>]{[p′(b)×P′]-ρ(b)}其中P′=P[紧挨<a,b>之后|已到达<a,b>]。唯一剩下的问题是计算此P′假定b是a的第m个子点,并且a有K≥m个子点,{a1,...,am=b,am+1,...,ak}这里,P′=∑kl=m+lτ[<a,a1>]×ρ(a1)/τ[<a,b>]。注意,计算此量所需的时间由K限制,K为节点a中的子点数。
为计算diff′(θ,C),其中θ为一个“增加链接”变换。令KB′=Adda,b,i(KB)是通过给KB增加一个链接而产生的层。此链接使b成为a的第i个子点。如前相同,acc(KB′,<π,r>)=acc(KB,<π,r>),只要π(t(a))=-或π(t(b))=-,因此,我们将仅考虑π(t(a))∈{+,?}和π(t(b))∈{+,?}。
假定在原始层KB中的第i个子点是ni;注意它在KB′中是第i+1个子。(如果在KB中仅有i-1个子,则假定此ni是退化(degenerate)节点,此节点立即导致r⊥修补。)那么,acc(KB,<π,rcor>)=P[紧挨<a,ni>之前]+τ[<a,ni>]×ρ[紧挨<a,ni>之后|已到达<a,ni>]+τ[a](1-p′(a))×P[紧挨a之后]且,acc(KB′,<π,rcor>)=P[紧挨<a,ni>之前]+τ[<a,ni>]×ρ(b)+τ[<a,ni>](1-p′(b))P[紧挨<a,ni>之后|已到达<a,ni>]+τ[a](1-p′(a))P[紧挨a之后]其意味着diff′((Adda,b,i,c)=τ[<a,ni>]×(ρ(b)p′(b)×P′(b)[紧挨<a,ni>之后|已到达<a,ni>]其中再次P[紧挨<a,ni>之后|已到达<a,ni>]=∑kl=i+1θ[<a,a1>]×ρ(a1)θ[<a,ni>]。
当然,此方法是基于前面所述的“部分求值”法。见ACCKB*子例程中的描述。特别是,如前所述,当考虑普通DAG结构的层次时,计算正确精度分值是很困难的,基于这种观察,完成修正是以牺牲效率为代价的。观察这些情况,可以发现潜在的问题增加一个新链接很容易产生一个包含在层中的新DAG事例,此情况反过来可能引起计算产生不正确的答案。例如,考虑KBbefore层,(如图5所示),并设KBafter=AddA,B,1(KBbefore)包括从A到B的链接,此链接使B成为A的第一个子。
现在考虑一个带标记情况C<π2,rB>,其中π2={TA/+,TC/+,TB/?,TD/+},并且正确修补为rB。令pB=p(TB)是在节点B的测试TB成功的概率。显然acc(KBbefore,C)=pB,并且,正确答案是acc(KBaffer,C)=pB。然而,AccKB*(A,π2,rB)会产生不正确的答案pB+(1-pB)×pB。(见前面,对一般DAG情形计算正确的答案是NP-hard)。因此,如果我们应用ACCKB来产生精度分值,则diff′(AddA,B,1,C)=[pB+(1-pB)×pB]-pB=(1-pB)×pB;因为此值不大于0,所以这种变换看起来是一个好方法。
然而,这种变换对此事例并不应该是一个好方法,有一种简单的方法修正这种特殊误差。这里,有必要知道SKBafter可达到C的唯一途径是测试TB失败。因此,在对B后的层部分计算精度分值时,有必要只传播这样的信息达到C表示TB失败。
既然一般情况下即使正确计算此值也是NP-hard,所以我们很容易提出这种特定的公共情形。将KB中的每个节点n与节点上产生的所有测试的集合联系起来,这样,AllTests(A)={TA,TB,TC,TD},AllTests(C)={TC,TB,TD},等。现在,当增加一个新链接时,此处是在A下,在DELTADELTA计算diff′(AddA,B,1,c)值之前增加一个具有测试TB的B,则它先经过新父(与该变换相关)A的其他子,并潜在地重新计算这些子的ρ值,这里给定如果TB测试失败,则SKBafter将仅达到这些子的新约束。为此,DELTADELTA先将测试TB与C的AllTests(·)表中的测试进行比较。如果TB∈AllTests(C),则DELTADELTA就直接使用ρ(C);不需要其他工作。然而注意,这里TB∈AllTests(C),在稍加修改的带标记事例C<π2,r>的上下文,DELTADELTA将因此重新计算ρ(C),其中π2包括赋值TB/-因此π2={TA/+,TC/+,TB/-,TD/+}。在此新赋值之下,ρ(B)=0,即有ρ(C)=0。故此,ρ(A)=acc(AddA,B,1,c)=ρB象所希望的那样。
下面描述如何处理“移动链接”变换。为处理KB′=Movepar,par2,n,i(KB),注意KB′=Addpar2,n,i(KB1)其中KB1=Deletepar1,n(KB)。因此,diff′(Movepar,par2,n,i,c)=acc(Movepar,par2,n,i(KB),c)-acc(KB,c)=(acc(Addpar2,n,i(KB1),c)-acc(KB1,c)+(acc(KB1,c)-acc(KB,c))=diff′KB1(Addpar2,n,i,c)+diff′KB(KB(Deletepar1,n,c))其中每项已于前描述,并且上标标示出其所属层。
下面描述“交换-链接变换”Switchparn1,n2应用n1=child(par,i1)及n2=child(par,i2),注意Switchparn1,n2(KB)=Movepar,par,n1,i2(KB1)其中KB1=Movepar,par,n2,i1(KB),(这里,如果|i1-i2|=1,则忽略第一变换Movepar,par,n1,i2(KB1))。从而,diff′((Switchpar,n1,n2,c)=acc(Switchpar,n1,n2(KB),c)-acc(KB,c)=(acc(Movepar,par,n1,i2(KB1),c)-acc(KB1,c))+(acc(KB1,c)-acc(KB,c)=diff′KB1(Movepar,par,n1,i2),c)+diff′KB(Movepar,par,n2,i1),c)。
上述描述都隐含地假定在上述的方式中,基础的专家系统能越过错误层;特别是在达到一个修补时即停止。有些专家系统会允许用户“验证”所给修补能否有效工作,如果第一修补失败,则接下去继续要求变换修补。这就叫“修补后验证”(VAR),本发明还能对使用VAR的理论给出适当的理论修正。
本发明并不局限于以上公开的软件配置或操作过程,本发明包括落在所附权利要求书范围内的所有改变及其变化形式。Procedure EVALKB(KBfault_hierarchy,πproblem_instance)repairreturn(EVALNODE(ROOT(KB),π))End EVALKBProcedure EVALNODE(nnode,π(total)_problem_instance)repairIf n 是一叶节点Then return(r(n))Else For i=1..k(n)ni=child(n,i)Ifπ(t(ni))=+Then return(EVALNODE(ni,π))End Forreturn(r⊥)End EVALNODE表1Procedure ACCNODE(nnode,π(partial)_problem_instance,rrepair)RealIf n 是一叶节点Then return(r(n)=r?10)Else tot=0;reach_me=1;For i=1..k(n)ni=child(n,i)Ifπ(t(ni))=+Then tot+=reach_me×ACCNODE(ni,π,r)return(tot)ElseIf π(t(ni))=?tot+=reach_me×p′(ni)×ACCNODE(ni,π,r)reach_me×=1-p′(ni)End Forreturn(tot)End ACCNODE表2Procedure ACCNODE*(nnode,π(partial)_problem_instance,rrepair)RealIf n 是一叶节点Then return(r(n)=r?10)Else tot=0;reachme=1;unknowns={}For i=1..k(n)ni=child(n,i)Ifπ(t(ni))=+Then tot+=reach_me× ACCNODE*(ni,π,r)return(tot)ElseIfπ(t(ni))=?Then If t(ni)∈unknownsThen tot+=reach_me× ACCNODE*(ni,π,r)return(tot)ElseIf t(ni)
unknownsThen unknowns=urnknowns∪t(ni)tot+=reach_me×p(ni)×ACCNODE*(ni,π,r)reach_me×=1-p(ni)End Forreturn(tot)End ACCNODE*表3Procedure DELTADELTA(KBfault_hierarchy,Cset_of_problem_instances)fault_hierarchy;Q={}reminsts=|C|;Err:=Σci∈C(1-acc(KB,c))]]>s*=0;For <π,r> in CQE_COMPUTERHOTAU(KB,π,r);For θ in GoodThetasIf(RTP(s,Err)&&RTM(s,rem_insts,s*))s′=s+QE_DIFF(KB,θ);Q=REPLACE(Q,θ,s′);End ForErr=Err-(1-acc(KB,<π,r>));<θ*,s*>=BEST(Q);End ForIf(s*>0)return(DELTADELTA(θ*(KB),C))Elsereturn(KB)End DELTADELTA表4-1Procedure BEST(Qtransform_score_pairs)transform_score;bsfs=-999999;bsfθ=NoOp;While(Q not empty)<θ,s>=FIRST(Q);Q=REST(Q)If(s>bsfs)bsfs=s;bsfθ=θEnd Whilereturn(<bsfθ,bsfs>);End BESTProcedure REPLACE(Qtransform_score_pairs,θtransform,sReal)transform_score_pairs;Q′=QWhile(Q′not empty)<θ′,s′>=FIRST(Q′);Q′=REST(Q′)If (θ′=θ)Replace 2nd part of<θ′,s′>with sReturn(Q)End Whilereturn(Q∪<θ,s>);End REPLACE表4-2Procedure RTP(sReal,ErrReal)boolean;return(s>-Err);End RTPProcedure RTM(sReal,rem_instsInt,s*Real)boolean;return(s>s*-rem_insts);End RTM表5Procedure RTI_ELIGIBLE(KBfault_hierarchy,<π,r>training_example)list_of_transformationsN=append(RTIADD(KB,<π,r>),RTIDELETE(KB,(π,r>),RTIMOVE(KB,<π,r>),RTISWITCH(KB,<π,r>))return(N)End RTI_ELIGIBLEProcedure GOODNODE(nnode,πproblem_instance)booleanreturn(τ(n)>0&&π(t(n))∈{+,?})End GOODNODEProcedure ISANCESTOR(n1,n2)If (l(n2)=0)Then return(FALSE)Else for i=1..l(n2)p2=parent(n2,i)If((n1=p2)∨ISANCESTOR(n1,p2))Then return(TRUE)endforreturn(FALSE)End ISANCESTOR表6-1Procedure RTIADD(KBfault_hierarchy,<π,r>training_example)list_of_transformationsN={}for p∈AllNodes(KB)Such thatk(p)≥1 and GoodNode(p,π)for c∈AllNodes(KB) such thatc≠p and π(c)∈{+,?}If(child_p(p,c)&&IsAncestor(c,p))Then for j=1..(k(p)+1)N=append(N,ADD(p,c,j))endfor;endfor;endforreturn(N)End RTIADD表6-2Procedure RTIDELETE(KBfault_hierarchy,<π,r>training_example)list_of_transformationsN={}for p∈AllNodes(KB)Such thatk(p)>0 and GoodNode(p)for j=1..k(p)If GoodNode(child(p,j))Then N=append(N,Delete(p,child(p,j)))endforendforreturn(N)End RTIDELFTE表6-3Procedure RTIMOVE(KBfault_hierarchy,<π,r>training_example)list_of_transformationsN={ }for p∈AllNodes(KB)Such thatk(p)≥2 and GoodNode(p,π)for i=1..k(p)If GoodNode(child(p,i),π) Thenfor j=1..k(p);j≠iN=append(N,MOVE(p,p,child(p,i),i,j))endfor;endforendfor表6-4for from_par∈AllNodes(KB)Such thatk(from_par)>0for to_par∈AllNodes(KB)such thatto_par≠from_par and k(to_par)>Oand(GoodNode(to_par,π)∨GoodNode(from_par,π))for i=1..k(from_par)ch=child(from_par,i)If(GoodNode(ch,π)&&IsAncestor(ch,to_par))Then for j=1..k(to_par)+1N=append(N,MOVE(from_par,to_par,ch,i,j))endfor;endfor;endfor;endforreturn(N)End RTIMOVE表6-5Procedure RTISWITCH(KBfault_hierarchy,<π,r>training_example)list_of_transformationsN={}for p∈AllNodes(KB) Such thatk(p)≥2 and GoodNode(p,π)for i=1..(k(p)-1)If GoodNode(child(p,i),π)Then for j=i..k(p)If GoodNode(child(p,j),π)Then N=append(N,SWITCH(p,child(p,i),child(p,j)))endfor;endfor;endforreturn(N)End RTISWITCH表6-权利要求
1.一种高效数据驱动理论修正系统,包括高效学习装置;与所述高效学习装置相接口并能接受本领域专家的输入的专家系统装置;与所述专家系统装置连接的编译装置;与所述编译装置相连接的现场用户输入装置;连接于所述现场用户输入装置和上述高效学习装置之间的会话转录装置。
2.如权利要求1所述的高效数据驱动理论修正系统,其中高效学习装置包括RTI-ELIGBLE装置;COMPUTERHOTAU装置;RTP装置;RTM装置。
3.如权利要求2所述的高效数据驱动理论修正系统,其中RTI-ELIGBLE装置包括多个修正操作符,所述多个操作符中的每一个上述专家系统装置中的初始知识库上工作并高效地产生一个修正的知识库,所有修正的知识库的集合是该初始知识库的邻域。
4.如权利要求3所述的高效数据驱动理论修正系统,其中的多个修正操作符包括增加操作符(RTIADD);删除操作符(RTIDELETE);移动操作符(RTIMOVE);交换操作符(RTISWITCH)。
5.如权利要求3所述的高效数据驱动理论修正系统,其中所述的多个修正操作符移动穿过错误层的间隔,并且每个所述多个操作符高效地将一层映射成稍有不同的层。
6.由计算机实现的高效数据驱动理论修正系统,包括以下步骤应用与专家系统装置接口的学习装置,该专家系统装置与编译装置相连,该编译装置与现场用户输入装置相连,该现场用户输入装置与会话转录装置连接,会话转录装置与所述的学习装置相连,其中使用学习装置包括以下步骤使用RTI_ELIGIBLE子例程;使用COMPUTERHOTAU子例程;使用RTP子例程;使用RTM子例程。
7.如权利要求6所述的由计算机实现的高效数据驱动理论修正系统,其中使用RTI_ELIGBLE子例程包括以下步骤使用多个修正操作符,每个所述操作符在专家系统装置中的知识库上高效地工作,并产生包括一已修正的知识库的邻域。
8.如权利要求7所述的由计算机实现的高效数据驱动理论修正系统,其中使用多个修正操作符包括以下步骤使用一个增加操作符;使用一个删除操作符;使用一个移动操作符;使用一个交换操作符。
9.如权利要求7所述的由计算机实现的高效数据驱动理论修正系统,其中使用多个修正操作符包括下面步骤高效地移动穿过错误层的间隙,每个所述多个修正操作符将一个层映射成稍有不同的层。
10.由计算机实现的高效数据驱动理论修正系统,包括高效的学习装置;与所述高效的学习装置相接口并能接受本领域专家输入的专家系统装置;与所述专家系统装置相连的编译装置;与所述编辑装置相连的现场用户输入装置;连接于所述现场用户输入装置和高效学习装置之间的会话转录装置,其中所述高效学习装置包括RTI_ELIGIBLE装置;COMPUTERHOTAU装置;RTP装置;RTM装置。
11.如权利要求10所述的由计算机实现的高效数据驱动理论修正系统,其中RTI_ELIGIBLE装置包括一个增加操作符(RTIADD);一个删除操作符(RTIDELETE);一个移动操作符(RTIMOVE);一个交换操作符(RTISWTTCH)。
全文摘要
高效的数据驱动理论修正系统,取一初始层KB
文档编号G06N5/00GK1167948SQ9710189
公开日1997年12月17日 申请日期1997年1月10日 优先权日1996年1月10日
发明者拉塞尔·格雷纳, R·巴拉特·拉奥, 格伦·A·梅雷迪思 申请人:西门子企业研究公司