Come i LLM del codice sono passati da RNN a Transformers

fotografato da Markus Spike SU Unsplash

Gli ultimi anni hanno visto una notevole evoluzione dei modelli linguistici con l’introduzione di Transformers, che ha rivoluzionato il modo in cui svolgiamo le nostre attività quotidiane come scrivere e-mail, creare documentazione, effettuare ricerche sul Web e persino il modo in cui codifichiamo. Con i ricercatori che applicano modelli linguistici di grandi dimensioni in attività di intelligenza del codice, un nuovo campo di Intelligenza del codice neurale è emerso. Questo dominio mira a migliorare l’efficienza della programmazione e a ridurre al minimo gli errori umani nell’industria del software risolvendo compiti come il riepilogo, la generazione e la traduzione del codice.

Con l’ultima versione di Code Llama, il modello all’avanguardia di Meta AI per la generazione e la comprensione del codice, questo articolo ripercorre l’evoluzione dei Large Language Models (LLM) per il codice, dagli RNN ai Transformers.

Fig-1: una sequenza temporale per modelli linguistici di grandi dimensioni per il codice. Immagine dell’autore.

Questo è stato uno dei primi tentativi da parte dei modelli linguistici di comprendere il codice. Codice2Vec mirato a rappresentare frammenti di codice negli incorporamenti. Questi incorporamenti catturano informazioni semantiche e strutturali dal codice, rendendoli utili per varie attività di ingegneria del software come la classificazione, il recupero e la comprensione del codice.

Il modello tenta di prevedere il nome del metodo dallo snippet di codice, codificando token ben denominati e percorsi AST (Abstract Syntax Tree) e applicando l’attenzione neurale per l’aggregazione in una rappresentazione vettoriale a lunghezza fissa.

Fig-2: Architettura del modello Code2Vec: il programma viene prima scomposto nella Borsa del contesto che include token e percorsi AST, quindi attraverso il livello completamente connesso e il livello di attenzione per generare il vettore di codice. Immagine ispirata all’articolo originale di Uri Alon et. al da Codice2Vec

Set di allenamento: 14 milioni di esempi di programmi Java
Architettura del modello: RNN + Rete feed-forward
Novità:

  • Modalità di attenzione basata sul percorsol- Gli autori propongono una nuova architettura di rete neurale che utilizza percorsi sintattici nell’Abstract Syntax Tree (AST) di uno snippet di codice come funzionalità di input. Il modello impara ad assegnare diversi pesi di attenzione a ciascun percorso e ad aggregarli in un unico vettore di codice. Il vettore di codice può quindi essere utilizzato per prevedere la distribuzione delle etichette per lo snippet o per misurare la somiglianza e l’analogia tra gli snippet.

Puoi giocare con il modello Qui

CodiceBERTsviluppato dal team di ricerca Microsoft, rappresenta un progresso significativo nel campo dei Large Language Models (LLM) per il codice introducendo il pre-training multimodale dei dati, combinando il linguaggio naturale e il linguaggio di programmazione (NL + PL) sul trasformatore basato Modello BERT. Il modello viene addestrato su un set di dati diversificato che comprende sia coppie di punti dati bimodali che punti dati unimodali per Modellazione del linguaggio mascherato (MLM) E Rilevamento token sostituito (RTD) compiti. CodeBERT ha dimostrato prestazioni eccezionali in una varietà di domini, eccellendo in particolare nella ricerca di codice in linguaggio naturale e nella generazione di codice per la documentazione.

Fig-3: Pre-addestramento del modello CodeBERT utilizzando l’attività Sostituisci token rilevamento (RTD). La generazione del linguaggio naturale e il generatore di codice sostituiscono i token con un token diverso e il modello CodeBERT è addestrato per classificare ciascun token come sostituito o originale. Immagine da Feng et. al, CodiceBERT

Set di dati di addestramento:
Set di dati della rete Codesearch– 2,1 milioni di punti dati bimodali (NL + PL), 6,4 milioni di punti dati unimodali (6 lingue: Python, Java, Javascript, PHP, Ruby, Go)
Dimensione parametro: 125 milioni
Architettura del modello: Base RoBERTa
Novità:

  • Formazione bimodale: CodeBERT introduce un approccio formativo innovativo che comprende sia token del linguaggio naturale che del linguaggio di programmazione. Questa tecnica di training bimodale migliora la capacità del modello di comprendere e generare codice considerando l’intricata interazione tra descrizioni leggibili dall’uomo ed elementi del linguaggio di programmazione.
  • Sostituisci l’attività di rilevamento token (RTD) per il codice: il pre-addestramento CodeBERT ha utilizzato la sostituzione del token di rilevamento (RTD) invece della previsione della frase successiva (NSP), che ha mostrato prestazioni superiori.

Codice è stato uno dei primi Code LLM di successo a generare codice da doc-string o prompt in linguaggio naturale con elevata precisione e predecessore di ampiamente utilizzato Copilota Github. Sviluppato dal team OpenAI, Codex utilizza GPT3 architettura e tokenizzatore e pre-training su un ampio corpus di codice Github. Questo modello Large Language ha parametri 12B ed era un modello all’avanguardia nel 2021, che ha mostrato le migliori prestazioni su set di dati di valutazione umana risolvendo il 28,8% dei problemi al primo passaggio.

Un’ulteriore messa a punto del modello su funzioni Python autonome (piuttosto che sull’intero codice che include configurazioni, implementazioni di classi ecc.), ha mostrato miglioramenti significativi ed è stato in grado di risolvere 37,7% del set di dati di valutazione umana problema.

Fig-4: Architettura Transformer solo decoder utilizzata per il modello Codex GPT. Immagine ispirata all’originale Carta per trasformatori di Vaswani et. al.

Set di dati di addestramento: 159 GB di file Python da 54 milioni di repository Github.
Dimensione parametro: 12B (Codice-12B)
Architettura del modello: GPT3
Novità:

  • Uno dei primi modelli di successo che eccelleva nelle capacità di scrittura del codice da istruzioni in linguaggio naturale. Questo addestra i modelli GPT-3 su un ampio corpus di repository Github.
  • Gli autori di questo modello hanno anche creato un nuovo set di dati, Valutazione umana per confrontare i modelli per le attività di generazione del codice. Questo set di dati è costituito da 164 problemi di programmazione scritti a mano con test unitari.

Prova il modello Codex su OpenAI Playground Qui

Codice-T5 è un modello encoder-decodificatore basato sull’architettura T5, distinta dai modelli CodeBERT (solo codificatore) e Codex (solo decoder). Introduce un’attività di pre-addestramento di denoising in grado di riconoscere l’identificatore univoco che aiuta il modello a distinguere e recuperare gli identificatori nel codice, migliorandone la comprensione della struttura.

Code-T5 eccelle in varie attività come il rilevamento di difetti del codice, il rilevamento di cloni, la traduzione del codice e il perfezionamento, attraverso l’apprendimento multi-task, richiedendo meno dati per una messa a punto più rapida. Tuttavia, utilizza i punteggi CodeBleu per la valutazione anziché per il benchmarking rispetto al set di dati HumanEval.

Fig-5: Illustrazione per mostrare come CodeT5 eccelle in varie attività di comprensione e generazione del codice. Immagine tratta da un articolo di Wang et al, CodiceT5

Set di dati di addestramento: Set di dati della rete Codesearch (Uguale a CodeBERT)
Dimensione del parametro: 220M
Architettura del modello: T5 (Architettura codificatore-decodificatore)
Novità:

  • Modalità codificatore-decodificatorel: uno dei primi Encoder-Decoder Code LLM a supportare sia le attività di comprensione che di generazione del codice.
  • Propone un nuovo obiettivo pre-formativo denoising basato sull’identificatore, che apprende le informazioni sul tipo token e la struttura del codice. Questo approccio addestra i modelli a distinguere tra identificatori (nomi di variabili, nomi di funzioni) dalle parole chiave PL (come if, while ecc.) e li recupera anche quando vengono mascherati.
  • Apprendimento multi-task nella fase di messa a punto: ottimizza simultaneamente varie attività correlate al codice come rilevamento di difetti del codice, rilevamento di cloni, traduzione del codice, perfezionamento ecc.

PLBART, o Programma e linguaggio BARTIl modello sfrutta l’architettura del modello BART per automatizzare una serie di attività di ingegneria del software, comprendendo il riepilogo, la generazione e la traduzione del codice sotto l’egida di PLUG (Program and Language Understanding and Generation).

Introduce un approccio di modellazione sequenza-sequenza di denoising per una migliore comprensione del programma e del linguaggio, combinando strategicamente i punti di forza dei modelli BERT e GPT. Ciò si ottiene combinando un codificatore bidirezionale con un decodificatore autoregressivo, consentendo una comprensione più completa del contesto e un processo di generazione versatile. Il modello utilizza tre strategie di denoising, tra cui mascheramento dei token, eliminazione dei token e riempimento dei tokenper formare e affinare le proprie capacità in modo efficace.

Fig-6: Illustrazione per visualizzare l’architettura del modello BART (utilizzato anche in PLBART) che dispone di encoder bidirezionale e decodificatore autoregressivo. Immagine dall’originale Carta BART di Lewis et. al.

Set di dati di addestramento: Funzioni Java e Python 2M e relative descrizioni in linguaggio naturale raccolte da Github, Stackoverflow (codice).
Dimensione del parametro: 140M (6 strati codificatori + 6 strati decodificatori + strato normativo aggiuntivo su codificatore e decodificatore)
Architettura del modello: BART
Novità:

  • Approccio di denoising con codifica automatica: Impiega un approccio di codifica automatica con denoising, che migliora la comprensione e la generazione del codice utilizzando in modo efficace le proprietà bidirezionali e autoregressive sia del codificatore che del decodificatore, combinando i punti di forza dei modelli BERT e GPT.
  • Diverse strategie di rumore: propone più strategie di denoising, come il mascheramento dei token, l’eliminazione dei token e il riempimento dei token. Questa diversità nelle tecniche di rumore migliora la robustezza e l’efficacia del modello nell’apprendimento da dati rumorosi, contribuendo a migliorare la comprensione e la generazione del codice.

Non tutti i modelli utilizzano lo stesso benchmark per valutare le prestazioni. Gli autori di PLBART non valutano le prestazioni del modello su HumanEval, il set di dati utilizzato dalla maggior parte degli altri modelli per il benchmarking.

Codice Lama è l’ultimo Code LLM, rilasciato da Meta, che batte tutti i modelli open source esistenti in diversi set di dati di riferimento. Ha un punteggio del 53%. Set di dati HumanEval e il 55% sul set di dati MBPP (solo GPT-4 ha prestazioni migliori). Questi guadagni possono essere attribuiti alla maggiore lunghezza del contesto di 16K (4x di Llama2) e all’addestramento di Llama 2 pre-addestrato su getti extra di 500 miliardi da Programma e Linguaggio naturale.

Questo modello è particolarmente adatto per le attività di generazione del codice e di riempimento e può fungere da miglior copilota durante lo sviluppo di software basato su IDE. La famiglia di modelli Code Llama ha 3 tipi di modelli:

  1. Codice Lama
  2. Codice Lama Python
  3. Codice Lama-Istruire

ognuno di essi è disponibile in 3 dimensioni — 7B, 13B e 34B

Fig-7: Formazione di Code Llama e pipeline di perfezionamento prendendo come input il modello Llama-2 pre-addestrato. Immagine dall’originale Carta codice lama di Roziere et. al.

Set di dati di addestramento: token da 500 miliardi + token aggiuntivi da 100 miliardi per Code llama Python su codice disponibile pubblicamente
Architettura del modello: Lama 2
Dimensione parametro: Disponibile in 3 misure: 7B, 13B e 34B.
Novità:

  • Proposto un passaggio di messa a punto per gestire le chiamate con lunghe sequenze Ottimizzazione del contesto lungoche aumenta la lunghezza del contesto a 16.384 (4x dalla lunghezza del contesto di Llama 2, ovvero 4096)
  • Istruzioni Regolazione fine e autoistruzione: uno dei pochi modelli che esegue la messa a punto delle istruzioni, che utilizza istruzioni o prompt espliciti durante il processo di messa a punto. Invece di creare dati di feedback umano che sono costosi, gli autori propongono un nuovo approccio di feedback di esecuzione per costruire un set di dati di autoistruzione.

Andrej Karapathy, uno dei fondatori di Open AI, recentemente chiamato Transformers la migliore idea nell’intelligenza artificiale. Ha aggiunto che il trasformatore è come un computer differenziabile per uso generale che è allo stesso tempo espressivo, ottimizzabile ed efficiente (X posta). Come evidente dalla trasformazione che ha portato negli ultimi 3-4 anni, il modello Transformer ha un vasto potenziale per cambiare ulteriormente il panorama del modo in cui programmiamo come ingegneri del software, e penso che questo sia solo l’inizio.

Sono un ingegnere ML dello staff @ LinkedIn. Puoi seguirmi su LinkedIn O Twitter. Puoi contattarmi per una chiacchierata veloce all’indirizzo Topmate.io

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *