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.
Utiliser la fmeval
bibliothèque pour exécuter une évaluation automatique
L'utilisation de la fmeval
bibliothèque dans votre propre code vous offre la plus grande flexibilité pour personnaliser votre flux de travail. Vous pouvez utiliser la fmeval
bibliothèque pour en évaluer n'importe lequelLLM, mais aussi pour bénéficier d'une plus grande flexibilité avec vos ensembles 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épart et un flux de travail personnalisé à l'aide de la fmeval
bibliothèque.
Commencez à utiliser la fmeval
bibliothèque
Vous pouvez configurer l'évaluation de votre modèle de base 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. FMEvalprend 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 décrites dans 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 et un flux de travail personnalisés pour un cas d'utilisation plus spécifique, consultezPersonnalisez votre flux de travail à l'aide de la fmeval bibliothèque.
Si vous ne souhaitez pas exécuter une évaluation de modèle dans un bloc-notes Studio, passez à l'étape 11 de la section suivante Commencer à utiliser Studio.
Prérequis
-
Pour exécuter une évaluation de modèle dans une interface utilisateur de Studio, votre rôle AWS Identity and Access Management (IAM) et tous les ensembles de données d'entrée doivent disposer des autorisations appropriées. Si vous n'avez pas de SageMaker domaine ou de IAM rôle, suivez les étapes décrites dansGuide de configuration avec Amazon SageMaker.
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 SageMaker console Amazon à l'adresse https://console.aws.amazon.com/sagemaker/
. -
Dans le volet de navigation,
S3
entrez dans la barre de recherche en haut de la page. -
Choisissez S3 sous Services.
-
Choisissez Buckets 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 ne possédez pas de compartiment S3, procédez comme suit :
-
Sélectionnez Créer un compartiment pour ouvrir une nouvelle page de création de compartiment.
-
Dans la section Configuration générale, sous AWS Région, sélectionnez la AWS région dans laquelle se trouve votre modèle de base.
-
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éé.
-
-
Choisissez l’onglet Permissions (Autorisations).
-
Accédez à la section Partage de 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 IAM politique
-
Dans la barre de recherche en haut de la page, entrez
IAM
. -
Sous Services, sélectionnez Identity and Access Management (IAM).
-
Choisissez Policies dans le volet de navigation.
-
Entrez AmazonSageMakerFullAccessdans la barre de recherche. Sélectionnez le bouton radio à côté de la politique qui s'affiche. Le bouton Actions peut désormais être sélectionné.
-
Cliquez sur la flèche vers le bas à côté de Actions. Deux options s'offrent à vous.
-
Choisissez Attacher.
-
Dans la IAM liste qui apparaît, recherchez le nom du rôle que vous avez créé. Cochez la case à côté du nom.
-
Choisissez Attach policy (Attacher une politique).
Commencez à utiliser Studio
-
Dans la barre de recherche en haut de la page, entrez
SageMaker
. -
Sous Services, sélectionnez Amazon SageMaker.
-
Choisissez Studio dans le volet de navigation.
-
Choisissez votre domaine dans la section Commencer, après avoir développé la flèche vers le bas sous Sélectionner un domaine.
-
Choisissez votre profil utilisateur dans la section Commencer après avoir développé la flèche vers le bas sous Sélectionner le profil utilisateur.
-
Choisissez Open Studio pour ouvrir la page d'accueil de Studio.
-
Sélectionnez le navigateur 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
fmeval
package dans votre environnement de développement, comme indiqué dans l'exemple de code suivant :!pip install fmeval
Note
Installez la
fmeval
bibliothèque dans un environnement qui utilise Python 3.10. Pour plus d'informations sur les exigences nécessaires à l'exécutionfmeval
, consultez la sectionfmeval
dépendances.
FMEvalutilise un wrapper de haut niveau appelé ModelRunner
pour composer l'entrée, invoquer et extraire la sortie de votre modèle. Le fmeval
package peut évaluer n'importe lequelLLM, mais la procédure de configuration 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 personnaliséModelRunner
, consultezPersonnalisez votre flux de travail à l'aide de la fmeval bibliothèque.
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 opérations suivantes :
-
Spécifiez le EndpointNameà un point de JumpStart terminaison existant, le
model_id
, etmodel_version
. -
Spécifiez le
model_id
etmodel_version
pour 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). EULAVous pouvez les trouver dans la description de la fiche 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'informationsEULA, consultez la section Licences et sources de modèles dansModè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_id
, et cellesmodel_version
que vous avez utilisées pour créer le point de terminaison. -
Testez votre
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")
Utiliser 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 le configurerModelRunner
.
Définissez un modèle Amazon Bedrock et configurez un ModelRunner
-
Pour définir et imprimer 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
accept
paramètre indique le format des données que vous souhaitez utiliser pour évaluer votreLLM.contentType
Spécifie le format des données d'entrée dans la demande.MIME_TYPE_JSON
Uniquement pris en charge pouraccept
etcontentType
pour les modèles Amazon Bedrock. Pour plus d'informations sur ces paramètres, consultez InvokeModelWithResponseStream. -
Pour configurer
ModelRunner
, utilisez leBedrockModelRunner
, 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
ModelRunner
configuration comme suit.-
Utilisez les mêmes valeurs que celles
model_id
que vous avez utilisées pour déployer le modèle. -
output
À utiliser pour spécifier le format de lajson
réponse générée. Par exemple, si vous avez LLM fourni la réponse[{"results": "this is the output"}]
, elle estoutput='results[0].outputText'
renvoyéethis is the output
. -
content_template
À utiliser pour spécifier la manière dont vous LLM interagissez 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
inputText
spécifie l'invite, qui capture la demande faite par l'utilisateur. -
La variable
textGenerationConfig
indique comment elle LLM génère les réponses comme suit :-
Le paramètre
maxTokenCount
est utilisé pour limiter la longueur de la réponse en limitant le nombre de jetons renvoyés par leLLM. -
Le paramètre
stopSequences
est utilisé pour spécifier une liste de séquences de caractères qui vous indiquent 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 de chariot pour limiter la réponse du modèle à une seule ligne. -
Le paramètre
topP
contrôle le caractère aléatoire en limitant l'ensemble de jetons à prendre en compte lors de la génération du jeton suivant. Ce paramètre accepte les valeurs comprises entre0.0
et1.0
. Des valeurs plus élevéestopP
autorisent un ensemble contenant un vocabulaire plus large et des valeurs faibles limitent l'ensemble de jetons à des mots plus probables. -
Le paramètre
temperature
contrôle le caractère aléatoire du texte généré et accepte les valeurs positives. Des valeurs plus élevéestemperature
indiquent au modèle de générer des réponses plus aléatoires et plus diverses. Des valeurs faibles génèrent des réponses plus prévisibles. Les plages typiquestemperature
se situent entre0.2
et2.0
.
Pour plus d'informations sur les paramètres d'un modèle de fondation Amazon Bedrock spécifique, consultez la section 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, Anthropic’s Claude 2 le modèle
peut prendre en charge les éléments suivants content_template
:"content_template": "{\"prompt\": $prompt, \"max_tokens_to_sample\": 500}"
Autre exemple, le modèle Falcon7b
peut prendre en charge les éléments suivants. content_template
"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éesModelRunner
, vous pouvez exécuter un algorithme d'évaluation sur les réponses générées par votreLLM. Pour voir 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 evaluate_sample
méthode. La evaluate
méthode calcule un score pour l'ensemble de données. La evaluate_sample
méthode évalue le score pour une seule instance.
La evaluate_sample
méthode renvoie EvalScore
des objets. EvalScore
les objets contiennent des scores agrégés indiquant les performances de votre modèle lors de l'évaluation. La evaluate_sample
méthode comporte les paramètres facultatifs suivants :
-
model_output
— Modèle de réponse pour une seule demande. -
model_input
— Une invite contenant la demande adressée à votre modèle. -
target_output
— La réponse attendue à l'invite contenue dansmodel_input
.
L'exemple de code suivant montre comment utiliser 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 evaluate
méthode comporte les paramètres facultatifs suivants :
-
model
— Une instance d'ModelRunner
utilisation du modèle que vous souhaitez évaluer. -
dataset_config
— La configuration du jeu de données. Sidataset_config
ce n'est pas le cas, le modèle est évalué à l'aide de tous les ensembles de données intégrés configurés pour cette tâche. -
prompt_template
— Modèle utilisé pour générer des instructions. Siprompt_template
ce n'est pas le cas, 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 rapides et les scores enregistrés par enregistrement sont enregistrés dans le fichier.EvalAlgorithmInterface.EVAL_RESULTS_PATH
La valeur par défaut estFalse
. -
num_records
— Le nombre d'enregistrements qui sont échantillonnés de manière aléatoire dans le jeu de données d'entrée pour évaluation. La valeur par défaut est300
.
L'evaluate
algorithme renvoie une liste d'EvalOutput
objets pouvant inclure les éléments suivants :
-
eval_name
— Nom de l'algorithme d'évaluation.dataset_name
— Le nom de l'ensemble de données utilisé par l'algorithme d'évaluation.prompt_template
— Un modèle utilisé pour composer des invites qui est utilisé si le paramètre n'model_output
est pas fourni dans l'ensemble de données. Pour plus d'informations, consultezprompt_template
la JumpStartModelRunner
section Configurer un.dataset_scores
— Un score agrégé calculé sur l'ensemble de données.category_scores
— Une liste d'CategoryScore
objets contenant les scores pour chaque catégorie de l'ensemble de données.output_path
— Le chemin local vers le résultat de l'évaluation. Ce résultat contient des réponses rapides avec des scores d'évaluation records.error
— 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 du modèle :
-
Précision
-
Connaissances factuelles
-
Stéréotypage rapide
-
Robustesse sémantique
-
Toxicité
Précision
Vous pouvez exécuter un algorithme de précision pour une tâche de réponse à une question, de synthèse de texte ou de classification. Les algorithmes sont différents pour chaque tâche afin de s'adapter aux différents types de saisie de données et aux problèmes suivants :
-
Pour les tâches de réponse aux questions, exécutez l'
QAAccuracy
algorithme avec unQAAccuracyConfig
fichier. -
Pour les tâches de synthèse de texte, exécutez l'
SummarizationAccuracy
algorithme avec unSummarizationAccuracyConfig
. -
Pour les tâches de classification, exécutez l'
ClassificationAccuracy
algorithme avec unClassificationAccuracyConfig
.
L'QAAccuracy
algorithme renvoie une liste d'EvalOutput
objets contenant un score de précision pour chaque échantillon. Pour exécuter l'algorithme de précision des réponses aux questions, instanciez un QAAccuracygeConfig
et transmettez-le <OR>
soit en None
tant que. target_output_delimiter
L'algorithme de précision des réponses aux questions compare la réponse générée par votre modèle à une réponse connue. Si vous le transmettez en <OR>
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
une chaîne vide en tant quetarget_output_delimiter
, le code génère une erreur.
Appelez la evaluate
méthode et transmettez 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'SummarizationAccuracy
algorithme renvoie une liste d'EvalOutput
objets contenant des scores pour ROUGE-NSummarizationAccuracyConfig
et transmettez ce qui suit :
-
Spécifiez le type de ROUGE
métrique que vous souhaitez utiliser dans votre évaluation rouge_type
. Vous pouvez choisirrouge1
,rouge2
ourougeL
. Ces mesures 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'un élément telles que « le », « est »). ROUGE-2 compare les résumés générés et les résumés de référence à l'aide de bigrammes (groupes de deux séquences tels que « the large », « is home »). ROUGE-L compare la plus longue séquence de mots correspondante. Pour plus d'informations sur ROUGE, voir ROUGE: Package pour l'évaluation automatique des résumés. -
Définissez
use_stemmer_for_rouge
surTrue
ouFalse
. Un stemmer supprime les affixes des mots avant de les comparer. Par exemple, un stemmer supprime les affixes « natation » et « nagé » afin qu'ils soient tous les deux « nagés » après avoir été tirés. -
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 plus avancé MICROSOFT_ DEBERTA _ MODEL .
Enfin, appelez la evaluate
méthode et transmettez 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 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'ClassificationAccuracy
algorithme renvoie une liste d'EvalOutput
objets contenant les scores d'exactitude de classification, de précision, de rappel et de précision équilibrés pour chaque échantillon. Pour plus d'informations sur ces scores, consultez la section Classification dansUtilisation de jeux de données rapides et de dimensions d'évaluation disponibles dans les tâches d'évaluation de modèles . Pour exécuter l'algorithme de précision de classification, instanciez a ClassificationAccuracyConfig
et transmettez une stratégie de moyenne à. multiclass_average_strategy
Vous pouvez choisir micro
macro
,samples
,weighted
, oubinary
. La valeur par défaut est micro
. Transmettez ensuite une liste contenant les noms des colonnes contenant les véritables étiquettes de vos catégories de classification à valid_labels. Enfin, appelez la evaluate
méthode et transmettez les paramètres souhaités, 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 connaissance factuelle pour une génération ouverte. Pour exécuter l'algorithme de connaissance factuelle, instanciez une chaîne FactualKnowledgeConfig
et transmettez éventuellement une chaîne de délimitation (par défaut, c'est le cas). <OR>
L'algorithme de connaissance factuelle compare la réponse générée par votre modèle à une réponse connue. L'algorithme considère que la réponse est correcte s'il génère un contenu séparé par le délimiteur dans la réponse. Si vous passez None
comme teltarget_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 evaluate
méthode et transmettez les paramètres souhaités.
Les connaissances factuelles renvoient une liste d'EvalScore
objets. Ils 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 de présentation de l'évaluation du modèle Foundation. 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 vous évaluer à LLM l'aide de l'algorithme de connaissance factuelle :
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 rapide
Vous pouvez exécuter l'algorithme de stéréotypage rapide pour une génération ouverte. Pour exécuter l'algorithme de stéréotypage rapide, vous DataConfig
devez 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'informationsDataConfig
, consultez la section 2 précédente. ConfigurationModelRunner
. Ensuite, appelez la evaluate
méthode et transmettez les paramètres souhaités.
Le stéréotypage rapide renvoie une liste d'EvalOutput
objets 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 ou 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 impartial ou qu'il préfère des 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
1 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 vous évaluer à LLM l'aide de l'algorithme de stéréotypage rapide :
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 graine 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 de saisie de données et aux problèmes suivants :
-
Pour une génération ouverte, une réponse à des questions ou une classification de tâches, exécutez l'
GeneralSemanticRobustness
algorithme avec unGeneralSemanticRobustnessConfig
fichier. -
Pour le résumé du texte, exécutez l'
SummarizationAccuracySemanticRobustness
algorithme avec unSummarizationAccuracySemanticRobustnessConfig
fichier.
L'GeneralSemanticRobustness
algorithme renvoie une liste d'EvalScore
objets présentant une précision avec des valeurs comprises entre les sorties du modèle perturbées 0
et non perturbées et 1
quantifiant la différence entre celles-ci. Pour exécuter l'algorithme général de robustesse sémantique, instanciez a GeneralSemanticRobustnessConfig
et transmettez a. 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 du clavier. Entrez une probabilité qu'un caractère donné soit perturbé. Butterfinger est la valeur par défaut deperturbation_type
. -
RandomUpperCase
— Perturbation qui transforme une fraction de caractères en majuscules. Entrez un nombre décimal compris entre et0
.1
-
WhitespaceAddRemove
— Probabilité qu'un espace blanc soit ajouté en blanc devant un caractère autre qu'un espace blanc.
Vous pouvez également définir les paramètres suivants :
-
num_perturbations
— Le nombre de perturbations que chaque échantillon doit introduire dans le texte généré. L’argument par défaut est5
. -
butter_finger_perturbation_prob
— Probabilité qu'un personnage soit perturbé. Utilisé uniquement siperturbation_type
estButterfinger
. L’argument par défaut est0.1
. -
random_uppercase_corrupt_proportion
— Fraction de caractères à remplacer en majuscules. Utilisé uniquement siperturbation_type
estRandomUpperCase
. L’argument par défaut est0.1
. -
whitespace_add_prob
— Étant donné un espace blanc, probabilité de le retirer d'un échantillon. Utilisé uniquement siperturbation_type
estWhitespaceAddRemove
. L’argument par défaut est0.05
. -
whitespace_remove_prob
— Étant donné un espace non blanc, probabilité d'ajouter un espace blanc devant celui-ci. Utilisé uniquement siperturbation_type
estWhitespaceAddRemove
. L’argument par défaut est0.1
.
Enfin, appelez la evaluate
méthode et transmettez les paramètres souhaités, 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'SummarizationAccuracySemanticRobustness
algorithme renvoie une liste d'EvalScore
objets contenant la différence (ou delta) entre ROUGE-NSummarizationAccuracySemanticRobustnessConfig
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 du clavier. Entrez une probabilité qu'un caractère donné soit perturbé.Butterfinger
est la valeur par défaut pourperturbation_type
. -
RandomUpperCase
— Perturbation qui transforme une fraction de caractères en majuscules. Entrez un nombre décimal compris entre et0
.1
-
WhitespaceAddRemove
— Entrez la probabilité qu'un espace blanc soit ajouté en blanc devant un caractère autre qu'un espace blanc.
Vous pouvez également définir 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
— Probabilité qu'un personnage soit perturbé. Utilisé uniquement siperturbation_type
estButterfinger
. La valeur par défaut est0.1
. -
random_uppercase_corrupt_proportion
— Fraction de caractères à remplacer en majuscules. Utilisé uniquement siperturbation_type
estRandomUpperCase
. La valeur par défaut est0.1
. -
whitespace_add_prob
— Étant donné un espace blanc, probabilité de le retirer d'un échantillon. Utilisé uniquement siperturbation_type
estWhitespaceAddRemove
. La valeur par défaut est0.05
. -
whitespace_remove_prob
— Étant donné un espace non blanc, probabilité d'ajouter un espace blanc devant celui-ci. Utilisé uniquement lorsqueperturbation_type
c'est le casWhitespaceAddRemove
, la valeur par défaut est0.1
. -
rouge_type
— Des 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 ROUGEmétrique que vous souhaitez utiliser dans votre évaluation rouge_type
. Vous pouvez choisirrouge1
,rouge2
ourougeL
. 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'un élément telles que « le », « est »). ROUGE-2 compare les résumés générés et les résumés de référence à l'aide de bigrammes (groupes de deux séquences tels que « the large », « is home »). ROUGE-L compare la plus longue séquence de mots correspondante. Pour plus d'informations sur ROUGE, voir ROUGE: Package pour l'évaluation automatique des résumés. -
Définissez
user_stemmer_for_rouge
surTrue
ouFalse
. Un stemmer supprime les affixes des mots avant de les comparer. Par exemple, un stemmer supprime les affixes « natation » et « nagé » afin qu'ils soient tous les deux « nagés » après avoir été tirés. -
Définissez
model_type_for_bertscore
le modèle que vous souhaitez utiliser pour calculer un BERTScore. Vous pouvez choisir ROBERTA_ MODEL ou le plus avancé MICROSOFT_ DEBERTA _ MODEL . Appelez la
evaluate
méthode et transmettez 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, un résumé de texte ou des réponses à des questions. Il existe trois catégories distinctes en fonction de la tâche.
-
Pour une génération ouverte, exécutez l'algorithme de toxicité avec un
ToxicityConfig
fichier. -
Pour le résumé, utilisez la classe
Summarization_Toxicity
. -
Pour répondre aux questions, utilisez la classe
QAToxicity
.
L'algorithme de toxicité renvoie une ou plusieurs listes d'EvalScore
objets (selon le détecteur de toxicité) contenant des scores compris entre 0
et1
. Pour exécuter l'algorithme de toxicité, instanciez un modèle ToxicityConfig
et transmettez-lui un modèle de toxicité à utiliser pour évaluer votre modèle par rapport à in. model_type
Vous pouvez choisir les options suivantes pour model_type
:
-
`detoxify` pour UnitaryAI Detoxify-Unbias, un classificateur de texte multilabel formé sur le Toxic
Comment Classification Challenge et Jigsaw Unintended Bias in Toxicity Classification. Le modèle fournit des 7
scores pour les classes suivantes : toxicité, toxicité grave, obscénité, menace, insulte, explicité sexuelle et atteinte à l'identité.Voici un exemple de sortie du modèle de désintoxication :
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 basé sur oBERTa R affiné sur l'ensemble de données, qui contient des phrases présentant une toxicité subtile et implicite concernant ToxiGen les groupes minoritaires. 13
Enfin, appelez la evaluate
méthode et transmettez les paramètres souhaités, 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)