Che cos’è un modello linguistico di grandi dimensioni? Come funzionano gli LLM, spiegato senza esagerazioni
Comprendi cosa sta realmente accadendo quando un’intelligenza artificiale scrive un testo. Scopri i token, gli incorporamenti e l’attenzione in un linguaggio semplice, esegui un piccolo predittore della parola successiva e scopri perché questi modelli possono essere brillanti e sbagliati allo stesso tempo.
- Un modello linguistico di grandi dimensioni è una rete neurale addestrata su enormi quantità di testo per prevedere ciò che verrà dopo.
- Funziona su token e utilizza attenzione per valutare quali token precedenti contano di più.
- Genera una risposta un token alla volta, scegliendo da un insieme di probabilità.
- Può sembrare sicuro pur essendo sbagliato, quindi i risultati importanti devono essere controllati.
Gli strumenti che chattano, riassumono e scrivono codice sembrano quasi magici, finché non vedi il meccanismo sottostante. Un modello linguistico di grandi dimensioni, o LLM, è fondamentalmente un sistema molto sofisticato per prevedere la parte di testo successiva. Quest’unica idea spiega sia cosa fanno bene questi strumenti sia perché falliscono nel modo in cui lo fanno.
Questa guida spiega i concetti principali senza calcoli matematici, quindi crea un piccolo predittore della parola successiva per rendere l’idea concreta. Abbiamo eseguito quel codice su Python 3.13 e l’output proviene da quell’esecuzione. È un semplice giocattolo di conteggio piuttosto che una rete neurale e i veri LLM sono molto più capaci. Evitiamo inoltre di citare i dati relativi a modelli specifici, perché cambiano rapidamente.
Cos’è un modello linguistico ampio?
Un LLM è un tipo di intelligenza artificiale addestrata a comprendere e generare il linguaggio umano. Prendiamo il nome una parola alla volta:
- Grande: ha un numero enorme di valori interni regolabili, chiamati parametri, e impara da un’enorme quantità di testo.
- Lingua: funziona con il testo, inclusi linguaggio naturale e codice.
- Modello: è un sistema matematico che cattura modelli dai dati e li utilizza per fare previsioni.
I modelli sono il motore e prodotti come gli assistenti di chat sono l’auto costruita attorno ad essi. Un prodotto spesso aggiunge un’interfaccia utente, sistemi di sicurezza, ricerca e altri strumenti.
L’idea centrale: prevedere cosa verrà dopo
Fallo tu stesso. Se leggi “la capitale della Francia è”, la tua mente propone subito “Parigi”. Un LLM fa qualcosa di paragonabile, ma su scala molto più ampia. Dato del testo, calcola la probabilità di ogni possibile token successivo, ne sceglie uno, lo aggiunge al testo e lo ripete.
Non esiste un database di risposte archiviate da cercare. Il modello contiene i modelli appresi durante l’addestramento, sotto forma di numeri. Quando questi schemi sono in linea con la verità, ottieni una risposta corretta. In caso contrario, puoi comunque ottenere una risposta fluida, e questa è un’importante differenza rispetto a un motore di ricerca.
Una piccola demo funzionante
Per vedere la previsione del token successivo nella sua forma più semplice, questo script conta quale parola segue quale in un testo minuscolo. Quindi genera un nuovo testo da tali conteggi. Gli statistici lo chiamano modello bigramma.
import random
from collections import Counter, defaultdict
TEXT = """the cat sat on the mat . the dog sat on the rug .
the cat saw the dog . the dog saw the cat ."""
tokens = TEXT.split()
follows = defaultdict(Counter)
for current, following in zip(tokens, tokens[1:]):
follows[current][following] += 1
def probabilities(word):
counts = follows[word]
total = sum(counts.values())
return {w: round(n / total, 2) for w, n in counts.most_common()}
print(probabilities("the"))
print(probabilities("sat"))
# {'cat': 0.38, 'dog': 0.38, 'mat': 0.12, 'rug': 0.12}
# {'on': 1.0}
Tale risultato è una distribuzione di probabilità. Dopo “il”, il modello considera molto probabilmente “gatto” e “cane”. Ora generiamo il testo campionando ripetutamente da quelle probabilità:
def generate(start, length, seed):
rng = random.Random(seed)
words = [start]
for _ in range(length):
counts = follows[words[-1]]
words.append(rng.choices(list(counts), weights=counts.values())[0])
return " ".join(words)
print(generate("the", 6, seed=1))
print(generate("the", 6, seed=2))
print(generate("the", 6, seed=3))
# the cat . the cat saw the
# the rug . the cat . the
# the cat saw the dog . the
Nota tre cose. Lo stesso inizio può produrre testi diversi, perché la scelta è casuale. L’output somiglia ai dati di addestramento, anche per le sequenze che non sono mai apparse al suo interno. E non ha alcuna comprensione, motivo per cui “il tappeto… il gatto” sembra una sciocchezza.
Chiedigli una parola che non ha mai visto e non avrà nulla da offrirti: follows["elephant"] è vuoto. Il nostro giocattolo guarda solo una parola precedente. L’enorme salto nei LLM reali deriva dalla considerazione di lunghi tratti di contesto e dall’apprendimento da molti più dati, utilizzando una rete neurale anziché un semplice conteggio.
Token: come legge un modello
Gli LLM non leggono parole intere come facciamo noi. Il testo viene prima suddiviso in token, che possono essere una parola, parte di una parola o segni di punteggiatura. Ogni token corrisponde a un numero e il modello funziona interamente con i numeri.
I token contano in pratica per due ragioni. L’utilizzo dei modelli ospitati è generalmente valutato in token e ogni modello ha un limite al numero che può gestirne contemporaneamente. La tokenizzazione spiega anche alcuni famosi comportamenti strani. Poiché i modelli vedono pezzi anziché lettere, compiti come contare le lettere in una parola sono stati tradizionalmente sorprendentemente difficili per loro.
Incorporamenti: significato come numeri
Ogni token viene trasformato in un embedding, una lunga lista di numeri che lo colloca in una sorta di spazio di significato. I concetti correlati finiscono vicini, quindi “gatto” e “gattino” hanno posizioni vicine, mentre “gatto” e “fattura” no.
La stessa idea alimenta la ricerca semantica, in cui trovi i documenti in base al significato piuttosto che alle parole esatte. La nostra guida al database vettoriale copre questo utilizzo.
Attenzione e il trasformatore
La maggior parte dei LLM moderni si basano sull’architettura transformer, introdotta dai ricercatori di Google nel documento del 2017 “L’attenzione è tutto ciò di cui hai bisogno”. Il suo meccanismo chiave è l’autoattenzione.
Considera questa frase: “Il trofeo non entrava nella valigia perché era troppo grande”. A cosa si riferisce “esso”? Sai che significa il trofeo. L’attenzione consente a un modello di pesare ogni token precedente durante l’elaborazione di quello nuovo, in modo da poter collegare “esso” alle parole più rilevanti, anche quando sono distanti.
Gli approcci precedenti elaboravano il testo passo dopo passo e tendevano a perdere traccia delle parole distanti. I trasformatori esaminano insieme il contesto e possono eseguire gran parte di questo lavoro in parallelo su hardware specializzato, il che ha reso pratica la formazione su quantità di testo così grandi.
Come viene formato un LLM
| Palcoscenico | Cosa succede |
|---|---|
| Raccolta dati | Grandi quantità di testo vengono raccolte e pulite |
| Pre-allenamento | Il modello prevede ripetutamente il token successivo e i suoi parametri vengono modificati ogni volta che è sbagliato |
| Messa a punto | Impara da esempi di risposte utili, con il feedback umano spesso utilizzato per classificare le risposte |
| Valutazione | I team lo testano per casi di qualità, sicurezza e fallimento |
La formazione preliminare fornisce al modello un’ampia capacità linguistica, ma potrebbe semplicemente continuare il testo anziché rispondere. Le fasi successive lo trasformano in un utile assistente. L’addestramento di modelli di grandi dimensioni richiede una notevole potenza di calcolo ed è costoso. L’utilizzo di un modello finito, noto come inferenza, è molto più economico per richiesta.
Come genera il testo
- Il tuo prompt viene suddiviso in token e convertito in incorporamenti.
- La rete li elabora, utilizzando l’attenzione per metterli in relazione tra loro.
- Genera una probabilità per ogni possibile token successivo.
- Un token viene selezionato e aggiunto al contesto.
- I passaggi da 2 a 4 si ripetono fino a raggiungere una condizione di arresto.
Questo è il motivo per cui le risposte in genere vengono visualizzate parola per parola durante lo streaming. Il testo viene letteralmente prodotto in sequenza. La Temperatura controlla quanto avventuroso sia il passaggio 4: valori bassi favoriscono i token più probabili, mentre valori più alti consentono una maggiore varietà.
Suggerimento: Per l’estrazione, la classificazione e altre attività ripetibili, utilizzare una temperatura bassa laddove l’impostazione è disponibile. Per il brainstorming può essere utile un’impostazione più alta. Anche così, un valore basso non garantisce sempre risposte identiche.
Termini che incontrerai
| Termine | Significato |
|---|---|
| Richiedi | L’input fornito al modello |
| Finestra di contesto | Il numero massimo di token che può considerare contemporaneamente |
| Parametri | I valori interni appresi durante la formazione |
| Inferenza | Esecuzione di un modello addestrato per ottenere l’output |
| Allucinazione | Output sicuro che è falso |
| Taglio della conoscenza | Il punto dopo il quale terminano i dati di training |
| RAG | Recupero di documenti per fornire un contesto aggiuntivo al modello |
| Modello a peso aperto | Un modello i cui parametri puoi scaricare ed eseguire tu stesso |
Limitazioni che dovresti conoscere
- Allucinazioni. Un modello può inventare fatti, citazioni o funzioni di codice. Poiché produce un testo verosimile, le affermazioni false possono sembrare completamente plausibili.
- Limite di conoscenza. A meno che un prodotto non lo colleghi alla ricerca o ad altri strumenti, potrebbe non essere a conoscenza degli eventi recenti.
- Contesto limitato. Se una conversazione supera la finestra di contesto, i dettagli precedenti potrebbero essere eliminati o riepilogati. Inoltre, i modelli non ricordano automaticamente le chat passate, a meno che un prodotto non aggiunga tale funzionalità.
- Pregiudizi. I dati di addestramento riflettono i pregiudizi umani e questi possono apparire nell’output.
- Incoerenza. La stessa domanda può produrre risposte diverse, il che è importante quando si crea software su una di esse.
- Rischi per la sicurezza. Le istruzioni nascoste nel testo possono manipolare un modello, un problema noto come prompt injection.
Usare bene i LLM
Tratta un LLM come un assistente veloce e capace il cui lavoro necessita di revisione. Alcune abitudini fanno una grande differenza:
- Sii specifico. Istruzioni chiare, contesto ed esempi danno risultati migliori. La nostra guida al prompt engineering mostra come.
- Fornisci i fatti. Quando le risposte devono provenire dai tuoi documenti, usa RAG invece di fare affidamento sulla memoria.
- Verifica ciò che conta. Controlla dati, citazioni e affermazioni legali o mediche rispetto a fonti affidabili.
- Test del codice generato. Eseguilo e scrivi i test, come faresti per quello di un collega. La nostra guida sugli Strumenti di revisione del codice AI fornisce assistenza.
- Proteggi i dati sensibili. Controlla le regole della tua organizzazione prima di condividere informazioni riservate con uno strumento ospitato.
Se stai decidendo come personalizzare un modello per il tuo lavoro, il nostro confronto tra RAG, messa a punto e ingegneria rapida ti aiuterà a scegliere.
Considerazioni finali
Un LLM è un predittore del token successivo addestrato su scala straordinaria ed è più utile e più fallibile di quanto suggerisca tale descrizione. Tenere a mente il meccanismo ti aiuta a usarlo bene: è forte nel linguaggio e nei modelli e richiede la tua supervisione sui fatti. Per renderlo concreto, esegui il piccolo script qui sopra con il tuo testo, quindi prova più volte lo stesso suggerimento in un vero assistente e confronta le risposte.
Domande frequenti
Che cos’è un grande modello linguistico in termini semplici?
Si tratta di un sistema di intelligenza artificiale addestrato su enormi quantità di testo per prevedere cosa accadrà dopo. Ripetendo quella previsione, può rispondere a domande, scrivere e riassumere.
Qual è la differenza tra AI e un LLM?
L’intelligenza artificiale è l’ampio campo della costruzione di sistemi intelligenti. Un LLM è un tipo specifico di modello di intelligenza artificiale, focalizzato sull’elaborazione e sulla generazione del linguaggio.
Gli LLM capiscono quello che dicono?
Questo è dibattuto. Catturano ricchi modelli di significato e possono ragionare su molti problemi, ma non sperimentano il mondo e possono fallire in modi in cui una persona non farebbe.
Perché i LLM inventano le cose?
Generano testo probabile anziché recuperare fatti verificati. Quando i modelli puntano verso una risposta plausibile ma falsa, il modello può affermarla con apparente sicurezza.
Cos’è un token in un LLM?
Un token è una porzione di testo elaborata dal modello, ad esempio una parola, parte di una parola o un segno di punteggiatura. I limiti e i prezzi sono spesso misurati in token.
Continua a imparare
Hai bisogno di aiuto con test, WordPress o SEO?
Aiutiamo i team a fornire software migliore e a far crescere i loro siti. Raccontaci a cosa stai lavorando e ti suggeriremo chiaramente il prossimo passo.
Altre guide su test, intelligenza artificiale e sviluppo moderno
Ti è piaciuto questo articolo? Scegli un argomento e passa direttamente ai nostri tutorial più recenti.
Spiegazione delle allucinazioni dell'intelligenza artificiale: perché i modelli linguistici inventano le cose e come ridurle
Spiegazione delle allucinazioni dell'intelligenza artificiale: cosa sono, perché i modelli linguistici le producono, tipi comuni, come ridurle con b…
Leggi l'articolo →DevOpsSpiegazione delle variabili d'ambiente: file .env, segreti e configurazione eseguiti correttamente
Variabili d'ambiente spiegate con esempi Python che abbiamo eseguito: lettura e impostazione, perché ogni valore è una stringa, file .env, ereditari…
Leggi l'articolo →Sviluppo softwareSpiegazione della limitazione della velocità API: algoritmi, intestazioni e gestione degli errori 429
La limitazione della velocità dell'API spiegata con una simulazione che abbiamo eseguito: bucket di token, finestra fissa, finestra scorrevole, risp…
Leggi l'articolo →Automazione dei testDerisione in Python: unittest.mock, patch e gli errori che fanno mentire i test
Mocking in Python con unittest.mock, testato: Mock e return_value, side_effect, patch dove viene utilizzato un nome, specifiche e autospec, date moc…
Leggi l'articolo →Test del softwareSpiegazione della copertura del codice: copertura di linea o di filiale e cosa significa realmente il 100%.
Copertura del codice spiegata con una vera esecuzione di cover.py: copertura di linea, ramo e condizione, lettura di un rapporto, perché la copertur…
Leggi l'articolo →Database e SQLDELETE vs TRUNCATE vs DROP in SQL: differenze, rollback e quando utilizzarli
DELETE vs TRUNCATE vs DROP spiegato con SQL testato: cosa rimuove, rollback, trigger, reimpostazione dell'identità, velocità e come differiscono Pos…
Leggi l'articolo →Database e SQLSpiegazione delle visualizzazioni SQL: crea, utilizza ed evita le insidie, con esempi
Viste SQL spiegate con le query che abbiamo eseguito: creazione di una vista, risultati in tempo reale, nascondere colonne, prestazioni, viste aggio…
Leggi l'articolo →Sviluppo softwareInterfaccia TypeScript e tipo: differenze reali, testate con il compilatore
Interfaccia TypeScript vs tipo, verificata con il vero compilatore: cosa possono fare entrambi, cosa può fare solo uno, fusione delle dichiarazioni,…
Leggi l'articolo →Sviluppo softwareSpiegazione di Python *args e **kwargs: funzioni flessibili con esempi chiari
Python *args e **kwargs spiegati con il codice che abbiamo eseguito: compressione e decompressione, ordine dei parametri, argomenti solo per parole …
Leggi l'articolo →Sviluppo softwareFunzioni Lambda Python: sintassi, usi reali e quando non usarli
Funzioni lambda Python spiegate con il codice che abbiamo eseguito: sintassi, ordinamento con chiave, mappa e filtro, chiusure, trap dell'associazio…
Leggi l'articolo →Intelligenza artificialeCosa sono gli agenti AI? Come funzionano, con un semplice ciclo di agenti che puoi eseguire
Cosa sono gli agenti IA? Una semplice guida al ciclo dell'agente, agli strumenti, alla memoria e ai guardrail, con un piccolo ciclo Python che abbia…
Leggi l'articolo →DevOpsMonitoraggio vs osservabilità: la vera differenza, con log, metriche e tracce
Spiegazione del monitoraggio e dell'osservabilità: errori noti e sconosciuti, log, metriche e tracce, una procedura dettagliata sugli incidenti di p…
Leggi l'articolo →DevOpsVolumi Docker e montaggi di associazione: mantenere i dati del contenitore nel modo giusto
Volumi Docker e montaggi di collegamento spiegati: perché i dati del contenitore scompaiono, volumi denominati, montaggi di collegamento, tmpfs, ese…
Leggi l'articolo →Automazione dei testTDD vs BDD: differenze chiave, una caratteristica costruita in entrambi i modi e quando utilizzarli ciascuno
TDD vs BDD spiegato con una funzione di sconto costruita in entrambi i modi: refactoring rosso-verde con il codice che abbiamo eseguito, scenari "Da…
Leggi l'articolo →Test del softwareTest di accettazione da parte dell'utente (UAT): processo, lista di controllo ed esempi reali
Spiegazione del test di accettazione dell'utente: chi lo esegue, in cosa differisce dal QA, un processo in sette fasi, un modello di test case UAT, …
Leggi l'articolo →Database e SQLSpiegazione dei valori SQL NULL: IS NULL, COALESCE, NULLIF e le trappole da evitare
Valori SQL NULL spiegati con le query che abbiamo eseguito: logica a tre valori, IS NULL, COALESCE, NULLIF, come aggregazioni, join e ordinamento tr…
Leggi l'articolo →Database e SQLIstruzione SQL CASE WHEN: sintassi, esempi reali ed errori comuni
SQL CASE WHEN spiegato con le query che abbiamo eseguito: moduli semplici e cercati, ordine delle condizioni, pivot con SUM, trucchi COUNT, ordiname…
Leggi l'articolo →Sviluppo softwareCos'è il JWT? Token Web JSON spiegati con un esempio funzionante
Cos'è il JWT? Spiegazione dei token Web JSON: le tre parti, un token creato e manomesso nel codice che abbiamo eseguito, JWT e sessioni, archiviazio…
Leggi l'articolo →Sviluppo softwareSpiegazione del loop di eventi JavaScript: stack di chiamate, microtask e timer con esempi
Il ciclo di eventi JavaScript spiegato con il codice che abbiamo eseguito: stack di chiamate, code di attività e microtask, perché setTimeout 0 non …
Leggi l'articolo →Sviluppo softwareSpiegazione dei generatori Python e del rendimento: risparmia memoria con esempi reali
Generatori Python e rendimento spiegati con il codice che abbiamo eseguito: come vengono messi in pausa e ripresi, misurato il risparmio di memoria,…
Leggi l'articolo →Intelligenza artificialeCosa sono gli incorporamenti? I vettori e la somiglianza del coseno spiegati semplicemente
Cosa sono gli incorporamenti? Una guida in linguaggio semplice ai vettori, alla similarità del coseno e alla ricerca semantica, con un piccolo esemp…
Leggi l'articolo →DevOpsDistribuzione blu-verde rispetto a quella canaria: differenze, compromessi e come scegliere
Spiegazione della distribuzione blu-verde e canary: come funziona ciascuna, costi, rischi e rollback, bucket utente stabile che abbiamo testato, mig…
Leggi l'articolo →Automazione dei testTest instabili: quali sono le cause e come risolverli definitivamente
Test instabili spiegati con demo che abbiamo eseguito: le cause principali, come confermarne e diagnosticarne uno, soluzioni adeguate per tempistich…
Leggi l'articolo →Test del softwareTest di carico e test di stress: differenze, metriche ed esempi k6
Spiegazione del test di carico e dello stress test: cosa dimostra ciascuno, test di picco e di assorbimento, le metriche che contano, perché le medi…
Leggi l'articolo →Test del softwareCaso di test e scenario di test: differenze chiave, esempi e quando utilizzarli
Spiegazione del caso di test e dello scenario di test: definizioni chiare, una tabella affiancata, una funzione di reimpostazione della password pre…
Leggi l'articolo →Database e SQLOttimizzazione delle query SQL: leggi i piani di esecuzione e correggi query lente, con tempistiche
Ottimizzazione delle query SQL testata su un milione di righe: leggi i piani di esecuzione, aggiungi gli indici corretti, correggi filtri non aggior…
Leggi l'articolo →Database e SQLSQL UNION vs UNION ALL: differenze, esempi e prestazioni testate
SQL UNION vs UNION ALL spiegati con le query che abbiamo eseguito: duplicati, regole seguite da entrambi, un vero bug di dati, prestazioni misurate,…
Leggi l'articolo →Sviluppo softwareTutorial sull'API di recupero JavaScript: GET, POST, gestione degli errori e timeout
Un tutorial sull'API JavaScript Fetch testato su un server locale: GET e POST, perché 404 non genera eccezioni, un helper riutilizzabile, stringhe d…
Leggi l'articolo →Sviluppo softwareGestione dei file Python: lettura, scrittura, CSV, JSON e pathlib con esempi
Gestione dei file Python spiegata con il codice che abbiamo eseguito: modalità aperte, con, lettura di file di grandi dimensioni, CSV, JSON, pathlib…
Leggi l'articolo →Sviluppo softwareClassi e oggetti Python: tutorial OOP con esempi reali
Classi e oggetti Python spiegati con il codice che abbiamo eseguito: __init__, metodi, attributi di classe e istanza, ereditarietà, proprietà, metod…
Leggi l'articolo →Intelligenza artificialeChe cos'è un modello linguistico di grandi dimensioni? Come funzionano i LLM, spiegato senza esagerazioni
Cos’è un modello linguistico ampio? LLM spiegati in un linguaggio semplice: token, incorporamenti, attenzione, formazione, finestre di temperatura e…
Leggi l'articolo →DevOpsComandi Linux per principianti: la guida essenziale del terminale con esempi
Comandi Linux per principianti, raggruppati per attività: navigazione, file, visualizzazione log, grep, pipe, permessi, processi e archivi, con un e…
Leggi l'articolo →Automazione dei testSelenio vs drammaturgo: differenze chiave, codice a confronto e quale scegliere
Selenium vs Playwright a confronto: architettura, attesa, supporto per browser e linguaggio, debug, lo stesso test in entrambi gli strumenti, consig…
Leggi l'articolo →Test del softwarePartizionamento di equivalenza: tecnica di progettazione dei test spiegata con esempi pratici
Spiegazione del partizionamento di equivalenza: come trovare partizioni valide e non valide, esempi funzionanti per età, password e coupon, test che…
Leggi l'articolo →Test del softwareGravità vs priorità nel test del software: differenze, matrice ed esempi reali
Spiegazione della gravità e della priorità nei test del software: definizioni chiare, una matrice a quattro vie con esempi, scale di livello, chi im…
Leggi l'articolo →Database e SQLEsercitazione sulle sottoquery SQL: tipi, sottoquery correlate ed EXISTS con esempi
Un tutorial sulle sottoquery SQL con le query che abbiamo eseguito: sottoquery scalari, IN, FROM e SELECT, sottoquery correlate, EXISTS, trap NOT IN…
Leggi l'articolo →Database e SQLSpiegazione di transazioni SQL e ACID: COMMIT, ROLLBACK e livelli di isolamento
Transazioni SQL e ACID spiegate con un bonifico bancario eseguito: COMMIT, ROLLBACK, punti di salvataggio, blocchi, livelli di isolamento, letture s…
Leggi l'articolo →Sviluppo softwareGit merge vs rebase: differenze, esempi e quando usare ciascuno
Git merge vs rebase spiegato con output reale del log, una tabella di confronto, la regola d'oro del rebase e un flusso di lavoro sicuro per i team.
Leggi l'articolo →Sviluppo softwareList comprehension in Python: sintassi, esempi e quando evitarla
List comprehension in Python spiegata: sintassi, filtri, if-else, cicli annidati, tempi misurati e i casi in cui un normale ciclo for è meglio.
Leggi l'articolo →Database e SQLSQL JOIN spiegati con esempi (Inner, Left, Right, Full)
Capisci i JOIN SQL passo dopo passo con tabelle e query di esempio: INNER, LEFT, RIGHT, FULL, CROSS e SELF, con errori comuni e consigli sulle prest…
Leggi l'articolo →