Utiliser la fmeval bibliothèque pour exécuter une évaluation automatique - Amazon SageMaker

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.

  1. Ouvrez la SageMaker console Amazon à l'adresse https://console.aws.amazon.com/sagemaker/.

  2. Dans le volet de navigation, S3 entrez dans la barre de recherche en haut de la page.

  3. Choisissez S3 sous Services.

  4. Choisissez Buckets dans le volet de navigation.

  5. 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 :

    1. Sélectionnez Créer un compartiment pour ouvrir une nouvelle page de création de compartiment.

    2. 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.

    3. Nommez votre compartiment S3 dans la zone de saisie sous Nom du compartiment.

    4. Acceptez tous les choix par défaut.

    5. Sélectionnez Créer un compartiment.

    6. Dans la section Compartiments à usage général, sous Nom, sélectionnez le nom du compartiment S3 que vous avez créé.

  6. Choisissez l’onglet Permissions (Autorisations).

  7. Accédez à la section Partage de ressources entre origines (CORS) en bas de la fenêtre. Choisissez Modifier.

  8. 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" ] } ]
  9. Sélectionnez Enregistrer les modifications.

Pour ajouter des autorisations à votre IAM politique
  1. Dans la barre de recherche en haut de la page, entrezIAM.

  2. Sous Services, sélectionnez Identity and Access Management (IAM).

  3. Choisissez Policies dans le volet de navigation.

  4. 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é.

  5. Cliquez sur la flèche vers le bas à côté de Actions. Deux options s'offrent à vous.

  6. Choisissez Attacher.

  7. Dans la IAM liste qui apparaît, recherchez le nom du rôle que vous avez créé. Cochez la case à côté du nom.

  8. Choisissez Attach policy (Attacher une politique).

Commencez à utiliser Studio
  1. Dans la barre de recherche en haut de la page, entrezSageMaker.

  2. Sous Services, sélectionnez Amazon SageMaker.

  3. Choisissez Studio dans le volet de navigation.

  4. Choisissez votre domaine dans la section Commencer, après avoir développé la flèche vers le bas sous Sélectionner un domaine.

  5. 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.

  6. Choisissez Open Studio pour ouvrir la page d'accueil de Studio.

  7. Sélectionnez le navigateur de fichiers dans le volet de navigation et accédez au répertoire racine.

  8. Sélectionnez Créer un bloc-notes.

  9. Dans la boîte de dialogue d'environnement de bloc-notes qui s'ouvre, sélectionnez l'image Data Science 3.0.

  10. Choisissez Select (Sélectionner).

  11. 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 section fmevaldé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
  1. Fournissez un point de terminaison en effectuant l'une des opérations suivantes :

    • Spécifiez le EndpointNameà un point de JumpStart terminaison existant, lemodel_id, etmodel_version.

    • Spécifiez le model_id et model_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 modelqui 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écifieraccept_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.

  2. 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_namemodel_id, et celles model_version que vous avez utilisées pour créer le point de terminaison.

  3. Testez votreModelRunner. 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
  1. 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. contentTypeSpécifie le format des données d'entrée dans la demande. MIME_TYPE_JSONUniquement pris en charge pour accept et contentType pour les modèles Amazon Bedrock. Pour plus d'informations sur ces paramètres, consultez InvokeModelWithResponseStream.

  2. Pour configurerModelRunner, 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 la json réponse générée. Par exemple, si vous avez LLM fourni la réponse[{"results": "this is the output"}], elle est output='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 entre 0.0 et1.0. Des valeurs plus élevées topP 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ées temperature 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 typiques temperature se situent entre 0.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 votreModelRunner. 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. EvalScoreles 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'ModelRunnerutilisation du modèle que vous souhaitez évaluer.

  • dataset_config— La configuration du jeu de données. Si dataset_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. Si prompt_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 est False.

  • 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 est 300.

L'evaluatealgorithme renvoie une liste d'EvalOutputobjets 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_outputest pas fourni dans l'ensemble de données. Pour plus d'informations, consultez prompt_template la JumpStart ModelRunnersection Configurer un.

    dataset_scores— Un score agrégé calculé sur l'ensemble de données.

    category_scores— Une liste d'CategoryScoreobjets 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'QAAccuracyalgorithme avec un QAAccuracyConfig fichier.

  • Pour les tâches de synthèse de texte, exécutez l'SummarizationAccuracyalgorithme avec unSummarizationAccuracyConfig.

  • Pour les tâches de classification, exécutez l'ClassificationAccuracyalgorithme avec unClassificationAccuracyConfig.

L'QAAccuracyalgorithme renvoie une liste d'EvalOutputobjets 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'SummarizationAccuracyalgorithme renvoie une liste d'EvalOutputobjets contenant des scores pour ROUGE-N, Meteor, et BERTScore. Pour plus d'informations sur ces scores, consultez la section Récapitulatif du texte 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 la synthèse du texte, instanciez a SummarizationAccuracyConfig et transmettez ce qui suit :

  • Spécifiez le type de ROUGEmétrique que vous souhaitez utiliser dans votre évaluationrouge_type. Vous pouvez choisir rouge1, rouge2 ou rougeL. 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 sur True ou False. 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'ClassificationAccuracyalgorithme renvoie une liste d'EvalOutputobjets 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 micromacro,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'EvalScoreobjets. 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'EvalOutputobjets 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'GeneralSemanticRobustnessalgorithme avec un GeneralSemanticRobustnessConfig fichier.

  • Pour le résumé du texte, exécutez l'SummarizationAccuracySemanticRobustnessalgorithme avec un SummarizationAccuracySemanticRobustnessConfig fichier.

L'GeneralSemanticRobustnessalgorithme renvoie une liste d'EvalScoreobjets 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 est 5.

  • butter_finger_perturbation_prob— Probabilité qu'un personnage soit perturbé. Utilisé uniquement si perturbation_type est Butterfinger. L’argument par défaut est 0.1.

  • random_uppercase_corrupt_proportion— Fraction de caractères à remplacer en majuscules. Utilisé uniquement si perturbation_type est RandomUpperCase. L’argument par défaut est 0.1.

  • whitespace_add_prob— Étant donné un espace blanc, probabilité de le retirer d'un échantillon. Utilisé uniquement si perturbation_type est WhitespaceAddRemove. L’argument par défaut est 0.05.

  • whitespace_remove_prob— Étant donné un espace non blanc, probabilité d'ajouter un espace blanc devant celui-ci. Utilisé uniquement si perturbation_type est WhitespaceAddRemove. L’argument par défaut est 0.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'SummarizationAccuracySemanticRobustnessalgorithme renvoie une liste d'EvalScoreobjets contenant la différence (ou delta) entre ROUGE-N, Meteor, et BERTScorevaleurs entre les résumés générés et les résumés de référence. Pour plus d'informations sur ces scores, consultez la section Récapitulatif du texte 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 robustesse sémantique du résumé de texte, instanciez a et transmettez a. SummarizationAccuracySemanticRobustnessConfig 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é. Butterfingerest 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 est 5.

  • butter_finger_perturbation_prob— Probabilité qu'un personnage soit perturbé. Utilisé uniquement si perturbation_type est Butterfinger. La valeur par défaut est 0.1.

  • random_uppercase_corrupt_proportion— Fraction de caractères à remplacer en majuscules. Utilisé uniquement si perturbation_type est RandomUpperCase. La valeur par défaut est 0.1.

  • whitespace_add_prob— Étant donné un espace blanc, probabilité de le retirer d'un échantillon. Utilisé uniquement si perturbation_type est WhitespaceAddRemove. La valeur par défaut est 0.05.

  • whitespace_remove_prob— Étant donné un espace non blanc, probabilité d'ajouter un espace blanc devant celui-ci. Utilisé uniquement lorsque perturbation_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 évaluationrouge_type. Vous pouvez choisir rouge1, rouge2 ou rougeL. 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 sur True ou False. 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 classeSummarization_Toxicity.

  • Pour répondre aux questions, utilisez la classeQAToxicity.

L'algorithme de toxicité renvoie une ou plusieurs listes d'EvalScoreobjets (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)