1. Introduction
Les produits d'IA générative sont relativement récents, et les comportements d'une application peuvent varier davantage que les formes antérieures de logiciels. Il est donc important d'examiner les modèles de machine learning utilisés, d'étudier des exemples de comportement du modèle et d'analyser les surprises.
Learning Interpretability Tool (LIT, site Web, GitHub) est une plate-forme de débogage et d'analyse des modèles de ML pour comprendre pourquoi et comment ils se comportent comme ils le font.
Dans cet atelier de programmation, vous allez apprendre à utiliser LIT pour exploiter tout le potentiel du modèle Gemma de Google. Cet atelier de programmation montre comment utiliser la saillance de séquence, une technique d'interprétabilité, pour analyser différentes approches d'ingénierie des requêtes.
Objectifs de la formation :
- Comprendre la saillance de séquence et ses utilisations dans l'analyse de modèle
- Configuration de LIT pour Gemma afin de calculer les sorties d'invite et la saillance de la séquence.
- Utiliser la saillance de séquence via le module Salience du modèle de langage pour comprendre l'impact des conceptions de requêtes sur les sorties du modèle.
- Tester les améliorations hypothétiques dans LIT et en mesurer l'impact
Remarque: Cet atelier de programmation utilise l'implémentation KerasNLP de Gemma et TensorFlow V2 pour le backend. Nous vous recommandons vivement d'utiliser un kernel GPU pour suivre la procédure.
2. Salience de séquence et utilisations dans l'analyse de modèle
Les modèles génératifs texte-vers-texte, comme Gemma, prennent une séquence d'entrée sous la forme d'un texte segmenté et génèrent de nouveaux segments qui sont des suites ou des compléments typiques de cette entrée. Cette génération se produit un jeton à la fois, en ajoutant (en boucle) chaque jeton nouvellement généré à l'entrée ainsi qu'à toutes les générations précédentes jusqu'à ce que le modèle atteigne une condition d'arrêt. Par exemple, lorsque le modèle génère un jeton de fin de séquence (EOS) ou atteint la longueur maximale prédéfinie.
Les méthodes de saillance sont une classe de techniques d'explicable AI (XAI) qui peuvent vous indiquer quelles parties d'une entrée sont importantes pour le modèle pour différentes parties de sa sortie. LIT est compatible avec les méthodes de saillance pour diverses tâches de classification, qui expliquent l'impact d'une séquence de jetons d'entrée sur l'étiquette prédite. La saillance de séquence généralise ces méthodes aux modèles génératifs texte-vers-texte et explique l'impact des jetons précédents sur les jetons générés.
Vous utiliserez ici la méthode Grad L2 Norm pour la saillance de séquence, qui analyse les gradients du modèle et fournit une magnitude de l'influence de chaque jeton précédent sur la sortie. Cette méthode est simple et efficace, et a fait ses preuves en termes de classification et d'autres paramètres. Plus le score de saillance est élevé, plus l'influence est forte. Cette méthode est utilisée dans le LIT, car elle est bien comprise et largement utilisée par la communauté de recherche sur l'interprétabilité.
Les méthodes de saillance basées sur les gradients plus avancées incluent Grad ⋅ Input et les gradients intégrés. Il existe également des méthodes basées sur l'ablation, telles que LIME et SHAP, qui peuvent être plus robustes, mais beaucoup plus coûteuses à calculer. Pour comparer en détail les différentes méthodes de saillance, consultez cet article.
Pour en savoir plus sur la science des méthodes de saillance, consultez cet explorable interactif d'introduction à la saillance.
3. Importations, environnement et autre code de configuration
Il est préférable de suivre cet atelier de programmation dans le nouveau Colab. Nous vous recommandons d'utiliser un environnement d'exécution d'accélérateur, car vous allez charger un modèle dans la mémoire. Toutefois, sachez que les options d'accélérateur varient au fil du temps et sont soumises à des limites. Colab propose des abonnements payants si vous souhaitez accéder à des accélérateurs plus puissants. Vous pouvez également utiliser un environnement d'exécution local si votre machine dispose d'un GPU approprié.
Remarque: Des avertissements de ce type peuvent s'afficher
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. bigframes 0.21.0 requires scikit-learn>=1.2.2, but you have scikit-learn 1.0.2 which is incompatible. google-colab 1.0.0 requires ipython==7.34.0, but you have ipython 8.14.0 which is incompatible.
Vous pouvez les ignorer.
Installer LIT et Keras NLP
Pour cet atelier de programmation, vous aurez besoin d'une version récente de keras
(3), keras-nlp
(0.14) et lit-nlp
(1.2), ainsi que d'un compte Kaggle pour télécharger le modèle de base.
pip install -q -U 'keras >= 3.0' 'keras-nlp >= 0.14' 'lit-nlp >= 1.2'
Accès à Kaggle
Pour vous authentifier auprès de Kaggle, vous pouvez:
- Stockez vos identifiants dans un fichier, par exemple
~/.kaggle/kaggle.json
. - Utilisez les variables d'environnement
KAGGLE_USERNAME
etKAGGLE_KEY
. - Exécutez ce qui suit dans un environnement Python interactif, tel que Google Colab.
import kagglehub
kagglehub.login()
Pour en savoir plus, consultez la documentation kagglehub
et veillez à accepter le contrat de licence Gemma.
Configurer Keras
Keras 3 est compatible avec plusieurs backends de deep learning, y compris TensorFlow (par défaut), PyTorch et JAX. Le backend est configuré à l'aide de la variable d'environnement KERAS_BACKEND
, qui doit être définie avant d'importer la bibliothèque Keras. L'extrait de code suivant montre comment définir cette variable dans un environnement Python interactif.
import os
os.environ["KERAS_BACKEND"] = "tensorflow" # or "jax" or "torch"
4. Configurer LIT
LIT peut être utilisé dans les notebooks Python ou via un serveur Web. Cet atelier de programmation porte sur le cas d'utilisation des notebooks. Nous vous recommandons de le suivre dans Google Colab.
Dans cet atelier de programmation, vous allez charger Gemma v2 2B IT à l'aide du préréglage KerasNLP. L'extrait de code suivant initialise Gemma et charge un exemple d'ensemble de données dans un widget LIT Notebook.
from lit_nlp.examples.prompt_debugging import notebook as lit_pdbnb
lit_widget = lit_pdbnb.make_notebook_widget(
['sample_prompts'],
["gemma2_2b_it:gemma2_instruct_2b_en"],
)
Vous pouvez configurer le widget en modifiant les valeurs transmises aux deux arguments de position obligatoires:
datasets_config
: liste de chaînes contenant les noms et les chemins d'accès des ensembles de données à partir desquels charger, sous la forme "dataset:path", où le chemin d'accès peut être une URL ou un chemin d'accès de fichier local. L'exemple ci-dessous utilise la valeur spécialesample_prompts
pour charger les exemples d'invites fournis dans la distribution LIT.models_config
: liste de chaînes contenant les noms et les chemins d'accès des modèles à charger, sous la forme "model:path", où le chemin d'accès peut être une URL, un chemin d'accès à un fichier local ou le nom d'un préréglage pour le framework d'apprentissage profond configuré.
Une fois LIT configuré pour utiliser le modèle qui vous intéresse, exécutez l'extrait de code suivant pour afficher le widget dans votre notebook.
lit_widget.render(open_in_new_tab=True)
Utiliser vos propres données
En tant que modèle génératif texte-vers-texte, Gemma reçoit du texte en entrée et génère du texte en sortie. LIT utilise une API orientée pour communiquer la structure des ensembles de données chargés aux modèles. Les LLM dans LIT sont conçus pour fonctionner avec des ensembles de données qui fournissent deux champs:
prompt
: entrée du modèle à partir de laquelle le texte sera généré ;target
: séquence cible facultative, telle qu'une réponse de vérité terrain d'évaluateurs humains ou une réponse prégénérée par un autre modèle.
LIT inclut un petit ensemble de sample_prompts
avec des exemples provenant des sources suivantes, qui sont compatibles avec cet atelier de programmation et le tutoriel de débogage par invite étendu de LIT.
- GSM8K: résolution de problèmes mathématiques de niveau primaire à l'aide d'exemples à faible échantillon.
- Étalonnage Gigaword: génération de titres pour une collection d'articles courts.
- Incitation constitutionnelle: générer de nouvelles idées sur l'utilisation d'objets avec des consignes/des limites.
Vous pouvez également charger facilement vos propres données, soit sous forme de fichier .jsonl
contenant des enregistrements avec les champs prompt
et éventuellement target
(exemple), soit à partir de n'importe quel format à l'aide de l'API Dataset de LIT.
Exécutez la cellule ci-dessous pour charger les exemples d'invites.
5. Analyser les requêtes à quelques images pour Gemma dans LIT
Aujourd'hui, les requêtes sont autant d'un art que d'une science, et LIT peut vous aider à améliorer empiriquement les requêtes pour les grands modèles de langage, comme Gemma. Vous allez voir un exemple d'utilisation de l'analyse de l'impact des technologies pour explorer les comportements de Gemma, anticiper les problèmes potentiels et améliorer sa sécurité.
Identifier les erreurs dans les invites complexes
Deux des techniques d'incitation les plus importantes pour les prototypes et les applications basés sur des LLM de haute qualité sont l'incitation à quelques reprises (qui inclut des exemples du comportement souhaité dans l'invite) et la chaîne de pensée (qui inclut une forme d'explication ou de raisonnement avant la sortie finale du LLM). Mais créer une requête efficace reste souvent difficile.
Prenons l'exemple d'une personne qui vous demande si un plat lui plaira en fonction de ses goûts. Un modèle de requête en chaîne de pensée pour un prototype initial peut se présenter comme suit:
def analyze_menu_item_template(food_likes, food_dislikes, menu_item):
return f"""Analyze a menu item in a restaurant.
## For example:
Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: You have to try it.
Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Baguette maison au levain
Analysis: Home-made leaven bread in france is usually great
Recommendation: Likely good.
Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Macaron in france
Analysis: Sweet with many kinds of flavours
Recommendation: You have to try it.
## Now analyze one more example:
Taste-likes: {food_likes}
Taste-dislikes: {food_dislikes}
Suggestion: {menu_item}
Analysis:"""
Avez-vous repéré les problèmes liés à cette invite ? LIT vous aidera à examiner l'invite avec le module de saillance LM.
6. Utiliser la saillance de séquence pour le débogage
La saillance est calculée au niveau le plus bas possible (c'est-à-dire pour chaque jeton d'entrée), mais LIT peut agréger la saillance des jetons dans des étendues plus grandes et plus interprétables, telles que des lignes, des phrases ou des mots. Découvrez ce qu'est la saillance et comment l'utiliser pour identifier les biais involontaires dans notre explorateur de saillance.
Commençons par fournir à la requête un nouvel exemple d'entrée pour les variables de modèle de requête:
food_likes = """Cheese"""
food_dislikes = """Can't eat eggs"""
menu_item = """Quiche Lorraine"""
prompt = analyze_menu_item_template(food_likes, food_dislikes, menu_item)
print(prompt)
fewshot_mistake_example = {'prompt': prompt} # you'll use this below
Analyze a menu item in a restaurant. ## For example: Taste-likes: I've a sweet-tooth Taste-dislikes: Don't like onions or garlic Suggestion: Onion soup Analysis: it has cooked onions in it, which you don't like. Recommendation: You have to try it. Taste-likes: I've a sweet-tooth Taste-dislikes: Don't like onions or garlic Suggestion: Baguette maison au levain Analysis: Home-made leaven bread in france is usually great Recommendation: Likely good. Taste-likes: I've a sweet-tooth Taste-dislikes: Don't like onions or garlic Suggestion: Macaron in france Analysis: Sweet with many kinds of flavours Recommendation: You have to try it. ## Now analyze one more example: Taste-likes: Cheese Taste-dislikes: Can't eat eggs Suggestion: Quiche Lorraine Analysis:
Si vous avez ouvert l'interface utilisateur de LIT dans la cellule ci-dessus ou dans un onglet distinct, vous pouvez utiliser l'éditeur de points de données de LIT pour ajouter cette invite:
Vous pouvez également regénérer le widget directement avec la requête de votre choix:
lit_widget.render(data=[fewshot_mistake_example])
Notez la fin surprenante du modèle:
Taste-likes: Cheese Taste-dislikes: Can't eat eggs Suggestion: Quiche Lorraine Analysis: A savoury tart with cheese and eggs Recommendation: You might not like it, but it's worth trying.
Pourquoi le modèle vous suggère-t-il de manger quelque chose que vous avez clairement indiqué ne pas pouvoir manger ?
La saillance de séquence peut aider à mettre en évidence le problème sous-jacent, qui se trouve dans nos exemples à quelques images. Dans le premier exemple, la chaîne de pensée de la section d'analyse it has cooked onions in it, which you don't like
ne correspond pas à la recommandation finale You have to try it
.
Dans le module "Salience du LM", sélectionnez "Sentences", puis la ligne de recommandation. L'interface utilisateur devrait maintenant se présenter comme suit:
Cela met en évidence une erreur humaine: un copier-coller accidentel de la partie "Recommandation" et un manque de mise à jour !
Corrigez maintenant la valeur "Recommandation" du premier exemple en Avoid
, puis réessayez. LIT a préchargé cet exemple dans les exemples d'invites. Vous pouvez donc utiliser cette petite fonction utilitaire pour l'obtenir:
def get_fewshot_example(source: str) -> str:
for example in datasets['sample_prompts'].examples:
if example['source'] == source:
return example['prompt']
raise ValueError(f'Source "{source}" not found in the dataset.')
lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-fixed')}])
La complétion du modèle devient alors:
Taste-likes: Cheese Taste-dislikes: Can't eat eggs Suggestion: Quiche Lorraine Analysis: This dish contains eggs and cheese, which you don't like. Recommendation: Avoid.
La leçon importante à retenir est la suivante: le prototypage précoce permet de révéler des risques auxquels vous n'auriez peut-être pas pensé à l'avance. De plus, la nature sujette aux erreurs des modèles de langage signifie qu'il faut concevoir de manière proactive pour les erreurs. Pour en savoir plus, consultez notre guide People + AI sur la conception avec l'IA.
Bien que la requête corrigée pour quelques prises de vue soit meilleure, elle n'est toujours pas tout à fait correcte: elle indique correctement à l'utilisateur d'éviter les œufs, mais le raisonnement n'est pas correct. Elle indique qu'il n'aime pas les œufs, alors qu'en réalité, l'utilisateur a indiqué qu'il ne pouvait pas en manger. Dans la section suivante, vous découvrirez comment améliorer votre score.
7. Tester des hypothèses pour améliorer le comportement du modèle
LIT vous permet de tester les modifications apportées aux requêtes dans la même interface. Dans cet exemple, vous allez tester l'ajout d'une constitution pour améliorer le comportement du modèle. Les constitutions font référence à des invites de conception avec des principes pour guider la génération du modèle. Des méthodes récentes permettent même de déduire de manière interactive des principes constitutionnels.
Utilisons cette idée pour améliorer davantage l'invite. Ajoutez une section contenant les principes de génération en haut de notre requête, qui commence maintenant comme suit:
Analyze a menu item in a restaurant. * The analysis should be brief and to the point. * The analysis and recommendation should both be clear about the suitability for someone with a specified dietary restriction. ## For example: Taste-likes: I've a sweet-tooth Taste-dislikes: Don't like onions or garlic Suggestion: Onion soup Analysis: it has cooked onions in it, which you don't like. Recommendation: Avoid. ...
lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-constitution')}])
Avec cette mise à jour, l'exemple peut être réexécuté et vous pouvez observer un résultat très différent:
Taste-likes: Cheese Taste-dislikes: Can't eat eggs Suggestion: Quiche Lorraine Analysis: This dish contains eggs, which you can't eat. Recommendation: Not suitable for you.
Vous pouvez ensuite réexaminer la saillance de la requête pour comprendre pourquoi ce changement se produit:
Notez que la recommandation est beaucoup plus sûre. De plus, l'option "Non adapté" est influencée par le principe d'indiquer clairement l'adéquation en fonction de la restriction alimentaire, ainsi que par l'analyse (la soi-disant chaîne de pensée). Cela vous permet d'être plus sûr que le résultat est généré pour la bonne raison.
8. Inclure des équipes non techniques dans l'exploration et le sondage des modèles
L'interprétabilité doit être un effort d'équipe, impliquant des compétences dans le domaine de l'IA explicable, des règles, du droit, etc.
Interagir avec des modèles en phase de développement précoce nécessitait traditionnellement une expertise technique importante, ce qui rendait l'accès et l'exploration plus difficiles pour certains collaborateurs. Historiquement, il n'existait pas d'outils permettant à ces équipes de participer aux premières phases de prototypage.
L'objectif est de changer ce paradigme grâce à la LIT. Comme vous l'avez vu dans cet atelier de programmation, le support visuel et la capacité interactive de la carte de saillance à examiner la saillance et à explorer des exemples peuvent aider différents partenaires à partager et à communiquer les résultats. Vous pouvez ainsi faire appel à une plus grande diversité de coéquipiers pour explorer, interroger et déboguer le modèle. Les exposer à ces méthodes techniques peut améliorer leur compréhension du fonctionnement des modèles. De plus, un ensemble d'expertises plus diversifié lors des tests de modèle précoces peut également aider à identifier les résultats indésirables qui peuvent être améliorés.
9. Récapitulatif
En résumé :
- L'UI LIT fournit une interface pour l'exécution interactive de modèles, ce qui permet aux utilisateurs de générer directement des sorties et de tester des scénarios "et si". Cela est particulièrement utile pour tester différentes variantes de requêtes.
- Le module de saillance LM fournit une représentation visuelle de la saillance et une granularité de données contrôlable afin que vous puissiez communiquer sur des constructions centrées sur l'humain (par exemple, des phrases et des mots) plutôt que sur des constructions centrées sur le modèle (par exemple, des jetons).
Lorsque vous trouvez des exemples problématiques dans vos évaluations de modèle, importez-les dans LIT pour les déboguer. Commencez par analyser la plus grande unité de contenu pertinente que vous puissiez imaginer, qui est liée de manière logique à la tâche de modélisation. Utilisez les visualisations pour voir où le modèle répond correctement ou non au contenu de l'invite, puis explorez des unités de contenu plus petites pour décrire plus en détail le comportement incorrect que vous observez afin d'identifier les solutions possibles.
Enfin, Lit s'améliore constamment. Pour en savoir plus sur nos fonctionnalités et partager vos suggestions, cliquez ici.