中文电子病例命名实体识别项目
MedicalNamedEntityRecognition
Medical Named Entity Recognition implement using bi-directional lstm and crf model with char embedding.CCKS2018中文电子病例命名实体识别项目,主要实现使用了基于字向量的四层双向LSTM与CRF模型的网络.该项目提供了原始训练数据样本(一般项目,出院情况,病史情况,病史特点,诊疗经过)与转换版本,训练脚本,预训练模型,可用于序列标注研究.把玩和PK使用.
项目地址:https://github.com/liuhuanyong/MedicalNamedEntityRecognition
项目介绍
电子病历结构化是让计算机理解病历、应用病历的基础。基于对病历的结构化,可以计算出症状、疾病、药品、检查检验等多个知识点之间的关系及其概率,构建医疗领域的知识图谱,进一步优化医生的工作.
CCKS2018的电子病历命名实体识别的评测任务,是对于给定的一组电子病历纯文本文档,识别并抽取出其中与医学临床相关的实体,并将它们归类到预先定义好的类别中。组委会针对这个评测任务,提供了600份标注好的电子病历文本,共需识别含解剖部位、独立症状、症状描述、手术和药物五类实体。
领域命名实体识别问题自然语言处理中经典的序列标注问题, 本项目是运用深度学习方法进行命名实体识别的一个尝试.
实验数据
一, 目标序列标记集合
O非实体部分,TREATMENT治疗方式, BODY身体部位, SIGN疾病症状, CHECK医学检查, DISEASE疾病实体,
二, 序列标记方法
采用BIO三元标记
self.class_dict ={'O':0,'TREATMENT-I': 1,'TREATMENT-B': 2,'BODY-B': 3,'BODY-I': 4,'SIGNS-I': 5,'SIGNS-B': 6,'CHECK-B': 7,'CHECK-I': 8,'DISEASE-I': 9,'DISEASE-B': 10}
三, 数据转换
评测方提供了四个目录(一般项目, 出院项目, 病史特点, 诊疗经过),四个目录下有txtoriginal文件和txt标注文件,内容样式如下:
一般项目-1.txtoriginal.txt
女性,88岁,农民,双滦区应营子村人,主因右髋部摔伤后疼痛肿胀,活动受限5小时于2016-10-29;11:12入院。
一般项目-1.txt:
右髋部 21 23 身体部位
疼痛 27 28 症状和体征
肿胀 29 30 症状和体征
转换脚本函数:
def transfer(self):f = open(self.train_filepath, 'w+')count = 0for root,dirs,files in os.walk(self.origin_path):for file in files:filepath = os.path.join(root, file)if 'original' not in filepath:continuelabel_filepath = filepath.replace('.txtoriginal','')print(filepath, '\t\t', label_filepath)content = open(filepath).read().strip()res_dict = {}for line in open(label_filepath):res = line.strip().split(' ')start = int(res[1])end = int(res[2])label = res[3]label_id = self.label_dict.get(label)for i in range(start, end+1):if i == start:label_cate = label_id + '-B'else:label_cate = label_id + '-I'res_dict[i] = label_catefor indx, char in enumerate(content):char_label = res_dict.get(indx, 'O')print(char, char_label)f.write(char + '\t' + char_label + '\n')f.close()return
模型输出样式:
, O
男 O
, O
双 O
塔 O
山 O
人 O
, O
主 O
因 O
咳 SIGNS-B
嗽 SIGNS-I
、 O
少 SIGNS-B
痰 SIGNS-I
1 O
个 O
月 O
, O
加 O
重 O
3 O
天 O
, O
抽 SIGNS-B
搐 SIGNS-I
模型搭建
本模型使用预训练字向量,作为embedding层输入,然后经过两个双向LSTM层进行编码,编码后加入dense层,最后送入CRF层进行序列标注.
'''使用预训练向量进行模型训练'''
def tokenvec_bilstm2_crf_model(self):model = Sequential()embedding_layer = Embedding(self.VOCAB_SIZE + 1,self.EMBEDDING_DIM,weights=[self.embedding_matrix],input_length=self.TIME_STAMPS,trainable=False,mask_zero=True)model.add(embedding_layer)model.add(Bidirectional(LSTM(128, return_sequences=True)))model.add(Dropout(0.5))model.add(Bidirectional(LSTM(64, return_sequences=True)))model.add(Dropout(0.5))model.add(TimeDistributed(Dense(self.NUM_CLASSES)))crf_layer = CRF(self.NUM_CLASSES, sparse_target=True)model.add(crf_layer)model.compile('adam', loss=crf_layer.loss_function, metrics=[crf_layer.accuracy])model.summary()return model
模型效果
1, 模型的训练:
模型 | 训练集 | 测试集 | 训练集准确率 | 测试集准确率 | 备注 |
---|---|---|---|---|---|
医疗实体识别 | 6268 | 1571 | 0.9649 | 0.8451 | 5个epcho |
2, 模型的测试:
python lstm_predict.py, 对训练好的实体识别模型进行测试,测试效果如下:
enter an sent:他最近头痛,流鼻涕,估计是发烧了[('他', 'O'), ('最', 'O'), ('近', 'O'), ('头', 'SIGNS-B'), ('痛', 'SIGNS-I'), (',', 'O'), ('流', 'O'), ('鼻', 'O'), ('涕', 'O'), (',', 'O'), ('估', 'O'), ('计', 'O'), ('是', 'O'), ('发', 'SIGNS-B'), ('烧', 'SIGNS-I'), ('了', 'SIGNS-I')]enter an sent:口腔溃疡可能需要多吃维生素[('口', 'BODY-B'), ('腔', 'BODY-I'), ('溃', 'O'), ('疡', 'O'), ('可', 'O'), ('能', 'O'), ('需', 'O'), ('要', 'O'), ('多', 'O'), ('吃', 'O'), ('维', 'CHECK-B'), ('生', 'CHECK-B'), ('素', 'TREATMENT-I')]enter an sent:他骨折了,可能需要拍片[('他', 'O'), ('骨', 'SIGNS-B'), ('折', 'SIGNS-I'), ('了', 'O'), (',', 'O'), ('可', 'O'), ('能', 'O'), ('需', 'O'), ('要', 'O'), ('拍', 'O'), ('片', 'CHECK-I')]
总结
1,本项目针对中文电子病例命名实体任务,实现了一个基于Bilstm+CRF的命名实体识别模型
2,本项目使用charembedding作为原始特征,训练集准确率为0.9649,测试集准确达到0.8451
3,命名实体识别可以加入更多的特征进行训练,后期将逐步实验其他方式.
any question? 请联系我:
邮箱:lhy_in_blcu@126.com
csdn:https://blog.csdn.net/lhy2014
我的自然语言处理项目: https://liuhuanyong.github.io/
中文电子病例命名实体识别项目相关推荐
- BiLSTM+CRF医学病例命名实体识别项目
向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习 公众号:datayx 数据来自CCKS2018的电子病历命名实体识别的评测任务,是对于给定的一组电子病历纯文本文档 ...
- 中文电子病历命名实体识别
★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 1 项目介绍 在本项目中将会介绍如何使用BERT+BiLSTM+CRF模型,实现对中文电子病历中病 ...
- 基于RoBERTa-wwm动态融合模型的中文电子病历命名实体识别
摘要 [目的] 提出基于RoBERTa-wwm动态融合的实体识别模型,提高中文电子病历实体识别效果.[方法] 将预训练语言模型RoBERTa-wwm各Transformer层生成的语义表示进行动态融合 ...
- python爬取电子病历_一种基于中文电子病历的实体识别方法技术
本发明专利技术提供了一种基于中文电子病历的实体识别方法,涉及医疗实体识别技术领域.针对目前国内缺少公开中文电子病历标注语料库的缺陷,本发明专利技术通过构建整理医学词典,提出了一种半自动语料库标注方法, ...
- 【NER综述】近五年中文电子病历命名实体识别研究进展
来自:python遇见NLP 阅读综述性论文是一种能够快速了解某一领域的方法,接下来通过今年的一篇综述性论文来了解一下近五年来中文电子病历的命名实体识别研究进展. 基本的,我们应该先来了解一下两个概念 ...
- 近五年中文电子病历命名实体识别研究进展
原文链接: 近五年中文电子病历命名实体识别研究进展 阅读综述性论文是一种能够快速了解某一领域的方法,接下来通过今年的一篇综述性论文来了解一下近五年来中文电子病历的命名实体识别研究进展. 基本的,我们应 ...
- 最新最全-中文生物医学命名实体识别最新研究论文、资源、数据集、性能整理分享
本资源旨在跟踪中文生物医学自然语言处理的进展,收集整理相关的论文列表和展示现存方法性能. 内容整理自网络,源地址:https://github.com/lingluodlut/Chinese-BioN ...
- 【项目调研+论文阅读】Lattice LSTM神经网络医学文本命名实体识别 | day7
<Lattice LSTM神经网络法中文医学文本命名实体识别模型研究>2019 文章目录 一.模型步骤 1.Lattiice-LSTM分词+表征词汇 2.LSTM-CRF 经证实,英文N ...
- 命名实体:中文命名实体识别简介
一.概念 1.实体 一切具有特定属性集合的物体都可以称为实体. 2.命名实体 一般包括三大类(实体类.时间类.数字类),七小类(人名.机构名.地名.时间.日期.货币和百分比). 3.命名实体识别过程 ...
最新文章
- 2021年假期怎么放?都给你安排得明明白白!
- 恭喜我的同事丁宇入选年度 IT 领军人物
- 如何将一个文件分割成多个小文件
- 回退n帧协议c语言代码,[计算机网络]Ch.3 数据链路层
- python网络攻击代码_Python-python网络编程写arp攻击代码
- centos 开发环境配置
- 诗人也出数学题,出的有趣又深刻
- [2020-AAAI] Revisiting Image Aesthetic Assessment via Self-Supervised Feature Learning 论文简析
- MongoDB基本概念和常用操作(二)
- 设计模式之GOF23解释器模式
- MyBatis中大于和小于号的转义写法
- php 中国姓名验证规则,我想在表单验证中加入中文姓名合法性模糊匹配判断?...
- mysql中反单引号的作用_mysql中反单引号(`)作用
- 快递鸟智选物流API对接流程
- linux 下对SSD 进行读写测试
- 2020最新版影评小程序搭建教程(附源码获取渠道)
- 马云登陆雅虎首次发表演讲稿全文。
- Win10开启黑色护眼暗黑主题
- 剑指 Offer 33. 二叉搜索树的后序遍历序列
- 计算机科学与技术专业就业前景好吗,计算机科学与技术专业就业前景
热门文章
- 工作4年工资8K,还有什么理由不努力?
- Linux 内核宏 time_after解析
- TQ210——S5PV210 uboot顶层mkconfig分析
- Datawhale组队-Pandas(下)分类数据(打卡)
- pil库修改图片大小_Gvcode库:一个更简单的、华人开源的、自动生成验证码的python库...
- 机器学习导论 与数学分析
- linux下mysql主从同步是主从i/o线程显示为no_mysql主从同步IO线程NO
- 二叉树先序遍历,中序遍历,后序遍历,层次遍历学习总结及完整C/C++代码
- 智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波(汇总)
- 怎么样批量修改html里的内容,批量修改替换多个Word文档中同一内容的方法