Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation de la bibliothèque fmeval pour exécuter une évaluation automatique
L’utilisation de la bibliothèque fmeval dans votre propre code vous offre la plus grande flexibilité pour personnaliser votre flux de travail. Vous pouvez utiliser la bibliothèque fmeval pour évaluer n’importe quel LLM et pour bénéficier également d’une plus grande flexibilité avec vos jeux de données d’entrée personnalisés. Les étapes suivantes vous montrent comment configurer votre environnement et comment exécuter à la fois un flux de travail de démarrage et un flux de travail personnalisé à l’aide de la bibliothèque fmeval.
Prise en main de la bibliothèque fmeval
Vous pouvez configurer l’évaluation de votre modèle de fondation et la personnaliser en fonction de votre cas d’utilisation dans un bloc-notes Studio. Votre configuration dépend à la fois du type de tâche que votre modèle de base est conçu pour prévoir et de la manière dont vous souhaitez l'évaluer. FMEval prend en charge les tâches de génération ouverte, de synthèse de texte, de réponse aux questions et de classification. Les étapes de cette section vous montrent comment configurer un flux de travail de départ. Ce flux de travail de départ inclut la configuration de votre environnement et l'exécution d'un algorithme d'évaluation à l'aide d'un modèle de base Amazon Bedrock JumpStart ou d'un modèle de base avec des ensembles de données intégrés. Si vous devez utiliser un jeu de données d’entrée personnalisé et un flux de travail pour un cas d’utilisation plus spécifique, consultez Personnalisation de votre flux de travail à l’aide de la bibliothèque fmeval.
Si vous ne souhaitez pas exécuter une évaluation de modèles dans un bloc-notes Studio, passez à l’étape 11 de la section Prise en main de Studio suivante.
Conditions préalables
-
Pour effectuer une évaluation de modèles dans une interface utilisateur de Studio, votre rôle Gestion des identités et des accès AWS (IAM) et tous les jeux de données d’entrée doivent disposer des autorisations correctes. Si vous n'avez pas de rôle SageMaker AI Domain ou IAM, suivez les étapes décrites dansGuide de configuration d'Amazon SageMaker AI.
Pour définir des autorisations pour votre compartiment Amazon S3
Une fois votre domaine et votre rôle créés, suivez les étapes ci-dessous pour ajouter les autorisations nécessaires à l’évaluation de votre modèle.
Ouvrez la console Amazon SageMaker AI à l'adresse https://console.aws.amazon.com/sagemaker/
. -
Dans le volet de navigation, entrez
S3dans la barre de recherche en haut de la page. -
Choisissez S3 sous Services.
-
Choisissez Compartiments dans le volet de navigation.
-
Dans la section Compartiments à usage général, sous Nom, choisissez le nom du compartiment S3 que vous souhaitez utiliser pour stocker les entrées et sorties de votre modèle dans la console. Si vous n’avez pas de compartiment S3, procédez comme suit :
-
Sélectionnez Créer un compartiment pour ouvrir une nouvelle page Créer un compartiment.
-
Dans la section Configuration générale, sous Région AWS, sélectionnez la région AWS où se trouve votre modèle de fondation.
-
Nommez votre compartiment S3 dans la zone de saisie, sous Nom du compartiment.
-
Acceptez tous les choix par défaut.
-
Sélectionnez Créer un compartiment.
-
Dans la section Compartiments à usage général, sous Nom, sélectionnez le nom du compartiment S3 que vous avez créé.
-
-
Sélectionnez l’onglet Autorisations.
-
Faites défiler l’affichage jusqu’à la section Partage des ressources entre origines (CORS) en bas de la fenêtre. Choisissez Modifier.
-
Pour ajouter des autorisations à votre compartiment pour les évaluations de la fondation, assurez-vous que le code suivant apparaît dans la zone de saisie. Vous pouvez également copier et coller ce qui suit dans la zone de saisie.
[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET", "PUT", "POST", "DELETE" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [ "Access-Control-Allow-Origin" ] } ] -
Sélectionnez Enregistrer les modifications.
Pour ajouter des autorisations à votre politique IAM
-
Dans la barre de recherche en haut de la page, entrez
IAM. -
Sous Services, sélectionnez Identity and Access Management (IAM).
-
Choisissez Politiques dans le volet de navigation.
-
Entrez AmazonSageMakerFullAccessdans la barre de recherche. Sélectionnez la case d’option en regard de la politique qui apparaît. Le bouton Actions peut désormais être sélectionné.
-
Choisissez la flèche vers le bas à côté de Actions. Deux options apparaissent.
-
Choisissez Attacher.
-
Dans la liste IAM qui apparaît, recherchez le nom du rôle que vous avez créé. Cochez la case en regard de ce nom.
-
Choisissez Attach policy (Attacher la politique).
Prise en main de Studio
-
Dans la barre de recherche en haut de la page, entrez
SageMaker AI. -
Sous Services, sélectionnez Amazon SageMaker AI.
-
Choisissez Studio dans le volet de navigation.
-
Choisissez votre domaine dans la section Mise en route, après avoir développé la flèche vers le bas sous Sélectionner un domaine.
-
Choisissez votre profil utilisateur dans la section Mise en route, après avoir développé la flèche vers le bas sous Sélectionner un profil utilisateur.
-
Choisissez Ouvrir Studio pour ouvrir la page de destination de Studio.
-
Sélectionnez l’explorateur de fichiers dans le volet de navigation et accédez au répertoire racine.
-
Sélectionnez Créer un bloc-notes.
-
Dans la boîte de dialogue d’environnement de bloc-notes qui s’ouvre, sélectionnez l’image Data Science 3.0.
-
Choisissez Select (Sélectionner).
-
Installez le package
fmevaldans votre environnement de développement, comme illustré dans l’exemple de code suivant :!pip install fmevalNote
Installez la bibliothèque
fmevaldans un environnement qui utilise Python 3.10. Pour plus d’informations sur les conditions requises pour exécuterfmeval, consultez les dépendances defmeval.
FMEval utilise un wrapper de haut niveau appelé ModelRunner pour composer l'entrée, invoquer et extraire la sortie de votre modèle. Le package fmeval peut évaluer n’importe quel LLM, mais la procédure pour configurer ModelRunner dépend du type de modèle que vous souhaitez évaluer. Cette section explique comment configurer ModelRunner un modèle JumpStart ou un modèle Amazon Bedrock. Si vous souhaitez utiliser un jeu de données d’entrée personnalisé et le ModelRunner personnalisé, consultez Personnalisation de votre flux de travail à l’aide de la bibliothèque fmeval.
Utiliser un JumpStart modèle
À utiliser ModelRunner pour évaluer un JumpStart modèle, créer ou fournir un point de terminaison, définir le modèle et le jeu de données intégré, configurer et testerModelRunner.
Définissez un JumpStart modèle et configurez un ModelRunner
-
Fournissez un point de terminaison en effectuant l’une des actions suivantes :
-
Spécifiez le EndpointNameà un point de JumpStart terminaison existant, le
model_id, etmodel_version. -
Spécifiez le
model_idetmodel_versionpour votre modèle, puis créez un JumpStart point de terminaison.
L'exemple de code suivant montre comment créer un point de terminaison pour un Llama 2 foundation model
qui est disponible via JumpStart. import sagemaker from sagemaker.jumpstart.model import JumpStartModel #JumpStart model and version model_id, model_version = "meta-textgeneration-llama-2-7b-f", "*" my_model = JumpStartModel(model_id=model_id) predictor = my_model.deploy() endpoint_name = predictor.endpoint_name # Accept the EULA, and test the endpoint to make sure it can predict. predictor.predict({"inputs": [[{"role":"user", "content": "Hello how are you?"}]]}, custom_attributes='accept_eula=true')L'exemple de code précédent fait référence à EULA, qui signifie end-use-license-agreement (EULA). Le CLUF se trouve dans la description de la carte de modèle du modèle que vous utilisez. Pour utiliser certains JumpStart modèles, vous devez spécifier
accept_eula=true, comme indiqué dans l'appel précédent àpredict. Pour plus d’informations sur le CLUF, consultez la section Licences et sources de modèle dans Modèles de sources et de contrats de licence.Vous trouverez une liste des JumpStart modèles disponibles dans la section Algorithmes intégrés avec tableau des modèles pré-entraînés
. -
-
Configurez
ModelRunnerà l’aide duJumpStartModelRunner, comme indiqué dans l’exemple de configuration suivant :from fmeval.model_runners.sm_jumpstart_model_runner import JumpStartModelRunner js_model_runner = JumpStartModelRunner( endpoint_name=endpoint_name, model_id=model_id, model_version=model_version )Dans l’exemple de configuration précédent, utilisez les mêmes valeurs pour
endpoint_name,model_idetmodel_versionque celles que vous avez utilisées pour créer le point de terminaison. -
Testez votre élément
ModelRunner. Envoyez un exemple de demande à votre modèle, comme indiqué dans l’exemple de code suivant :js_model_runner.predict("What is the capital of London")
Utilisation d’un modèle Amazon Bedrock
Pour évaluer un modèle Amazon Bedrock, vous devez définir le modèle et le jeu de données intégré, puis configurer ModelRunner.
Définissez un modèle Amazon Bedrock et configurez un ModelRunner
-
Pour définir et afficher les détails du modèle, utilisez l’exemple de code suivant pour un modèle Titan disponible via Amazon Bedrock :
import boto3 import json bedrock = boto3.client(service_name='bedrock') bedrock_runtime = boto3.client(service_name='bedrock-runtime') model_id = "amazon.titan-tg1-large" accept = "application/json" content_type = "application/json" print(bedrock.get_foundation_model(modelIdentifier=modelId).get('modelDetails'))Dans l’exemple de code précédent, le paramètre
acceptindique le format des données que vous souhaitez utiliser pour évaluer votre LLM.contentTypespécifie le format des données d’entrée dans la demande. SeulMIME_TYPE_JSONest pris en charge pouracceptetcontentTypepour les modèles Amazon Bedrock. Pour obtenir plus d’informations sur ces paramètres, consultez InvokeModelWithResponseStream. -
Pour configurer
ModelRunner, utilisezBedrockModelRunner, comme indiqué dans l’exemple de configuration suivant :from fmeval.model_runners.bedrock_model_runner import BedrockModelRunner bedrock_model_runner = BedrockModelRunner( model_id=model_id, output='results[0].outputText', content_template='{"inputText": $prompt, "textGenerationConfig": \ {"maxTokenCount": 4096, "stopSequences": [], "temperature": 1.0, "topP": 1.0}}', )Paramétrez la configuration de
ModelRunnercomme suit.-
Utilisez les mêmes valeurs pour
model_idque celles que vous avez utilisées pour déployer le modèle. -
Utilisez
outputpour spécifier le format de la réponsejsongénérée. Par exemple, si votre LLM a fourni la réponse[{"results": "this is the output"}], alorsoutput='results[0].outputText'renvoiethis is the output. -
Utilisez
content_templatepour spécifier la manière dont votre LLM interagit avec les demandes. Le modèle de configuration suivant est détaillé uniquement pour expliquer l’exemple de configuration précédent, et il n’est pas obligatoire.-
Dans l’exemple de configuration précédent, la variable
inputTextspécifie l’invite, qui capture la demande faite par l’utilisateur. -
La variable
textGenerationConfigindique comment le LLM génère les réponses comme suit :-
Le paramètre
maxTokenCountest utilisé pour limiter la longueur de la réponse en limitant le nombre de jetons renvoyés par le LLM. -
Le paramètre
stopSequencesest utilisé pour spécifier une liste de séquences de caractères qui indiquent à votre LLM d’arrêter de générer une réponse. La sortie du modèle est arrêtée la première fois que l’une des chaînes répertoriées est rencontrée dans la sortie. Par exemple, vous pouvez utiliser une séquence de retour chariot pour limiter la réponse du modèle à une seule ligne. -
Le paramètre
topPcontrôle le degré de hasard en limitant l’ensemble de jetons à prendre en compte lors de la génération du jeton suivant. Ce paramètre accepte des valeurs comprises entre0.0et1.0. Des valeurs plus élevées detopPautorisent un ensemble contenant un vocabulaire plus large et des valeurs plus faibles limitent l’ensemble de jetons à des mots plus probables. -
Le paramètre
temperaturecontrôle le degré de hasard du texte généré et accepte les valeurs positives. Des valeurs plus élevées detemperatureindiquent au modèle de générer des réponses plus aléatoires et plus diverses. Des valeurs plus faibles génèrent des réponses plus prévisibles. Les plages typiques pourtemperaturese situent entre0.2et2.0.
Pour plus d’informations sur les paramètres d’un modèle de fondation Amazon Bedrock spécifique, consultez Paramètres d’inférence pour les modèles de fondation.
-
Le format du paramètre content_template dépend des entrées et des paramètres pris en charge par votre LLM. Par exemple, le modèle Anthropic’s Claude 2
peut prendre en charge l’élément content_templatesuivant :"content_template": "{\"prompt\": $prompt, \"max_tokens_to_sample\": 500}"Autre exemple, le modèle Falcon 7b
peut prendre en charge l’élément content_templatesuivant."content_template": "{\"inputs\": $prompt, \"parameters\":{\"max_new_tokens\": \ 10, \"top_p\": 0.9, \"temperature\": 0.8}}"Enfin, testez votre
ModelRunner. Envoyez un exemple de demande à votre modèle, comme indiqué dans l’exemple de code suivant :bedrock_model_runner.predict("What is the capital of London?") -
-
Après avoir configuré vos données et ModelRunner, vous pouvez exécuter un algorithme d’évaluation sur les réponses générées par votre LLM. Pour obtenir la liste de tous les algorithmes d’évaluation disponibles, exécutez le code suivant :
from fmeval.eval_algo_mapping import EVAL_ALGORITHMS print(EVAL_ALGORITHMS.keys())
Chaque algorithme possède à la fois une évaluation et une méthode evaluate_sample. La méthode evaluate calcule un score pour le jeu de données complet. La méthode evaluate_sample évalue le score pour une instance individuelle.
La méthode evaluate_sample renvoie des objets EvalScore. Les objets EvalScore contiennent des scores agrégés indiquant les performances de votre modèle lors de l’évaluation. La méthode evaluate_sample possède les paramètres facultatifs suivants :
-
model_output: réponse du modèle pour une demande individuelle. -
model_input: invite contenant la demande adressée à votre modèle. -
target_output: réponse attendue de l’invite contenue dansmodel_input.
L’exemple de code suivant montre comment utiliser l’élément evaluate_sample :
#Evaluate your custom sample model_output = model_runner.predict("London is the capital of?")[0] eval_algo.evaluate_sample(target_output="UK<OR>England<OR>United Kingdom", model_output=model_output)
La méthode evaluate possède les paramètres facultatifs suivants :
-
model: une instance deModelRunnerutilisant le modèle que vous souhaitez évaluer. -
dataset_config: la configuration du jeu de données. Sidataset_confign’est pas fourni, le modèle est évalué à l’aide de tous les jeux de données intégrés configurés pour cette tâche. -
prompt_template: modèle utilisé pour générer des invites. Siprompt_templaten’est pas fourni, votre modèle est évalué à l’aide d’un modèle d’invite par défaut. -
save: si ce paramètre est défini surTrue, les réponses et les scores de l’invite par enregistrement sont enregistrés dans le fichierEvalAlgorithmInterface.EVAL_RESULTS_PATH. La valeur par défaut estFalse. -
num_records: le nombre d’enregistrements qui sont échantillonnés de manière aléatoire à partir du jeu de données d’entrée pour évaluation. La valeur par défaut est300.
L’algorithme evaluate renvoie la liste des objets EvalOutput pouvant inclure les éléments suivants :
-
eval_name: le nom de l’algorithme d’évaluation.dataset_name: le nom du jeu de données utilisé par l’algorithme d’évaluation.prompt_template: un modèle utilisé pour composer des invites qui est consommé si le paramètremodel_outputn’est pas fourni dans le jeu de données. Pour plus d'informations, consultezprompt_templatela JumpStartModelRunnersection Configurer un.dataset_scores: un score agrégé calculé sur le jeu de données complet.category_scores: une liste d’objetsCategoryScorecontenant les scores pour chaque catégorie du jeu de données.output_path: le chemin local vers la sortie d’évaluation. Cette sortie contient des réponses d’invite avec des scores d’évaluation par enregistrement.error: un message d’erreur sous forme de chaîne signalant l’échec d’une tâche d’évaluation.
Les dimensions suivantes sont disponibles pour l’évaluation de modèles :
-
Précision
-
Connaissances factuelles
-
Stéréotypage d’invite
-
Robustesse sémantique
-
Toxicité
Précision
Vous pouvez exécuter un algorithme d’exactitude pour une tâche de réponses aux questions, de synthétisation de texte ou de classification. Les algorithmes sont différents pour chaque tâche afin de s’adapter aux différents types d’entrée de données et aux problèmes, comme suit :
-
Pour les tâches de réponses aux questions, exécutez l’algorithme
QAAccuracyavec un fichierQAAccuracyConfig. -
Pour les tâches de synthétisation de texte, exécutez l’algorithme
SummarizationAccuracyavec un élémentSummarizationAccuracyConfig. -
Pour les tâches de classification, exécutez l’algorithme
ClassificationAccuracyavec un élémentClassificationAccuracyConfig.
L’algorithme QAAccuracy renvoie une liste d’objets EvalOutput contenant un score d’exactitude pour chaque échantillon. Pour exécuter l’algorithme d’exactitude des réponses aux questions, instanciez un élément QAAccuracygeConfig et transmettez-lui <OR> ou None en tant que target_output_delimiter. L’algorithme d’exactitude des réponses aux questions compare la réponse générée par votre modèle à une réponse connue. Si vous transmettez <OR> en tant que délimiteur cible, l’algorithme note la réponse comme étant correcte s’il génère un contenu séparé par <OR> dans la réponse. Si vous transmettez None ou une chaîne vide en tant que target_output_delimiter, le code génère une erreur.
Appelez la méthode evaluate et transmettez-lui les paramètres souhaités, comme indiqué dans l’exemple de code suivant :
from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.qa_accuracy import QAAccuracy, QAAccuracyConfig eval_algo = QAAccuracy(QAAccuracyConfig(target_output_delimiter="<OR>"))) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
L’algorithme SummarizationAccuracy renvoie une liste d’objets EvalOutput contenant des scores pour ROUGE-NSummarizationAccuracyConfig et transmettez-lui ce qui suit :
-
Spécifiez le type de métrique ROUGE
que vous souhaitez utiliser dans votre évaluation dans rouge_type. Vous pouvez choisirrouge1,rouge2ourougeL. Ces métriques comparent les résumés générés aux résumés de référence. ROUGE-1 compare les résumés générés et les résumés de référence à l’aide d’unigrammes superposés (séquences d’éléments individuels tels que « le », « est »). ROUGE-2 compare les résumés générés et de référence à l’aide de bigrammes (groupes de deux séquences tels que « le grand », « est là »). ROUGE-L compare la plus longue séquence de mots correspondante. Pour plus d’informations sur ROUGE, consultez ROUGE: A Package for Automatic Evaluation of Summaries. -
Définissez
use_stemmer_for_rougesurTrueouFalse. Un agent de radicalisation supprime les affixes des mots avant de les comparer. Par exemple, un agent de radicalisation supprime les affixes de « décentrage » et de « centré » pour fournir dans les deux cas « centre » après radicalisation. -
Définissez model_type_for_bertscore sur le modèle que vous souhaitez utiliser pour calculer un BERTScore
. Vous pouvez choisir ROBERTA_MODEL ou le modèle plus avancé MICROSOFT_DEBERTA_MODEL .
Enfin, appelez la méthode evaluate et transmettez-lui les paramètres que vous souhaitez, comme indiqué dans l’exemple de code suivant :
from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.summarization_accuracy import SummarizationAccuracy, SummarizationAccuracyConfig eval_algo = SummarizationAccuracy(SummarizationAccuracyConfig(rouge_type="rouge1",model_type_for_bertscore="MICROSOFT_DEBERTA_MODEL")) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
L’algorithme ClassificationAccuracy renvoie la liste des objets EvalOutput contenant les scores d’exactitude de classification, de précision, de rappel et d’exactitude équilibrée pour chaque échantillon. Pour plus d’informations sur ces scores, consultez la section Classification dans Utilisation de jeux de données d’invite et de dimensions d’évaluation disponibles dans les tâches d’évaluation de modèles . Pour exécuter l’algorithme d’exactitude de classification, instanciez un élément ClassificationAccuracyConfig et transmettez une stratégie de moyennage à multiclass_average_strategy. Vous pouvez choisir micro, macro, samples, weighted ou binary. La valeur par défaut est micro. Transmettez ensuite à valid_labels une liste contenant les noms des colonnes qui contiennent les vraies étiquettes de vos catégories de classification. Enfin, appelez la méthode evaluate et transmettez-lui les paramètres que vous souhaitez, comme indiqué dans l’exemple de code suivant :
from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.classification_accuracy import ClassificationAccuracy, ClassificationAccuracyConfig eval_algo = ClassificationAccuracy(ClassificationAccuracyConfig(multiclass_average_strategy="samples",valid_labels=["animal_type","plant_type","fungi_type"])) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
Connaissances factuelles
Vous pouvez exécuter l’algorithme de connaissances factuelles pour une génération ouverte. Pour exécuter l’algorithme de connaissances factuelles, instanciez un élément FactualKnowledgeConfig et transmettez éventuellement une chaîne de délimitation (par défaut, <OR>). L’algorithme de connaissances factuelles compare la réponse générée par votre modèle à une réponse connue. L’algorithme note la réponse comme étant correcte s’il génère un contenu séparé par le délimiteur dans la réponse. Si vous transmettez None comme target_output_delimiter, le modèle doit générer la même réponse que la réponse pour être noté comme correct. Enfin, appelez la méthode evaluate et transmettez-lui les paramètres que vous souhaitez.
Les connaissances factuelles renvoient une liste d’objets EvalScore. Ceux-ci contiennent des scores agrégés indiquant dans quelle mesure votre modèle est capable de coder les connaissances factuelles, comme décrit dans la section Présentation de l’évaluation de modèles de fondation. Les scores varient entre 0 et 1, le score le plus bas correspondant à une moindre connaissance des faits du monde réel.
L’exemple de code suivant montre comment évaluer votre LLM à l’aide de l’algorithme de connaissances factuelles :
from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.factual_knowledge import FactualKnowledge, FactualKnowledgeConfig eval_algo = FactualKnowledge(FactualKnowledgeConfig()) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
Stéréotypage d’invite
Vous pouvez exécuter l’algorithme de stéréotypage d’invite pour une génération ouverte. Pour exécuter l’algorithme de stéréotypage d’invite, votre DataConfig doit identifier les colonnes de votre jeu de données d’entrée qui contiennent une phrase moins stéréotypée dans sent_less_input_location et une phrase plus stéréotypée dans sent_more_output_location. Pour plus d’informations sur DataConfig, consultez la section précédente 2. ConfigurationModelRunner. Ensuite, appelez la méthode evaluate et transmettez-lui les paramètres que vous souhaitez.
Le stéréotypage d’invite renvoie la liste des objets EvalOutput contenant un score pour chaque enregistrement d’entrée et des scores globaux pour chaque type de biais. Les scores sont calculés en comparant la probabilité des phrases plus et moins stéréotypées. Le score global indique à quelle fréquence le modèle a préféré la phrase stéréotypée, en ce sens que le modèle attribue une probabilité plus élevée à la phrase la plus stéréotypée par rapport à la phrase la moins stéréotypée. Un score de 0.5 indique que votre modèle est non biaisé ou qu’il préfère les phrases plus ou moins stéréotypées à des taux égaux. Un score supérieur à 0.5 indique que votre modèle est susceptible de générer une réponse plus stéréotypée. Des scores inférieurs à 0.5 indiquent que votre modèle est susceptible de générer une réponse moins stéréotypée.
L’exemple de code suivant montre comment évaluer votre LLM à l’aide de l’algorithme de stéréotypage d’invite :
from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.prompt_stereotyping import PromptStereotyping eval_algo = PromptStereotyping() eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
Robustesse sémantique
Vous pouvez exécuter un algorithme de robustesse sémantique pour n'importe quelle FMEval tâche, mais votre modèle doit être déterministe. Un modèle déterministe est un modèle qui génère toujours la même sortie pour la même entrée. On peut généralement atteindre le déterminisme en définissant une valeur initiale aléatoire dans le processus de décodage. Les algorithmes sont différents pour chaque tâche afin de s’adapter aux différents types d’entrée de données et aux problèmes, comme suit :
-
Pour une génération ouverte, des réponses aux questions ou une classification de tâches, exécutez l’algorithme
GeneralSemanticRobustnessavec un fichierGeneralSemanticRobustnessConfig. -
Pour une synthétisation de texte, exécutez l’algorithme
SummarizationAccuracySemanticRobustnessavec un fichierSummarizationAccuracySemanticRobustnessConfig.
L’algorithme GeneralSemanticRobustness renvoie la liste des objets EvalScore présentant une exactitude avec des valeurs comprises entre 0 et 1, quantifiant la différence entre les sorties du modèle perturbé et non perturbé. Pour exécuter l’algorithme de robustesse sémantique générale, instanciez un élément GeneralSemanticRobustnessConfig et transmettez-lui un élément perturbation_type. Vous pouvez choisir l’une des options suivantes pour perturbation_type :
-
Butterfinger: une perturbation qui imite les fautes d’orthographe en utilisant des permutations de caractères en fonction de la distance sur le clavier. Entrez une probabilité qu’un caractère donné soit perturbé. Butterfinger est la valeur par défaut deperturbation_type. -
RandomUpperCase: une perturbation qui transforme une fraction de caractères en majuscules. Entrez une valeur décimale comprise entre0et1. -
WhitespaceAddRemove: la probabilité qu’un espace blanc soit ajouté en blanc devant un caractère autre qu’un espace blanc.
Vous pouvez également spécifier les paramètres suivants :
-
num_perturbations: le nombre de perturbations que chaque échantillon doit introduire dans le texte généré. La valeur par défaut est5. -
butter_finger_perturbation_prob: la probabilité qu’un caractère soit perturbé. Utilisé uniquement siperturbation_typeestButterfinger. La valeur par défaut est0.1. -
random_uppercase_corrupt_proportion: la fraction des caractères à mettre en majuscules. Utilisé uniquement siperturbation_typeestRandomUpperCase. La valeur par défaut est0.1. -
whitespace_add_prob: pour un espace blanc donné, la probabilité qu’il soit retiré d’un échantillon. Utilisé uniquement siperturbation_typeestWhitespaceAddRemove. La valeur par défaut est0.05. -
whitespace_remove_prob: pour un caractère donné autre qu’un espace blanc, la probabilité qu’un espace blanc soit ajouté devant lui. Utilisé uniquement siperturbation_typeestWhitespaceAddRemove. La valeur par défaut est0.1.
Enfin, appelez la méthode evaluate et transmettez-lui les paramètres que vous souhaitez, comme indiqué dans l’exemple de code suivant :
from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.general_semantic_robustness import GeneralSemanticRobustness, GeneralSemanticRobustnessConfig eval_algo = GeneralSemanticRobustness(GeneralSemanticRobustnessConfig(perturbation_type="RandomUpperCase",num_perturbations=2,random_uppercase_corrupt_proportion=0.3))) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
L’algorithme SummarizationAccuracySemanticRobustness renvoie la liste des objets EvalScore contenant la différence (ou delta) entre les valeurs ROUGE-NSummarizationAccuracySemanticRobustnessConfig et transmettez-lui un élément perturbation_type.
Vous pouvez choisir l’une des options suivantes pour perturbation_type :
-
Butterfinger: une perturbation qui imite les fautes d’orthographe en utilisant des permutations de caractères en fonction de la distance sur le clavier. Entrez une probabilité qu’un caractère donné soit perturbé.Butterfingerest la valeur par défaut pourperturbation_type. -
RandomUpperCase: une perturbation qui transforme une fraction de caractères en majuscules. Entrez une valeur décimale comprise entre0et1. -
WhitespaceAddRemove: entrez la probabilité qu’un espace blanc soit ajouté en blanc devant un caractère autre qu’un espace blanc.
Vous pouvez également spécifier les paramètres suivants :
-
num_perturbations: le nombre de perturbations que chaque échantillon doit introduire dans le texte généré. La valeur par défaut est5. -
butter_finger_perturbation_prob: la probabilité qu’un caractère soit perturbé. Utilisé uniquement siperturbation_typeestButterfinger. La valeur par défaut est0.1. -
random_uppercase_corrupt_proportion: la fraction des caractères à mettre en majuscules. Utilisé uniquement siperturbation_typeestRandomUpperCase. La valeur par défaut est0.1. -
whitespace_add_prob: pour un espace blanc donné, la probabilité qu’il soit retiré d’un échantillon. Utilisé uniquement siperturbation_typeestWhitespaceAddRemove. La valeur par défaut est0.05. -
whitespace_remove_prob: pour un caractère donné autre qu’un espace blanc, la probabilité qu’un espace blanc soit ajouté devant lui. Utilisé uniquement lorsqueperturbation_typea pour valeurWhitespaceAddRemove. La valeur par défaut est0.1. -
rouge_type: métriques qui comparent les résumés générés aux résumés de référence. Spécifiez le type de métrique ROUGEque vous souhaitez utiliser dans votre évaluation dans rouge_type. Vous pouvez choisirrouge1,rouge2ourougeL. ROUGE-1 compare les résumés générés et les résumés de référence à l’aide d’unigrammes superposés (séquences d’éléments individuels tels que « le », « est »). ROUGE-2 compare les résumés générés et de référence à l’aide de bigrammes (groupes de deux séquences tels que « le grand », « est là »). ROUGE-L compare la plus longue séquence de mots correspondante. Pour plus d’informations sur ROUGE, consultez ROUGE: A Package for Automatic Evaluation of Summaries. -
Définissez
user_stemmer_for_rougesurTrueouFalse. Un agent de radicalisation supprime les affixes des mots avant de les comparer. Par exemple, un agent de radicalisation supprime les affixes de « décentrage » et de « centré » pour fournir dans les deux cas « centre » après radicalisation. -
Définissez
model_type_for_bertscoresur le modèle que vous souhaitez utiliser pour calculer un BERTScore. Vous pouvez choisir ROBERTA_MODEL ou le modèle plus avancé MICROSOFT_DEBERTA_MODEL . Appelez la méthode
evaluateet transmettez-lui les paramètres souhaités, comme indiqué dans l’exemple de code suivant :from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.summarization_accuracy_semantic_robustness import SummarizationAccuracySemanticRobustness, SummarizationAccuracySemanticRobustnessConfig eval_algo = SummarizationAccuracySemanticRobustness(SummarizationAccuracySemanticRobustnessConfig(perturbation_type="Butterfinger",num_perturbations=3,butter_finger_perturbation_prob=0.2))) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)
Toxicité
Vous pouvez exécuter un algorithme de toxicité pour une génération ouverte, une synthétisation de texte ou des réponses à des questions. Il existe trois classes distinctes en fonction de la tâche.
-
Pour une génération ouverte, exécutez l’algorithme de toxicité avec un fichier
ToxicityConfig. -
Pour la synthétisation, utilisez la classe
Summarization_Toxicity. -
Pour les réponses aux questions, utilisez la classe
QAToxicity.
L’algorithme de toxicité renvoie une ou plusieurs listes d’objets EvalScore (selon le détecteur de toxicité) contenant des scores compris entre 0 et 1. Pour exécuter l’algorithme de toxicité, instanciez un élément ToxicityConfig et transmettez-lui un modèle de toxicité à utiliser par rapport auquel évaluer votre modèle dans model_type. Vous pouvez choisir les options suivantes pour model_type :
-
« detoxify » pour UnitaryAI Detoxify-unbiased
, un classificateur de texte à plusieurs étiquettes entraîné sur Toxic Comment Classification Challenge et Jigsaw Unintended Bias in Toxicity Classification . Ce modèle fournit 7scores pour les classes suivantes : toxicité, toxicité grave, obscénité, menace, insulte, caractère sexuel explicite et atteinte à l’identité.Voici un exemple de sortie du modèle detoxity :
EvalScore(name='toxicity', value=0.01936926692724228), EvalScore(name='severe_toxicity', value=3.3755677577573806e-06), EvalScore(name='obscene', value=0.00022437423467636108), EvalScore(name='identity_attack', value=0.0006707844440825284), EvalScore(name='insult', value=0.005559926386922598), EvalScore(name='threat', value=0.00016682750720065087), EvalScore(name='sexual_explicit', value=4.828436431125738e-05) -
`toxigen` pour Toxigen-Roberta
, un classificateur de texte binaire BERTa basé sur Ro affiné sur l'ensemble de ToxiGen données, qui contient des phrases présentant une toxicité subtile et implicite concernant les groupes minoritaires. 13
Enfin, appelez la méthode evaluate et transmettez-lui les paramètres que vous souhaitez, comme indiqué dans l’exemple de code suivant.
from fmeval.eval import get_eval_algorithm from fmeval.eval_algorithms.toxicity import Toxicity, ToxicityConfig eval_algo = Toxicity(ToxicityConfig(model_type="detoxify")) eval_output = eval_algo.evaluate(model=model_runner, dataset_config=config, prompt_template="$feature", save=True)