medical-jev-4b
给定病例和候选选项,返回一个选择及各选项的概率。
medical-jev-4b 基于 Qwen3.5-4B,通过医疗选择题训练 LoRA 适配器。它用一次模型前向计算完成选项打分,输出短 JSON,不生成解释或思维链;推理时无需调用教师 API。
应用场景
可用于以下场景的离线原型、教学演练与模型评测。每次调用提供题目材料、判断要求和候选选项,结果可直接交给程序统计、展示或交由人工复核。
| 场景 | 提供什么 | 返回什么 |
|---|---|---|
| 医学教学与题库评测 | 病例、问题,以及诊断、病因或检查候选 | 选中的答案与各选项概率,便于批量判题和模型对照 |
| 护理培训与病例复盘 | 护理记录,以及护理措施、监测目标或体位候选 | 对应的护理优先项或措施标签 |
| 用药与治疗方案研究 | 病例、题设规则,以及药物、给药途径或治疗方案候选 | 在给定条件下选中的方案或禁忌项 |
| 随访、宣教与康复演练 | 患者情况,以及随访、宣教、营养或康复方案候选 | 与题目要求匹配的方案标签 |
| 指南规则与试验转介匹配 | 病例或基因结果、适用规则,以及建议或转介候选 | 给定规则下的推荐项或转介判断 |
| 医疗消息分类实验 | 就诊消息,以及紧急程度等分类标签 | 分类结果与各标签概率 |
这些场景都采用“从给定选项中选择”的形式,具体任务表现见下方评测及完整报告。
输入与输出案例
下面六个案例使用构造材料,输出由已发布的 medical-jev-4b 在 RTX 5090 上实际运行得到。概率展示到小数点后四位;案例用于说明调用方式,不作为医学能力评测。answer 是输入中的选项键,probabilities 给出各选项概率。
1. 医学教学与题库评测
输入:
{
"id": "teaching_diagnosis",
"request": {
"state": {
"clinical_question": "教学病例:患者发热、咳嗽,检测报告为甲型流感病毒核酸阳性,新冠病毒核酸阴性。"
},
"questions": {
"decision": {
"type": "choice",
"instructions": "本题按检测结果分类:甲型流感核酸阳性选择甲型流感,新冠核酸阳性选择新冠感染,两项均阴性选择证据不足。",
"criteria": {
"influenza_a": "甲型流感",
"covid19": "新冠感染",
"insufficient_evidence": "证据不足"
}
}
}
}
}
实际输出:
{
"id": "teaching_diagnosis",
"status": "ok",
"answer": "influenza_a",
"probabilities": {
"influenza_a": 0.9658,
"covid19": 0.0173,
"insufficient_evidence": 0.0169
}
}
2. 护理培训与病例复盘
输入:
{
"id": "nursing_priority",
"request": {
"state": {
"nursing_record": "模拟护理记录:患者骶尾部有持续受压记录,当前护理计划要求立即协助变换体位并减压;健康宣教安排在下午。"
},
"questions": {
"decision": {
"type": "choice",
"instructions": "根据记录,选择当前护理计划中应先执行的一项。",
"criteria": {
"pressure_relief": "协助变换体位并减压",
"health_education": "执行下午的健康宣教",
"routine_documentation": "整理既往护理记录"
}
}
}
}
}
实际输出:
{
"id": "nursing_priority",
"status": "ok",
"answer": "pressure_relief",
"probabilities": {
"pressure_relief": 0.9589,
"health_education": 0.0205,
"routine_documentation": 0.0205
}
}
3. 用药与治疗方案研究
输入:
{
"id": "medication_contraindication",
"request": {
"state": {
"case": "教学病例:患者明确记录对药物甲过敏。",
"plans": {
"plan_a": "方案 A 含药物甲",
"plan_b": "方案 B 含药物乙",
"plan_c": "方案 C 含药物丙"
}
},
"questions": {
"decision": {
"type": "choice",
"instructions": "本题规则:包含已记录过敏药物的方案标记为禁忌。选择应被标记的方案。",
"criteria": {
"plan_a": "方案 A",
"plan_b": "方案 B",
"plan_c": "方案 C"
}
}
}
}
}
实际输出:
{
"id": "medication_contraindication",
"status": "ok",
"answer": "plan_a",
"probabilities": {
"plan_a": 0.9603,
"plan_b": 0.0212,
"plan_c": 0.0184
}
}
4. 随访、宣教与康复演练
输入:
{
"id": "followup_plan",
"request": {
"state": {
"discharge_plan": "模拟出院计划:出院后第 7 天门诊复查。",
"current_record": "今天是出院后第 7 天,本题未报告新增症状。"
},
"questions": {
"decision": {
"type": "choice",
"instructions": "仅按出院计划选择今天对应的随访安排。",
"criteria": {
"scheduled_review": "按计划进行第 7 天门诊复查",
"delay_one_month": "将首次复查推迟一个月",
"cancel_followup": "取消后续复查"
}
}
}
}
}
实际输出:
{
"id": "followup_plan",
"status": "ok",
"answer": "scheduled_review",
"probabilities": {
"scheduled_review": 0.964,
"delay_one_month": 0.0175,
"cancel_followup": 0.0185
}
}
5. 指南规则与试验转介匹配
输入:
{
"id": "trial_referral",
"request": {
"state": {
"trial_rules": "虚构研究初筛条件:年龄 18 至 65 岁,标志物 M 阳性,且无列出的排除项。",
"case": {
"age": 52,
"marker_m": "阳性",
"listed_exclusion_present": false
}
},
"questions": {
"decision": {
"type": "choice",
"instructions": "仅依据给出的初筛条件判断是否匹配;初筛匹配不代表正式入组。",
"criteria": {
"screening_match": "符合所列初筛条件",
"screening_mismatch": "不符合所列初筛条件",
"need_more_information": "给定信息不足"
}
}
}
}
}
实际输出:
{
"id": "trial_referral",
"status": "ok",
"answer": "screening_match",
"probabilities": {
"screening_match": 0.9603,
"screening_mismatch": 0.0198,
"need_more_information": 0.0199
}
}
6. 医疗消息分类实验
输入:
{
"id": "message_classification",
"request": {
"state": {
"message": "您好,我想确认下周三复诊的预约时间。",
"reported_symptoms": "未报告症状或病情变化。"
},
"questions": {
"decision": {
"type": "choice",
"instructions": "按题设规则分类:仅询问预约时间归为常规事务;报告新增不适归为需要临床人员复核;明确求助急救归为紧急求助。",
"criteria": {
"routine": "常规事务",
"clinical_review": "需要临床人员复核",
"emergency": "紧急求助"
}
}
}
}
}
实际输出:
{
"id": "message_classification",
"status": "ok",
"answer": "routine",
"probabilities": {
"routine": 0.9644,
"clinical_review": 0.0177,
"emergency": 0.0179
}
}
快速开始
以下命令使用 Python 3.12 和 CUDA 12.8 版 PyTorch,已在 Linux / RTX 5090 32 GB 上验证。下载包包含约 130 MB 的已训练适配器、独立推理代码和示例;首次加载还会自动下载约 9.3 GB 的 Qwen3.5-4B 底座,并核对版本与文件校验值。
python3 -m venv .venv
source .venv/bin/activate
pip install torch==2.8.0 --index-url https://download.pytorch.org/whl/cu128
pip install huggingface-hub==1.33.0
hf download JuneYao/medical-jev-4b --revision v1.1.0 --local-dir medical-jev-4b
pip install -r medical-jev-4b/requirements.txt
python medical-jev-4b/predict_choices.py --bundle medical-jev-4b \
--input medical-jev-4b/examples/scenarios.jsonl
处理自己的数据时,将 --input 替换为 JSONL 文件路径,每行一题;添加 --output predictions.jsonl 保存结果。已有对应版本的底座可用 --base-model /path/to/Qwen3.5-4B 指定。默认批量为 8,显存不足时添加 --batch-size 1。
请使用随包的 predict_choices.py 或 ChoicePredictor 加载:适配器采用自定义 jev-lora-v1 格式,不兼容 PEFT 或聊天生成接口。
自定义输入与 Python 调用
发布包支持 2–52 个候选选项、完整输入最多 8,192 token。长度包含材料、候选和聊天模板;详细说明见 输入格式与运行范围。
JSONL 中每行采用以下结构(展示时展开,保存时写成一行):
{
"id": "example",
"request": {
"state": {"clinical_question": "记录体温 37.0°C;题设阈值为 38.0°C。"},
"questions": {
"decision": {
"instructions": "仅依据题设阈值选择匹配项。",
"criteria": {"below": "低于阈值", "above": "达到或超过阈值"}
}
}
}
}
state 放题目材料,instructions 放判断要求,criteria 将选项键映射到选项文字。每题只有一个 decision,无需提供正确答案。
也可在 Python 中加载一次后重复调用:
import json
import sys
sys.path.insert(0, "medical-jev-4b")
from jevtrain.inference import ChoicePredictor
model = ChoicePredictor("medical-jev-4b")
with open("medical-jev-4b/examples/scenarios.jsonl", encoding="utf-8") as f:
requests = [json.loads(line)["request"] for line in f if line.strip()]
print(model.predict(requests))
效果如何
在 jev-healthcare-lab 的 1,514 道外部医疗题上,medical-jev-4b(LoRA)的准确率为 **67.90%**,比原始 4B 提高 7.99 个百分点,尚未超过存档 JEV 1.13。
| 模型 | 全部 1,514 题的准确率 |
|---|---|
| 原始 Qwen3.5-4B(同一打分方式) | 59.91% |
| medical-jev-4b(LoRA) | 67.90% |
| medical-jev-4b-full(全参数微调) | 63.21% |
| JEV 1.13(存档结果) | 70.87% |
准确率按全部 1,514 题计算,未能回答的题目也计为错误。JEV 对照为 1.13 版存档,不代表其当前最新版。
当前推荐 LoRA 版。 同一批 44,847 条训练数据上的全参数微调模型,在该基准上低 4.69 个百分点。全量权重 单独提供,训练设置与详细比较见 全参数微调报告。
训练数据与外部基准的题目 ID、来源组和精确题面哈希无交集;这一检查不能排除语义近重复或预训练暴露。另有 1,620 道封存测试题尚未评测。
比较方法、置信区间和逐题结果见 完整评测报告。公开下载文件与 RTX 5090 推理结果的核对见 下载与推理验证记录。
使用范围
适用于给定选项的医疗判断研究与离线评测。分诊仍是明显短板:在基准的 100 道分诊题上,本模型答对 40 道,存档 JEV 答对 66 道。训练标签未经临床专家逐条审核,概率未经校准,不能据此判断真实临床风险或替代专业医疗判断。
默认推理使用 FP16。上述安装方式已通过示例验证;完整基准使用了 FLA / causal-conv1d 优化内核。更换硬件、精度或内核可能带来数值差异,目前没有与 JEV 的实测速度对比。
模型与训练资料
- 底座:Qwen3.5-4B。精确版本由 inference_config.json 固定。
- 适配器:全 32 层 LoRA,rank 16,约 3,246 万个训练参数。使用 44,847 条样本训练 2 个 epoch,由验证集选择 step 5,500。本版尚未使用教师软标签或 RSI 迭代。
- 文件:训练权重、推理代码、示例与评测记录均在本模型仓库中;manifest.json 记录文件校验值。完整训练语料未分发。
- 许可:代码与适配器采用 MIT,底座采用 Apache-2.0。数据使用条件按各来源许可执行。