实体识别(一)几种NER深度学习模型效果对比IDCNN+BERT+BiLISTM+CRF

纯实现上对比几种NER深度学习模型效果(有不严谨的地方:数据集、模型规模等),代码来源于Github上大神的贡献。

  • 实现上有三种模型
对比模型
IDCNN+CRFBiLSTM+CRF(1)BiLSTM+CRF(2)BERT+BiLSTM+CRF
参考文献文献[3]文献[3]文献[4]文献[2]
数据集100w字符100w字符200w字符100w字符

       代码在参考文献部分都附有链接~

  • 三种模型抽样对比
测试模型
句子IDCNN+CRFBiLSTM+CRF(1)BiLSTM+CRF(2)BERT+BiLSTM+CRF
于大宝的进球帮助中国队在长沙贺龙体育中心以1-0的比分获胜LOC, 长沙,  PER, 于大宝 ORG, 中国队,贺龙体育中心ORG, 中国队,长沙贺龙体育中心PER: ['于大宝'] LOC: ['长沙贺龙体育中心'] ORG: ['中国队']LOC, 长沙, 贺龙体育中心 PER, 于大宝 ORG, 中国队
普京和特朗普通了电话,一起表示了对希拉里的鄙视PER, 普京, 特朗普, 希拉里PER, 普京, 特朗普, 希拉里PER: ['普京', '特朗普', '希拉里']PER, 普京, 特朗普, 希拉里
在万达集团的老总王健林的著名采访之后,深圳出现了一家公司叫做赚它一个亿网络科技有限公司LOC, 深圳  PER, 王健林 ORG, 万达集团, 网络科技有限公司LOC, 深圳  PER, 王健林 ORG, 万达集团PER: ['王健林'] LOC: ['深圳'] ORG: ['万达集团']LOC, 深圳  PER, 王健林 ORG, 万达集团, 亿网络科技有限公司
而且冯绍峰爆料在拍摄《知否》的那段时间里,赵丽颖就吃很少,很瘦,也根本没有胃口吃,一整天钻在剧本中无法自拔。PER, 冯绍峰, 赵丽颖PER, 冯绍峰, 赵丽颖PER: ['冯绍峰', '赵丽颖']PER, 冯绍峰, 赵丽颖
中国网财经1月30日讯(记者 刘小菲)据统计,除当年9月底上市的顶固集创外,其余27只个股的收益均为负值,曲美家居则以约50%的跌幅位列倒数第4。PER, 刘小菲  LOC, 中国网PER, 刘小菲  LOC, 中国网,曲,美PER: [' 刘小菲'] LOC: ['中国']PER, 刘小菲  ORG, 中国网, 顶固集创, 曲美家居
易居研究院智库研究中心总监严跃进等业内专家分析,各地两会透露出“稳字当头”和强化预期管理的信号,表明各地楼市调控的稳定性和连续性将会继续下去。ORG, 易居研究院智库研究中心ORG, 易居研究院智库研究中心ORG: ['易居研究院智库研究中心']PER, 严跃进 ORG, 易居研究院智库研究中心
有网络消息称,滴滴将裁员25%,涉及产品技术、网约车团队等。[][][]ORG, 滴滴

   

粗略的结论:

          1) 前三种方法在抽样的结果上测试效果差别不明显

          2) BERT-BiLSTM-CRF在效果要优于前面三种方法,比如“滴滴”,“顶固集创”,“曲美家居”(后面两个是上市公司名称,如果做金融方面,可以考虑用该方法,效果还不错)

         3) BERT-BiLSTM-CRF相关参数与评测效果

  ***** Running training ***** 用GPU跑的,10min跑完
 Num examples = 20864
 Batch size = 32
 Num steps = 1956

 ***** Running evaluation*****

processed 214542 tokens with 7450 phrases; found: 7598 phrases; correct: 6894.
accuracy:  99.24%; precision:  90.73%; recall:  92.54%; FB1:  91.63
              LOC: precision:  92.06%; recall:  93.36%; FB1:  92.70  3513
              ORG: precision:  84.34%; recall:  88.04%; FB1:  86.15  2261
              PER: precision:  96.11%; recall:  96.32%; FB1:  96.21  1824

  • 三种模型大样本评测

      会基于一个问答数据集中实体识别进行评测,完成后会更新。

    ------------------------------------------------------------------------------------------------------------------------------------------

     20190315

     问答QA(二)基于BERT的知识库问答实战  https://blog.csdn.net/ai_1046067944/article/details/86707784

    ------------------------------------------------------------------------------------------------------------------------------------------

后续会更新下更新下三种模型代码运行的步骤

参考文献:

【1】如何入门命名实体识别开发 : https://www.jianshu.com/p/a903c24c01b8

【2】BERT-BiLSTM-CRF-NER: GitHub - macanv/BERT-BiLSTM-CRF-NER: Tensorflow solution of NER task Using BiLSTM-CRF model with Google BERT Fine-tuning And private Server services

【3】IDCNN/BiLSTM-CRF-NER: https://github.com/crownpku/Information-Extraction-Chinese/tree/master/NER_IDCNN_CRF

【4】BiLSTM-CRF-NER: GitHub - Determined22/zh-NER-TF: A very simple BiLSTM-CRF model for Chinese Named Entity Recognition 中文命名实体识别 (TensorFlow)

 

  • 11
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
好的,下面是bert-bilstm-crf-ner模型的代码实现(Python): ```python import torch import torch.nn as nn from transformers import BertModel class BertBilstmCrfNer(nn.Module): def __init__(self, num_tags, hidden_dim=768, bert_model_name='bert-base-chinese'): super(BertBilstmCrfNer, self).__init__() self.bert = BertModel.from_pretrained(bert_model_name) self.dropout = nn.Dropout(0.5) self.bilstm = nn.LSTM(hidden_dim, hidden_dim // 2, num_layers=2, bidirectional=True, batch_first=True) self.fc = nn.Linear(hidden_dim, num_tags) self.crf = nn.CRF(num_tags, batch_first=True) def forward(self, input_ids, attention_mask, labels=None): bert_output = self.bert(input_ids=input_ids, attention_mask=attention_mask)[0] bert_output = self.dropout(bert_output) lstm_output, _ = self.bilstm(bert_output) logits = self.fc(lstm_output) if labels is not None: loss = -self.crf(logits, labels, mask=attention_mask.byte(), reduction='mean') return loss else: pred_labels = self.crf.decode(logits, mask=attention_mask.byte()) return pred_labels ``` 该模型使用了BERT作为预训练模型,使用了BiLSTM作为特征提取器,并使用CRF作为序列标注器。在模型中,我们首先使用BERT模型对输入进行编码,然后通过BiLSTM提取特征,最后通过全连接层将提取的特征映射到标签空间。在训练时,我们使用CRF计算损失,并通过反向传播更新模型参数。在推理时,我们使用CRF进行解码,得到最终的标签序列。 模型的输入是一个batch的文本序列,每个文本序列已经使用BERT进行编码,因此输入是一个二维张量,形状为(batch_size, sequence_length, hidden_dim)。另外,我们还需要提供一个attention_mask张量,用于指示输入中的实际文本序列部分。标签序列是一个二维张量,形状为(batch_size, sequence_length),每个元素代表一个标签。在训练时,我们需要提供标签序列,用于计算损失;在推理时,我们不需要提供标签序列,而是通过CRF进行解码,得到最终的标签序列。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值