Instructions to use quincyqiang/chinese-decision-2b with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use quincyqiang/chinese-decision-2b with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("zero-shot-classification", model="quincyqiang/chinese-decision-2b")# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("quincyqiang/chinese-decision-2b") model = AutoModelForCausalLM.from_pretrained("quincyqiang/chinese-decision-2b", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Chinese Decision 2B
中文概率决策模型:一次前向,直接返回候选项概率。
A Chinese decision model fine-tuned from Qwen3.5-2B with LoRA and CE + RLCD. It supports yes/no, single-choice and ordinal decisions across general, medical, legal and finance tasks. This package contains merged BF16 weights and the existing validation-fitted temperature.
代码 · 模型总览 · Decision Studio · 训练数据 · 测试集
0.8B BF16 · 0.8B Q8_0 · 2B BF16 · 2B Q8_0 · 4B BF16 · 4B Q8_0
相关资源
| 资源 | 说明 | 链接 |
|---|---|---|
| 代码 | 训练、评测、GGUF 导出与 HTTP 服务(GPU / CPU) | GitHub |
| 测试平台 | Decision Studio:决策实验台、场景库、鲁棒性实验室、评测中心与性能压测 | GitHub |
| 2B BF16(本仓库) | 合并权重与校准温度,Transformers 推理 | Hugging Face · ModelScope |
| 2B GGUF Q8_0 | llama.cpp 推理,CPU 即可部署,不需要 PyTorch | Hugging Face · ModelScope |
| 4B 系列 | 系列中准确率最高;权重约为本模型的 2.2 倍 | BF16 · GGUF |
| 0.8B 系列 | 更小、更快;部分法律判断与金融评分任务更好 | BF16 · GGUF |
简介
Chinese Decision 是一个面向中文场景的轻量级决策模型。它不聊天、不生成文本:给定上下文和一组固定候选项,一次前向直接返回每个候选项的概率,适合意图识别、工单分流、内容审核、数据打标、给模型输出打分、智能体动作选择等"有限选项判断"任务。
- 一次前向,零输出 token:读取最后位置上候选字母
A–Z的 logits,softmax 后即为概率。 - 三种题型:
noul(是/否)、choice(单选)、score(有序等级,返回期望分值)。 - 单一模型覆盖四个领域:通用、医疗、法律、金融混合训练。
- 准确率与成本折中:CJ-Bench 全量整体 ACC **84.11%**,医疗 / 法律 / 金融平均 **78.25%**,比 chinese-decision-0.8b 分别高 1.01 / 1.35 个百分点;更大的 chinese-decision-4b 为 85.97% / 84.00%,权重约为本模型的 2.2 倍。
- 概率经过校准:附带在独立校准划分上拟合的温度,整体 ECE **0.64%**。
模型与交付状态
更新于 2026-10-17。BF16 合并模型已完成全量 CJ-Bench、保存/重载和实际 HTTP 三题型/双路由验证,并已在 Hugging Face 与 ModelScope 公开发布。由本模型直接转换的 Q8_0 GGUF 也已完成全量 CJ-Bench 对照,见 2B Q8_0 模型卡。
| 项目 | 值 |
|---|---|
| 基础模型 | Qwen3.5-2B,文本决策主干 |
| 训练目标 | 候选分布交叉熵 + RLCD;LoRA rank 32 |
| 训练覆盖 | 1 epoch,13,048,000 条决策,4,994 步,4 卡 |
| best | 验证集 distribution NLL 选择 step 4994,NLL 0.5860035124 |
| RLCD | group size 4,sigma 按已训练样本进度从 0.4 降至 0.1 |
| 交付权重 | model.safetensors,BF16,3,763,692,048 字节 |
| 默认温度 | 1.074872374534607,独立验证划分拟合 |
| 输入 / 候选项 | 最长 16,384 tokens / 单题 2–26 项(训练覆盖 2–16 项),类别更多用 /v1/tournament 分组淘汰 |
| 提示版本 | hmm-zh-v1,关闭 thinking,末位候选字母 logits |
| 训练结束 | 2026-10-17 17:25:54,Asia/Shanghai |
训练数据版本 a3963a61f71e00051a80721e587d720d8926e8e7。最终 adapter SHA256 为 9b55e8eda00997544b76fa945d890605c3acae4199041c197ef5a09275142a7c;合并权重 SHA256 为 a8fadd326b19a278f8c26216ca481b607369baca33962aac0d8fda603c830068。
文件说明
| 文件 | 内容 |
|---|---|
| model.safetensors、config.json | 合并模型,无需再次加载 PEFT adapter |
| tokenizer.json、tokenizer_config.json、chat_template.jinja | tokenizer 与聊天模板 |
| decision_config.json | 模型身份、温度、最大长度与候选数 |
| training_config.json、training_summary.json | 配置、训练覆盖、best 的来源 |
| validation_report.json | 选模验证集的校准前后指标,不是测试集结果 |
| LICENSE、LICENSES/、THIRD_PARTY_NOTICES.md | 许可与上游方法归属 |
快速开始
下载
hf download quincyqiang/chinese-decision-2b --local-dir models/chinese-decision-2b
# 或 ModelScope
modelscope download --model quincyqiang/chinese-decision-2b --local_dir models/chinese-decision-2b
GPU HTTP 服务
在 代码仓库 根目录安装推理依赖,模型目录放在 models/chinese-decision-2b:
pip install -e ".[torch]"
CUDA_VISIBLE_DEVICES=0 OMP_NUM_THREADS=6 TOKENIZERS_PARALLELISM=false \
python scripts/serve_gpu.py --base models/chinese-decision-2b \
--host 127.0.0.1 --port 8789 --token-budget 16384 --max-batch 32
启动前选择空闲 GPU;本命令不需要访问训练 run 或加载 adapter。测试服务:
curl http://127.0.0.1:8789/health
curl http://127.0.0.1:8789/v1/systemone -H 'Content-Type: application/json' --data-binary @examples/request.json
python scripts/verify_export.py --url http://127.0.0.1:8789
Python 直接读取候选概率
以下示例仅需 PyTorch 和 Transformers,不需要训练库或文本生成。项目实测环境为 torch 2.8.0、transformers 5.3 系列;安装约束见 pyproject.toml。固定候选顺序并读取 decision_config.json 的温度,不使用通用 text-generation pipeline。
import json
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
path = "models/chinese-decision-2b"
tokenizer = AutoTokenizer.from_pretrained(path)
model = AutoModelForCausalLM.from_pretrained(path, dtype=torch.bfloat16, attn_implementation="sdpa").to("cuda").eval()
config = json.load(open(f"{path}/decision_config.json", encoding="utf-8"))
temperature, max_length = config["temperature"], config["max_length"]
LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
letter_ids = [tokenizer.encode(c, add_special_tokens=False)[0] for c in LETTERS]
def text(value):
return value if isinstance(value, str) else json.dumps(value, ensure_ascii=False, separators=(",", ":"))
def options_for(question):
kind, criteria = question["type"], question.get("criteria")
if kind == "choice":
return [(str(k), text(v)) for k, v in criteria.items()]
if kind == "score":
return [(str(i), text(v)) for i, v in enumerate(criteria)]
criteria = criteria or {}
return [("false", text(criteria.get("false", "否"))), ("true", text(criteria.get("true", "是")))]
def build_prompt(state, instructions, options):
content = ("待判断的上下文:\n" + text(state)
+ "\n\n问题:\n" + text(instructions)
+ "\n\n候选项:\n" + "\n".join(f"{LETTERS[i]}: {k} — {v}" for i, (k, v) in enumerate(options))
+ "\n只返回候选项对应的字母。")
return tokenizer.apply_chat_template([{"role": "user", "content": content}], tokenize=False,
add_generation_prompt=True, enable_thinking=False)
@torch.inference_mode()
def decide(state, question):
options = options_for(question)
ids = tokenizer.encode(build_prompt(state, question["instructions"], options), add_special_tokens=False)
if len(ids) > max_length:
raise ValueError(f"input is {len(ids)} tokens; the limit is {max_length}")
logits = model(torch.tensor([ids], device=model.device), logits_to_keep=1, use_cache=False).logits
probs = (logits[0, -1, letter_ids[:len(options)]].float() / temperature).softmax(-1).tolist()
k, best = len(probs), max(range(len(probs)), key=probs.__getitem__)
answer = {"probabilities": {key: round(p, 4) for (key, _), p in zip(options, probs)},
"confidence": round((k * probs[best] - 1) / (k - 1), 4)}
if question["type"] == "noul":
answer["noul"] = round(probs[1], 4)
elif question["type"] == "choice":
answer["choice"] = options[best][0]
else:
answer["score"] = round(sum(i * p for i, p in enumerate(probs)), 4)
return answer
state = "客户留言:付款后一直没有收到发票,我已经催了三次,今天必须拿到。"
questions = {
"urgent": {"type": "noul", "instructions": "客户是否表达了紧迫性?"},
"department": {"type": "choice", "instructions": "应该由哪个部门处理?",
"criteria": {"billing": "支付、发票及退款", "technical": "故障和系统问题", "sales": "购买咨询与升级"}},
"frustration": {"type": "score", "instructions": "客户有多不满?", "criteria": ["平静", "不满", "非常愤怒"]},
}
for name, question in questions.items():
print(name, decide(state, question))
| 接口 | 用途 |
|---|---|
POST /v1/systemone |
决策;可追加 ?debug=1 查看候选 logits |
POST /api/alpha/decisions |
兼容 hmm 的同一决策路由 |
POST /v1/batch |
多请求批处理,单个请求失败不影响其他请求 |
POST /v1/compile |
编译输入并计数 tokens |
POST /v1/tournament |
类别更多的 choice 问题:分组淘汰后决赛,每组不超过 16 个候选 |
GET /health、GET /v1/info |
模型身份、step、温度及运行信息 |
每个请求最多 64 个问题,每题 2–26 个候选(类别更多时用 /v1/tournament,示例 examples/tournament.json 有 41 个客服意图),最长 16,384 tokens;超长或不合法输入返回 422,不静默截断。score 输出从 0 开始的等级期望值,不是最大概率等级;confidence = (K*p_max-1)/(K-1) 衡量分布尖锐程度,不等于经验准确率。
CJ-Bench 全量结果
CJ-Bench 全量为 307,900 条(304,822 条硬标签、3,078 条软标签),通用/医疗/法律/金融分别为 100,000 / 200,000 / 4,300 / 3,600 条。全部保留原始候选顺序,无过滤、无截断。ACC/ECE 仅计硬标签,ECE 使用 15 个等宽分箱;分布 NLL 与 Brier 包含软标签;Score MAE 覆盖 38,746 条评分题,计算预测期望等级与目标期望等级的绝对差。
整体 micro 按硬标签样本数加权,四领域 macro 是四个领域的等权平均,专业平均仅对医疗、法律、金融等权。不同量不能互换,整体 ECE 也不是领域 ECE 的平均。选模和温度拟合只使用验证数据,未使用 CJ-Bench 标签。
下表均为已发布的正式权重(LoRA 已合并,使用默认温度);本仓库为 chinese-decision-2b,chinese-decision-2b-gguf 由它直接转换。加粗表示 2B 相对同格式 0.8B 提升的指标。
关于温度 T:概率按 p = softmax(z / T) 计算,z 为候选字母的 logits。T = 1 表示直接对 logits 做 softmax、不做温度校准。发布权重附带在独立验证划分上拟合的温度(0.8B 为 1.108,2B 为 1.075),只调整概率的尖锐程度,不改变选出的答案:准确率不变,ECE / NLL 更好。
| 模型 | 格式 | Micro ACC (%) ↑ | Macro ACC (%) ↑ | ECE (%) ↓ | NLL ↓ | Brier ↓ | Score MAE ↓ |
|---|---|---|---|---|---|---|---|
| chinese-decision-0.8b | BF16 | 83.1052 | 75.7376 | 0.2706 | 0.431318 | 0.223833 | 0.584427 |
| chinese-decision-0.8b-gguf | Q8_0 | 83.1233 | 75.8092 | 0.2696 | 0.431293 | 0.223815 | 0.583973 |
| chinese-decision-2b | BF16 | 84.1107 | 77.1750 | 0.6361 | 0.416520 | 0.213295 | 0.564216 |
| chinese-decision-2b-gguf | Q8_0 | 84.1094 | 77.3282 | 0.6534 | 0.416288 | 0.213189 | 0.563738 |
相对 chinese-decision-0.8b,本模型 Micro +1.01、Macro +1.44、专业平均 +1.35 个百分点,NLL / Brier / Score MAE 均更低;整体 ECE 略高(0.64% vs 0.27%)。同口径下 chinese-decision-4b 为 Micro 85.97%、Macro 81.92%,见 4B 模型卡。
分领域与分题型
| 模型 | 格式 | General ACC (%) | Medical ACC (%) | Legal ACC (%) | Finance ACC (%) | Professional avg. ACC (%) |
|---|---|---|---|---|---|---|
| chinese-decision-0.8b | BF16 | 72.26 | 88.85 | 67.84 | 74.00 | 76.90 |
| chinese-decision-0.8b-gguf | Q8_0 | 72.23 | 88.89 | 67.84 | 74.28 | 77.00 |
| chinese-decision-2b | BF16 | 73.96 | 89.50 | 68.74 | 76.50 | 78.25 |
| chinese-decision-2b-gguf | Q8_0 | 73.91 | 89.50 | 69.40 | 76.50 | 78.47 |
| 题型 | 样本数 | chinese-decision-0.8b ACC (%) | chinese-decision-2b ACC (%) | 2B ECE (%) | 2B NLL | 2B Score MAE |
|---|---|---|---|---|---|---|
noul |
134,577 | 94.96 | 95.11 | 0.34 | 0.114612 | — |
choice |
134,577 | 78.32 | 80.12 | 0.90 | 0.559377 | — |
score |
38,746 | 56.45 | 57.67 | 1.65 | 0.968959 | 0.564216 |
与其他决策模型对比
下表的外部模型数字为 Chinese-Jev 原文 Table 1 / Table 2 的作者报告值,2026-10-17 核对,本项目没有重跑这些模型;本项目行为发布权重。加粗为每列最优。
通用领域(Table 1)
| 模型 | ACC (%) ↑ | ECE (%) ↓ |
|---|---|---|
| Qwen3.5-2B | 32.95 | 43.68 |
| Open-Jev | 52.33 | 10.54 |
| SemIF | 44.21 | 27.27 |
| Laya Multilingual | 40.22 | 23.04 |
| Jev (API) | 68.35 | 11.45 |
| Chinese-Jev General / Specialists | 69.20 | 3.78 |
| chinese-decision-0.8b | 72.26 | 1.68 |
| chinese-decision-2b | 73.96 | 1.93 |
专业领域(Table 2)
| 模型 | Medical ACC | Medical ECE | Legal ACC | Legal ECE | Finance ACC | Finance ECE | Avg. ACC | Avg. ECE |
|---|---|---|---|---|---|---|---|---|
| Qwen3.5-2B | 53.88 | 28.71 | 31.53 | 44.82 | 38.11 | 49.12 | 41.17 | 40.88 |
| Open-Jev | 73.08 | 2.88 | 44.07 | 23.15 | 48.11 | 10.19 | 55.09 | 12.07 |
| SemIF | 62.17 | 10.39 | 43.07 | 19.99 | 47.89 | 18.45 | 51.04 | 16.28 |
| Laya Multilingual | 24.55 | 43.05 | 34.72 | 31.49 | 38.31 | 26.18 | 32.53 | 33.57 |
| Jev (API) | 84.29 | 5.70 | 68.35 | 8.03 | 78.39 | 2.98 | 77.01 | 5.57 |
| Chinese-Jev General | 39.77 | 17.33 | 38.76 | 15.37 | 35.39 | 14.43 | 37.97 | 15.71 |
| Chinese-Jev General / Specialists | 87.65 | 7.25 | 60.10 | 17.45 | 64.72 | 11.55 | 70.82 | 12.08 |
| chinese-decision-0.8b | 88.85 | 1.12 | 67.84 | 4.05 | 74.00 | 2.45 | 76.90 | 2.54 |
| chinese-decision-2b | 89.50 | 0.24 | 68.74 | 3.37 | 76.50 | 2.13 | 78.25 | 1.92 |
本模型相对 Chinese-Jev(General + 三个 Specialist)在通用 / 医疗 / 法律 / 金融分别高 4.76 / 1.85 / 8.64 / 11.78 个百分点,专业平均高 7.43;相对闭源 Jev,专业平均高 1.24,金融仍低 1.89。四个领域的 ECE 都低于论文中的所有模型。Chinese-Jev General 加上医疗、法律和金融 Specialist 是 四个分别模型;本项目每个尺寸各使用一个模型覆盖四领域。Jev 为闭源 API。论文使用 H200,本地使用 A800;延迟口径和硬件不同,不做等价排名。
2B 与 0.8B 的模型规模、batch 和训练目标同时变化,因此结果不能当作 RLCD 的独立收益。训练过程中各 checkpoint 的评测结果见 训练过程 checkpoint 评测。
Q8_0 版本
由本模型直接转换的 2B Q8_0 GGUF(2.01 GB,llama.cpp,CPU 可运行,不需要 PyTorch)沿用同一温度,在 CJ-Bench 全部 307,900 条上与本模型逐条配对:整体 ACC **84.1094%**(本模型 84.1107%,净少对 4 条),首选项一致率 **99.00%**,ECE 0.6534%(本模型 0.6361%),NLL、Brier、Score MAE 略降。四领域 macro 77.3282%、专业平均 78.4663%,高出的部分主要来自法律领域(4,300 条中净多对 28 条),不代表量化提升了能力。
全量在 llama.cpp CUDA 上测得,CPU 只验证了有限输入。分领域、分题型、来源变化、BF16 GGUF 后端对照与 CPU / GPU 延迟见 2B Q8_0 模型卡。
校准验证与测试的区别
温度只在母记录分组后的验证划分 0 上拟合,选模使用划分 1–4。后者固定 1200 条验证数据上:
| 合并模型验证指标 | T=1 | T=1.0748723745 |
|---|---|---|
| 硬标签 ACC (%) | 76.0906 | 76.0906 |
| ECE(10 bins,%) | 2.3324 | 1.0608 |
| 分布 NLL | 0.585104 | 0.582978 |
| Brier | 0.316658 | 0.315944 |
上述验证 ECE 为 10 bins,不能混入使用 15 bins 的 CJ-Bench 测试表。全局温度不能保证所有领域、来源或题型都改善。
性能与已知局限
同服务器、25 条输入、每条预热后测 3 次,Transformers BF16 GPU 的单请求 p50 为 44.77 ms;短输入(92–255 tokens)p50 为 44.68 ms。这是预先分词后的前向及概率计算,不含分词、HTTP 或网络,且为共享 A800 服务器。完整长度范围为 92–6521 tokens,不能从这些输入推断生产吞吐。
- 2B 的整体准确率更高,但法律判断与金融评分仍落后于 0.8B:法律 noul 为 82.07%(chinese-decision-0.8b 为 85.60%),金融 score 为 80.33%(0.8B 为 82.83%);Q8_0 为 82.73% 和 80.58%。
- 商品分类来源 3,151 条在训练过程中波动较大,发布权重 ACC 为 70.96%、NLL 1.5125。整体指标不能代替来源诊断。
- 温度校准降低了整体 ECE,但 Score MAE 比 T = 1 时略高(0.5642 vs 0.5607);金融领域仍低于闭源 Jev 的作者报告准确率。
- 不用于聊天或开放式生成;仅针对中文固定候选任务训练。标签含义来自原任务,不能代替专业正确性判断。阈值与人工复核区间需用实际业务数据验证。
原始报告:reports/cj-bench-2b-step4994-calibrated-20261017。数据 manifest SHA256 为 461bb692676e8c01bbc89a5478a6cda9e5d0096afd2c82919d73f45a018ea351。训练配置、导出与来源诊断见 2B 训练与交付记录,各 checkpoint 结果见 训练过程 checkpoint 评测。
归属、许可与引用
模型权重保留基础 Qwen3.5-2B 的 Apache-2.0 LICENSE。项目代码以 MIT 为主,RLCD 改编部分保留 Apache-2.0;原文与声明见 LICENSES/ 和 THIRD_PARTY_NOTICES.md。数据许可按来源分别适用,模型交付不授予数据再分发权利。
方法参考 hmm,RLCD 与数据参考 Chinese-Jev。本项目没有复现 Jev 或 Chinese-Jev 的训练过程。使用数据或基线时请同时引用 Chinese-Jev 论文。
@misc{chinese-decision-2026,
title = {Chinese Decision: A Lightweight Chinese Probabilistic Decision Model},
author = {yanqiangmiffy},
year = {2026},
howpublished = {\url{https://github.com/yanqiangmiffy/chinese-decision}}
}
- Downloads last month
- 108