Bridge619

Bridge619

Bridge619

命定的局限尽可永在,不屈的挑战却不可须臾或缺!

101 文章数
11 评论数
来首音乐
光阴似箭
今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

知识图谱推理FOIL

Bridge619
2022-10-27 / 0 评论 / 925 阅读 / 2 点赞

知识图谱推理FOIL

归纳逻辑程序设计 (inductive logic programming,ILP)算法是机器学习和逻辑程序设计交叉领域的研究内容。

ILP使用一阶谓词逻辑进行知识表示,通过修改和扩充逻辑表达式对现有知识 归纳,完成推理任务。

作为ILP的代表性方法,FOIL(First Order Inductive Learner)通过序贯覆盖实现规则推理。

1.1 FOIL算法学习过程

概述: 从一般到特殊, 逐步给目标谓词添加前提约束谓词, 使其覆盖所有的正例,而不覆盖任何反例

例:

问题: 如何从知识图谱中推理得到:

father(David, Ann)

若能推理出这条规则, 问题得解.

1.1.1 给定目标谓词

  • ounter(line
Father(x, y)

1.1.2 构造 背景知识样例样例 和 目标谓词训练样例

  • 背景知识: 知识图谱中目标谓词以外的其他谓词实例化结果(已知谓词)
  • 目标谓词只有一个正例Father(David, Mike)
  • 反例: 只能在已知两个实体的关系且确定其关系与目标谓词相悖时, 才能将这两个实体用于构建目标谓词的反例, 而不能在不知两个实体是否满足目标谓词前提下将它们来构造目标谓词的反例.
背景知识 P的正例集合 P的反例集合
Sibling(Ann,Mile) Father(David,Mike) Father(David,James)
Couple(David,James) Father(James,Ann)
Mother(James,Ann) Father(James,Mike)
Mother(James,Mike) Father(Ann,Mike)

1.1.3 依次将谓词加入到推理规则中作为前提约束谓词

计算推理规则覆盖的正例和反例

如:

  • Monther(z, y)作为前提约束谓词加入, 可得到推理规则Monther(z, y) → Father(x, y)
  • 在背景知识中, Monther(z, y)有两个实例: Monther(James, Mike) Monther(James, Ann)
  • 对于Monther(James, Mike)这一实例, z=James, y=MIke, 将z和y带入Father(x, y)得到Father(x, Mike). 覆盖了 : 正例 Father(David, Mike) 反例 Father(James, Mike) Father(Ann, Mike)
  • 对于Monther(James, Ann)这一实例, z=James, y=Ann, 将z和y带入Father(x, y)得到Father(x, Ann). 覆盖了: 反例 Father(James, Ann)

计算信息增益值(information gain)

NA(Not Available): FOIL_Gain为负无穷时

1.1.4 基于计算所得FOIL增益值来选择最佳 前提约束谓词

  • ounter(line
Couple(x, z)

1.1.5 建立新的推理规则以及更新训练样本集

  • Couple(x, z)加入后信息增益最大, 将其加入推理规则, 得到Couple(x, z) → Father(x, y)
  • 将训练样例中与该推理规则不符的样例去掉. 由新规则和背景知识样例可知, Father(x, y)中的x只能是David. 新的训练样本集如下:

重复3 4 5步骤, 直到新规则不覆盖任何反例

1.1.6 总结

给定目标谓词,FOIL算法从实例(正例、反例、背景知识样例)出发,不断 测试所得推理规则是否还包含反例,一旦不包含,则学习结束,由此充分展 示了“归纳学习”的能力。在学得推理规则后,再给推理规则中的变量赋予具体例子,经过“演绎”得到新的知识

1.2 通过 Foil 算法代码找出规则头 Father(x,y)的规则体

1.2.1 给定:

  • 目标谓词P —— Father(x,y)

  • 表格中列出该知识图谱的背景知识、正例和反例

    背景知识 P的正例集合 P的反例集合
    Sibling(Ann,Mile) Father(David,Mike) Father(David,James)
    Couple(David,James) Father(James,Ann)
    Mother(James,Ann) Father(James,Mike)
    Mother(James,Mike) Father(Ann,Mike)

1.2.2 目标:

  • 找到定义目标谓词P——Father(x,y)的规则体,使其覆盖所有的正例,而不覆盖任何反例

1.2.3 推理过程及结果

  • 将背景性的知识放入FOILContainer中
  • 目标谓词P:Father(x,y) target = expr('Father(x,y)')
  • 将P的正例部分放入examples_pos
  • 将P的反例例部分放入examples_neg
from knowledge import *
A, B, C, D, E, F, G, H, I, x, y, z = map(expr, 'ABCDEFGHIxyz')
# 背景性的知识放入FOILContainer中

small_family = FOILContainer([expr("Sibling(Ann,Mike)"),
                              expr("Couple(David,James)"),
                              expr("Mother(James,Ann)"),
                              expr("Mother(James,MIke)"),
                             ])


# 要推导的部分:目标谓词P
target = expr('Father(x, y)')

# P的正例部分:使用知识库中已有的三元组来构建
examples_pos = [{x: expr('David'), y: expr('Mike')}]


# P的反例部分:用否定已有确定关系的三元组的方式来构建
examples_neg = [{x: expr('David'), y: expr('James')},
                {x: expr('James'), y: expr('Ann')},
                {x: expr('James'), y: expr('Mike')},
                {x: expr('Ann'), y: expr('Mike')}]
# run the FOIL algorithm
clauses = small_family.foil([examples_pos, examples_neg], target)

# Father(x,y)的规则体
print (clauses)

  • 运行FOIL algorithm,给出推理结果

    • ounter(line
    [[Father(x, y), [Couple(x, v_4), Sibling(v_5, y)]]]

1.3 通过 Foil 算法 代码找出规则头 DaughterOf(x,y)的规则体。

1.3.1 给定:

  • 目标谓词P —— DaughterOf(x,y)
  • 背景知识
    • Female(Ann) —— Ann是女性
    • Female(Mary) —— Mary是女性
    • Female(Eve) —— Eve是女性
    • ParentOf(Ann,Mary) —— Ann是Mary的parent
    • ParentOf(Eve,Tom) —— Eve是Tom的parent
  • P的正例集合
    • DaughterOf(Mary,Ann) —— Mary是Ann的女儿
    • DaughterOf(Mary,Bob) —— Mary是Bob的女儿
  • P的反例集合
    • DaughterOf(Tom,Ann) —— Tom不是Ann的女儿
    • DaughterOf(Tom,Bob) —— Tom不是Bob的女儿
    • DaughterOf(Tom,Eve) —— Tom不是Eve的女儿
    • DaughterOf(Mary,Eve) —— Mary不是Eve的女儿

1.3.2 目标:

  • 找到定义目标谓词P——DaughterOf(x,y)的规则体,使其覆盖所有的正例,而不覆盖任何反例

1.3.3 推理过程及结

  • 将背景性的知识放入FOILContainer中

    需要注意的是,要根据已给出的正反例将背景知识补充完整,否则将推理不出结果

    这里由正例DaughterOf(Mary,Bob)可知Mary是Bob的女儿,所以在背景知识中需要补充ParentOf(Bob,Mary) —— Bob是Mary的parent

  • 目标谓词P:DaughterOf(x, y) target = expr('DaughterOf(x, y)')

  • 将P的正例部分放入examples_pos

  • 将P的反例例部分放入examples_neg

  • 运行FOIL algorithm,给出推理结果

    • ounter(line
    [[DaughterOf(x, y), [Female(x), ParentOf(y, x)]]]

1.4 代码

KG_Foil github

文章不错,扫码支持一下吧~
上一篇 下一篇
评论