import streamlit as st st.set_page_config(layout="wide") from streamlit_extras.switch_page_button import switch_page st.markdown(r""" ## Dépanner les problèmes mathématiques """) st.markdown(""" """) st.markdown(""" """) st.markdown("""### Utilisation de $\LaTeX$ pour évaluer sur le jeu d'évaluation MATH""") st.markdown(""" """) st.markdown(""" Parser le $\LaTeX$ est difficile. C'est un problème pour évaluer un modèle qui en attend en sortie. C'est le cas du [jeu d'évaluation MATH](https://huggingface.co/datasets/lighteval/MATH) qui l'utilise pour représenter des calculs et des symboles mathématiques. L'évaluation de cette tâche consiste à analyser les références et les résultats du modèle. Il s'avère qu'il n'y a pas de bonne façon d'analyser le $\LaTeX$ : """, unsafe_allow_html=True) st.markdown(""" """) st.image("./assets/sympy_doc.png", caption="Tiré de la documentation de la bibliothèque SymPy", use_container_width=True) st.markdown(""" """) st.markdown(r""" La librairie [lm-evaluation-harness](https://github.com/EleutherAI/lm-evaluation-harness) utilise [SymPy](https://github.com/sympy/sympy) (une bibliothèque Python pour les mathématiques symboliques) pour analyser le $\LaTeX$ et comparer les expressions. Lorsque l'on utilise SymPy pour essayer d'analyser les références (contre elles-mêmes), nous n'obtenons qu'une *accuracy* d'environ 0,94. Comment cela est-il possible ? Il s'avère que SymPy ne peut pas analyser certaines expressions (correctes en $\LaTeX$). Par exemple : ``` couldn't parse one of [0,1) or [0,1), I expected one of these: ']' [0,1) ~~^ ``` ``` couldn't parse one of (-\iny,-5]\cup[5,\iny) or (-\iny,-5]\cup[5,\iny), I expected something else here (-\iny,-5]\cup[5,\iny) ~~~~~~^ ``` ``` couldn't parse one of -\frac{1}{{}2x} or -\frac{1}{{}2x}, I don't understand this -\frac{1}{{}2x} ~~~~~~~~~~~^ ``` """, unsafe_allow_html=True) st.markdown(""" """) st.markdown(""" """) st.markdown(""" """) st.markdown(r""" ##### Comment contourner ce problème ? Vous pouvez soit réécrire la [grammaire](https://github.com/sympy/sympy/blob/master/sympy/parsing/latex/lark/grammar/latex.lark) de $\LaTeX$ en ajoutant les fonctionnalités nécessaires au code, soit ajouter des vérifications manuelles à votre code pour améliorer les scores des modèles. Nous avons opté pour cette seconde option chez Hugging Face. """, unsafe_allow_html=True) st.markdown(""" """) st.image("./assets/lm_eval_diff.png", caption="Correction appliquée au code de LM Evaluation Harness") st.markdown(""" """) st.markdown(""" """) st.markdown(""" """) st.markdown(r""" ##### Résultats Le tableau suivant compare les anciens et les nouveaux résultats des 25 premiers modèles sur le jeu d'évaluation :
Comparaison du parseur original et corrigé sur le jeu d'évaluation MATH
Modèle Score Rang
Parseur original Parseur corrigé Parseur original Parseur corrigé
rombodawg/Rombos-LLM-V2.5-Qwen-72b 47,58 50,68 1 1
MaziyarPanahi/calme-2.2-qwen2-72b 41,16 43,43 2 2
arcee-ai/Arcee-Nova 40,48 42,90 3 3
fblgit/TheBeagle-v2beta-32B-MGS 39,43 42,52 4 4
rombodawg/Rombos-LLM-V2.5-Qwen-32b 39,12 41,99 5 5
dnhkng/RYS-XLarge 38,97 41,24 6 6
dfurman/CalmeRys-78B-Orpo-v0.1 37,92 40,71 8 7
MaziyarPanahi/calme-2.2-rys-78b 37,92 39,95 8 9
MaziyarPanahi/calme-2.4-rys-78b 37,69 40,41 9 8
MaziyarPanahi/calme-2.3-rys-78b 36,56 38,97 10 10
MaziyarPanahi/calme-2.1-rys-78b 36,40 38,90 11 11
Qwen/Qwen2.5-72B 36,10 38,67 12 12
MaziyarPanahi/calme-2.1-qwen2-72b 36,03 38,07 13 15
Qwen/Qwen2-Math-72B-Instruct 35,95 38,14 14 14
dfurman/Qwen2-72B-Orpo-v0.1 35,42 38,14 15 13
abacusai/Smaug-Qwen2-72B-Instruct 35,35 37,46 16 19
anthracite-org/magnum-v1-72b 35,27 37,69 18 16
alpindale/magnum-72b-v1 35,27 37,69 18 16
Qwen/Qwen2-72B-Instruct 35,12 37,69 19 18
dnhkng/RYS-XLarge-base 34,67 37,16 20 20
Undi95/MG-FinalMix-72B 33,61 36,10 22 21
abacusai/Dracarys-72B-Instruct 33,61 35,65 22 22
Qwen/Qwen2.5-32B 32,85 35,50 23 23
anthracite-org/magnum-v2-72b 31,65 34,06 24 24
dnhkng/RYS-Huge-bnb-4bit 31,57 33,84 25 25
""", unsafe_allow_html=True) st.markdown(""" """) st.markdown(""" """) st.markdown(""" """) st.markdown("""### Correction du *leaderboard Open LLM* avec Math-Verify""") st.markdown(""" """) st.success("""Pendant de la traduction du guide, Hugging Face a publié un [article de blog](https://huggingface.co/blog/math_verify_leaderboard) sur l'utilisation de sa bibliothèque [Math-Verify](https://github.com/huggingface/Math-Verify) pour améliorer l'évaluation des capacités mathématiques des modèles de l'[*Open LLM Leaderboard*](https://huggingface.co/spaces/open-llm-leaderboard/open_llm_leaderboard). Nous avons décidé d'ajouter ci-dessous un résumé de cet article de blog qui n'est pas présent dans le guide de Clémentine.""") st.markdown(""" """) st.markdown("""##### Pourquoi l'évaluation des mathématiques dans l'*Open LLM Leaderboard* était défaillante ? Une des taches d’évaluation de l’[*Open LLM Leaderboard*](https://huggingface.co/spaces/open-llm-leaderboard/open_llm_leaderboard), appelée MATH-Hard, porte spécifiquement sur les problèmes de mathématiques : elle évalue la capacité des LLM à résoudre des problèmes de mathématiques de niveau secondaire et universitaire, soit 1 324 problèmes répartis sur 7 sujets (pré-calcul, pré-algébre, algèbre, algèbre intermédiaire, comptage/probabilité et théorie des nombres), en utilisant une approche 5-*shot* (le modèle reçoit 5 exemples dans l'instruction pour montrer comment il devrait répondre). Une question typique se présente comme suit : ``` For all real numbers $r$ and $s$, define the mathematical operation $\#$ such that the following conditions apply: $r\ \#\ 0 = r, r\ \#\ s = s\ \#\ r$, and $(r + 1)\ \#\ s = (r\ \#\ s) + s + 1$. What is the value of $11\ \#\ 5$? # En français Pour tous les nombres réels $r$ et $s$, on définit l'opération mathématique $\#$ telle que les conditions suivantes s'appliquent : $r\ \#\ 0 = r, r\ \#\ s = s\ \#\ r$, and $(r + 1)\ \#\ s = (r\ \#\ s) + s + 1$. Quelle est la valeur de $11 \#5$ ? ``` et la réponse attendue est ``` 71 ``` Dans le classement, les modèles doivent terminer leurs réponses par une chaîne de caractères très spécifique (suivant [Minerva-Math](https://arxiv.org/abs/2206.14858)) : ``` “Final answer is [ANSWER]. I hope it is correct.”. # “La réponse finale est [ANSWER]. J'espère qu'elle est correcte.”. ``` Le classement essayait alors d'analyser `[ANSWER]` avec [SymPy](https://docs.sympy.org/latest/index.html) pour le convertir en une représentation symbolique (et simplifier les valeurs si nécessaire), avant de le comparer à la réponse attendue. Toutefois, les utilisateurs ont signalé un certain nombre de problèmes. Tout d'abord, un problème récurrent était l'incapacité de certains modèles à suivre le format de réponse attendu des exemples : ils produisaient d'autres phrases à la place pour introduire leurs réponses. Comme le format n'était pas respecté, les réponses étaient marquées comme fausses même si elles étaient en fait correctes ! | 📄 Exemple | ❗️ Problème | ✅ Math-Verify | 🛑 Ancien Leaderboard | | --- | --- | --- | --- | | Par conséquent, le périmètre de l'un de ces triangles est de $14 + 7\sqrt{2}$ pouces, exprimé sous la forme la plus simple | Échec de l'extraction | `7*sqrt(2) + 14` | None | | Par conséquent, la somme de la série géométrique infinie est frac{7}{9}. | Échec de l'extraction | `7/9` | None | | \( p(n) \) et \( p(n+1) \) partagent un facteur commun supérieur à 1 qui est boxed{41}. | Échec de l'extraction | `4` | None | L'étape suivante, la conversion de `[ANSWER]` en représentation symbolique, a également posé quelques problèmes, cette fois liés à SymPy : | 📄 Exemple | ❗️ Problème | ✅ Math-Verify | 🛑 Ancien Leaderboard | | --- | --- | --- | --- | | La réponse finale est $2x + 4y + z - 19 = 0$. J'espère que c'est correct. | Analyse partielle de l'équation paramétrique | Eq(2*x + 4*y + z - 19, 0) | 0 | | \(23\) | Échec de l'extraction en raison des balises LaTeX | `23` | None | | \((- \infty, -14) \cup (-3, \infty)\). | Échec de l'extraction en raison de l'intervalle | Union(Interval.open(-oo, -14), Interval.open(-3, oo)) | None | Lors de la dernière étape, la comparaison de la réponse extraite avec la réponse attendue posé un certain nombre de problèmes : | 📄 Exemple | ❗️ Problème | ✅ Math-Verify | 🛑 Ancien Leaderboard | | --- | --- | --- | --- | | 1/3 == 0.333333 | Pas de support pour les arrondis | OK | KO | | sqrt(1/2)*7 == sqrt(0.5)*7 | Pas de support d'évaluation numérique | OK | KO | | k = 1 == 1 | Pas de prise en charge de l'affectation de variables | OK | KO | **Tous ces problèmes sont maintenant complètement résolus avec le nouveau parseur de Math-Verify !** """, unsafe_allow_html=True) st.markdown(""" """) st.markdown("""##### Une redistribution complète des modèles grâce à des évaluations plus équitables Ces corrections ont complètement remanié les 20 premiers modèles du sous-ensemble MATH du classement. En moyenne, les modèles ont résolu **61 problèmes** de plus, ce qui équivaut à une augmentation de **4,66 points** ! """, unsafe_allow_html=True) st.image('./assets/score-change.png') st.markdown(""" """) st.markdown(""" Les deux sous-ensembles qui ont montré l'amélioration la plus significative étaient tous deux liés à l'algèbre (algèbre et pré-algèbre) avec des gains de **8,27** et **6,93**, respectivement. Dans les cas extrêmes, certains modèles ont montré des améliorations de près de **90** points sur ces sous-ensembles. Nous pensons que ces sous-ensembles ont connu la plus grande amélioration parce qu'ils impliquent fréquemment des réponses présentées sous forme d'ensembles (en raison des questions à solutions multiples) et de matrices. Math-Verify a amélioré sa gestion des deux types de réponses, ce qui a contribué à ces gains notables. """, unsafe_allow_html=True) st.image('./assets/subset-change.png') st.markdown(""" """) st.markdown(""" Concernant le classement, **AceMath de Nvidia** domine désormais MATH-Hard (février 2025). Un autre grand bénéficiaire de ce changement sont les dérivés de **Qwen**, qui sont maintenant presque exclusivement les seuls modèles classés juste en dessous d'AceMath. Voici le tableau complet comparant l'ancien et le nouveau classement du Top 20 : """, unsafe_allow_html=True) st.image('./assets/math-hard-change.png') st.markdown(""" """) st.markdown(""" """) st.markdown("""##### En résumé Les développeurs et les chercheurs sont encouragés à adopter Math-Verify pour leurs propres évaluations mathématiques. Ce faisant, vous pouvez vous assurer que vos modèles sont évalués avec des résultats plus fiables. Par ailleurs, nous vous invitons à consulter les classements mis à jour et à constater l'évolution des performances de vos modèles préférés. """) 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("V.2._Dépanner la reproductibilité") 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("Notebook")