Guide_Evaluation_LLM / pages /16_IV.3._Concevoir_votre_prompt_d'évaluation.py
bourdoiscatie's picture
Upload 44 files
1162aae verified
import streamlit as st
st.set_page_config(layout="wide")
from streamlit_extras.switch_page_button import switch_page
st.markdown("""
## Concevoir votre *prompt* d'évaluation
""", unsafe_allow_html=True)
st.markdown(""" """)
st.markdown("""
### Conseils généraux pour la conception des *prompts*
Voici quelques indications que j'ai trouvées en ligne concernant la conception du *prompt* lui-même :
- Fournir une description claire de la tâche à accomplir :
- « Ta tâche est de faire X ».
- « On te donnera Y ».
- Fournir des instructions claires sur les critères d'évaluation, y compris un système de notation détaillé si nécessaire :
- « Tu dois évaluer la propriété Z sur une échelle de 1 à 5, où 1 signifie ... ».
- « Tu dois évaluer si la propriété Z est présente dans l'échantillon Y. La propriété Z est présente si ... ».
- Fournir quelques étapes supplémentaires d'évaluation du « raisonnement » :
- « Pour juger cette tâche, tu dois d'abord t'assurer de lire attentivement l'échantillon Y pour identifier ..., puis ... ».
- Spécifier le format de sortie souhaité (l'ajout de champs facilitera la cohérence)
- « Ta réponse doit être fournie en JSON, avec le format suivant {"Score" : Ton score, "Reasoning" : Le raisonnement qui t'a conduit à ce score} ».
""", unsafe_allow_html=True)
st.success("""Nous avons traduit les *prompts* en utilisant le tutoiement. Il n'est pas dit que ce soit la meilleure option pour requêter le modèle. Le vouvoiement ou l'impératif pourraient être des options plus efficaces. Nous n'avons pas trouvé de publication sur ce sujet permettant de trancher. Nous vous conseillons alors de tester les trois approches.""")
st.markdown("""
Vous pouvez et devriez vous inspirer des exemples de *prompts* de [MixEval](https://github.com/huggingface/lighteval/blob/main/src/lighteval/tasks/extended/mix_eval/judge_prompts.pyy) ou [MTBench](https://github.com/huggingface/lighteval/blob/main/src/lighteval/tasks/extended/mt_bench/judge_prompt_templates.py).
Autres remarques :
- La comparaison par paire [est mieux corrélée avec les préférences humaines](https://arxiv.org/abs/2403.16950) que la notation, et est généralement plus robuste.
- Si vous voulez vraiment un score, utilisez une échelle de nombres entiers et assurez-vous de fournir une explication détaillée de ce que [chaque score représente](https://x.com/seungonekim/status/1749289437165769177), ou un *prompt* additif (« attribuer 1 point à cette caractéristique de la réponse, 1 point supplémentaire si ...», etc.).
- L'utilisation d'un *prompt* par capacité à noter tend à donner des résultats meilleurs et plus robustes.
""", unsafe_allow_html=True)
st.markdown(""" """)
st.markdown(""" """)
st.markdown(""" """)
st.markdown("""
### Améliorer la précision du jugement
Vous pouvez également améliorer la précision en utilisant les techniques suivantes, peut-être plus coûteuses :
- **Donner quelques exemples**<br>Comme dans beaucoup d'autres tâches, si vous donnez des exemples, cela peut aider le processus de raisonnement. Cependant, cela augmente la longueur de votre contexte.
- **Référence**<br>Vous pouvez aussi ajouter une référence à votre *prompt*.
- **CoT (*Chains of Thought*)**<br>Processus qui [améliore la précision](https://arxiv.org/abs/2212.08073) si vous demandez au modèle de produire sa chaîne de pensée **avant** le score (aussi observé [ici](https://x.com/seungonekim/status/1749289437165769177)).
- **Analyse multi-tours**<br>Peut améliorer [la détection des erreurs factuelles](https://arxiv.org/abs/2305.13281).
- **Utiliser un jury**<br>Plusieurs juges fournissant une réponse agrégée [donne de meilleurs résultats](https://arxiv.org/abs/2404.18796) que l'utilisation d'un seul modèle.
- Il est possible de réduire considérablement les coûts en utilisant plusieurs petits modèles au lieu d'un seul grand modèle coûteux.
- Vous pouvez également expérimenter l'utilisation d'un unique modèle mais avec des variations de température.
- **Enjeux**<br>De manière surprenante, il a été constaté que l'ajout d'enjeux au *prompt* (« Si tu réponds correctement, tu obtiendras un chaton ») peut améliorer l'exactitude des réponses. Cette méthode peut varier, il faut l'adapter à vos besoins.
""", unsafe_allow_html=True)
st.info("""En fonction des enjeux de votre cas d'usage, pour éliminer autant de biais que possible, vous devriez vous pencher sur les travaux réalisés en sociologie sur la manière de concevoir de bonnes enquêtes. Si vous considérez votre évaluateur comme un remplaçant à un annotateur humain, vous devez alors vous pencher sur des mesures similaires : calcul de l'accord entre les annotateurs, utilisation d'une méthodologie de conception d'enquête correcte pour atténuer les biais, etc.""")
st.markdown("""
Cependant, la plupart des gens ne souhaitent pas vraiment une évaluation impartiale reproductible et de grande qualité, et se contenteront d'une évaluation rapide et sale à l'aide de *prompts* acceptables. Cela peut être ok, cela dépend des conséquences qui en découlent.
""", unsafe_allow_html=True)
st.markdown(""" """)
st.markdown(""" """)
st.markdown(""" """)
col1, col2, col3= st.columns(3)
with col1:
if st.button('Section précédente', use_container_width=True):
switch_page("IV.2._Définir_son_juge")
with col2:
if st.button("Accueil", use_container_width=True):
switch_page("Home")
with col3:
if st.button("Section suivante", use_container_width=True):
switch_page("IV.4._Évaluer votre évaluateur")