计算机应用研究
APPLICATION RESERCH OF COMPUTERS
2000  Vol.17　No.1　P.41-43




一个仿人疾病诊断专家系统模型
张红梅 王永成
摘 要 通过研究医学专家的诊断思维过程，提出了一个疾病诊断专家系统模型。该模型以层次分类结
构作为知识库的组织形式，分类过程作为疾病诊断的推理过程，用这种自顶向下，逐层分类的方法提高诊断效率。此外，还通过对层次分类体系的分析，压缩特征向量，减少系统的计算量。
关键词 层次分类结构 知识表示 推理机制 压缩特征向量
1　引言
　　自从人工智能诞生以来，专家系统一直是最活跃的分支之一，而医疗领域也一直是专家系统的典型实际应用。众所周知，疾病的诊断不仅是医疗中的第一关口，而且对大多数疾病来说，也是决定性的关口。为此，研究医疗专家系统，首当其冲就必须研究疾病的自动诊断。通过研究医学专家的诊病过程，我们在本文中提出一个实用的疾病诊断模型。
　　纵观专家诊病的过程，我们发现：疾病的诊断过程实际上也是一个疾病分类过程，是根据病人的疾病特征(病症)划归到某个疾病或疾病类的过程，一般的医学书上也是这样一个把复杂的问题(疾病类)逐次分解成一个个小问题(疾病)的体系结构，读者再根据症状特征或不适部位定位到具体疾病类的具体疾病。本文就是在此基础上提出一个疾病诊断模型。该模型接近于一般医学书籍的知识表示，它把医学专家或医学书籍中的知识表示成森林状的层次分类结构，结构中的非叶子节点代表疾病类，叶子节点代表疾病，每个节点包含以疾病或疾病类的症状作为类别特征向量。当然，这样的表示对于规模较大的系统，往往由于特征项数目过大而影响系统的性能。解决的办法是筛选特征，将那些不具备区分能力或区分能力很小的症状从特征项中删除。然后根据类别体系的层次结构，自顶向下，逐层分类，最终把病人的病症或综合症归属到层次结构的某个叶子节点。

图1　系统结构
　　一个专家系统结构如图1，其最核心的部分是知识库和推理机制，上述的层次分类结构是知识库的组织形式，其上的分类过程实质上是推理过程。下面将给出这个模型的知识表示，以及其上的推理机制的详细描述。
2　知识表示
　　知识库分为描述性知识和过程性知识。
　　描述性知识有：
　　分类知识：疾病类和疾病等；
　　事实知识：症状和病史等；
　　关系知识：症症、病症及病病间的各种关系；
　　统计知识：疾病、症状出现的概率等。
　　过程性知识有：
　　动作知识：处理和治疗等；
　　函数知识：隶属函数和相似度计算公式等。
　　上述的描述性知识隐含在数据库中，动作知识由规则表示，函数知识由数据驱动。
　　。分类知识―是诊断的基本依据，医学知识的分类系统，如图2的层次分类结构所示。每一层次的疾病类包含它的类别特征向量以及应采取的治疗措施的规则，越往低层，病类越细，叶子节点代表具体疾病，方框上方的数字代表病人症状特征向量与疾病或疾病类特征向量的相似度，也就是病人属于该病或病类的可信度

图2　内科疾病层次分类子树
　　在数据库中，我们用以下的表来表示上述的层次关系。
表 1 病表
标识符病名父类标识符描述特征向量指针
D_id1感冒D_idx　　

表 2 症状表
标识符症状名描述发作部位持续时间性质并发症…
S_id1头痛　前额2～3天阵发性恶心　

表 3 病症关系表
标识符病表id症状表id关系性质可信度…
R_id1S_id1D_id1充分症状CF(D1, S1)　

　　层次结构中所有节点的内容都可以通过表与表的连接操作和查询命令来得到。其中类别特征向量是通过从本疾病类的特征向量以及它的各个子类中抽取的区分能力较强的特征项，并将原特征向量中的其它分量置为零，构成的新向量作为类别特征向量，这样便突出了这些类别特征向量的区分能力，同时也减少了分类时的计算量。
　　下面我们给出构造类特征向量的算法：
　　(1)用医学书籍上的知识构造一个含有所有症状的辞表。假设辞表中有N个辞条，那么用于描述疾病或疾病类的特征向量便有N个分量。对于某一疾病，其对应的特征向量Di (di1, ..., dij, ..., diN)，其中i是节点序号，j是分量序号，dij=CF(Di, Sij)， CF(Di, Sij)是由专家给出的由症状Sij导致病Di的规则强度。
　　(2)执行(v是当前节点及其子类节点)。即逐类将属于该类及其子类的所有疾病或疾病类的特征向量相加，得到各个疾病类的原始特征向量，为了方便起见，将各个向量规范化，使得向量的模为1，即将各个分量除以。
　　(3)用每一节点的所有直接子节点的特征向量，分别构成一个矩阵中的一行，删除所有全为0或全为1的列，然后计算(其中Cj是本列中的非0个数)，也就是逐列计算出各列非0元素的乘积，再乘以本列中的非0个数，并依其乘积大小将各列排序(同时记录下各列的原始位置)。
　　(4)按照乘积越小说明该分量的区分能力越强的规律，逐行从乘积较小的列中选取nl个非0元素及其原始位置，构成压缩的特征向量。其中nl是各节点所在l层次预先确定的分量个数，其中n1 n2n3 ...，因为在层次较低的节点的各个子节点间的相似度要高于层次较高的节点的各个子节点间的相似度。相应地，其对应的特征向量中区分能力较强的特征项的数目也较少，即对应的压缩的特征向量中的特征项数目较少。
　　(5)用(下标值，特征值，下一项)形式的数组结构来表示选出的特征向量，这种变换的实际作用是把原来特征向量中的其它分量置零。当非零分量很少时，可以减少分类时的计算量。
　　。事实知识―是病人症状的描述，它的特征向量由诊断开始形成，在推理过程中经交互式问诊步完善。
　　。关系知识―包括疾病与症状间的充分症状、必要症状、关键症状关系，症症间的相互排斥关系，还有病病间的并发关系。
　　。统计知识―症状的出现对疾病可能性的影响一般是用可信度来衡量，可信度在很大程度上依赖于专家的经验，但症状出现的频率和重要性也是决定疾病可能性的另一个重要因素。
　　。函数知识―主要是用来表示推理中可用数值计算或过程执行的动作。隶属函数用来计算症状的值对某个辞集的隶属程度，例如，用分段函数来表示体温的值属于高烧、发烧、低烧和不发烧的辞集。此外，还有控制推理路径用可信度计算公式等。
3　推理过程
　　经调查我们发现，医生在作诊断时，一般首先寻找主要的诊断根据，也就是“特殊病症”，然后将核实的主要材料加以综合分析，弄清它们之间的相互关系，进一步推测病变可能存在的部位(系统或脏器)、性质或病因，为建立正确的诊断打下基础。在疾病的早期，复杂的或不典型的病例当然找不到可以确诊的“特殊病症”，此时就采用下述方法，根据一个主要病症或先将几个重要的病症组成一个综合症，然后提出一组待鉴别的疾病，根据某一疾病本身的特点，对组内各个疾病加以肯定或否定，如此反复，直到拟诊的疾病能解释病人的全部主要临床表现，并已找到预期应见于该病的“特殊病症”。
　　同样，我们的模型系统的推理过程由系统通过提问，根据症状轻重程度CF(Sj)(1jN)以及症状的重要程度wj，构成病人症状的特征向量D' (d'1, d'2, ..., d'N)，其中d'j=CF(Sj)*wj, wj可根据属于同一系统、脏器或病因的症状数给定，一般来说，属于同一系统或病因的症状数较多的症状比较重要。然后对事先构造好的层次分类结构中第一层各疾病类节点的特征向量计算相似度，相似度的计算利用夹角余弦公式：

　　取相似度最大的节点作为D'所属的疾病类，记住相似度大于阈值T的节点，以便回溯时用到，然后对当前疾病类的各个直接子节点分别计算相似度，把D'归属到相似度最大的子类。这样自顶向下执行疾病类(一组待鉴别的疾病)到疾病的自上而下的反向推理，在此过程中，进一步提问有关症状，不断修改病人症状的特征向量，若结论不能解释所有的症状，则还要回溯到上一层，取相似度次大的节点再继续搜索，直到找出所有的症状都能解释节点为止。若用户需要，还可根据疾病的可信度从大到小排序输出可能疾病。输出节点可信度的计算方法有三种：
　　(1)取最小值，即
　　(2)相乘，即
　　(3)取最大值，即其中T是从顶层到叶子的分类路径节点集合。
　　一般的专家系统考虑到可信度的传递性，采用取最小值或相乘计算可信度，本模型采用的是取最大值，因为病人症状的特征向量在推理过程中是不断通过提问修改的，很有可能在计算最后的相似度时，其特征向量还在修改，因此应该以相似度最大值为可信度排序输出。对应于图2的推理结果应该是：{伤风(0.9)，感冒(0.7)}。
　　根据这种层次结构，自顶向下地逐层分类，可以提高分类精度，降低计算量。因为第一层的类别差异大，而且类别数目较小，区分一个疾病属于哪一类比较容易。而在此后的进一步细分的过程中，分类路径是沿第一层的某个节点的子节点逐层向下，每一次细分都是在很小的类别范围内进行的，所以，分类质量易于保证。从这一过程中，我们还可以看出，病人病症的特征向量并不是与所有的类别特征向量进行比较，而是只与部分类别特征向量进行比较，这就大大地减少了比较次数。
4　结论
　　医疗专家系统的知识表示和推理机制很多，怎样的知识表示是好的，使知识易于获取、推理机制便于理解和实现是专家系统的一个重要研究方面。本文是在研制疾病诊断系统的过程中，发现疾病诊断与现实世界中的分类过程十分相似，因此把它应用到专家系统的知识库以及其上的推理机制中，提出了一种接近医学专家和医学书籍中的知识表示，以及直接在其上进行的推理机制，它类似于人类的思维过程，因此易于为医学专家理解和接受。但是把本模型变成一个实用系统还有许多工作要做，如进一步完善知识库的内容和解决在推理过程中可能出现的死锁问题等，这些都是将来的工作要考虑的。
张红梅（上海交通大学计算机科学与工程系 上海 200030）
王永成（上海交通大学网络中心 上海 200030）
参考文献
1陆汝钤. 人工智能. 北京：科学出版社, 1996
2Justin ZobelAlistair Moffat, Exploring the similarity space, SIGIR'97
3战学刚, 林鸿飞, 姚天顺. 中文文献的层次分类方法. 中文信息学报, 1999
4王永成. 中文信息处理技术及其基础. 上海：上海交通大学出版社, 1992
收稿日期：1999年6月20日
