中医与人工智能-基于Protégé构建知识图谱
本文内容
本文为系列长文,为便于读者单独阅读每篇博客都对整体项目有个大致理解,每个文章前都大致介绍下完整流程,包括数据集的介绍,数据处理,以及本篇博客相关的内容。
中医数据获取
基于网络采集了部分中药材数据和中药方剂数据,目前这块的资源比较多,可以查询百度查询中医数据库即可,如下提供几个常见的中医资源获取的地方。
中医资源网:http://www.tcmdoc.cn/ShuJuKu/default.aspx
医药网:http://www.pharmnet.com.cn/search/tcm/
针对采集到的数据,基于规则进行数据清洗,清洗后保留的字段如下:
药物数据示例数据如下:
字段信息:ID,名称,别名,性味,归经,功效,主治,摘自
2200,大丁草,烧金草、豹子药、苦马菜、米汤菜、鸡毛蒿、白小米菜、踏地香、龙根草、翻白叶,温、苦、毒,肺、脾,祛风、解毒、祛风湿,风湿麻木、咳喘、疔疮,寒湿 麻木 咳喘 疔疮,"《本草纲目》,《贵州民间药物》,《贵州草药》"
方剂数据示例如下图:
中医数据处理
数据获取后,要进行实体识别,获取其中的实体信息,实体识别部分步骤内容较多,有专题进行介绍,这里先一笔带过。
获取实体后,由于同一症状的描述用于较多,还需要进行同义词替换,这一步骤需要收集大量症状同义词,需要中医进行把关。案例如下:
1.遍身洪肿 身体浮肿 遍身浮肿 浑身浮肿 身体气肿 遍身肿满 身体肿 通身暴肿 遍身黄肿 通身浮肿 肢体浮肿 通身蛊胀 身面悉肿 遍身虚肿水气
2.体肿 遍身头面浮肿 遍身麻痹 遍身顽麻 身体麻痹 周身麻木 肢体麻痹 举体不仁
如上面的每一行的每个词都可以理解为一个意思,这一步需要收集大量的同义词。收集完成后,按照词典和相似度匹配,替换方剂数据集在的症状描述信息。
Protégé介绍与基本使用
关于Protégé的介绍有如下几处较好的参考文档:
Protégé基本教程【Protégé5.5.0版本】
https://blog.csdn.net/Jenny_oxaza/article/details/83148300
本体构建-斯坦福七步法本体构建(读完这篇文字就完全懂如何构建本体了)
https://blog.csdn.net/harry_c/article/details/103995267
Protégé软件是斯坦福大学医学院生物信息研究中心基于Java语言开发的本体编辑和知识获取软件,或者说是本体开发工具,也是基于知识的编辑器,属于开放源代码软件。这个软件主要用于语义网中本体的构建,是语义网中本体构建的核心开发工具,现在的最新版本为5.5.0版本。
Protégé提供了本体概念类,关系,属性和实例的构建,并且屏蔽了具体的本体描述语言,用户只需在概念层次上进行领域本体模型的构建。
本体是对领域的显式描述*:概念、概念的属性和属性、属性和属性的约 束、个人
本体建模有几种方法, 本文推荐采用七步法(非七步诗)。
七步法为:确定范围->考虑重用->列举条款->定义类->定义属性->定义约束条件->创建实例
七步法是一个简单的过程,加上多次的迭代,就会形成如下步骤:
现实:确定范围->考虑重用->列举条款->考虑重用->定义类->列举条款->定义类->定义属性->定义类->定义属性->创建实例->定义类->创建实例->考虑重用->定义属性->定义约束条件->创建实例···········
实际上,我们所进行的创建工作应该是一个不断迭代的过程,此教程将其简化为七步法
具体可参考:https://blog.csdn.net/harry_c/article/details/103995267
Protégé官网(https://protege.stanford.edu/products.php)可以下载,但官网下载较慢,这里提供百度网盘的下载地址:
百度网盘地址下载:
下载链接:https://pan.baidu.com/s/1dq-2prplkhQCsdmK00pL5g
提取码:675d
下载后,解压Protege-5.5.0-win.rar后,即可使用,免安装,我的安装路径为D:\apps目录下,解压后的目录结构为:D:\apps\Protege-5.5.0-win\Protege-5.5.0-win\Protege-5.5.0
压缩包解压之后有Protege.exe和run.bat这两个文件,点击任何一个都可以打开Protégé。Protégé一打开的界面主要是Active Ontology这个Tab的界面。
本体的名字可以在Ontology IRI里面修改。
Annotations是注释栏,可以对本体添加一些信息注释或者描述。
右边Ontology metrics会显示一些本体中相关元素的统计信息。
优化显示:
下载graphviz。地址:https://graphviz.org/download/
构建类,关系,实体等环节,大多基于entities窗口,具体如下:
基于Protégé构建知识图谱
通过protégé创建类的层次关系
在本体中,类用于描述抽象的实体对象,代表着一类具有共性的实例对象,是基本的组织单元。类具有继承性、传递性,最顶层的类代表着最抽象的实体概念,子类继承父类的特性,是比父类更具体的类。在本文中我们按照自顶向下的方法定义本体类的层次结构。
下面用 protégé本体编辑工具进行中医妇科病领域本体类和类的层次关系的编辑。
首先打开protégé本体编辑工具,点击File—New,建立新的项目。在新打开的protégé界面中,我们选择Entities面板来创建类层次结构, 点击所有类的父类Thing,点击Add Subclass在当前被选择类也就是Thing类下新建类“疾病”。
技巧:
我们也可以在选择某一类后点击Add Sibling Class按钮来为当前类添加同级类,当我们不需要某类时,可以点击Delete Selected Classes按钮删除当前选择类。
如果在编辑的过程中,类的层级关系不小心弄错了,不需要删除之后再重新编辑;可以拖动这个类到它应处于的层级,类似于文件夹的操作。如果拖动了某个类,它的子类也会随之移动,但不会改变这个类及其子类的层级关系。
如果类的名字写错了,可以右键选择“Change IRI Name”进行更改。
如果需要增加很多个子类,可以右键点击该类,选择“Add Subclasses”。
完整的中医妇科病领域本体类的层次模型如下图:
通过protégé创建实体属性关系
通过protégé创建实体属性关系,具体如下图:
相关含义已经在图中通过文字描述。
通过protégé创建实体
实体为各个类别的实体,实体较多,具体如下:
推理模型实现
基于上述完成的本体建模,可以借助推理机实现推理。protégé提供的WRL可以使用本体已定义好的概念来建立推理所使用的规则,但SWRL无法直接由推理机释义,因此要使用推理引擎将本体与规则进行转换。可以基于Jess这种规则引擎来实现推理。安装Jess的过程,本文不进行介绍。三者的关系为:
protege定义本体,SWRL编写规则,Jess将protege中的知识库和SWRL规则转化成内部格式,从而进行推理。
下面描述具体实现:
选择windows—tabs—SWARTabs,在SWARTabs界面查看到推理结果。
推理结果如下:
w3c1:证候推理(?x) ^ w3c1:患病主症(?x带下量多) ^ w3c1:患病次症(?x五色杂下) ^
w3c1:患病脉象(?x脉滑数) ^ w3c1:患病舌相(?x舌苔黄腻) -> w3c1:患病主证候(w3c1:湿毒蕴结型带下过多) ^ w3c1:方剂推荐(w3c1:五味消毒饮)
上述推理结果表明,当输入病人的患病主证(带下量多)、患病次证(五色杂下)、患病舌相(舌苔黄腻)、患病脉象(脉滑数),经过规则推理后,系统推理得出患病主证候为湿毒蕴结型带下过多,推荐方剂为五味消毒饮。
中医妇科本体存储
基于protégé构建的本体库,有多种存储形式,本文基于Neo4j存储,使用Neo4j实现知识图谱的查询与展示,具体见下图。
总结
本文是中医与人工智能的系列博客,本文有很多内容借鉴与赵老师的曾经工作,这里一并感谢。本文主要对protégé进行了介绍,并基于protégé实现了一个中医数据的本体建模,文本也对博主发现的较好资源进行推荐,便于读者在使用过程中,可以尽快的找到较好的资源,实现对protégé的基本使用。