医工互联

 找回密码
 注册[Register]

手机动态码快速登录

手机号快速登录

微信登录

微信扫一扫,快速登录

QQ登录

只需一步,快速开始

查看: 164|回复: 0
收起左侧

如何构建一个辅助诊断疾病模型

[复制链接]

  离线 

发表于 2022-10-21 18:55:19 | 显示全部楼层 |阅读模式 <
如何构建一个辅助诊断疾病模型

辅助诊断疾病模型旨在根据病历或者病情描述给出诊断疾病的提示。这款模型用到了人工智能领域的深度学习方法,构建的过程用到了大量的真实病历。学习过的病历数越多,模型的准确度通常会越高,超越传统的通过规则和统计的辅助诊断方法。
传统的通过规则和统计的辅助诊断疾病方法,其原理是识别关键信息。以规则为例,该方法通常采用是一套复杂的决策体系,是一套大量的存在何种情况就走哪条判别路径的规则系统,典型的就是以《临床指南》作为原始规则素材,将与或非逻辑转换为代码,写成一套系统。以统计为例,该方法通常采用贝叶斯方法,识别病历中的关键词,例如症状等,通过计算这些关键词在全量病历中对应哪种诊断最多,给出概率最大的诊断。以上两种传统方法都有明显的不足。规则方法过于死板,规则难以穷尽,规则之间错综复杂的关系难以梳理,并固定为程序。统计方法最多只能统计有限个关键词,对于表述的多样性无能为力,而且常用的朴素贝叶斯方法有一个独立事件的强假设与现实世界不相符。
本篇报告提出一种辅助诊断疾病模型的构建方法,利用到了深度学习在自然语言处理领域的成果。该方法的核心是深度神经网络中的文本分类算法。这种方法已经被证明在准确率上远超传统的统计方法和传统的机器学习方法。同时,这种方法需要远超传统方法的数据用于学习,通过对海量数据的学习,模型就会具备见多识广的能力。采用这种方法,不需要堆砌大量的诊断规则,不仅便于维护,而且节省人力。采用这种方法,避免了独立事件的强假设,不仅能够学习到不同诊断之间的相关性,还能对各类诊断都给出一个基于大数据分析的概率。
下文将着重阐述该模型构建的过程和方法。为此,首先下文对本模型将会所运用到的深度学习算法核心做一个介绍。
本模型所运用到的深度学习算法核心是循环神经网络模型。神经网络是为了模仿人类大脑构建的一种模型结构。模型内部有一到多层,每一层有大量被称为神经元的节点,每一层的神经元与前后层的神经元有信息传递,就好像高等动物神经系统内的突触,信息传递就好像突触发出信号。神经网络模型能够计算这些信号,依赖于神经网络能够对神经元之间的前馈传递和反向传递进行运算。最终神经网络能够就在不断地前馈和反向传递中调整每个神经元的参数,最终这些神经元的组织结构和所带的参数就是神经网络模型。
循环神经网络模型是深度神经网络的一种(图1)。该模型适合用于文本序列,不仅能学习到文本的结构特征,而且还能学习到文本的语义关系。循环神经网络模型中也有神经元,原始文本序列传递信号给神经元,神经元输出隐藏状态,神经元之间可前后传递信息。循环神经网络通过计算这些传递的信息,调整每个神经元的参数,最终那一条神经元的组织结构和所带的参数就是循环神经网络模型。
200020x0e5o04bbuo6s566.png

Figure 1 循环神经网络模型
长短时记忆模型是循环神经网络模型的一个变种(图2)。这是本篇报告将采用的循环神经网络模型的具体形式。长短时记忆模型能解决标准循环神经网络模型在长时记忆上的不足。长短时记忆模型将循环神经网络模型中的那一串神经元转换为一串细胞单元。在细胞之间,传递着细胞状态和前文信息的隐藏状态。每个细胞内部通过计算新节点的输入信息,先前节点逐渐遗忘后的信息,前一个细胞的细胞状态,得出新的隐藏状态,以及新的细胞状态。每个细胞内部通过循环结构,将三个输入信息发生交互,通过一系列非线性结构,生成两个输出信息。长短时记忆模型通过对原始文本序列的学习,不断调整每个细胞内部的参数,会逐渐学习到前文中哪些字符所代表的信息是可以在短时间内被遗忘的,哪些字符所代表的信息需要在长时间内被铭记。最终那一条细胞单元的组织结构和所带的参数就是长短时记忆模型(图3)。
200021wa4kx4o5hd4adp1r.png

Figure 2 长短时记忆网络模型
长短时记忆网络模型中的细胞结构中有几个被称为“门结构”的重要组件(图3)。图中展现的是那一条细胞单元中第t个细胞结构中的计算细节。输入的有第t个节点的信息xt,先前节点逐渐遗忘后的信息ht-1,前一个细胞的细胞状态Ct-1¬,输出的有新的隐藏状态ht,新的细胞状态Ct。细胞结构中有三个门,分别得到输入门的激活向量it,遗忘门的激活向量ft,输出门的激活向量ot。用到的激活函数有sigmoid函数σ和双曲正切函数tanh。Ui、Uf、Uo分别是输入向量x的输入门、遗忘门、输出门的权重矩阵,Wi、Wf、Wo分别是隐藏状态向量h的输入门、遗忘门、输出门的权重矩阵,这些权重矩阵就是长短时记忆网络模型中的细胞单元所带的参数。(表1)
200022httwjhfzm1fhjtii.png

Figure 3 长短时记忆网络的细胞结构及计算方式
参数参数说明it输入门的激活向量ft遗忘门的激活向量ot输出门的激活向量xtt节点的输入向量htt节点的隐藏状态向量Ctt节点的细胞状态U输入向量x的权重矩阵W隐藏状态向量h的权重矩阵σsigmoid函数tanh双曲正切函数Table 1 长短时记忆网络的内部参数
模型和模型可以叠加成为更为复杂的模型。将一个从左到右学习文本的长短时记忆模型和一个从右到左学习文本的长短时记忆模型叠加,同时调整前向和后向两条细胞单元所带的参数,这样就能得到一个双向长短时记忆模型(图4)。双向长短时记忆模型不仅学习到了每个字符受到前文信息的影响,而且学习到了每个字符受到后文信息的影响。双向长短时记忆模型可以直接输出一个代表文本分类结果的向量,也可以输出一条新的序列。如果再把这条新的序列输入到另一个双向长短时记忆模型,这样的模型就是一个两层的双向长短时记忆模型。
200023r9kzl1z887fbxbcs.png

Figure 4 双向长短时记忆网络模型
以上就是本辅助诊断疾病模型将会使用的核心算法的理论背景介绍。病历作为文字信息,每个字或词在模型中是一个向量,该向量是这个字在N维空间中的表示。不同的字有不同的向量,在文字进入模型的时候,模型会将其转换为一个向量,这个过程叫做向量化。
本模型将会运用的向量化方法是将分类进行one-hot向量化,以及将字嵌入到向量空间。One-hot向量化是指将类别转换为一个N维空间向量 ,在这个N维空间里,该向量只有一个维度的值为1,其余皆为0,故称为one-hot向量。字嵌入是指将一个字转换为一个N维空间向量,这个N维空间向量的具体值由一个随机数初始化。
下文将详细阐述上文提到的算法如何有望训练出一个辅助诊断疾病模型(图5)。
200024r44b14bdhzggt1b6.png

Figure 5 如何训练出辅助诊断疾病模型
第一步是定义好可诊断疾病的范围(图6)。只有明确的可诊断疾病范围确定好之后,才能在这个诊断列表中匹配合适的诊断结果。在模型训练初始,每一个疾病诊断对应一个one-hot向量,只有在一个维度上的值为1,其余维度的值为0,向量维数是可诊断疾病数量。
200024oqei315sqk13qs4w.png

Figure 6 定义好可诊断疾病的范围
第二步是病历的向量化(图7)。病历中的主诉、现病史、既往史、检验、体格检查、性别、年龄等信息将会被拼接成一个向量化的序列。以上字段都会被赋予一个固定的长度,最终拼接好的序列也会是一个固定长度,如果长度不足,就会补充零向量,如果长度超出,就会被截断,保留不超出的那部分。这些字段除了补充的零向量,都会进行向量化。向量化的方法是将字符赋予一个N维空间向量。
200025wek7z47us97kk9sb.png

Figure 7 病历的向量化
第三步是将病历分为训练集和验证集(图8)。为了避免验证集的选取偏差,需要将全量病历随机打乱,随后从中挑选出一部分作为验证集。为了使得训练过程更加迅速,可以将训练集按序列中补充零向量之前的长度进行排序。训练集是用于学习病历的,验证集是用于检验模型学习结果的。训练的结果反映出在当前学过的训练集上,模型给出的结果与给定诊断结果之间的误差,训练的过程是找到使得该误差最小的模型参数。验证的结果反映出当前通过阶段学习出来的模型给出的结果与理想结果之间的误差,该误差将被反馈给模型,用于调整模型细胞结构内部的参数,以及字符的N维空间向量,统称为模型参数。
200025nf0cio9jpqh9qnoo.png

Figure 8 将病历分为训练集和验证集
第四步是将病历分批,按批次进行训练(图9)。批次训练的目标是通过训练集产生一组长短时记忆网络的模型参数,并通过验证集调整模型参数,调整的量和方向通过计算验证集的误差对各参数的导数来确定。模型参数最初是由一组随机数初始化。通过一个批次的训练,模型参数就向误差减小的理想方向挪动了一小步。所有批次轮流训练下来,模型参数就往理想方向挪动了许多小碎步。为什么采用小碎步而不是一大步,原因是小碎步更能够逼近真正的理想参数。
200026klx7r7dz49r41luu.png

Figure 9 将病历按批次进行训练
第五步是将病历训练多轮(图10)。经过一轮多批次训练,所有训练集病历都学习了一遍。仅仅学习一遍,模型学到的信息还不够多,模型参数离理想参数还有很远。通过将同一份病历学习多轮,模型参数经过相当多的小碎步,模型给出的结果与理想结果之间的误差会越来越小,模型参数就会越来越逼近理想参数。
200027qxzj0hz4yq99ny0w.png

Figure 10 将病历训练多轮
第六步是中止训练(图11)。随着训练推进,误差已经越来越小,最终维持在一个不能再下降的水平。此时就是结束训练的时刻,如果继续训练,模型参数会在训练集上过拟合,训练集上误差下降的同时,在验证集上误差增加。模型参数到此刻就被固定下来,保存为一个被称为模型的文件。
200027n8i8rsee711zwdd1.png

Figure 11 中止训练
经过以上六步,基于长短时记忆网络的辅助诊断疾病模型就将完成训练。
下文将继续阐述如何使用上文训练得到的模型,进行辅助诊断疾病的过程(图12)。
200028uccffcgcxyyyrfof.png

Figure 12 如何使用模型完成辅助诊断
第一步是加载训练好的基于长短时记忆网络的辅助诊断疾病模型。
第二步是将病历转换为序列。病历中的各个字段将会被按照模型训练时同样的拼接方式,生成一条固定长度的序列。
第三步是通过模型来辅助诊断疾病。在模型内部,这条序列中的每个字符,除了补充的零向量,都将根据模型转换为N维空间向量。随后这条向量化序列将会和长短时记忆网络模型的细胞结构内部的参数进行计算,由模型获取这条序列中的上下文信息。经过模型的计算,就将得到一个在可诊断疾病范围内的概率分布,反映出该条病历在所有可诊断疾病范围内,在各项诊断下的概率。
经过以上三步,基于长短时记忆网络的模型就将对一条新的病历完成辅助诊断。
下文将以一条病历来举例说明如何使用模型来完成辅助诊断。
病历:“主诉:‘恶心、呕吐1天。’,性别:‘女’,年龄:‘80岁’”。
第一步,加载训练好的辅助诊断疾病模型。
第二步,将病历转换为序列(图13)。
200028l0wq1i2g66zwo0g2.png

Figure 13 将病历转换为序列
第三步,通过模型来辅助诊断疾病(图14)。
200028x2s9hqfgfccxqzfv.png

Figure 14 在可诊断疾病范围内的概率分布
下文将继续阐述如何评估该辅助诊断疾病模型(图15)。
200029tplfzlymselhafft.png

Figure 15 如何评估辅助诊断疾病模型
第一步是建立标准测试病历集。标准测试病历的选取标准是,病历描述和诊断结论的一致性和典型性。所谓病历一致性,指的是该条病历的描述确实能推断出给定的诊断结论。所谓病历典型性,指的是该条病历的描述只反映出一个疾病的诊断结论,而这个疾病就是给定的诊断结论。除了上述选取标准,标准测试病历还要考虑到在可诊断范围内的覆盖性和数量分布,标准是覆盖全面,分布合理。以上标准的目的是为了全面并准确地评估辅助诊断疾病模型。
第二步是利用测试集评估模型。每一条测试病历经过模型计算,得到一个在可诊断范围内的疾病概率分布。用这个分布和该条病历给定的诊断进行比较,可以得到给定的诊断在分布中的位置排名。将所有测试病历对应的位置排名记录下来,就将得到针对该测试集,辅助诊断模型在不同排名上的整体统计结果,以及每种诊断在不同排名上的统计结果。这些结果综合起来,就将可以评估辅助诊断疾病模型的准确率。
第三步是评估模型的其他指标。模型评估最主要的指标是准确率,其他还可以评估的指标有模型的单次计算时长。通过一次全量测试集评估,就可以得出模型对一条病历进行做出辅助诊断的平均时长。
经过以上三步,辅助诊断疾病模型将可以得到一个评估结果,为下一步继续优化提供了分析依据。
下文将继续阐述如何进一步优化辅助诊断疾病模型(图16)。
200029bj7ha1eoh7zz51hh.png

Figure 16 如何优化辅助诊断疾病模型
第一步确定模型优化的方向。如果是模型准确率不够理想,原因可能是训练集的问题,模型的问题,向量化的问题,当然也可能是测试集的问题。训练集的问题可能有学习的病历数量不足,学习的病历质量不高,学习的病历分布不合理。模型的问题包括模型结构,模型训练方法,模型初始化的参数。向量化的问题可能有诊断名称向量化的问题,字嵌入的问题,向量化序列的问题。测试集的问题有可能是测试集的病历质量不高或者分布不合理。如果是模型计算时间过长,原因可能有模型结构的问题,向量化序列的问题。
第二步是针对确定的方向进行优化。如果是学习的病历数量不足,补充训练病历就是直接的方法。如果是学习的病历质量不高,训练病历的重新审核就会是一种方法,第二种方法是,以病历数量弥补病历质量的不足。如果是学习的病历分布不合理,调整训练集各个诊断对应的病历数量就是一种方法。如果是模型结构的问题,尝试更多模型结构就会是必须的,可以通过改变长短时记忆网络的层数,可以改变N维向量的维度,可以改变长短时记忆网络输出空间的维度,可以改变细胞结构之间的连接方式,可以改变细胞结构内部的组件,可以在长短时记忆网络的基础上增加新的网络结构,可以将长短时记忆网络模型与其他模型作加权融合,甚至可以将长短时记忆网络模型替换为另一个模型。如果是模型训练方法,可以改变误差对参数求偏导的计算方式,可以改变批量训练的数量,可以改变模型参数向理想参数的逼近方式,可以改变模型内部矩阵运算的方式。如果是模型初始化的参数,可以调整随机数,可以改变训练轮数。其他模型的问题,还可以改变误差的计算方式,可以调整提前中止训练的标准。如果是诊断名称向量化的问题,可以调整可诊断疾病的范围。如果是字嵌入的问题,可以调整字符的向量化字典,确定哪些字符需要被向量化,可以改变字嵌入到N维空间的维度。如果是向量化序列的问题,可以调整病历各字段的拼接方式,可以调整序列各个字段的长度。如果是测试集的病历质量问题,可以改善测试病历的一致性和典型性。如果是测试集分布不合理的问题,可以调整测试病历的诊断分布。
经过以上两步,辅助诊断疾病模型将得到优化,生成一个新的模型。通过在标准测试病历集上对该模型进行测试,可以评估新模型,以确定是否还需进一步优化。
综上,经过训练一个辅助诊断模型、使用模型进行辅助诊断、评估辅助诊断模型、优化辅助诊断模型的全部流程,辅助诊断疾病模型完成了构建。通过不断地迭代循环,有望构建出一套完善可靠的辅助诊断疾病模型。

来源:https://blog.csdn.net/xidchen/article/details/104496792
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!
您需要登录后才可以回帖 登录 | 注册[Register] 手机动态码快速登录 微信登录

本版积分规则

发布主题 快速回复 收藏帖子 返回列表 客服中心 搜索
简体中文 繁體中文 English 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french

QQ|RSS订阅|小黑屋|处罚记录|手机版|联系我们|Archiver|医工互联 |粤ICP备2021178090号 |网站地图

GMT+8, 2024-11-23 21:13 , Processed in 0.321668 second(s), 66 queries .

Powered by Discuz!

Copyright © 2001-2023, Discuz! Team.

快速回复 返回顶部 返回列表