The Sunday Prompt #30 – 17/03/2024
Questo numero lo dedico all’amico Stefano Gatti, che ogni sabato propone con la sua newsletter “La Cultura del dato” contenuti interessanti in materia di dato e algoritmi.
Chi si occupa di dati, infatti, normalmente ha come prima fonte di informazione delle tabelle che devono essere “maneggiate” per estrarre le informazioni giuste.
L’avanzata degli LLM potrebbe essere di grande aiuto in questo compito, ma fino ad oggi i prompt generici utilizzati in realtà non hanno dato risultati soddisfacenti.
Non meno di una settimana fa, è stato presentato da alcuni ricercatori di Google (https://blog.research.google/2024/03/chain-of-table-evolving-tables-in.html) una nuova tecnica di prompting la Chain of Table che affronta proprio tale problema.
Vediamo di cosa si stratta.
Un trucchetto niente male
In sintesi i ricercatori hanno esteso il concetto di Chain of Thought, suddividendo i compiti richiesti al LLM per facilitare la comprensione del contesto.
La particolarità è che ogni prompt si compone di una tripla (Domanda, Catena delle operazioni e Tabella) e in modo che attraverso una serie di iterazioni si vanno ad aggiungere o eliminare i dati all’interno di tabelle intermedie così da facilitare le operazioni per i passaggi successivi.
Il metodo ha fornito risultati più precisi rispetto a prompt generici proprio per le operazioni che, ad ogni passaggio, vengono effettuate sulle tabella. In questa maniera vi è un processo iterativo che porta ad inserire la tabella risultato di ciascuna operazione nella fase successiva, fino ad arrivare alla risposta finale.
Come si legge nel paper disponibile qui
https://arxiv.org/pdf/2401.04398.pdf
Estendiamo il concetto di catena del pensiero (CoT) all’ambiente tabellare, dove trasformiamo la tabella di input per memorizzare i risultati intermedi. Questo approccio al ragionamento tabellare in più fasi con l’evoluzione della tabella porta a una comprensione più accurata della tabella stessa.
Come funziona
CHAIN-OF-TABLE consente ai LLM di pianificare dinamicamente una catena di operazioni su una tabella in risposta a una determinata domanda. Utilizza operazioni atomicheper costruire la catena di tabelle. Queste operazioni includono l’aggiunta di colonne, la selezione di righe o colonne, il raggruppamento e l’ordinamento, operazioni comuni nello sviluppo di SQL e DataFrame.
Il Chain of Table applica uno specifico algoritmo per cui il LLM applica ricorsivamente delle operazioni basate sulla Domanda che viene posta al LLM e sulla tabella di valori (nonché sulle successive tabelle generate).
E’ interessante notare che gli argomenti dell’operazione successiva vengono creati dallo stesso LLM così da indurlo a procedere per gradi nel trovare la risposta.
Questo metodo è stato denominato dai ricercatori DynamicPlan, ossia una pianificazione dinamica delle operazioni successive tramite l’apprendimento del contesto aggiornato.
Il tutto si risolve in un “ragionamento tabellare” da parte del LLM che così ha più probabilità di estrarre le informazioni corrette dalla tabella iniziale.
Il modello di prompt è il seguente:
mentre quello per generare gli argomenti delle operazioni (funzioni) è questo:
Il prompt Chain of Table
Il prompt prevede prima di fornire una serie di indicazioni (anche con tecnica few-shot) e poi, una volta chiusa la parte di istruzioni, lo si può utilizzare per esaminare dati nelle tabelle.
Se la tabella ha bisogno solo di alcune righe per rispondere alla domanda, usa f_select_row() per selezionare queste righe.
Ad esempio data la tabella:
/*
col : Squadra in casa | Punteggio squadra in casa | Squadra in trasferta | Punteggio squadra in trasferta | Sede | Folla
riga 1 : st kilda | 13.12 (90) | melbourne | 13.11 (89) | moorabbin oval | 18836 riga 2 : south melbourne | 9.12 (66) | footscray | 11.13 (79) | lake oval | 9154
riga 3 : richmond | 20.17 (137) | fitzroy | 13.22 (100) | mcg | 27651
*/
Domanda : Quale punteggio della squadra di casa è più alto, richmond o st kilda? Funzione: f_select_row(riga 1, riga 3)
Spiegazione: La domanda chiede il punteggio della squadra di casa di richmond e st kilda.
Abbiamo bisogno di conoscere le informazioni di richmond e st kilda nella riga 1 e nella riga 3. Selezioniamo la riga 1 e la riga 3.
 Se la tabella ha bisogno solo di alcune colonne per rispondere alla domanda,si usa f_select_column() per selezionare queste colonne. Ad esempio,
 ……
Se la domanda chiede di indicare elementi con lo stesso valore e il numero di questi elementi, si utilizza f_group_by() per raggruppare gli elementi. Ad esempio,
  ……
 Se la domanda chiede l’ordine degli elementi in una colonna, si usa f_sort_by() per ordinare gli elementi. Ad esempio,
  ……
Ecco alcuni esempi di utilizzo delle operazioni per rispondere alla domanda.
Data la tabella:
/*
col : Data | Divisione | Lega | Stagione regolare | Playoffs | Open Cup
riga 1 : 2001/01/02 | 2 | USL A-League | 4°, Western | Quarti di finale | Non si è qualificato riga 2 : 2002/08/06 | 2 | USL A-League | 2°, Pacific | 1° turno | Non si è qualificat riga 5 : 2005/03/24 | 2 | USL First Division | 5° | Quarti di finale | 4° turno
*/
Domanda: qual è stato l’ultimo anno in cui questa squadra ha fatto parte della usl a- league? Catena di funzioni: f_add_column(Year) -> f_select_row(row 1, row 2) -> f_select_column(Year, League) -> f_sort_by(Year) -> <END>Â
Altri prompt che specificano operazioni possono essere:
Per rispondere alla domanda, puoi usare f_add_column() per aggiungere altre colonne alla tabella. Le colonne aggiunte devono avere questi tipi di dati:
- Numerico: le stringhe numeriche che possono essere utilizzate in ordinamento, somma
- Datetype: le stringhe che descrivono una data, come anno, mese, giorno.
- Stringa: altre stringheÂ
La tipologia di operazioni (funzioni) che possono essere indicate al LLM è sostanzialmente analoga a quella che già si usa in SQL e serve a far fare al modello dei passaggi intermedi, estraendo i dati rilevanti dalla tabella iniziale per poi creare nuove tabelle su cui compiere altre operazioni, per arrivare ad una risposta più precisa.
Conclusioni
Come tutti i prompt bisognerà cercare di affinare la tecnica, ma il metodo di applicare una “catena di tabelle” per poter selezionare le informazioni più opportune è sicuramente di aiuto per utilizzare gli LLM con dati strutturati. C’è solo da provare e riprovare.
Se avete suggerimenti, consigli o volete affrontare un argomento specifico nei prossimi numeri potete proporlo nei commenti.
👋🏻 Happy prompting!
P.S. mi sembrava inutile dedicare questo numero della newsletter all’AI Act, dato che ne abbiamo parlato varie volte e che in questi giorni di contenuti sul tema non ne mancano. Magari ne parliamo in seguito.