1. Introduzione
I prodotti di IA generativa sono relativamente nuovi e il comportamento di un'applicazione può variare più di quanto accadeva con le precedenti forme di software. Per questo motivo, è importante analizzare i modelli di machine learning in uso, esaminare esempi del comportamento del modello e indagare sulle sorprese.
Learning Interpretability Tool (LIT; sito web, GitHub) è una piattaforma per il debug e l'analisi dei modelli di ML al fine di comprendere perché e come si comportano in un determinato modo.
In questo codelab imparerai a utilizzare LIT per ottenere il massimo dal modello Gemma di Google. Questo codelab mostra come utilizzare la salienza della sequenza, una tecnica di interpretabilità, per analizzare diversi approcci di progettazione dei prompt.
Obiettivi di apprendimento:
- Comprendere l'importanza della sequenza e i relativi utilizzi nell'analisi del modello.
- Configurazione di LIT per Gemma per calcolare gli output dei prompt e la salienza della sequenza.
- Utilizzare la salienza della sequenza tramite il modulo LM Salience per comprendere l'impatto dei design dei prompt sugli output del modello.
- Testare i miglioramenti ipotizzati dei prompt in LIT e valutarne l'impatto.
Nota: questo codelab utilizza l'implementazione di KerasNLP di Gemma e TensorFlow 2 per il backend. Ti consigliamo vivamente di utilizzare un kernel GPU per seguire la procedura.
2. Incidenza della sequenza e relativi utilizzi nell'analisi del modello
I modelli generativi di conversione di testo in testo, come Gemma, prendono una sequenza di input sotto forma di testo tokenizzato e generano nuovi token che sono tipici follow-on o completamenti di quell'input. Questa generazione avviene un token alla volta, aggiungendo (in un ciclo) ogni token appena generato all'input più eventuali generazioni precedenti finché il modello non raggiunge una condizione di arresto. Alcuni esempi sono quando il modello genera un token di fine sequenza (EOS) o raggiunge la lunghezza massima predefinita.
I metodi di rilevanza sono una classe di tecniche di IA spiegabile (XAI) che possono indicare quali parti di un input sono importanti per il modello per diverse parti del suo output. LIT supporta i metodi di rilevanza per una serie di attività di classificazione, che spiegano l'impatto di una sequenza di token di input sull'etichetta prevista. L'importanza della sequenza generalizza questi metodi ai modelli generativi di testo a testo e spiega l'impatto dei token precedenti sui token generati.
Qui utilizzerai il metodo Norma L2 del gradiente per la salienza della sequenza, che analizza i gradienti del modello e fornisce un'indicazione dell'influenza di ciascun token precedente sull'output. Questo metodo è semplice ed efficiente e ha dimostrato di avere un buon rendimento nella classificazione e in altre impostazioni. Maggiore è il punteggio di pertinenza, maggiore è l'influenza. Questo metodo viene utilizzato in LIT perché è ben compreso e ampiamente utilizzato nella community di ricerca sull'interpretabilità.
I metodi di salienza basati su gradienti più avanzati includono Grad ⋅ Input e gradienti integrati. Sono disponibili anche metodi basati sull'ablazione, come LIME e SHAP, che possono essere più robusti, ma notevolmente più costosi da calcolare. Consulta questo articolo per un confronto dettagliato dei diversi metodi di rilevanza.
Puoi scoprire di più sulla scienza dei metodi di evidenza in questa esplorazione interattiva introduttiva all'evidenza.
3. Importazioni, ambiente e altro codice di configurazione
Ti consigliamo di seguire questo codelab nel nuovo Colab. Ti consigliamo di utilizzare un runtime dell'acceleratore, poiché caricherai un modello in memoria, ma tieni presente che le opzioni dell'acceleratore variano nel tempo e sono soggette a limitazioni. Colab offre abbonamenti a pagamento se vuoi accedere ad acceleratori più potenti. In alternativa, puoi utilizzare un runtime locale se la tua macchina dispone di una GPU appropriata.
Nota: potresti visualizzare alcuni avvisi del tipo
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. bigframes 0.21.0 requires scikit-learn>=1.2.2, but you have scikit-learn 1.0.2 which is incompatible. google-colab 1.0.0 requires ipython==7.34.0, but you have ipython 8.14.0 which is incompatible.
Questi elementi possono essere ignorati.
Installa LIT e Keras NLP
Per questo codelab, ti servirà una versione recente di keras
(3) keras-nlp
(0.14.) e lit-nlp
(1.2) e un account Kaggle per scaricare il modello di base.
pip install -q -U 'keras >= 3.0' 'keras-nlp >= 0.14' 'lit-nlp >= 1.2'
Kaggle Access
Per eseguire l'autenticazione con Kaggle, puoi:
- Memorizza le credenziali in un file, ad esempio
~/.kaggle/kaggle.json
; - Utilizza le variabili di ambiente
KAGGLE_USERNAME
eKAGGLE_KEY
. - Esegui quanto segue in un ambiente Python interattivo, come Google Colab.
import kagglehub
kagglehub.login()
Per ulteriori dettagli, consulta la documentazione di kagglehub
e assicurati di accettare il contratto di licenza di Gemma.
Configurazione di Keras
Keras 3 supporta più backend di deep learning, tra cui TensorFlow (predefinito), PyTorch e JAX. Il backend viene configurato utilizzando la variabile di ambiente KERAS_BACKEND
, che deve essere impostata prima dell'importazione della libreria Keras. Il seguente snippet di codice mostra come impostare questa variabile in un ambiente Python interattivo.
import os
os.environ["KERAS_BACKEND"] = "tensorflow" # or "jax" or "torch"
4. Configurazione di LIT
LIT può essere utilizzato nei notebook Python o tramite un server web. Questo Codelab si concentra sul caso d'uso dei blocchi note. Ti consigliamo di seguire la procedura in Google Colab.
In questo Codelab caricherai Gemma v2 2B IT utilizzando il preset KerasNLP. Lo snippet seguente inizializza Gemma e carica un set di dati di esempio in un widget LIT Notebook.
from lit_nlp.examples.prompt_debugging import notebook as lit_pdbnb
lit_widget = lit_pdbnb.make_notebook_widget(
['sample_prompts'],
["gemma2_2b_it:gemma2_instruct_2b_en"],
)
Puoi configurare il widget modificando i valori passati ai due argomenti posizionali obbligatori:
datasets_config
: un elenco di stringhe contenenti i nomi e i percorsi dei set di dati da cui caricare, come "dataset:path", dove il percorso può essere un URL o un percorso file locale. L'esempio seguente utilizza il valore specialesample_prompts
per caricare i prompt di esempio forniti nella distribuzione LIT.models_config
: un elenco di stringhe contenenti i nomi e i percorsi dei modelli da cui caricare, come "model:path", dove il percorso può essere un URL, un percorso file locale o il nome di una preimpostazione per il framework di deep learning configurato.
Dopo aver configurato LIT per utilizzare il modello che ti interessa, esegui il seguente snippet di codice per eseguire il rendering del widget nel tuo notebook.
lit_widget.render(open_in_new_tab=True)
Utilizzo dei tuoi dati
In qualità di modello generativo da testo a testo, Gemma prende un input di testo e genera un output di testo. LIT utilizza un'API opinata per comunicare la struttura dei set di dati caricati ai modelli. Gli LLM in LIT sono progettati per funzionare con set di dati che forniscono due campi:
prompt
: l'input del modello da cui verrà generato il testo; etarget
: una sequenza target facoltativa, ad esempio una risposta "basata su dati di fatto" di valutatori umani o una risposta pregenerata di un altro modello.
LIT include un piccolo insieme di sample_prompts
con esempi tratti dalle seguenti fonti che supportano questo codelab e il tutorial esteso sul debug dei prompt di LIT.
- GSM8K: risoluzione di problemi di matematica della scuola elementare con esempi di pochi scatti.
- Benchmark Gigaword: generazione di titoli per una raccolta di articoli brevi.
- Prompt costituzionali: generazione di nuove idee su come utilizzare gli oggetti con linee guida/confini.
Puoi anche caricare facilmente i tuoi dati come file .jsonl
contenente record con i campi prompt
e, facoltativamente, target
(esempio) o da qualsiasi formato utilizzando l'API Dataset di LIT.
Esegui la cella di seguito per caricare i prompt di esempio.
5. Analisi dei prompt con pochi scatti per Gemma in LIT
Oggi, la creazione di prompt è tanto un'arte quanto una scienza e LIT può aiutarti a migliorare empiricamente i prompt per i modelli linguistici di grandi dimensioni, come Gemma. Di seguito vedrai un esempio di come LIT può essere utilizzato per esplorare i comportamenti di Gemma, anticipare potenziali problemi e migliorare la sua sicurezza.
Identificare gli errori nei prompt complessi
Due delle tecniche di prompt più importanti per prototipi e applicazioni basati su LLM di alta qualità sono i prompt few-shot (che includono esempi del comportamento desiderato nel prompt) e la catena di pensiero (che include una forma di spiegazione o ragionamento prima dell'output finale dell'LLM). Tuttavia, creare un prompt efficace è spesso ancora una sfida.
Prendiamo come esempio l'aiuto che puoi dare a una persona per valutare se le piacerà un determinato cibo in base ai suoi gusti. Un modello di prompt di tipo chain-of-thought per un prototipo iniziale potrebbe avere il seguente aspetto:
def analyze_menu_item_template(food_likes, food_dislikes, menu_item):
return f"""Analyze a menu item in a restaurant.
## For example:
Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: You have to try it.
Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Baguette maison au levain
Analysis: Home-made leaven bread in france is usually great
Recommendation: Likely good.
Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Macaron in france
Analysis: Sweet with many kinds of flavours
Recommendation: You have to try it.
## Now analyze one more example:
Taste-likes: {food_likes}
Taste-dislikes: {food_dislikes}
Suggestion: {menu_item}
Analysis:"""
Hai notato i problemi con questo prompt? LIT ti aiuterà a esaminare il prompt con il modulo LM Salience.
6. Utilizzare l'importanza della sequenza per il debug
La salienza viene calcolata al livello più basso possibile (ovvero per ogni token di input), ma LIT può aggregare la salienza dei token in intervalli più grandi e più interpretabili, come righe, frasi o parole. Scopri di più sull'importanza e su come utilizzarla per identificare bias involontari nella nostra pagina Esplorabile per l'importanza.
Iniziamo dando al prompt un nuovo input di esempio per le variabili del modello di prompt:
food_likes = """Cheese"""
food_dislikes = """Can't eat eggs"""
menu_item = """Quiche Lorraine"""
prompt = analyze_menu_item_template(food_likes, food_dislikes, menu_item)
print(prompt)
fewshot_mistake_example = {'prompt': prompt} # you'll use this below
Analyze a menu item in a restaurant. ## For example: Taste-likes: I've a sweet-tooth Taste-dislikes: Don't like onions or garlic Suggestion: Onion soup Analysis: it has cooked onions in it, which you don't like. Recommendation: You have to try it. Taste-likes: I've a sweet-tooth Taste-dislikes: Don't like onions or garlic Suggestion: Baguette maison au levain Analysis: Home-made leaven bread in france is usually great Recommendation: Likely good. Taste-likes: I've a sweet-tooth Taste-dislikes: Don't like onions or garlic Suggestion: Macaron in france Analysis: Sweet with many kinds of flavours Recommendation: You have to try it. ## Now analyze one more example: Taste-likes: Cheese Taste-dislikes: Can't eat eggs Suggestion: Quiche Lorraine Analysis:
Se hai aperto l'interfaccia utente di LIT nella cella sopra o in una scheda separata, puoi utilizzare l'editor dei punti dati di LIT per aggiungere questo prompt:
Un altro modo è eseguire nuovamente il rendering del widget direttamente con il prompt di interesse:
lit_widget.render(data=[fewshot_mistake_example])
Prendi nota del completamento sorprendente del modello:
Taste-likes: Cheese Taste-dislikes: Can't eat eggs Suggestion: Quiche Lorraine Analysis: A savoury tart with cheese and eggs Recommendation: You might not like it, but it's worth trying.
Perché il modello ti suggerisce di mangiare qualcosa che hai chiaramente dichiarato di non poter mangiare?
L'importanza della sequenza può contribuire a evidenziare il problema principale, che si trova nei nostri esempi con pochi esempi. Nel primo esempio, il ragionamento della catena di pensiero nella sezione di analisi it has cooked onions in it, which you don't like
non corrisponde al consiglio finale You have to try it
.
Nel modulo Evidenziazione LM, seleziona "Sentenze" e poi la riga del consiglio. L'interfaccia utente dovrebbe avere il seguente aspetto:
Questo evidenzia un errore umano: una copia e incolla accidentale della parte relativa ai consigli e la mancata aggiornamento.
Ora correggiamo il valore "Consiglio" nel primo esempio in Avoid
e riprova. LIT ha questo esempio precaricato nei prompt di esempio, quindi puoi utilizzare questa piccola funzione di utilità per recuperarlo:
def get_fewshot_example(source: str) -> str:
for example in datasets['sample_prompts'].examples:
if example['source'] == source:
return example['prompt']
raise ValueError(f'Source "{source}" not found in the dataset.')
lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-fixed')}])
Ora il completamento del modello diventa:
Taste-likes: Cheese Taste-dislikes: Can't eat eggs Suggestion: Quiche Lorraine Analysis: This dish contains eggs and cheese, which you don't like. Recommendation: Avoid.
Una lezione importante da trarre da questa esperienza è che la prototipazione precoce aiuta a rilevare rischi che potresti non prevedere in anticipo e la natura soggetta a errori dei modelli linguistici significa che devi progettare in modo proattivo per gli errori. Per ulteriori informazioni, consulta la nostra People + AI Guidebook per la progettazione con l'IA.
Sebbene il prompt corretto con pochi scatti sia migliore, non è ancora del tutto corretto: dice correttamente all'utente di evitare le uova, ma il ragionamento non è corretto, dice che non gli piacciono le uova, quando in realtà l'utente ha dichiarato di non poterle mangiare. Nella sezione seguente scoprirai come migliorare.
7. Testare ipotesi per migliorare il comportamento del modello
LIT ti consente di testare le modifiche ai prompt all'interno della stessa interfaccia. In questo caso, proverai ad aggiungere una costituzione per migliorare il comportamento del modello. Le costituzioni fanno riferimento a prompt di progettazione con principi che aiutano a guidare la generazione del modello. I metodi recenti consentono persino la derivazione interattiva dei principi costituzionali.
Utilizziamo questa idea per migliorare ulteriormente il prompt. Aggiungi una sezione con i principi per la generazione nella parte superiore del prompt, che ora inizia come segue:
Analyze a menu item in a restaurant. * The analysis should be brief and to the point. * The analysis and recommendation should both be clear about the suitability for someone with a specified dietary restriction. ## For example: Taste-likes: I've a sweet-tooth Taste-dislikes: Don't like onions or garlic Suggestion: Onion soup Analysis: it has cooked onions in it, which you don't like. Recommendation: Avoid. ...
lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-constitution')}])
Con questo aggiornamento, l'esempio può essere eseguito di nuovo e osservare un output molto diverso:
Taste-likes: Cheese Taste-dislikes: Can't eat eggs Suggestion: Quiche Lorraine Analysis: This dish contains eggs, which you can't eat. Recommendation: Not suitable for you.
La pertinenza del prompt può quindi essere riesaminata per capire perché si verifica questa variazione:
Tieni presente che il consiglio è molto più sicuro. Inoltre, l'opzione "Non adatto a te" è influenzata dal principio di indicare chiaramente l'idoneità in base alle limitazioni dietetiche, insieme all'analisi (la cosiddetta catena di pensiero). In questo modo, avrai la certezza che l'output si verifichi per il motivo giusto.
8. Includi team non tecnici nell'esplorazione e nel sondaggio del modello
L'interpretabilità è un impegno di gruppo che richiede competenze in materia di IA spiegabile, norme, diritto e altro ancora.
Tradizionalmente, l'interazione con i modelli nelle prime fasi di sviluppo richiedeva una notevole esperienza tecnica, il che rendeva più difficile per alcuni collaboratori accedervi e analizzarli. In passato non esistevano strumenti che consentissero a questi team di partecipare alle prime fasi di prototipazione.
Con il LIT, ci auguriamo che questo paradigma possa cambiare. Come hai visto in questo codelab, il mezzo visivo e la capacità interattiva di LIT di esaminare la pertinenza ed esplorare gli esempi possono aiutare diversi stakeholder a condividere e comunicare i risultati. In questo modo, puoi coinvolgere un numero maggiore di colleghi per l'esplorazione, il monitoraggio e il debug dei modelli. L'esposizione a questi metodi tecnici può migliorare la comprensione del funzionamento dei modelli. Inoltre, un insieme più diversificato di competenze nei test iniziali dei modelli può anche aiutare a scoprire risultati indesiderati che possono essere migliorati.
9. Riepilogo
Riepilogo:
- L'interfaccia utente di LIT fornisce un'interfaccia per l'esecuzione di modelli interattivi, consentendo agli utenti di generare direttamente i risultati e di testare scenari "what if". Questo è particolarmente utile per testare diverse varianti del prompt.
- Il modulo di rilevanza del modello linguistico fornisce una rappresentazione visiva della rilevanza e una granularità dei dati controllabile, in modo da poter comunicare su costrutti incentrati sugli utenti (ad es. frasi e parole) anziché su costrutti incentrati sul modello (ad es. token).
Quando trovi esempi problematici nelle valutazioni del modello, importali in LIT per il debug. Inizia analizzando la più grande unità di contenuti ragionevoli che puoi immaginare e che si riferiscono logicamente all'attività di creazione del modello, utilizza le visualizzazioni per vedere dove il modello gestisce correttamente o erroneamente i contenuti del prompt e poi visualizza in dettaglio unità di contenuti più piccole per descrivere ulteriormente il comportamento errato che stai riscontrando al fine di identificare possibili correzioni.
Infine, Lit è in continuo miglioramento. Scopri di più sulle nostre funzionalità e condividi i tuoi suggerimenti qui.