You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OWLReady2中定义规则实现depicted_with属性的推理生成?

使用OWLReady2实现人物同框推理

问题说明

基于OWLReady2构建知识图谱,定义Person和Photo类,通过照片描绘人物的事实,自动推理出共同出现在同一张照片中的人物关系(即depicted_with属性)。

修正后的实现代码

from owlready2 import *

# 创建本体
onto = get_ontology("urn:test")

with onto:
    # 定义核心类
    class Person(Thing): pass
    class Photo(Thing): pass
    
    # 定义属性:照片描绘人物
    class depicts(Photo >> Person): pass
    # 定义反向属性:人物被某照片描绘
    class depiction(Person >> Photo): 
        inverse_property = depicts
    
    # 定义同框属性:人物与另一人物同框
    class depicted_with(Person >> Person):
        symmetric_property = True  # 同框关系是对称的:a和b同框则b和a同框

    # 定义推理规则:如果a出现在照片p,且p描绘了b,且a≠b,则a和b同框
    depicted_with_imp = Imp()
    depicted_with_imp.set_as_rule("depiction(?a, ?p), depicts(?p, ?b), differentFrom(?a, ?b) -> depicted_with(?a, ?b)")

# 创建实例
pe1 = Person(name="Person 1")
pe2 = Person(name="Person 2")
pe3 = Person(name="Person 3")

ph1 = Photo()
ph2 = Photo()

# 给照片添加描绘的人物
ph1.depicts = [pe1, pe2]
ph2.depicts = [pe2, pe3]

# 调用Pellet推理机,开启属性值推理
sync_reasoner_pellet(infer_property_values=True, infer_data_property_values=True)

# 验证推理结果
assert pe1.depicted_with == [pe2]
assert sorted(pe2.depicted_with, key=lambda x: x.name) == [pe1, pe3]
assert pe3.depicted_with == [pe2]

关键调整说明

  • 对称属性设置:给depicted_with添加symmetric_property = True,无需额外编写反向规则,推理机自动处理双向同框关系。
  • 规则优化:
    • 移除冗余的Person(?a)判断:因为depiction是Person到Photo的属性,?a必然属于Person类。
    • 添加differentFrom(?a, ?b)条件,避免推理出人物与自身同框的无效关系。
  • 推理配置:使用sync_reasoner_pellet并开启infer_property_values=True,确保推理机自动计算并填充depicted_with的属性值。

内容的提问来源于stack exchange,提问作者user3035850

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:35:22