Edit model card

DoctorGPT

This model is a fine-tuned version of microsoft/BioGPT-Large on a formatted version of the MedQuad-MedicalQnADataset dataset. It achieves the following results on the evaluation set:

  • Loss: 1.1114

Model description

The base model used is Microsoft's BioGPT, it was fine-tuned with a custom prompt for a conversational chatbot between a patient and a doctor. The prompt used is as follows:

"""You are a Doctor. Below is a question from a patient. Write a response to the patient that answers their question\n\n"

### Patient: {question}"

### Doctor: {answer}
"""

Inference

The fine-tuned model has a saved generation config, to use it:

model_config = GenerationConfig.from_pretrained(
    DoctorGPT
)

This config is a diverse beam search strategy:

diversebeamConfig = GenerationConfig(
    min_length=20,
    max_length=256,
    do_sample=False,
    num_beams=4,
    num_beam_groups=4,
    diversity_penalty=1.0,
    repetition_penalty=3.0,
    eos_token_id=model.config.eos_token_id,
    pad_token_id=model.config.pad_token_id,
    bos_token_id=model.config.bos_token_id,
)

For best results, please use this as your generator function:

def generate(query):
  sys = "You are a Doctor. Below is a question from a patient. Write a response to the patient that answers their question\n\n"
  patient = f"### Patient:\n{query}\n\n"
  doctor = f"### Doctor:\n "

  prompt = sys+patient+doctor

  inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
  generated_ids = model.generate(
                          **inputs,
                          generation_config=generation_config,
                          )
  outputs = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
  answer = '.'.join(answer.split('.')[:-1])
  torch.cuda.empty_cache()
  return answer + "."

Intended uses & limitations

This is a private project for fine-tuning a medical language model, it is not intended to be used as a source of medical advice.

Training and evaluation data

More information needed

Training procedure

Training hyperparameters

The following hyperparameters were used during training:

  • learning_rate: 0.0005
  • train_batch_size: 4
  • eval_batch_size: 4
  • seed: 42
  • gradient_accumulation_steps: 16
  • total_train_batch_size: 64
  • optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
  • lr_scheduler_type: cosine
  • lr_scheduler_warmup_ratio: 0.03
  • num_epochs: 3
  • mixed_precision_training: Native AMP

Training results

Training Loss Epoch Step Validation Loss
No log 0.25 51 1.2418
1.3267 0.5 102 1.1900
1.3267 0.75 153 1.1348
1.1237 0.99 204 1.0887
1.1237 1.24 255 1.1018
0.7527 1.49 306 1.0770
0.7527 1.74 357 1.0464
0.7281 1.99 408 1.0233
0.7281 2.24 459 1.1212
0.4262 2.49 510 1.1177
0.4262 2.73 561 1.1125
0.4124 2.98 612 1.1114

Framework versions

  • Transformers 4.36.0.dev0
  • Pytorch 2.1.0+cu118
  • Datasets 2.15.0
  • Tokenizers 0.15.0
Downloads last month
76
Safetensors
Model size
1.57B params
Tensor type
F32
ยท

Finetuned from

Space using RobCzikkel/DoctorGPT 1