Modelli linguistici di grandi dimensioni (LLM)
Annotazioni
Per altri dettagli, vedi la scheda Testo e immagini .
Al centro dell'intelligenza artificiale generativa, i modelli linguistici di grandi dimensioni (LLMs) e i loro rapporti più compatti, i modelli linguistici di piccole dimensioni (SLMs), racchiudono le relazioni linguistiche e semantiche tra le parole e le frasi in un vocabolario. Il modello può usare queste relazioni per ragionare sull'input del linguaggio naturale e generare risposte significative e pertinenti.
Fondamentalmente, i modelli linguistici di grandi dimensioni vengono sottoposti a training per generare completamenti basati su prompt. Si considerino esempi super potenti della funzionalità di testo predittivo su molti cellulari. Una richiesta avvia una sequenza di stime di testo che genera un completamento semanticamente corretto. Il trucco è che il modello comprende le relazioni tra le parole e può identificare le parole nella sequenza fino ad ora sono più probabili influenzare quello successivo; e usarlo per prevedere la continuazione più probabile della sequenza.
Si consideri ad esempio la frase seguente:
Ho sentito un cane abbaiare ad alta voce a un gatto
Si supponga di aver sentito solo le prime parole: "Ho sentito un cane ...". Si sa che alcune di queste parole sono indizi più utili per quanto riguarda ciò che la parola successiva potrebbe essere di altri. I termini “sentito” e “cane” sono chiari indicatori di quello che seguirà e questo contribuisce a restringere il campo delle probabilità. Sai che c'è una buona probabilità che la frase continuerà come "Ho sentito un caneabbaiare".
È possibile indovinare la parola successiva perché:
- Hai un grande vocabolario di parole da cui trarre.
- Si sono apprese strutture linguistiche comuni, in modo da sapere in che modo le parole si riferiscono tra loro in frasi significative.
- Hai una comprensione dei concetti semantici associati alle parole - sai che qualcosa che hai sentito deve essere un suono di qualche tipo, e sai che ci sono suoni specifici che sono fatti da un cane.
Quindi come si esegue il training di un modello per avere queste stesse abilità?
Tokenizzazione
Il primo passaggio consiste nel fornire al modello un ampio vocabolario di parole e frasi; e noi intendiamo grandi. La generazione più recente di LLM include vocabolari costituiti da centinaia di migliaia di token, basati su grandi volumi di dati di training provenienti da Internet e da altre fonti.
Aspetta un attimo. Token?
Anche se tendiamo a pensare alla lingua in termini di parole, i LLM suddividono il loro vocabolario in token. I token includono parole, ma anche sotto-parole (come "un" in "incredibile" e "improbabile"), punteggiatura e altre sequenze di caratteri comunemente usate. Il primo passaggio del training di un modello linguistico di grandi dimensioni consiste quindi nell'suddividere il testo di training nei token distinti e assegnare un identificatore integer univoco a ognuno di essi, come illustrato di seguito:
- Ho (1)
- sentito (2)
- un (3)
- cane (4)
- corteccia (5)
- rumorosamente (6)
- a (7)
- a (3) già assegnato
- gatto (8)
e così via.
Man mano che si aggiungono altri dati di training, verranno aggiunti altri token al vocabolario e agli identificatori assegnati; così si potrebbe finire con token per parole come cucciolo, skateboard, auto e altri.
Annotazioni
In questo semplice esempio il testo di esempio è stato tokenizzato in base alle parole. In realtà ci sarebbero anche parole secondarie, punteggiatura e altri token.
Trasformazione di token con un trasformatore
Ora che è disponibile un set di token con ID univoci, è necessario trovare un modo per correlarli tra loro. A tale scopo, assegnare a ogni token un vettore (matrice di più valori numerici, ad esempio [1, 23, 45]). Ogni vettore ha più elementi numerici o dimensioni ed è possibile usarli per codificare attributi linguistici e semantici del token per fornire una grande quantità di informazioni su cosa significa il token e su come si riferisce ad altri token, in un formato efficiente.
È necessario trasformare le rappresentazioni vettoriali iniziali dei token in nuovi vettori con caratteristiche linguistiche e semantiche incorporate, in base ai contesti in cui vengono visualizzati nei dati di training. Poiché i nuovi vettori includono valori semantici incorporati, vengono chiamati incorporamenti.
Per eseguire questa attività, si usa un modello di trasformatore . Questo tipo di modello è costituito da due "blocchi":
- Blocco di codificatore che crea gli incorporamenti applicando una tecnica chiamata attenzione. Il livello di attenzione esamina a sua volta ogni token e determina il modo in cui è influenzato dai token intorno. Per rendere più efficiente il processo di codifica, viene usata l'attenzione a più teste per valutare più elementi del token in parallelo e assegnare pesi che possono essere usati per calcolare i nuovi valori dell'elemento vettore. I risultati del livello di attenzione vengono inseriti in una rete neurale completamente connessa per trovare la migliore rappresentazione vettoriale dell'incorporamento.
- Livello decodificatore che usa gli incorporamenti calcolati dal codificatore per determinare il token più probabile successivo in una sequenza avviata da un prompt. Il decodificatore usa anche l'attenzione e una rete neurale di feed-forward per effettuare le stime.
Annotazioni
L'architettura e il processo del trasformatore sono stati notevolmente semplificati nella descrizione e nel diagramma. Non preoccuparti troppo dei dettagli specifici del funzionamento dell'attenzione: il punto chiave è che consente di acquisire caratteristiche linguistiche e semantiche di ogni token in base ai contesti in cui viene usato. Se vuoi un approfondimento sull'architettura del trasformatore e su come usa l'attenzione, puoi leggere il documento originale Attention is all you need.
Vettori iniziali e codifica posizionale
Inizialmente, i valori del vettore del token vengono assegnati in modo casuale, prima di essere inseriti tramite il trasformatore per creare vettori di incorporamento. I vettori di token vengono inseriti nel trasformatore insieme a una codifica posizionale che indica dove appare il token nella sequenza di testo di training (è necessario eseguire questa operazione perché l'ordine in cui i token vengono visualizzati nella sequenza è rilevante per la correlazione tra loro). Ad esempio, i token potrebbero iniziare a apparire così:
| Token | ID del Token | Posizione | Vector |
|---|---|---|---|
| I | 1 | 1 | [3, 7, 10] |
| sentito | 2 | 2 | [2, 15, 1] |
| a | 3 | 3 | [9, 11, 1] |
| cane | 4 | 4 | [2, 7, 11] |
| corteccia | 5 | 5 | [9, 12, 0] |
| ad alta voce | 6 | 6 | [3, 8, 13] |
| at | 7 | 7 | [5, 7, 10] |
| a | 3 | 8 | [9, 11, 1] |
| gatto | 8 | 9 | [8, -6, 9 ] |
| ... | ... | ... | ... |
| cucciolo | 127 | 45 | [7, 7, -2 ] |
| automobile | 128 | 56 | [5, -5, 1 ] |
| skateboard | 129 | 67 | [4, 7, 14] |
Annotazioni
Abbiamo mantenuto le cose semplici usando vettori con solo tre elementi (che ci aiuteranno a visualizzarli in tre dimensioni in un secondo momento). In realtà, i vettori hanno migliaia di elementi.
Attenzione e incorporamenti
Per determinare le rappresentazioni vettoriali dei token che includono informazioni contestuali incorporate, il trasformatore usa livelli di attenzione . Un livello di attenzione considera ogni token per volta, nel contesto della sequenza di token in cui appare. I token intorno a quello attuale vengono ponderati per riflettere la loro influenza e i pesi vengono usati per calcolare i valori degli elementi per il vettore di embedding del token attuale. Ad esempio, quando si considera il token "abbaiare" nel contesto di "Ho sentito un cane abbaiare", ai token "sentito" e "cane" verrà assegnato un peso maggiore rispetto a "Ho" o "un", poiché sono indicatori più forti in relazione ad "abbaiare".
Inizialmente, il modello non "conosce" quali token influenzano gli altri; ma poiché viene esposto a volumi di testo più grandi, può imparare in modo iterativo quali token vengono comunemente visualizzati insieme e iniziare a trovare modelli che consentono di assegnare valori agli elementi vettoriali che riflettono le caratteristiche linguistiche e semantiche dei token, in base alla loro prossimità e frequenza di utilizzo insieme. Il processo è reso più efficiente usando l'attenzione a più teste per considerare diversi elementi dei vettori in parallelo.
Il risultato del processo di codifica è un set di incorporamenti; vettori che includono informazioni contestuali sulla correlazione tra i token nel vocabolario. Un trasformatore reale produce incorporamenti che includono migliaia di elementi, ma per mantenere le cose semplici, è possibile attenersi ai vettori con solo tre vettori nell'esempio. Il risultato del processo di codifica per il vocabolario potrebbe essere simile al seguente:
| Token | ID del Token | Embedding |
|---|---|---|
| I | 1 | [2, 0, -1] |
| sentito | 2 | [-2, 2, 4 ] |
| a | 3 | [-3, 5, 5 ] |
| cane | 4 | [10, 3, 2 ] |
| corteccia | 5 | [9, 2, 10 ] |
| ad alta voce | 6 | [-3, 8, 3 ] |
| at | 7 | [-5, -1, 1] |
| gatto | 8 | [10, 3, 1] |
| cucciolo | 127 | [5, 3, 2 ] |
| automobile | 128 | [-2, -2, 1 ] |
| skateboard | 129 | [-3, -2, 2 ] |
| corteccia | 203 | [2, -2, 3 ] |
Osservando bene, si può aver notato che i risultati includono due incorporamenti per il token “abbaiare”. È importante comprendere che gli incorporamenti rappresentano un token all'interno di un contesto specifico; e alcuni token possono essere usati per indicare più cose. Ad esempio, la corteccia di un cane è diversa dalla corteccia di un albero! I token comunemente usati in più contesti possono produrre più incorporamenti.
È possibile considerare gli elementi degli incorporamenti come dimensioni in uno spazio vettoriale multidimensionale. Nell'esempio semplice, gli incorporamenti hanno solo tre elementi, in modo da poterli visualizzare come vettori nello spazio tridimensionale, come illustrato di seguito:
Poiché le dimensioni vengono calcolate in base al modo in cui i token sono correlati in modo linguistico tra loro, i token usati in contesti simili (e quindi hanno significati simili) generano vettori con direzioni simili. Ad esempio, gli incorporamenti per "cane" e "cucciolo" indicano più o meno la stessa direzione, che non è troppo diversa dall'incorporamento per "gatto"; ma molto diverso dall'incorporamento per "skateboard" o "auto". Possiamo misurare quanto siano vicini i token l'uno all'altro semanticamente calcolando la similarità del coseno dei loro vettori.
Previsione dei completamenti a partire dai prompt
Ora che è disponibile un set di incorporamenti che incapsulano la relazione contestuale tra i token, è possibile usare il blocco decodificatore di un trasformatore per prevedere in modo iterativo la parola successiva in una sequenza in base a un prompt iniziale.
Ancora una volta, l'attenzione viene usata per considerare ogni token nel contesto; ma questa volta il contesto da considerare può includere solo i token che precedono il token che si sta tentando di stimare. Viene eseguito il training del modello di decodificatore, usando i dati per i quali è già disponibile la sequenza completa, applicando una tecnica denominata attenzione mascherata; in cui i token dopo il token corrente vengono ignorati. Poiché si conosce già il token successivo durante il training, il trasformatore può confrontarlo con il token stimato e regolare i pesi appresi nelle iterazioni di training successive per ridurre l'errore nel modello.
Quando si stima un nuovo completamento, per il quale i token successivi sono sconosciuti, i livelli di attenzione calcolano i possibili vettori per il token successivo e la rete feed-forward aiuta a determinare il candidato più probabile. Il valore stimato viene quindi aggiunto alla sequenza e l'intero processo viene ripetuto per stimare il token successivo ; e così via, fino a quando il decodificatore non prevede che la sequenza sia terminata.
Ad esempio, data la sequenza "When my dog was a ...", il modello valuterà i token nella sequenza finora, usare l'attenzione per assegnare pesi e prevedere che il token più probabile successivo è "cucciolo" anziché, ad esempio, "cat" o "skateboard".