Views
No views yet
| Metric | Base Qwen2.5-7B | MedQwen-7B | Δ |
|---|---|---|---|
| ROUGE-1 | 0.0407 | 0.0330 | -0.77% |
| ROUGE-2 | 0.0040 | 0.0024 | -0.16% |
| ROUGE-L | 0.0389 | 0.0330 | -0.59% |
| BERTScore | 0.5959 | 0.6670 | +7.11% |
ROUGE scores are lower for the fine-tuned model because it learned concise, on-format answers rather than verbose outputs. BERTScore (semantic similarity using bert-base-chinese) is the primary metric for open-ended Chinese generation and shows a +7.11% improvement.
1import torch
2from transformers import AutoTokenizer, AutoModelForCausalLM
3from peft import PeftModel
4
5base_model_id = "Qwen/Qwen2.5-7B-Instruct"
6adapter_id = "mellee030/MedQwen-7B-LoRA"
7
8tokenizer = AutoTokenizer.from_pretrained(base_model_id, trust_remote_code=True)
9model = AutoModelForCausalLM.from_pretrained(
10 base_model_id,
11 torch_dtype=torch.float16,
12 device_map="auto",
13 trust_remote_code=True,
14)
15model = PeftModel.from_pretrained(model, adapter_id)
16model.eval()
17
18messages = [
19 {"role": "system", "content": "你是一个专业的医疗问答助手,请根据用户的问题给出准确、简洁的医疗建议。"},
20 {"role": "user", "content": "糖尿病的早期症状有哪些?"},
21]
22
23prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
24inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
25
26with torch.no_grad():
27 output = model.generate(
28 **inputs,
29 max_new_tokens=256,
30 do_sample=False,
31 repetition_penalty=1.1,
32 pad_token_id=tokenizer.eos_token_id,
33 )
34
35new_tokens = output[0][inputs["input_ids"].shape[1]:]
36print(tokenizer.decode(new_tokens, skip_special_tokens=True))| Parameter | Value |
|---|---|
| LoRA rank (r) | 8 |
| LoRA alpha | 16 |
| LoRA dropout | 0.05 |
| Target modules | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj |
| Learning rate | 2e-4 |
| Batch size | 1 (grad accum steps: 8, effective batch: 8) |
| Epochs | 3 |
| Max sequence length | 256 |
| Precision | FP16 |
| LR scheduler | Cosine with warmup |