1. 引言
伴随医学信息化的提升,现已经产生和积累了大量医学数据,且在健康网上咨询的情况也越来越常见。而回答咨询的基础为疾病推理,所以提高疾病推理的准确率有利于更好地推荐宜忌食物或推荐就诊科室等推荐服务。而儿童时期为人生的关键时期且儿童疾病的症状明显,所以儿童疾病推理具有好的应用前景。
疾病推理即根据病人的症状等信息,推理出病人可能有的疾病。Wang等人 [1] 结合专家系统和人工智能的推理模型正确率高,但需要设定大量规则。Qiu等人 [2] 基于贝叶斯的方法能够模拟人脑的学习,但所学的结构可能不太准确。龚乐君等人 [3] 基于决策树方法准确率高,但是微调数据可能会使模型失去稳定性。Jia [4] 结合了知识图和深度强化学习提出模型DKDR,该模型诊断准确率较高,但是特征少的时候对训练结果的影响较大。刘勘等人 [5] 提出的CDR (CNN-DNN-TransR)模型准确率提升高,但是该模型需要在较为完备的知识图谱上进行且由于医疗记录的复杂性,用语的口语化和多样性,将影响症状实体准确识别。Chai [6] 提出了BLSTM (Bi-directional Long Short-Term Memory)用于甲状腺疾病的诊断,该方法实验结果稳定,对甲状腺疾病的认知率在80%以上,但是参与的特征对结果影响较大。
上述方法的问题是在多种疾病推理上准确率低,或未考虑输入不平衡性的问题。因此受混合推理 [7] 的启发,本文结合了Neo4j构建的知识图谱储存数据可用性好,TransE推理速度快,朴素贝叶斯在多分类上复杂度低和自适应机制抗输入不平衡性干扰效果好的优点,从而提高了在儿童多种疾病推理上的准确率。
2. 医学知识图谱分析
知识图谱是图G = (V, E)的某种扩展形式,V是顶点集合,表示实体,E是边集合,表示实体间的联系。知识图谱是图数据模型的继承和发展,其在一般图模型的顶点和边上附加更多的属性信息,用于描述现实世界中事物的广泛联系 [8]。其常用类型为RDF图。
定义1. RDF图。设U、B和L为互不相交的无限集合,分别代表URI、空顶点和字面量。一个三元组
称为RDF三元组,其中s是主语,p是谓语,o是宾语。RDF图G是三元组(s, p, o)的有限集合。
定义2. 医学知识图谱 MedKG (Medical Knowledge Graph)。MedKG如图1所示,可用式(1)表示图谱中的每一条医学知识 [9]。h、t分别为头实体和尾实体,r为实体间的关系。
(1)

Figure 1. Structure diagram of MedKG
图1. 医学知识图谱的结构图
定义3. MedKG的实体(结点)集合。MedKG的实体集合是医学领域中具体事物的集合,主要由疾病、症状、科室等构成,部分结点集合如表1所示。MedKG中的
。
定义4. MedKG的关系(边)集合。MedKG的关系集合是医学领域中具体事物间联系的集合,主要由类别、病因等构成,部分关系(边)集合如表2所示。MedKG中的
。
3. 医学知识图谱分析
3.1. 解决思路和整体框架
在多种疾病推理上准确率低问题的主要特点:大规模数据,不同疾病含有同种症状和不同疾病的症状数不同。针对大规模数据,过去常用CiteSpace知识图谱 [10],但其可用性差和计算性差。Neo4j具有成熟数据库的所有特性 [11],因此本文用Neo4j构建知识图谱。
推理机部分,由于以知识图谱为数据结构,因此使用TransE推理机方便且效率高。但是TransE在多对多上准确率低,为此提出了许多改进的模型,但文献 [12] 用实验表明了在生物医学数据集上,TransE在链接预测上依旧表现出了最好的性能和效率。所以针对不同疾病含有同种症状的问题,引入在多分类中有较好效果的朴素贝叶斯算法,本文建立TransE-NBC模型。同时针对不同疾病的症状数不同的问题,即输入不平衡性的问题,建立了自适应机制,即模型会根据数据集的输入数目的特点进行拆分,拆分后的每个模型将处理输入数目近似的数据集,且拆分后的每个模型的参数会根据对应的数据集训练后自主调节得出。通过以上的操作,本文最终建立了推理模型Adapt-TransE-NBC。整体框架如图2所示,整体框架由知识图谱的构建、推理机学习阶段对推理机参数的训练和推理机的应用(测试)阶段的说明组成。
3.2. 知识图谱的构建
本文采用Neo4j构建知识图谱,具体过程如下所示:
1) 利用Python的urllib库获取网页上的需要字段。
2) 基于Pkuseg分词包进行分词操作,将所需要的关键信息和其他无用信息进行分离。
3) 基于THUOCL_medical词库做关键词提取,从分词后的数据,提取关键信息。
4) 由于THUOCL_medical词库不一定涵盖了所有的词,因此结合人工提取和补充关键词,得到以三元组<症状,发生部位,疾病>为结构的数据集。
5) 将上述获得的三元组可视化后,构建出知识图谱。
构建完成后,根据式(2)计算出<症状,发生部位>随机出现在疾病c中的先验概率P(c),其中N是三元组集中所有的疾病数,Nc是三元组集中疾病c的数目。
(2)
再根据式(3)计算条件概率P(w|c),其中Nd,c为疾病c包含<症状,发生部位>d的疾病数。
(3)
获得以<症状,发生部位,疾病>为结构的三元组集和概率集合(先验概率和条件概率)。
3.3. 推理机学习阶段
首先选取所有<症状,发生部位,疾病>三元组,送入翻译模型TransE里训练和评估后得到映射向量。定义输入参数为x,x代表的是预测疾病时输入的<症状,发生部位>的数目。定义边界值M,其作用是根据输入数目与边界值的大小关系将数据集分割成两份。M的取值范围如式(4)所示,具体的M的值的确定通过训练得出。
(4)
分割后,找合适的搭配参数。定义当x小于M时的参数为α1和β1,当x大于等于M时的参数为α2和β2。其取值范围如式(5)所示。
(5)
将以三元组<症状,发生部位,疾病>为结构的数据集作为训练数据集。假设头向量h为症状,关系向量r为发生部位和尾向量t为疾病,且L类疾病分别设为
。将数据集中的单个疾病的三元组<症状,发生部位,疾病>输入。判断输入的<症状,发生部位>的数目,让不同输入数目的三元组进入不同的模型,算法如式(6)所示。
(6)
式(6)中的Gapi为TransE推理机,其构成过程如下所示:由x组症状及发生部位预测疾病,则将x组输入与输出间的距离值累乘得到最终的距离值,如式(7)所示。其中L1为曼哈顿距离, L2为欧氏距离。
(7)
其中单个症状及发生部位与疾病的距离值的计算方法为Gapi,如式(8)所示。
(8)
式(6)中的Chancei为修改后的朴素贝叶斯分类器,其构成过程如下所示:首先朴素贝叶斯分类器假设各个特征相互独立,其算法如式(9)所示。
(9)
经过式子(9)后再通过病症寻找最大概率疾病输出最终结果。因式(9)输出的是最大值,因此修改后TransE推理机的算法如式(10)所示。
(10)
其中单个症状及发生部位与疾病间概率值的算法为Chancei,其表达式如式(11)所示。
(11)
获得了Gapi和Chancei后,进行累乘得出结果,如式(12)所示。
(12)
但两个较小数乘积后累乘,可能会产生极小数而溢出下界造成错误,因此一般加入log函数解决该问题,从而避免下界溢出的问题,但为了防止0值对模型的影响,因此将原本累乘得到的F(bj)修改为累加得到,具体的F(bj)的计算方式如式(13)所示。
(13)
由于式(8)和式(10)都求最大值且都为正值,所以当输入为x组hi和ri输入时,最终输出的疾病为最大的F(bj)值的所对应的疾病bj,具体的Ffinall值的算法如式(14)所示。
(14)
式(6)在式(14)的基础上增加自适应机制,分别作用于输入和输出上。输出上的自适应机制:在推理训练时将根据数据集的输入的特性,调节式(14)中Gapi和Chancei所占的权重比。输入上的自适应机制:考虑到算法复杂度的问题,因此在训练时根据输入的数目将输入数据集进行拆分并且仅将其拆分成两份。
输入数据需要经过式(6)后进行训练,将数据集经过所有的M,α1,β1,α2和β2后训练得出总准确率最高时的Mf,α1(f),β1(f),α2(f)和β2(f)。
3.4. 推理机应用阶段
将总准确率最高时的Mf,α1(f),β1(f),α2(f)和β2(f)带回式(6)后如式(15)所示。
(15)
应用阶段,将x组<症状,发生部位>经翻译模型后输入到推理模型中,模型首先判断输入数目x与边界值Mf的大小关系,然后将x组<症状,发生部位>输入到对应的拆分模型中,对应的拆分模型中会输出值最大的。最大值对应的疾病,即为输出的预测疾病。
4. 实验
4.1. 数据集及预处理
数据来源于“快速问医生”健康网上儿童相关疾病数据。“发生部位”来源于“夏禾健康”网。按图谱构建预处理后Neo4j可视化。图3是疾病“百日咳”在Neo4j知识图谱上的部分图像,如果正确推理出疾病,有利于更好地推荐宜忌食物或推荐就诊科室等推荐服务。

Figure 3. Some images of the disease “whooping cough” on Neo4j
图3. 疾病“百日咳”在Neo4j上的部分图像
构建完成后,以每个疾病对应的多个<症状,发生部位>随机产生输入,形成20万条左右的数据集,测试数据集的信息如表3所示。负样本为当预测单个疾病时其他疾病名作为错误样本,将正负样本合并成为实验数据。将20万条左右的数据集分成10组,每次模型都分别测试10组,并计算每个模型的测试标准值。
4.2. 推理机部分的实验设置
Adapt-TransE-NBC推理机是能够根据症状和发生部位推理出疾病。由于实际情况是由随机数目的症状和发生部位输入,因此实验设置将每个疾病的随机数目的症状和症状对应的发生部位作为输入预测疾病。对比算法为Text-CNN和Bi-LSTM/BLSTM。
Text-CNN:基于卷积神经网络分类的推理机。
Bi-LSTM/BLSTM:基于双向LSTM的推理机。
实验还对比了不同的TransE词向量维度时的Adapt-TransE-NBC,目的是为了体现模型的灵活性,并为进一步的改进提供方向。
4.3. 测试标准
标准为精确率,召回率和F1值,分别用Precision,Recall和F1表示,如式(16)~式(18)所示。当做了N次时,需要计算平均值作为测试标准,Precision,Recall和F1的平均值分别用 M_Precision,M_Recall和M_F1表示,如式(19)~式(21)所示。
(16)
(17)
(18)
(19)
(20)
(21)
4.4. 实验结果和分析
测试结果如表4所示。Adapt-TransE-NBC(20)是TransE的词向量维度为20时的Adapt-TransE-NBC模型,而Adapt-TransE-NBC(50)是TransE的词向量维度为50时的Adapt-TransE-NBC模型。表中的Precision,Recall和F1是10次实验中最好效果时的值,而M_Precision,M_Recall和M_F1为实验10次的平均值。
Adapt-TransE-NBC在Precision,Recall,F1,M_Precision,M_Recall和M_F1上相对于Text-CNN和Bi-LSTM/BLSTM均有所提升,且随着词向量维度提升,所有的指标仍有小幅度提升。
因此当在选择<症状,发生部位>输入后,该模型可更可靠地预测出疾病。但词向量维度的提升需更长时间的TransE训练和整体模型训练,因此需要根据实际情况慎重考虑。
5. 结论
针对现有模型在儿童多种疾病推理上准确率低的问题,本文提出了以Neo4j构建知识图谱并建立了Adapt-TransE-NBC模型作为疾病推理机的机制。通过建立的自适应机制使每个模型处理的为输入数目近似的数据集,且使每个模型不再是简单的组合,而是根据数据集训练出合适的搭配参数,从而减少了输入不平衡性的影响。通过实验表明,提出的方法在儿童多种疾病推理上的精确率,召回率和F1值均有所提升。因此所提出的方法可为在健康网上回答咨询和推荐服务提供更可靠的基础。
下一步的任务是,探究如何更好地优化模型的算法结构和降低训练时间,使其能够适应更大型知识图谱的推理。