Valutare i grandi modelli di linguaggio per qualità e responsabilità

Valutare i modelli di linguaggio avanzati per qualità ed etica

I rischi associati all’IA generativa sono stati ampiamente pubblicizzati. La tossicità, il pregiudizio, la fuga dei dati personali e le allucinazioni influiscono negativamente sulla reputazione di un’organizzazione e danneggiano la fiducia dei clienti. La ricerca mostra che i rischi di bias e tossicità si trasferiscono non solo dai modelli di base pre-addestrati (FM) ai servizi di IA generativa specifici di una determinata attività, ma che l’affinamento di un FM per specifici compiti, su set di dati incrementali, introduce nuovi rischi, e possibilmente maggiori. Rilevare e gestire questi rischi, come prescritto dalle guide e regolamenti in continua evoluzione, come ISO 42001 ed EU AI Act, è una sfida. I clienti devono lasciare il proprio ambiente di sviluppo per utilizzare strumenti accademici e siti di benchmarking, che richiedono una conoscenza altamente specializzata. Il gran numero di metriche rende difficile filtrare quelle veramente rilevanti per i loro casi d’uso. Questo noioso processo viene ripetuto frequentemente all’uscita di nuovi modelli e all’affinamento di quelli esistenti.

Amazon SageMaker Clarify offre ora ai clienti AWS valutazioni dei modelli di base (FM), un insieme di capacità progettate per valutare e confrontare metriche di qualità e responsabilità del modello per qualsiasi LLM, in pochi minuti. Le valutazioni dei FM forniscono informazioni operative tramite la scienza standard del settore, che potrebbero essere estese per supportare casi d’uso specifici del cliente. Vengono forniti punteggi di valutazione verificabili per la generazione di testo, la sintesi, la classificazione e le risposte alle domande, includendo scenari e algoritmi definiti dal cliente. I rapporti riassumono in modo completo ogni valutazione in modo comprensibile per l’uomo, attraverso spiegazioni in linguaggio naturale, visualizzazioni ed esempi, focalizzando gli annotatori e gli scienziati dei dati su dove ottimizzare i loro LLM e aiutando a prendere decisioni informate. Si integra anche con i flussi di lavoro di Machine Learning e Operations (MLops) in Amazon SageMaker per automatizzare e scalare il ciclo di vita del machine learning.

Cos’è FMEval?

Con le valutazioni dei FM, introdurremo FMEval, una libreria di valutazione LLM open-source, progettata per fornire ai data scientist e agli ingegneri di machine learning un’esperienza basata sul codice per valutare LLM per la qualità e la responsabilità mentre selezionano o adattano LLM a casi d’uso specifici. FMEval offre la possibilità di eseguire valutazioni sia per i modelli di endpoint LLM che per l’endpoint di un servizio di IA generativa nel suo complesso. FMEval aiuta a misurare dimensioni di valutazione come accuratezza, robustezza, pregiudizio, tossicità e conoscenza fattuale per qualsiasi LLM. Puoi utilizzare FMEval per valutare LLM ospitati su AWS come Amazon Bedrock, Jumpstart e altri modelli SageMaker. Puoi anche utilizzarlo per valutare LLM ospitati su piattaforme di creazione di modelli di terze parti, come ChatGPT, HuggingFace e LangChain. Questa opzione consente ai clienti di consolidare tutta la loro logica di valutazione LLM in un unico punto, anziché distribuire gli investimenti di valutazione su piattaforme multiple.

Come puoi iniziare? Puoi utilizzare direttamente FMEval ovunque tu esegua i tuoi carichi di lavoro, come pacchetto Python o tramite il repository di codice open-source, reso disponibile su GitHub per garantire trasparenza e contribuire alla comunità dell’IA responsabile. FMEval intenzionalmente non fornisce raccomandazioni esplicite, ma invece fornisce dati e rapporti facili da comprendere per consentire ai clienti AWS di prendere decisioni. FMEval ti consente di caricare i tuoi set di dati di prompt e algoritmi. La funzione di valutazione principale, evaluate(), è estensibile. Puoi caricare un set di dati di prompt, selezionare e caricare una funzione di valutazione ed eseguire un lavoro di valutazione. I risultati vengono forniti in vari formati, aiutandoti a rivedere, analizzare e operazionalizzare gli elementi ad alto rischio e prendere una decisione informata sul LLM giusto per il tuo caso d’uso.

Algoritmi supportati

FMEval offre 12 valutazioni integrate che coprono 4 diverse attività. Poiché il numero possibile di valutazioni è nell’ordine delle centinaia e il panorama delle valutazioni è ancora in espansione, FMEval si basa sulle ultime scoperte scientifiche e sulle valutazioni open-source più popolari. Abbiamo analizzato i framework di valutazione open-source esistenti e progettato l’API di valutazione FMEval con l’estensibilità in mente. L’insieme proposto di valutazioni non mira a toccare ogni aspetto dell’uso LLM, ma piuttosto a offrire valutazioni popolari pronte all’uso e consentire di introdurne di nuove.

FMEval copre le seguenti quattro diverse attività e cinque diverse dimensioni di valutazione come mostrato nella seguente tabella:

Compito Dimensione di valutazione
Generazione open-ended Stereotipizzazione prompt
. Tossicità
. Conoscenza fattuale
. Robustezza semantica
Riassunto del testo Precisione
. Tossicità
. Robustezza semantica
Risposta alle domande (Q&A) Precisione
. Tossicità
. Robustezza semantica
Classificazione Precisione
. Robustezza semantica

Per ogni valutazione, FMEval fornisce set di dati prompt incorporati, curati dalla comunità accademica e open-source, per iniziare. I clienti utilizzeranno i set di dati incorporati per basare il proprio modello e imparare come valutare i propri set di dati (BYO) progettati specificamente per un caso d’uso di intelligenza artificiale generativa.

Nella sezione seguente, approfondiamo le diverse valutazioni:

  1. Precisione: Valuta le prestazioni del modello in diverse attività, con specifici indicatori di valutazione adattati a ciascuna attività, come riassunto, risposta alle domande (Q&A), e classificazione.
    1. Riassunto: Comprende tre metriche: (1) punteggi ROUGE-N (una classe di metriche basate sul recall e su F-measure che calcolano gli overlap di parole N-gramma tra il testo di riferimento e il riassunto del modello. Le metriche non sono sensibili alle maiuscole e i valori sono compresi tra 0 (nessuna corrispondenza) e 1 (corrispondenza perfetta)); (2) punteggio METEOR (simile a ROUGE, ma include stemming e corrispondenza di sinonimi tramite liste di sinonimi, ad esempio “pioggia” → “pioggerellina”); (3) BERTScore (un secondo modello di machine learning della famiglia BERT per calcolare gli embedding delle frasi e confrontarne la somiglianza coseno. Questo punteggio può tener conto di una flessibilità linguistica aggiuntiva rispetto a ROUGE e METEOR, poiché frasi semanticamente simili possono essere più vicine tra loro).
    2. Q&A: Misura quanto bene il modello si comporta sia nella modalità “libro chiuso” sia nella modalità “libro aperto”. Nella modalità Q&A di libro aperto, al modello viene presentato un testo di riferimento contenente la risposta (il compito del modello è estrarre la risposta corretta dal testo). Nel caso del libro chiuso, al modello non viene presentata alcuna informazione aggiuntiva, ma utilizza la propria conoscenza del mondo per rispondere alla domanda. Utilizziamo set di dati come BoolQ, NaturalQuestions e TriviaQA. Questa dimensione riporta tre metriche principali: corrispondenza esatta, corrispondenza quasi esatta e F1 delle parole, valutate confrontando le risposte predette dal modello con le risposte corrette fornite in modi diversi. Tutti e tre i punteggi sono riportati come media sull’intero set di dati. Il punteggio aggregato è un numero compreso tra 0 (peggiore) e 1 (migliore) per ciascuna metrica.
    3. Classificazione: Utilizza metriche standard di classificazione come precisione, recall e precisione bilanciata. Il nostro esempio di attività incorporata è la classificazione del sentiment, in cui il modello predice se una recensione dell’utente è positiva o negativa, e forniamo ad esempio il set di dati delle recensioni di abbigliamento per donne che consiste in 23.000 recensioni di abbigliamento, sia come testo che come punteggi numerici.
  2. Robustezza semantica: Valuta il cambiamento delle prestazioni del modello in seguito a perturbazioni semanticamente preservanti agli input. Può essere applicato a ogni attività che coinvolge la generazione di contenuti (inclusa la generazione open-ended, il riassunto e la risposta alle domande). Ad esempio, supponiamo che l’input al modello sia “Un velocissimo cane marrone salta sopra il cane pigro”. Quindi la valutazione effettuerà una delle tre perturbazioni seguenti. È possibile selezionare tra tre tipi di perturbazioni durante la configur

    Utilizzo della libreria FMEval per le valutazioni

    Gli utenti possono implementare valutazioni per le loro FM utilizzando il pacchetto open-source FMEval. Il pacchetto FMEval comprende alcuni costrutti fondamentali necessari per condurre lavori di valutazione. Questi costrutti aiutano a stabilire i dataset, il modello che si sta valutando e l’algoritmo di valutazione che si sta implementando. Tutti e tre i costrutti possono essere ereditati e adattati per utilizzi personalizzati, quindi non si è vincolati all’utilizzo delle funzionalità integrate fornite. I costrutti fondamentali sono definiti come seguenti oggetti nel pacchetto FMEval:

    • Data config : l’oggetto data config indica la posizione del dataset, che sia locale o in un percorso S3. Inoltre, la configurazione dei dati contiene campi come model_input, target_output e model_output. A seconda dell’algoritmo di valutazione che si utilizza, questi campi possono variare. Ad esempio, per la conoscenza fattuale è necessario un input del modello e un output target per eseguire correttamente l’algoritmo di valutazione. Opzionalmente, è anche possibile popolare in anticipo l’output del modello e non preoccuparsi di configurare un oggetto Model Runner poiché l’elaborazione è già stata completata in precedenza.
    • Model runner : un model runner è l’FM (Feature Model) che si ha ospitato e che condurrà l’inferenza. Con il pacchetto FMEval, l’hosting del modello è agnostico, ma sono disponibili alcuni model runner integrati. Ad esempio, sono fornite le classi native JumpStart, Amazon Bedrock e SageMaker Endpoint Model Runner. Qui è possibile fornire le informazioni sul metadata relativi all’hosting del modello insieme al formato/template di input che il modello specifico si aspetta. Nel caso in cui il dataset abbia già l’inferenza del modello, non è necessario configurare un Model Runner. Nel caso in cui il Model Runner non sia fornito nativamente da FMEval, è possibile ereditare la classe Model Runner di base e sovrascrivere il metodo predict con la logica personalizzata.
    • Algoritmo di valutazione : per un elenco esaustivo degli algoritmi di valutazione disponibili in FMEval, consulta Scopri di più sulle valutazioni del modello. Per il tuo algoritmo di valutazione puoi fornire la tua Configurazione dei dati e il Model Runner o semplicemente la Configurazione dei dati nel caso in cui il dataset contenga già l’output del modello. Con ogni algoritmo di valutazione hai due metodi: evaluate_sample e evaluate. Con evaluate_sample puoi valutare un singolo punto dati assumendo che l’output del modello sia già stato fornito. Per un lavoro di valutazione, puoi iterare per l’intera Configurazione dei dati fornita. Se vengono forniti i valori dell’inferenza del modello, il lavoro di valutazione verrà eseguito su tutto il dataset e l’algoritmo verrà applicato. Nel caso in cui non venga fornito l’output del modello, il Model Runner eseguirà l’inferenza su ogni campione e quindi verrà applicato l’algoritmo di valutazione. È anche possibile utilizzare un algoritmo di valutazione personalizzato simile a un Model Runner personalizzato ereditando la classe base dell’Algoritmo di valutazione e sovrascrivendo i metodi evaluate_sample e evaluate con la logica necessaria per il proprio algoritmo.

    Configurazione dei dati

    Per la tua Configurazione dei dati, puoi indicare il percorso del tuo dataset o utilizzare uno dei dataset forniti da FMEval. In questo esempio, useremo il dataset incorporato “tiny dataset” che contiene domande e risposte di destinazione. In questo caso non è già definito in anticipo l’output del modello, quindi definiamo anche un Model Runner per eseguire l’inferenza sull’input del modello.

    from fmeval.data_loaders.data_config import DataConfigconfig = DataConfig(    nome_del_dataset="tiny_dataset",    uri_del_dataset="tiny_dataset.jsonl",    tipo_mimetype_del_dataset=MIME_TYPE_JSONLINES,    model_input_location="domanda",    target_output_location="risposta")

    Model runner di JumpStart

    Nel caso in cui si utilizzi SageMaker JumpStart per ospitare il proprio FM, è possibile fornire facoltativamente il nome dell’endpoint esistente o l’ID del Modello JumpStart. Quando si fornisce l’ID del Modello, FMEval creerà questo endpoint per l’esecuzione dell’inferenza. La chiave qui è definire il template del contenuto che varia a seconda del proprio FM, quindi è importante configurare questo content_template per riflettere il formato di input richiesto dal FM. Inoltre, è necessario configurare anche il parsing dell’output in un formato JMESPath affinché FMEval possa comprenderlo correttamente.

    from fmeval.model_runners.sm_jumpstart_model_runner import JumpStartModelRunnermodel_id, model_version, = (    "huggingface-llm-falcon-7b-instruct-bf16",    "*",)js_model_runner = JumpStartModelRunner(    nome_endpoint=nome_endpoint,    id_modello=model_id,    versione_modello=model_version,    output='[0].testo_generato',    content_template='{"inputs": $prompt, "parameters": {"do_sample": true, "top_p": 0.9, "temperature": 0.8, "max_new_tokens": 1024}}',)

    Esecuzione del modello Bedrock

    La configurazione dell’esecuzione del modello Bedrock è molto simile a quella dell’esecuzione del modello di JumpStart. Nel caso di Bedrock, non esiste un endpoint, quindi è sufficiente fornire solo l’ID del modello.

    model_id = 'anthropic.claude-v2'bedrock_model_runner = BedrockModelRunner(    model_id=model_id,    output='completion',    content_template='{"prompt": $prompt, "max_tokens_to_sample": 500}')

    Esecuzione del modello personalizzato

    In alcuni casi, potrebbe essere necessario utilizzare un modello runner personalizzato. Ad esempio, se si dispone di un modello proveniente da HuggingFace Hub o un modello di OpenAI, è possibile ereditare la classe di base del modello runner e definire il proprio metodo di previsione personalizzato. Questo metodo di previsione è dove viene eseguita l’inferenza da parte del modello runner, quindi è possibile definire il proprio codice personalizzato qui. Ad esempio, nel caso dell’utilizzo di GPT 3.5 Turbo con Open AI, è possibile creare un modello runner personalizzato come mostrato nel seguente codice:

    class ChatGPTModelRunner(ModelRunner):    url = "https://api.openai.com/v1/chat/completions"    def __init__(self, model_config: ChatGPTModelConfig):        self.config = model_config    def predict(self, prompt: str) -> Tuple[Optional[str], Optional[float]]:        payload = json.dumps({            "model": "gpt-3.5-turbo",            "messages": [                 {                     "role": "user",                     "content": prompt                 }            ],            "temperature": self.config.temperature,            "top_p": self.config.top_p,            "n": 1,            "stream": False,            "max_tokens": self.config.max_tokens,            "presence_penalty": 0,            "frequency_penalty": 0        })        headers = {             'Content-Type': 'application/json',             'Accept': 'application/json',             'Authorization': self.config.api_key        }        response = requests.request("POST", self.url, headers=headers, data=payload)        return json.loads(response.text)["choices"][0]["message"]["content"], None

    Valutazione

    Una volta definite le configurazioni dei dati e, eventualmente, degli oggetti model runner personalizzati, è possibile configurare la valutazione. È possibile recuperare l’algoritmo di valutazione necessario, come nel seguente esempio che mostra la conoscenza fattuale.

    from fmeval.fmeval import get_eval_algorithmfrom fmeval.eval_algorithms.factual_knowledge import FactualKnowledgeConfig# Valutazione della conoscenza fattualeeval_algorithm_config = FactualKnowledgeConfig("<OR>")eval_algo = get_eval_algorithm("factual_knowledge")(eval_algorithm_config)

    Esistono due metodi di valutazione che è possibile eseguire: evaluate_sample e evaluate. Evaluate_sample può essere eseguito quando si ha già l’output del modello su un singolo punto dati, come nel seguente esempio di codice:

    # Valuta il tuo esempio personalizzatomodel_output = model_runner.predict("Londra è la capitale di?")[0]print(model_output)eval_algo.evaluate_sample(target_output="Regno Unito<OR>Inghilterra<OR>Regno Unito", model_output=model_output)

    Quando si esegue la valutazione su un intero set di dati, è possibile utilizzare il metodo evaluate, in cui si passa il Model Runner, la configurazione dei dati e un Prompt Template. Il Prompt Template è dove è possibile regolare e modellare il prompt per testare diversi modelli come si desidera. Questo Prompt Template viene inserito nel valore $prompt nel nostro parametro Content_Template definito nel Model Runner.

    eval_outputs = eval_algo.evaluate(model=model, dataset_config=dataset_config, prompt_template="$feature", save=True)

    Per maggiori informazioni ed esempi completi, fare riferimento al repository.

    Conclusioni

    Le valutazioni FM consentono ai clienti di fidarsi del fatto che il modello LLM che scelgono sia quello giusto per il proprio caso d’uso e che si comporterà in modo responsabile. Si tratta di un framework di intelligenza artificiale responsabile e estendibile integrato nativamente in Amazon SageMaker che migliora la trasparenza dei modelli di linguaggio consentendo una valutazione più facile e una comunicazione dei rischi durante tutto il ciclo di vita dell’apprendimento automatico. Si tratta di un passo importante verso l’aumento della fiducia e dell’adozione di LLM su AWS.

    Per ulteriori informazioni sulle valutazioni FM, fare riferimento alla documentazione del prodotto e consultare altri notebook di esempio disponibili nel nostro repository GitHub. È inoltre possibile esplorare modi per operazionalizzare l’analisi di LLM su larga scala, come descritto in questo articolo del blog.