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++训练 ...
随机推荐
- 2019-10-18-WPF-解决-StylusPlugIn-点击穿透问题
title author date CreateTime categories WPF 解决 StylusPlugIn 点击穿透问题 lindexi 2019-10-18 20:55:35 +0800 ...
- 手机号测吉凶python代码
根据数理数来测电话后四位吉凶: 数理数 解释批注 0点特殊.......大吉 1大展鸿图.可获成功吉 2一盛一衰.劳而无功凶 3蒸蒸日上.百事顺遂吉 4坎坷前途.苦难折磨凶 5生意欣荣.名利双收吉 6 ...
- Data Lake Analytics账号和权限体系详细介绍
一.Data Lake Analytics介绍 数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake.基于数据湖做分析 ...
- deque简单解析
deque是支持双端插入删除的容器,oi中用来维护单调队列 声明方式 deque<int> d1;//声明一个叫d1的双向队列 deque<int> d2(d1);//声明一个 ...
- 获取电脑名和Ip
private string GetHostNameAndIP( bool isv4Orv6) { string HostName = Dns.GetHostN ...
- ML面试1000题系列(31-40)
本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 31.下列哪个不属于CRF模型对于HMM和MEM ...
- mysql实现行拼接、列拼接
举例:有t_person表如下: 一.mysql行拼接: 拼接某一行: 无分隔符:select CONCAT(id,idcard,`status`,content) from t_perso ...
- yii常用操作数据
yii常用操作数据.php <?php defined('YII_DEBUG') or define('YII_DEBUG', true); //当在调试模式下,应用会保留更多日志信息,如果抛出 ...
- [运维]Dell R710 raid配置 标签: raid运维 2017-04-15 19:35 581人阅读 评论(16)
Dell R系列的一些服务器,raid的配置都大同小异,公司大部分的服务器,都是Dell R710型号的,这个型号的raid界面配置起来还是很简单的,下面来跟随小编体验一下raid如何配置吧.ps:图 ...
- 【水滴石穿】react-native-app
项目地址:https://github.com/WQone/react-native-app 这个是一个非常优秀的小姐姐写的,希望大家能够以她为榜样,一起加油进步呀- 先看效果 分析package.j ...