SlideShare a Scribd company logo
1 of 28
Download to read offline
Progettazione e Sviluppo di un Sistema per Migliorare il
Codice Generato da un Large Language Model Tramite
Genetic Improvement
Damiano Ravalico
Scopo dello studio
Introduzione
La scrittura di programmi software è un’attività complessa e impegnativa, che richiede
abilità, conoscenze e competenze specifiche
I Large Language Models (LLMs), sistemi di intelligenza artificiale, possono essere
utilizzati come supporto ai programmatori
Per l’interfacciamento con questi modelli viene richiesta una descrizione in linguaggio
naturale del compito da risolvere, detta prompt
Prompt vago o un problema troppo complesso −→ risposta incompleta o errata
1/21
Metodologia proposta
Miglioramento del codice software generato da un LLM utilizzando il Genetic Improvement
(GI)
• Fornitura del prompt e delle coppie di valori input e relativi output da parte
dell’utente
• Ottenimento di una soluzione da un LLM e successiva valutazione del codice
• Applicazione del GI in caso di soluzione non ottima
2/21
Specifiche
Focalizzazione sul linguaggio Python
Risoluzione di problemi codificabili con un’unica struttura di funzione
Applicazione del GI mediante Grammatical Evolution (GE), tramite tecnica innovativa per
la definizione di una grammatica dinamica rispetto al problema in esame
Validazione del metodo tramite benchmark PSB2 [3]
3/21
PSB2
Ideato per la ricerca su sintesi automatica di programmi, con tecniche come Genetic
Programming (GP)
Dataset di benchmark che racchiude 25 problemi di programmazione
Libreria Python per l’accesso diretto a coppie di input-output per ciascun problema
Descrizioni testuali di ciascun problema definite in un file csv
4/21
Ottenimento della soluzione
iniziale tramite LLM
Modelli
Lo strumento proposto offre la possibilità di utilizzare diversi modelli, permettendo anche
l’inserimento di ulteriori LLMs.
• Alpaca: versione da 7B e 13B, basato sul modello della società Meta AI, chiamato
Large Language Model Meta AI (LLaMA)
• Modelli di OpenAI: ChatGPT e GPT-4, entrambi accessibili via API
5/21
Inizializzazione
Dati i prompts di ciascun problema, essi vengono ordinatamente dati al LLM scelto
Viene aggiunta una stringa come preambolo, per specificare il tipo di codice richiesto e
incoraggiare l’inserimento dei moduli richiesti
• ”Write a single Python function to solve the following problem inserting the necessary
modules:”
Il risultato, la cui formattazione dipende dal LLM, è sempre una stringa, che può però
contenere testo o altri elementi non interessanti
6/21
Valutazione del codice ottenuto
Tramite l’esecuzione della funzione sui valori di esempio, e confronto del risultato con
l’output atteso, se ne valuta la correttezza
I risultati dei test, la funzione e altri dati vengono salvati in un file JSON unico per
problema dato
Con la ripetizione di questo processo più volte per problema, 10 nello studio proposto, è
possibile ottenere soluzioni diverse dal modello
7/21
Risultati - Alpaca
Nome problema Media (%) Moda (%) Mediana (%) Deviazione std. (%)
A7 A13 A7 A13 A7 A13 A7 A13
Basement 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Bouncing Balls 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Bowling 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Camel Case 29.76 0.00 29.70 0.00 29.70 0.00 1.52 0.00
Coin Sums 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Cut Vector 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Dice Game 0.00 0.92 0.00 1.30 0.00 0.90 0.00 0.24
Find Pair 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Fizz Buzz 79.46 94.08 79.60 94.20 79.45 93.80 1.19 0.79
Fuel Cost 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
GCD 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Indices of Substring 0.00 14.88 0.00 14.80 0.00 14.80 0.00 1.28
Leaders 0.00 5.40 0.00 5.30 0.00 5.35 0.00 0.61
Luhn 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Mastermind 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Middle Character 50.42 0.00 50.50 0.00 50.50 0.00 1.55 0.00
Paired Digits 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Shopping List 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Snow Day 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Solve Boolean 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Spin Words 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Square Digits 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Substitution Cipher 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Twitter 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Vector Distance 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
8/21
Risultati - ChatGPT e GPT-4
Nome problema Media (%) Moda (%) Mediana (%) Deviazione std. (%)
CG G4 CG G4 CG G4 CG G4
Basement 30.00 50.00 0.00 100.00 0.00 100.00 40.31 52.71
Bouncing Balls 2.28 0.47 0.00 0.00 0.00 0.00 2.99 1.49
Bowling 0.80 12.05 0.00 0.00 0.00 0.00 2.25 23.50
Camel Case 64.37 20.62 100.00 0.00 86.20 20.20 43.23 18.63
Coin Sums 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Cut Vector 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Dice Game 1.00 0.73 1.10 1.00 1.00 0.90 0.38 0.40
Find Pair 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Fizz Buzz 0.00 0.45 0.00 0.00 0.00 0.00 0.00 0.97
Fuel Cost 100.00 100.00 100.00 100.00 100.00 100.00 0.00 0.00
GCD 100.00 100.00 100.00 100.00 100.00 100.00 0.00 0.00
Indices of Substring 95.37 90.95 100.00 100.00 100.00 100.00 9.77 11.71
Leaders 83.84 99.86 100.00 100.00 100.00 100.00 34.07 0.44
Luhn 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Mastermind 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Middle Character 100.00 100.00 100.00 100.00 100.00 100.00 0.00 0.00
Paired Digits 100.00 80.65 100.00 81.50 100.00 80.85 0.00 0.89
Shopping List 0.00 10.04 0.00 0.00 0.00 0.00 0.00 31.61
Snow Day 2.32 3.35 0.00 0.00 2.00 4.40 2.47 2.39
Solve Boolean 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Spin Words 100.00 100.00 100.00 100.00 100.00 100.00 0.00 0.00
Square Digits 100.00 100.00 100.00 100.00 100.00 100.00 0.00 0.00
Substitution Cipher 61.26 100.00 100.00 100.00 100.00 100.00 50.03 0.00
Twitter 100.00 0.00 100.00 0.00 100.00 0.00 0.00 0.00
Vector Distance 95.19 89.89 100.00 92.00 93.55 91.60 4.25 4.96
9/21
Applicazione del GI
PonyGE2
PonyGE2 [1]: implementazione Python del GE
Opzione per inserire individui nella popolazione iniziale, al fine di eseguire GI
Grammatica Backus-Naur Form (BNF) per evoluzione e per processo di mappatura
fenotipo-genotipo tramite parser integrato
File txt per definire gli iper-parametri del processo di evoluzione
10/21
Generazione della grammatica dinamica
Tramite la grammatica BNF è possibile esprimere il codice generabile dal GI
La sua dimensione intacca il tempo necessario all’evoluzione:
• Molto grande −→ troppe possibili combinazioni
• Molto piccola −→ perdita di generalità
Utilizzo di una grammatica che racchiude tutto Python mostra come il numero troppo alto
di combinazioni impedisce di ottenere risultati significativi
11/21
Generazione della grammatica dinamica
Riduzione dello spazio di ricerca vincolando alcune parti costitutive, con la produzione
iniziale che permette la definizione di sole funzioni
• <pred> ::= <IMPORT>"def evolve("<vars>"):{:"<NL><code>":}"
Nome della funzione fissato per evitare generazione di individui con modifiche solamente a
questo elemento
<IMPORT> riempito con carattere vuoto e tutti i pacchetti inseriti dal LLM nelle varie
iterazioni
Nomi delle variabili ridotti ad una lista predefinita
12/21
Generazione della grammatica dinamica
Miglioramento della generalità della grammatica con ulteriori produzioni dinamiche
• Metodi e funzioni usate in ogni specifica generazione aggiunti a quelli più comuni già
presenti
• Numeri caratteristici del problema, estratti dal prompt (simbolo/parola)
• Stringhe particolari, estratte dal codice generato ma anche dal prompt tramite
KeyBERT [2]
13/21
File di configurazione del GI
Template del file di GI personalizzato sul
problema a runtime, sostituendo:
• <bnf>
• <train> e <test>
• <seedFolder>
14/21
File di configurazione del GI
<seedFolder> è il percorso relativo della cartella in cui sono specificati gli individui della
popolazione iniziale
Il genotipo degli individui viene ottenuto subito dopo la generazione della grammatica
Per massimizzare la generalità, la funzione di fitness è generica, basata sul numero di test
falliti
15/21
Selezione dei problemi per il GI
Esclusione di alcuni problemi di
PSB2 per la fase di GI:
• Problemi completamente
corretti
• Problemi con codice
generato troppo complesso
Alpaca7B Alpaca13B
Basement Basement
Dice Game Snow Day
Tabella 1: Problemi scelti per i modelli Alpaca.
ChatGPT, GPT-4
Basement
Camel Case
Dice Game
Fizz Buzz
Snow Day
Tabella 2: Problemi scelti per la fase di GI nel caso dei modelli
GPT di OpenAI.
16/21
Esempio - problema Fizz Buzz
Figura 1: Fitness dell’individuo migliore al passare delle generazioni, per 10 iterazioni indipendenti, nel caso di
Fizz Buzz con individui di partenza ottenuti da ChatGPT.
17/21
Tempi di esecuzione
Validazione del processo ripetendo l’esecuzione per ciascun problema scelto per ogni
modello 10 volte
Esperimenti eseguiti su una macchina con Ubuntu 20.04.5 LTS, 8 core su 2 CPU AMD
EPYC 7542 32-Core Processor e GPU NVIDIA A100 80 GB limitata a 20 GB con MIG
Tempo di esecuzione (s)
Problema Alpaca7B Alpaca13B ChatGPT GPT-4
Basement 3057.30 2565.59 82.70 93.33
Camel Case — — 16.17 56.36
Dice Game 2331.98 — 1344.13 3281.47
Fizz Buzz — — 994.48 420.92
Snow Day — 2709.70 18 956.82 3201.40
Tabella 3: Tempi di esecuzione mediati nelle 10 iterazioni, in secondi, del GI. I numeri in grassetto indicano se
è stato ottenuto almeno un ottimo.
18/21
Confronto pre e post GI
Problema A7 A13 CG G4
n< (%) n> (%) n< (%) n> (%) n< (%) n> (%) n< (%) n> (%)
Basement 0.00 23.10 0.00 17.40 30.00 100.00 50.00 100.00
Camel Case — — — — 64.37 100.00 20.62 100.00
Dice Game 0.00 2.20 — — 1.00 8.62 0.73 2.86
Fizz Buzz — — — — 0.00 89.80 0.45 94.90
Snow Day — — 0.00 5.70 2.32 75.06 3.35 8.20
Tabella 4: Percentuale del numero di test passati, mediata sulle 10 iterazioni, prima (n<) e dopo (n>)
l’applicazione del GI. In ordine, i valori sono relativi a Alpaca7B (A7), Alpaca13B (A13), ChatGPT (CG) e
GPT-4 (G4) e per i relativi problemi considerati. In grassetto sono evidenziati i valori che risultano essere
statisticamente significativi rispetto al test di Wilcoxon.
19/21
Conclusioni
Osservazioni
I risultati sono promettenti anche se l’insieme dei problemi trattati è molto ridotto
La grammatica è il collo di bottiglia di questa tecnica
Il tempo richiesto è comunque relativamente lungo
20/21
Sviluppi futuri
Implementazione di LLM ideati per la generazione di codice
Scrittura più precisa dei prompt
Miglioramento della scelta degli iper-parametri per il GI
21/21
Grazie dell’attenzione
21/21
Riferimenti bibliografici
Michael Fenton et al. «PonyGE2: Grammatical Evolution in Python». In: (mar. 2017).
Maarten Grootendorst. KeyBERT: Minimal keyword extraction with BERT.
Ver. v0.3.0. 2020. DOI: 10.5281/zenodo.4461265. URL:
https://doi.org/10.5281/zenodo.4461265.
Thomas Helmuth e Peter Kelly. «PSB2: The Second Program Synthesis Benchmark
Suite». In: Proceedings of the Genetic and Evolutionary Computation Conference. GECCO ’21.
Lille, France: Association for Computing Machinery, 2021, pp. 785–794. ISBN: 9781450383509.
DOI: 10.1145/3449639.3459285. URL: https://doi.org/10.1145/3449639.3459285.

More Related Content

Similar to Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da un Large Language Model Tramite Genetic Improvement - Slides

BeRTOS: Sistema Real Time Embedded Free
BeRTOS: Sistema Real Time Embedded FreeBeRTOS: Sistema Real Time Embedded Free
BeRTOS: Sistema Real Time Embedded FreeDeveler S.r.l.
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality CodeDaniele Mondello
 
High Level Synthesis Using Esterel
High Level Synthesis Using EsterelHigh Level Synthesis Using Esterel
High Level Synthesis Using EsterelAlberto Minetti
 
Clean programming 2020-01-25 @ Modena Tech Summit
Clean programming 2020-01-25 @ Modena Tech SummitClean programming 2020-01-25 @ Modena Tech Summit
Clean programming 2020-01-25 @ Modena Tech SummitDavide Muzzarelli
 
javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - TigerMatteo Baccan
 
Linguaggio V.B.A.
Linguaggio V.B.A.Linguaggio V.B.A.
Linguaggio V.B.A.Agabiti25
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query ProcessingGianluca Hotz
 
Jvm performance Tuning
Jvm performance TuningJvm performance Tuning
Jvm performance TuningMarco Sabatini
 
Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)DotNetMarche
 
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...Idriss Riouak
 
PASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL ServerPASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL ServerAlessandro Alpi
 
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...DamianoRavalico
 
Algoritmo probabilistico di tipo montecarlo per il list decoding elaborato
Algoritmo probabilistico di tipo montecarlo per il list decoding   elaboratoAlgoritmo probabilistico di tipo montecarlo per il list decoding   elaborato
Algoritmo probabilistico di tipo montecarlo per il list decoding elaboratodanielenicassio
 
Introduzione al framework dl4j Antonio berti
Introduzione al framework dl4j Antonio bertiIntroduzione al framework dl4j Antonio berti
Introduzione al framework dl4j Antonio bertiDeep Learning Italia
 

Similar to Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da un Large Language Model Tramite Genetic Improvement - Slides (20)

Thesis Magnone Slides IT
Thesis Magnone Slides ITThesis Magnone Slides IT
Thesis Magnone Slides IT
 
Lezioni 2009
Lezioni 2009Lezioni 2009
Lezioni 2009
 
Java codestyle & tipstricks
Java codestyle & tipstricksJava codestyle & tipstricks
Java codestyle & tipstricks
 
Thesis Amicucci Slides IT
Thesis Amicucci Slides ITThesis Amicucci Slides IT
Thesis Amicucci Slides IT
 
OrientDB & Big Data
OrientDB & Big DataOrientDB & Big Data
OrientDB & Big Data
 
BeRTOS: Sistema Real Time Embedded Free
BeRTOS: Sistema Real Time Embedded FreeBeRTOS: Sistema Real Time Embedded Free
BeRTOS: Sistema Real Time Embedded Free
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
 
High Level Synthesis Using Esterel
High Level Synthesis Using EsterelHigh Level Synthesis Using Esterel
High Level Synthesis Using Esterel
 
Clean programming 2020-01-25 @ Modena Tech Summit
Clean programming 2020-01-25 @ Modena Tech SummitClean programming 2020-01-25 @ Modena Tech Summit
Clean programming 2020-01-25 @ Modena Tech Summit
 
javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - Tiger
 
Linguaggio V.B.A.
Linguaggio V.B.A.Linguaggio V.B.A.
Linguaggio V.B.A.
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query Processing
 
Jvm performance Tuning
Jvm performance TuningJvm performance Tuning
Jvm performance Tuning
 
Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)
 
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
 
PASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL ServerPASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL Server
 
Logging
LoggingLogging
Logging
 
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da u...
 
Algoritmo probabilistico di tipo montecarlo per il list decoding elaborato
Algoritmo probabilistico di tipo montecarlo per il list decoding   elaboratoAlgoritmo probabilistico di tipo montecarlo per il list decoding   elaborato
Algoritmo probabilistico di tipo montecarlo per il list decoding elaborato
 
Introduzione al framework dl4j Antonio berti
Introduzione al framework dl4j Antonio bertiIntroduzione al framework dl4j Antonio berti
Introduzione al framework dl4j Antonio berti
 

Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da un Large Language Model Tramite Genetic Improvement - Slides

  • 1. Progettazione e Sviluppo di un Sistema per Migliorare il Codice Generato da un Large Language Model Tramite Genetic Improvement Damiano Ravalico
  • 3. Introduzione La scrittura di programmi software è un’attività complessa e impegnativa, che richiede abilità, conoscenze e competenze specifiche I Large Language Models (LLMs), sistemi di intelligenza artificiale, possono essere utilizzati come supporto ai programmatori Per l’interfacciamento con questi modelli viene richiesta una descrizione in linguaggio naturale del compito da risolvere, detta prompt Prompt vago o un problema troppo complesso −→ risposta incompleta o errata 1/21
  • 4. Metodologia proposta Miglioramento del codice software generato da un LLM utilizzando il Genetic Improvement (GI) • Fornitura del prompt e delle coppie di valori input e relativi output da parte dell’utente • Ottenimento di una soluzione da un LLM e successiva valutazione del codice • Applicazione del GI in caso di soluzione non ottima 2/21
  • 5. Specifiche Focalizzazione sul linguaggio Python Risoluzione di problemi codificabili con un’unica struttura di funzione Applicazione del GI mediante Grammatical Evolution (GE), tramite tecnica innovativa per la definizione di una grammatica dinamica rispetto al problema in esame Validazione del metodo tramite benchmark PSB2 [3] 3/21
  • 6. PSB2 Ideato per la ricerca su sintesi automatica di programmi, con tecniche come Genetic Programming (GP) Dataset di benchmark che racchiude 25 problemi di programmazione Libreria Python per l’accesso diretto a coppie di input-output per ciascun problema Descrizioni testuali di ciascun problema definite in un file csv 4/21
  • 8. Modelli Lo strumento proposto offre la possibilità di utilizzare diversi modelli, permettendo anche l’inserimento di ulteriori LLMs. • Alpaca: versione da 7B e 13B, basato sul modello della società Meta AI, chiamato Large Language Model Meta AI (LLaMA) • Modelli di OpenAI: ChatGPT e GPT-4, entrambi accessibili via API 5/21
  • 9. Inizializzazione Dati i prompts di ciascun problema, essi vengono ordinatamente dati al LLM scelto Viene aggiunta una stringa come preambolo, per specificare il tipo di codice richiesto e incoraggiare l’inserimento dei moduli richiesti • ”Write a single Python function to solve the following problem inserting the necessary modules:” Il risultato, la cui formattazione dipende dal LLM, è sempre una stringa, che può però contenere testo o altri elementi non interessanti 6/21
  • 10. Valutazione del codice ottenuto Tramite l’esecuzione della funzione sui valori di esempio, e confronto del risultato con l’output atteso, se ne valuta la correttezza I risultati dei test, la funzione e altri dati vengono salvati in un file JSON unico per problema dato Con la ripetizione di questo processo più volte per problema, 10 nello studio proposto, è possibile ottenere soluzioni diverse dal modello 7/21
  • 11. Risultati - Alpaca Nome problema Media (%) Moda (%) Mediana (%) Deviazione std. (%) A7 A13 A7 A13 A7 A13 A7 A13 Basement 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Bouncing Balls 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Bowling 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Camel Case 29.76 0.00 29.70 0.00 29.70 0.00 1.52 0.00 Coin Sums 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Cut Vector 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Dice Game 0.00 0.92 0.00 1.30 0.00 0.90 0.00 0.24 Find Pair 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Fizz Buzz 79.46 94.08 79.60 94.20 79.45 93.80 1.19 0.79 Fuel Cost 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 GCD 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Indices of Substring 0.00 14.88 0.00 14.80 0.00 14.80 0.00 1.28 Leaders 0.00 5.40 0.00 5.30 0.00 5.35 0.00 0.61 Luhn 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Mastermind 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Middle Character 50.42 0.00 50.50 0.00 50.50 0.00 1.55 0.00 Paired Digits 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Shopping List 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Snow Day 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Solve Boolean 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Spin Words 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Square Digits 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Substitution Cipher 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Twitter 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Vector Distance 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 8/21
  • 12. Risultati - ChatGPT e GPT-4 Nome problema Media (%) Moda (%) Mediana (%) Deviazione std. (%) CG G4 CG G4 CG G4 CG G4 Basement 30.00 50.00 0.00 100.00 0.00 100.00 40.31 52.71 Bouncing Balls 2.28 0.47 0.00 0.00 0.00 0.00 2.99 1.49 Bowling 0.80 12.05 0.00 0.00 0.00 0.00 2.25 23.50 Camel Case 64.37 20.62 100.00 0.00 86.20 20.20 43.23 18.63 Coin Sums 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Cut Vector 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Dice Game 1.00 0.73 1.10 1.00 1.00 0.90 0.38 0.40 Find Pair 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Fizz Buzz 0.00 0.45 0.00 0.00 0.00 0.00 0.00 0.97 Fuel Cost 100.00 100.00 100.00 100.00 100.00 100.00 0.00 0.00 GCD 100.00 100.00 100.00 100.00 100.00 100.00 0.00 0.00 Indices of Substring 95.37 90.95 100.00 100.00 100.00 100.00 9.77 11.71 Leaders 83.84 99.86 100.00 100.00 100.00 100.00 34.07 0.44 Luhn 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Mastermind 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Middle Character 100.00 100.00 100.00 100.00 100.00 100.00 0.00 0.00 Paired Digits 100.00 80.65 100.00 81.50 100.00 80.85 0.00 0.89 Shopping List 0.00 10.04 0.00 0.00 0.00 0.00 0.00 31.61 Snow Day 2.32 3.35 0.00 0.00 2.00 4.40 2.47 2.39 Solve Boolean 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Spin Words 100.00 100.00 100.00 100.00 100.00 100.00 0.00 0.00 Square Digits 100.00 100.00 100.00 100.00 100.00 100.00 0.00 0.00 Substitution Cipher 61.26 100.00 100.00 100.00 100.00 100.00 50.03 0.00 Twitter 100.00 0.00 100.00 0.00 100.00 0.00 0.00 0.00 Vector Distance 95.19 89.89 100.00 92.00 93.55 91.60 4.25 4.96 9/21
  • 14. PonyGE2 PonyGE2 [1]: implementazione Python del GE Opzione per inserire individui nella popolazione iniziale, al fine di eseguire GI Grammatica Backus-Naur Form (BNF) per evoluzione e per processo di mappatura fenotipo-genotipo tramite parser integrato File txt per definire gli iper-parametri del processo di evoluzione 10/21
  • 15. Generazione della grammatica dinamica Tramite la grammatica BNF è possibile esprimere il codice generabile dal GI La sua dimensione intacca il tempo necessario all’evoluzione: • Molto grande −→ troppe possibili combinazioni • Molto piccola −→ perdita di generalità Utilizzo di una grammatica che racchiude tutto Python mostra come il numero troppo alto di combinazioni impedisce di ottenere risultati significativi 11/21
  • 16. Generazione della grammatica dinamica Riduzione dello spazio di ricerca vincolando alcune parti costitutive, con la produzione iniziale che permette la definizione di sole funzioni • <pred> ::= <IMPORT>"def evolve("<vars>"):{:"<NL><code>":}" Nome della funzione fissato per evitare generazione di individui con modifiche solamente a questo elemento <IMPORT> riempito con carattere vuoto e tutti i pacchetti inseriti dal LLM nelle varie iterazioni Nomi delle variabili ridotti ad una lista predefinita 12/21
  • 17. Generazione della grammatica dinamica Miglioramento della generalità della grammatica con ulteriori produzioni dinamiche • Metodi e funzioni usate in ogni specifica generazione aggiunti a quelli più comuni già presenti • Numeri caratteristici del problema, estratti dal prompt (simbolo/parola) • Stringhe particolari, estratte dal codice generato ma anche dal prompt tramite KeyBERT [2] 13/21
  • 18. File di configurazione del GI Template del file di GI personalizzato sul problema a runtime, sostituendo: • <bnf> • <train> e <test> • <seedFolder> 14/21
  • 19. File di configurazione del GI <seedFolder> è il percorso relativo della cartella in cui sono specificati gli individui della popolazione iniziale Il genotipo degli individui viene ottenuto subito dopo la generazione della grammatica Per massimizzare la generalità, la funzione di fitness è generica, basata sul numero di test falliti 15/21
  • 20. Selezione dei problemi per il GI Esclusione di alcuni problemi di PSB2 per la fase di GI: • Problemi completamente corretti • Problemi con codice generato troppo complesso Alpaca7B Alpaca13B Basement Basement Dice Game Snow Day Tabella 1: Problemi scelti per i modelli Alpaca. ChatGPT, GPT-4 Basement Camel Case Dice Game Fizz Buzz Snow Day Tabella 2: Problemi scelti per la fase di GI nel caso dei modelli GPT di OpenAI. 16/21
  • 21. Esempio - problema Fizz Buzz Figura 1: Fitness dell’individuo migliore al passare delle generazioni, per 10 iterazioni indipendenti, nel caso di Fizz Buzz con individui di partenza ottenuti da ChatGPT. 17/21
  • 22. Tempi di esecuzione Validazione del processo ripetendo l’esecuzione per ciascun problema scelto per ogni modello 10 volte Esperimenti eseguiti su una macchina con Ubuntu 20.04.5 LTS, 8 core su 2 CPU AMD EPYC 7542 32-Core Processor e GPU NVIDIA A100 80 GB limitata a 20 GB con MIG Tempo di esecuzione (s) Problema Alpaca7B Alpaca13B ChatGPT GPT-4 Basement 3057.30 2565.59 82.70 93.33 Camel Case — — 16.17 56.36 Dice Game 2331.98 — 1344.13 3281.47 Fizz Buzz — — 994.48 420.92 Snow Day — 2709.70 18 956.82 3201.40 Tabella 3: Tempi di esecuzione mediati nelle 10 iterazioni, in secondi, del GI. I numeri in grassetto indicano se è stato ottenuto almeno un ottimo. 18/21
  • 23. Confronto pre e post GI Problema A7 A13 CG G4 n< (%) n> (%) n< (%) n> (%) n< (%) n> (%) n< (%) n> (%) Basement 0.00 23.10 0.00 17.40 30.00 100.00 50.00 100.00 Camel Case — — — — 64.37 100.00 20.62 100.00 Dice Game 0.00 2.20 — — 1.00 8.62 0.73 2.86 Fizz Buzz — — — — 0.00 89.80 0.45 94.90 Snow Day — — 0.00 5.70 2.32 75.06 3.35 8.20 Tabella 4: Percentuale del numero di test passati, mediata sulle 10 iterazioni, prima (n<) e dopo (n>) l’applicazione del GI. In ordine, i valori sono relativi a Alpaca7B (A7), Alpaca13B (A13), ChatGPT (CG) e GPT-4 (G4) e per i relativi problemi considerati. In grassetto sono evidenziati i valori che risultano essere statisticamente significativi rispetto al test di Wilcoxon. 19/21
  • 25. Osservazioni I risultati sono promettenti anche se l’insieme dei problemi trattati è molto ridotto La grammatica è il collo di bottiglia di questa tecnica Il tempo richiesto è comunque relativamente lungo 20/21
  • 26. Sviluppi futuri Implementazione di LLM ideati per la generazione di codice Scrittura più precisa dei prompt Miglioramento della scelta degli iper-parametri per il GI 21/21
  • 28. Riferimenti bibliografici Michael Fenton et al. «PonyGE2: Grammatical Evolution in Python». In: (mar. 2017). Maarten Grootendorst. KeyBERT: Minimal keyword extraction with BERT. Ver. v0.3.0. 2020. DOI: 10.5281/zenodo.4461265. URL: https://doi.org/10.5281/zenodo.4461265. Thomas Helmuth e Peter Kelly. «PSB2: The Second Program Synthesis Benchmark Suite». In: Proceedings of the Genetic and Evolutionary Computation Conference. GECCO ’21. Lille, France: Association for Computing Machinery, 2021, pp. 785–794. ISBN: 9781450383509. DOI: 10.1145/3449639.3459285. URL: https://doi.org/10.1145/3449639.3459285.