当前位置: 首页 > news >正文

小样本UIE 信息抽取微调快速上手(不含doccona标注)

文章目录

  • 1.安装环境(可略过)
  • 2.模型简介(略读)
    • 抽取任务输入输出示例:
      • 1.实体识别
      • 2.关系抽取
  • 3.快速上手(主菜)
    • (1)转换数据
      • ==标注数据样例==
    • (2)生成训练数据
      • ==训练数据样例==
    • (3)微调训练

1.安装环境(可略过)

模型快速复现的基本思路,只要两步,一是安装环境,二是跑模型。
安装GPU版本的paddlepaddle看参照此博客,如果不幸地,你报错缺少libcudart动态库文件,请参照此博客解决环境安装问题,毕竟安装环境是AIer不可逾越的鸿沟。

2.模型简介(略读)

知其然也知其所以然,能到快速上手阶段,肯定已经了解了UIE的一些相关介绍,这里仅从偏实践角度,简短剖析一下任务细节,具体介绍可参照官方github。

UIE(Universal Information Extraction) 针对少样本、低资源、不同领域等场景,实现从非结构化文本中抽取结构化信息,包含了实体识别、关系抽取、事件抽取、情感分析、评论抽取等任务。
该任务的亮点在于:
(1)将多任务的信息抽取统一为一个抽取模板
(2)基于结构化生成的预训练模型,可以实现少样本、跨领域的模型微调,且能够达到工业级可应用的SOTA效果。

统一模板可结合UIE整体框架来理解,如下图所示。
请添加图片描述
其底座是基于T5模型预训练的,多任务模型那就少不了prompt,这个prompt设计也非常巧妙,把prompt提示抽象成两种类别,Spotting进行实体识别,Associating进行关系类别识别,那么格式化就是:[spot] 实体类别 [asso] 关系类别 [text]。与实体识别、关系抽取、事件抽取任务联系起来,实体识别、事件触发词识别以及事件论元识别就是在做Spotting操作,找取目标信息片段,关系抽取、事件论元与事件触发词之间的关系是做Associating操作,寻找目标信息片段之间的关系。

对于不同的抽取任务只要给出统一的schema,那么模型就会自动将其组装为prompt喂给模型,进行Spotting、Associating操作。

抽取任务输入输出示例:

1.实体识别

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’: ‘谷爱凌’}]}]

2.关系抽取

schema = {‘竞赛名称’: [‘主办方’, ‘承办方’, ‘已举办次数’]} # Define the schema for relation extraction>>> ie.set_schema(schema) # Reset schema>>> pprint(ie(‘2022语言与智能技术竞赛由中国中文信息学会和中国计算机学会联合主办,百度公司、中国中文信息学会评测工作委员会和中国计算机学会自然语言处理专委会承办,已连续举办4届,成为全球最热门的中文NLP赛事之一。’))
[{‘竞赛名称’: [{‘end’: 13,
‘probability’: 0.7825402622754041,
‘relations’: {‘主办方’: [{‘end’: 22,
‘probability’: 0.8421710521379353,
‘start’: 14,
‘text’: ‘中国中文信息学会’},
{‘end’: 30,
‘probability’: 0.7580801847701935,
‘start’: 23,
‘text’: ‘中国计算机学会’}],
‘已举办次数’: [{‘end’: 82,
‘probability’: 0.4671295049136148,
‘start’: 80,
‘text’: ‘4届’}],
‘承办方’: [{‘end’: 39,
‘probability’: 0.8292706618236352,
‘start’: 35,
‘text’: ‘百度公司’},
{‘end’: 72,
‘probability’: 0.6193477885474685,
‘start’: 56,
‘text’: ‘中国计算机学会自然语言处理专委会’},
{‘end’: 55,
‘probability’: 0.7000497331473241,
‘start’: 40,
‘text’: ‘中国中文信息学会评测工作委员会’}]},
‘start’: 0,
‘text’: ‘2022语言与智能技术竞赛’}]}]

以上的两个任务可以直接利用paddlenlp的Taskflow直接输出结果,这是预训练模型通用的抽取任务,输出效果也不错。Taskflow可理解为paddle为是产业实践研发的任务框架,包含数据的预处理、模型推理、后处理等任务执行所遵循的框架。细分场景中一般需要一定的标注数据进行微调。

3.快速上手(主菜)

项目中代码结构,如果不修改模型,不部署,仅微调的话,仅用到doccano.py、finetune.py、evaluate.py就足够了。
├── utils.py # 数据处理工具
├── model.py # 模型组网脚本
├── doccano.py # 数据标注脚本
├── doccano.md # 数据标注文档
├── finetune.py # 模型微调、压缩脚本
├── evaluate.py # 模型评估脚本
└── README.md

(1)转换数据

将自己的数据直接转化为doccona标注后的数据示例,为什么不直接转换为喂给模型的训练、验证数据,因为官方提供了转换脚本,里面包含正负样例构造、shuffle以及划分训练、验证、测试集,非常方便。

标注数据样例

{"id": 1, "text": "昨天晚上十点加班打车回家58元", "relations": [], "entities": [{"id": 0, "start_offset": 0, "end_offset": 6, "label": "时间"}, {"id": 1, "start_offset": 11, "end_offset": 12, "label": "目的地"}, {"id": 2, "start_offset": 12, "end_offset": 14, "label": "费用"}]}
{"id": 2, "text": "三月三号早上12点46加班,到公司54", "relations": [], "entities": [{"id": 3, "start_offset": 0, "end_offset": 11, "label": "时间"}, {"id": 4, "start_offset": 15, "end_offset": 17, "label": "目的地"}, {"id": 5, "start_offset": 17, "end_offset": 19, "label": "费用"}]}

注:我刚开始纠结该示例任务的schema = [‘出发地’, ‘目的地’, ‘费用’, ‘时间’],有的示例数据没有“目的地”无法定位offset怎么办?
准备标注数据的时候,没有的实体类别项,忽略不记录就行。
因为转换为训练数据集的时候,每个示例是根据类别分别转换的,如第一条数据,会转化为抽取"时间"类别数据,抽取"目的地"类别数据,抽取"费用"类别数据的3条数据,"出发地"类别就不用管。

(2)生成训练数据

经过doccona标注后的数据样例,通过doccona.py进行转换,生成训练集、验证集、测试集,命令如下所示。

python doccano.py \--doccano_file ./data/doccano_ext.json \--save_dir ./data \--splits 0.8 0.1 0.1 

训练数据样例

{"content": "出租车从酒店到公司一共34元时间是10月21日", "result_list": [{"text": "10月21日", "start": 17, "end": 23}], "prompt": "时间"}
{"content": "二零一九年十一月十三日晚上十点三十四分加班打车回家,四十三元", "result_list": [{"text": "家", "start": 24, "end": 25}], "prompt": "目的地"}
{"content": "月五号凌晨0点08分打车回家三十点五元", "result_list": [{"text": "家", "start": 13, "end": 14}], "prompt": "目的地"}

(3)微调训练

因为我有多张显卡,一开始想用多卡并行微调训练,没想到还需要安装一个ncll2,果断放弃,选择单卡也能微调,且速度挺快。总共100多条标注数据,生成训练集600多条数据,10多分钟就训练完了。
注意,我修改的参数,–device gpu:8 指定了特定的gpu,batch_size改为了8,因为显卡内存被别程序占用,8才能跑起来。
微调命令如下所示:

python finetune.py  \--device gpu:8 \--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 8 \--per_device_train_batch_size  8 \--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

参考:
[1].https://mp.weixin.qq.com/s/lL950H9T7UFsJRopuWQ59w
[2].https://github.com/PaddlePaddle/PaddleNLP/blob/develop/model_zoo/uie/README.md#%E6%A8%A1%E5%9E%8B%E5%BE%AE%E8%B0%83

相关文章:

小样本UIE 信息抽取微调快速上手(不含doccona标注)

文章目录 1.安装环境(可略过)2.模型简介(略读)抽取任务输入输出示例:1.实体识别2.关系抽取 3.快速上手(主菜)(1)转换数据标注数据样例 (2)生成训练数据训练数据样例 &…...

Vue项目(购物车)

目录 购物车效果展示: 购物车代码: 购物车效果展示: 此项目添加、修改、删除数据的地方都写了浏览器都会把它存储起来 下次运行项目时会把浏览器数据拿出来并在页面展示 Video_20230816145047 购物车代码: 复制完代码&#xff0…...

23.08.16驱动点灯

#include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include <linux/device.h> #include "head.h"int major; char kbuf[128] {0};//定义指针接收映…...

数据结构——堆

数据结构——堆 堆堆简介堆的分类 二叉堆过程插入操作 删除操作向下调整&#xff1a; 增加某个点的权值实现参考代码&#xff1a;建堆方法一&#xff1a;使用 decreasekey&#xff08;即&#xff0c;向上调整&#xff09;方法二&#xff1a;使用向下调整 应用对顶堆 其他&#…...

重复学习1:NLP

目录 1. 自然语言处理与知识图谱1.1 RNN 循环神经网络初探 2. 吴恩达深度学习 1. 自然语言处理与知识图谱 1.1 RNN 循环神经网络初探 1.1.2 回顾数据维度与神经网络(1) 2. 吴恩达深度学习 P151 1.1 为什么选择序列模型&#xff08;1,2&#xff09; P152 1.2 数学符号(1,)...

做海外游戏推广有哪些条件?

做海外游戏推广需要充分准备和一系列条件的支持。以下是一些关键条件&#xff1a; 市场调研和策略制定&#xff1a;了解目标市场的文化、玩家偏好、竞争格局等是必要的。根据调研结果制定适合的推广策略。 本地化&#xff1a;将游戏内容、界面、语言、货币等进行本地化&#…...

JavaFx基础学习【五】:FXML布局文件使用

目录 前言 一、介绍 二、简单体验 三、FXML标签元素 四、fx属性介绍 五、重写initialize&#xff08;名字需要保持一致&#xff09;方法 六、Scene Builder快速布局 前言 如果你还没有看过前面的文章&#xff0c;可以通过以下链接快速前往学习&#xff1a; JavaFx基础学…...

通过Python爬虫提升网站搜索排名

目录 怎么使用Python爬虫提升排名 1. 抓取竞争对手数据&#xff1a; 2. 关键词研究&#xff1a; 3. 网页内容优化&#xff1a; 4. 内部链接建设&#xff1a; 5. 外部链接建设&#xff1a; 6. 监测和调整&#xff1a; 需要注意哪些方面 1. 合法性和道德性&#xff1a; …...

【博客698】为什么当linux作为router使用时,安装docker后流量转发失败

为什么当linux作为router使用时&#xff0c;安装docker后流量转发失败 场景 当一台linux机器作为其它服务器的router&#xff0c;负责转发流量的时候&#xff0c;让你在linux上安装docker之后&#xff0c;就会出现流量都被drop掉了 原因 没装docker之前&#xff1a; [root~]…...

el-dialog嵌套,修改内层el-dialog样式(自定义样式)

el-dialog嵌套使用时,内层的el-dialog要添加append-to-body属性 给内层的el-dialog添加custom-class属性,添加自定义类名 <el-dialog:visible.sync"dialogVisible"append-to-bodycustom-class"tree-cesium-container"><span>这是一段信息<…...

B树和B+树区别

B树和B树的区别 B树 B树被称为平衡树&#xff0c;在B树中&#xff0c;一个节点可以有两个以上的子节点。B树的高度为log M N。在B树中&#xff0c;数据按照特定的顺序排序&#xff0c;最小值在左侧&#xff0c;最大值在右侧。 B树是一种平衡的多分树&#xff0c;通常我们说m阶…...

intelJ IDEA\PHPStorm \WebStorm\PyCharm 通过ssh连接远程Mysql\Postgresql等数据库

最容易出错的地方是在general面板下的host&#xff0c;不应该填真实的host地址&#xff0c;而应该填localhost或者127.0.0.1 具体操作步骤见下图...

vfuhyuuy

Sublime Text is an awesome text editor. If you’ve never heard of it, you shouldcheck it out right now. I’ve made this tutorial because there’s no installer for the Linux versions of Sublime Text. While that’s not a real problem, I feel there is a clean…...

CSS自学框架之表单

首先我们看一下表单样式&#xff0c;下面共有5张截图 一、CSS代码 /*表单*/fieldset{border: none;margin-bottom: 2em;}fieldset > *{ margin-bottom: 1em }fieldset:last-child{ margin-bottom: 0 }fieldset legend{ margin: 0 0 1em }/* legend标签是CSS中用于定义…...

使用Spring Boot和Redis实现用户IP接口限流的详细指南

系列文章目录 文章目录 系列文章目录前言一、准备工作二、编写限流过滤器三、配置Redis四、测试接口限流总结 前言 在高并发场景下&#xff0c;为了保护系统免受恶意请求的影响&#xff0c;接口限流是一项重要的安全措施。本文将介绍如何使用Spring Boot和Redis来实现用户IP的…...

前端性能优化——包体积压缩插件,打包速度提升插件,提升浏览器响应的速率模式

前端代码优化 –其他的优化可以具体在网上搜索 压缩项目打包后的体积大小、提升打包速度&#xff0c;是前端性能优化中非常重要的环节&#xff0c;结合工作中的实践总结&#xff0c;梳理出一些 常规且有效 的性能优化建议 ue 项目可以通过添加–report命令&#xff1a; "…...

配置vscode

配置vscode 设置相关 网址&#xff1a;https://code.visualstudio.com/ 搜索不要用百度用这个&#xff1a;cn.bing.com 1.安装中文包 Chinese (Simplified) (简体中文) 2.安装 open in browser 3.安装主题 Atom One Dark Theme 4. 安装图标样式 VSCode Great Icons 5.安装 L…...

【Spring】深入理解 Spring 事务及其传播机制

文章目录 一、Spring 事务是什么二、Spring 中事务的实现方法2.1 Spring 编程式事务&#xff08;手动&#xff09;2.1.1 编程式事务的使用演示2.1.2 编程式事务存在的问题 2.2 Spring 声明式事务&#xff08;自动&#xff09;2.2.1 Transactional 作用范围2.2.2 Transactional …...

eclipse常用设置

1、调整编辑页面字体大小 窗口 (Window)- 首选项&#xff08;Preferences&#xff09;- 常规&#xff08;General&#xff09;- 外观 (Appearence)- 颜色与字体 (Colors And Fonts)&#xff0c;在右边的对话框里选择 Java - Java Editor Text Font&#xff0c;点击出现的修改&…...

ajax解析

Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一种用于在不重新加载整个页面的情况下与服务器交换数据的技术。它通过异步的方式发送请求和接收响应&#xff0c;能够实现在后台与服务器进行数据交互&#xff0c;然后更新页面的部分内容&#xff0c;从而提升用…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...