对doccano自动标注使用的默认UIE模型进行微调以提高特定领域的实体识别能力,提高标注速度

这篇具有很好参考价值的文章主要介绍了对doccano自动标注使用的默认UIE模型进行微调以提高特定领域的实体识别能力,提高标注速度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

虽然doccano的自动标注使用默认的UIE模型可以识别出一定的实体,但是在特定领域或者因为实体类别名不能被理解很多实体是识别不了的,所以我们可以通过自己标注的数据对模型进行微调来满足我们Auto Labeing的需求。

预处理doccano标注的数据

该章节详细说明如何通过doccano.py脚本对doccano平台导出的标注数据进行转换,一键生成训练/验证/测试集。

在本地部署UIE模型

下载模型压缩包:

本来是要通过一定的方法(GitZip)才能在整体的大项目仓库中下载的,不详细讲,这里直接给压缩包。

PaddleNLP-model_zoo.zip - 蓝奏云 (lanzoub.com)

对doccano自动标注使用的默认UIE模型进行微调以提高特定领域的实体识别能力,提高标注速度

抽取式任务数据转换

  • 当标注完成后,在 doccano 平台上导出 JSONL(relation) 形式的文件,并将其重命名为 doccano_ext.json 后,放入 ./data 目录下。
  • 通过 doccano.py 脚本进行数据形式转换,然后便可以开始进行相应模型训练。
python doccano.py \
    --doccano_file ./data/doccano_ext.json \
    --task_type "ext" \
    --save_dir ./data \
    --negative_ratio 5

当然也可以将这个命令保存为tran.sh文件

训练UIE模型

  • 使用标注数据进行小样本训练,模型参数保存在./checkpoint/目录。

tips: 推荐使用GPU环境,否则可能会内存溢出。CPU环境下,可以修改model为uie-tiny,适当调下batch_size。

增加准确率的话:--num_epochs 设置大点多训练训练

可配置参数说明:

  • model_name_or_path:必须,进行 few shot 训练使用的预训练模型。可选择的有 "uie-base"、 "uie-medium", "uie-mini", "uie-micro", "uie-nano", "uie-m-base", "uie-m-large"。
  • multilingual:是否是跨语言模型,用 "uie-m-base", "uie-m-large" 等模型进微调得到的模型也是多语言模型,需要设置为 True;默认为 False。
  • output_dir:必须,模型训练或压缩后保存的模型目录;默认为 None
  • device: 训练设备,可选择 'cpu'、'gpu' 、'npu'其中的一种;默认为 GPU 训练。
  • per_device_train_batch_size:训练集训练过程批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为 32。
  • per_device_eval_batch_size:开发集评测过程批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为 32。
  • learning_rate:训练最大学习率,UIE 推荐设置为 1e-5;默认值为3e-5。
  • num_train_epochs: 训练轮次,使用早停法时可以选择 100;默认为10。
  • logging_steps: 训练过程中日志打印的间隔 steps 数,默认100。
  • save_steps: 训练过程中保存模型 checkpoint 的间隔 steps 数,默认100。
  • seed:全局随机种子,默认为 42。
  • weight_decay:除了所有 bias 和 LayerNorm 权重之外,应用于所有层的权重衰减数值。可选;默认为 0.0;
  • do_train:是否进行微调训练,设置该参数表示进行微调训练,默认不设置。
  • do_eval:是否进行评估,设置该参数表示进行评估。

该示例代码中由于设置了参数 --do_eval,因此在训练完会自动进行评估。

微调命令

export finetuned_model=./checkpoint/model_best

python finetune.py  \
    --device gpu \
    --logging_steps 10 \
    --save_steps 100 \
    --eval_steps 100 \
    --seed 42 \
    --model_name_or_path uie-base \
    --output_dir $finetuned_model \
    --train_path ./data/train.txt \
    --dev_path ./data/dev.txt  \
    --max_seq_length 512  \
    --per_device_eval_batch_size 16 \
    --per_device_train_batch_size  16 \
    --num_train_epochs 20 \
    --learning_rate 1e-5 \
    --label_names "start_positions" "end_positions" \
    --do_train \
    --do_eval \
    --do_export \
    --export_model_dir $finetuned_model \
    --overwrite_output_dir \
    --disable_tqdm True \
    --metric_for_best_model eval_f1 \
    --load_best_model_at_end  True \
    --save_total_limit 1

训练完成的结果:

对doccano自动标注使用的默认UIE模型进行微调以提高特定领域的实体识别能力,提高标注速度

验证UIE模型效果

通过运行以下命令进行模型评估

python evaluate.py \
    --model_path ./checkpoint/model_best \
    --test_path ./data/dev.txt \
    --batch_size 16 \
    --max_seq_len 512

根据我们手动标注的数据训练微调后,再次测试自有标注的领域数据,返回的准确率为88%.

对doccano自动标注使用的默认UIE模型进行微调以提高特定领域的实体识别能力,提高标注速度

部署微调后的UIE模型

本地终端定制模型一键预测

paddlenlp.Taskflow装载定制模型,通过task_path指定模型权重文件的路径,路径下需要包含训练好的模型权重文件model_state.pdparams

from pprint import pprint
from paddlenlp import Taskflow
schema = ['出发地', '目的地', '费用', '时间']#根据自身实体类别修改
# 设定抽取目标和定制化模型权重路径
my_ie = Taskflow("information_extraction", schema=schema, task_path='./checkpoint/model_best')
pprint(my_ie("城市内交通费7月5日金额114广州至佛山"))

经过测试,原本无法预测出来的类型在引入自己标注的模型之后就可以识别出来了。自此我们可以实现标注的数据用于训练,训练的模型又可以提升我们标注的速率。

模型快速服务化部署

在UIE的服务化能力中我们提供基于PaddleNLP SimpleServing 来搭建服务化能力,通过几行代码即可搭建服务化部署能力。

在上一篇文章如何使用doccano+flask+花生壳+服务器实现命名实体识别ner自动标注 - 孤飞 - 博客园 (cnblogs.com)中的部署代码里,我们修改task_path模型路径为刚刚微调过后的即可完成识别。

from flask import Flask, request, jsonify
from paddlenlp import Taskflow


app = Flask(__name__)

# 在这里定义你想要识别的实体类型
# UIE具有zero-shot能力,所以类型可以随便定义,但是识别的好坏不一定
schema = ['出发地', '目的地', '费用', '时间']#根据自身实体类别修改

# 第一运行时,联网状态下会自动下载模型
# device_id为gpu id,如果写-1则使用cpu,如果写0则使用gpu
ie = Taskflow('information_extraction', schema=schema, device_id=0,task_path='./uie/checkpoint/model_best/')#添加了tesk_path指向新的模型


def convert(result):
    result = result[0]
    formatted_result = []
    for label, ents in result.items():
        for ent in ents:
            formatted_result.append(
                {
                    "label": label,
                    "start_offset": ent['start'],
                    "end_offset": ent['end']
                })

    return formatted_result


@app.route('/', methods=['POST'])
def get_result():
    text = request.json['text']
    print(text)
    result = ie(text)
    formatted_result = convert(result)

    return jsonify(formatted_result)


if __name__ == '__main__':
	# 这里写端口的时候一定要注意不要与已有的端口冲突
	# 这里的host并不是说访问的时候一定要写0.0.0.0,但是这里代码要写0.0.0.0,代表可以被本网络中所有的看到
	# 如果是其他机器访问你创建的服务,访问的时候要写你的ip
    app.run(host='0.0.0.0', port=88)

参考文章

PaddleNLP/doccano 数据转换 GitHub

PaddleNLP/README.md 模型微调 GitHub

信息抽取UIE(二)--小样本快速提升性能(含doccona标注-阿里云开发者社区 (aliyun.com)

解决报错:cannot import name 'strtobool' from 'paddlenlp.trainer.argparser'

Question 使用uie,标好数据再用doccano.py脚本的时候发生错误:cannot import name 'strtobool' from 'paddlenlp.trainer.argparser' · Issue #5257 · PaddlePaddle/PaddleNLP (github.com)文章来源地址https://www.toymoban.com/news/detail-421482.html

到了这里,关于对doccano自动标注使用的默认UIE模型进行微调以提高特定领域的实体识别能力,提高标注速度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • B.3【智能标注】:基于Labelstudio的UIE半监督深度学习的智能标注方案(云端版),提效。

    NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性

    2023年04月09日
    浏览(34)
  • 使用 LoRA 技术对 LLaMA 65B 大模型进行微调及推理

    前几天,Meta 发布了 LIMA 大模型,在LLaMA-65B的基础上,无需使用 RLHF,只用了 1000 个精心准备的样本数据进行微调,就达到了和 GPT-4 相媲美的程度。这激发了我探索 LLaMA 65B 大模型的兴趣。 之前的一系列大模型相关文章都是在LLaMA 7B/13B模型参数上面进行微调,文本使用 LoRA 技

    2024年02月08日
    浏览(48)
  • [NLP]使用Alpaca-Lora基于llama模型进行微调教程

    Stanford Alpaca 是在 LLaMA 整个模型上微调,即对预训练模型中的所有参数都进行微调(full fine-tuning)。但该方法对于硬件成本要求仍然偏高且训练低效。 [NLP]理解大型语言模型高效微调(PEFT) 因此, Alpaca-Lora 则是利用 Lora 技术,在冻结原模型 LLaMA 参数的情况下,通过往模型中加

    2024年02月15日
    浏览(57)
  • 【AI工具】 一款多SOTA模型集成的高精度自动标注工具(直接安装使用,附源码)

    高精度自动标注工具简介及其特性 标注工具的安装 开启自动标注 X-AnyLabeling 是一款全新的交互式自动标注工具,其基于AnyLabeling进行构建和二次开发,在此基础上扩展并支持了许多的模型和功能,并借助Segment Anything和YOLO等主流模型提供强大的 AI 支持。无须任何复杂配置,下

    2024年02月08日
    浏览(45)
  • 使用PaddleNLP UIE模型提取上市公司PDF公告关键信息

    项目地址:使用PaddleNLP UIE模型抽取PDF版上市公司公告 - 飞桨AI Studio星河社区 (baidu.com) 本项目将演示如何通过PDFPlumber库和PaddleNLP UIE模型,抽取公告中的相关信息。本次任务的PDF内容是破产清算的相关公告,目标是获取受理时间,受理法院,相关公司等内容,作为市场分析的关

    2024年02月21日
    浏览(53)
  • OpenAI更新不会代码也可进行模型微调

    OpenAI已经更新了他们的微调功能,提供了一个直观的用户界面,使用户能够在不编写任何代码的情况下进行模型的微调。 01 通过微调截图可以看到nbsp; 1. Fine-tuning:这是微调功能的主页面。您可以看到选项卡,如\\\"All\\\", \\\"Successful\\\", 和 \\\"Failed\\\",允许用户查看他们所有的微调作业、

    2024年02月07日
    浏览(45)
  • 从UIE模型理解到UIE工业实战

    uie论文链接: https://arxiv.org/abs/2203.12277 uie项目地址:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie 之前的信息抽取做法:子任务实体抽取、关系抽取、事件抽取和情感分析分开抽取,如a。本文要做的是联合抽取,如b 作者自定义了结构化的信息抽取语言 SEL :结构如下

    2024年02月06日
    浏览(40)
  • R语言绘图丨论文中最常用箱线图绘制教程,自动进行显著性检验和误差线标注

    在科研论文绘图中,对于多组数据进行比较一般采用箱线图的方法,今天分享一下这个经典数据可视化方法,从零开始绘制一张带 误差棒 并自动计算 显著性 比较结果的 箱线图 。 数据分布信息: 箱线图能够直观地展示数据的分布情况,包括数据的中位数、上下四分位数和

    2024年02月12日
    浏览(48)
  • paddlenlp进行训练UIE-X相关问题

    问题描述:在使用UIE-X 模型微调时,进行实体抽取的时候,如何提升OCR的识别(中文)准确率,目前提取关系正常,但OCR识别结果存在错别字和未识别到的部分 OCR那里检测和识别要标注训练调整 OCR效果没有PADDLEHUB上的模型效果好,可以分开,就是使用检测模型检测,将检测到的

    2024年02月09日
    浏览(32)
  • 微调实操三:人类反馈对语言模型进行强化学习(RLHF)

    1、前言 前面我们在《微调实操一: 增量预训练(Pretraining)》和《微调实操二: 有监督微调(Supervised Finetuning)》实操的两个章节,学习了PT(Continue PreTraining)增量预训练和SFT(Supervised Fine-tuning)有监督微调过程,,今天我们进入第三阶段的微调, 第三阶段微调主流分成2种做法: 1.1 RLHF(

    2024年02月22日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包