Skip to content
Questa pagina non è ancora disponibile nella tua lingua. Viene mostrata la versione in inglese.

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.