当前位置:   article > 正文

NER命名实体识别+bert的医疗实体及事件抽取_bert文本实体抽取

bert文本实体抽取

NER本质上是一个分类问题。利用bert对文本进行编码,对编码接入全连接或lstm+CRF,接入softmax即可得到每个类别的概率,最大概率对应的类别即为对应字的类别。
数据:病例本标签数据(数据在比赛https://www.biendata.com/competition/ccks_2020_2_1/)中,标签一共6类,分别为[‘药物’, ‘实验室检验’, ‘疾病和诊断’, ‘手术’, ‘影像检查’, ‘解剖部位’]。
本案例的代码是修改github上的项目而来:
https://github.com/ProHiryu/bert-chinese-ner

一、利用bert预训练模型对文本进行编码。

  1. bert模型下载
    bert模型构架:https://github.com/google-research/bert
    bert中文预训练模型:https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip
    下图是bert中文预训练模型的文件内容:
    中文预训练模型是参数的值
  2. bert模型的输入
    bert模型的输入是中文文本的字和对应的类别(因为中文的词量很多,所以分析字效果比较好)。类别利用BIO进行分析(也可以使用BIOS、BIOES等等,可以根据需要使用标注方法,也可以使用自定义的类别标注)。将B、I、O和实体类别进行组合,得到分类的类别种类,如下:
    在这里插入图片描述
    对病例本的训练文本进行整理标注,得到bert的输入数据示例如下:
    在这里插入图片描述
    3.bert模型的架构加载
import  bert import modeling
model = modeling.BertModel(
    config=bert_config,
    is_training=is_training,
    input_ids=input_ids,
    input_mask=input_mask,
    token_type_ids=segment_ids,
    use_one_hot_embeddings=use_one_hot_embeddings
    )
#取出bert模型中的序列数据
output_layer = model.get_sequence_output()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4、bert中文预训练模型的加载

tf.train.init_from_checkpoint(init_checkpoint, assignment_map)

    二、分类层的接入

    在bert模型中取出其中每一层的隐含层序列,组合后输入全连接层(或lstm+CRF层),经过softmax输出获得每一类的概率。

    #对output_layer数据接入全连接层(或者lstm+CRF)
    logits = tf.matmul(output_layer, output_weight, transpose_b=True)
    logits = tf.nn.bias_add(logits, output_bias)
    • 1
    • 2
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/367933
    推荐阅读
    相关标签
      

    闽ICP备14008679号