news 2026/10/7 11:53:13

GLiNER2多任务Schema实战:一次前向传播同时完成5类抽取任务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GLiNER2多任务Schema实战:一次前向传播同时完成5类抽取任务

GLiNER2多任务Schema实战:一次前向传播同时完成5类抽取任务

【免费下载链接】GLiNER2Unified Schema-Based Information Extraction项目地址: https://gitcode.com/gh_mirrors/gl/GLiNER2

GLiNER2 是一个 Schema 驱动的统一信息抽取框架,能在一次前向传播中同时完成实体抽取、文本分类、结构化记录、关系抽取与片段属性标注 5 类任务。传统做法要为每类任务部署一个模型、跑一遍管线,而 GLiNER2 只需用一个 Schema 声明所有任务,调用一次extract()即可拿到全部结果,推理成本几乎不随任务数增加,且支持纯 CPU 本地运行。

为什么需要"一次前向传播"做多任务?

常见的信息抽取管线通常这样工作:

  1. 跑一遍 NER 模型抽实体
  2. 跑一遍分类模型判情感
  3. 跑一遍 JSON 抽取模型解析字段
  4. ……再跑一遍关系抽取

每一遍都要把文本重新编码一次,模型越多,延迟越高、维护成本越大。

GLiNER2 的思路是Schema 条件化(schema-conditioned):所有任务共用同一个 DeBERTa-v3 编码器,任务类型(实体、标签、字段、关系)被编码为查询条件注入同一次前向传播。换句话说,5 个任务共享同一次文本编码,这就是"一次前向传播"的含义。

5 类任务一览

任务Schema 方法典型场景
实体抽取.entities()人名、公司、产品、日期
文本分类.classification()情感、意图、文档类型(支持多标签)
结构化抽取.structure()发票字段、订单信息、病历条目
关系抽取.relations()"A 就职于 B"这类头尾实体对
片段属性.entity_attributes()给抽出的产品片段单独标注情感

上图展示了配合 GLiNER2 使用的微调与部署界面:上传训练数据、选择模型、一键训练后即可在本地或服务端推理。

快速上手:3 步完成多任务抽取

安装带本地推理的完整包(需 Python 3.10+):

pip install gliner2[local]

第 1 步:加载模型。AutoExtractor会根据检查点自动选择 span(GLiNER2)或 boundary(GLiNER2.5)架构:

from gliner2 import AutoExtractor, AttributeGroup extractor = AutoExtractor.from_pretrained("fastino/gliner2.5-base-v1")

第 2 步:用一个 Schema 声明全部 5 类任务。链式调用即可,详见 tutorial/4-combined.md:

schema = ( extractor.create_schema() # ① 文本分类 .classification("sentiment", ["positive", "negative", "neutral"]) # ② 实体抽取 .entities(["person", "product", "company"]) # ③ 片段属性:只给 product 标注情感 .entity_attributes({ "span_sentiment": AttributeGroup( ["positive", "negative", "neutral"], applies_to=["product"], qualify_labels=True, ) }) # ④ 关系抽取 .relations(["works_for"]) # ⑤ 结构化抽取 .structure("order_info") .field("order_number", dtype="str") .field("amount", dtype="str") .field("status", dtype="str", choices=["pending", "shipped", "delivered"]) )

第 3 步:一次调用,全部返回。

text = ("Tim Cook works for Apple. I ordered an iPhone for $999, " "status is shipped. Great camera, disappointing battery.") result = extractor.extract( text, schema, include_confidence=True, # 每个结果带置信度 include_spans=True, # 每个片段带 [start, end) 字符位置 )

返回是一个字典,5 类任务的结果并列其中:sentiment给出文档级情感,entities按类型分组,span_sentiment挂在对应 product 片段上,relation_extraction给出 works_for 的头尾对,order_info给出结构化的字段值。

3 个实用技巧

1. 用描述提升抽取精度

实体类型可以写成{类型名: 描述}的形式,描述会被编码进 Schema 查询,显著提升歧义场景的准确率。例如把"medication": "药品或药物名称"作为实体定义,比裸词"medication"更稳。

2. 片段属性 ≠ 文档分类

一篇评测可以整体"中性",但其中 iPhone 摄像头是"正面"、电池是"负面"。文档级情感用.classification(),片段级情感用.entity_attributes(),两者可以共存于同一个 Schema。更多细节见 tutorial/13-span_attributes.md。

3. 长文档与批量处理

文本超过模型窗口时,用extract_long()/batch_extract_long(),它会自动按重叠分块、把片段位置映射回原文并合并重叠区的重复结果。多个文档则用batch_extract(),还可以为每条文档指定不同的 Schema。

进阶:需要全局一致的关系图时用 JointIE

上面第 ④ 类的关系抽取是"独立解码"——关系和实体分别打分,无法保证works_for的头一定是 person、尾一定是 organization,也无法限制"每个人最多一个雇主"。

如果这类约束对业务很重要,升级到JointIE:它在候选分数之上做带约束的图搜索,保证整张关系图全局满足你声明的类型端点、唯一性、无自环、无环等硬约束。完整用法见 tutorial/15-joint_ie.md。

相关文档与源码

  • 多任务组合详解(含发票、医疗、法律等完整 Schema 示例):tutorial/4-combined.md
  • 片段属性教程:tutorial/13-span_attributes.md
  • 联合信息抽取(带约束关系图):tutorial/15-joint_ie.md
  • 训练数据格式与微调教程:tutorial/8-train_data.md、tutorial/9-training.md
  • Schema 构建器源码:gliner2/inference/schema.py
  • 抽取运行时(extract/extract_long实现):gliner2/inference/runtime.py

小结

你的需求推荐做法
多种抽取任务并行、省延迟一个组合 Schema +extract()
只抽实体/只分类直接用extract_entities()/classify_text()简写 API
关系必须满足类型与数量约束JointIE+ 约束 Schema
中文等无空格语言加载时指定word_splitter="char"
隐私敏感场景本地 CPU 推理,零外部依赖

GLiNER2 把"多个模型、多次编码"压缩成"一个 Schema、一次前向传播",是构建统一信息抽取管线的高效选择。

【免费下载链接】GLiNER2Unified Schema-Based Information Extraction项目地址: https://gitcode.com/gh_mirrors/gl/GLiNER2

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 11:53:13

动态规划01背包:一维DP倒序与循环顺序详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/7 11:52:40

医院挂号系统前后端分离实战:SpringBoot+Vue+MyBatis

前后端分离、SpringBoot、Vue、MyBatis、MySQL,这几个词放一起,就是现在做管理系统类项目最标准的一套组合拳。这套医院挂号就诊系统,我在本地跑通过很多次,也给不少卡在环境或者联调环节的同学排查过问题。归纳下来你会发现&…

作者头像 李华
网站建设 2026/10/7 11:52:23

BIOS刷坏了别急着丢:黑屏、卡Logo、无限重启的识别与自救

1. 刷坏之后机器会怎么表现:按"死法"分类先说一句可能让很多人安心的话:绝大多数BIOS刷坏,不是芯片烧了,而是芯片里的固件内容写坏了。芯片本身还活着,只是里面那份"开机说明书"残缺不全&#xff…

作者头像 李华
网站建设 2026/10/7 11:51:40

算控一体与国产自研:运动控制、视觉算法与实时内核融合方案解析

1. 项目背景:算控一体与国产自研,为什么这件事值得聊提到“算控一体”,很多朋友第一反应是“这又是个新造的词”。但如果你这几年一直在做工业自动化、边缘计算或者机器视觉相关的项目,大概率已经感受到了一个明显的趋势&#xff…

作者头像 李华
网站建设 2026/10/7 11:51:33

Tableau与Superset选型实战:5年踩坑总结与决策矩阵

先说结论:Tableau 和 Superset 的对比,根本不是“谁更强”的问题,而是“你的团队和业务长什么样”的问题。5 年下来我在两家公司分别深度用过这两个工具,结论非常明确——Tableau 是那个在你预算充足、需求复杂、团队有人愿意花时…

作者头像 李华
网站建设 2026/10/7 11:51:02

Buck电路MOS管发热元凶:米勒效应原理与实测波形分析

Buck电路MOS管发热严重?可能是米勒效应在作怪(附实测波形分析)做电源设计的人,十有八九都遇到过这个场景:Buck电路功能正常,输出纹波也在指标范围内,但一摸MOS管,烫得能点烟。明明算…

作者头像 李华