74 lines
2.6 KiB
Markdown
74 lines
2.6 KiB
Markdown
|
|
---
|
||
|
|
language: en
|
||
|
|
license: apache-2.0
|
||
|
|
library_name: transformers
|
||
|
|
base_model: unsloth/medgemma-4b-pt
|
||
|
|
tags:
|
||
|
|
- medical
|
||
|
|
- ecg
|
||
|
|
- cardiology
|
||
|
|
- report-generation
|
||
|
|
- unsloth
|
||
|
|
- gemma
|
||
|
|
- fine-tuned
|
||
|
|
pipeline_tag: text-generation
|
||
|
|
---
|
||
|
|
|
||
|
|
# MedGemma-4B ECG Report Generator
|
||
|
|
|
||
|
|
This is a **fully merged, standalone model** fine-tuned from `unsloth/medgemma-4b-pt` for ECG interpretation and clinical report generation. It was trained using the Unsloth library for high-efficiency, memory-optimized fine-tuning.
|
||
|
|
|
||
|
|
This model is designed to take structured output from a primary ML classifier (which provides findings like "Atrial Fibrillation: 82% confidence, Present") and synthesize it into a coherent, human-readable clinical report, complete with an impression, detailed analysis, and clinical recommendations.
|
||
|
|
|
||
|
|
## Model Details
|
||
|
|
|
||
|
|
- **Base Model:** `unsloth/medgemma-4b-pt`
|
||
|
|
- **Fine-tuning Method:** Unsloth + LoRA (merged into base model)
|
||
|
|
- **Training Data:** 500 curated ECG interpretation examples.
|
||
|
|
- **Evaluation Score:** The model achieved an average structural correctness score of **1.000 / 1.0** on a hold-out set.
|
||
|
|
|
||
|
|
## Usage
|
||
|
|
|
||
|
|
This model follows a standard instruction format. Provide the instruction and the structured input to get a clinical report.
|
||
|
|
|
||
|
|
```python
|
||
|
|
from transformers import AutoTokenizer, AutoModelForCausalLM
|
||
|
|
import torch
|
||
|
|
|
||
|
|
model_name = "OussamaEL/MedGemma-4B-ECG"
|
||
|
|
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
||
|
|
model = AutoModelForCausalLM.from_pretrained(
|
||
|
|
model_name,
|
||
|
|
torch_dtype=torch.bfloat16,
|
||
|
|
device_map="auto",
|
||
|
|
)
|
||
|
|
|
||
|
|
# Alpaca prompt format is required
|
||
|
|
alpaca_prompt = """Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.
|
||
|
|
### Instruction:
|
||
|
|
{}
|
||
|
|
### Input:
|
||
|
|
{}
|
||
|
|
### Response:
|
||
|
|
{}"""
|
||
|
|
|
||
|
|
instruction = "You are a medical AI assistant specializing in ECG interpretation. Analyze the ECG findings and patient context to generate a clinical report."
|
||
|
|
|
||
|
|
input_text = """ECG FINDINGS:
|
||
|
|
- Atrial Fibrillation (AFIB): 95% confidence, Present
|
||
|
|
- Sinus Tachycardia (STACH): 88% confidence, Present
|
||
|
|
|
||
|
|
PATIENT CONTEXT:
|
||
|
|
68-year-old male with diabetes and hypertension presents with 2 days of worsening shortness of breath and leg swelling."""
|
||
|
|
|
||
|
|
inputs = tokenizer(
|
||
|
|
alpaca_prompt.format(instruction, input_text, ""),
|
||
|
|
return_tensors="pt"
|
||
|
|
).to("cuda")
|
||
|
|
|
||
|
|
outputs = model.generate(**inputs, max_new_tokens=256)
|
||
|
|
print(tokenizer.decode(outputs[0], skip_special_tokens=True).split("### Response:")[1].strip())
|
||
|
|
```
|
||
|
|
|
||
|
|
This model is intended for research and development purposes and is not a substitute for professional medical advice.
|