电子病历命名实体识别NER

  • 生成数据集

医生给的标签格式

将命名实体和标签当成jieba分词中的分词和词性,更新到jieba词典中,然后对病历文档进行分词,按照BIO标注每个字,每句话结束用空格分开。

https://i-blog.csdnimg.cn/blog_migrate/42236f53dbba35899cc4baf6ed5e6e84.png      https://i-blog.csdnimg.cn/blog_migrate/9d4ed25062bef39e877b8d74026daa83.png  

按照1:2:12的比例将病历数据保存到dev/test/train三个文件中

 

  • 数据加工

1、将数据转换成BIOES标注,增加了ES,因为标注信息变多了特征会更丰富。

2、给每个char和tag分配一个id,得到一个包含所有字的字典dict,以及char_to_id, id_to_char, tag_to_id, id_to_tag, 将其存在map.pkl中

3、将数据按照sentences按长度排序,划分为若干batch,每批按最长句子的长度进行padding

  • 模型创建
  1. model_inputs

字符特征(batchsize,100)通过embedding_lookup字向量字典得到

分词位置特征(batchsize,20)通过分词后字的位置得到

embedding=字符特征(batchsize,100)+分词位置特征(batchsize,20)

embedding=dropout(embedding)

2、IDCNN_layer

模型是4个大的相同结构的Dilated CNN block拼在一起,每个block里面是dilation width为1, 1, 2的三层Dilated卷积层,卷积核个数100,padding=same

IDCNN对输入句子的每一个字生成一个logits,这里就和biLSTM模型输出logits之后完全一样

3、logits for tags

idcnn_outputs= [batch_size, num_steps, emb_size]

return= [batch_size, num_steps, num_tags]

4、loss_layer

crf_log_likelihood在一个条件随机场里面计算出每个词分类的最大似然概率

5、viterbi_decode

维特比解码出序列概率最大时每个词对应的标签

  • 模型训练

迭代100epoch

每100batch打印一下平均loss,在验证集上做一次验证

模型保存

 

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值