zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python 疾病诊断归一化

Python 归一化
2023-09-27 14:20:36 时间

    在电子病历(EMR,Electronic Medical Record,也叫计算机化的病案系统或称基于计算机的病人记录CPR,Computer-Based Patient Record)中,同一疾病诊断的表示方式多种多样,这给后续的计算机识别某个疾病诊断造成了一定的困难。所以,归一化成了在许多医学NLP过程中的必须过程。

  • 疾病诊断归一化的通俗理解

    把多样化的、非标准的疾病诊断名称转化为标准、统一的疾病诊断术语。本文以ICD-10作为疾病诊断标准的术语体系。

  • 模型选择
  1. 疾病诊断特点:

a短文本;

b词汇长短差距大;

c数字、字母、特殊符号的含义的特异性;

d错字、错音的影响;

f标准词汇表表示范围的局限性。

  1. 模型:

模型一:textCNN

这是我选择的第一个模型,参数设置是常规思路(不细讲),效果比较差,f值60%左右。

思路:

    训练数据筛选+清洗之后,得到的训练集维度20w,标签不到1w,平均每10-50个训练数据对应一个标签(根据词汇长度确定),因为词汇短的诊断实在是没有多少数据。最后在5w测试集上进行测试,结果一言难尽。

问题原因:

    由于疾病的长短差距过大,导致训练数据特征的学习情况差距过大,很多数据特征由于训练数据较少而没有学习到,导致最后的分类结果不理想。

推荐指数:

不推荐

模型二:mac_bert

    参数设置是常规思路(不细讲),训练集应用的公共的医学训练数据(数据在github上有很多大佬分享),效果一般,通过调整参数,f值在75-85%之间。

思路:

    数据没有训练过程,因为训练数据实在是太麻烦了,需要花费大量时间和人力去搜集有意义的语料,所以我偷懒了,直接应用大佬训练好的东西。测试数据也是那5w条数据,通过调整参数得出的结果是有浮动的。

问题原因:

    由于公共的训练语料总是不能和你的业务上的需求一一对应,只有部分交集是你需要的东西,但是只是一部分。很多情况下,疾病诊断最需要的训练语料就是EMR,但是据我所知公共的训练集大都来源于百科、文献、文件等公开的数据,而EMR这个类型数据可及性太差了,所以导致训练效果也是差强人意。

推荐指数:

三颗星

模型三:注意力+BiLSTM+CRF

一言难尽,论文里的效果杠杠硬,我的效果比较抽象,f值85%左右。看模型设置的建议参考论文《An Attention-Based BiLSTM-CRF Model for Chinese Clinic Named Entity Recognition》

问题原因:

感觉NER和归一化还是不能完全共用一套模型的,只能借鉴一部分。

推荐指数:

四颗星

模型四:注意力 + BiLSTM + CRF + 规则框架

    你大爷还是你大爷,神魔东西都不如写死好使,上规则之后,效率提到95%左右,我感觉我又可以了。没有什么结果不是一个规则不能解决的,如果有,再来一个。

(规则设置框架很考究,咱们下期见)

推荐指数:

五颗星