Skip to content
Cette page n'est pas encore disponible dans votre langue. La version anglaise est affichée.

Cronologia delle Annotazioni

Tieni traccia di ogni azione di annotazione con timestamp per audit e analisi.

Cronologia delle Annotazioni

Potato fornisce un tracciamento completo di tutte le azioni di annotazione con metadati di timestamp granulari. Questo consente l'analisi delle prestazioni, la garanzia della qualità e trail di audit dettagliati.

Panoramica

Il sistema di cronologia delle annotazioni tiene traccia di:

  • Ogni azione di annotazione: Selezioni di etichette, annotazioni span, input di testo
  • Timestamp precisi: Timestamp lato server e lato client
  • Metadati delle azioni: Utente, istanza, schema, valori vecchi/nuovi
  • Metriche di prestazione: Tempi di elaborazione, tassi di azione
  • Attività sospette: Pattern di attività insolitamente veloci o a raffiche

Tracciamento delle Azioni

Ogni modifica di annotazione viene registrata come un AnnotationAction con:

CampoDescrizione
action_idUUID univoco per ogni azione
timestampTimestamp lato server
client_timestampTimestamp lato browser (se disponibile)
user_idUtente che ha eseguito l'azione
instance_idIstanza in fase di annotazione
action_typeTipo di azione eseguita
schema_nameNome dello schema di annotazione
label_nameEtichetta specifica all'interno dello schema
old_valueValore precedente (per aggiornamenti/eliminazioni)
new_valueNuovo valore (per aggiunte/aggiornamenti)
span_dataDettagli dello span per le annotazioni span
server_processing_time_msTempo di elaborazione del server

Tipi di Azione

Il sistema tiene traccia di questi tipi di azione:

  • add_label - Nuova selezione di etichetta
  • update_label - Valore dell'etichetta modificato
  • delete_label - Etichetta rimossa
  • add_span - Nuova annotazione span creata
  • update_span - Annotazione span modificata
  • delete_span - Annotazione span rimossa

Configurazione

Il tracciamento della cronologia delle annotazioni è abilitato per impostazione predefinita. Non è necessaria alcuna configurazione aggiuntiva.

Metriche di Prestazione

Il sistema calcola le metriche di prestazione dalla cronologia delle azioni:

python
from potato.annotation_history import AnnotationHistoryManager
 
metrics = AnnotationHistoryManager.calculate_performance_metrics(actions)
 
# Restituisce:
{
    'total_actions': 150,
    'average_action_time_ms': 45.2,
    'fastest_action_time_ms': 12,
    'slowest_action_time_ms': 234,
    'actions_per_minute': 8.5,
    'total_processing_time_ms': 6780
}

Rilevamento di Attività Sospette

Il sistema può rilevare pattern di annotazione potenzialmente problematici:

python
from potato.annotation_history import AnnotationHistoryManager
 
analysis = AnnotationHistoryManager.detect_suspicious_activity(
    actions,
    fast_threshold_ms=500,      # Le azioni più veloci di questo vengono segnalate
    burst_threshold_seconds=2   # Le azioni più ravvicinate di questo vengono segnalate
)
 
# Restituisce:
{
    'suspicious_actions': [...],
    'fast_actions_count': 5,
    'burst_actions_count': 12,
    'fast_actions_percentage': 3.3,
    'burst_actions_percentage': 8.0,
    'suspicious_score': 15.2,
    'suspicious_level': 'Low'
}

Livelli di Sospetto

PunteggioLivelloInterpretazione
0-10NormaleComportamento di annotazione tipico
10-30BassoAlcune azioni veloci, probabilmente accettabili
30-60MedioPattern notevole, potrebbe richiedere revisione
60-80AltoPattern preoccupante, revisione raccomandata
80-100Molto AltoProbabile problema di qualità, revisione immediata

Riferimento API

AnnotationAction

python
from potato.annotation_history import AnnotationAction
 
action = AnnotationAction(
    action_id="uuid-here",
    timestamp=datetime.now(),
    user_id="annotator1",
    instance_id="doc_001",
    action_type="add_label",
    schema_name="sentiment",
    label_name="positive",
    old_value=None,
    new_value=True
)
 
# Serializza in dizionario
data = action.to_dict()
 
# Deserializza da dizionario
action = AnnotationAction.from_dict(data)

AnnotationHistoryManager

python
from potato.annotation_history import AnnotationHistoryManager
 
# Crea una nuova azione con timestamp corrente
action = AnnotationHistoryManager.create_action(
    user_id="annotator1",
    instance_id="doc_001",
    action_type="add_label",
    schema_name="sentiment",
    label_name="positive",
    old_value=None,
    new_value=True
)
 
# Filtra le azioni per intervallo di tempo
filtered = AnnotationHistoryManager.get_actions_by_time_range(
    actions,
    start_time=datetime(2024, 1, 1),
    end_time=datetime(2024, 1, 31)
)
 
# Filtra le azioni per istanza
instance_actions = AnnotationHistoryManager.get_actions_by_instance(
    actions, instance_id="doc_001"
)
 
# Calcola le metriche di prestazione
metrics = AnnotationHistoryManager.calculate_performance_metrics(actions)
 
# Rileva attività sospette
analysis = AnnotationHistoryManager.detect_suspicious_activity(actions)

Casi d'Uso

Garanzia della Qualità

Monitora il comportamento degli annotatori per problemi di qualità:

python
for user_id in get_all_users():
    user_actions = get_user_actions(user_id)
    analysis = AnnotationHistoryManager.detect_suspicious_activity(user_actions)
 
    if analysis['suspicious_level'] in ['High', 'Very High']:
        flag_for_review(user_id, analysis)

Trail di Audit

Tieni traccia delle modifiche per la conformità normativa:

python
instance_actions = AnnotationHistoryManager.get_actions_by_instance(
    all_actions, "doc_001"
)
 
audit_log = [action.to_dict() for action in instance_actions]
with open("audit_doc_001.json", "w") as f:
    json.dump(audit_log, f, indent=2)

Analisi Temporale

Comprendi i pattern temporali delle annotazioni:

python
from collections import Counter
 
hours = Counter(action.timestamp.hour for action in all_actions)
print("Ore di punta per l'annotazione:", hours.most_common(5))

Archiviazione dei Dati

La cronologia delle annotazioni è memorizzata nei file di stato utente:

text
output/
  annotations/
    user_state_annotator1.json  # Include la cronologia delle azioni
    user_state_annotator2.json

Formato di Esportazione

Le azioni vengono serializzate con timestamp ISO 8601:

json
{
  "action_id": "550e8400-e29b-41d4-a716-446655440000",
  "timestamp": "2024-01-15T10:30:45.123456",
  "user_id": "annotator1",
  "instance_id": "doc_001",
  "action_type": "add_label",
  "schema_name": "sentiment",
  "label_name": "positive",
  "old_value": null,
  "new_value": true,
  "server_processing_time_ms": 23
}

Best Practice

  1. Monitoraggio regolare: Controlla periodicamente i rapporti sulle attività sospette
  2. Ottimizzazione delle soglie: Regola le soglie di rilevamento in base alla complessità del compito
  3. Backup delle esportazioni: Esporta regolarmente la cronologia per l'archiviazione a lungo termine
  4. Conformità alla privacy: Considera le politiche di conservazione dei dati per i timestamp

Ulteriori Letture

Per i dettagli di implementazione, consulta la documentazione sorgente.