I Transformers possono generare giochi della NFL presentando QB-GPT

I Transformers possono dare vita a giochi della NFL presentando QB-GPT

Colmare il divario tra GenAI e l’analisi sportiva

Foto di Zetong Li su Unsplash

Dal mio primo articolo su StratFormer, ho ricevuto un buon numero di feedback e idee (quindi, innanzi tutto, grazie!). Ciò mi ha spinto a approfondire il mio lavoro e ad affrontare un ulteriore passo: creare un generatore di traiettorie di calcio. In questo articolo presento QB-GPT, un modello in grado di generare efficacemente traiettorie di calcio una volta forniti alcuni elementi. È possibile trovare uno spazio dedicato HuggingFace qui per giocarci. Successivamente nel mese condividerò il mio lavoro e le mie scoperte su come prevedere in modo migliore le azioni della NFL utilizzando questo tipo di modelli generativi come base. Anche l’industria sta seguendo questo settore, poiché DeepMind Safety Research sta attualmente conducendo ricerche sul calcio con il Liverpool per capire come si muovono i giocatori sul campo.

Tragitto generato da QB-GPT
Tragitto reale

Stratformer, la mia prima idea che ho iniziato nell’ottobre 2021, era un modello solo incoder che prendeva in input una traiettoria, cercava di completarla e prediceva alcuni elementi contestuali ad essa associati (squadra, posizioni e azioni). Mentre questo modello mostrava modelli interessanti (come capire cosa differenzia veramente un RB da un WR), si basava su una visione “a posteriori” del gioco. Ciò che potrebbe essere ancora più interessante è comprendere in modo approfondito come l’assetto dei giocatori, con alcuni elementi contestuali, influisca effettivamente sulle traiettorie della squadra. In altre parole, quando le squadre si affrontano sulla linea di scrimmage, cosa sta per succedere?

Costruendo un tale algoritmo, siamo ora in grado di creare un modello che comprende “veramente” il gioco del calcio, poiché cerca essenzialmente di ricreare azioni a partire da pochi elementi. Questo è l’obiettivo di QB-GPT. GPT è presente perché si basa sugli stessi concetti di decodifica utilizzati da tutti i modelli GPT.

Questo articolo coprirà il modello e i pochi trucchi necessari che ho dovuto implementare per renderlo “ok”. È disponibile uno spazio HuggingFace allegato qui per generare alcune azioni se lo desideri, lo terrò aperto per un tempo limitato a seconda del costo. Sebbene riconosca che sia limitato e soggetto a una serie di miglioramenti, penso che una tale applicazione meriti di essere condivisa con un pubblico più ampio. Se sei interessato a discuterne o ad approfondire alcuni aspetti, i miei contatti sono nell’app e alla fine dell’articolo. Ancora una volta, ho svolto questo lavoro da solo, con i dati che ho potuto trovare e le imperfezioni ad esso correlate (se qualcuno che lavora nel team NFL/NGS legge questo, DM più che aperti)

Parte 1: I dati

I dati necessari per svolgere un compito del genere sono molto difficili da trovare. Mi baso su un tipo specifico di dati forniti solo tramite lo strumento Next Gen Stats (NGS) della NFL, dove, per qualsiasi azione data, posso tracciare fino a 22 giocatori presenti sul campo. Il problema è che questi dati non sono accessibili tramite una richiesta API classica. Tuttavia, dal 2019, la NFL offre una vasta gamma di competizioni di dati su Kaggle, spesso fornite con set di dati provenienti da NGS. Inoltre, alcune persone su GitHub hanno effettuato lo scraping del browser NGS in passato. Non ho provato a farlo e mi sono limitato ai dati disponibili con un formato utilizzabile.

È stato dedicato molto tempo alla fusione dei dati tra loro (circa 200 ore). I compiti più importanti erano:

  • Trovare i giocatori sul campo utilizzando nflVerse
  • Associare le loro posizioni
  • Definire la linea di scrimmage utilizzando i dati di gioco di nflVerse
  • Normalizzare la traiettoria sottraendo la posizione originale del giocatore ad ogni istanza della traiettoria. Pertanto, ogni elemento della traiettoria è una distanza tra il tempo i e il tempo 0.
  • Convertire le distanze in indici (come costruire un vocabolario per un modello BERT)
  • Applicare alcuni controlli di coerenza (ad esempio rimuovendo i giocatori che non sono sul campo)
  • Convertire i dati in formato array e dizionario per TensorFlow

Ho utilizzato Polars durante tutto il processo. Consiglio vivamente a tutti i data scientist, ML engineer, data engineer o persone che lavorano con grandi volumi di dati tabellari di aggiungere rapidamente questo fantastico pacchetto al loro toolkit. TLDR: Polars è migliore di pandas su dataset piccoli e migliore di pypsark su quelli grandi.

In totale, ho compilato 47.991 diverse azioni che rappresentano 870.559 diverse traiettorie di giocatori sul campo (in media 18 giocatori monitorati per azione, purtroppo mai un OL…).

Monitoro la posizione di ogni giocatore con un intervallo di 0,2 secondi, rappresentando 28.147.112 posizioni totali sul campo. Limito i dati ai primi 10 secondi poiché le traiettorie tendono a diventare sempre più caotiche dopo, e quindi difficili da modellare dal punto di vista probabilistico.

Il mio dataset parte dal 2018 al 2022 e copre 3.190 giocatori unici. I dati non sono perfetti ma forniscono un buon campione e possono essere sufficienti per valutare se i transformers sono utili.

Per riassumere, le mie fonti di dati sono:

  • Il NFL Big Data Bowl del 2021 link
  • Il NFL Big Data Bowl del 2022 link
  • Il NFL Big Data Bowl del 2023 link
  • Public git repo NGS Highlights link

Di seguito hai uno schema che rappresenta l’embedding di input per un singolo giocatore:

Poi gli undici giocatori vengono concatenati per azione e quindi troncati per avere sempre un numero di token pari a 256. Ho limitato il numero di frame per un giocatore a 21 (massimo = 21 * 11 = 231) per assicurarmi di avere sempre lo stesso numero di frame per giocatore. Pertanto, ho dovuto creare nuove traiettorie che iniziano direttamente in un dato momento di un’azione poiché la maggior parte delle mie azioni ha più di 21 frame. Ho creato uno step di padding di 12 frame, il che significa che la traiettoria è ora divisa in sotto-traiettorie, ognuna spostata di 12 frame. Questo processo tende a rendere più difficile il compito di previsione per i frame 12, 24, 36 e 48, come vedremo in seguito.

Gli elementi possono essere discussi. Ad esempio, la pertinenza di suddividere il campo con una base di 1 yard o l’utilizzo di un intervallo di frame di 0,2 secondi. Penso che il modello (e quindi i suoi dati di addestramento) sia un punto di partenza e voglio riconoscere che non tutto è perfetto. I feedback e le opinioni sono benvenuti, purché siano pertinenti.

Parte 2: Il modello

Il modello è completamente ispirato all’architettura OpenAI GPT. Si basa su uno strato di embedding che aggiunge diversi elementi contestuali ai token di input. Gli embedding vengono quindi alimentati in un modulo transformers singolo che utilizza l’attention a multi-head con 3 teste. Nel modello Large, viene applicato un secondo modulo transformers. L’output viene quindi alimentato in uno strato denso con attivazione “relu”. Per ottenere le previsioni, applichiamo un’attivazione softmax.

Sono stati necessari due trucchi per adattare l’architettura e l’addestramento:

  • Maschere causali multi-temporali: In un classico GPT, l’attenzione dell’embedding alla posizione i può interessare solo ai token dalla posizione 0 a i-1. Nel nostro caso, poiché sto decodificando completamente il team, ho bisogno dei token al tempo i per interessarmi di tutti i token disponibili tra il tempo 0 e i-1. Invece di avere la cosiddetta “maschera triangolare inferiore”, si ottiene una maschera triangolare multipla.
Maschere di attenzione
Punteggi di attenzione grezzi e sottrazioni delle maschere di attenzione
Punteggi di attenzione con diversa scala vmax
  • Pre-normalizzazione del livello: Ispirato al lavoro di Sik-Ho Tsang, ho implementato il suo modulo proposto Transformers in cui la normalizzazione avviene prima dell’attenzione multi-head e prima di FFN.

Il modello non richiede un elevato numero di livelli di attenzione poiché i modelli sottostanti da modellare sono piuttosto semplici. Ho allenato 4 diverse architetture di modelli utilizzando le stesse impostazioni. I risultati mostrano che le dimensioni dell’embedding svolgono un ruolo cruciale nel livello di precisione che possiamo raggiungere, mentre il numero di moduli di attenzione non migliora significativamente la precisione:

  • Piccolo: dimensione dell’embedding di 64, rappresentando 1.539.452 parametri
  • Piccolo: dimensione dell’embedding di 128, rappresentando 3.182.716 parametri
  • VoAGI: dimensione dell’embedding di 256, rappresentando 6.813.308 parametri
  • Grande: dimensione dell’embedding di 128 ma con due moduli di attenzione, rappresentando 7.666.556 parametri

Credo che quello grande potrebbe raggiungere una migliore prestazione con una revisione approfondita dello scheduler.

(A titolo di confronto, GPT3 ha 175 miliardi di parametri)

I grafici qui di seguito mostrano un confronto di precisione e perdita durante l’allenamento tra i diversi modelli:

Perdita e precisione nei quattro modelli

Parte 3: L’allenamento

Il set di allenamento è composto dall’80% delle traiettorie, che rappresentano 205.851 esempi. Il set di test è composto dal 20% delle traiettorie, che rappresentano 51.463 esempi.

I modelli vengono addestrati utilizzando uno scheduler di callback su 9 epoche in cui il learning rate parte da 1e-3 e termina a 5e-4, con una dimensione del batch di 32.

La perdita è una crossentropy categorica con pesi di classe progettati dai livelli di occorrenze nel set di allenamento (gli interi che si verificano più spesso hanno un peso inferiore nella perdita). I label impostati a -100 non sono conteggiati nella perdita.

Le metriche utilizzate sono:

  • Precisione: il prossimo movimento del team viene previsto esattamente come quello etichettato?
  • Precisione top 3: il prossimo movimento etichettato rientra nelle prime 3 previsioni?
  • Precisione top 5: il prossimo movimento etichettato rientra nelle prime 5 previsioni?
Precisione top 3 e top 5 nei quattro modelli

Infine, è stato effettuato un controllo RMSE sulle coordinate x, y associate a ogni movimento. Questo controllo ci permette di monitorare che oltre a non predire con precisione, non si discosti troppo dalla verità (prevedere una traiettoria di 1 yard quadrata potrebbe essere difficile).

Parte 4: I risultati

Nel complesso, i diversi modelli apprendono ancora i modelli dinamici sottostanti e si comportano relativamente bene sul mio dataset. Possiamo vedere che aumentando le dimensioni dei embeddings aumenta l’accuratezza dei modelli. Il compito di indovinare una traiettoria di 1 yard quadrata è sicuramente sfidante poiché i movimenti su un campo da football non sono guidati da un range così piccolo.

Ho deciso di suddividere queste previsioni in 3 categorie: tempo, tipi di gioco e posizioni.

Precisione e RMSE nel tempo (frames)

I primi 5 frames sono relativamente facili da prevedere per il modello poiché spesso i giocatori iniziano con movimenti simili. C’è una diminuzione dell’accuratezza del 40-50% tra il frame 5 e il 10. Questo è il momento in cui i giochi tendono ad essere diversi e hanno i loro percorsi. Tra i quattro modelli, quello più piccolo ha più difficoltà soprattutto alla fine della traiettoria. Quello VoAGI mostra una performance molto buona anche nel lungo termine (oltre 20 frames). I picchi sono legati all’inizio delle traiettorie acolpate poiché queste vengono alimentate senza alcuna conoscenza passata della traiettoria.

Precisione e RMSE nei tipi di gioco

I giochi relativamente statici sono (senza sorpresa) i più facili da prevedere. Le corse, i passaggi, i calcetti d’inizio e i punti sono (senza sorpresa) i più difficili da indovinare poiché i giocatori si muovono molto di più e con possibili modelli caotici. Non sono visibili differenze significative tra i modelli.

Precisione e RMSE nelle posizioni

La posizione è un fattore molto discriminante con differenze dal 10 al 20% in termini di accuratezza. Nel complesso, le posizioni che si muovono molto sono anche le più difficili da prevedere. I modelli più piccoli e più piccoli tendono ad essere meno precisi in generale.

Parte 5: Cosa ho visto finora giocandoci

La temperatura ideale del modello sembra essere tra 1.5 e 2.5. Ho testato una selezione di 10, 20 e 50. Più si spinge la temperatura e la selezione, più tende a diventare stravagante e a ottenere modelli strani (giocatori che escono dal campo, cambiano direzione, grandi spazi tra due frames).

Tuttavia, sembra fornire modelli interessanti che potrebbero essere utilizzati per simulazioni e riconoscimento dei playbook.

Cosa succede dopo?

Questo modello è grezzo. Potrà essere utilizzato in seguito per esplorare le strategie degli avversari, definirne di nuove e persino utilizzarlo per migliorare il sistema di scouting dei giocatori.

Tuttavia, l’idea principale è vedere se questo modello può effettivamente prevedere risultati di gioco, ovvero guadagni di yard, in modo efficace. Presto condividerò il mio lavoro su un framework di previsione per i giochi NFL basato sulle scoperte in QBGPT. Utilizzando le capacità generative di un tale modello, è possibile trarre un gran numero di scenari dai quali prevedere i giochi sarà un compito più facile 😉

Nel frattempo puoi giocare con QB-GPT su questo spazio di Hugging Face, se ti è piaciuto questo articolo, il lavoro e le scoperte, non dimenticare di condividere e mettere mi piace!

(A meno che non sia diversamente specificato, tutte le immagini sono dell’autore)

Samuel Chaineau: Linkedin