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++训练 ...
随机推荐
- 微信小程序--每个独立的page的page.json只能修改window属性
app.json 配置项列表 app.json文件用来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. window配置 用于设置小程序的状态栏.导航条. ...
- hdfs 的存储空间扩展
问题:之前集群上每个节点的的大小为50G, 但是硬盘容量是160G的, 不明白为什么才50个G: 后来发现是因为dfs.data.dir设置的问题,该目录下挂载的磁盘空间的大小就会作为该节点的容量.. ...
- setStorage、getStorage、 removeStorage 封装
// 本地存储 setStorage(name, data){ let dataType = typeof data; // json对象 if(dataType === 'object'){ win ...
- Spring Boot 数据库连接池参数
挑战A.I.,赢百万奖金......了解更多详情>>> Tomcat JDBC 连接池 Spring Boot 默认选择 Tomcat JDBC Pool 作为数据库连接池.Tomc ...
- Java连接Neo4j的两种方式
1.Neo4j数据库的两种方式 Neo4j可以以两种方式运行: Java应用程序中的嵌入式数据库 通过REST的独立服务器 不管哪一种方式,这个选择不会影响查询和使用数据库的方式. 它是由应用程序的性 ...
- php中实现多线程的的两个方法具体是怎样?
假设你要建立一个服务来检查正在运行的n台服务器,以确定他们还在正常运转.你可能会写下面这样的代码:代码如下: <?php$hosts = array("host1.sample.com ...
- vue中element-ui添加按钮
<div v-for="(v,i) in list"> <el-form label-width="120px" size="sma ...
- SQLServer —— datediff 函数计算俩个日期差
- 闲鱼Flutter&FaaS云端一体化架构
讲师介绍 国有,闲鱼架构团队负责人.在7月13号落幕的2019年Archsummit峰会上就近一年来闲鱼在Flutter&FaaS一体化项目上的探索和实践进行了分享. 传统Native+Web ...
- Balanced Binary Tree 判断平衡二叉树
Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...