Perché gli LLM open source sono il futuro dell'intelligenza artificiale

I Large Language Models open source hanno portato una grande novità il campo dell’intelligenza artificiale, permettendo a chi sviluppa e chi fa ricerca di accedere a tecnologie avanzate senza le restrizioni delle soluzioni proprietarie. Questi modelli, come LLaMA, GPT-Neo e Bloom, offrono la possibilità di personalizzare e adattare le applicazioni in base alle esigenze specifiche degli utenti. In questo articolo, esploreremo cosa sono gli LLM open source e come utilizzarli in Python.
Cosa sono gli LLM Open Source?
Gli LLM open source sono modelli di linguaggio di grandi dimensioni che possono essere utilizzati e modificati liberamente. A differenza dei modelli commerciali, che richiedono licenze a pagamento e hanno anche un accesso limitato, gli LLM open source sono disponibili per chiunque desideri esplorarli o integrarli nelle proprie applicazioni. Alcuni esempi noti includono:
- GPT-Neo: Un modello sviluppato da EleutherAI che replica le funzionalità di GPT-3.
- LLaMA: Creato da Meta, è progettato per essere altamente efficiente e versatile.
- Bloom: Un modello multilingue che supporta diverse lingue e dialetti.
Questi modelli possono essere utilizzati per una varietà di compiti, tra cui generazione di testo, traduzione automatica e analisi del sentiment.
Disclaimer: quando parliamo di open-source, ci riferiamo a modelli che sono liberamente accessibili e utilizzabili, ma non necessariamente “gratuiti” e perfettamente aderenti alla filosofia open, che invece richiederebbe anche la condivisione di materiale circa test, dataset utilizzati, e via dicendo. Inoltre, alcuni modelli potrebbero richiedere risorse computazionali significative per l’addestramento o l’inferenza, il che può comportare costi associati all’uso di infrastrutture cloud o hardware specializzato.
Come utilizzare un LLM open source in Python
Per dimostrare come utilizzare un LLM open source in Python, ci concentreremo su GPT-Neo, che è relativamente leggero. Il procedimento rimane comunque valido anche per altri modelli, che si trova su HuggingFace.
Installazione delle dipendenze
Prima di tutto, assicurati di avere installato Python e pip sul tuo sistema. Poi, installa le librerie necessarie, ossia transformers e torch, ossia i transformer e la libreria PyTorch con cui è stato implementato il modello:
pip install torch transformers
Caricamento del modello
Utilizzeremo la libreria transformers di Hugging Face per caricare il modello GPT-Neo con 1.3 miliardi di parametri. Un numero alto di parametri permette al modello di generare testi più coerenti e contestualmente rilevanti rispetto ai modelli più piccoli.
Questa famiglia di modelli è stata addestrata su un dataset chiamato Pile, un ampio corpus di dati curato specificamente per l’addestramento di modelli linguistici, creato combinando diversi dataset. Tuttavia, il modello da 1.3B ha subito un addestramento su un numero maggiore di token (380 miliardi) rispetto al modello da 125M (300 miliardi), il che contribuisce a una migliore comprensione e generazione del linguaggio.
from transformers import GPTNeoForCausalLM, GPT2Tokenizer
tokenizer = GPT2Tokenizer.from_pretrained("EleutherAI/gpt-neo-1.3B")
model = GPTNeoForCausalLM.from_pretrained("EleutherAI/gpt-neo-1.3B")
Generazione del testo
Ora possiamo generare del testo fornendo un prompt al modello. Il modello è stato addestrato su dataset prevalentemente in lingua inglese, motivo per cui proviamo a fargli generare un racconto breve sempre in inglese, di tipo sci-fi, dandogli una frase di input per il nostro racconto.
prompt = (
"On a forgotten planet, strange noises begin to resonate in the air. The creature awakens from its slumber and tries to stand up, but fails. What is stopping it?"
)
Andiamo quindi a tokenizzare l’input, proprio come avviene in una pipeline minimale che esegue attività di NLP, così da permettere al modello di elaborare il testo e convertirlo in un formato numerico. Il parametro return_tensors="pt" indica al tokenizer di restituire i dati in formato PyTorch (indicato da “pt”). Questo è necessario perché il modello è implementato utilizzando la libreria PyTorch e quindi richiede i dati in questo formato.
Infine, input_ids è una variabile che contiene gli ID dei token risultanti dalla tokenizzazione del prompt. Sarà un tensore (una sorta di array) che rappresenta l’input da fornire al modello.
Il parametro do_sample indica al modello di utilizzare il campionamento per la generazione del testo: questo consente al modello di scegliere casualmente tra le possibili parole successive, piuttosto che selezionare sempre la parola con la probabilità più alta (che sarebbe un comportamento deterministico). Questo approccio rende il testo generato più vario e creativo, ed è ciò che fa al caso nostro.
Poi utilizziamo il modello scelto per generare un output partendo dagli ID forniti, specificando una lunghezza massima di 100 token rispetto all’output e una sola sequenza (quindi una sola potenziale risposta).
La temperatura infine controlla la casualità e la creatività dell’output del modello. Un valore più basso (come 0.2) rende le previsioni più conservative e “sicure”, mentre un valore più alto (come 0.9) aumenta la creatività e la variabilità delle risposte. Una temperatura di 0.7 offre un buon equilibrio tra creatività e coerenza.
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
gen_tokens = model.generate(
input_ids,
do_sample=True,
temperature=0.7,
max_length=100,
)
Dopo che il modello ha generato gli output, questi sono ancora in forma di ID numerici. Dobbiamo convertirli nuovamente in testo leggibile, e per farlo usiamo la funzione batch_decode(), prendendo il primo risultato dall’array di output (nel nostro caso, la sequenza richiesta era una soltanto).
Il parametro skip_special_tokens=True indica al tokenizer di ignorare eventuali token speciali (come i token di padding o di fine sequenza) durante la decodifica, restituendo solo il testo significativo.
generated_text = tokenizer.batch_decode(gen_tokens)[0]
print(generated_text)
Risultato
Ecco l’esempio completo che combina tutti i passaggi precedenti:
from transformers import GPTNeoForCausalLM, GPT2Tokenizer
model = GPTNeoForCausalLM.from_pretrained("EleutherAI/gpt-neo-1.3B")
tokenizer = GPT2Tokenizer.from_pretrained("EleutherAI/gpt-neo-1.3B")
prompt = (
"On a forgotten planet, strange noises begin to resonate in the air. The creature awakens from its slumber and tries to stand up, but fails. What is stopping it?"
)
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
gen_tokens = model.generate(
input_ids,
do_sample=True,
temperature=0.7,
max_length=100,
)
gen_text = tokenizer.batch_decode(gen_tokens)[0]
print(gen_text)
>>>
On a forgotten planet, strange noises begin to resonate in the air. The creature awakens from its slumber and tries to stand up, but fails. What is stopping it? This is the question that haunts Rachael. Is it the fear of being discovered, of being hunted, of the unknown, or is it something else? Or both? Rachael is a young, inexperienced young lady. She has never been more than a child, yet she wants desperately to save herself and
Conclusione
Gli LLM open source offrono opportunità straordinarie per chi sviluppa e desidera esplorare le capacità dell’intelligenza artificiale senza vincoli economici o tecnici.
Attraverso strumenti come i transformers di Hugging Face è semplice iniziare a utilizzare questi modelli in Python. Sperimentando con parametri come la temperatura e fornendo input creativi, è possibile generare testi, ma anche eseguire traduzioni, rispondere a domande e molto altro, motivo per cui vale la pena sperimentare con questi modelli.








