Skip to content

Laboratoire de frontières de décision

Sondez la frontière de décision, et pas seulement le point. Après chaque étiquette, Potato demande si une modification contrefactuelle minimale la changerait, et produit ainsi des ensembles de contraste et du contrôle qualité à partir d'une annotation ordinaire.

Nouveau dans la v2.7.0

Tout outil d'annotation recueille des étiquettes ponctuelles : l'élément X reçoit l'étiquette Y. Le laboratoire de frontières de décision (Boundary Lab) fait recueillir à Potato des frontières de décision. Dès qu'un annotateur valide une étiquette, Potato lui montre des modifications contrefactuelles minimales du texte et lui demande, une sonde à la fois :

Vous avez répondu Polite. Est-ce que cela tiendrait après cette modification ?

Après chaque étiquette, une sonde contrefactuelle sur un diff coloré : « est-ce que cela tiendrait toujours ? »

Chaque réponse tient en un clic. L'annotation ordinaire produit alors trois choses qu'un simple export d'étiquettes ne donne pas.

  1. Des ensembles de contraste, gratuitement. Chaque sonde à laquelle on répond forme une paire étiquetée (original, contrefactuel) : ces données augmentées par contrefactuels dont on a montré qu'elles améliorent la robustesse des modèles (Gardner et al. 2020 ; Kaushik et al. 2020). Construire un ensemble de contraste demande d'ordinaire un travail à part, et coûteux.
  2. Des justifications de frontière. Quand une étiquette bascule, l'annotateur dit ce qui a franchi la ligne. Ces justifications pointent exactement là où votre livre de codes est ambigu.
  3. Un contrôle qualité invisible. Les sondes d'invariance sont des paraphrases qui préservent le sens, et un annotateur cohérent ne bascule jamais dessus. Ceux qui basculent sont signalés sur le tableau de bord, ce qui vous donne un signal d'attention sans glisser le moindre faux élément étalon.

Configuration

yaml
boundary_probing:
  enabled: true
  schema: politeness          # scheme to probe (default: first radio scheme)
  probes_per_item: 3          # probes per (instance, label), invariance included
  include_invariance: true    # add one paraphrase probe (the QC signal)
  sources:                    # probe generation tiers, in priority order
    - precomputed
    - llm
    - rules
  precomputed_key: counterfactuals   # item-data field for precomputed probes
  rationale_on_flip: true     # ask "what crossed the line?" when a label flips
  debounce_ms: 900            # delay between label selection and probe fetch

Sources des sondes

Les sondes proviennent de trois niveaux. Les niveaux suivants remplissent les emplacements que les précédents ont laissés vides, si bien que la fonctionnalité se dégrade en douceur.

precomputed — livrez des contrefactuels choisis avec vos données. Déterministe, et idéal pour les études contrôlées :

json
{"id": "req_02", "text": "Send me the slides before the meeting.",
 "counterfactuals": [
   {"text": "Please send me the slides before the meeting.", "kind": "flip",
    "edit_hint": "added \"please\""},
   {"text": "Before the meeting, send me the slides.", "kind": "invariance",
    "edit_hint": "reordered clauses"}
 ]}

llm — génère les sondes à la volée avec n'importe quel point de terminaison IA configuré (Anthropic, OpenAI, Ollama, vLLM). Les sondes sont générées une seule fois par (instance, étiquette) et partagées entre annotateurs, si bien que le coût LLM dépend de la taille du jeu de données et non du nombre d'annotateurs.

rules — transformations lexicales déterministes : inversion des négations, échange d'intensificateurs, marqueurs de politesse, intensité de la ponctuation, et paraphrases par contraction ou salutation pour l'invariance. Aucune dépendance, aucun appel de modèle, ce qui permet de faire tourner le laboratoire sans aucun LLM configuré.

Types de sondes et verdicts

TypeSignificationComportement attendu
flipLa plus petite modification destinée à franchir la frontière de l'étiquettePeut basculer ou tenir — les deux cas sont informatifs
invarianceParaphrase préservant le sensNe devrait jamais basculer ; un basculement indique une incohérence

Les annotateurs répondent à chaque sonde par tient (l'étiquette survit), bascule (l'étiquette change, et ils choisissent la nouvelle en expliquant éventuellement pourquoi) ou impossible à dire.

Le tableau de bord

Sur /boundary/dashboard (accès administrateur) :

  • Sensibilité de la frontière par étiquette — parmi les modifications minimales visant chaque étiquette, la part qui a fait basculer. Un taux de basculement de 90 % signifie que l'étiquette tient sur un fil ; 10 % signifie qu'elle résiste aux petites perturbations.
  • Cohérence d'invariance par annotateur — taux de « tient » de chaque annotateur sur les sondes de paraphrase, signalé en rouge sous 60 %.
  • Où les étiquettes basculent — une galerie des basculements confirmés, avec les diffs au niveau des mots et les justifications des annotateurs.

Export de l'ensemble de contraste

GET /boundary/api/export (administrateur) télécharge du JSONL, une paire étiquetée par sonde à laquelle il a été répondu :

json
{"instance_id": "req_02", "schema": "politeness",
 "original_text": "Send me the slides before the meeting.",
 "original_label": "Impolite",
 "counterfactual_text": "Please send me the slides before the meeting.",
 "counterfactual_label": "Neutral",
 "kind": "flip", "flipped": true,
 "rationale": "please softens the command",
 "edit_hint": "added \"please\"", "probe_source": "precomputed",
 "annotator": "alice", "timestamp": 1783827299.4}

Les verdicts holds s'exportent avec un counterfactual_label égal à l'étiquette d'origine, ce qui en fait de bons négatifs difficiles. Les verdicts unsure sont exclus.

Notes de conception

  • Les sondes sont mises en cache par (instance, schéma, étiquette) et partagées entre annotateurs, de sorte que la cohérence d'invariance est comparable d'un annotateur à l'autre.
  • Le panneau de sondes est une surcouche. Il ne bloque jamais le flux d'annotation principal, répondre aux sondes est facultatif, et les annotateurs peuvent le fermer à tout moment.
  • Le sondage ne cible pour l'instant qu'un seul schéma à choix unique (radio) par tâche.

Pour aller plus loin