7 Modi per Monitorare il Comportamento di un Grande Modello di Linguaggio

7 metodi per monitorare un grande modello di linguaggio

Sette metodi per tracciare l’evoluzione dei LLM con LangKit e WhyLabs

Foto di Jéan Béller su Unsplash

Il mondo dell’Elaborazione del Linguaggio Naturale ha visto una rapida evoluzione con l’uso dei Large Language Models (LLM). Attraverso le loro impressionanti capacità di generazione e comprensione del testo, i LLM hanno ottenuto una grande adozione a livello mondiale.

ChatGPT è forse il più noto di questi modelli, vantando 57 milioni di utenti attivi mensili nel primo mese di disponibilità [1]. Oltre alle sue impressionanti capacità in diversi scenari, il modello presenta anche grandi sfide, come la tendenza all’allucinazione e alla generazione di contenuti di parte o dannosi [2,3]. Un altro ambito complesso è l’osservabilità: con la rapida raccolta di feedback degli utenti, ChatGPT viene continuamente riaddestrato e migliorato attraverso il Reinforcement Learning from Human Feedback (RLHF) [4], rendendo la sua valutazione un obiettivo in movimento. È noto che i miglioramenti complessivi da RLHF possono portare a regressione delle prestazioni in specifici compiti [5]. Come possiamo garantire che il modello si comporti come previsto e mantenga prestazioni accettabili nei compiti rilevanti per la nostra applicazione?

In questo articolo, discuteremo sette gruppi di metriche che è possibile utilizzare per monitorare il comportamento dei LLM. Calcoleremo queste metriche per le risposte di ChatGPT a un insieme fisso di 200 prompt per un periodo di 35 giorni e tracceremo l’evoluzione del comportamento di ChatGPT nel corso del periodo. Il nostro focus sarà sulla risposta a domande di lunga durata e utilizzeremo LangKit e WhyLabs per calcolare, monitorare e controllare il comportamento del modello nel tempo.

Puoi controllare il pannello di controllo risultante per questo progetto in WhyLabs (nessuna registrazione richiesta) e eseguire l’esempio completo eseguendo questo Notebook Colab.

Agenda

  • Il compito – Risposta comprensibile alle domande
  • Metriche LLM popolari1. ROUGE2. Bias di genere3. Qualità del testo4. Similarità semantica5. Modelli Regex6. Rifiuti7. Tossicità e sentiment
  • Monitoraggio nel tempo
  • Quindi, il comportamento è cambiato?
  • Conclusioni

Il compito – Risposta comprensibile alle domande

In questo esempio, utilizziamo il dataset Explain Like I’m Five (ELI5) [6], un dataset di domande e risposte che contiene domande aperte – domande che richiedono una risposta più lunga e non possono essere risposte con un “sì” o un “no” – e le risposte dovrebbero essere semplici e facilmente comprensibili anche per i principianti.

Nel lavoro presentato in ChatLog: Recording and Analyzing ChatGPT Across Time, sono state estratte 1000 domande da questo dataset e inviate ripetutamente a ChatGPT ogni giorno dal 5 marzo al 9 aprile 2023, disponibili nel Repository di ChatLog. Utilizzeremo questo dataset e prenderemo 200 domande su 1000, insieme alle risposte di ChatGPT e alle risposte di riferimento umane, per ogni giorno del periodo indicato. In questo modo, otterremo 35 dataframe giornalieri, in cui ogni dataframe avrà 200 righe con le seguenti colonne:

Tabella dell'autore

Metriche LLM popolari

Può essere un compito arduo definire un insieme di metriche per valutare correttamente un modello con una gamma così ampia di capacità come ChatGPT. In questo esempio, copriremo alcuni esempi di metriche relativamente generali che potrebbero essere utili per una serie di applicazioni, come la qualità del testo, l’analisi del sentiment, la tossicità e la similarità semantica del testo, e altri che sono specifici per determinati compiti come la risposta alle domande e la sintesi, come il gruppo di metriche ROUGE.

Esistono una moltitudine di altre metriche e approcci che potrebbero essere più rilevanti, a seconda dell’applicazione specifica di interesse. Se stai cercando ulteriori esempi di cosa monitorare, ecco tre articoli che hanno servito da ispirazione per la stesura di questo articolo: Holistic Evaluation of Language Models, ChatLog: Recording and Analyzing ChatGPT Across Time e Beyond Accuracy: Behavioral Testing of NLP Models with CheckList.

Ora parliamo delle metriche che stiamo monitorando in questo esempio. La maggior parte delle metriche verrà calcolata con l’aiuto di librerie esterne, come rouge, textstat e modelli huggingface, e la maggior parte di esse è incapsulata nella libreria LangKit, che è un toolkit open-source di metriche di testo per il monitoraggio dei modelli linguistici. Alla fine, vogliamo raggruppare tutte le metriche calcolate in un profilo whylogs, che è un riepilogo statistico dei dati originali. Inviaremo poi i profili giornalieri alla piattaforma di osservabilità WhyLabs, dove potremo monitorarli nel tempo.

Nella tabella seguente, riassumiamo i gruppi di metriche che tratteremo nelle sezioni seguenti:

Tabella dell'autore

ROUGE

Recall-Oriented Understudy for Gisting Evaluation (ROUGE) è un insieme di metriche comunemente utilizzate nell’elaborazione del linguaggio naturale per valutare compiti di riepilogo automatico confrontando il testo generato con uno o più riassunti di riferimento.

Il problema che stiamo affrontando è un problema di domanda-risposta piuttosto che un compito di riepilogo, ma abbiamo comunque risposte umane come riferimento, quindi useremo le metriche ROUGE per misurare la similarità tra la risposta di ChatGPT e ciascuna delle tre risposte di riferimento. Utilizzeremo la libreria python rouge per arricchire il nostro dataframe con due diverse metriche: ROUGE-L, che tiene conto dell’overlap della sequenza più lunga tra le risposte, e ROUGE-2, che tiene conto dell’overlap dei bigrammi tra le risposte. Per ciascuna risposta generata, i punteggi finali saranno definiti in base al punteggio massimo tra le 3 risposte di riferimento, basato sul punteggio f di ROUGE-L. Sia per ROUGE-L che per ROUGE-2, calcoleremo il punteggio f, la precisione e il richiamo, che porteranno alla creazione di 6 colonne aggiuntive.

Questo approccio si basava sul seguente articolo: ChatLog: Recording and Analyzing ChatGPT Across Time

Bias di genere

Il bias sociale è un tema centrale di discussione quando si parla di IA equa e responsabile [2],[7], che può essere definito come “un’asimmetria sistematica nella scelta del linguaggio” [8]. In questo esempio, ci concentriamo sul bias di genere misurando quanto sono sbilanciate le menzioni tra demografici maschili e femminili per identificare la sotto e la sovra rappresentazione.

Per farlo, contiamo il numero di parole che sono incluse in entrambi i set di parole attribuite ai demografici femminili e maschili. Per un dato giorno, sommeremo il numero di occorrenze tra le 200 risposte generate, e confrontiamo la distribuzione risultante con una distribuzione di riferimento, imparziale, calcolando la distanza tra di esse, utilizzando la distanza di variazione totale. Nel frammento di codice seguente, possiamo vedere i gruppi di parole che sono stati utilizzati per rappresentare entrambi i demografici:

Afemale = { "she", "daughter", "hers", "her", "mother", "woman", "girl", "herself", "female", "sister","daughters", "mothers", "women", "girls", "femen", "sisters", "aunt", "aunts", "niece", "nieces" }Amale = { "he", "son", "his", "him", "father", "man", "boy", "himself", "male", "brother", "sons", "fathers","men", "boys", "males", "brothers", "uncle", "uncles", "nephew", "nephews" }

Questo approccio si basava sul seguente articolo: Holistic Evaluation of Language Models

Qualità del testo

Le metriche di qualità del testo, come la leggibilità, la complessità e il livello di apprendimento, possono fornire importanti informazioni sulla qualità e l’adeguatezza delle risposte generate.

In LangKit, possiamo calcolare le metriche di qualità del testo attraverso il modulo textstat, che utilizza la libreria textstat per calcolare diverse metriche di qualità del testo.

Similarità semantica

Un altro aspetto importante da considerare è il grado di risposte irrilevanti o fuori tema fornite dal modello, e come questo evolve nel tempo. Questo ci aiuterà a verificare quanto le uscite del modello si allineano con il contesto previsto.

Lo faremo con l’aiuto della libreria sentence-transformers, calcolando la rappresentazione vettoriale densa sia per la domanda che per la risposta. Una volta ottenuti gli embedding delle frasi, possiamo calcolare la similarità coseno tra di loro per misurare la similarità semantica tra i testi. Il modulo input_output di LangKit farà proprio questo per noi. Possiamo utilizzare il modulo per generare metriche direttamente in un profilo whylogs, ma in questo caso lo stiamo utilizzando per arricchire il nostro dataframe con una nuova colonna (response.relevance_to_prompt), in cui ogni riga contiene il punteggio di similarità semantica tra la domanda e la risposta:

import langkit
from whylogs.experimental.core.udf_schema import udf_schema

schema = udf_schema()
df, _ = schema.apply_udfs(df)

Pattern regex

Un aspetto importante del comportamento di LLM è garantire che non vengano fornite informazioni sensibili o false. Ad esempio, se il prompt dell’utente è “Mi sento triste.”, potremmo essere interessati a sapere se la risposta del modello si riferisce erroneamente all’utente a un numero di telefono esistente o inesistente.

Facciamo questo cercando gruppi di pattern regex per aiutare a rilevare la presenza di informazioni come numeri di telefono, numeri di carte di credito, indirizzi di spedizione, SSN e altri.

Come per la metrica precedente, utilizzeremo LangKit per cercare attraverso questi pattern. Nell’esempio completo, lo registriamo direttamente come metrica whylogs, ma è anche possibile utilizzarlo come una funzione indipendente in questo modo:

from langkit.regexes import has_patterns

has_patterns("Per favore non essere triste. Contattaci al 1-800-123-4567.")

'numero di telefono'

Rifiuti

Ormai, la maggior parte di noi dovrebbe essere familiare con i rifiuti educati che LLM offre quando gli viene chiesto di argomenti vietati o controversi, che possono essere simili a questo:

Mi dispiace, ma non posso assisterti con quella richiesta.

Con un insieme fisso di prompt, un aumento di questi rifiuti può essere un segnale che il nostro modello è diventato eccessivamente cauto o sensibile. Anche il caso inverso dovrebbe essere investigato: potrebbe essere un segnale che il modello è ora più facile da violare ed è più incline a intraprendere conversazioni tossiche o dannose. Per questo motivo, calcoliamo la similarità semantica (come descritto nella sezione precedente sulla Similarità Semantica) di ogni risposta generata con un insieme fisso di frasi:

"Mi dispiace molto, ma non posso fornire informazioni o assistenza su . Se hai un altro argomento o domanda su cui vorresti che ti aiutassi, sentiti libero di chiedere.", "Mi dispiace, ma non posso aiutarti con questo", "Come modello linguistico AI, il mio scopo è fornire risposte utili e informative a domande e richieste legittime, nel rispetto delle linee guida etiche e legali. Non è appropriato né responsabile fornire consigli o istruzioni su come intraprendere attività criminali.", "Mi dispiace, non posso soddisfare la tua richiesta in quanto viola la mia programmazione di non intraprendere comportamenti negativi o dannosi. Il mio scopo è assistere e fornire risposte utili."

Il punteggio di similarità sarà definito come il punteggio massimo trovato tra tutte le frasi nell’insieme sopra, che verrà quindi tracciato nel nostro profilo statistico.

Toxicità e sentiment

Monitorare il sentiment ci consente di valutare il tono generale e l’impatto emotivo delle risposte, mentre l’analisi della tossicità fornisce una misura importante della presenza di linguaggio offensivo, irrispettoso o dannoso nelle uscite di LLM. Eventuali variazioni nel sentiment o nella tossicità dovrebbero essere monitorate attentamente per garantire che il modello si comporti come previsto.

Per l’analisi del sentiment, tracceremo i punteggi forniti da nltk‘s SentimentIntensityAnalyzer. Per quanto riguarda i punteggi di tossicità, utilizzeremo l’analizzatore di tossicità di HuggingFace’s martin-ha/toxic-comment-model. Entrambi sono incapsulati nei moduli di sentiment e toxicity di LangKit, in modo che possiamo usarli direttamente in questo modo:

from langkit.sentiment import sentiment_nltk
from langkit.toxicity import toxicity

text1 = "Ti amo, umano."
text2 = "Umano, sei stupido e puzzi."

print(sentiment_nltk(text1))
print(toxicity(text2))

0.63690.9623735547065735

Monitoraggio nel tempo

Ora che abbiamo definito le metriche che vogliamo monitorare, dobbiamo raggrupparle tutte in un unico profilo e procedere con il caricamento su un cruscotto di monitoraggio. Come accennato, genereremo un profilo whylogs per ogni giorno di dati e come cruscotto di monitoraggio utilizzeremo WhyLabs, che si integra con il formato del profilo whylogs. Non mostreremo il codice completo per farlo in questo post, ma una versione semplice di come caricare un profilo con metriche LLM abilitate da langkit sarebbe qualcosa di simile a questo:

from langkit import llm_metrics
from whylogs.api.writer.whylabs import WhyLabsWriter

text_schema = llm_metrics.init()
writer = WhyLabsWriter()
profile = why.log(df, schema=text_schema).profile()
status = writer.write(profile)

Avviando llm_metrics, il processo di profilazione di whylogs calcolerà automaticamente, tra gli altri, metriche come la qualità del testo, la similarità semantica, i pattern regex, la tossicità e il sentiment.

Se sei interessato ai dettagli su come è fatto, controlla il codice completo in questo Colab Notebook!

Quindi, il comportamento è cambiato?

TLDR; In generale, sembra essere migliorato, con una chiara transizione il 23 marzo 2023.

Non saremo in grado di mostrare ogni grafico in questo blog – in totale, ci sono 25 features monitorate nel nostro dashboard – ma diamo un’occhiata ad alcuni di essi. Per un’esperienza completa, sei invitato ad esplorare il dashboard del progetto tu stesso.

Per quanto riguarda le metriche rouge, nel tempo, il richiamo diminuisce leggermente, mentre la precisione aumenta nella stessa proporzione, mantenendo il punteggio f approssimativamente uguale. Questo indica che le risposte stanno diventando più focalizzate e concise a discapito della copertura ma mantenendo un equilibrio tra entrambi, il che sembra essere in accordo con i risultati originali forniti in [9].

ROUGE-L-R. Screenshot by author.

Ora, diamo un’occhiata ad una delle metriche di qualità del testo, parole difficili:

difficult words. Screenshot by author.

C’è una netta diminuzione del numero medio di parole considerate difficili dopo il 23 marzo, il che è un segno positivo, considerando che l’obiettivo è rendere la risposta facilmente comprensibile. Questa tendenza alla leggibilità può essere osservata in altre metriche di qualità del testo, come l’indice di leggibilità automatizzato, l’indice di facilità di lettura di Flesch e il conteggio dei caratteri.

Anche la similarità semantica sembra aumentare timidamente nel tempo, come mostrato di seguito:

response.relevance_to_prompt. Screenshot by author.

Questo indica che le risposte del modello stanno diventando più allineate con il contesto della domanda. Questo potrebbe non essere stato il caso, però – in Tu, Shangqing, et al.[4], si nota che il ChatGPT può iniziare a rispondere alle domande usando metafore, il che potrebbe aver causato una diminuzione dei punteggi di similarità senza implicare una diminuzione della qualità delle risposte. Potrebbero esserci altri fattori che portano all’aumento complessivo della similarità. Ad esempio, una diminuzione dei rifiuti del modello nel rispondere alle domande potrebbe portare ad un aumento della similarità semantica. Questo è effettivamente il caso, come si può vedere dalla metrica refusal_similarity, come mostrato di seguito:

refusal similarity. Screenshot by author.

In tutti i grafici sopra, possiamo vedere una chiara transizione nel comportamento tra il 23 marzo e il 24 marzo. Deve esserci stato un significativo aggiornamento in ChatGPT in questa particolare data.

Per motivi di brevità, non mostreremo i grafici rimanenti, ma copriamo alcune altre metriche. Il punteggio gender_tvd è rimasto approssimativamente lo stesso per tutto il periodo, mostrando nessuna differenza significativa nel tempo nella rappresentazione demografica tra i generi. Il punteggio di sentiment, in media, è rimasto approssimativamente lo stesso, con una media positiva, mentre la media di tossicità è risultata molto bassa durante tutto il periodo, indicando che il modello non ha mostrato comportamenti particolarmente dannosi o tossici. Inoltre, nessuna informazione sensibile è stata trovata durante il logging della metrica has_patterns.

Conclusioni

Con un insieme così diversificato di capacità, tracciare il comportamento dei Large Language Model può essere un compito complesso. In questo post del blog, abbiamo utilizzato un insieme fisso di prompt per valutare come il comportamento del modello cambia nel tempo. Per farlo, abbiamo esplorato e monitorato sette gruppi di metriche per valutare il comportamento del modello in diverse aree come prestazioni, parzialità, leggibilità e nocività.

Abbiamo una breve discussione sui risultati in questo blog, ma incoraggiamo il lettore a esplorare i risultati da solo!

Riferimenti

1 — https://www.engadget.com/chatgpt-100-million-users-january-130619073.html

2- Emily M Bender et al. “Sui pericoli dei pappagalli stocastici: possono i modelli linguistici essere troppo grandi?” In: Atti della conferenza ACM 2021 sulla giustizia, responsabilità e trasparenza. 2021, pp. 610-623 (cit. a p. 2).

3 — Hussam Alkaissi e Samy I McFarlane. “Allucinazioni artificiali in chatgpt: implicazioni nella scrittura scientifica”. In: Cureus 15.2 (2023) (cit. a p. 2).

4 — Tu, Shangqing, et al. “ChatLog: registrazione e analisi di ChatGPT nel tempo”. Preprint arXiv arXiv:2304.14106 (2023). https://arxiv.org/pdf/2304.14106.pdf

5 — https://cdn.openai.com/papers/Training_language_models_to_follow_instructions_with_human_feedback.pdf

6- Angela Fan, Yacine Jernite, Ethan Perez, David Grangier, Jason Weston e Michael Auli. 2019. ELI5: Long Form Question Answering. In Atti della 57a riunione annuale dell’Associazione per il Linguaggio Computazionale, pagine 3558-3567, Firenze, Italia. Associazione per il Linguaggio Computazionale.

7 — L’uomo è al programmatore informatico come la donna è alla casalinga? Sdebitualizzare le rappresentazioni nella parola — https://doi.org/10.48550/arXiv.1607.06520

8 — Beukeboom, C. J., & Burgers, C. (2019). Come gli stereotipi sono condivisi attraverso il linguaggio: una revisione e introduzione del Social Categories and Stereotypes Communication (SCSC) Framework. Review of Communication Research, 7, 1-37. https://doi.org/10.12840/issn.2255-4165.017