paddle 使用预训练模型做NER(命名实体任务)

前言

paddlepaddle是百度的一个深度学习框架,该框架的生态环境中,有一个paddleNLP开源子项目,该项目提供了当前大部分NLP预训练模型训练好的模型参数,我们可以使用paddleNLP提供的预训练模型来做NER命名实体识别任务.本文,主要介绍本人近期,做的关于NER命名实体识别的一些工作

一:paddle NRE

(1)开源链接

开源链接:https://gitee.com/lingcb/paddle-ner

(2)预训练模型

该项目,使用的预训练模型为:bert-wwm-ext-chinese,,bert-base-multilingual-uncased
若要选择其他模型,可以查询链接https://paddlenlp.readthedocs.io/zh/latest/model_zoo/transformers.html#transformer

(3)数据集

使用了三个数据集:msra_ner,,peoples_daily_ner,,cluener
msra_ner,,peoples_daily_ner ,,可以直接使用paddlenlp.datasets.load_dataset导入

cluener 数据集,开源链接为 https://github.com/CLUEbenchmark/CLUENER2020
同时 src/cluener_dataset.py 是处理cluener 数据集的代码

(4)模型的序列标注

数据集的标注格式是 BIO方式

cluener_label_list = ['B-address', 'I-address', 'B-book', 'I-book', 'B-company', 'I-company', 'B-game', 'I-game', 'B-government', 'I-government', 'B-movie', 'I-movie', 'B-name', 'I-name', 'B-organization', 'I-organization', 'B-position', 'I-position', 'B-scene', 'I-scene', 'O']
msra_label_list = ['B-PER', 'I-PER', 'B-ORG', 'I-ORG', 'B-LOC', 'I-LOC', 'O']
peoples_daily_label_list = ['B-PER', 'I-PER', 'B-ORG', 'I-ORG', 'B-LOC', 'I-LOC', 'O']

(4)项目结构

.
├── LICENSE
├── README.md
├── cluener                     #cluener数据集
│   ├── README.md
│   ├── cluener_predict.json
│   ├── dev.json
│   ├── test.json
│   └── train.json
├── main.py                        #训练代码
└── src
    ├── __init__.py
    ├── cluener_dataset.py        #cluener数据集处理代码
    ├── dataset.py                #数据集相应的处理代码
    ├── eval.py                   #模型评估代码
    ├── parameter.py              #各种超参数的设置,包括训练的各种参数,数据集,预训练模型等
    └── predict.py                #预测代码

二:项目效果

(1) bert-base-multilingual-uncased 各数据集 测试集指标

datasetlossprecisionrecallf1
msra_ner0.0001020.9114370.9189440.915175
peoples_daily_ner0.0287250.9378080.9393520.938580
cluener0.6026010.7302470.7749750.751947

(2) bert-wwm-ext-chinese 各数据集 测试集指标

datasetlossprecisionrecallf1
msra_ner0.0047100.9454920.9384130.941939
peoples_daily_ner0.0209030.9673180.9503290.958749
cluener0.4337980.7546930.7900430.771964

三:运行

训练的模型参数:
链接:https://pan.baidu.com/s/1hdfilBRyVQ3GkKOCOPSqng
提取码:fpfi

(1)相关环境

1.安装 Anacodna,上面百度云盘分享链接,有win10 64位的annaconda安装包

2.安装相应第三方库

进入anaconda的python环境
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple paddlepaddle
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple paddlenlp

3.克隆项目

git clone https://gitee.com/lingcb/paddle-ner.git

cd paddle-ner

python src/predict.py      #预测
python src/eval.py         #评估模型
python main.py             #训练模型

(2)运行

在运行上面项目之前,需要设置一些parameter.py文件里的一些参数

1.训练

cd paddle-ner
python main.py

需要修改,下图的几个参数,当然,也可结合实际,修改一些其他的参数。
请添加图片描述
请添加图片描述
请添加图片描述
运行成功,如下图
请添加图片描述

2.预测&评估

cd paddle-ner
python src/predict.py      #预测
python src/eval.py         #评估模型

训练与评估需要改的参数,相似,其中checkpoint_base是上面百度链接文件夹的路径
请添加图片描述
请添加图片描述
请添加图片描述
预测代码成功运行截图
请添加图片描述
指标代码成功运行截图
请添加图片描述

四:一些链接

(1)本工程代码开源链接:https://gitee.com/lingcb/paddle-ner
(2)paddlenlp 官方文档:https://paddlenlp.readthedocs.io/zh/latest/

(3)paddlenlp提供的预训练模型列表:https://paddlenlp.readthedocs.io/zh/latest/data_prepare/dataset_list.html

(4)#CLUENER2020数据集开源链接
https://github.com/CLUEbenchmark/CLUENER2020

(5)paddlenlp datasets
https://paddlenlp.readthedocs.io/zh/latest/data_prepare/dataset_list.html

后言

在做这个项目时,遇到了一些问题,这里记录一下。
1.paddlenlp.datasets.MapDataset,传入的是一个list,之前我传入一个paddle.io.Dataset,时,训练一段时间后,会报 key:8 的错误

2.cluener_dataset.py 代码,是处理原始cluener数据集的代码

3.dataset.py 里的transform(texts) 使用 里面的 check_text_size(text,max_seq_len) 进行最大长度序列切分,超过max_seq_len的部分,将作为新的文本序列

4.predict.py 预测前,,使用 dataset.py 里的transform(texts),对原始文本texts数组进行预处理

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值