Repository del corso di Python per l'intelligenza artificiale
Ecco un esempio di come utilizzare un LLM (Large Language Model) in Google Colab, utilizzando la libreria transformers
di Hugging Face.
Scenario: Utilizziamo un LLM per generare testo a partire da un prompt.
Passaggio 1: Apri Google Colab
- Vai su colab.research.google.com.
- Accedi con il tuo account Google.
- Crea un nuovo notebook ("Nuovo notebook").
Passaggio 2: Installa le librerie necessarie
In una cella di codice, inserisci e esegui il seguente comando per installare la libreria transformers
:
!pip install transformers
Passaggio 3: Importa le librerie e carica il modello
Importiamo le librerie necessarie e carichiamo un modello LLM pre-addestrato. In questo esempio, utilizzeremo il modello "gpt2":
from transformers import pipeline
generator = pipeline('text-generation', model='gpt2')
Questo codice crea un oggetto pipeline
che può essere utilizzato per generare testo.
Passaggio 4: Genera testo
Ora, utilizziamo il modello per generare testo a partire da un prompt:
prompt = "Scrivi una breve storia su un gatto che parla."
generated_text = generator(prompt, max_length=100, num_return_sequences=1)[0]['generated_text']
print(generated_text)
Questo codice genera un testo di massimo 100 token a partire dal prompt specificato. L'argomento num_return_sequences=1
indica che vogliamo generare una sola sequenza di testo.
Spiegazione:
pipeline('text-generation', model='gpt2')
: Crea una pipeline per la generazione di testo utilizzando il modello GPT-2.generator(prompt, max_length=100, num_return_sequences=1)
: Genera testo a partire dal prompt, limitando la lunghezza a 100 token e restituendo una sola sequenza.[0]['generated_text']
: Estrae il testo generato dalla pipeline.
Variazioni:
- Puoi provare diversi modelli LLM cambiando il valore dell'argomento
model
. Hugging Face offre una vasta gamma di modelli pre-addestrati. - Puoi modificare il valore dell'argomento
max_length
per controllare la lunghezza del testo generato. - Puoi variare il prompt per ottenere risultati differenti.
Considerazioni:
- I modelli LLM possono richiedere risorse di calcolo significative. Colab offre GPU gratuite, che possono accelerare il processo di generazione del testo.
- La qualità del testo generato dipende dal modello utilizzato e dal prompt fornito.
- Alcuni modelli possono avere delle restrizioni d'uso, informarsi sempre sulle licenze dei vari modelli.
Ed ecco il codice completo che puoi copiare e incollare in un notebook di Google Colab:
# Passaggio 1: Installa le librerie necessarie
!pip install transformers
# Passaggio 2: Importa le librerie e carica il modello
from transformers import pipeline
generator = pipeline('text-generation', model='gpt2')
# Passaggio 3: Genera testo
prompt = "Scrivi una breve storia su un gatto che parla."
generated_text = generator(prompt, max_length=100, num_return_sequences=1)[0]['generated_text']
# Passaggio 4: Stampa il testo generato
print(generated_text)
# Passaggio 5: Variazioni (opzionali)
# Prova con un modello diverso
# generator = pipeline('text-generation', model='distilgpt2')
# Modifica la lunghezza del testo generato
# generated_text = generator(prompt, max_length=150, num_return_sequences=1)[0]['generated_text']
# Modifica il prompt
# prompt = "Racconta una barzelletta sui pinguini."
# Rigenera il testo con le modifiche
# generated_text = generator(prompt, max_length=100, num_return_sequences=1)[0]['generated_text']
# print(generated_text)
Istruzioni:
- Apri Google Colab (colab.research.google.com).
- Crea un nuovo notebook.
- Copia e incolla il codice sopra in una cella di codice.
- Esegui la cella (premi Shift+Invio).
In questo esempio abbiamo utilizzato la funzione pipeline. La funzione pipeline è un'astrazione di alto livello fornita dalla libreria transformers di Hugging Face. Essa incapsula l'intero processo di utilizzo di un modello, dalla pre-elaborazione dell'input alla post-elaborazione dell'output. In pratica, ti permette di utilizzare un modello con poche righe di codice, senza doverti preoccupare dei dettagli implementativi.
A cosa serve?
La funzione pipeline può essere utilizzata per una vasta gamma di compiti di NLP, tra cui:
Generazione di testo: Generare testo a partire da un prompt, come nell'esempio precedente.
Analisi del sentiment: Determinare il sentimento espresso in un testo (positivo, negativo, neutro).
Risposta a domande: Rispondere a domande basate su un dato contesto.
Traduzione automatica: Tradurre testo da una lingua all'altra.
Riconoscimento di entità nominate (NER): Identificare entità nominate in un testo (persone, luoghi, organizzazioni).
Riassunto di testo: Riassumere testi lunghi.
Classificazione di testo: Classificare testi in diverse categorie.
Come funziona?
La funzione pipeline si occupa di:
Caricare il modello: Scaricare e caricare il modello pre-addestrato specificato.
Pre-elaborare l'input: Trasformare l'input (testo, immagine, audio) in un formato comprensibile dal modello.
Eseguire l'inferenza: Inviare l'input al modello e ottenere l'output.
Post-elaborare l'output: Trasformare l'output del modello in un formato leggibile.
Vantaggi dell'utilizzo di pipeline:
Semplicità: Permette di utilizzare modelli complessi con poche righe di codice.
Facilità d'uso: Non richiede una conoscenza approfondita dei dettagli implementativi dei modelli.
Versatilità: Supporta una vasta gamma di compiti di NLP e altri compiti di intelligenza artificiale.
Efficienza: Ottimizza il processo di utilizzo dei modelli.
Esempi di utilizzo: Python
Analisi del sentiment sentiment_analysis = pipeline("sentiment-analysis") print(sentiment_analysis("I love Hugging Face!"))
Risposta a domande question_answerer = pipeline("question-answering") print(question_answerer(question="Where do I live?", context="My name is Sarah and I live in London"))
Traduzione translator = pipeline("translation_en_to_de") print(translator("Hello, how are you?"))
In sintesi, la funzione pipeline è uno strumento potente e versatile che semplifica l'utilizzo dei modelli di intelligenza artificiale, rendendoli accessibili anche a chi non ha una conoscenza approfondita dei dettagli implementativi.
E' possibile inserire personalizzazioni nelle pipeline di Hugging Face, e questo può essere fatto in diversi modi per adattare il comportamento della pipeline alle tue esigenze specifiche. Ecco alcune delle possibilità:
-
Scelta di modelli specifici:
Quando crei una pipeline, puoi specificare quale modello pre-addestrato utilizzare. Questo ti permette di scegliere un modello che è stato addestrato per un compito specifico o che ha prestazioni migliori per il tuo caso d'uso. Ad esempio, puoi scegliere un modello di traduzione che è stato addestrato per una specifica coppia di lingue.
-
Configurazione dei parametri:
Molte pipeline consentono di configurare i parametri per controllare il comportamento del modello. Ad esempio, puoi controllare la lunghezza del testo generato, la temperatura per la generazione di testo o la soglia di confidenza per l'analisi del sentiment.
-
Utilizzo di tokenizer personalizzati:
I tokenizer sono utilizzati per convertire il testo in input in un formato comprensibile dal modello. In alcuni casi, potresti voler utilizzare un tokenizer personalizzato per gestire specifici tipi di testo o per migliorare le prestazioni del modello.
-
Creazione di pipeline personalizzate:
Per compiti più complessi o per integrare funzionalità personalizzate, puoi creare le tue pipeline. Questo ti permette di definire il flusso di lavoro completo, dalla pre-elaborazione dell'input alla post-elaborazione dell'output.
-
Aggiunta di logica di post-elaborazione:
Puoi aggiungere una logica di post-elaborazione personalizzata per modificare o filtrare l'output del modello. Questo può essere utile per formattare l'output in un modo specifico o per applicare regole aziendali.
Informazioni aggiuntive:
La documentazione di Hugging Face fornisce informazioni dettagliate su come personalizzare le pipeline e creare pipeline personalizzate.
È possibile trovare esempi e tutorial sulla piattaforma Hugging face, e nella documentazione della libreria "transformer".
In sintesi, le pipeline di Hugging Face offrono una notevole flessibilità e ti permettono di adattare il comportamento dei modelli alle tue esigenze specifiche.
Una possibile personalizzazione di una pipeline é la modifica della temperatura in una pipeline di Hugging Face per la generazione di testo:
Cos'è la temperatura?
La temperatura è un parametro che controlla la casualità della generazione di testo. Un valore di temperatura più basso rende il testo più deterministico e prevedibile, mentre un valore di temperatura più alto lo rende più casuale e creativo.
Come modificare la temperatura:
Puoi modificare la temperatura passando l'argomento temperature
alla funzione pipeline
quando crei la pipeline o quando la chiami per generare testo.
Esempio:
from transformers import pipeline
# Crea una pipeline per la generazione di testo con temperatura 0.7
generator = pipeline('text-generation', model='gpt2', temperature=0.7)
# Genera testo con la pipeline
prompt = "Scrivi una breve storia su un gatto che parla."
generated_text = generator(prompt, max_length=100, num_return_sequences=1)[0]['generated_text']
# Stampa il testo generato
print(generated_text)
# Esempio per modificare la temperatura a ogni chiamata.
generated_text_bassa_temp = generator(prompt, max_length=100, num_return_sequences=1, temperature=0.2)[0]['generated_text']
print(generated_text_bassa_temp)
generated_text_alta_temp = generator(prompt, max_length=100, num_return_sequences=1, temperature=1.5)[0]['generated_text']
print(generated_text_alta_temp)
Spiegazione:
temperature=0.7
: Imposta la temperatura della pipeline a 0.7. Puoi modificare questo valore per controllare la casualità del testo generato.temperature=0.2
: Imposta una temperatura bassa, facendo risultare il testo molto conservativo.temperature=1.5
: imposta una temperatura alta, rendendo il testo molto vario e a volte incoerente.
Sperimenta con diversi valori di temperatura per trovare quello che funziona meglio per il tuo caso d'uso. Valori di temperatura troppo alti possono portare a testo incoerente o senza senso, valori di temperatura troppo bassi possono portare a testo ripetitivo o noioso.
Oltre alla "temperatura", esistono diversi altri parametri che puoi modificare nelle pipeline di Hugging Face per controllare il comportamento dei modelli. Ecco alcuni esempi, suddivisi per tipologia di attività:
Generazione di testo:
max_length
:- Determina la lunghezza massima del testo generato.
- Utile per controllare la quantità di testo prodotto.
num_return_sequences
:- Specifica il numero di sequenze di testo da generare.
- Permette di ottenere più output dal modello.
top_k
:- Limita la selezione delle parole successive alle "k" parole più probabili.
- Può migliorare la qualità del testo generato.
top_p
:- Utilizza il campionamento "nucleus" per selezionare le parole successive.
- Considera solo le parole con una probabilità cumulativa superiore a "p".
repetition_penalty
:- Penalizza la ripetizione di parole o frasi nel testo generato.
- Utile per evitare la ripetizione di contenuti.
Analisi del sentiment:
top_k
:- Restituisce le "k" etichette di sentiment più probabili.
- Permette di ottenere una visione più dettagliata del sentimento.
Risposta a domande:
max_answer_len
:- Determina la lunghezza massima della risposta estratta dal contesto.
- Utile per controllare la lunghezza delle risposte.
top_k
:- Restituisce le "k" risposte più probabili.
- Permette di ottenere più risposte candidate.
Traduzione automatica:
max_length
:- Determina la lunghezza massima del testo tradotto.
- Utile per controllare la lunghezza delle traduzioni.
Riconoscimento di entità nominate (NER):
grouped_entities
:- Raggruppa le entità nominate correlate.
- Utile per ottenere una visione più strutturata delle entità.
Informazioni importanti:
- I parametri disponibili possono variare a seconda del modello e dell'attività.
- La documentazione di Hugging Face fornisce informazioni dettagliate sui parametri disponibili per ciascuna pipeline.
- È sempre utile consultare la documentazione dei modelli che si utilizzano, per avere un quadro completo delle possibilità di configurazione.