Views
No views yet
[unused0]) right before a masked slot, and the model fills that slot with a single token: 1 if the option above it is correct, 0 if it isn't.1import torch
2from transformers import AutoTokenizer, AutoModelForMaskedLM
3
4model_id = "bofenghuang/doctomodernbert-fr-large-instruct-v0.1" # or a local path
5tokenizer = AutoTokenizer.from_pretrained(model_id)
6model = AutoModelForMaskedLM.from_pretrained(model_id).eval()
7
8question = "Concernant la prise en charge de la fièvre chez un enfant de 3 ans, indiquer la (les) proposition(s) exacte(s) :"
9options = {
10 "a": "L'administration de paracétamol à une dose adaptée au poids est recommandée",
11 "b": "L'aspirine est l'antipyrétique de première intention",
12 "c": "Une hydratation régulière doit être assurée",
13 "d": "Il est recommandé de couvrir l'enfant avec plusieurs couches de vêtements",
14 "e": "Un bain d'eau froide est recommandé pour faire baisser la température",
15}
16
17prompt = (
18 "** Instructions **\n"
19 "You are a medical expert. Read the following multiple-choice question. "
20 "One or more options may be correct. For each option, answer 1 if it is "
21 "correct and 0 otherwise.\n"
22 "** Question **\n"
23 f"{question}\n"
24 "** Options **\n"
25 + "\n".join(f"- {k}: {v}" for k, v in options.items())
26 + "\n** Answers **"
27 + "".join(f"\n{k}: [unused0] {tokenizer.mask_token}" for k in options)
28)
29
30inputs = tokenizer(prompt, return_tensors="pt")
31mask_pos = (inputs["input_ids"][0] == tokenizer.mask_token_id).nonzero(as_tuple=True)[0]
32true_id, false_id = tokenizer.convert_tokens_to_ids(["1", "0"])
33
34with torch.no_grad():
35 logits = model(**inputs).logits[0]
36
37for k, pos in zip(options, mask_pos):
38 p_correct = torch.softmax(logits[pos, [false_id, true_id]], dim=-1)[1].item()
39 print(f"{k}: {'correct' if p_correct > 0.5 else 'incorrect'} (P={p_correct:.3f})")