DoctorGPT / README.md
RobCzikkel's picture
Update README.md
19413de
metadata
license: mit
base_model: microsoft/BioGPT-Large
tags:
  - generated_from_trainer
model-index:
  - name: bioGPT
    results: []

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