Scientists form hypotheses and experimentally test them. If a hypothesis fails (is refuted), scientists try to explain the failure to eliminate other hypotheses. The more precise the failure analysis the more hypotheses can be eliminated. Thus inspired, we introduce failure explanation techniques for inductive logic programming. Given a hypothesis represented as a logic program, we test it on examples. If a hypothesis fails, we explain the failure in terms of failing sub-programs. In case a positive example fails, we identify failing sub-programs at the granularity of literals. We introduce a failure explanation algorithm based on analysing branches of SLD-trees. We integrate a meta-interpreter based implementation of this algorithm with the test-stage of the Popper ILP system. We show that fine-grained failure analysis allows for learning fine-grained constraints on the hypothesis space. Our experimental results show that explaining failures can drastically reduce hypothesis space exploration and learning times.
翻译:科学家提出假设并通过实验进行检验。若假设被证伪,科学家会尝试解释该失败以排除其他假设。失败分析越精确,可排除的假设就越多。受此启发,我们为归纳逻辑程序设计引入了失败解释技术。对于以逻辑程序表示的假设,我们通过示例对其进行测试。若假设失败,我们通过失败子程序来解释该失败。当正面示例失败时,我们能够定位到字面量粒度的失败子程序。我们提出了一种基于SLD树分支分析的失败解释算法,并将该算法的元解释器实现集成到Popper ILP系统的测试阶段。实验表明,细粒度的失败分析能够学习到假设空间上的精细约束。实验结果显示,解释失败可显著减少假设空间探索与学习时间。