Skip to content
Announcements9 min read

Potato 2.11: il motore di etichettatura e le etichette automatiche certificate

Potato 2.11 etichetta i dati con modelli, testa le etichette automatiche su un campione umano in cieco e scrive un certificato. Logout dopo 8 ore di inattività.

Potato Team

Potato 2.11 aggiunge il motore di etichettatura, che etichetta un dataset con dei modelli e usa un campione casuale e in cieco di etichette umane per misurare quanto spesso i modelli sbagliano. Dichiari che cosa devono soddisfare le etichette finali, per esempio che al massimo il 10% delle etichette automatiche accettate sia sbagliato, con una confidenza del 90%. Il motore accetta le etichette automatiche supportate da un test statistico, manda gli item rimanenti alle persone e scrive un certificato che registra che cosa è stato testato e su quante etichette umane. La release estende anche il report di accordo agli oggetti 3D, al temporal grounding, all'annotazione a livelli e alle tracce degli agenti, e corregge un bug sulle immagini che poteva contare come risposti degli item mai toccati.

bash
pip install --upgrade potato-annotation

Note per l'aggiornamento

Le sessioni inattive ora vengono chiuse, per default dopo 8 ore. Prima della 2.11, session_timeout_minutes non aveva alcun effetto su un'app in esecuzione, perché il controllo veniva registrato su un oggetto app che potato start scarta. Una sessione inattiva più a lungo dell'impostazione ora viene cancellata, e la sua richiesta successiva va alla pagina di login. I chioschi e le macchine condivise di laboratorio che restano connessi tutta la notte cominceranno a vedere delle disconnessioni, quindi alza session_timeout_minutes dove uno studio dipende dal restare connessi. Le annotazioni già salvate non sono toccate.

Tre chiavi più vecchie stampano una nota all'avvio. icl_labeling, judge_calibration e pre_annotation continuano a funzionare esattamente come prima, e ciascuna stampa su stderr una riga che inizia con NOTE: e nomina il suo equivalente nel motore. Le note sono solo informative, quindi potato validate --strict non fallisce per causa loro. La rimozione delle chiavi è prevista per la 3.0, e potato label migrate-config scrive al posto tuo il blocco labeling_engine equivalente.

Il motore di etichettatura

Il motore è pensato per studi con più item di quanti le persone possano etichettare e con un modello che ha ragione nella maggior parte dei casi. Tratta i modelli come fonti, provate in cascata nell'ordine in cui le elenchi, e manda un item a una persona dopo l'ultima fonte. Le fonti possono essere LLM, modelli visione-linguaggio, modelli decisionali come Laya, detector YOLO, giudici LLM, giurie, modelli addestrati sulle etichette dello studio stesso, oppure etichette che hai già.

Un contratto è ciò che il motore testa. Il principale, selective_risk, limita la quota di etichette automatiche accettate che sono sbagliate. Il motore sceglie una soglia di confidenza su metà del campione in cieco e la testa sull'altra metà con un test binomiale unilaterale, usando Learn-then-Test a sequenza fissa. Ogni nuovo test viene eseguito a un livello più severo, quindi ricertificare finché un test non passa non gonfia la confidenza. Il contratto ppi riporta la prevalenza di ogni etichetta con un intervallo costruito tramite prediction-powered inference, che resta valido qualunque sia la qualità del modello. no_worse_than_human esegue l'alternative annotator test per sostituire una persona o un giudice, e distributional confronta la distribuzione delle etichette del modello con il modo in cui le persone si dividono sugli item soggettivi.

Una configurazione che certifica un LLM su uno schema di sentiment aggiunge due chiavi a un normale studio:

yaml
assignment_strategy: engine
 
labeling_engine:
  enabled: true
  sources:
    - id: gemma
      kind: llm
      endpoint_type: vllm
      model: google/gemma-4-12B-it-qat-w4a16-ct
      base_url: http://localhost:8001/v1
      confidence: {method: logprob}
  contracts:
    - id: accuracy
      kind: selective_risk
      schema: sentiment
      error: 0.1
      confidence: 0.9
  budgets:
    human_labels: 400

confidence: {method: logprob} legge la confidenza del modello dalle probabilità dei suoi token, il che richiede una chiamata per item ed è di solito il metodo di confidenza meglio calibrato tra quelli del motore. Il contratto ammette al massimo il 10% di etichette accettate sbagliate, e la sua confidenza del 90% è il default di Potato. budgets.human_labels fissa un tetto alle richieste umane che il motore può aprire, e 400 è il tetto usato dall'esempio testuale distribuito con Potato.

L'esempio testuale distribuito con Potato fa passare 481 recensioni attraverso una cascata con Laya davanti a Gemma 12B. In quell'esecuzione il contratto al 10% è stato soddisfatto con 165 etichette umane, e il motore ha accettato 316 etichette automatiche, tutte di Gemma perché la soglia di Laya non è mai stata fissata. Il loro errore misurato rispetto alle etichette di riferimento era del 7,6%. L'esempio con le tracce degli agenti ha 288 tracce sintetiche con esiti di riferimento. Il giudice aveva ragione sull'80% di esse ma dava una confidenza di 1,0 a ogni verdetto, quindi selective_risk non aveva nulla su cui fissare una soglia ed è rimasto non realizzabile. L'intervallo PPI per il successo del task ottenuto dagli stessi dati, [0,57; 0,76], copriva il tasso di riferimento di 0,60, mentre il giudice da solo diceva 0,76.

I limiti di un contratto soddisfatto

Un contratto soddisfatto è un'affermazione sull'accordo con le persone che hanno etichettato il campione. Il motore non verifica che quelle persone abbiano ragione, quindi un contratto testato contro annotatori distratti certifica l'accordo con annotatori distratti. Tre regole fanno sì che l'affermazione regga. Le richieste di calibrazione sono in cieco, quindi la pagina non mostra pre-annotazioni, verdetti del giudice o aiuti IA finché una persona ne ha una in carico. Le soglie vengono scelte su una metà del campione e testate sull'altra. Solo le etichette umane certificano, e qualsiasi modifica a una fonte, a un prompt o a uno schema segna i contratti interessati come stale finché non vengono testati di nuovo.

Le interfacce del motore

Lo stesso file engine.sqlite sta dietro a ogni interfaccia, quindi puoi avviare uno studio in una e certificarlo in un'altra:

  • potato label run|status|certify|certificate|export|calls|distill|optimize|migrate-config dalla riga di comando;
  • una REST API sotto /api/engine/v1;
  • cinque strumenti engine_* nel server MCP;
  • potato.labeling_engine.sdk.Study in Python; e
  • una pagina di amministrazione in /admin/labeling-engine con lo stato dei contratti, la curva errore-copertura, un diagramma di affidabilità per fonte e il log delle chiamate ai modelli.

potato label export scrive le etichette con la loro provenienza, il certificato in JSON, Markdown e HTML, una dataset card e il log delle chiamate. Il motore di etichettatura accompagna passo per passo in un primo studio, e Contratti del motore di etichettatura spiega che cosa testa ogni contratto e come fallisce.

Solo Mode

Solo Mode ora può nascondere il suo suggerimento. solo_mode.suggestions trattiene l'etichetta dell'LLM su ogni item oppure su un campione casuale. Un suggerimento sullo schermo attira la risposta verso di sé, quindi il passaggio di consegne legge l'accordo sugli item in cieco. I modelli decisionali (laya e qualsiasi server /v1/systemone) possono fare da primo livello veloce, e Solo Mode controlla ai_budget.cap_usd del progetto prima che inizi l'etichettatura e prima di ogni batch. Sono nuovi anche un gold set, una giuria di etichettatura e l'ordinamento a curriculum. Quando il motore è attivo, Solo Mode scrive le sue predizioni nell'archivio del motore, così il motore può calibrarle e certificarle. Solo Mode contiene le configurazioni.

Accordo

/admin/iaa ora riporta l'accordo su spatial_annotation, temporal_grounding, tiered_annotation e sui cinque schemi per le tracce degli agenti, che prima saltava come non supportati. Gli oggetti 3D e i segmenti temporali ricevono un accordo medio sugli insiemi abbinati, che non è corretto per il caso, e i passi delle tracce degli agenti ricevono l'alpha di Krippendorff e il kappa di Cohen, con ogni passo di ogni traccia come unità. /admin/api/agreement non riporta più gli schemi strutturati e rimanda invece a /admin/iaa, perché, ridotti ai nomi delle etichette, quegli schemi mostravano un accordo perfetto tra ogni coppia di annotatori. Due segmenti identici di lunghezza zero ora contano come concordi. Publishing e Paper Mode escludono gli annotatori automatici dalle etichette gold e dalle cifre di accordo.

Correzioni che riguardano gli studi 2.10

Tre correzioni possono cambiare numeri che hai già raccolto o riportato:

  • Una pagina di immagini salvava da sola una risposta precompilata. In uno schema image_annotation con pre_annotation, il canvas salvava le forme precompilate come risposta dell'annotatore quando ricalcolava il proprio layout dopo il caricamento, quindi un item mai toccato contava come risposto. In uno studio di immagini 2.10 con pre-annotazioni, un item le cui forme salvate coincidono esattamente con la sua pre-annotazione potrebbe non essere mai stato toccato, quindi tratta quegli item come non revisionati a meno che i dati sui tempi non dicano altrimenti.
  • Paper Mode calcolava il kappa con codice proprio. Paper Mode e il modulo dell'accordo ora calcolano il kappa di Cohen con la stessa funzione di /admin/iaa, quindi un kappa riportato da Paper Mode prima della 2.11 può differire da quello che /admin/iaa mostra per gli stessi dati.
  • L'aggiudicazione e l'auto-scaling di Prolific contavano gli annotatori automatici. Gli annotatori automatici potevano mandare un item in aggiudicazione, min_human_annotations veniva ignorato, e l'auto-scaling di Prolific contava le annotazioni automatiche rispetto ai tetti per item.

Le altre correzioni cambiano ciò che uno studio può fare. Le immagini su host che non inviano header CORS, come cocodataset.org, ora si caricano. Su un'immagine del genere, il riempimento, SAM e la segmentazione da prompt testuale ora dicono perché non possono leggerla. Una forma pre-annotata senza color prende il colore della sua etichetta invece di venire scartata. "Generate prompt" di Solo Mode ora chiede al modello di revisione di scrivere il primo prompt. I rifiuti tramite potato mcp connect tornano come errori dello strumento invece che come successi. La scoperta dei casi limite ora funziona su vLLM, che non restituiva i campi dei casi limite finché non sono stati aggiunti allo schema della risposta.

Installare la 2.11

Aggiorna con pip install --upgrade potato-annotation, oppure scarica ghcr.io/davidjurgens/potato:2.11.0. Il modello decisionale Laya in-process richiede il nuovo extra decision, pip install 'potato-annotation[decision]', che resta fuori da all perché si porta dietro torch. Le note di rilascio elencano ogni modifica, e Novità ha il riepilogo di ogni release 2.x.