📚 华佗百科问答数据集 (1,486条):
├── 来源: 复旦大学自由智能实验室 (FreedomIntelligence)
├── 特点: 高质量中文医疗百科问答
├── 覆盖: 疾病诊断、症状分析、治疗方案
├── 格式: 结构化问答对 (Question-Answer)
├── 权重: 53.3% (基础医学知识)
└── 语言: 纯中文
🧠 医学O1推理数据集 (800条):
├── 来源: FreedomIntelligence/medical-o1-reasoning-SFT
├── 特点: 复杂医疗推理思维链训练
├── 覆盖: 诊断推理、病例分析、治疗决策
├── 格式: 包含推理过程的多轮对话
├── 配置: 中文配置 (zh) + 混合配置 (zh_mix)
├── 权重: 28.7% (推理能力训练)
└── 语言: 中文为主
🎯 MedAlpaca医学闪卡 (500条):
├── 来源: MedAlpaca项目医学闪卡数据集
├── 特点: 医学知识点快速问答
├── 覆盖: 基础医学、临床医学概念
├── 格式: 简洁问答对
├── 处理: 英文原始数据,添加中文医疗提示
├── 权重: 18.0% (知识补充)
└── 语言: 英文转中文处理
专科分布:
├── 内科学 (Internal Medicine) - 35%
├── 外科学 (Surgery) - 20%
├── 儿科学 (Pediatrics) - 15%
├── 妇产科学 (Obstetrics & Gynecology) - 10%
├── 心血管科 (Cardiology) - 8%
├── 神经科学 (Neurology) - 7%
└── 急诊医学 (Emergency Medicine) - 5%
1# 实际使用的数据集加载代码
2datasets = {
3 # 华佗百科问答 - 基础医学知识 (50%)
4 'huatuo_qa': load_dataset("FreedomIntelligence/huatuo_encyclopedia_qa", split="train"),
5
6 # 医学推理数据集 - 推理能力训练 (30%)
7 'medical_reasoning': load_dataset("FreedomIntelligence/medical-o1-reasoning-SFT", "zh", split="train"),
8
9 # 医学推理混合 - 中英混合数据 (15%)
10 'medical_reasoning_mix': load_dataset("FreedomIntelligence/medical-o1-reasoning-SFT", "zh_mix", split="train"),
11
12 # 医学闪卡 - 补充知识 (5%)
13 'medical_flashcards': load_dataset("medalpaca/medical_meadow_medical_flashcards", split="train")
14}
1from transformers import AutoTokenizer, AutoModelForCausalLM
2import torch
3
4# 加载模型和分词器 (验证可用 ✅)
5model_name = "ZhangQiao123/medgemma-chinese-medical-qa"
6print("🔄 加载模型...")
7
8tokenizer = AutoTokenizer.from_pretrained(model_name)
9model = AutoModelForCausalLM.from_pretrained(
10 model_name,
11 torch_dtype=torch.bfloat16,
12 device_map="auto",
13 low_cpu_mem_usage=True
14)
15
16print("✅ 模型加载成功!")
17
18# 医疗问答函数
19def medical_chat(question):
20 """生成医疗问答回复"""
21 prompt = f"<start_of_turn>user\n{question}<start_of_turn>model\n"
22 inputs = tokenizer(prompt, return_tensors="pt")
23
24 # 移动到GPU (如果可用)
25 if torch.cuda.is_available():
26 inputs = {k: v.cuda() for k, v in inputs.items()}
27
28 with torch.no_grad():
29 outputs = model.generate(
30 **inputs,
31 max_new_tokens=512,
32 temperature=0.7,
33 do_sample=True,
34 pad_token_id=tokenizer.eos_token_id,
35 eos_token_id=tokenizer.eos_token_id
36 )
37
38 response = tokenizer.decode(outputs[0], skip_special_tokens=True)
39 return response.split("<start_of_turn>model\n")[-1]
40
41# 测试示例 (验证有效)
42test_questions = [
43 "高血压的主要症状有哪些?",
44 "糖尿病患者应该注意什么?",
45 "感冒和流感有什么区别?"
46]
47
48print("\n🧠 开始医疗问答测试:")
49for i, question in enumerate(test_questions, 1):
50 print(f"\n📋 问题 {i}: {question}")
51 answer = medical_chat(question)
52 print(f"🏥 回答: {answer}")
53 print("-" * 60)
1# 注意: 需要HuggingFace Token认证
2import requests
3
4def call_inference_api(question, hf_token):
5 """调用HuggingFace推理API"""
6 url = "https://api-inference.huggingface.co/models/ZhangQiao123/medgemma-chinese-medical-qa"
7
8 headers = {
9 "Authorization": f"Bearer {hf_token}",
10 "Content-Type": "application/json"
11 }
12
13 payload = {
14 "inputs": f"<start_of_turn>user\n{question}<start_of_turn>model\n",
15 "parameters": {
16 "max_new_tokens": 512,
17 "temperature": 0.7,
18 "do_sample": True
19 }
20 }
21
22 response = requests.post(url, headers=headers, json=payload)
23
24 if response.status_code == 200:
25 return response.json()
26 else:
27 print(f"API调用失败: {response.status_code}")
28 return None
29
30# 使用示例 (需要您的HF Token)
31# result = call_inference_api("高血压有什么症状?", "your_hf_token_here")