1.一种用于推荐医疗专家的知识图谱构建方法,其特征在于,具体步骤如下:
(1)使用网络爬虫技术采集国内医疗专家领域实体、实体属性及语料,对医疗专家数据集进行预处理,得到专家实体识别模型标注数据集ExpertData和研究实体识别模型标注数据集ResearchData;
(2) 利用专家实体识别模型标注数据集ExpertData和研究实体识别模型标注数据集ResearchData训练实体识别模型,得到基于BERT‑Dilated CNN‑CRF的国内医疗专家领域专家和研究实体识别模型ExpertModel和ResearchModel;
具体步骤如下:
(2.1)获取专家实体识别模型标注数据集ExpertData和研究实体识别模型标注数据集ResearchData;
(2.2) 对两个数据集进行随机抽取,得到训练集、测试集和验证集三个部分,分别定义为TrainA、TrainB,TestA、TestB,ValidA、ValidB;
(2.3) 根据TrainA:ValidA:TestA=7:2:1的比例划分专家实体识别模型标注数据集ExpertData,TrainB:ValidB:TestB=8:1.5:0.5的比例划分专家研究实体识别模型标注数据集ResearchData;
(2.4)各自得到三个完全独立的数据集TrainA={RTA1,RTA2,…,RTAn…,RTATrainA_Num}、ValidA ={RVA1,RVA2,…RVAn,…,RVAValidA_Num}和TestA ={REA1,REA2,…REAn,…,RTestA_Num},TrainB ={RTB1,RTB2,…,RTBn…,RTBTrainB_Num}、ValidB ={RVB1,RVB2,…RVBn,…, RVBValidB_Num}和TestB ={REB1,REB2,…REBn,…,REBTestB_Num};
(2.5) 计算ExpertData和ResearchData数据集的训练集、测试集和验证集具体的数量;
(2.6) 具体为,TrainA_Num=0.7Expert_Num,TrainB_Num=0.8Research_Num,ValidA_Num=0.2Expert_Num,ValidB_Num=0.15Research_Num,TestA_Num=0.1 Expert_Num,TestB_Num=0.05Research_Num;其中,Expert_Num表示专家实体识别模型标注数据集ExpertData的数据总数,Research_Num表示专家研究实体识别模型标注数据集ResearchData的数据总数;
(2.7) 建立Iterated Dilated CNN卷积层,每个元素对应一个characterwdc,每个文本对应一个一维的向量输入;
(2.8) 通过Iterated Dilated CNN对输入文本skip掉所有dilation width中间的输入数据,再对膨胀后的新数据每一个字生成一个logits;
(2.9) 经过一个隐含层输出到CRFLayer,并通过IDCNN计算出每个词的各标签概率;
(2.10) 对CRF层引入序列的转移概率,最终计算出loss值反馈回网络,模型输出使用Viterbi算法解码出标注结果;
(2.11) 利用BERT模型设定Dilated CNN‑CRF网络层数net、每层单元数batch、训练轮次epo、训练优化器optimizer和每次训练的数据长度data_len;
(2.12) 判断是否训练,若训练则执行步骤(2.13),否则执行步骤(2.23);
(2.13) 定义计数器count2,令count2 =1,用于遍历训练集TrainA和TrainB;
(2.14) 分别判断count2≤Expert_Num和count2≤Research_Num,若符合相对应的执行步骤(2.15),否则执行步骤(2.18);
(2.15) 将所有的数据每一条独立封装成record的形式,并利用回调函数读取record的数据并组成batch;
(2.16) 遍历训练集TrainA和TrainB,将其进行特征转换,定义estimator封装器,使用BERT模型将每条数据转换为字的embedding;
(2.17) 令count2=count2+1,执行步骤(2.14);
(2.18) 将测试集TestA和TestB分别输入到整个预测网络,其中,模型参数设置BERT中文模型路径,定义计数器flag,模型的准确度Accuracy;
(2.19) 令flag初始值为1;
(2.20) 经过训练周期利用验证集 ValidA和ValidB进行验证,记录Accuracy值;
(2.21) 若flag≤epo,则执行步骤(2.22),否则执行步骤(2.24);
(2.22) 令flags=flags+1,执行步骤(2.23);
(2.23) 结合Accuracy值并利用遗忘神经网络将误差反向传播回网络的功能来实现最优效果的参数获取,再循环执行步骤(2.21),得到最优值后执行步骤(2.24);
(2.24)选取Accuracy值最高的模型参数并保存模型ExpertModel和ResearchModel;
(2.25) 训练完成并选取精确度Accuracy最高的模型,得到基于BERT‑Dilated CNN‑CRF的医疗领域专家和研究实体识别模型ExpertModel和ResearchModel;
(3) 对国内医疗专家领域关系集进行预处理,得到关系抽取模型标注数据集RelationData;
(4) 重复RelationData数据集构建操作,形成新的完整RelationData数据集并整合对应的三元组Triples和按实体划分新三元组Triples_new,针对三元组集数据处理引入FP‑growth置信度辅助余弦相似度算法实现专家组合推荐;针对三元组集数据处理引入FP‑growth置信度辅助余弦相似度算法实现专家组合推荐的具体步骤如下:(4.1) 通过对关系抽取模型标注数据集RelationData进行处理和标注,得出实体Item1、关系属性relation和实体Item2;
(4.2) 定义三元组triplen=(Item1n,relationn,Item2n),并构成三元组数据集Triples;Triples={[Item11,relation1,Item21],..,[Item12,relation2,Item22],…,[Item1n,relationn,Item2n],..,[Item1triplenum,relationtriplenum,Item2triplenum]};
(4.3) 将数据集Triples根据相同Item1n和Item2n处理成以实体为单位的新数据集Triples_new,Triples_new={triple_new1,triple_new2,…,triple_newn,…,triple_newtriple_newnum};triple_newn=(Item1n,relation12n,Item2n,relation13n,Item3n,relation14n,Item4n,relation15n,Item5n);
(4.4) 将Triples_new数据集中按8:10比例抽取部分特征数据集GT,GT={GT1,GT2,…,GTn,..,GTnum},子集GTn为研究实体对应的属性与triple_newn中元素相对应;
(4.5) GTn={tg1n,tg2n,tg3n,tg4n,tg5n},其中,tg1n,tg2n,tg3n,tg4n,tg5n分别为已合作项目GTn研究的合作单位、合作项目、合作时间、合作对象、参考对象;
(4.6) 定义G为待合作研究项目,G={gt1,gt2,gt3,gt4,gt5},其中,gt1,gt2,gt3,gt4,gt5也分别为G项目的合作单位、合作项目、合作时间、合作对象、参考对象;
(4.7) 将已合作项目GTn数据集元素都转化成词向量的形式,一一对应构成行的数据集GTn_new,将待合作研究项目G也转化成词向量的形式,构成新的元素G_new;
(4.8) 定义计数变量count4,用来遍历G_new,赋初值count4=1;
(4.9) 定义simm表示待合作研究项目G_new与已合作项目GTn_new的相似度,simm构成相似度集Sim,赋初值Sim={};
(4.10) 判断是否count4≤num,若是跳到步骤(4.11),否则跳到步骤(4.13);
(4.11) 将Sim={{1,sim1},{2,sim2},…, {n,simnum},..,{num,simH}}按相似度由高到低排序构成新的相似度值集合Sim_new;
(4.12) count4=count4+1跳到步骤(4.10);
(4.13) 对合作项目已有专家逐个计算相似度值,并合并成总的数据集Simall,并取前top20构成数据集Sim_top;
(4.14) 定义Forexpert为预选合作专家集,Forexpert一一对应Sim_top,Forexpert={pm1,pm2,…,pmn,…,pm20};
(4.15) 定义ExportCom为现有的医疗专家全组合集,ExportCom={Com1,Com2,…,Comx,…,Comnumber}, Comx为单个项目的专家组合,Comx={exp1,exp2,…,expn,…,expnum};
(4.16) 遍历专家组合集ExportCom,统计每个专家项集数Rn和对应支持度Hn,以及专家总数expnum,n为专家编号;
(4.17) 设置相应阈值q和p,q为专家项集数,p为专家项支持度,定义计数变量count5=
1;
(4.18) 依次从专家组合集ExportCom中抽取专家项;
(4.19) 如果count5≤expnum则跳转到步骤(4.20),否则跳转到步骤(4.24);
(4.20) 如果Rn≤q且Hn≥p则跳转到步骤(4.21),否则跳转到步骤(4.22);
(4.21) 符合条件的所有数据构成新的数据集ExportCom_new,调用FP‑growth算法,生成FP树,跳转到步骤(4.23);
(4.22) 该专家为无效专家项,直接删除;
(4.23) 令count5=count5+1,跳转到步骤(4.19);
(4.24) 如果pmn∈ExportCom_new则跳转到步骤(4.26),否则跳转到步骤(4.25);
(4.25) 该元素属于无效元素,直接删除;
(4.26) 符合元素构成集合替代原ExportCom_new集合和集合元素pmn;
(4.27) 遍历FP树,得到每个pmn对应条件模式基val,构成评估集合Valuation,Valuation={val1,val2,…,valnumber};
(4.28) 选取Valuation评估集与Forexpert预选合作专家集综合评分最高的三个专家元素valtop1,valtop2,valtop3;
(4.29) valtop1,valtop2,valtop3为医疗专家待合作项目G的推荐组合;
(5) 根据三元组数据,构建国内医疗专家知识图谱;
(6) 开放Neo4j图数据库接口API和关联挖掘系统接口API,用户通过WEB页面实现医疗专家知识图谱和专家合作推荐结果的查询访问。
2.根据权利要求1所述的一种用于推荐医疗专家的知识图谱构建方法,其特征在于,所述步骤(1)中得到专家实体识别模型标注数据集ExpertData和研究实体识别模型标注数据集ResearchData的具体步骤如下:(1.1)选取中国知网上医疗专家研究发表的文献和各地区医疗网站上专家信息数据作为数据源;
(1.2) 利用网络爬虫从结构化网页中获取国内医疗领域专家和研究的实体以及实体的属性作为结构化数据和国内医疗专家领域的长文本作为非结构化数据;
(1.3) 根据现有医疗文本信息手动构建无效词汇表UnuseData;
(1.4) 定义经过预处理后的结构化数据集为Struc_Data,Struc_Data={voc1, voc2,…,vocn,…,vocStruc_DataNum};
(1.5) 对比无效词汇表UnuseData数据集,实现Struc_Data数据集的词汇过滤形成新的Struc_Data结构化数据集;
(1.6) 对新数据集Struc_Data采用BIEO的序列标注方式,对实体的每个字进行标注,B表示实体开头,I表示实体词中对应字,E表示实体词汇结尾,O对应非实体内单字;
(1.7) 定义计数器count1,令count1=1,用于遍历Struct_Data数据集;
(1.8) 若count1≤Struc_DataNum,执行步骤(1.9),否则执行步骤(1.11);
(1.9) 对数据集Struc_Data中实体中的每个字构成Words数据集,BIEO序列标注法的标注结构构成标签数据集Labels,分别为Words={Word1,Word2,…,Wordn,…,WordWordsNum}和Labels ={Label1,Label2,…,Labeln,…,LabelWordsNum};
(1.10) count1=count1+1;
(1.11) 定义序列标注预处理后的专家实体模型标注数据集为ExpertData;
(1.12) 将BIEO序列标注结果一一对应存储到专家实体数据集ExpertData中,ExpertData={[Word1,Label1],[Word2,Label2],…,[Wordn,Labeln],…, [WordWordsNum,LabelWordsNum]}和专家研究实体数据集ResearchData={[Word1,Label1], [Word2,Label2],…,[Wordn,Labeln],…,[WordWordsNum,LabelWordsNum]}。
3.根据权利要求1所述的一种用于推荐医疗专家的知识图谱构建方法,其特征在于,所述步骤(3)中得到关系抽取模型标注数据集RelationData的具体步骤如下:(3.1) 定义UnStruc_Data为国内医疗专家领域长文本预处理后的国内医疗专家领域非结构化数据集,满足UnStruc_Data={Sentence1,Sentence2,…, Sentencen,..,SentenceUnStruc_DataNum};
(3.2) 定义Expert_Research为国内医疗专家领域非结构化数据集UnStruc_Data中每个句子对应的实体构成的数据集,Expert_Research={expert_research1,expert_research2,…,expert_researchn,…,expert_researchUnStruc_DataNum};
(3.3) 定义计数器count3,令count3 =1;
(3.4) 若count3
(3.5) 遍历步骤(3.1)中集合UnStruc_Data数据集, 利用步骤(2)中的国内医疗专家领域专家实体识别模型ExpertModel和研究实体识别模型ResearchModel,识别Sentencecount3中的实体,将数据处理分别存入对应数据集Expert和Research中;
(3.6) 令count3=count3+1,执行步骤(3.4);
(3.7) 将UnStruc_Data分别与Expert和Research中的数据打包为一个个元组,得到两个数据集RawData1={[expert1,Sentence1], [expert2,Sentence2],…,[expertUnStruc_DataNum,SentenceUnStruc_DataNum]}和RawData2={[research1,Sentence1],[research2,Sentence2],…,[researchn,Sentencen],…,[researchUnStruc_DataNum,SentenceUnStruc_DataNum]};
(3.8) 定义Relation分别为数据集RawData1和RawData2中实体之间关系;
(3.9) 根据数据实体关系的单一化,直接手动添加实体数据关系Relation;
(3.10) 定义预处理后的实体关系集合RelationData,将RawData1和RawData2数据集根据相同Sentencen并结合Relation打包为一个个元组并两者整合,得到数据集RelationData={[expert1,research1, Relation],…,[expert2,research2,Relation],…,[expertUnStruc_DataNum,researchUnStruc_DataNum,Relation];
(3.11) 数据处理结束,得到关系抽取模型标注数据集RelationData;
(3.12) 重复上述所有步骤得到医疗专家实体和医疗研究与其属性的其他关系数据集并加入RelationData中构成新的关系抽取模型标注数据集RelationData。
4.根据权利要求1所述的一种用于推荐医疗专家的知识图谱构建方法,其特征在于,所述步骤(5)中的构建国内医疗专家知识图谱具体步骤如下:(5.1) 通过利用步骤(2)和步骤(3)得到的医疗专家领域专家和研究实体识别模型ExpertModel和ResearchModel,在医疗专家领域文本数据集中抽取出专家实体Item1、关系Relation和研究实体Item2;
(5.2) 定义三元组triple=(Item1,Relation,Item2);
(5.3) 定义知识三元组数据集Triples,得到Triples={triple1,triple2,…,triplen},并重复操作得到不同关系的三元组,再组合构成完整得三元组Triples_new,n为数据集Triples_new中三元组总数;
(5.4) 将Triples_new保存至csv文件,存入到Neo4j的import文件夹;
(5.5) 使用Neo4j数据库语法导入,构建国内医疗专家领域知识图谱。
5.根据权利要求1所述的一种用于推荐医疗专家的知识图谱构建方法,其特征在于,所述步骤(6)中的用户通过WEB页面实现医疗专家知识图谱和专家合作推荐结果的查询访问具体步骤如下:(6.1) 开放Neo4j 图数据库API和国内医疗专家关联挖掘系统API;
(6.2) 创建线程池Thread Pool;
(6.3) 判断线程池Thread Pool所有任务是否执行完毕;
(6.4) 用户输入查询语句,包含专家姓名数据;
(6.5) 子线程Child Thread获取任务处理;
(6.6) 系统构造包含查询信息的Cypher查询语句,获取专家实体相关属性数据,通过关联挖掘系统提供的接口对查询所得的专家实体数据进行实体间关系维度扩展以及进行推荐专家实体对应的其他专家;
(6.7) 将系统通过关联挖掘所得的实体数据集封装返还WEB应用程序;
(6.8) 结束该子线程Child Thread;
(6.9) 关闭线程池Thread Pool;
(6.10) WEB应用程序通过ECharts渲染专家实体数据和实体间关系数据,实现医疗专家知识图谱和专家合作推荐结果的查询访问。