【免费下载链接】fast-decisions
fast-decisions 是专为 GLiNER2.5-Decide 打造的分类决策数据集:17 个业务域、每域一个 JSONL 文件、共 1,700 条样本。每一行都是"自由文本 + 候选标签 + 金标答案",一行文本可以携带多个决策头(task head)。本教程从加载数据开始,带你完整走通调用 GLiNER2.5-Decide 做分类推理的全流程,并重点讲清一条核心纪律——候选标签必须原样传入。
1. 认识数据集:17 个业务域,每域一个文件
📦 fast-decisions 不是通用推理考题,而是一组产品必须做的操作性分类决策:客户意图、银行意图、邮件分诊、工单路由、诊所未决、评论情感、文档类型等。
- 输入:
input字段,纯自由文本(带[channel]、[body]等上下文前缀) - 输出:
output.classifications,一个"决策头"列表,一行可以包含多个头 - 候选标签:每个头的
labels字段,即完整候选集;true_label是金标答案,永远是字符串列表(单标签头也是单元素列表)
| 关键信息 | 内容 |
|---|---|
| 域数量 | 17 个开发域,每域 100 条,共 1,700 行 |
| 文件格式 | JSONL,每行一个样本 |
| 评测口径 | 官方测试集(每域 300 条)已保留(held out),本仓库文件仅用于开发 |
| 许可证 | Apache 2.0 |
每个决策头有哪些候选标签,完整清单见 README.md 的 "Task heads and label sets" 一节。
2. 一步加载数据:用 datasets 库
2.1 加载单个域
from datasets import load_dataset ds = load_dataset("fastino/fast-decisions", "support_intent", split="train")2.2 加载全部 17 个域
from datasets import load_dataset, concatenate_datasets domains = ["support_intent", "support_topic", "document_type", "review_sentiment", "agent_handoff", "email_triage", "ticket_route", "product_feedback", "banking_intent", "clinic_request", "travel_request", "news_topic", "paper_field", "sports_recap", "restaurant_review", "benefits_request", "screen_tags"] all_ds = concatenate_datasets([ load_dataset("fastino/fast-decisions", name, split="train") for name in domains ])config 名与文件名一一对应:support_intent对应 support_intent.jsonl,product_feedback对应 product_feedback.jsonl 等。每个文件的第一行就是一个完整样本,可直接在仓库中浏览,例如 email_triage.jsonl(一行邮件要同时做出 4 个决策)。
2.3 想本地浏览数据?clone 仓库即可
git clone https://gitcode.com/hf_mirrors/fastino/fast-decisions3. 调用 GLiNER2.5-Decide 做分类推理
3.1 加载模型
from gliner2 import AutoExtractor model = AutoExtractor.from_pretrained("fastino/GLiNER2.5-Decide")处理英文文本用fastino/GLiNER2.5-Decide;非英文文本请改用多语言版GLiNER2.5-multi-Decide,加载方式完全一致(见 README.md)。
3.2 核心调用:classify_text
签名非常简单——第一个参数是文本,第二个参数是"任务名 → 候选标签"的字典:
row = ds[0] head = row["output"]["classifications"][0] pred = model.classify_text(row["input"], {head["task"]: head["labels"]}) print(pred[head["task"]])3.3 核心纪律:候选标签原样传入
⚠️labels是该决策头的完整候选集,调用时务必原样透传,这是本数据集最重要的使用约定(README.md 明确要求 "pass it to your model as-is"):
- 不要从候选集里剔除金标——那等于泄漏答案,评测分数会虚高;
- 不要随意增删、改序或"精简"候选集——模型就是在这套集合上训练和评测的;
- 不要跨头混用候选集——一行可能有多个头,每个头有各自的
labels,字典的 key 必须与task名严格对应; - 推理时不要自行替换成你业务里的标签,除非你已自行微调。
单标签头返回一个字符串,多标签头返回列表。例如 product_feedback.jsonl 中的product_area头标记了multi_label: true,金标答案可以是多个产品区域的列表。
4. 精确匹配评测:跑官方评测循环
官方口径是精确匹配(exact match):预测集合与金标集合逐一比对,单标签头按字符串、多标签头按列表,统一转成排序集合后比较。完整评测循环如下:
hits = total = 0 for row in ds: for head in row["output"]["classifications"]: pred = model.classify_text(row["input"], {head["task"]: head["labels"]}) got = pred[head["task"]] if isinstance(got, str): got = [got] elif isinstance(got, dict): got = [got["label"]] hits += sorted(got) == sorted(head["true_label"]) total += 1 print(hits / total)这正是 README.md 给出的评测代码,可原样复制到任何域的数据集上运行。
5. 分类推理的 3 个常见坑
- 有序标签是字符串数字:0–5、0–10 这类有序头用
"3"而不是整数3,不要自行做类型转换。 true_label永远是列表:单标签头也是["refund_request"],比较时先归一成列表,别直接写==字符串。- 本仓库的分数不能当基准:仓库内是开发集(每域 100 条),官方测试集(每域 300 条)被保留。不要把在本仓库文件上跑出的分数作为 benchmark 对外报告(README.md 特别强调)。参考:GLiNER2.5-Decide 在保留测试集上的平均精确匹配为 60.2%,位列参评模型第一,详见 README.md。
6. 常见问题(FAQ)
Q:一行有多个决策头,怎么推理?A:按评测循环的方式逐个头处理——遍历row["output"]["classifications"],为每个头用各自的task名和labels构造字典后调用classify_text。
Q:某头的候选标签全集在哪里查?A:README.md 列出了全部 17 个域、每个头的完整标签集,推理时直接使用这些字符串作为候选集。
Q:数据可以用来微调吗?A:可以。本仓库提供的是开发集(dev split),适合开发与调优;项目方提供 Fastino 平台来微调和部署 GLiNER2.5,多语言场景可关注GLiNER2.5-multi-Decide。
Q:多标签头和单标签头的返回有什么不同?A:单标签头返回字符串(如refund_request),多标签头返回列表(如["kids", "drama"],见 screen_tags.jsonl)。评测时统一按集合精确匹配。
【免费下载链接】fast-decisions
相关推荐
开发者指南:用fast-decisions微调GLiNER2.5并部署上线的完整流程
开发者指南:用fast decisions微调GLiNER2.5并部署上线的完整流程 fast decisions 是专为 GLiNER2.5 微调 打造的开源
cls_threshold 一调就灵?GLiNER2.5-Decide 多标签分类的精度/召回跷跷板
cls_threshold 一调就灵?GLiNER2.5 Decide 多标签分类的精度/召回跷跷板 在多标签分类任务里,GLiNER2.5 Decide(34
人工智能大模型NLP如何用 jevos 做零样本文本分类:一段文本路由到多个标签的完整教程
如何用 jevos 做零样本文本分类:一段文本路由到多个标签的完整教程 jevOS(开源项目 jev)是一个能在笔记本 CPU 上运行的本地 LLM 决策引擎:
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考