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:
| Campo | Descrizione |
|---|---|
action_id | UUID univoco per ogni azione |
timestamp | Timestamp lato server |
client_timestamp | Timestamp lato browser (se disponibile) |
user_id | Utente che ha eseguito l'azione |
instance_id | Istanza in fase di annotazione |
action_type | Tipo di azione eseguita |
schema_name | Nome dello schema di annotazione |
label_name | Etichetta specifica all'interno dello schema |
old_value | Valore precedente (per aggiornamenti/eliminazioni) |
new_value | Nuovo valore (per aggiunte/aggiornamenti) |
span_data | Dettagli dello span per le annotazioni span |
server_processing_time_ms | Tempo di elaborazione del server |
Tipi di Azione
Il sistema tiene traccia di questi tipi di azione:
add_label- Nuova selezione di etichettaupdate_label- Valore dell'etichetta modificatodelete_label- Etichetta rimossaadd_span- Nuova annotazione span creataupdate_span- Annotazione span modificatadelete_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:
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:
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
| Punteggio | Livello | Interpretazione |
|---|---|---|
| 0-10 | Normale | Comportamento di annotazione tipico |
| 10-30 | Basso | Alcune azioni veloci, probabilmente accettabili |
| 30-60 | Medio | Pattern notevole, potrebbe richiedere revisione |
| 60-80 | Alto | Pattern preoccupante, revisione raccomandata |
| 80-100 | Molto Alto | Probabile problema di qualità, revisione immediata |
Riferimento API
AnnotationAction
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
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à:
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:
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:
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:
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:
{
"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
- Monitoraggio regolare: Controlla periodicamente i rapporti sulle attività sospette
- Ottimizzazione delle soglie: Regola le soglie di rilevamento in base alla complessità del compito
- Backup delle esportazioni: Esporta regolarmente la cronologia per l'archiviazione a lungo termine
- Conformità alla privacy: Considera le politiche di conservazione dei dati per i timestamp
Ulteriori Letture
- Dashboard di Amministrazione - Visualizza le statistiche delle annotazioni
- Tracciamento Comportamentale - Tracciamento a livello di interazione
- Controllo della Qualità - Controlli automatici della qualità
Per i dettagli di implementazione, consulta la documentazione sorgente.