Downloads · 30 days
0
chenhaodev/qwen3-8b-cv-lora
qwen3-8b-cv-lora is a text generation model from chenhaodev. Use it when you need the model to write or continue text. It is set up for peft. The card lists the license as apache-2.0.
基于 Qwen3-8B 的参数高效微调(PEFT + LoRA)得到的心血管(心血管内科)专科医疗问答助手,配套 RAG(检索增强生成) 索引,同时服务 C端(患者/家属/公众) 与 B端(医生/医学生/药师) 两类用户。
Downloads · 30 days
0
Access
Public
Updated Sep 17, 2026
Repo size
210 MB
Likes
0
Public
Click a slice to open those files.
.safetensors175 MB · 82%
From the Hugging Face model README
基于 Qwen3-8B 的参数高效微调(PEFT + LoRA)得到的心血管(心血管内科)专科医疗问答助手,配套 RAG(检索增强生成) 索引,同时服务 C端(患者/家属/公众) 与 B端(医生/医学生/药师) 两类用户。
训练语料来自 6 本心血管医学相关书籍(已按章节切分为 5781 个语料块),生成 75,198 条 QA 覆盖 4 类任务:
训练/评估切分:train 61,219 / eval 1,893(聊天格式,带角色标签与资料来源标注,支撑 RAG)。
Qwen/Qwen3-8Br=16, alpha=16q/k/v/o/gate/up/down_projadamw_8bit,学习率 2e-4,cosine 调度,2 epochsBAAI/bge-small-zh-v1.5(512 维,中文友好)faiss.IndexFlatIP(余弦相似度)index.faiss / docs.json / doc_meta.json / meta.jsonfrom 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/ 下的 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 后的完整权重 ~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)index.faiss、docs.json、doc_meta.json、meta.json(见 rag/)checkpoints/qwen3-8b-cv-merged/