医疗自动问答方法及装置、存储介质、电子设备与流程

文档序号:16146957发布日期:2018-12-05 16:36阅读:223来源:国知局
本发明涉及自然语言处理
技术领域
及计算机人工智能领域,具体地说是医疗自动问答方法及装置、存储介质、电子设备。
背景技术
随着当前互联网的快速发展,传统的医疗行业开始拥抱互联网,涌现了一大批方便患者的问答的网址,其中的在线医疗问答社区发展较为迅速,因为它极大地减少了患者向医生求助的环节,患者在互联网社区发布问题,由相关专业的医生解疑答惑,避免了传统就医环节中,前往医院、挂号、排队的流程。然而,随着在线提问的用户数量的增加,问题的增加速度远远大于解答的速度,主要包括两方面的原因:一方面是患者的数量远远高于专业医生的数量,并且在社区中解答问题的医生数量更少;另一方面是由于患者缺乏专业的医学知识,无法专业地描述问题,因此会对同样的问题提出不同的描述,这就造成了问答社区中存在着大量的重复问题。医生数量稀少的问题暂无解决办法,但是可以从问题重复现象出发进行处理,如何使用自然语言处理技术为患者在已有的问答结果中选择匹配的答案并将其推荐给用户,减少医生的工作量,提高问题解答的速度是目前现有技术中急需解决的技术问题。专利号为cn107516110a的专利文献公开了一种基于集成卷积编码的医疗问答语义聚类方法,所述方法包括以下步骤:步骤1:从医疗平台上获取医疗问答数据,对医疗问答数据集进行预处理,并得到输入矩阵;步骤2:用卷积编码网络对不同的输入矩阵选取不同的卷积核进行核聚类,对核聚类后的聚类质量和多样性进行计算,根据聚类质量和多样性挑选出表示文本特征最好的n个卷积核;步骤3:将步骤2中挑选的卷积核分别通过卷积神经网络来进行训练操作;步骤4:融合不同卷积核的特征表示结果;步骤5:将融合后的特征表示结果输入自编码机,进行输入重构训练得到最佳特征表示;步骤6:将编码得到的最佳特征表示进行聚类,得到最终医疗文本语义聚类结果。但是该技术方案仅是对医疗文本的分类,无法精准获取医疗问题的精准答案。技术实现要素:本发明的技术任务是提供一种医疗自动问答方法及装置、存储介质、电子设备,来解决如何使用自然语言处理技术为患者在已有的问答结果中选择匹配的答案并将其推荐给用户,减少医生的工作量,提高问题解答的速度的问题。本发明的技术任务是按以下方式实现的,一种医疗自动问答方法,该方法包括如下步骤:s1、构建医疗问答知识库:从互联网的医疗问答社区爬取问答对,并对问答对进行预处理构建成医疗问答知识库;s2、构建问答模型训练数据集;对于每个医疗问题,在步骤s1中的医疗问答知识库中至少有一个正确答案,将正确答案与问题构建训练正例,将除正确答案以外的答案与问题构建训练负例;其中,负例的数量根据医疗问答知识库的大小设定;s3、构建问答模型:利用卷积神经网络构建问答模型;s4、训练问答模型和答案选择:在步骤s2所得到问答模型训练数据集中对步骤s3构建的问题模型进行训练。作为优选,所述步骤s1中构建医疗问答知识库的具体步骤如下:s101、利用爬虫技术,从互联网的医疗问答社区爬取问答对:在互联网上有着大量的医疗问答社区,其内容是开放可获取的;医疗问答社区均采用web形式进行展示,利用scrapy工具获取问题和所对应的答案,构建问答知识库;s102、对步骤s101中从互联网的医疗问答社区爬取的问答对进行预处理,主要包括拆分有多个答案的问题以及对问题和答案进行断字处理;s10201、拆分有多个答案的问题就是将问题与答案拆分成一一对应的形式,具体来说:医疗问答社区中同一个问题至少有两个正确答案,将问题与答案拆分成多个问答对;s10202、对问题和答案进行断字处理就是对问题和答案的内容进行断字处理,具体来说:将医疗问答社区中每个问题和答案,以汉字字符为基本单位,将每个字之间用空格分开且保留数字和标点符号。作为优选,所述步骤s2中构建问答模型训练数据集的具体步骤如下:s201、构建训练正例:将问题与其所对应的正确答案进行组合,构建训练正例,训练正例的形式为:(question,answer,1),其中,question指问题,answer指该问题所对应的正确答案,1表示正例;s202、构建训练负例:在医疗问答知识库中选中步骤s201的问题,再从医疗问答知识库中随机选择除步骤s201以外的问题及其该问题所对应的答案,将步骤s201的问题与随机选择的除步骤s201以外的问题所对应的答案组合,构建训练负例,训练负例的形式为:(question,bad-answer,0),其中,question指问题,bad-answer指随机选择的除步骤s201以外的问题所对应的答案,0表示负例;s203、构建训练数据集:将步骤s201和步骤s202所的的全部训练正例和训练负例的样本组合,并随机打乱训练正例和训练负例的样本构建最终的训练数据集;其中,训练正例和训练负例均包含三个维度,即question、answer或bad-answer、1或0,前两个维度根据实际包含的词语构建二维的张量表示,第三个维度构建一个向量表示。作为优选,所述步骤s3中构建问答模型的具体步骤如下:s301、构建字符映射转换表:根据步骤s1中预处理以后构建的医疗问答知识库,构建字符表,并将字符表中的字符映射为唯一的数字表示,例如可按照字符加入字符表的顺序从1开始依次递增,构建字符映射转换表;s302、构建输入层:输入层包括三个输入内容,从问题对应的训练正例中获取question和answer,从训练负例中获取bad-answer,输入层的形式为(question,answer,bad-answer);再根据步骤s301中得到的字符映射转换表将输入数据中的字符转化为数字表示;s303、构建字符向量映射层:指定字符向量的维度大小为embedding_dim,步骤s301中获取的字符表大小为vocab_num,使用[-1,1]的均匀分布定义(vocab_num+1)×embedding_dim的二维矩阵并将其作为模型的字符向量映射层的权重矩阵,其中,每一行对应医疗问答知识库中单个字符的向量表示,其中,第0行表示在知识库中没有出现的字符;s304、构建多尺度卷积层和堆叠卷积层:多尺度卷积层是利用不同尺寸的卷积核与经过步骤s303处理后的数据做卷积操作,捕获问题或答案里的字符级别的n-gram特征作为输出;堆叠卷积层是将不同尺寸的卷积核堆叠起来,将经过步骤s303处理后的数据自下而上地与各个卷积核做卷积操作,捕获问题或答案里句子级别的语义特征作为输出;再将多尺度卷积层的输出与堆叠卷积层的输出联接起来,作为问题或答案的特征向量;s305、构建相似度计算层:使用余弦相似度公式计算得到问题和正确答案的相似度sim_pos以及问题与错误答案的相似度sim_neg;余弦相似度的计算公式如下所示:其中,‖·‖表示l2范数,q和a分别指问题和正确答案或错误答案经过问答模型处理后获得的向量表示;q表示vector_question的向量,a表示vector_answer或vector_bad-answer的向量。作为优选,所述步骤s304中多尺度卷积层计算的具体步骤如下:(1)、定义卷积核的数量为n,卷积核的集合c={c1,c2,…,ci,…,cn},其中,ci表示卷积核的尺寸;(2)、根据步骤s303处理后的数据与卷积核的集合c内的卷积核分别做卷积运算得到结果o={o1,o2,…,oi,…,on};(3)、对每个oi依次使用relu激活函数,做基于字符向量维度的取最大值操作,得到最终的输出omulti。relu激活函数的公式如下为:所述步骤s304中堆叠卷积层计算的具体步骤如下:(1)、定义卷积核的数量为m,卷积核的集合c={c1,c2,…,ci,…,cm},其中,ci表示卷积核的尺寸;(2)、根据步骤s303处理后的数据与卷积核的集合c内的第1个卷积核c1做卷积操作,再经过relu激活得到o1;(3)、将o1与卷积核的集合c内的第2个卷积核c2做卷积操作,再经过relu激活得到o2;(4)、如此重复操作直至得到om,对其做基于字符向量维度的取最大值操作,得到最终的输出ostack。作为优选,所述步骤s4中训练问答模型和答案选择的具体步骤如下:s401、构建损失函数:根据步骤s305得到的问题和正确答案的相似度sim_pos以及问题与错误答案的相似度sim_neg使用max-margin损失函数计算模型的损失值,用损失值来优化模型的结果;max-margin损失函数的公式为:l=max(0,margin-sim_pos+sim_neg);其中,margin为超参数,根据实际数据调整;max(a,b)的形式表示取a和b之间最大值;s402、构建优化函数:使用adam算法作为模型的优化函数;其中,学习率参数设置为0.01,其他超参数使用pytorch中的默认值即可,其他超参数包括如下:betas=(0.9,0.999),betas用于计算梯度及其平方的运行平均值的系数;eps=1e-8,eps用于添加到分母中以增加数值稳定性;weight_decay=0,weight_decay用于控制权重衰减。s403、答案选择:将一个新的问题与医疗问答知识库中的所有候选答案组成输入样本;再分别送入利用步骤s3训练完成的问答模型,计算问题与候选答案之间相似度的数值;最后从所有结果中选取相似度值最高的一组作为新问题最有可能的答案并该答案推送给用户。一种医疗自动问答装置,该装置包括:医疗问答知识库构建单元,用于利用爬虫技术,从互联网上的医疗问答社区爬取问答对,并对医疗问答知识库的问题和答案进行预处理,预处理包括拆分有多个答案的问题以及对问题和答案的内容进行断字处理,构建医疗问答知识库;问答模型训练数据集生成单元,用于根据医疗问答知识库构建训练正例和训练负例,进而构建训练数据集;问答模型构建单元,用于构建字符映射转换表、输入层、字符向量映射层、多尺度卷积层和堆叠卷积层以及相似度计算层,进而构建问答模型;问答模型训练和答案选择单元,用于构建损失函数和优化函数,完成答案选择。作为优选,所述医疗问答知识库构建单元包括:爬虫单元,用于从互联网上抓取医疗问答社区中的内容,将结果保存为问答对的形式;爬虫数据处理单元,用于将爬虫获取的问答对拆分为多个单独对应的问答对,并将问题和答案句子进行断字处理,构建问答知识库;所述问答模型训练数据集生成单元包括:训练正例构建单元,用于将问题与其所对应的答案进行组合,构建为训练正例;训练负例构建单元,用于从问答知识库选中一个问题q1,再从医疗问答知识库中随机选择一个与问题q1不同的问题q2,将q1与q2的答案a2组合,构建训练负例;训练数据集构建单元,用于从训练正例构建单元和训练负例构建单元所得的全部问答的训练正例样本、训练负例样本组合在一起,并随机打乱顺序构成最终的训练数据集;所述问答模型构建单元包括:字符映射转换表构建单元,用于将医疗问答知识库中的所有字符构建为字符表,并将字符表中的每个字符映射为唯一的数字表示,可按照字符加入字符表的顺序从1开始依次递增,构建字符映射转换表。输入层构建单元,用于从问题对应的训练正例和训练负例中获取输入数据,分别获取训练正例中的问题question和答案answer以及训练负例中的答案,将其形式化为:(question,answer,bad-answer);字符向量映射层构建单元,用于构建并存储字符映射转换表中每个字符的向量表示;多尺度卷积层和堆叠卷积层构建单元,用于生成多尺度卷积层和堆叠卷积层,多尺度卷积层用于捕获问题或答案里字符级别的n-gram特征并输出,堆叠卷积层用于捕获问题或答案里句子级别的语义特征并输出;最后将多尺度卷积层的输出与堆叠卷积层的输出联接起来,作为问题或答案的特征向量;相似度评价构建单元,用于将多尺度卷积层构建单元和堆叠卷积层构建单元的输出的问题与答案的向量表示,进行联接,获得问题与答案的最终表示,并计算两者的余弦相似度;所述问答模型训练和答案选择单元包括:损失函数构建单元,用于计算问题和正确答案的相似度以及问题和错误答案的相似度之间的误差;优化函数构建单元,用于调整模型中的参数,使模型对问题与正确答案的相似度大于问题与错误答案的相似度;答案选择单元,用于处理新的问题时,从医疗问答知识库中使用训练好的模型选择正确的答案。一种存储介质,其中存储有多条指令,所述指令由处理器加载,执行上述的医疗自动问答方法的步骤。一种电子设备,所述电子设备包括:上述的存储介质;以及处理器,用于执行所述存储介质中的指令。本发明的医疗自动问答方法及装置、存储介质、电子设备具有以下优点:(1)、本发明通过爬虫技术能够完成医疗问答知识库的采集和预处理,生成医疗问答知识库,为后续建立医疗问答模型提供数据支持;(2)、本发明能够有效地对已有问答对进行建模构建问答模型,并提取问答对之间的多层语义关联关系;(3)、本发明能够定义并实现一套完整的端到端的自动问答模型,直接为用户的问题推荐相似度最高的答案;(4)、本发明能够利用医疗问题中的语义关系得到医疗问答模型,从而解决医疗问答中的答案选择问题;(5)、本发明对问题和答案采用字符级别的向量表征,并结合了卷积神经网络的强大的局部抽象能力,能够在一定程度上减小错别字的干扰;(6)、本发明将多尺度卷积层与堆叠卷积层组合共同表示医疗问答数据库中字符及句子的n-gram特征,能够更有效的提取医疗问题的特征,进而获取更加准确的答案;(7)、本发明使用自然语言处理技术为患者在已有的问答结果中选择匹配的答案并将其推荐给用户,减少医生的工作量,提高问题解答的速度,是计算机人工智能重要突破。附图说明下面结合附图对本发明进一步说明。附图1为医疗自动问答方法流程框图;附图2为步骤s1构建医疗问答知识库的流程框图;附图3为步骤s2构建问答模型训练数据集的流程框图;附图4为步骤s3构建问答模型的流程框图;附图5为步骤s4构建训练问答模型和答案选择的流程框图;附图6为步骤s304中多尺度卷积层和堆叠卷积层计算的流程框图;附图7为医疗自动问答装置的结构框图。具体实施方式参照说明书附图和具体实施例对本发明的医疗自动问答方法及装置、存储介质、电子设备作以下详细地说明。实施例1:如附图1所示,本发明的医疗自动问答方法,该方法包括如下步骤:s1、构建医疗问答知识库:从互联网的医疗问答社区爬取问答对,并对问答对进行预处理构建成医疗问答知识库;s2、构建问答模型训练数据集;对于每个医疗问题,在步骤s1中的医疗问答知识库中有两个正确答案,将正确答案与问题构建训练正例,将除正确答案以外的答案与问题构建训练负例;其中,负例的数量根据医疗问答知识库的大小设定;s3、构建问答模型:利用卷积神经网络构建问答模型;s4、训练问答模型和答案选择:在步骤s2所得到问答模型训练数据集中对步骤s3构建的问题模型进行训练。如附图2所示,步骤s1中构建医疗问答知识库的具体步骤如下:s101、利用爬虫技术,从互联网的医疗问答社区爬取问答对:在互联网上有着大量的医疗问答社区,其内容是开放可获取的;医疗问答社区均采用web形式进行展示,利用scrapy工具获取问题和所对应的答案,构建问答知识库;医疗问答社区中的问答对示例,如下表所示(将该问题作为示例问题,下面表述中统一称为“示例问题)”:s102、对步骤s101中从互联网的医疗问答社区爬取的问答对进行预处理,主要包括拆分有多个答案的问题以及对问题和答案进行断字处理;s10201、拆分有多个答案的问题就是将问题与答案拆分成一一对应的形式,具体来说:医疗问答社区中同一个问题有两个正确答案,将问题与答案拆分成两个问答对;如上述示例问题有两个正确答案,将示例问题与其对应的正确答案拆分为两个问答对,如下表所示:s10202、对问题和答案进行断字处理就是对问题和答案的内容进行断字处理,具体来说:将医疗问答社区中每个问题和答案,以汉字字符为基本单位,将每个字之间用空格分开且保留数字和标点符号。对示例问题进行断字处理,得到“前几天孩子得了病毒性脑炎在医院住了十来天出院了,过了一周去医院复查,血小板计数509偏高,怎么办?孩子现在11个月了。现在吃的药只有双嘧达莫片。请问医生孩子这是怎么了?血小板怎么才能降下来?谢谢!”。如附图3所示,步骤s2中构建问答模型训练数据集的具体步骤如下:s201、构建训练正例:将问题与其所对应的正确答案进行组合,构建训练正例,训练正例的形式为:(question,answer,1),其中,question指问题,answer指该问题所对应的正确答案,1表示正例;对上述经常断字处理后的问题及其对应正确答案组合构建训练正例:(“前几天孩子得了病毒性脑炎在医院住了十来天出院了,过了一周去医院复查,血小板计数509偏高,怎么办?孩子现在11个月了。现在吃的药只有双嘧达莫片。请问医生孩子这是怎么了?血小板怎么才能降下来?谢谢!”,“你好孩子得了病毒性脑炎在医院住了十几天复查发现血小板计数偏高指导意见:建议你积极接受医院的治疗病毒性脑炎血小板偏高是普遍的现象,除了采取吃药最好进行输液治疗”,1)。s202、构建训练负例:在医疗问答知识库中选中步骤s201的问题,再从医疗问答知识库中随机选择除步骤s201以外的问题及其该问题所对应的答案,将步骤s201的问题与随机选择的除步骤s201以外的问题所对应的答案组合,构建训练负例,训练负例的形式为:(question,bad-answer,0),其中,question指问题,bad-answer指随机选择的除步骤s201以外的问题所对应的答案,0表示负例;如:示例问题q1,再从医疗问答知识库中随机选择一个与示例问题q1不同的问题q2,将q1与q2的答案a2组合,可构建训练负例,可形式化为:(“前几天孩子得了病毒性脑炎在医院住了十来天出院了,过了一周去医院复查,血小板计数509偏高,怎么办?孩子现在11个月了。现在吃的药只有双嘧达莫片。请问医生孩子这是怎么了?血小板怎么才能降下来?谢谢!”,“你好,手足口病是一种肠道病毒病,具有肠道病毒感染的共同特征.主要侵犯手,足,口,臀四个部位,口腔溃疡疼痛,患儿流涎拒食.本病经1周后可自愈,一般对症治疗,可应用抗病毒药如阿昔洛韦利巴韦林(三氮唑核苷).中药有大青叶,夏枯草,或导赤散加减.还可以用双黄连口服液,严重的话,是需要到医院检查后治疗的。”,0)。s203、构建训练数据集:将步骤s201和步骤s202所的的全部训练正例和训练负例的样本组合,并随机打乱训练正例和训练负例的样本构建最终的训练数据集;其中,训练正例和训练负例均包含三个维度,即question、answer或bad-answer、1或0,前两个维度根据实际包含的词语构建二维的张量表示,第三个维度构建一个向量表示。如:使用vector_question、vector_answer、vector_posneg分别表示训练数据集的问题的向量表示、答案的向量表示、正负例标志的向量表示。假定每个字符用一个embedding_dim维的向量表示,则vector_question和vector_answer的张量维度为word_num×embedding_dim,其中,word_num指question、answer或bad-answer中字符的个数。如附图4所示,步骤s3中构建问答模型的具体步骤如下:s301、构建字符映射转换表:根据步骤s1中预处理以后构建的医疗问答知识库,构建字符表,并将字符表中的字符映射为唯一的数字表示,例如可按照字符加入字符表的顺序从1开始依次递增,构建字符映射转换表;以进行断字处理后的示例问题为例,构建字符表及字符映射转换表如下:字符映射字符映射字符映射字符映射字符映射前1医14小27个40请53几2院15板28月41问54天3住16计29。42生55孩4十17数30吃43这56子5来1850931的44是57得6,19偏32药45才58了7过20高33只46能59病8一21怎34有47降60毒9周22么35双48下61性10去23办36嘧49谢62脑11复24?37达50!63炎12查25现38莫51在13血261139片52s302、构建输入层:输入层包括三个输入内容,从问题对应的训练正例中获取question和answer,从训练负例中获取bad-answer,输入层的形式为(question,answer,bad-answer);再根据步骤s301中得到的字符映射转换表将输入数据中的字符转化为数字表示;示例问题的训练正例和训练负例构建一条输入数据,结果如下:(“前几天孩子得了病毒性脑炎在医院住了十来天出院了,过了一周去医院复查,血小板计数509偏高,怎么办?孩子现在11个月了。现在吃的药只有双嘧达莫片。请问医生孩子这是怎么了?血小板怎么才能降下来?谢谢!”,“你好孩子得了病毒性脑炎在医院住了十几天复查发现血小板计数偏高指导意见:建议你积极接受医院的治疗病毒性脑炎血小板偏高是普遍的现象,除了采取吃药最好进行输液治疗”,“你好,手足口病是一种肠道病毒病,具有肠道病毒感染的共同特征.主要侵犯手,足,口,臀四个部位,口腔溃疡疼痛,患儿流涎拒食.本病经1周后可自愈,一般对症治疗,可应用抗病毒药如阿昔洛韦利巴韦林(三氮唑核苷).中药有大青叶,夏枯草,或导赤散加减.还可以用双黄连口服液,严重的话,是需要到医院检查后治疗的。”)根据词表中的映射将上述的输入数据转换为数值表示(由于实际情况中词表数量大约有5000个,暂不在此全部展示),结果如下:(“112,332,70,167,73,274,24,19,302,27,213,77,33,30,86,707,24,489,98,70,55,86,24,2,61,24,10,163,122,30,86,120,29,2,32,110,750,883,408,0,584,168,2,142,52,318,68,167,73,54,33,0,48,66,24,4,54,33,57,3,28,323,6,488,1869,599,905,237,4,244,131,30,22,167,73,40,5,142,52,24,68,32,110,750,142,52,340,23,528,65,98,68,356,356,201”,“17,9,167,73,274,24,19,302,27,213,77,33,30,86,707,24,489,332,70,120,29,31,54,32,110,750,883,408,584,168,111,84,45,103,51,42,44,17,347,449,437,267,30,86,3,12,14,19,302,27,213,77,549,1815,763,584,168,5,991,1832,3,54,491,2,249,24,416,484,57,28,132,9,106,118,602,208,12,14”,“17,9,15,91,385,146,19,5,10,108,270,176,19,302,19,15,445,6,270,176,19,302,83,189,3,945,196,407,780,26,181,16,1284,1253,91,15,385,15,146,15,1050,359,48,88,292,15,146,431,864,933,155,67,15,199,153,156,2437,2171,39,26,469,19,37,87,163,36,8,247,434,15,10,127,99,35,12,14,15,8,101,20,259,19,302,28,53,703,1603,1061,1344,497,724,1344,770,828,275,1994,729,586,1616,821,26,100,28,6,56,776,809,15,1196,1977,826,15,80,84,1770,659,188,303,26,85,8,13,20,488,326,666,146,105,208,2,304,141,3,262,2,5,126,16,81,30,86,38,29,36,12,14,3,4”)。s303、构建字符向量映射层:指定字符向量的维度大小为embedding_dim,步骤s301中获取的字符表大小为vocab_num,使用[-1,1]的均匀分布定义(vocab_num+1)×embedding_dim的二维矩阵并将其作为模型的字符向量映射层的权重矩阵,其中,每一行对应医疗问答知识库中单个字符的向量表示,其中,第0行表示在知识库中没有出现的字符;在pytorch中,示例的代码实现如下:matrix=numpy.random.uniform(-1,1,((word_num+1),embedding_dim))matrix[0,:]=0embedding_layer=torch.nn.embedding((word_num+1),embedding_dim)。该层是问答模型的通用层,存储了全部字符对应的字符向量;对于question、answer、bad-answer的处理操作均完全相同。s304、构建多尺度卷积层和堆叠卷积层:多尺度卷积层是利用不同尺寸的卷积核与经过步骤s303处理后的数据做卷积操作,捕获问题或答案里的字符级别的n-gram特征作为输出;堆叠卷积层是将不同尺寸的卷积核堆叠起来,将经过步骤s303处理后的数据自下而上地与各个卷积核做卷积操作,捕获问题或答案里句子级别的语义特征作为输出;再将多尺度卷积层的输出与堆叠卷积层的输出联接起来,作为问题或答案的特征向量;s305、构建相似度计算层:使用余弦相似度公式计算得到问题和正确答案的相似度sim_pos以及问题与错误答案的相似度sim_neg;余弦相似度的计算公式如下所示:其中,‖·‖表示l2范数,q和a分别指问题和正确答案或错误答案经过问答模型处理后获得的向量表示;q表示vector_question的向量,a表示vector_answer或vector_bad-answer的向量。如附图6所示,步骤s304中多尺度卷积层计算的具体步骤如下:(1)、定义卷积核的数量为n,卷积核的集合c={c1,c2,…,ci,…,cn},其中,ci表示卷积核的尺寸;(2)、根据步骤s303处理后的数据与卷积核的集合c内的卷积核分别做卷积运算得到结果o={o1,o2,…,oi,…,on};(3)、对每个oi依次使用relu激活函数,做基于字符向量维度的取最大值操作,得到最终的输出omulti。relu激活函数的公式如下为:步骤s304中堆叠卷积层计算的具体步骤如下:(1)、定义卷积核的数量为m,卷积核的集合c={c1,c2,…,ci,…,cm},其中,ci表示卷积核的尺寸;(2)、根据步骤s303处理后的数据与卷积核的集合c内的第1个卷积核c1做卷积操作,再经过relu激活得到o1;(3)、将o1与卷积核的集合c内的第2个卷积核c2做卷积操作,再经过relu激活得到o2;(4)、如此重复操作直至得到om,对其做基于字符向量维度的取最大值操作,得到最终的输出ostack。在pytorch中定义卷积、relu激活函数、基于字符向量维度的最大值操作的代码如下所示:卷积代码:conv=torch.nn.conv1d(embedding_dim,output_channel,c_i),其中output_channel为输出通道大小,用户可自定义。relu激活函数代码:relu=torch.nn.relu()。基于字符向量维度的最大值操作代码:max=torch.nn.maxpool1d()。如附图5所示,所述步骤s4中训练问答模型和答案选择的具体步骤如下:s401、构建损失函数:根据步骤s305得到的问题和正确答案的相似度sim_pos以及问题与错误答案的相似度sim_neg使用max-margin损失函数计算模型的损失值,用损失值来优化模型的结果;max-margin损失函数的公式为:l=max(0,margin-sim_pos+sim_neg);其中,margin为超参数,根据实际数据调整;max(a,b)的形式表示取a和b之间最大值;在pytorch中,定义max-margin函数可用如下代码实现:loss=torch.nn.marginrankingloss(margin)。s402、构建优化函数:使用adam算法作为模型的优化函数;其中,学习率参数设置为0.01,其他超参数使用pytorch中的默认值即可;其中,超参数是指在开始训练过程之前,需要人工设置值的参数;该参数不能通过训练而自动优化;根据实际数据集的不同,该参数需要用户自行人工设置。在pytorch中,定义adam优化函数可用如下代码实现:optim=torch.optim.adam(lr=0.001)。s403、答案选择:将一个新的问题与医疗问答知识库中的所有候选答案组成输入样本;再分别送入利用步骤s3训练完成的问答模型,计算问题与候选答案之间相似度的数值;最后从所有结果中选取相似度值最高的一组作为新问题最有可能的答案并该答案推送给用户。实施例2:如附图7所示,基于实施例1的医疗自动问答装置,该装置包括:医疗问答知识库构建单元,用于利用爬虫技术,从互联网上的医疗问答社区爬取问答对,并对医疗问答知识库的问题和答案进行预处理,预处理包括拆分有多个答案的问题以及对问题和答案的内容进行断字处理,构建医疗问答知识库;问答模型训练数据集生成单元,用于根据医疗问答知识库构建训练正例和训练负例,进而构建训练数据集;问答模型构建单元,用于构建字符映射转换表、输入层、字符向量映射层、多尺度卷积层和堆叠卷积层以及相似度计算层,进而构建问答模型;问答模型训练和答案选择单元,用于构建损失函数和优化函数,完成答案选择。其中,医疗问答知识库构建单元包括:爬虫单元,用于从互联网上抓取医疗问答社区中的内容,将结果保存为问答对的形式;爬虫数据处理单元,用于将爬虫获取的问答对拆分为多个单独对应的问答对,并将问题和答案句子进行断字处理,构建问答知识库;问答模型训练数据集生成单元包括:训练正例构建单元,用于将问题与其所对应的答案进行组合,构建为训练正例;训练负例构建单元,用于从问答知识库选中一个问题q1,再从医疗问答知识库中随机选择一个与问题q1不同的问题q2,将q1与q2的答案a2组合,构建训练负例;训练数据集构建单元,用于从训练正例构建单元和训练负例构建单元所得的全部问答的训练正例样本、训练负例样本组合在一起,并随机打乱顺序构成最终的训练数据集;问答模型构建单元包括:字符映射转换表构建单元,用于将医疗问答知识库中的所有字符构建为字符表,并将字符表中的每个字符映射为唯一的数字表示,可按照字符加入字符表的顺序从1开始依次递增,构建字符映射转换表。输入层构建单元,用于从问题对应的训练正例和训练负例中获取输入数据,分别获取训练正例中的问题question和答案answer以及训练负例中的答案,将其形式化为:(question,answer,bad-answer);字符向量映射层构建单元,用于构建并存储字符映射转换表中每个字符的向量表示;多尺度卷积层和堆叠卷积层构建单元,用于生成多尺度卷积层和堆叠卷积层,多尺度卷积层用于捕获问题或答案里字符级别的n-gram特征并输出,堆叠卷积层用于捕获问题或答案里句子级别的语义特征并输出;最后将多尺度卷积层的输出与堆叠卷积层的输出联接起来,作为问题或答案的特征向量;相似度评价构建单元,用于将多尺度卷积层构建单元和堆叠卷积层构建单元的输出的问题与答案的向量表示,进行联接,获得问题与答案的最终表示,并计算两者的余弦相似度;问答模型训练和答案选择单元包括:损失函数构建单元,用于计算问题和正确答案的相似度以及问题和错误答案的相似度之间的误差;优化函数构建单元,用于调整模型中的参数,使模型对问题与正确答案的相似度大于问题与错误答案的相似度;答案选择单元,用于处理新的问题时,从医疗问答知识库中使用训练好的模型选择正确的答案。实施例3:基于实施例1的一种存储介质,其中存储有多条指令,指令由处理器加载,执行实施例1的医疗自动问答方法的步骤。实施例4:基于实施例3的一种电子设备,电子设备包括:实施例3的存储介质;以及处理器,用于执行所述存储介质中的指令。最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽快参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1