陈雪松 张明磊 王浩畅
(东北石油大学电气信息工程学院 大庆 163318)
知识图谱,是谷歌2012年提出[2]的一种新型的数据表示方式,其目的是为了改善其下一代的搜索引擎。知识图谱以实体为节点、关系为边组成网状结构,能够清晰的表示数据之间的关联信息,在智能问答等多方面展示出丰富的应用价值[14]。国内的搜狗和百度首先建立了通用领域知识图。随后,金融[3]、法律等垂直领域也开始构建领域图谱。在医疗领域,文献[4]参考万方乙肝领域文献,构建了乙肝疾病的知识图谱,文献[5]利用文本抽取等技术,构建了中医药知识图谱,文献[6]以人机结合的方式构建了中文医学知识图谱。近年来,国内科研人员纷纷致力于医疗知识图谱的研究,但与国外相比,仍处于初步阶段[7]。
呼吸系统疾病是一种常见的多发疾病,对人体危害极大,是中国十大死亡率疾病之一。本文根据自身需求,爬取了相关呼吸疾病数据,构建呼吸系统疾病知识图谱,为患者提供自助查询以及辅助医疗人员诊断治疗。
知识图谱以图结构的形式表示知识信息,描述了客观世界的事物以及关系[11]。主要分为数据层和模式层[8],有自顶向下和自底向上两种构建方法[9]。为了保证医疗数据的准确性和规范性,本文采用自顶向下的方法构建呼吸系统疾病知识图谱。首先参考医学文献构建了呼吸疾病词典,然后通过该词典从不同医学网站爬取疾病数据,并根据实际需求构建了呼吸系统疾病本体,最后经过知识融合实现多源异构数据的链接,完成呼吸系统疾病中文知识图谱的构建。知识图谱构建架构如图1 所示,共分为四个步骤,通过循环迭代实现知识图谱的持续更新。
图1 呼吸系统疾病知识图谱构建架构
本体构建的主要目的是构建完整的呼吸系统疾病知识体系,主要分为人工构建、自动构建、半自动构建三种[10]。由于呼吸系统疾病数据规模不大,为了得到高质量、高准确度的本体,本文采用人工构建的方法构建呼吸疾病本体。首先参考了百度百科以及相关医学文献[15],根据实际的应用需求定义了七种实体类型:疾病、科室、症状、诊断检查、饮食、药品、在售药品;九种实体之间关系:在售、宜吃、忌吃、属于、常用药品、推荐药品、推荐食物、疾病症状、疾病并发症;以及各实体的属性,例如疾病属性有病因、简介、治疗周期、别名、易感染人群、传播方式、预防、治疗方法等。本文采用Protégé软件构建呼吸系统疾病本体,如图2为呼吸疾病本体。
图2 呼吸系统疾病本体
在医疗领域缺少开源的数据库,本文采用分布式爬虫技术爬取垂直型医疗网,如39 健康网、寻医问药网等网站的医疗数据。共爬取了478 条呼吸疾病数据,包含了所有的呼吸疾病数据以及相关药品属性信息。爬取到的疾病数据以JSON 格式保存,并进行了初步清洗,对数据重新审查和校验,目的在于删除非法字符,纠正存在的错误,保证数据的一致性。
知识融合[16]是将同源异构数据相连接。主要分为实体对齐和实体链接[12]两个方面。因为呼吸疾病数据是根据疾病词典获得,所以实体对齐部分可省略,采用属性对齐替换。首先根据构建好的本体进行属性对齐,然后计算各属性的相似度,最后根据属性相似度计算实体相似度,完成知识融合。
2.4.1 属性对齐
在呼吸系统疾病中,属性种类不多,可以根据呼吸疾病本体来构建属性映射表,将同一类实体的同一属性的不同表达方式对齐。表1 是不同来源数据的属性对齐映射。再通过本体定义的属性类型将各属性值规范化处理,主要规则有:1)统一所有数值型属性值的度量单位;2)保留区间型属性值的上限和下限;3)去除字符串属性和文本类属性中的错误字符;4)对于所有的属性值的缺失值均以NAN表示。
表1 部分属性对齐映射
2.4.2 属性相似度
完成属性对齐后,计算不同类型属性相似度。由于疾病实体包含了大量的别名信息,可将实体名称与别名合并成集合来计算相似度。假设有x和y两个实体,实体的名称集合为S和T。
1)实体名称集相似度
通过计算集合S和T的交集元素在S,T的并集中所占的比例、衡量两个集合的相似度。len(x,y)表示字符串属性xattr、yattr最大公共子序列长度。
3)文本类型相似度
首先通过呼吸系统疾病词典以及结巴分词对文本类属性进行分词,然后根据TF-IDF(Term Frequency-Inverse Document Frequency,词频-逆文件频率)找出文本的关键词。最后,通过余弦相似度计算关键词集合的相似度:
4)区间型属性相似度
数值区间和时间区间属性都可采用Dice 系数计算相似度,取值范围在[0,1]:
其中|xattr∩yattr|是x和y区间属性的交集,|xattr|和|yattr|分别表示x和y属性中元素的长度。
2.4.3 实体相似度
根据得到的属性相似度,采用加权平均的方法,得到最终的实体相似度[1]:
实验结果采用准确率、召回率、F1 值进行评判,实验结果:准确率为81.4%,召回率为61.5%,F1值70.1%。
至此,完成多源异构数据的知识融合。
本文采用Neo4j图数据库存储[17]呼吸系统疾病三元组数据以及可视化展示,Neo4j 以属性图的的形式存储数据节点,具有访问速度快、性能高、轻量级等特点[18]。呼吸系统疾病中文知识图谱存储了共15763 条呼吸疾病三元组数据,包括疾病的简介、症状、科室、治疗周期、药品以及检查等关键数据信息。表2为主要实体类别统计数据表。
表2 主要实体类别统计数据表
呼吸系统疾病知识图谱提供自助查询。图3是肺炎部分属性查询图。患者通过图谱查询的肺炎常用药品,包括阿莫西林颗粒,罗红霉素胶囊等好评药品。
图3 肺炎部分属性查询图
此外,呼吸疾病知识图谱还可以根据患者的临床表现,辅助医生决策。例如,根据图谱信息,为一位有“呼吸困难”“咳嗽”“发热”等症状的患者,进行“血常规”“胸部平片”“支气管舒张试验”等检查,判断此患者是否患有“哮喘”疾病。
医疗知识图谱的构建形成了相应的医疗知识体系,解决了医疗领域数据爆炸的问题,使得人们面对大量数据时,能够快速准确地获取关键信息。医疗问答系统[13]是呼吸疾病知识图谱的主要应用之一,将构建好的知识图谱上的关系要素引入到问答过程中,解决了传统问答模型对医疗领域知识利用不足的问题,方便患者了解自身病情、存储药物、调理身体。第二个应用是医疗决策支持系统,通过患者的临床表现、病历单、化验报告等数据信息,为医疗人员提供智能诊断,分析医生诊断方案,提升医疗质量、降低医疗风险。
本文针对呼吸疾病医疗数据数据分布庞杂、难以深层次应用的问题。爬取了呼吸疾病医疗数据,通过计算不同属性的相似度得出实体相似度,链接相同实体,完成知识融合。最后利用Neo4j 图数据库存储呼吸疾病数据以及可视化展示,完成了呼吸疾病知识图谱的构建。未来工作将继续完善知识图谱,以及研发基于呼吸疾病知识图的问答系统等辅助诊治系统。