zoukankan      html  css  js  c++  java
  • Pytorch: 命名实体识别: BertForTokenClassification/pytorch-crf

    文章目录
    基本介绍
    BertForTokenClassification
    pytorch-crf
    实验项目
    参考
    基本介绍
    命名实体识别:命名实体识别任务是NLP中的一个基础任务。主要是从一句话中识别出命名实体。比如
    姚明在NBA打球

    从这句话中应该可以识别出姚明(人), NBA(组织)这样两个实体。
    常见的方法是对字或者词打上标签。B-type, I-type, O, 其中B-type表示组成该类型实体的第一个字或词。I-type表示组成该类型实体的中间或最后字或词,O表示该字或词不组成命名实体,当然有的地方也采用B-type, I-type, E-type,O形式。
    比如上一句话就可以有如下标签

    姚/B-PER 明/I_PER 在/O NBA/B_ORG 打/O 球/O

    这样根据标签我们就可以提取出命名实体了

    BertForTokenClassification
    Bert作为进来比较火的模型,自然官方给出了进行命名实体识别的方法。就是BertForTokenClassfication类。使用如下:

    引入模型:

    from pytorch_pretrained_bert import BertForTokenClassification
    1
    创建模型

    model = BertForTokenClassification.from_pretrained(bert_model_dir, num_labels=self.opt.tag_nums)
    1
    参数:
    bert_model_dir: bert预训练模型参数
    num_labels: 词标签类的个数。即(2 or 3)*type+1
    模型使用

    out = model(batch_data, token_type_ids=None, attention_mask=batch_masks, labels=labels)
    1
    参数解释:

    输入:
    input_ids:训练集,torch.LongTensor类型,shape是[batch_size, sequence_length]
    token_type_ids:可选项,当训练集是两句话时才有的。
    attention_mask:可选项,当使用mask才有,可参考原论文。
    labels:数据标签,torch.LongTensor类型,shape是[batch_size]
    输出:
    如果labels不是None(训练时):输出的是分类的交叉熵
    如果labels是None(评价时):输出的是shape为[batch_size, num_labels]估计值
    From:https://zhuanlan.zhihu.com/p/56155191
    这样通过BertForTokenClassificaiton类,我们就可以很容易实现命名实体识别了。

    pytorch-crf
    条件随机场(CRF)命名实体识别的传统方法。自深度学习火后,BiLstm+CRF成为命名实体识别的标准方法。具体原理可以参看这篇博客.
    由于pytorch官方没有实现条件随机场。但是有人自己实现了pytorch-crf, 是一个不错的开源包。

    pytorch-crf基本操作:https://pytorch-crf.readthedocs.io/en/stable/
    pytorch-crf接入BiLstm:
    流程:
    BiLstm输出:
    (BatchSize, Sequence Length, 2*hidden_size)
    经过一个linear层:
    (BatchSize, Sequence Length, tag_nums)
    可以考虑对tag_nums这个维度softmax一下.
    最后输入到CRF中.
    输出:
    CRF的前向传播最后输出的是真实标签序列的分数。形式是log(realall) log(frac{real}{all})log(
    all
    real

    ), 因此是一个负值。作为损失函数需要加一个负号
    预测时调用decode就可以输出(BatchSize, Sequence)的序列标签。
    具体细节可以参见这个issue
    实验项目
    见个人github. 待补充

    参考
    最通俗易懂的BiLSTM-CRF模型中的CRF层介绍
    kmkurn/pytorch-crf
    一起读Bert文本分类代码
    ---------------------
    作者:无聊的人生事无聊
    来源:CSDN
    原文:https://blog.csdn.net/wangpeiyi9979/article/details/89599009
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Alamofire 4.0 & swift 3.0 学习
    源码阅读分析 (深入浅出FaceBook POP动画引擎)
    iOS App Programming Guide 要点记录
    UIKit 之UIViewController & UIView
    ios AFNetworking 3.0 源码阅读分析 (四)(完结篇&&AFHTTPSessionManager模块)
    ios AFNetworking 3.0 源码阅读分析 (三)(AFSecurityPolicy模块)
    ios AFNetworking 3.0 原码阅读分析 (二)(AFURLResponseSerialization模块)
    ios AFNetworking 3.0 原码阅读分析 (一)(AFURLRequestSerialization模块)
    在商城系统中使用设计模式----策略模式之在spring中使用观察者模式和发布/订阅
    在商城系统中使用设计模式----策略模式之在spring中使用策略模式
  • 原文地址:https://www.cnblogs.com/jfdwd/p/11238691.html
Copyright © 2011-2022 走看看