电子病历命名实体识别NER

  • 生成数据集

医生给的标签格式

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

https://images2017.cnblogs.com/blog/985935/201709/985935-20170920141138571-870638322.png      https://images2017.cnblogs.com/blog/985935/201709/985935-20170920141138868-794814302.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,在验证集上做一次验证

模型保存

 

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值