Instructions to use chenhaodev/qwen3-8b-cv-lora with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use chenhaodev/qwen3-8b-cv-lora with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
心血管专科医疗问答 LoRA 模型 (Qwen3-8B-CV-LoRA)
基于 Qwen3-8B 的参数高效微调(PEFT + LoRA)得到的心血管(心血管内科)专科医疗问答助手,配套 RAG(检索增强生成) 索引,同时服务 C端(患者/家属/公众) 与 B端(医生/医学生/药师) 两类用户。
核心能力
C端(患者/家属/公众)
- 健康科普问答:用通俗语言解释病因、机制、症状
- 健康自查/有效追问:该注意哪些信号、何时就医
- 医嘱与用药解读:服药方法、注意事项(禁忌、相互作用)
- 康复计划建议:生活方式、运动、饮食、随访
- 检查/报告解读:常见指标与检查结果的通俗解释
B端(医生/医学生/药师)
- 循证推理/机制:病理生理机制、药理学机制
- 诊断推测(DDx):症状/体征/检查的鉴别诊断
- 干预提示:治疗选择、用药注意、药物相互作用(DDI)、禁忌
- Guideline/方案:诊疗流程、分期分级、随访(SOAP)
- 检查解读:心电/影像/实验室检查的临床意义
训练数据
训练语料来自 6 本心血管医学相关书籍(已按章节切分为 5781 个语料块),生成 75,198 条 QA 覆盖 4 类任务:
- Grounded(科普+专业):28,259 条(严格基于文本)
- Multihop(跨章节推理):19,499 条(综合两段文本)
- Reviewer(审核官):17,685 条(审核/纠正回答,核查 DDI 与禁忌)
- General(防灾难性遗忘):9,755 条(通用能力保持)
训练/评估切分:train 61,219 / eval 1,893(聊天格式,带角色标签与资料来源标注,支撑 RAG)。
LoRA 配置
- 基础模型:
Qwen/Qwen3-8B - 方法:QLoRA(4-bit + LoRA),
r=16, alpha=16 - 目标模块:
q/k/v/o/gate/up/down_proj - 优化器:
adamw_8bit,学习率2e-4,cosine 调度,2 epochs - 最终训练 loss:约 0.98
RAG 索引
- 嵌入模型:
BAAI/bge-small-zh-v1.5(512 维,中文友好) - 索引:
faiss.IndexFlatIP(余弦相似度) - 语料:6 本书 → 5781 个带章节/页码的语料块
- 文件:
index.faiss/docs.json/doc_meta.json/meta.json
使用方式
加载 LoRA 适配器
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="Qwen/Qwen3-8B", max_seq_length=2048,
dtype=None, load_in_4bit=True)
model.load_adapter("chenhaodev/qwen3-8b-cv-lora")
FastLanguageModel.for_inference(model)
prompt = "我爸爸60岁有高血压,最近晚上睡觉突然憋醒坐起来才舒服,还老觉得心慌,这是不是心脏出问题了?"
msgs = [{"role": "user", "content": prompt}]
text = tokenizer.apply_chat_template(msgs, add_generation_prompt=True, tokenize=False)
enc = tokenizer(text, return_tensors="pt").to("cuda")
out = model.generate(**enc, max_new_tokens=300)
print(tokenizer.decode(out[0][enc.input_ids.shape[1]:], skip_special_tokens=True))
使用 RAG 检索增强
先下载本仓库 rag/ 下的 4 个文件到本地(index.faiss、docs.json、doc_meta.json、meta.json),然后:
import json
import faiss
import numpy as np
from sentence_transformers import SentenceTransformer
emb_model = SentenceTransformer("BAAI/bge-small-zh-v1.5")
index = faiss.read_index("index.faiss")
docs = json.load(open("docs.json", encoding="utf-8"))
meta = json.load(open("doc_meta.json", encoding="utf-8"))
def retrieve(query, k=4):
q = emb_model.encode([query], normalize_embeddings=True)
scores, idxs = index.search(np.asarray(q, dtype="float32"), k)
results = []
for j, i in enumerate(idxs[0]):
if i >= 0: # faiss 会为缺失近邻返回 -1
doc = docs[i]
src = meta[i].get("label", "")
content = doc[len(src) + 2:] if doc.startswith("【" + src) else doc
results.append((float(scores[0][j]), content))
return results
query = "阵发性夜间呼吸困难 心力衰竭 治疗"
retrieved = retrieve(query)
prompt = "参考资料:\n" + "\n".join(c for _, c in retrieved) + "\n\n请基于以上资料回答:" + query
提示:检索结果每个块默认带
【书名】前缀(用于溯源)。如不需要,可按上例content的写法去除。
使用合并模型(已融合 LoRA,本地)
合并模型(融合 LoRA 后的完整权重 ~16GB,未上传到 Hub,仅保存在本地):
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = "/workspace/task13/checkpoints/qwen3-8b-cv-merged"
model = AutoModelForCausalLM.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)
如需在 Hub 上独立使用完整模型,请先用 merge_lora.py 合并后自行上传到你的仓库:huggingface-cli upload <你的仓库> checkpoints/qwen3-8b-cv-merged --repo-type model。
免责声明
医疗免责声明:本模型基于有限书籍语料微调与检索增强生成,不能替代专业医师诊断。输出仅供参考,具体诊疗请务必咨询执业医师。非紧急情况仅作一般建议,若出现胸痛、呼吸困难、晕厥等急症请立即就医(拨打 120)。
版版权说明:训练数据源自公开医学书籍的文本切片(用于构建科普/专业 QA),本仓库仅上传 LoRA 适配器、RAG 索引构建脚本与模型卡片,不包含书籍原始长文本,请遵守所用书籍的版权许可。
相关资源
- 训练/数据处理脚本:
scripts/(extract / gen / prep / train / merge / build_rag / infer) - RAG 索引:
index.faiss、docs.json、doc_meta.json、meta.json(见rag/) - 合并模型(本地,未上传):
checkpoints/qwen3-8b-cv-merged/
- Downloads last month
- -