news 2026/10/7 9:51:18

GLiNER2模型训练教程:10行代码微调自己的NER与分类模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GLiNER2模型训练教程:10行代码微调自己的NER与分类模型

GLiNER2模型训练教程:10行代码微调自己的NER与分类模型

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

本教程带你从零开始完成GLiNER2 模型训练:只需约 10 行 Python 代码,即可用你自己的数据微调一个NER(命名实体识别)与文本分类模型。GLiNER2 是一个基于 Schema 的统一信息抽取框架,支持实体抽取、情感分类、结构化数据和关系抽取,全程本地运行、隐私安全。

什么是 GLiNER2?为什么适合新手微调?

传统 NER 模型每加一个实体类型就要重新设计标签体系,而 GLiNER2 采用Schema 驱动的设计:推理时你直接告诉模型"我要找哪些实体",训练时只需准备简单的 JSONL 数据。

它有几个对新手特别友好的特点:

  • 🎯一套模型多种任务:NER、文本分类、JSON 结构化抽取、关系抽取共用同一个模型
  • 💻CPU 友好:推理不需要 GPU,普通笔记本就能跑
  • 📦预训练模型丰富:可以直接加载公开检查点再微调,冷启动只需几百条数据
  • 🛡️100% 本地处理:数据不出内网,适合隐私敏感场景

💡 想先看效果?可以先阅读 tutorial/2-ner.md 了解 NER 用法,再回来训练。

环境安装:一条命令完成配置

GLiNER2 要求Python 3.10+。训练功能需要安装带train扩展的版本:

pip install "gliner2[train]"

安装完成后,核心入口是AutoExtractor(加载模型)和ExtractorTrainer(训练器),源码分别位于 gliner2/training/trainer.py 与 gliner2/training/data.py。

第一步:准备 NER 训练数据(JSONL 格式)

GLiNER2 训练数据是 JSONL 文件,每行一条input+output。NER 数据只需要一个entities字典:实体类型 → 文本中的实体提及列表。

{"input": "John works at Google in California.", "output": {"entities": {"person": ["John"], "company": ["Google"], "location": ["California"]}}} {"input": "Apple released iPhone 15.", "output": {"entities": {"company": ["Apple"], "product": ["iPhone 15"]}}}

分类任务则用classifications字段,格式参考 tutorial/8-train_data.md 中的完整示例。

新手提示:

  1. 实体文本必须精确出现在input原文中(区分大小写),否则校验会报错
  2. 建议同时标注 10%~20% 的验证集数据,用于监控训练效果
  3. 数据不足 500 条时,建议启用 LoRA(见下文进阶章节)

第二步:10 行代码启动 GLiNER2 微调

下面是最小的完整训练流程——加载预训练模型、配置超参数、开始训练:

from gliner2 import AutoExtractor from gliner2.training.trainer import ExtractorTrainer, TrainingConfig # 1. 加载预训练基座模型(span 架构) model = AutoExtractor.from_pretrained("fastino/gliner2-base-v1") # 2. 配置训练参数 config = TrainingConfig( output_dir="./ner_model", num_epochs=10, batch_size=8, encoder_lr=1e-5, task_lr=5e-4 ) # 3. 开始训练:直接传入 JSONL 文件 trainer = ExtractorTrainer(model, config) trainer.train(train_data="train.jsonl")

训练器会在验证时自动保存检查点,最优模型保存在./ner_model/best目录(save_best=True时)。完整参数说明见 tutorial/9-training.md。

第三步:加载训练好的模型并测试

训练完成后,用两行代码加载并使用你的 NER 模型:

from gliner2 import AutoExtractor model = AutoExtractor.from_pretrained("./ner_model/best") result = model.extract_entities( "Tim Cook is the CEO of Apple in Cupertino.", ["person", "company", "location"] ) # {'entities': {'person': ['Tim Cook'], 'company': ['Apple'], 'location': ['Cupertino']}}

分类微调怎么做?

分类任务的训练方式完全相同,区别只在数据格式。比如训练一个情感分类模型:

{"input": "This laptop has amazing performance!", "output": {"classifications": [{"task": "sentiment", "labels": ["positive", "negative", "neutral"], "true_label": "positive"}]}}

推理时改用classify_text方法:

result = model.classify_text("Battery life is terrible.", {"sentiment": ["positive", "negative", "neutral"]}) # {'sentiment': 'negative'}

甚至可以在一次训练中混合 NER + 分类 + 关系抽取(多任务训练),让一个模型同时学会所有技能,详见 tutorial/1-classification.md。

进阶:LoRA 高效微调与常见问题排查

显存不够?用 LoRA 只训练 1% 的参数

LoRA(低秩适配)冻结基座模型,只训练少量适配参数,显存占用降低 10~100 倍,且训练出的适配器文件仅 2~10 MB:

config = TrainingConfig( output_dir="./lora_output", num_epochs=10, use_lora=True, # 开启 LoRA lora_r=16, # 秩,常见 8/16/32 lora_alpha=32, # 缩放因子,通常取 2*r task_lr=5e-4 )

更实用的玩法是一个基座模型 + 多个领域适配器(法律、医疗、金融各一个),毫秒级热切换,详见 tutorial/10-lora_adapters.md。

常见问题快速排查

症状解决方案
显存溢出 (OOM)减小batch_size、开启fp16=True、加gradient_accumulation_steps或改用 LoRA
模型不收敛检查学习率(encoder 1e-5 / task 5e-4 起步),增加num_epochs,确认数据已校验
校验报错最常见是实体文本与原文不匹配,用dataset.validate()定位具体行
训练速度慢增大batch_size、启用fp16、降低评估频率eval_steps

总结与延伸阅读

到这里,你已经掌握了 GLiNER2 模型训练的完整闭环:准备 JSONL 数据 → 10 行代码微调 → 加载测试 → LoRA 优化。几个建议帮你走得更远:

  1. 先用max_train_samples=100跑通全流程,再上全量数据
  2. 生产训练务必开启eval_strategy="steps"+save_best=True+ 早停
  3. 领域适配(如医疗 NER)建议降低encoder_lr到5e-6防止过拟合

更多训练技巧可参考项目内置文档:

  • 训练完整指南:tutorial/9-training.md
  • 数据格式详解:tutorial/8-train_data.md
  • LoRA 适配器实战:tutorial/10-lora_adapters.md
  • 训练器源码:gliner2/training/trainer.py

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

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

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

游戏引擎架构核心拆解:分层、Game Loop、数据驱动与多线程

聊游戏引擎架构,很多人一上来就扑向源码,打开Unreal或者Unity的仓库,准备从FEngineLoop或者PlayerLoop一行行啃。但说句实在话,如果你脑子里没有一张架构地图,源码读得越多,越容易被细节拉着走,…

作者头像 李华
网站建设 2026/10/7 9:49:27

Unity Shader Graph风格化水面特效复刻:塞尔达风之杖卡通渲染全解析

最近在准备一个卡通渲染风格的原型项目,其中水面是最难啃的一块。翻了很多资料后发现,网上关于风格化水面的内容要么只讲原理不给操作,要么直接丢一个写好的 Shader 让你复制,完全没讲透为什么这么连节点。本文就以《塞尔达传说&a…

作者头像 李华
网站建设 2026/10/7 9:48:26

K375S优联无线化改造:机械键盘协议级无线重构指南

/* 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 9:48:08

DouK-Downloader 抖音批量下载工具完整指南:从 Cookie 配置到直播录制

DouK-Downloader 抖音批量下载工具完整指南:从 Cookie 配置到直播录制 【免费下载链接】TikTokDownloader 抖音 / TikTok 平台作品下载/数据采集工具 项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader 想把某个创作者的几百条作品完整存到…

作者头像 李华
网站建设 2026/10/7 9:47:39

基于Spring Boot和Vue的航班分析管理平台源码解析与实战

简介:这套天津滨海机场航班分析及管理平台源码,基于Java后端与Vue等前端技术整合开发,面向机场运营管理场景,可支撑航班数据实时分析、状态动态展示及高效管理,适合希望掌握前后端分离项目实战的开发者研读。压缩包共1…

作者头像 李华