前言

在上一篇博客提到了如何使用blstm-crf模型来训练本地数据集,完成命名实体提取的任务,还详细解析了代码和对应的原理。针对特定的任务,垂直的领域,可能需要使用特定数据集去训练,从而使得模型有一个很好的效果,但是在一些非特定(垂直)领域,是完全可以使用预训练好的模型来做命名实体识别任务的。下面,介绍一下如何使用开源框架,导入预训练好的bert模型来做命名实体识别。

基于transformers完成NER任务

废话不多说,直接上代码

import os
import torch
from transformers import AutoTokenizer, AutoModelForTokenClassification
from seqeval.metrics.sequence_labeling import get_entitiesos.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"# Load model from HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained("shibing624/bert4ner-base-chinese")
model = AutoModelForTokenClassification.from_pretrained("shibing624/bert4ner-base-chinese")
label_list = ['I-ORG', 'B-LOC', 'O', 'B-ORG', 'I-LOC', 'I-PER', 'B-TIME', 'I-TIME', 'B-PER']sentence = "王宏伟来自北京,是个警察,喜欢去王府井游玩儿。"def get_entity(sentence):tokens = tokenizer.tokenize(sentence)inputs = tokenizer.encode(sentence, return_tensors="pt")with torch.no_grad():outputs = model(inputs).logitspredictions = torch.argmax(outputs, dim=2)char_tags = [(token, label_list[prediction]) for token, prediction in zip(tokens, predictions[0].numpy())][1:-1]print(sentence)print(char_tags)pred_labels = [i[1] for i in char_tags]entities = []line_entities = get_entities(pred_labels)for i in line_entities:word = sentence[i[1]: i[2] + 1]entity_type = i[0]entities.append((word, entity_type))print("Sentence entity:")print(entities)get_entity(sentence)

这段代码就是使用"shibing624/bert4ner-base-chinese"这个预训练模型,来对"王宏伟来自北京,是个警察,喜欢去王府井游玩儿。"这句话做命名实体识别任务。这里主要提取ORG, LOC, PER和TIME这四种实体。最终模型输出的结果如下:


需要注意的是,这里的预训练模型需要从HuggingFace Hub官网在线下载,如果有的小伙伴因为网络的原因在线下载模型失败,可以参考这篇博客ReadTimeoutError: HTTPSConnectionPool(host=‘cdn-lfs.huggingface.co‘, port=443)来手动下载模型并导入。

可以看到,bert4ner-base-chinese这个预训练模型很好的完成了NER任务,并且提取结果都是正确的。

基于paddlenlp的完成NER任务

当然,除了国外的HuggingFace能够提供一些开源的模型来完成NER任务,国内也有一些比较好的开源框架,比如paddlenlp。而且,在paddlenlp2.3.4的版本之后,可以实现一行代码完成一些基础的nlp任务。

首先上代码:

from paddlenlp import Taskflowner = Taskflow("ner")sentence = "王宏伟来自北京,是个警察,喜欢去王府井游玩儿。"print(ner(sentence))

可以看到,从paddlenlp导入Taskflow库,可以一行代码搞定NER这个任务。paddlenlp的效果如下所示:

paddlenlp的ner的结果会更加细分一些,不仅把"王宏伟"提取成’人物类_实体’、‘王府井’提取成’场所类’,还把其他的每个词或者句子分成了paddlenlp框架定义的其他实体名称。

这里需要说明的是,要完成上述简单的任务,搭建环境的时候需要注意各个依赖库的版本问题。下面给出笔者环境版本,供各位参考:
paddlepaddle-gpu 2.3.2
paddlenlp 2.3.4
python 3.7
cudatoolkit 10.1.243
cudnn 7.6.5

之前安装paddlepaddle-gpu的版本是2.4.2,按照paddlepaddle官网的命令安装,但是报错ImportError: libcudart.so.10.2: cannot open shared object file: No such file or directory 。后来一查,有人说2.4的版本不稳定,容易报各种错误,所以就改成了2.3.2的版本,果然没有报错了。

参考

PaddleNLP一键预测功能:Taskflow API
paddlepaddle安装指南

使用bert的预训练模型做命名实体识别NER相关推荐

  1. Pytorch——XLNet 预训练模型及命名实体识别

    介绍 在之前我们介绍和使用了 BERT 预训练模型和 GPT-2 预训练模型,分别进行了文本分类和文本生成次.我们将介绍 XLNet 预训练模型,并使用其进行命名实体识别次. 知识点 XLNet 在 ...

  2. 用CRF做命名实体识别——NER系列(三)

    在上一篇文章<用隐马尔可夫模型(HMM)做命名实体识别--NER系列(二)>中,我们使用HMM模型来做命名实体识别,将问题转化为统计概率问题,进行求解.显然,它的效果是非常有限的. 在深度 ...

  3. 用隐马尔可夫模型(HMM)做命名实体识别——NER系列(二)

    上一篇文章里<用规则做命名实体识别--NER系列(一)>,介绍了最简单的做命名实体识别的方法–规则.这一篇,我们循序渐进,继续介绍下一个模型--隐马尔可夫模型. 隐马尔可夫模型,看上去,和 ...

  4. 用隐马尔可夫模型(HMM)做命名实体识别——NER系列(一)

    原博python2写的,文末是我改的python3代码 隐马尔可夫模型,看上去,和序列标注问题是天然适配的,所以自然而然的,早期很多做命名实体识别和词性标注的算法,都采用了这个模型. 这篇文章我将基于 ...

  5. 应用BERT模型做命名实体识别任务

    应用BERT模型做命名实体识别任务 作者:陆平 1. 命名实体识别任务概述 人工智能技术的应用领域日趋广泛,新的智能应用层出不穷.本项目将利用人工智能技术来对快递单文字中的命名实体信息进行识别,包括姓 ...

  6. 用深度学习做命名实体识别(四)——模型训练

    通过本文你将了解如何训练一个人名.地址.组织.公司.产品.时间,共6个实体的命名实体识别模型. 准备训练样本 下面的链接中提供了已经用brat标注好的数据文件以及brat的配置文件,因为标注内容较多放 ...

  7. 用深度学习做命名实体识别(五)-模型使用

    通过本文,你将了解如何基于训练好的模型,来编写一个rest风格的命名实体提取接口,传入一个句子,接口会提取出句子中的人名.地址.组织.公司.产品.时间信息并返回. 核心模块entity_extract ...

  8. 信息抽取实战:命名实体识别NER【ALBERT+Bi-LSTM模型 vs. ALBERT+Bi-LSTM+CRF模型】(附代码)

    实战:命名实体识别NER 目录 实战:命名实体识别NER 一.命名实体识别(NER) 二.BERT的应用 NLP基本任务 查找相似词语 提取文本中的实体 问答中的实体对齐 三.ALBERT ALBER ...

  9. NLP入门(八)使用CRF++实现命名实体识别(NER)

    CRF与NER简介   CRF,英文全称为conditional random field, 中文名为条件随机场,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机 ...

最新文章

  1. tcpdump使用实例——基于ip统计流量
  2. 【Kafka】BrokerNotAvailableException: Error choosing node for describeLogDirs: no node found.
  3. 运算除法的计算机函数,2、Python基础--除法、常用数学函数(示例代码)
  4. 抓包神器之Charles
  5. Xcode插件失效解决办法
  6. Windows FindFirstFile利用
  7. 关于python随机抽取各类型不重复值的思考(sample与randint的区别)
  8. 金融网络直播室软件的功能介绍
  9. 生成树协议STP 网络冗余技术
  10. js根据url下载文件并重命名,兼容ie11(其他版本未测试)
  11. c语言 end while,C语言报错:error: expected ‘while’ at end of input } ^
  12. c语言三种循环结构特点,c语言循环结构(c语言循环结构特点)
  13. Discuz!门户列表页,文章中无图片时,随机选择一张作为封面
  14. 计算机一级wps表格函数,WPS表格函数学习之公式大全(字母顺序).pdf
  15. Extjs中利用combobox实现全国省市级联
  16. 先下手为强 Google桌面搜索出炉
  17. R语言如何绘制词云图(17)
  18. 手机内存卡转化linux,怎样把手机内存移至sd内存卡
  19. 算法笔记CodeUp第一至第六章刷题记录
  20. ctf解题--后台登录(web)

热门文章

  1. 2018 MAC安装CUDA、cuDNN(Gaming Box1070)
  2. 【金融客服AI新玩法】语言学运用、LSTM+DSSM算法、多模态情感交互
  3. python读取excel汉字转成拼音_Python语言之用Python将全部中文姓名转为拼音
  4. 【Python3】遗传算法——PMX交叉
  5. 开发实现物理加速度移动_无限法则开发经验分享:射击游戏的物理引擎应用和移动模拟...
  6. django2.0 项目urls如何引用App的urls
  7. update case when 多字段,多条件, mysql中case when用法
  8. HDU 6406 Taotao Picks Apples(前缀和+二分)
  9. 计算机中的图像类型一般可分为位图和,数字化图像的类型可以分为什么和什么...
  10. pdd为什么下架iPhone12了 拼多多等电商平台不能买iPhone12了?