目录
3.如何利用Instantiation在knowlegebase中做proposotionalization(命题化)事情
1.写在前面
我们了解了一阶谓词逻辑的基本概念,接下来我们看一下,在一阶谓词逻辑中如何做inference,我们先介绍两个概念,UI和EI,这两个都是instantiation。就是把一个变数,替换成一个常数的技巧。一个是针对Universal quantify,另一个是针对existence quantity。
2.instantiation中UI 和EI的概念
我们假设a是某个句子,前面有全称量词for all。我们就可以用一个常数constant g替换掉全称量词v。因为是针对所有的,那么我们换成任意一个肯定都是可以的。右侧的例子,我们可以做同样的事情,把v替换成k,差别就是K不可以在KB之中。我们待会儿会讲这个是为什么?下面例子,第一个任何贪婪的国王是邪恶的,我们x可以替换成任何的东西,因为他针对的是任意的。第二个例子讲了存在一个人,但是我们不能随便替换,因为人是不同的。所以我们用一个常数C1替换,并且这个C1常数不能是kB中的已知任何东西。之后我们可能会知道C1是小明或者小红,我们可能会演绎出这样的一个结论。skolem constant指的是用过了C1,下次替换存在量词的时候也不可以使用C1这个常量了,即使KB中没有。
UI中,可以替换任意次数,是等价的,但是在EI中只能apply一次,因为EI是至少一次,但是我们也不知道是一次还是多次,所以当apply超过一次的时候,也是比较危险的。我们在替换一次之后,一般就把exitence拿掉,免得系统会继续给我们做替换。而且在EI中KB的概念和之前也不太一样,我们在替换一次之后,就相当于把替换词放到了KB中(并不在),后面会推演出真正的constant。
3.如何利用Instantiation在knowlegebase中做proposotionalization(命题化)事情
我们假设KB已知,就是我们知道所有贪婪的国王都是evil的,都是邪恶的,那我们知道,这样是国王,这样是greedy,然后我们知道,generalization是brother,OK,好,那首先我们最简单的方法是因为我们现在只知道这里面,就是我们现在的世界只有John跟Richard,好这两个constant,好,那所以我们有一种方法就是把上面这种变数x,用UI把它可能的全部替换掉。那我们现在可能就全部换掉。你就把所有的,这一句话换John,带John换一次,OK,再带入Richard,再换一次。好那剩下的都不用动,所以我们现在得到一个比较比之前大一点的KB,那这KB已经完全就没有quantifier了,也没有唯一的一个那个universal。被我们拿掉了,所以这样可以被我们称为propositionalized命题化。就是原本的first order logic,KB ,我们把它换成了一个propositional logic的KB,一旦换成这KB以后那当然接下来就很简单,就是follow我们上一讲所讲到的inference的方法,你可以用resolution,那如果整个符合horn clause的话,你可以把它利用forward chaining或backward chaining的方式来做。
我们刚才有讲过UI基本,你用UI的话,新的KB呢是一个logic equivalent的KB,那如果你EI 换掉的话,它虽然不是logic equivalent,但是在inference上是equivalent的,所以我们称为inferential equivalent。也就是说原来如果某一个sentence被原来的KB entail的话,那就等价于说,它会被新的KB entail。这两件事情是equivalent,所以也就说我们原来first-order logic所要证的东西,我们用现在propositionalized的之后所要证的东西是一样的,那如果原来的KB不能证,那propositionalize之后当然也不能证,但是因为原来就不能证,所以就没有差别。
好,那我们这边有一些,好消息就是这样,就是你能证的东西,if and only if原来的能证明,接下来是坏消息,就是我们刚才替换成一个很简单,因为我们全是解释整个世界就只有John跟Richard两个同学,你换两次就搞定了。但是有些时候当你有function的时候呢,你可能没办法换完,因为你不可能,你就没办法把所有的all possible way换完。譬如说我们眼下有个function father(),叫father,那father这个function当然就是return,就是你input一个object,它output一个object,因为你有function,你的ground term有无穷多个,你的ground term目前已经知道john,但是你因为有function,所以你的世界知道John的father,并且可以重复得到,这样的世界包含了john、john的father和爸爸的爸爸等。一直下去。好,你这样的话你无穷一直做下去,我们没有办法把所有的all possible way搞定。好,那接下来这个好消息就是1930年的时候已经被证明了,就是如果一个sentence被原来的first-order logic KB entail的话,那基本上它被 entail by finite subset,也就是说虽然propositionalized这个first-order logic的KB有无穷多种,你propositionalized以后会无穷大,原则上是这样,就是你可以有,一直替换下去。但是你不需要知道整个无穷大,你只要在finite的一个有限的子集合的里面就可以得到propositionalized KB有能力去entail这个sentence。就是这两个KB不一样,就一个finite的subset的propositionalized KB跟原来的first-order KB当然不一样,原来的first-order logic KB比较强,比较大一点。但是,你只要把它展开到一个地步,你就应该可以证明够用来证明你想要证明的事情。
好,那基本这样的东西很简单,我们就可以这样做。就是类似Iterate deepening的事情,我们先展一层嘛,第一次替换我就把John替换进去,然后看看这个能不能证出我想证的,不行的话你就把father of john替换进去,好,如果还不行,就替换两次,John的爸爸的爸爸,那再不行再替换三次。就这样一直做下去,那d从0一直到无穷大。
也就是说只你要证的东西是被原来的FOL KB entail的话,那我这个回圈下去,迟早到某一个,在某一个值,譬如说可能100万,200万,但是我迟早会说我给你的alpha是正确的,好这是好消息,这是1930年证明出来的东西。
好,那来再讲坏消息。坏消息是就是如果原句是被原来的FOL KB entail,那如果没有呢,就你要证明的东西是原来的FOL的KB是不能证出来的,那这个回圈就会一直重复下去。从0一直到无穷大,过100万,过1000万,还是证不出来就一直展下去,那展到无穷大都证不完。好,那虽然这算是个坏消息,但是其实Turing和Church基本上是证明了,证明出来说FOL的entailment这个problem本身是semidecidable(半决定),如果修过计算理论complexity,serie之类的课程的同学大家知道semidecidable的意思。也就说这个问题如果是个yes no question,如果这个问题是yes的话,我可以在finite有限的时间,跟你回答yes,但是你如果本来答案是no的话我没办法决定它是no,我没办法肯定它是no。这个是semidecidable。也就是说这个我们刚刚讲虽然看似是个坏消息但是实际上呢,任何一个方法都没办法做到。不管你用propositionalize,FOL entailment本身它就semidecidable。所以你不管换任何方法都没办法。这一页意思就是说我们刚刚把一个FOL的knowledgebase去做propositionalize,它中间翻来翻去讲了几次,但是原则上就是说,它有一定的,可以做到一定的地步,就是你如果用这种方法,从0一直往下冲,可以做到一定的地步,也就说如果原来sentence。如果是可以被证出来,你迟早会在有限时间内证出来。那如果你原来sentence是无法被证出来的话,那这个会跑个回圈,但是任何一个方法都一样。
从效率上看,一个sentence,我们需要将每一个未知的位置(K个),放上我们的变量(N个),整体就会有n^k个指派。然后你有P个sentence,所以是n乘上p的k次方。好,那这个K如果大家应该知道如果K稍微大一点的话这样的演算法基本上我们很难实现,有时候在讲计算理论的时候,会讲polynomial多项式的算是比较tractable易处理 的,但是在现实世界上,一般演算法如果在n3方或n4方以上的演算法,我们会认为是很没效率的。你不太能真的run这样的演算法。所以也就是说,propositionalize虽然可以做到我们想做到的事,但是它有点没效率。
来源:CSDN
作者:苏叶biu
链接:https://blog.csdn.net/Suyebiubiu/article/details/103464174