如何用Bespoke-Nimble-9B实现高准确率布尔分类:从提示构建到概率输出全解
【免费下载链接】Bespoke-Nimble-9B项目地址: https://ai.gitcode.com/hf_mirrors/bespokelabs/Bespoke-Nimble-9B
Bespoke-Nimble-9B 是一个基于 Qwen3.5-9B 的布尔分类 LoRA 适配器:它不生成推理文本,而是直接对候选答案词元打分,一次输出"是/否"结论与对应的概率分布,在 324 条未见过的评测样本上,布尔分类准确率达到 98.2%。本文面向新手,带你从下载、加载,到提示构建、概率输出解读,完整跑通这套高准确率布尔分类流程。
为什么布尔分类需要"概率输出"?
普通大模型回答"是/否"问题时,往往输出一段自由文本,程序还得二次解析,也无法衡量置信度。Bespoke-Nimble-9B 的思路完全不同:
- 答案空间被限定为少数候选词元——布尔问题就是
false与true两个; - 模型只计算这些候选词元在答案边界处的 logits,再做 softmax;
- 概率最高者即为预测,同时完整返回各候选的概率分布。
好处是:结果稳定、可被程序直接消费,概率值本身还能用于置信度过滤和风险分级。核心评分逻辑见 inference.py 中的candidate_logits与decision_result函数。
三步上手:下载、安装与加载模型
第一步:获取模型文件
git clone https://gitcode.com/hf_mirrors/bespokelabs/Bespoke-Nimble-9B nimble-model仓库内的 adapter_model.safetensors 约 165 MiB,是 LoRA 适配器权重;另外还需要 Qwen3.5-9B 基座模型(仓库不重复存放完整基座权重)。
第二步:安装依赖
依赖在 requirements.txt 中固定了版本(PyTorch 2.8.0、transformers 5.17.0、peft 0.21.0 等),请安装支持 CUDA 12.8 的 PyTorch 版本:
pip install -r nimble-model/requirements.txt⚠️ 参考运行器要求CUDA GPU + BF16支持,加载时会强制检查,不满足直接报错(见 inference.py)。
第三步:加载并打分
NimbleModel封装了"加载 + 提示构建 + 概率计算"全过程(inference.py):
import sys sys.path.insert(0, "nimble-model") from inference import NimbleModel model = NimbleModel("nimble-model") result = model.score( context="The store accepts returns within 30 days. This item was bought 12 days ago.", schema={ "eligible": { "type": "boolean", "description": "Is this item within the store return window?" } }, ) print(result["output"]) # {'eligible': True} print(result["fields"]["eligible"]["probabilities"]) # false/true 两个概率注意:加载时会校验提示构建代码的 SHA256 指纹,确保运行环境与训练时完全一致(inference.py),无需trust_remote_code。
提示构建全解:Schema 如何变成单字母答案
布尔字段 Schema 怎么写
一个布尔字段只需type: "boolean"加一段description,模型会在 false 与 true 之间二选一。选项型(enum)与评分字段(如["0", "1", "2"])的写法见 README.md。
提示为什么只要求输出一个字母
prepare_prompts会把你的 context 与 schema 渲染成 JSON 交给模型,并给每个选项分配单字母代号(A、B、C…,每个字段最多 26 个选项);布尔字段中 A 对应 false,B 对应 true。系统提示明确要求"只返回所选字母代号,不输出任何推理或解释"(parallel_schema.py)。
这种"单字母答案"设计有两道护栏,均在 parallel_schema.py 中强制执行:
- 长度护栏:提示超过 2048 个词元直接报错,绝不静默截断(上限与任务契约见 schema_config.json);
- 词元护栏:每个字母代号必须在答案边界处恰好编码为 1 个普通词元且互不重复,否则报错退出——这保证了 logits 与选项严格一一对应。
概率输出全解:true/false 概率怎么读
score()返回两部分:
output:每个字段的最终预测(布尔字段为True/False);fields.<字段名>.probabilities:各候选选项的 softmax 概率,总和为 1。
对布尔字段,probabilities固定包含false与true两项,代码中还会单独给出probability_true(inference.py)。拿到概率后你可以:
- 直接消费预测值,写入下游业务系统;
- 用概率做置信度门槛,例如
true概率低于 0.9 时转人工复核; - 借助评测集中的 NLL / Brier 分数理解校准度——Brier 越低,概率输出越可信。
实测数据:布尔分类准确率为什么能到 98.2%
官方在 324 条未见过的评测样本上做了三方对比(完整数据见 evaluation_summary.json):
| 模型 | 布尔分类准确率 | 总体准确率 |
|---|---|---|
| 未微调基座(Fresh 9B) | 83.3% | 66.0% |
| 上一代 9B 适配器 | 95.6% | 84.0% |
| 本仓库适配器 | 98.2% | 90.1% |
在另外新增的 224 条样本上,布尔分类更是 80/80 全对 ✅。支撑这一结果的是约 2676 行、覆盖 34 个业务家族的训练数据(training_summary.json),采用 LoRA rank 16、学习率 5e-5、BF16 精度训练,具体参数可查 adapter_config.json 与 schema_config.json。
新手常见问题
问:仓库里为什么只有 165 MiB 的适配器?答:这是 LoRA 微调的权重增量,需配合 Qwen3.5-9B 基座使用;provenance.json 与 SHA256SUMS 提供了逐文件校验和,方便验证完整性。
问:提示超过 2048 个词元会怎样?答:直接抛出错误拒绝处理,不会静默截断——保证输入分布与训练完全一致。
问:能输出解释或推理过程吗?答:不能,也不应。该工作流被刻意设计为"只打分的分类器",推理文本会破坏概率口径。
问:License 允许商用吗?答:适配器采用 Apache 2.0 许可(LICENSE),可自由商用;同时请注意基座模型自身的许可条款。
关键文件导航
| 文件 | 说明 |
|---|---|
| README.md | 官方使用文档与加载示例 |
| inference.py | 参考推理代码(NimbleModel 打分器) |
| parallel_schema.py | 提示构建与 Schema 校验逻辑 |
| schema_config.json | 任务契约:基座版本、提示指纹、长度上限 |
| training_summary.json | 训练超参与数据来源 |
| evaluation_summary.json | 三组模型评测对比 |
| adapter_config.json | LoRA 参数(rank 16、alpha 32) |
| chat_template.jinja / tokenizer.json | 对话模板与分词器 |
一句话总结:把"是/否"问题交给 Bespoke-Nimble-9B,你拿到的不只是答案,还有一份可直接用于置信度判断的概率分布——这正是它在自动化审核、规则校验等场景里高准确率且可落地的原因。
【免费下载链接】Bespoke-Nimble-9B项目地址: https://ai.gitcode.com/hf_mirrors/bespokelabs/Bespoke-Nimble-9B
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考