单调推理机

单调推理机 montony-inference是一个基于perl语言的内存计算框架的单调语义推理软件。输入为两部分。1事实抽取出三元组。2自定义的一套规则语法的三元组。输出为推理后得出的事实三元组,使用排列组合算法产生新事实加入内存再次迭代计算,一直到没有新的事实产生输出。。 本系统有2部分文件作为输入。输出是所有推理出的新事实。 在推理系统里,新加入的事实三元组,必须与已有的知识相一致,不引起矛盾。所以,随着运行时间的推移,系统内含的知识有增无减。推理系统作为组件嵌入在机器学习或决策系统里,可以节省的时间和空间消耗。

用途: 1.代指消解 解决问题:小明爸爸的姐姐的的妈妈的丈夫的女儿的丈夫是谁 2.比如金融期货底层商品价格涨价,几十万种原材料涨价,导致不同上层商品的价格变化的推理。

实现方法简介: 单调推理由N条三元组描述的一阶逻辑规则,M条事实,输入系统。计算后产生M1条新事实,自动加入系统并且推理出M2.。继续推理。。。。一直到系统不再有新的事实产生,则迭代结束,并输出结果。因此应注意循环次数的控制和避免规则逻辑导致推理发散。

使用方法: 在utunbu linux 64位系统14.04以上环境部署docker,使用root权限下载镜像命令:

docker pull zb1840/montony_inference

然后用命令启动: docker run -it -v /opt/user:/opt/user -p 29990:29999 -p 3009:3000 -d zb1840/montony_inference /bin/bash & 会开启本地的3009端口作为rest测试端口, 和29999的ssh端口 ssh用户root,密码是六个空格。

推理机有2部分文件作为输入 :规则文件和事实文件 别名配置文件/mnt/sdb/shell2/rels/sydict_hash 称谓列表/mnt/sdb/shell2/rels/b2bdic 规则文件 /mnt/sdb/shell2/ruledemo内容如下: ....... $v 的姥爷是 $v1 && $v1 的儿子是 $v2 => $v 的舅舅是 $v2

$v 的姥姥是 $v1 && $v1 的儿子是 $v2 => $v 的舅舅是 $v2

$v 的舅舅是 $v1 && $v1 的女儿是 $v2 => $v 的表姐妹是 $v2

$v 的舅舅是 $v1 && $v1 的儿子是 $v2 => $v 的表兄弟是 $v2

$v 的姐姐是 $v1 && $v1 的妈妈是 $v2 => $v 的妈妈是 $v2

$v 的姑姑是 $v1 && $v1 的女儿是 $v2 => $v 的堂兄妹是 $v2

$v 的姑姑是 $v1 && $v1 的儿子是 $v2 => $v2 的堂兄弟是 $v

事实文件例如:

丽丽 的妈妈是 童童

丽丽 性别 男性

童童 的妹妹是 兰兰

我 的姑姑是 兰兰

丽丽 年纪大于 我

常识性的事实三元组,可以从conceptnet5,各种rdf数据源抽取。

进入系统运行命令: root@6545fca11912:/mnt/sdb/shell2# ./diedai4_n3.pl factdemo ruledemo 输出: 童童 年纪大于 兰兰

兰兰 性别 女性

童童 的儿子是 丽丽

丽丽 的阿姨是 兰兰

童童 的姐妹是 兰兰

童童 性别 女性

我 年纪小于 丽丽

丽丽 性别 男性

童童 的兄弟姐妹是 兰兰

丽丽 的妈妈是 童童

童童 的子女是 丽丽

兰兰 年纪小于 童童

兰兰 的姐姐是 童童

我 的姑姑是 童童

兰兰 的姐妹是 童童

童童 的妹妹是 兰兰

兰兰 的兄弟姐妹是 童童

丽丽 的堂兄弟是 我

我 的堂兄弟姐妹是 丽丽

我 的堂兄弟是 丽丽

兰兰 的外甥是 丽丽

丽丽 的堂弟是 我

我 的堂兄是 丽丽

推到出最后结果 我的堂兄是丽丽

规则的说明:$v1 是变量 &&表示并列,可以并列3个三元组特征,规则内可以有两个变量,或者三个常量。 ” =>“表是推理出右侧的结果,变量常量之间必须用空格间隔。$v 的姑姑是 $v1 作为一个线索 ,线索之间用&& 拼接,系统检测全局事实中,同时多个线索则推理成立,退出结果。变量$v,可以支持若干约束条件,在demo文件里可以看到一些约束例子,用“|”间隔。不满足的,认为不能匹配变量。线索之间顺序无关结果, 线索内的顺序与计算结果相关。 三元组事实可以是任意三个中英文词或数字,可以根据需要灵活约定。

测试方法: 运行命令

time wget http://127.0.0.1:3009/api/res/我姐姐的哥哥的爸爸是谁 -O 777 ;cat 777

输出: 。。。。。。。 vn0 的姐姐是 vn1

vn1 的哥哥是 vn2

vn2 的爸爸是 vn3

vn0 vn3 姐姐 now------ vn2 性别 男性

vn3 性别 男性

vn1 的兄弟是 vn2

vn0 的姐妹是 vn1

vn2 年纪大于 vn1

vn1 年纪大于 vn0

vn1 性别 女性

vn3 的儿子是 vn2

vn0 的兄弟姐妹是 vn1

vn1 的兄弟姐妹是 vn2

vn0 的姐姐是 vn1

vn2 年纪大于 vn0

vn1 年纪小于 vn2

vn0 年纪小于 vn1

vn1 的哥哥是 vn2

vn2 的妹妹是 vn1

vn2 的爸爸是 vn3

vn1 的爸爸是 vn3

vn0 的兄弟姐妹是 vn2

vn3 的子女是 vn2

vn0 年纪小于 vn2

vn3 的女儿是 vn1

vn2 的兄弟姐妹是 vn1

vn0 的爸爸是 vn3

vn2 的兄弟姐妹是 vn0

vn1 的兄弟姐妹是 vn0

vn3 的子女是 vn1

vn0 的兄弟是 vn2

vn0 的哥哥是 vn2

vn3 的子女是 vn0

tpc vn2 性别 男性

tpc vn3 性别 男性

tpc vn1 的兄弟是 vn2

tpc vn0 的姐妹是 vn1

tpc vn2 年纪大于 vn1

tpc vn1 年纪大于 vn0

tpc vn1 性别 女性

tpc vn3 的儿子是 vn2

tpc vn0 的兄弟姐妹是 vn1

tpc vn1 的兄弟姐妹是 vn2 tpc vn0 的姐姐是 vn1 tpc vn2 年纪大于 vn0 tpc vn1 年纪小于 vn2 tpc vn0 年纪小于 vn1 tpc vn1 的哥哥是 vn2 tpc vn2 的妹妹是 vn1 tpc vn2 的爸爸是 vn3 tpc vn2 的姐妹是 vn1 tpc vn1 的爸爸是 vn3 tpc vn0 的兄弟姐妹是 vn2 tpc vn3 的子女是 vn2 tpc vn0 年纪小于 vn2 tpc vn3 的女儿是 vn1 tpc vn2 的兄弟姐妹是 vn1 tpc vn0 的爸爸是 vn3 tpc vn2 的兄弟姐妹是 vn0 tpc vn1 的兄弟姐妹是 vn0 tpc vn3 的子女是 vn1 tpc vn0 的兄弟是 vn2 tpc vn0 的哥哥是 vn2 tpc vn3 的子女是 vn0 tpc return 我 爸爸, 我 爸爸,

数据与资源

其他信息

价值
https://hub.docker.com/r/zb1840/montony_inference/
作者 zhangbo
维护者 zhangbo
最近更新 六月 18, 2017, 05:10 (UTC)
创建的 六月 18, 2017, 05:10 (UTC)