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

基于PyDatalog的家庭关系专家系统:亲属规则推理错误排查

PyDatalog家庭关系专家系统规则修正

我正在用PyDatalog构建家庭关系专家系统,已加载CSV数据集,son、male、parent、brother等基础规则测试通过,但uncle、aunt、cousin规则存在推理错误:查询Asmaa的uncle返回空列表,正确结果应为Bachar和Hassan,需要修正规则。

数据集

namefather_namemother_namegender
AhmadBacharRafahMale
AmjadBacharRafahMale
DanahBacharRafahFemale
YazanHassanGhaliaMale
LeenHassanGhaliaFemale
DemaFaiazSaharFemale
DaniaFaiazSaharFemale
TareqFaiazSaharMale
AsmaaWaleedHananFemale
AlaaWaleedHananFemale
TasneemWaleedHananFemale
FirasWaleedHananMale
FaroukShareefSameahMale
UsaemaSaeedAdebehFemale
BacharFaroukUsaemaMale
HassanFaroukUsaemaMale
RafahZuhairRukaiehFemale
ZoukaaZuhairRukaiehFemale
LujainAdnanZoukaaFemale
MohammadAdnanZoukaaMale

术语定义

pyDatalog.create_terms('X,Y,Z,W, parent, male, female, father_of, mother_of, son, daughter, aunt, uncle, cousin, niece, nephew, sibling, brother, sister')

基础规则定义

for index, row in data.iterrows():
    name, father_name, mother_name, gender = row['name'], row['father_name'], row['mother_name'], row['gender']
    if gender == 'Male':
        +son(name, father_name)
        +son(name, mother_name)
        +male(name)
    else:
        +daughter(name, father_name)
        +daughter(name, mother_name)
        +female(name)

    +father_of(father_name, name)
    +mother_of(mother_name, name)

已测试通过的亲属关系规则

parent(X, Y) <= father_of(X, Y)
parent(X, Y) <= mother_of(X, Y)
brother(X, Y) <= (parent(Z, X) & parent(Z, Y) & male(X) & (X != Y))
sister(X, Y) <= (parent(Z, X) & parent(Z, Y) & (X != Y) & female(X))
sibling(X,Y) <= parent(Z, X) & parent(Z, Y) & (X != Y)

存在问题的规则

uncle(X, Y) <= brother(X, Z) & parent(Z, Y) & male(X)
aunt(X, Y) <= sister(X, Z) & parent(Z, Y) & female(X)
cousin(X, Y) <= parent(Z, X) & (sister(X, Z) & parent(Z, Y))

错误分析与修正方案

1. 核心问题:数据集缺失导致兄弟关系无法推导

Asmaa的父亲是Waleed,但数据集中没有Waleed的记录,因此无法推导Waleed与Bachar、Hassan的兄弟关系(缺少father_of(Farouk, Waleed)和mother_of(Usaema, Waleed)的事实)。需先补充Waleed的数据集记录:

name,father_name,mother_name,gender
Waleed,Farouk,Usaema,Male

2. 修正Uncle规则

原规则中male(X)冗余(brother(X,Z)已隐含X为男性),修正后:

uncle(X, Y) <= brother(X, Z) & parent(Z, Y)

补充数据集后,该规则会推导Bachar、Hassan是Waleed的兄弟,进而成为Asmaa的uncle。

3. 修正Aunt规则

同理,female(X)冗余,修正后:

aunt(X, Y) <= sister(X, Z) & parent(Z, Y)

4. 修正Cousin规则

原规则逻辑完全错误(实际匹配的是姐妹关系),正确的堂/表亲逻辑是:X的父母与Y的父母为兄弟姐妹关系。修正后:

cousin(X, Y) <= parent(Z, X) & parent(W, Y) & sibling(Z, W) & (X != Y)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:52:34