/ Модель

Характеристики

Контекст
262 144 токена
Лицензия
Apache 2.0
Архитектура
qwen3_5 · dense
Базовая модель
Qwen3.5-2B
Библиотека
transformers
Опубликована
30 сен 2026

docto-decision-qwen3.5-2b-fr-v0.1

Изображение и текст → текст

Французская дообученная модель Qwen для оценки вероятностей вариантов ответа в медицинской сортировке, маршрутизации пациентов и проверках безопасности.

114скачиваний за 30 дней0лайковвеса обновлены9 окт 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Изображение → текст» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

Docto Decision Qwen3.5 2B FR v0.1 — французская медицинская модель принятия решений, созданная на базе Qwen/Qwen3.5-2B. Это дообученная LoRA-модель, объединённая с базовыми весами; она принимает текст пациента, клиническую запись или описание случая, вопрос и варианты ответа, а затем оценивает вероятность каждого варианта. В README указан размер базовой модели 2,27 млрд параметров. Модель поддерживает изображения согласно метаданным, однако карточка описывает сценарии принятия решений по тексту.

Модель предназначена для классификации сообщений пациентов, оценки срочности, выявления тревожных признаков, направления к специалисту, определения намерения обращения и проверок безопасности ответов. Она выдаёт вероятности через один токен — букву варианта или «oui»/«non»; лучше всего работает на задачах, близких к обучающим, и позволяет пробовать новые задачи в режиме zero-shot. Обучение проводилось один проход LoRA на 943 013 французских записях для 108 задач.

Модель выпущена под лицензией Apache-2.0. Это исследовательская модель, не прошедшая клиническую валидацию и не являющаяся медицинским устройством; для медицинских решений необходим контроль специалиста. Она может занижать срочность, хуже справляется с задачами, далёкими от обучения, и с медицинскими вопросами на знания; перед использованием следует проверить калибровку на целевой задаче.

Сценарии применения

  • оценка срочности обращения пациента по сообщению
  • выявление тревожных симптомов и необходимости триажа
  • определение подходящей медицинской специальности для направления
  • классификация намерения и темы сообщения в почте клиники
  • проверка соблюдения правил и рубрик в ответах медицинского помощника

Ограничения

Модель не проходила клиническую валидацию и может занижать срочность, поэтому её нельзя использовать как единственную защиту при триаже. Качество ниже на задачах, далёких от обучающих, и на вопросах, требующих медицинских знаний; калибровку нужно проверять для конкретного применения.

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

🩺 Docto Decision Qwen3.5-2B (v0.1)

Docto Decision Bench

✨ Summary

Docto Decision is a family of French medical decision models. You give a text (a patient message, a clinical note, a case report), a question and the possible answers, and the model returns one probability per answer.

This model is a LoRA fine-tune of Qwen3.5-2B (2.27B parameters), merged into the base weights (the adapter is in adapters/). It answers with a single token, an option letter or « oui » / « non », and the probabilities are read from that token.

The task is defined at inference time by the instruction, the question and the answers. Tasks close to the training ones work best, and new tasks can be tried zero-shot.

🎯 Use cases

areaexamples
Patient messagesurgency level, red flags, triage, specialty routing, health topic
Practice inboxrequest intent, who should answer, visit motive, reminder replies
Assistant safetyinput guardrail, answer compliance, rule and rubric checks, personal identifiers
Clinical textassertion and temporality, medications, allergies, note sections, claim support
Coding and documentsICD-10 chapter, document type, article specialty, passage relevance

🚀 Usage

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

repo = "bofenghuang/docto-decision-qwen3.5-2b-fr-v0.1"
tok = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(repo, dtype=torch.bfloat16).eval().to("cuda")
SYSTEM = ("Tu es un expert médical francophone. On te donne une tâche de décision : une consigne, éventuellement un profil, "
          "un contexte et un élément, une question et les réponses possibles. Résous la tâche. Réponds uniquement par la réponse "
          "demandée, sans explication.")


def decide(task, question, options, context=None, profile=None, item=None, kind="choice"):
    """options: [(key, definition)]. kind: "choice", "score" (levels in order) or "noul" (one option: the proposition)."""
    parts = [f"[TASK] {task}"]
    if profile:
        parts.append(f"[PROFILE] {profile}")
    if context:
        parts.append(f"[CONTEXT]\n{context}")
    if item:
        parts.append(f"[ITEM] {item}")
    parts += [f"[QUESTION] {question}", "[OPTIONS]"]
    if kind == "noul":
        parts += [f"oui : {options[0][1]}", "non : ce n'est pas le cas.", "", "Réponds uniquement par « oui » ou par « non »."]
        answers = ["oui", "non"]
    else:
        answers = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ"[: len(options)])
        parts += [f"{a}) {d}" for a, (_, d) in zip(answers, options)]
        parts += ["", f"Réponds uniquement par la lettre de la bonne réponse ({', '.join(answers)})."]
    messages = [{"role": "system", "content": SYSTEM}, {"role": "user", "content": "\n".join(parts)}]
    text = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True, enable_thinking=False)
    ids = tok(text, return_tensors="pt", add_special_tokens=False).input_ids.to(model.device)
    with torch.no_grad():
        logits = model(ids).logits[0, -1].float()
    first = [tok.encode(a, add_special_tokens=False)[0] for a in answers]  # first token of each answer
    p = torch.softmax(logits[first], -1)
    if kind == "noul":
        return p[0].item()  # P(oui) = P(true)
    return dict(zip([k for k, _ in options], p.tolist()))


decide(task="Déterminer la conduite à tenir la plus appropriée face à ce message.",
       profile="Patient : homme, 58 ans. Antécédents : hypertension.",
       context="Patient : Bonjour, j'ai une douleur dans la poitrine qui serre depuis 30 minutes et qui descend dans le bras gauche.",
       question="Quel niveau d'urgence correspond à cette situation ?",
       options=[("home_care", "Pas d'urgence : auto-surveillance à domicile chez un adulte sans fragilité, ou demande sans symptôme."),
                ("consult_48h", "Consultation dans les 48 heures : médecin traitant, sans caractère de gravité mais qui dure ou gêne."),
                ("same_day", "Consultation le jour même : signe préoccupant sans détresse vitale."),
                ("emergency_now", "Urgence immédiate : appeler le 15 ou se rendre immédiatement aux urgences.")],
       kind="score")
# -> {'home_care': 0.000, 'consult_48h': 0.000, 'same_day': 0.002, 'emergency_now': 0.998}

decide(task="Dire si le signe indiqué est décrit comme présent chez l'enfant dans la conversation.",
       profile="Enfant : bébé de 4 mois, garçon",
       context="Parent : Bonjour, mon fils a 39 de fièvre depuis ce matin, il ne boit presque plus ses biberons et il est très mou.",
       item="Signe : nourrisson de moins de 6 mois qui boit nettement moins que d'habitude",
       question="Ce signe est-il présent d'après le parent ?",
       options=[("present", "Oui, le parent décrit ce signe comme présent.")],
       kind="noul")
# -> 0.65
  • Write each option as a full French sentence: the model reads the definitions. For choice, option order does not matter. For score, keep the levels in order.
  • For noul, pass a single option (the proposition) and read P(true).
  • The text is French and the tags ([TASK], [CONTEXT]...) are English. Leave out empty fields. Up to 26 options (letters A to Z).
  • For throughput, serve it with vLLM, as the benchmark does.

📊 Evaluation

Results on the Docto Decision Bench: 12 decision tasks on real French patient messages and two clinical datasets (DiaMed, MORFITT). The benchmark repository has the data and the evaluation code.

modelmean accuracy [95% CI]mean ECE [95% CI]order consistency [95% CI]latency p50 (ms)
Docto Decision
Docto Decision ModernBERT-fr-base81.04 [79.59, 82.39]6.54 [5.51, 7.68]94.19 [92.47, 95.72]8
Docto Decision Qwen3.5-0.8B81.85 [80.40, 83.29]7.75 [6.67, 8.86]93.57 [91.75, 95.16]37
Docto Decision Qwen3.5-2B (this model)84.91 [83.57, 86.20]7.25 [6.34, 8.24]94.86 [93.58, 95.99]36
Docto Decision Gemma-4-E2B84.94 [83.65, 86.24]7.07 [6.09, 8.11]92.10 [90.11, 93.93]25
Docto Decision MedGemma-1.5-4B86.25 [85.00, 87.57]7.78 [6.91, 8.74]95.09 [93.57, 96.32]41
Docto Decision Qwen3.5-4B88.94 [87.90, 90.06]7.91 [7.13, 8.69]96.98 [95.89, 97.92]47
Docto Decision Gemma-4-E4B90.13 [89.11, 91.10]7.79 [7.00, 8.61]95.15 [93.86, 96.30]27
Open LLMs (zero-shot)
Qwen3.5-0.8B47.80 [45.96, 49.54]23.07 [21.49, 24.65]36.80 [34.56, 39.06]37
Qwen3.5-2B60.12 [58.31, 61.99]17.32 [15.94, 18.87]58.15 [55.05, 61.42]36
Gemma-4-E2B76.49 [75.08, 77.91]21.27 [19.91, 22.59]78.85 [76.73, 81.05]25
MedGemma-1.5-4B59.00 [57.18, 60.79]23.49 [22.13, 24.95]45.57 [42.52, 48.75]41
Qwen3.5-4B77.79 [76.15, 79.44]9.81 [8.51, 11.15]73.88 [71.04, 76.61]47
Gemma-4-E4B80.74 [79.25, 82.25]14.20 [12.91, 15.49]81.72 [79.25, 84.06]27
Frontier LLMs
Gemini-2.5-Flash-Lite83.74 [82.53, 85.01]12.88 [11.75, 14.00]84.40 [82.05, 86.64]312
Gemini-2.5-Flash84.02 [82.49, 85.51]11.71 [10.40, 13.10]79.91 [77.26, 82.58]361
Decision models
Jev89.65 [88.57, 90.71]9.54 [8.78, 10.36]93.09 [91.12, 94.82]239
OpenJev88.15 [86.89, 89.41]10.42 [9.52, 11.35]90.06 [87.93, 92.27]83
Kev-4B81.98 [80.69, 83.27]18.63 [17.51, 19.68]89.24 [86.97, 91.21]46
Kev-9B82.25 [80.86, 83.53]15.85 [14.74, 16.91]89.35 [87.21, 91.28]46
BioDecision-4B77.88 [76.42, 79.38]9.30 [8.19, 10.40]88.32 [86.45, 90.13]41
MedJev-0.8B50.86 [49.05, 52.86]16.51 [15.02, 18.08]67.86 [65.67, 70.14]37
Laya-Multilingual32.95 [31.33, 34.43]30.61 [29.17, 32.17]18.60 [16.48, 20.93]12

This model on each task:

tasknaccuracy [95% CI]ECE
noul:triage_need (silver)53295.68 [93.98, 97.37]4.81
choice:specialty_referral (silver)82492.72 [90.90, 94.54]1.04
score:urgency_level (silver)1,20884.44 [82.37, 86.42]7.82
noul:symptom_presence (silver)32586.15 [82.46, 89.85]2.94
choice:symptom_severity (silver)1,06685.74 [83.58, 87.71]3.92
noul:routine_request (silver)10287.25 [80.39, 93.14]9.98
choice:request_guardrail (silver)5685.71 [76.79, 94.64]4.25
choice:health_topic (silver)23791.14 [86.92, 94.51]2.36
noul:health_topic (silver)24796.76 [94.74, 98.79]7.68
choice:diagnosis_coding (gold, DiaMed)15467.53 [60.39, 75.32]19.68
choice:article_specialty (gold, MORFITT)74559.73 [56.24, 63.22]19.67
mixed:audited_patient_messages (audit)20086.00 [81.00, 90.50]2.86
  • All scores are percentages. Labels: silver = Qwen3.8-27B and Qwen3.5-122B-A10B agree on the answer, gold = human labels of the dataset, audit = blind relabelling by another model.
  • OpenJev is a fine-tune of Qwen3.8-27B, one of the two teachers behind the silver labels, so on the 9 silver tasks it is partly scored against its own teacher's answers.
  • 95% CIs from 1,000 bootstrap resamples of the items in each task. Order consistency: share of answers that stay the same when the options of the 6 choice tasks are shown in 3 different orders.
  • Latency: median time for one request, on one H100 in BF16 (OpenJev in FP8), without inference optimisation. Jev and Gemini are timed from the client, network included.

🏋️ Training

LoRA (rank 16, alpha 32, attention and MLP projections of the language model) on Qwen3.5-2B, 1 epoch at learning rate 1e-4 on docto-decision-data-fr-v0.1 (943,013 decision records, 108 tasks). The target of each record is half the correct answer and half the answer distribution of Qwen3.8-27B.

⚠️ Limitations

  • This is a research model, not a medical device, and it has not been validated clinically. Keep a human in the loop.
  • It can under-estimate urgency. Do not use it as the only safety net for triage.
  • It is weaker on tasks far from the training tasks, and on medical knowledge questions it stays well below large LLMs.
  • Most training labels come from one model family (Qwen), so the model shares its conventions and its errors.
  • French only. Check calibration on your own task before choosing a threshold.

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · transformers

Можно запустить

Подбираем GPU…

Класс архитектуры
Qwen3_5ForConditionalGeneration
Ревизия весов
31b13cf

0 моделей