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à.
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 i dataset_name
e il set dataset_uri
di dati che si desidera valutare. Se si utilizza un set di dati integrato, l'DataConfig
oggetto è 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_JSON
siaMIME_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_location
che 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_location
andsent_less_input_location
invece 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_location
Se 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_location
Richiesto 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'ModelRunner
interfaccia 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
dataclass
decoratore a unaHFModelConfig
classe personalizzata in modo da poter definire una configurazione del 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 = True
Nell'esempio di codice precedente, si applica quanto segue:
-
Il parametro
max_new_tokens
viene 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_name
quando 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 configurazionegpt2
del 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 del testo, consulta il Hugging Face documentazione per GenerationConfig
. -
-
Crea un metodo personalizzato
ModelRunner
e implementa un metodo di previsione. Il seguente esempio di codice mostra come creare un oggetto personalizzatoModelRunner
per un Hugging Face modello che utilizza laHFModelConfig
classe 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, probability
Il codice precedente utilizza una
HuggingFaceCausalLLMModelRunner
classe personalizzata che eredita le proprietà dalla FMEvalModelRunner
classe. La classe personalizzata contiene un costruttore e una definizione per una funzione di previsione, che restituisce un.Tuple
Per altri
ModelRunner
esempi, consultate la sezione model_runner della libreria. fmeval
Il
HuggingFaceCausalLLMModelRunner
costruttore contiene le seguenti definizioni:-
La configurazione è impostata su
HFModelConfig
, definita all'inizio di questa sezione. -
Il modello è impostato su un modello pre-addestrato dal Hugging Face Classe automatica
che viene specificata utilizzando il parametro model_name al momento dell'istanziazione. -
Il tokenizer è impostato su una classe del Hugging Face libreria tokenizer
che corrisponde al modello pre-addestrato specificato da. model_name
Il
predict
metodo dellaHuggingFaceCausalLLMModelRunner
classe utilizza le seguenti definizioni:-
input_ids
— Una variabile che contiene l'input per il modello. Il modello genera l'input come segue.-
A
tokenizer
Converte la richiesta contenutaprompt
in 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 PyTorch oggetti tensoriali, come specificato da.return_tensors="pt"
Per altri tipi di tensori di ritorno, vedi Hugging Face documentazione per apply_chat_template. -
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_ids
passaggio precedente. -
Il parametro
max_new_tokens
specificato inHFModelConfig
. -
A
pad_token_id
aggiunge un token di fine frase (eos) alla risposta. Per altri token che puoi usare, consulta il Hugging Face documentazione per PreTrainedTokenizer.
-
-
generation_contains_input
— Una variabile booleana che restituisceTrue
quando la risposta generata include il prompt di input nella sua risposta e in altro modo.False
Il 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
predict
metodo restituisce un avviso se hai indirizzato l'LLMremove_prompt_from_generated_text
nella configurazione ma la risposta generata non contiene il prompt di input.L'output del
predict
metodo contiene una stringa restituita dalbatch_decode
metodo, che converte il token IDs restituito nella risposta in testo leggibile dall'uomo. Se èremove_prompt_from_generated_text
stato specificato comeTrue
, il prompt di input viene rimosso dal testo generato. Se hai specificatoremove_prompt_from_generated_text
comeFalse
, 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.
ModelRunner
Invia una richiesta di campione al tuo modello.L'esempio seguente mostra come testare un modello utilizzando il modello
gpt2
pre-addestrato di Hugging FaceAutoConfig
classe:hf_config = HFModelConfig(model_name="gpt2", max_new_tokens=32) model = HuggingFaceCausalLLMModelRunner(model_config=hf_config)
Nell'esempio di codice precedente,
model_name
specifica il nome del modello pre-addestrato. LaHFModelConfig
classe viene istanziata come hf_config con un valore per il parametro e utilizzata per l'inizializzazione.max_new_tokens
ModelRunner
Se desideri utilizzare un altro modello pre-addestrato da Hugging Face, scegline uno
pretrained_model_name_or_path
from_pretrained
in AutoClassbasso. Infine, prova il tuo
ModelRunner
. Invia 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()