Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Personalizza il tuo flusso di lavoro utilizzando la libreria fmeval
Puoi personalizzare la valutazione del modello per consentire un modello diverso da un modello Amazon Bedrock JumpStart o utilizzare un flusso di lavoro personalizzato per la valutazione. Se utilizzi il tuo modello, devi crearne uno personalizzatoModelRunner. Se si utilizza il proprio set di dati per la valutazione, è necessario configurare un DataConfig oggetto. La sezione seguente mostra come formattare il set di dati di input, personalizzare un DataConfig oggetto per utilizzare il set di dati personalizzato e crearne uno personalizzato. ModelRunner
Se si desidera utilizzare il proprio set di dati per valutare il modello, è necessario utilizzare un DataConfig oggetto per specificare il dataset_name e il set dataset_uri di dati che si desidera valutare. Se utilizzate un set di dati integrato, l'DataConfigoggetto è già configurato come predefinito per gli algoritmi di valutazione.
È possibile utilizzare un set di dati personalizzato ogni volta che si utilizza la funzione. evaluate Puoi richiamare evaluate qualsiasi numero di volte per utilizzare il numero di set di dati che desideri.
Configura un set di dati personalizzato con la richiesta del modello specificata nella colonna della domanda e la risposta di destinazione specificata nella risposta della colonna, come segue:
from fmeval.data_loaders.data_config import DataConfig from fmeval.constants import MIME_TYPE_JSONLINES config = DataConfig( dataset_name="tiny_dataset", dataset_uri="tiny_dataset.jsonl", dataset_mime_type=MIME_TYPE_JSONLINES, model_input_location="question", target_output_location="answer", )
La DataConfig classe contiene i seguenti parametri:
-
dataset_name— Il nome del set di dati che desideri utilizzare per valutare il tuo LLM.dataset_uri— Il percorso locale o l'Uniform Resource Identifier (URI) della posizione S3 del set di dati. -
dataset_mime_type— Il formato dei dati di input che desideri utilizzare per valutare il tuo LLM. La FMEval libreria può supportareMIME_TYPE_JSONsiaMIME_TYPE_JSONLINES. -
model_input_location— (Facoltativo) Il nome della colonna del set di dati che contiene gli input o i prompt del modello da valutare.Utilizzate un
model_input_locationche specifichi il nome della colonna. La colonna deve contenere i seguenti valori corrispondenti alle seguenti attività associate:-
Per le valutazioni aperte di generazione, tossicità e precisione, specificate la colonna che contiene il prompt a cui il modello deve rispondere.
-
Per un'attività di risposta a domande, specificate la colonna che contiene la domanda a cui il modello deve generare una risposta.
-
Per un'attività di riepilogo del testo, specificate il nome della colonna che contiene il testo che desiderate riepilogare dal modello.
-
Per un'attività di classificazione, specificate il nome della colonna che contiene il testo che desiderate classificare dal modello.
-
Per una valutazione fattuale delle conoscenze, specificate il nome della colonna che contiene la domanda a cui desiderate che il modello preveda la risposta.
-
Per le valutazioni della robustezza semantica, specificate il nome della colonna che contiene l'input che desiderate modificare nel modello.
-
Per valutazioni rapide degli stereotipi, utilizzate
sent_more_input_locationandsent_less_input_locationinvece di, come illustrato nei parametri seguenti.model_input_location
-
-
model_output_location— (Facoltativo) Il nome della colonna del set di dati che contiene l'output previsto da confrontare con l'output di riferimento in cui è contenuto.target_output_locationSe lo forniscimodel_output_location, FMEval non invierà una richiesta di inferenza al tuo modello. Utilizza invece l'output contenuto nella colonna specificata per valutare il modello. -
target_output_location— Il nome della colonna nel set di dati di riferimento che contiene il valore reale da confrontare con il valore previsto contenuto in.model_output_locationRichiesto solo per la conoscenza dei fatti, l'accuratezza e la solidità semantica. Per una conoscenza fattuale, ogni riga di questa colonna deve contenere tutte le possibili risposte separate da un delimitatore. <OR>Ad esempio, se le risposte a una domanda sono [«UK», «England»], la colonna dovrebbe contenere «UK England». La previsione del modello è corretta se contiene una delle risposte separate dal delimitatore. -
category_location— Il nome della colonna che contiene il nome di una categoria. Se fornisci un valore percategory_location, i punteggi vengono aggregati e riportati per ogni categoria. -
sent_more_input_location— Il nome della colonna che contiene un prompt con maggiori distorsioni. Obbligatorio solo per stereotipi rapidi. Evita i pregiudizi inconsci. Per esempi di pregiudizi, consulta il set di dati Crows-pairs. -
sent_less_input_location— Il nome della colonna che contiene un prompt con meno distorsioni. Obbligatorio solo per stereotipi rapidi. Evita i pregiudizi inconsci. Per esempi di pregiudizi, consulta il set di dati Crows-pairs. -
sent_more_output_location— (Facoltativo) Il nome della colonna che contiene una probabilità prevista che la risposta generata dal modello contenga ulteriori distorsioni. Questo parametro viene utilizzato solo nelle attività di stereotipizzazione rapida. -
sent_less_output_location— (Facoltativo) Il nome della colonna che contiene una probabilità prevista che la risposta generata dal modello contenga meno distorsioni. Questo parametro viene utilizzato solo nelle attività di stereotipizzazione rapida.
Se si desidera aggiungere alla DataConfig classe un nuovo attributo che corrisponde a una colonna del set di dati, è necessario aggiungerlo alla fine del suffix
_location nome dell'attributo.
Per valutare un modello personalizzato, utilizzate una classe di dati di base per configurare il modello e crearne uno personalizzatoModelRunner. Quindi, puoi usarlo ModelRunner per valutare qualsiasi modello linguistico. Utilizzate i seguenti passaggi per definire una configurazione del modello, crearne una personalizzata ModelRunner e testarla.
L'ModelRunnerinterfaccia ha un metodo astratto come segue:
def predict(self, prompt: str) → Tuple[Optional[str], Optional[float]]
Questo metodo accetta un prompt come input di stringa e restituisce una Tuple contenente una risposta testuale del modello e una probabilità di log di input. Ognuno ModelRunner deve implementare un predict metodo.
Crea un file personalizzato ModelRunner
-
Definire una configurazione del modello.
Il seguente esempio di codice mostra come applicare un
dataclassdecoratore a unaHFModelConfigclasse personalizzata in modo da poter definire una configurazione di modello per un Hugging Facemodello:from dataclasses import dataclass @dataclass class HFModelConfig: model_name: str max_new_tokens: int seed: int = 0 remove_prompt_from_generated_text: bool = TrueNell'esempio di codice precedente, si applica quanto segue:
-
Il parametro
max_new_tokensviene utilizzato per limitare la lunghezza della risposta limitando il numero di token restituiti da un LLM. Il tipo di modello viene impostato passando un valore permodel_namequando la classe viene istanziata. In questo esempio, il nome del modello è impostato sugpt2, come mostrato alla fine di questa sezione. Il parametromax_new_tokensè un'opzione per configurare le strategie di generazione del testo utilizzando una configurazionegpt2del modello per un modello GPT OpenAI pre-addestrato. Vedi AutoConfigper altri tipi di modelli. -
Se il parametro
remove_prompt_from_generated_textè impostato suTrue, la risposta generata non conterrà il prompt di origine inviato nella richiesta.
Per altri parametri di generazione di testo, consultate la Hugging Facedocumentazione
per. GenerationConfig -
-
Crea un metodo di previsione personalizzato
ModelRunnere implementa. Il seguente esempio di codice mostra come creare una personalizzazioneModelRunnerper un Hugging Face modello utilizzando laHFModelConfigclasse creata nell'esempio di codice precedente.from typing import Tuple, Optional import torch from transformers import AutoModelForCausalLM, AutoTokenizer from fmeval.model_runners.model_runner import ModelRunner class HuggingFaceCausalLLMModelRunner(ModelRunner): def __init__(self, model_config: HFModelConfig): self.config = model_config self.model = AutoModelForCausalLM.from_pretrained(self.config.model_name) self.tokenizer = AutoTokenizer.from_pretrained(self.config.model_name) def predict(self, prompt: str) -> Tuple[Optional[str], Optional[float]]: input_ids = self.tokenizer(prompt, return_tensors="pt").to(self.model.device) generations = self.model.generate( **input_ids, max_new_tokens=self.config.max_new_tokens, pad_token_id=self.tokenizer.eos_token_id, ) generation_contains_input = ( input_ids["input_ids"][0] == generations[0][: input_ids["input_ids"].shape[1]] ).all() if self.config.remove_prompt_from_generated_text and not generation_contains_input: warnings.warn( "Your model does not return the prompt as part of its generations. " "`remove_prompt_from_generated_text` does nothing." ) if self.config.remove_prompt_from_generated_text and generation_contains_input: output = self.tokenizer.batch_decode(generations[:, input_ids["input_ids"].shape[1] :])[0] else: output = self.tokenizer.batch_decode(generations, skip_special_tokens=True)[0] with torch.inference_mode(): input_ids = self.tokenizer(self.tokenizer.bos_token + prompt, return_tensors="pt")["input_ids"] model_output = self.model(input_ids, labels=input_ids) probability = -model_output[0].item() return output, probabilityIl codice precedente utilizza una
HuggingFaceCausalLLMModelRunnerclasse personalizzata che eredita le proprietà dalla FMEvalModelRunnerclasse. La classe personalizzata contiene un costruttore e una definizione per una funzione di previsione, che restituisce un.TuplePer altri
ModelRunneresempi, consultate la sezione model_runner della libreria. fmevalIl
HuggingFaceCausalLLMModelRunnercostruttore contiene le seguenti definizioni:-
La configurazione è impostata su
HFModelConfig, definita all'inizio di questa sezione. -
Il modello è impostato su un modello pre-addestrato della classe Hugging Face Auto
che viene specificato utilizzando il parametro model_name al momento della creazione dell'istanza. -
Il tokenizer è impostato su una classe della libreria Hugging Facetokenizer
che corrisponde al modello preaddestrato specificato da. model_name
Il
predictmetodo dellaHuggingFaceCausalLLMModelRunnerclasse utilizza le seguenti definizioni:-
input_ids— Una variabile che contiene l'input per il modello. Il modello genera l'input come segue.-
A
tokenizerConverte la richiesta contenutapromptin identificatori di token ()IDs. Questi token IDs, che sono valori numerici che rappresentano un token specifico (parola, sottoparola o carattere), possono essere utilizzati direttamente dal modello come input. I token IDs vengono restituiti come oggetti PyTorch tensoriali, come specificato da.return_tensors="pt"Per altri tipi di tensori di ritorno, consulta la documentazione per apply_chat_template. Hugging Face -
IDs I token vengono inviati a un dispositivo in cui si trova il modello in modo che possano essere utilizzati dal modello.
-
-
generations— Una variabile che contiene la risposta generata dal tuo LLM. La funzione generate del modello utilizza i seguenti input per generare la risposta:-
Il
input_idspassaggio precedente. -
Il parametro
max_new_tokensspecificato inHFModelConfig. -
A
pad_token_idaggiunge un token di fine frase (eos) alla risposta. Per altri token che puoi usare, consulta la Hugging Face documentazione di. PreTrainedTokenizer
-
-
generation_contains_input— Una variabile booleana che restituisceTruequando la risposta generata include il prompt di input nella sua risposta e in altro modo.FalseIl valore restituito viene calcolato utilizzando un confronto per elemento tra i seguenti elementi.-
Tutti i token del prompt di input contenuti IDs in.
input_ids["input_ids"][0] -
L'inizio del contenuto generato contenuto in
generations[0][: input_ids["input_ids"].shape[1]].
Il
predictmetodo restituisce un avviso se hai indirizzato l'LLMremove_prompt_from_generated_textnella configurazione ma la risposta generata non contiene il prompt di input.L'output del
predictmetodo contiene una stringa restituita dalbatch_decodemetodo, che converte il token IDs restituito nella risposta in testo leggibile dall'uomo. Se hai specificatoremove_prompt_from_generated_textasTrue, il prompt di input viene rimosso dal testo generato. Se hai specificatoremove_prompt_from_generated_textcomeFalse, il testo generato verrà restituito senza i token speciali che hai incluso nel dizionariospecial_token_dict, come specificato da.skip_special_tokens=True -
-
-
Metti alla prova il tuo.
ModelRunnerInvia una richiesta di campione al tuo modello.L'esempio seguente mostra come testare un modello utilizzando il modello
gpt2pre-addestrato della Hugging FaceAutoConfigclasse:hf_config = HFModelConfig(model_name="gpt2", max_new_tokens=32) model = HuggingFaceCausalLLMModelRunner(model_config=hf_config)Nell'esempio di codice precedente,
model_namespecifica il nome del modello pre-addestrato. LaHFModelConfigclasse viene istanziata come hf_config con un valore per il parametro e utilizzata per l'inizializzazione.max_new_tokensModelRunnerSe desideri utilizzare un altro modello pre-addestrato di, scegline uno in under. Hugging Face
pretrained_model_name_or_pathfrom_pretrainedAutoClassInfine, prova il tuo.
ModelRunnerInvia una richiesta di esempio al tuo modello come mostrato nel seguente esempio di codice:model_output = model.predict("London is the capital of?")[0] print(model_output) eval_algo.evaluate_sample()