聊聊从大模型来看NLP解决方案之UIE

这篇具有很好参考价值的文章主要介绍了聊聊从大模型来看NLP解决方案之UIE。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote

概述

自然语言处理NLP任务的实现,相比较以前基于传统机器学习算法实现方法,现在越来越集中使用大模型来实现。
通过——数据标注-模型训练-模型调优/微调-模型压缩-预测部署的大模型流程,覆盖NLP多场景满足开发者落地实现与灵活定制的需求。
PaddleNLP是其中典型的NLP解决方案库,通过聚合业界优质预训练模型并提供开箱即用的开发体验,覆盖NLP多场景的模型库搭配产业实践范例可满足开发者灵活定制的需求。

预训练基座模型主要以ERINE系列大模型为主,毕竟是自家的噻。

之前相关的NLP系列文档也是基于预训练大模型的解决方案来实现的。可参考:
聊聊PaddleNLP库与层次多标签文本分类任务
聊聊层次多标签分类NLP任务的实践

UIE

UIE:Universal Information Extraction,通用信息抽取统一框架。官方文档:UIE。
该框架实现了实体抽取、关系抽取、事件抽取、情感分析等任务的统一建模,并使得不同任务间具备良好的迁移和泛化能力。PaddleNLP借鉴论文的方法,基于ERNIE 3.0知识增强预训练模型,训练并开源了首个中文通用信息抽取模型UIE。该模型可以支持不限定行业领域和抽取目标的关键信息抽取,实现零样本快速冷启动,并具备优秀的小样本微调能力,快速适配特定的抽取目标。

开箱即用

paddlenlp.Taskflow提供通用信息抽取、评价观点抽取等能力,可抽取多种类型的信息,包括但不限于命名实体识别(如人名、地名、机构名等)、关系(如电影的导演、歌曲的发行时间等)、事件(如某路口发生车祸、某地发生地震等)、以及评价维度、观点词、情感倾向等信息。用户可以使用自然语言自定义抽取目标,无需训练即可统一抽取输入文本中的对应信息。实现开箱即用,并满足各类信息抽取需求。
以实体抽取任务为例:
命名实体识别(Named Entity Recognition,简称NER),是指识别文本中具有特定意义的实体。在开放域信息抽取中,抽取的类别没有限制,用户可以自己定义。

  • 例如抽取的目标实体类型是"时间"、"选手"和"赛事名称", schema构造如下:
['时间', '选手', '赛事名称']

调用示例:

>>> from pprint import pprint
>>> from paddlenlp import Taskflow

>>> schema = ['时间', '选手', '赛事名称'] # Define the schema for entity extraction
>>> ie = Taskflow('information_extraction', schema=schema)
>>> pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!")) # Better print results using pprint
[{'时间': [{'end': 6,
          'probability': 0.9857378532924486,
          'start': 0,
          'text': '2月8日上午'}],
  '赛事名称': [{'end': 23,
            'probability': 0.8503089953268272,
            'start': 6,
            'text': '北京冬奥会自由式滑雪女子大跳台决赛'}],
  '选手': [{'end': 31,
          'probability': 0.8981548639781138,
          'start': 28,
          'text': '谷爱凌'}]}]
  • 例如抽取的目标实体类型是"肿瘤的大小"、"肿瘤的个数"、"肝癌级别"和"脉管内癌栓分级", schema构造如下:
['肿瘤的大小', '肿瘤的个数', '肝癌级别', '脉管内癌栓分级']

在上例中我们已经实例化了一个Taskflow对象,这里可以通过set_schema方法重置抽取目标。调用示例:

>>> schema = ['肿瘤的大小', '肿瘤的个数', '肝癌级别', '脉管内癌栓分级']
>>> ie.set_schema(schema)
>>> pprint(ie("(右肝肿瘤)肝细胞性肝癌(II-III级,梁索型和假腺管型),肿瘤包膜不完整,紧邻肝被膜,侵及周围肝组织,未见脉管内癌栓(MVI分级:M0级)及卫星子灶形成。(肿物1个,大小4.2×4.0×2.8cm)。"))
[{'肝癌级别': [{'end': 20,
            'probability': 0.9243267447402701,
            'start': 13,
            'text': 'II-III级'}],
  '肿瘤的个数': [{'end': 84,
             'probability': 0.7538413804059623,
             'start': 82,
             'text': '1个'}],
  '肿瘤的大小': [{'end': 100,
             'probability': 0.8341128043459491,
             'start': 87,
             'text': '4.2×4.0×2.8cm'}],
  '脉管内癌栓分级': [{'end': 70,
               'probability': 0.9083292325934664,
               'start': 67,
               'text': 'M0级'}]}]

UIE支持多种NLP任务,毕竟是统一信息抽取框架。其它的任务可以参考官方文档。

基座模型

肯定是自家的预训练基座啦。

模型 结构 语言
uie-base (默认) 12-layers, 768-hidden, 12-heads 中文
uie-base-en 12-layers, 768-hidden, 12-heads 英文
uie-medical-base 12-layers, 768-hidden, 12-heads 中文
uie-medium 6-layers, 768-hidden, 12-heads 中文
uie-mini 6-layers, 384-hidden, 12-heads 中文
uie-micro 4-layers, 384-hidden, 12-heads 中文
uie-nano 4-layers, 312-hidden, 12-heads 中文
uie-m-large 24-layers, 1024-hidden, 16-heads 中、英文
uie-m-base 12-layers, 768-hidden, 12-heads 中、英文

uie模型是基于ERINE基座模型训练出来的。

微调—定制化

其实在我个人的角度来看,上述的内容在很多的框架、平台都已经有了;譬如Modelscope,我现在养成习惯,遇到啥NLP相关的、大模型相关的,就去Modelscope找解决策略。但在Modelscope上有个最大的问题,当然这是我个人的看法——微调支持不够,很多的模型/库压根没有微调。老实说,这的确是帮助不大,在很多时候我们需要的是可以接入的定制化实现。

这也正常,毕竟如果开放了微调,支持灵活的定制化,对开源方就不太友好了。

而相比较来说,PaddleNLP的微调支持就很到位了。

数据标注

基于doccano标注平台做数据标注。可参考: 聊聊层次多标签分类NLP任务的实践。

模型微调

荐使用 Trainer API对模型进行微调。只需输入模型、数据集等就可以使用 Trainer API 高效快速地进行预训练、微调和模型压缩等任务,可以一键启动多卡训练、混合精度训练、梯度累积、断点重启、日志显示等功能,Trainer API 还针对训练过程的通用训练配置做了封装,比如:优化器、学习率调度等。
使用下面的命令,使用 uie-base 作为预训练模型进行模型微调,将微调后的模型保存至$finetuned_model:
单卡启动:

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

模型评估

可忽略

模型预测

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广州至佛山"))
[{'出发地': [{'end': 17,
           'probability': 0.9975287467835301,
           'start': 15,
           'text': '广州'}],
  '时间': [{'end': 10,
          'probability': 0.9999476678061399,
          'start': 6,
          'text': '7月5日'}],
  '目的地': [{'end': 20,
           'probability': 0.9998511131226735,
           'start': 18,
           'text': '佛山'}],
  '费用': [{'end': 15,
          'probability': 0.9994474579292856,
          'start': 12,
          'text': '114'}]}]

模型部署

  • 模型导出:模型训练、压缩时已经自动进行了静态图的导出以及 tokenizer 配置文件保存,保存路径${finetuned_model} 下应该有 .pdimodel、.pdiparams 模型文件可用于推理。
  • 模型部署:
# UIE 模型 CPU 推理
python deploy/python/infer.py --model_dir ./checkpoint/model_best --device cpu
# UIE 模型 GPU 推理
python deploy/python/infer.py --model_dir ./checkpoint/model_best --device gpu

总结

PaddleNLP是基于预训练大模型的NLP任务解决方案库,因此其实践流程其实都是一样的:数据标注-模型训练-模型调优/微调-模型压缩-预测部署。通过对PaddleNLP库的实践与了解熟悉,我个人觉得,非常有助于掌握NLP与大模型在实际应用中的落地。建议大家多了解学习。

转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote

更多PaddleNLP与大模型的文章,请上个人公众号查阅:
聊聊从大模型来看NLP解决方案之UIE文章来源地址https://www.toymoban.com/news/detail-855175.html

到了这里,关于聊聊从大模型来看NLP解决方案之UIE的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 什么样的数据库才能训练出强大的生成式AI?来看看MongoDB的解决方案吧!

    人工智能正以前所未有的速度发展,而生成式 AI (GenAI) 处于这场变革的前沿。GenAI 拥有广泛的功能,涵盖文本生成以及音乐和艺术创作。但是,GenAI 的真正独特之处在于它能够深入理解上下文,生成的输出与人类输出极为相似。它不仅仅是与智能聊天机器人对话。GenAI 拥有改

    2024年01月20日
    浏览(44)
  • 聊聊 从源码来看ChatGLM-6B的模型结构

    基于ChatGLM-6B第一版,要注意还有ChatGLM2-6B以及ChatGLM3-6B ChatGLM是transformer架构的神经网络模型,因此从transformer结构入手,分析其源码结构。 transformer结构: 转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote/ ChatGLM-6B的位置编码采用的旋转位置编码(RoPB)实现。其源码: ChatGLM-6B采用

    2024年02月03日
    浏览(38)
  • Android三维模型解决方案

    1.原生OpenGL ES 无需多说,虽然OpenGL已经出来这么多年了,但无疑还是现在普及最广的,尤其在移动端,所以用原生OpenGL ES方案可以解决 2.jpct(最推荐) JPCT是一款基于OpenGL技术开发的3D图形引擎(PC环境为标准OpenGL,Android为OpenGL ES), 以Java语言为基础的,拥有功能强大的Java 3

    2024年02月16日
    浏览(33)
  • 高速下载VisualGLM模型文件的解决方案

      大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作

    2024年02月12日
    浏览(37)
  • Unity运行时导出FBX模型的解决方案

    本文章是写如何在运行时导出场景中的游戏对象到FBX格式的文件。该解决方案支持导出游戏对象在Hierarchy下的层次结构、Transform组件信息、材质贴图、静态Mesh网格、SkinnedMesh、骨骼信息以及动画等。也支持将场景中的摄像机组件以及灯光组件导出到FBX模型。 目前该解决方案仅

    2023年04月08日
    浏览(55)
  • Three.js深度冲突(模型闪烁)与解决方案

    下面代码创建两个重合的矩形平面Mesh,通过浏览器预览,当你旋转三维场景的时候,你会发现模型渲染的时候产生闪烁。 这种现象,主要是两个Mesh重合,电脑GPU分不清谁在前谁在后,这种现象,可以称为深度冲突 Z-fighting 。 look 适当偏移,解决深度冲突,偏移尺寸相对模型

    2024年02月17日
    浏览(43)
  • Unity中如何通过UI显示3D模型解决方案?

    需求:实现将3D模型显示在2DUI上面,实现王者荣耀英雄商城之中英雄展示功能,3D模型可以旋转,添加特效等正常3D功能。 效果: 那些黑圈圈就是例子特效哦。  实现: Project面板创建一个RawImage 创建一个Camera,通过设置渲染模式控制模型显示的 创建一个RenderTexture 创建一个

    2024年02月02日
    浏览(36)
  • Amazon SageMaker:搭建企业级AI模型的完整解决方案

    人工智能仍处于科技浪潮之巅… 随着智能芯片、大数据和云计算的发展,深度学习技术得到进一步升级。以 ChatGPT 为首的AIGC技术大放异彩:AI绘画、AI作曲、AI编程、AI写作…一系列AI产品赋能生产;边缘计算、联邦学习、多智能体等技术逐渐从学术界走向工业界,提高生产效

    2023年04月15日
    浏览(49)
  • ChatGPT和Bard太贵,介绍8个免费开源的大模型解决方案!

    8个开源的ChatGPT和Bard的替代方案,带你发现更多广泛使用的开源框架和模型。 微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩 LLaMA项目包含了一组基础语言模型,其规模从70亿到650亿个参数不等。这些模型在数以百万计的token上进行训练,而且它完全在公开的

    2024年02月14日
    浏览(44)
  • 最强开源Text2SQL大模型本地部署的解决方案

      大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的

    2024年02月08日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包