基于Neo4j桂枝汤类方知识图谱的研究与实现
2019-09-10赵凯王华星施娜
赵凯 王华星 施娜
摘要 知识图谱与自然语言处理技术和搜索技术的结合越来越广,成为了近年知识服务领域研究的新热点。目前知识图谱在中医药领域的应用主要集中在可视化分析,尚无能够支持自然语言处理领域和知识服务领域的中医知识图谱。本研究使用了Neo4j图数据库构建了基于《伤寒论》桂枝汤类方的小型知识图谱,可以实现对桂枝汤类方的证、方、药的可视化分析以及检索等功能。研究结果证明了这种方法的可行性,并为今后将中医类知识图谱与深度学习技术相结合应用的开发奠定了基础。
关键词 知识图谱;图数据库;伤寒论;桂枝汤;自然语言处理;Neo4j;中医类方;方证
Abstract In recent years,the increasingly wide combination of knowledge graph,natural language processing as well as search technique has become a new hotspot in the field of knowledge service.Nowadays,the application of knowledge graph in the field of traditional Chinese medicine(TCM)is mainly focused on visual analysis.There is still no TCM knowledge graph that can support the fields of natural language processing and knowledge service.In this paper,Neo4j graph database is used to construct a small knowledge graph based on Guizhi Decoction associated formulas in Treatise on Cold Damage,which can realize functions of visual analysis and searching on syndromes,formulas and medicines of Guizhi Decoction associated formulas.Results of the study prove the feasibility of this method,and lay the foundation for future development of the combination of TCM knowledge graph and deep learning technology.
Key Words Knowledge graph; graph database; Treatise on Cold Damage; Guizhi Decoction; Natural language processing; Neo4j; Chinese medicine formula; Formula and syndrome
中图分类号:R222 文献标识码:A doi:10.3969/j.issn.1673-7202.2019.10.019
传统AI技术如深度学习,如果没有预先标定好的高质量的大规模数据集,在面对错综复杂的临床医学决策时往往也束手无策,这时候,来自现实世界的经验和知识就显得格外重要。各种机器学习算法虽然在数据的预测能力上很好,但是在描述能力上非常弱,而知识图谱对于数据的描述能力非常强大,恰好填补了这部分的空白。知识图谱在国内还属于一个比较新兴的概念,是2012年由谷歌公司首次提出。知识图谱本质上是一种语义网络的知识库,是一种基于图的数据结构,由节点和边组成,主要用来描述真实世界中存在的各种实体概念以及之间的关系。在知识图谱里,每个节点表示现实世界中存在的“实体”,每条边为实体与实体之间的“关系”。知识图谱是关系的最有效表示方式。知识图谱就是把所有不同种类的信息连接在一起而得到的一个关系网络,提供了从“关系”的角度去分析问题的能力。这种表示方式非常适合用于表示中医领域里的各种概念。前人曾有用知识图谱来分析中医电子病例的研究,从文献计量学的角度分析中医领域研究现状[1]。
《伤寒论》是中医辨证论治理论的奠基之作。伤寒论中对疾病的描述和记载,不同于现代对疾病的定义和分类,是一部总结临床实践经验的著作,在实践中揭示疾病的发生发展变化规律,并融入了完备的理法方药内容。书中记载的疾病治疗方法大多经过中国古代数千年的临床观察确有疗效。六经辨证是对《伤寒论》辨证方法的一种普遍的提法,但是对于六经的认识至今没有一种十分确切的解释[2]。而方证辨证是存在于《伤寒论》中的一种基本辨证方法[3]。方证辨证的主要方法“方证对应”和“有是证,用是方”,是直接来源于《伤寒论》条文的叙述模式。从“方证相应”的角度理解《伤寒论》的处方和治病原则,是一种简单高效的方法。根据由多个证组合成的证候群,患者出现哪些临床症状,就能处以相应的方剂来对症治疗,不同的症状对应不同的方剂。如果将《伤寒论》中的方证辨证信息转化为计算机可以读取的形式存储起来,之后再与现代AI技术结合,将大大提高临床上使用《伤寒论》诊病的效率和精确度。
桂枝汤被称为群方之冠、众方之祖,是《傷寒论》开篇第一方[4],是书中使用频次最高的一首方子,其所演化出的类方数量也最多。桂枝汤的临床应用十分广泛,从呼吸系统到心脑血管系统疾病,都有应用桂枝汤及其加减方。
因此本文提出了通过建立《伤寒论》中的桂枝类方知识图谱数据库,以期实现桂枝汤类方的快速辨证分型与选方,探索未来将图数据库技术与人工智能技术相结合,进一步实现人工智能辅助辨证开方的可能性。
1 资料与方法
1.1 文献来源 本文数据全部来源于宋本赵开美版《伤寒论》[5]。
1.2 检索策略 使用word关键词查找,筛选出原文中所有包含桂枝汤的条文以及含有属于桂枝汤类方的条文。
1.3 纳入标准 选定《伤寒论》中的桂枝汤类方的主要依据是方剂名中含有“桂枝”或方剂组成中以“桂枝”为主药,同时需要结合历代医家经验[6-9]。
1.4 排除标准 1)方剂名和组成中均不含有“桂枝”;2)方剂名或者组成中虽然出现“桂枝”,但桂枝不是方子组成中的主要药物,如柴胡桂枝汤应划为柴胡类方。
由于历代对《伤寒论》的学术研究出现百家争鸣,不同医家对《伤寒论》的解读都稍有不同,部分学术观点很难达成一致,对类方的划分并不完全相同。本文主要参考了部分医家经验,本着从实际临床应用的角度出发,结果共纳入了27首桂枝汤类方。
1.5 知识图谱的建立
1.5.1 桂枝汤类方命名实体的提取 本文使用了Python软件对《伤寒论》中的桂枝类条文做词频统计分析[10]。《伤寒论》中涉及到“桂枝汤”的有方条文共有19条,从这19条中人工挑选出所有描述“症状”的关键词。然后利用这些关键词构造了分词词典[11-12],Python加载分词词典后对文本进行分词并统计词频。将提取出的症状关键词用Python软件进行词频统计和去重处理后,即获得症状实体。将每首方子中包含的草药名称汇总去重后,即得到草药实体。将27首桂枝汤类方的方名作为汤方实体。
1.5.2 桂枝汤症状权重计算 《伤寒论》中对于每首汤方记载的症状可以分为主症、特异性主症、兼症、或然症等,显然每个症状的对各个汤方的贡献度是不一样的。不同的汤方之间还往往存在多个共同症状。为了提高系统判断汤方的准确率,分析每个症状对包含该症状的汤方的权重是十分关键的。词频高的症状不一定就是主症,但是本文主要是通过词频统计这一手段来找主症,所以将词频高的前3个证状即作为主证。中医在使用《伤寒论》“方证辨证”的方法来诊病时,可以看成一种对症状的分类过程。首先通过询问和观察一个患者前来就诊时的症状,同时在记忆中搜索《伤寒论》的条文内容,看患者出现的症状和哪个条文的记载最相符合,从而判断这个患者最适于用哪首汤方来治疗,即完成了“方证相应”的过程,临床中通过使用这种方证辨证的方法往往能做到效如浮鼓。但是方证辨证的方法使用的好坏取决于中医师对《伤寒论》条文的熟悉和理解程度。
所以,就可以将症状看作特征用来训练分类器。鉴于贝叶斯分类器是自然语言处理领域中简单且强大的模型,所以本文采用贝叶斯分类算法[13]。使用贝叶斯定理来计算症状对于某首汤方的影响程度。贝叶斯定理[14-15]如下:
P(B|A)=P(B)P(A|B)P(A)
上式中P(A)为证状A出现的概率,P(B)为使用汤方B的概率,为汤方B中出现证状A的概率,我们希望求得的是P(B|A),即出现症状A会使用汤方B治疗的概率。将P(B|A)的计算结果作为连接症状和汤方权值。
由桂枝汤症状权值的计算结果可见,某个症状出现的频次高,不一定权值就越大,而是某症状在桂枝汤中出现的频次越高,并且同时该症状在其他方剂中出现的频次越低,连接症状和汤方的边权值设置才会越大。例如,“发热”虽然在桂枝汤条文中出现的频次最高,但是在其他条文中也多次出现。而“鼻鸣”的频次很低,但只出现在了桂枝汤的症状中,在其他类方条文中没有出现,因此权值最大,说明症状“鼻鸣”与桂枝汤的对应具有唯一性。权值衡量了症状与汤方之间关联的唯一性程度。之后将权值“weight”通过Cypher语句输入到知识图谱“边”的属性中。
1.5.3 用Neo4j构建知识图谱 Neo4j是基于Java的一种开源非关系型图数据库,可以将数据存储在灵活的网络结构中而不是表格中,具备了完整的数据库特性,实现了专业数据库级别的图数据模型的存储,现如今已经被各个行业的许多公司和组织所采用。Neo4j的优点主要有:1)采用具有自由邻接的图存储结构,提供更快的事务处理和数据关系处理能力;2)随时随意添加更改数据,从而缩短开发时间;3)Neo4j使用Cypher查询语言提供了一种非常人性化的有效的表达方式;4)能很容易的表示半结构化的数据;5)数据之间的关系附加在节点之上,无论关系的数量或深度如何,都能确保零延迟和实时性能。基于上述优点,本文使用了Neo4j图数据库来构建桂枝汤类方的知识图谱。
将提取出的“症状实体”“草药实体”“汤方实体”以及彼此之间的“关系”信息先全部整理成结构化数据,并赋予相应的标签,用CSV格式文件存储,如表1至表4所示。然后将整理好的CSV文件通過使用Cypher语言导入到Neo4j数据库中,即完成了桂枝汤类方知识图谱的构建。
1.6 数据分析 通过对桂枝类方条文中的77个症状词汇进行词频统计发现,如图2所示,“发热”“汗出”“恶寒”3个症状出现的频次最多,且此3个症状的频次几乎相同,说明此3个症状往往同时相伴出现;还可以发现前3个症状的频次分别是第4个症状的两倍,即在很大程度上说明了“发热”“汗出”“恶寒”3个症状是桂枝汤类方的主症。其次是表征疼痛类的症状,如头痛、项痛和身痛,说明桂枝汤类方的使用指征是经常伴有身体某些部位的疼痛。除了频次最高的主症之外,其他大部分症状只出现1至2次,而且这些频次极低的症状主要集中分布在除桂枝汤外的其他桂枝汤类方中,说明这些症状很可能是应用相应的桂枝汤类方的特异性症状。特异性症状即某一个证状只会跟某一首特定方剂相关联或者呈高度相关,因此可以将这些特异性症状作为快速筛选方剂的指标。
此外特别值得注意的是,只在桂枝汤的条文中,“发热”这个症状出现了9次,“恶寒”出现了7次,“汗出”出现了9次,可见这3个症状同时也是桂枝汤的主症,说明了桂枝汤的主症就是桂枝汤类方的主证。换句话说,桂枝汤类方的出现,是因为在桂枝汤主症的基础上,又同时出现了其他症状,所以需要对桂枝汤进行加减,以满足对症治疗的需要,才演化出了许多其他的桂枝汤类方。桂枝汤类方均是对桂枝汤原方的加减变化,在功能主治上,是对桂枝汤原方临床治疗范围的扩大应用。
2 结果
将数据导入到Neo4j中之后,我们可以得到如图3所示的桂枝汤类方的知识图谱,其中蓝色节点表示汤方实体,粉色节点表示症状实体,红色节点表示草药实体。连接症状实体与汤方实体之间的边表示这些症状可以用相应的汤方治疗,也就是在一定程度上模拟了“方证相应”的过程。Neo4j数据库提供了Cypher语言可以对数据库进行CRUD(Create,Read,Update,Delete)操作,从而方便的实现对方-证-药的检索、遍历和导航功能。
图3可视化展示了用Cypyher语句查询到的27首桂枝汤类方节点和26味中草药节点之间的关系。桂枝汤类方之间药物组成的不同点,最低程度仅仅是药量上的改变,如桂枝加桂汤;大多数是仅有1至2味药的加减变化,说明了《伤寒论》中制方组方的严谨性,也同时说明了药物剂量的变化是影响方剂功效的一个重要因素。
图4展示了用Cypyher语句查询到跟“桂枝汤”这一症状节点直接相连的所有关系及其节点,包括《伤寒论》中记载所有桂枝汤可能会出现的症状和桂枝汤的药物组成。
3 讨论
本文提出了一种新的构建中医类知识图谱的方法,不是简单的将文献中的粗颗粒信息进行关联,而是从《伤寒论》文本中先逐条提取出各种证、方、药的实体,再将这些知识实体进行关联;从文本中挖掘出的信息,没有停留在仅仅能用知识图谱做可视化展示的层面,而是将这些实体知识用图数据库存储了起来,并设置了权值属性,可以实现多种查询检索和调用的功能。本文研究的不足之处在于,《伤寒论》知识图谱的构建尚需要大量人工辅助,由于缺少训练语料,命名实体识别的任务还无法自动完成。要解决这个问题,后期需要先建立基于中医文献类文本标注好的训练语料库。基于图数据库构建中医药领域的知识图谱,可以实现中医知识的关联和共享[16],进一步整合和利用中医药文献资源,不仅可以为临床医生提高诊疗效率,也可以为普通百姓提供全面准确的中医药知识搜索服务。本文工作的意义在于,可为今后与深度学习技术相结合的人工智能辅助开方系统的开发奠定了一定的基础。
参考文献
[1]荣光,谢晴宇,孟庆刚.中医电子病历研究领域科学知识图谱分析[J].中国中医药信息杂志,2017,24(1):99-104.
[2]王庆国,李宇航,王震.《伤寒论》六经研究41说[J].北京中医药大学学报,1997,20(4):23-30.
[3]卞庆来,邱文琪,宋美芳,等.从《伤寒论》探讨方证辨证的思路[J].中华中医药杂志,2018,33(9):3809-3811.
[4]孟康,朱华刚,宋现涛,等.三七总皂苷联合双重抗血小板药物治疗对冠状动脉支架术后患者心血管事件的影响[J].中国医药,2013,8(4):445-447.
[5]钱超尘.宋本《伤寒论》版本简考[J].河南中医,2010,30(1):1-9.
[6]方腾铎,崔云,方跃坤,等.崔云教授运用桂枝类方治疗男科病经验探赜[J].浙江中医药大学学报,2019,43(8):729-733.
[7]郎睿,张潇彤,关文卓,等.《伤寒论》桂枝汤类方应用剂量探讨[J].医学争鸣,2018,9(4):41-43.
[8]赵昌林,李敏瑶.桂枝汤及其类方的运用探讨[J].中医学报,2019,34(8):1605-1608.
[9]郝世毫,李燕宁.桂枝汤类方与汗证[J].世界最新医学信息文摘,2018,18(38):210.
[10]閻令海.分析Python语言的中文文本处理[J].中国新通信,2019,21(2):147.
[11]成于思,施云涛.面向专业领域的中文分词方法[J].计算机工程与应用,2018,54(17):30-34,109.
[12]方婷婷.中文分词中词典分词和模型分词融合的实证研究[D].桂林:广西师范大学,2019.
[13]蓝鋆,王晶,尤圣富,等.贝叶斯网络技术在中医证候研究中的运用[J].中国中医骨伤科杂志,2015,23(2):70-72.
[14]张彦净.基于贝叶斯方法进行中医证候诊断的研究[D].兰州:兰州大学,2017.
[15]蓝鋆,王晶,尤圣富,等.贝叶斯网络技术在中医证候研究中的运用[J].中国中医骨伤科杂志,2015,23(2):70-72.
[16]刘凯,周雪忠,于剑,等.基于条件随机场的中医临床病历命名实体抽取[J].计算机工程,2014,40(9):312-316.
(2019-03-20收稿 责任编辑:徐颖)