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
版权声明:本文为博主原创文章,转载请附上博文链接!
Pytorch: 命名实体识别: BertForTokenClassification/pytorch-crf的更多相关文章
- 基于bert的命名实体识别,pytorch实现,支持中文/英文【源学计划】
声明:为了帮助初学者快速入门和上手,开始源学计划,即通过源代码进行学习.该计划收取少量费用,提供有质量保证的源码,以及详细的使用说明. 第一个项目是基于bert的命名实体识别(name entity ...
- 零基础入门--中文命名实体识别(BiLSTM+CRF模型,含代码)
自己也是一个初学者,主要是总结一下最近的学习,大佬见笑. 中文分词说到命名实体抽取,先要了解一下基于字标注的中文分词.比如一句话 "我爱北京天安门”. 分词的结果可以是 “我/爱/北京/天安 ...
- 用CRF做命名实体识别(一)
用CRF做命名实体识别(二) 用CRF做命名实体识别(三) 用BILSTM-CRF做命名实体识别 博客园的markdown格式可能不太方便看,也欢迎大家去我的简书里看 摘要 本文主要讲述了关于人民日报 ...
- 用CRF做命名实体识别(二)
用CRF做命名实体识别(一) 用CRF做命名实体识别(三) 一. 摘要 本文是对上文用CRF做命名实体识别(一)做一次升级.多添加了5个特征(分别是词性,词语边界,人名,地名,组织名指示词),另外还修 ...
- pytorch实现BiLSTM+CRF用于NER(命名实体识别)
pytorch实现BiLSTM+CRF用于NER(命名实体识别)在写这篇博客之前,我看了网上关于pytorch,BiLstm+CRF的实现,都是一个版本(对pytorch教程的翻译), 翻译得一点质量 ...
- pytorch 文本情感分类和命名实体识别NER中LSTM输出的区别
文本情感分类: 文本情感分类采用LSTM的最后一层输出 比如双层的LSTM,使用正向的最后一层和反向的最后一层进行拼接 def forward(self,input): ''' :param inpu ...
- 基于条件随机场(CRF)的命名实体识别
很久前做过一个命名实体识别的模块,现在有时间,记录一下. 一.要识别的对象 人名.地名.机构名 二.主要方法 1.使用CRF模型进行识别(识别对象都是最基础的序列,所以使用了好评率较高的序列识别算法C ...
- NLP入门(八)使用CRF++实现命名实体识别(NER)
CRF与NER简介 CRF,英文全称为conditional random field, 中文名为条件随机场,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机 ...
- 使用CRF做命名实体识别(三)
摘要 本文主要是对近期做的命名实体识别做一个总结,会给出构造一个特征的大概思路,以及对比所有构造的特征对结构的影响.先给出我最近做出来的特征对比: 目录 整体操作流程 特征的构造思路 用CRF++训练 ...
随机推荐
- appium+python 启动一个app步骤
询问度娘搭好appium和python环境,开启移动app自动化的探索(基于Android),首先来记录下如何启动待测的app吧! 如何启动APP?1.获取包名:2.获取launcherActivit ...
- 2019-4-16-C#-在-8.0-对比-string-和-string_-的类型
title author date CreateTime categories C# 在 8.0 对比 string 和 string? 的类型 lindexi 2019-04-16 10:16:56 ...
- history-之前发生了什么
查看一下之前服务器上执行过的命令.看一下总是没错的,加上前面看的谁登录过的信息,应该有点用.另外作为admin要注意,不要利用自己的权限去侵犯别人的隐私哦. 到这里先提醒一下,等会你可能会需要更新 H ...
- tcpdump概述
tcpdump是一个用于截取网络分组,并输出分组内容的工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具. tcpdump提供了源代码,公开了 ...
- MySQL Daemon failed to start错误解决办法是什么呢?
首先我尝试用命令:service mysql start 来启动服务,但是提示: MySQL Daemon failed to start 一开始出现这个问题我很方,然后开始查,说什么的都有,然后看到 ...
- 【python之路20】函数作为参数
1.函数可以作为参数 1)函数名相当于变量指向函数 2)函数名后面加括号表示调用函数 #!usr/bin/env python # -*- coding:utf-8 -*- def f1(args): ...
- 一位AI研究员+区块链创业者的终极展望:AI DAO将统治世界
一位AI研究员+区块链创业者的终极展望:AI DAO将统治世界 [日期:2017-01-09] 来源:infoq.com 作者:杨赛 [字体:大 中 小] Trent McConaghy是一位资深的 ...
- Python数据分析与展示[第三周](pandas数据类型操作)
数据类型操作 如何改变Series/ DataFrame 对象 增加或重排:重新索引 删除:drop 重新索引 .reindex() reindex() 能够改变或重排Series和DataFrame ...
- OSGi Capabilities
OSGi bundle的Capability就是这个bundle所具有的能力. 就像淘宝上的每个店铺一样,它会说明自己都卖哪些东西,也就是Provide-Capability 我们这些剁手党就会根据自 ...
- 【python练手】获取城市天气质量
#!/usr/bin/python # -*- coding: utf-8 -*- # get city pm2.5 and ranking # python2.7 import sys import ...