paddle 使用预训练模型做NER命名实体识别任务
- 前言
- 一:paddle NRE
- (1)开源链接
- (2)预训练模型
- (3)数据集
- (4)模型的序列标注
- (4)项目结构
- 二:项目效果
- (1) bert-base-multilingual-uncased 各数据集 测试集指标
- (2) bert-wwm-ext-chinese 各数据集 测试集指标
- 三:运行
- (1)相关环境
- (2)运行
- 1.训练
- 2.预测&评估
- 四:一些链接
- 后言
前言
paddlepaddle是百度的一个深度学习框架,该框架的生态环境中,有一个paddleNLP开源子项目,该项目提供了当前大部分NLP预训练模型训练好的模型参数,我们可以使用paddleNLP提供的预训练模型来做NER命名实体识别任务.本文,主要介绍本人近期,做的关于NER命名实体识别的一些工作。
一:paddle NRE
(1)开源链接
开源链接:https://gitee/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/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 各数据集 测试集指标
dataset | loss | precision | recall | f1 |
---|---|---|---|---|
msra_ner | 0.000102 | 0.911437 | 0.918944 | 0.915175 |
peoples_daily_ner | 0.028725 | 0.937808 | 0.939352 | 0.938580 |
cluener | 0.602601 | 0.730247 | 0.774975 | 0.751947 |
(2) bert-wwm-ext-chinese 各数据集 测试集指标
dataset | loss | precision | recall | f1 |
---|---|---|---|---|
msra_ner | 0.004710 | 0.945492 | 0.938413 | 0.941939 |
peoples_daily_ner | 0.020903 | 0.967318 | 0.950329 | 0.958749 |
cluener | 0.433798 | 0.754693 | 0.790043 | 0.771964 |
三:运行
训练的模型参数:
链接:https://pan.baidu/s/1hdfilBRyVQ3GkKOCOPSqng
提取码:fpfi
(1)相关环境
1.安装 Anacodna,上面百度云盘分享链接,有win10 64位的annaconda安装包
2.安装相应第三方库
进入anaconda的python环境
pip install -i https://pypi.tuna.tsinghua.edu/simple paddlepaddle
pip install -i https://pypi.tuna.tsinghua.edu/simple paddlenlp
3.克隆项目
git clone https://gitee/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/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/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数组进行预处理
更多推荐
paddle 使用预训练模型做NER(命名实体任务)
发布评论