- 人工智能
- NLP
- 大模型
【免费下载链接】gliformer-large-v1
GLiFormer Large v1 是一个 575.6M 参数的统一文本信息抽取模型:它共享同一个 DeBERTa 编码器,并在推理时通过传入任务标签和**抽取 Schema(schema)**即可完成命名实体识别、文本分类、关系抽取和结构化记录抽取,无需为每个任务单独微调。本文面向新手,讲清楚抽取 Schema 应该怎么设计,以及在推理时如何指定任务。📌
为什么"推理时指定任务"很重要
传统做法是每个 NLP 任务训练一个专用模型,维护成本很高。GLiFormer Large v1 的思路是:一个模型 + 任意任务标签——模型在 README.md 中被描述为"One encoder for PDF layout processing, entity recognition, classification, relation extraction, structured records, and text embeddings"。
| 任务类型 | 调用方法 | 推理时需要你提供什么 |
|---|---|---|
| 命名实体识别(NER) | predict_entities | 实体类型列表,如["person", "organization"] |
| 文本分类 | classify | 类别标签列表,或分组字典 |
| 联合关系抽取 | inference(joint_relations=...) | 实体类型 + 关系类型一起传入 |
| 结构化抽取 | structure | 字典或嵌套 Pydantic Schema |
| 文本向量 | embed_text | 无需标签,直接输出 1024 维向量 |
一句话理解:Schema 就是你在推理时告诉模型"要从文本里挖出什么结构"的说明书。说明书写得越清晰,抽取得越准。
快速安装与加载模型
先安装官方推理框架(需要 Python 3.10+):
pip install gliformer -U然后加载本仓库的模型权重:
import torch from gliformer import GLiFormer model = GLiFormer.from_pretrained( "knowledgator/gliformer-large-v1", load_tokenizer=True, ) model = model.to("cuda" if torch.cuda.is_available() else "cpu").eval()📌 如果你把模型下载到本地,只需把模型 ID 换成本地 checkpoint 目录路径即可,代码完全不用改。
抽取 Schema 设计的 5 个核心技巧
1️⃣ 实体类型:短小、互斥、小写
NER 任务中,Schema 就是一个实体类型字符串列表。建议每个类型名简短且含义互斥,例如:
entities = model.predict_entities( "Alice works at Acme in London.", ["person", "organization", "location"], threshold=0.5, )每个结果包含text、label、start、end、score五个字段,偏移量是字符位置,end不含边界。💡技巧:类型名用业务里最常用的英文词(如person而非human_name_full),过长的类型名会稀释注意力。
2️⃣ 分类标签:覆盖全部可能性
分类任务的 Schema 是候选标签列表,建议"能枚举就枚举、尽量互斥":
predictions = model.classify( "The new search feature is fast and easy to use.", ["positive", "negative", "neutral"], threshold=0.5, )它还支持分组标签,一次判断多个维度,例如:
{"sentiment": ["positive", "negative"], "topic": ["product", "support"]}3️⃣ 关系抽取:实体和关系必须"成对"传入
联合关系抽取(joint relation extraction)需要把实体类型 + 关系类型放在同一个字典里,模型才能理解"谁和谁之间是什么关系":
results = model.inference( "Alice works at Acme.", joint_relations={ "employment": { "entities": ["person", "organization"], "relations": ["works_at"], } }, threshold=0.5, )⚠️ 注意:本 checkpoint 没有开放关系(open relation)头,所以请用inference+joint_relations,而不是predict_relations便捷方法。
4️⃣ 结构化 Schema:扁平用字典,多级用 Pydantic
结构化抽取可以直接把文本"灌"进你定义的结构里。最简单的 Schema 是一个字典——外层 key 是记录名,value 是字段列表:
records = model.structure( "Alice works at Acme.", {"employee": ["name", "company"]}, ) # {'employee': [{'name': 'Alice', 'company': 'Acme'}]}需要多级嵌套时,用 Pydantic 模型描述"父-子"层级,并开启validate_output=True做结构校验:
from pydantic import BaseModel class Employee(BaseModel): name: str role: str class Department(BaseModel): name: str employees: list[Employee] records = model.structure(text, {"department": Department}, validate_output=True)💡技巧:字段名(如name、company)尽量与原文用词贴近,字段越少、越扁平,抽取越稳;深层嵌套会放大误差传递。
5️⃣ 用好threshold和批量参数
threshold(默认示例 0.5)控制置信度过滤:结果偏多就调高,偏少就调低;- 传入文本列表 +
batch_size=8可批量抽取,提升吞吐; - 预测结果受Schema 措辞、领域、输入长度、阈值共同影响,同一句话换一组标签,结果可能不同——这属于正常行为,不是 bug。
一次调用跑多个任务:Schema 组合示例
inference方法可以把多种任务 Schema 合并到一次前向里,返回字典按任务分组,每组对应每个输入一条结果:
results = model.inference( "Alice joined Acme as a software engineer.", entities=["person", "organization"], classes=["business", "sports", "technology"], structures={"employee": ["name", "company"]}, ) print(results["ner"][0]) print(results["classification"][0]) print(results["structuring"][0])仓库文件速览:Schema 与任务的边界在哪里
本仓库是一个标准的 Hugging Face checkpoint 目录,核心文件如下:
| 文件 | 作用 |
|---|---|
| pytorch_model.bin | 模型权重,约 2.3 GB(Git LFS 管理) |
| gliner_config.json | 模型结构配置:deberta_2d骨干 + 各任务头(NER、分类、联合关系、结构化、embedding) |
| tokenizer.json / tokenizer_config.json | 分词器词表与配置 |
| trainer_state.json | 训练状态:3000 步,loss 从 0.276 降至 0.138 |
| README.md | 完整用法、评估指标与限制说明 |
几个值得留意的配置项(来自 gliner_config.json):
max_types: 128:单次推理最多可指定 128 个标签类型;max_len: 16384:最大输入长度;max_width: 12、max_count: 20:约束 span 宽度与记录数量,属于官方在 README.md 中提到的"固定记录锚点与 span 宽度限制抽取容量"的边界。
📌 另外,配置文件叫gliner_config.json是历史命名(GLiFormer 框架早期从 GLiNER 演化而来),并不是说这是 GLiNER 模型。
常见问题(FAQ)
Q:为什么我换了一组实体类型,结果差别很大?A:Schema 措辞直接影响预测。模型是按"你给的标签"去找对应 span 的,建议用简洁、领域通用的英文标签,并通过调整threshold校准召回/精度。
Q:关系抽取为什么不能用predict_relations?A:本 checkpoint 没有开放关系头,只有联合关系头,所以要用inference的joint_relations参数(详见 README.md)。
Q:validate_output=True能保证内容正确吗?A:不能。它只校验输出结构是否符合 Pydantic Schema,不校验事实正确性;模型仍可能漏抽、选错 span 或把记录挂到错误的父节点下。
Q:其他语言支持如何?A:已公布的评估结果覆盖的是英文任务;其他语言、文档版面输入和 embedding 基准的效果未被现有结果背书,建议先小样本验证。
小结:Schema 设计清单 ✅
- 标签名短、小写、互斥,贴近原文用词;
- 分类标签尽量枚举完整,可用分组字典做多维分类;
- 关系抽取把实体与关系成对传入
joint_relations; - 结构化 Schema先扁平后嵌套,必要时用 Pydantic +
validate_output; - 用
threshold与batch_size平衡精度、召回与吞吐。
掌握"推理时指定 Schema"这一思路后,同一个 GLiFormer Large v1 模型就能覆盖你业务里大部分轻量级信息抽取需求——先跑通一个任务,再逐步组合多任务,是最上手的路线。
- 人工智能
- NLP
- 大模型
【免费下载链接】gliformer-large-v1
相关推荐
如何抽取实体间的关系?GLiFormer Large v1 联合关系抽取实战教程
如何抽取实体间的关系?GLiFormer Large v1 联合关系抽取实战教程 GLiFormer Large v1 是面向信息抽取的多任务大模型,支持联合关
人工智能NLP大模型InfoSpider定时任务:设置自动爬取的Windows/Linux计划任务
InfoSpider定时任务:设置自动爬取的Windows/Linux计划任务 痛点与解决方案 你是否还在每天手动运行InfoSpider获取数据?面对24+个
网页爬虫数据分析数据可视化桌面应用扩展 less.php 编译能力:自定义函数 registerFunction 开发教程
扩展 less.php 编译能力:自定义函数 registerFunction 开发教程 基于对项目源码( lib/Less/Parser.php 、 lib/
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考