于洋翊 虎俊瑶 刘呈祥 邵以傲 詹华杰
摘 要:寻医问药的过程中,往往会遇到看病難、挂号难,本项目探索医药领域知识图谱的构建并研究其应用来帮助患者解决就医难的问题。首先分析大量医药网站的结构和信息价值,利用python爬虫在互联网中收集医药信息;对采集的数据进行xpath解析,并输出Json数据,接下来对数据进行清洗和预处理;对比较正规的json数据进行实体、关系以及属性的知识抽取,用获取到的信息构造知识图谱,保存于Neo4j图数据库中;完成图谱构建后,将基于知识图谱进一步研究其应用。
关键词:医药;知识图谱;Neo4j;图数据库
一、知识图谱的概念
知识图谱的概念在二零一二年被提出,并被广泛运用在搜索引擎中。至此,知识图谱已经给学术界及各应用领域带来了广泛的应用成果,并适用于智能搜索、推荐系统等方面,在许多应用领域都起到了无法取代的地位。
现如今我国在认知图像的开发方面突飞猛进,黄恒琪等人在认知图像的形成时通过对各种数据信息源完成了实物提取,进而对加工后的内容完成了实物对齐与认知融合,并通过相应的信息加工而产生了认知图像,他们把知识图谱后续的发展方向定位在知识图谱分布式存储和解决知识图谱使用率和重用率不高的问题上。
国内现如今缺少开源的中文医药领域的知识图谱,中国医药的发展博大精深,各种药物之间的配合更是经历数千年历史都没有研究透彻,相互之间复杂的使用规则也使得构建医药图谱变得很困难。如何获取高质量的数据源以及如何有效处理医药之间的关系成为构建图谱的重要环节。
本项目主要研究了知识图谱的构建,知识图谱是一个基于图形的数据结构,由节点和标注好的边组成。实质上是一个实物间关联的语言网络。在图谱中的节点可以代表不同的实物,而图表中的边是实物之间各种各样丰富的关联。认识图像的组成单位,基本上为"实物-关系-实物"三元组,包括与各个实物相对应的基本属性,实物之间利用这些关联线相互连接,从而形成网状的知识结构。实物是最基础的组成部分,如药物、病理、疾病症状和食品等;属性是实物所具有的基本特性,如病因、疾病名称、诊断周期和处理方式等;关联则是产生在各个基本实体间的基本关联,如病症所宜吃食品、病症使用药、病症所需检查方法等,具体如图1所示。
二、知识图谱的构建
知识图谱的形成可分成三个方式即自顶向下、自底向上以及相互混合方式。由顶往下的解决办法,是在设计初期就构造出知识图谱的模式层或本体结构,先定好了知识图谱总体的组织架构。由底往上的方法是初期没有预期定义好的组织架构,但是经过对数据源的大数据分析,在数据源的模式层中不断寻找实体属性之间的关系。使用数据层来对模式层加以指导。自顶向下和自底向上混合方式,是指在初期有了预定的组织结构,并且同时通过对数据源的分析,更新概念直接的关系,从而是知识图谱的更为可靠与完备。本项目中所构建的医药知识图谱采用了自底向上的构建方法,现在网络中收集数据,建立可靠的数据源,然后对其进行知识图谱建立。
三、主要设计
(一)数据收集
目前网络中还没有公开的比较优秀的医药数据集,因此考虑通过编写爬虫脚本来自动化的采集网络数据。通过分析调查,选择了“求医网”和“寻医问药网”这两个医药网站作为医药数据的信息来源。该网站收集到数据比较全面,格式也具有统一性。目标网站均是多以动态网站的方式呈现,对于动态网页的爬取利用到了python语言中的urllib包解析网页内容,requests库和bs4库获取网页信息。如图2所示。
在收集数据的过程中发现,网站本身具有限制访问IP的机制,当同个IP多次访问同一地址时,该反爬虫机制将会中断脚本的运行。对此设计了如下两个对策,第一种是在脚本编写过程中设计user-agent集合,使脚本在对网站的每次请求中都会随机取一个user-agent值,从而模仿不同用户的访问。第二种方法是准备IP连接池,每次请求都会在IP连接池中去一个IP进行访问。
(二)数据清洗和预处理
经过数据收集,抓取了近10000条疾病信息和5000条用药相关事宜和辅助信息,这些数据保存在事先设置好的MySQL数据库中。经检测发现,爬取的过程中将一些与实体无关的内容收集了下来,数据清洗就是要去除这部分无关信息。如在爬取“病症信息”时将网页中的“医生信息”也爬了下来。对数据进行xpath解析,最终得到12类实体信息,分别标记为疾病、药品、疾病症状、治疗周期、疾病原因、预防措施、易感人群、疾病简称、疾病名称、医疗科目、饮食注意、用药方法。将整理好的保存为Json格式,方便下一步构建知识图谱的进行。数据处理的流程如图3所示。
(三)知识图谱的存储
先对数据进行知识抽取,来实现以实体、属性和关系的三元组的组织形式。实现以后知识图谱的初步形式就建立成功了,下面要考虑存储知识图谱的问题。
通过比较,选择用了当下最热门的Neo4j图数据库来保存知识图谱。对于Neo4j数据库的数据导入可以采用以下三种方法,第一种方法是通过Cypher语句,Cypher语句是Neo4j特有的操作语句,可以将我们的数据编写成语句以后逐句运行,导入到图数据库中形成图谱。第二种方法是通过构建csv格式的数据文件,通过load csv进行一键导入,Neo4j将会把csv文件转化为图知识图谱。第三种方法是通过Neo4j-import工具导入数据形成图知识图谱。
(四)应用研究
基于构造出来的医药知识图谱,进一步研究其应用和实用价值。
1.多向查询功能
本项目以知识图谱作为系统的数据基础。知识图谱中存储了实体、关系和属性等知识要素。本项目所建立的医药知识图谱,包括了多个知识图谱实体类别、多个知识图谱关联类别,以及多个知识图谱的属性类别。也就是说,在进行过数据处理的知识库中查询不再只局限于“药品”,也可基于“疾病”“病症”等。反馈信息也不再只局限于“对症下药”,同时可包括“疾病所需检查”、“疾病忌吃食物”、“疾病并发疾病”等。
2.智能问答系統
基于知识图谱可以研究多种应用或研究不同系统的移植,如可以采用Bi-LSTM+CRF网络模型设计智能问答功能,构建过程可以分为四步:问题分类和分词、命名实体识别、模板匹配和模板翻译查询。具体描述如下,首先对由人提出的自然语言问题进行类型区域的划分,确定问题类型后对其进行保存;接着利用 Lucene 支持的 IKAnlyzer工具包对这些问题进行分词操作,为后续步骤中的实体识别构建词向量;接下来是最重要的命名实体识别过程,可以采用 Bi-LSTM+CRF 网络模型标注实体序列,再从全局角度考虑问题的实体识别,并在其过程中引入注意力模型用于提高语义分析的准确性,该阶段后就是模板匹配和翻译,最终得到问题答案。该功能的实现极有理的方便了用户操作,提升了用户的体验,同时照顾到了不同年龄段患者的使用,丰富了医药知识图谱在人工智能领域的研究。
四、目的与意义
医药知识图谱具有查询功能,可以给出用药或康复建议,方便普通人群对于疾病的自我诊断定位和治疗,指导医务工作者合理用药,使得疾病诊治、用药过程更加智能化,推进医疗系统信息化、智能化的进程,也推进了科学知识图谱向领域知识图谱转化可行性研究。
从方法上看,本项目用当下热门技术,从互联网上获取非结构化文本并从中抽取结构化文本,这不仅可以弥补当前研究领域结构化文本匮乏的不足,而且对于知识图谱的构建流程和方法都是一种探索和尝试。
从应用上看,知识图谱项目所涵盖的领域十分广阔,其中包括了人工智能、智能问答系统、语义知识检索等应用领域。本项目所提供的关于医疗领域的知识图谱,不仅能够给广大人民群众带来更便捷的疾病自我评估,也有助于人们及时发现疾病并积极诊疗,从而有效减少了"病急乱投医"的现状;还能够为医务工作者提供大量的医学资讯,便于他们检索有关知识,以便于正确分析出疾病;还能够通过知识图谱和病症,全面立体的推断出有可能出现的疾病并提供下一种可能的诊疗方法,从而辅助医务工作人员的诊疗流程,从而降低了医疗事故的发生。
医学知识图谱的研发与普及,可以产生重要的社会效益,降低社会的医药费用,并可以改善医学服务质量,改善人民的生命质量,故具有一定的现实意义。同时,具有强大关系网络的知识图谱也可以应用于许多方面,比如查询系统,问答系统等研究,这些研究将为知识图谱应用于更多具体领域打下基础。
参考文献:
[1]魏自强,郑伟伟,许永康《基于百科知识的医疗数据知识图谱构建》 网络安全技术与应用
[2]尚书飞 《基于知识图谱的医药问答平台的设计与研究》
[3]曹皓伟,徐建良,窦方坤《基于Neo4j生物医药知识图谱的构建》计算机时代
[4]人人都是产品经理《知识图谱在风控的应用》
[5]《基于arcgis的多媒体视频构建及应用研究》 大学生论文联合库