nouvelles

Le modèle OpenAI Strawberry a encore été retardé. Qu'est-ce que le banc SWE Verified publié tôt le matin ?

2024-08-14

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Rapport sur le cœur de la machine

Editeur : Zhang Qian, Xiaozhou

Quelqu'un a dit : « Nous attendions des fraises, mais ils ont sorti du chou frisé. » Voyons à quoi sert ce « chou frisé ».

Les capacités de programmation des grands modèles ont toujours attiré beaucoup d'attention, et l'émergence du programmeur d'IA super puissant Devin a mis au premier plan le sujet « L'IA peut-elle remplacer les programmeurs ». Récemment, Devin a également introduit un nouvel adversaire : un programmeur d'IA indépendant lancé par la start-up Cosine.Génie. La société a déclaré que Genie a facilement surperformé Devin, obtenant un score de 30 % sur le banc de référence tiers SWE, tandis que Devin n'a obtenu qu'un score de 13,8 %.

Ce SWE-Bench est un ensemble de données de référence utilisé pour évaluer la capacité de LLM à résoudre de vrais problèmes logiciels sur GitHub. Il collecte 2 294 paires de requêtes Issue-Pull à partir de 12 référentiels Python populaires. Pendant les tests, LLM obtiendra une base de code et une description du problème, puis générera un correctif pour résoudre le problème décrit dans le problème. Cet ensemble de données a été largement utilisé dans l’évaluation des capacités de programmation de l’IA.

À mesure que les capacités de programmation de l’IA évoluent, cette référence évolue également. Tôt ce matin, le modèle OpenAI « Strawberry » signalé en ligne a de nouveau été retardé, mais OpenAI a publié quelque chose de nouveau, qui est une version améliorée de SWE-Bench - SWE-bench Verified.

OpenAI a souligné que le banc SWE d'origine présentait certains problèmes qui pourraient avoir conduit à sous-estimer les capacités autonomes d'ingénierie logicielle du modèle. Par conséquent, au cours du processus d'amélioration, ils ont collaboré avec les auteurs originaux de SWE-Bench pour effectuer une sélection et une amélioration manuelles afin de garantir que la portée des tests unitaires était appropriée et que la description du problème était claire.

Lors de nouveaux tests menés sur SWE-bench Verified, de nombreux agents de programmation d'IA ont obtenu des résultats plus élevés qu'auparavant. Parmi eux, la solution Agentless de l'UIUC a même doublé le score. OpenAI estime que cela prouve que le benchmark précédent a effectivement le défaut de sous-estimer les capacités de programmation de l'IA.

Mais pour les internautes du monde entier qui regardent "Strawberry", cette version est encore trop superficielle. Quelqu'un a dit : « Nous attendions des fraises, mais ils ont sorti du chou frisé. »



Connaissance de base sur le banc SWE

Chaque exemple de l'ensemble de tests du banc SWE a été créé à partir d'un problème GitHub résolu dans 12 référentiels de code Python open source sur GitHub. Chaque exemple est associé à une pull request (PR) qui inclut le code de la solution et des tests unitaires pour vérifier l'exactitude du code. Ces tests unitaires sont appelés tests FAIL_TO_PASS car ils échouent avant que le code de solution dans le PR ne soit ajouté et réussissent après son ajout. Chaque exemple comprend également des tests PASS_TO_PASS qui réussissent avant et après la fusion du PR pour vérifier si le PR rompt d'autres fonctionnalités de la base de code qui ne sont pas liées au problème.

Dans SWE-bench, l'agent IA obtient le texte original du problème GitHub, qui est l'énoncé du problème, et a accès à la base de code. Compte tenu de ces informations, l'agent doit modifier les fichiers dans la base de code pour résoudre le problème.

Les modifications apportées par l'agent IA seront évaluées en exécutant les tests FAIL_TO_PASS et PASS_TO_PASS. Si le test FAIL_TO_PASS réussit, cela signifie que l'éditeur a résolu le problème. Si le test PASS_TO_PASS réussit, cela signifie que la modification n'a pas cassé les parties superflues de la base de code. Pour résoudre complètement le problème GitHub d'origine, les deux séries de tests doivent réussir.

Trois axes d'amélioration pour améliorer la robustesse et la fiabilité du banc SWE

Afin d'améliorer la robustesse et la fiabilité du banc SWE. L'équipe de développement a identifié trois axes d'amélioration principaux :

  • Les tests unitaires utilisés pour évaluer l’exactitude d’une solution sont souvent trop spécifiques et parfois même sans rapport avec le problème. Cela peut entraîner le rejet de la bonne solution.
  • Les descriptions des problèmes pour de nombreux échantillons n'étaient pas assez claires, ce qui entraînait une ambiguïté quant à la nature du problème et à la manière de le résoudre.
  • Il est parfois difficile de configurer de manière fiable un environnement de développement SWE-bench pour l'agent, ce qui peut par inadvertance provoquer l'échec des tests unitaires, quelle que soit la solution. Dans ce cas, une solution parfaitement valable peut être considérée comme incorrecte.

Banc SWE Vérifié

Pour résoudre ces problèmes, OpenAI a lancé une campagne d'annotation manuelle par des développeurs de logiciels professionnels, examinant chaque échantillon de l'ensemble de tests du banc SWE pour garantir que les tests unitaires étaient correctement étendus et que les descriptions des problèmes étaient claires et sans ambiguïté.

En collaboration avec les auteurs de SWE-bench, ils ont publié SWE-bench Verified : un sous-ensemble de l'ensemble de tests original de SWE-bench, contenant 500 échantillons qui ont été vérifiés par des annotateurs humains. Cette version remplace les ensembles de tests originaux SWE-bench et SWE-bench Lite. De plus, ils publient des annotations humaines pour tous les échantillons de test du banc SWE.

Ils ont également collaboré avec les auteurs de SWE-bench pour développer un nouvel outil d'évaluation pour SWE-bench qui utilise un environnement Docker conteneurisé pour rendre l'évaluation sur SWE-bench plus facile et plus fiable.

  • Adresse de l'outil : https://github.com/princeton-nlp/SWE-bench/tree/main/docs/20240627_docker

Méthode d'amélioration

OpenAI a travaillé avec 93 développeurs de logiciels ayant une expérience Python pour filtrer manuellement les échantillons du banc SWE et annoter 1 699 échantillons aléatoires dans l'ensemble de tests du banc SWE, et a finalement obtenu la vérification du banc SWE.

Leur approche consiste à annoter les échantillons dans l’ensemble de tests du banc SWE pour garantir l’équité et l’exactitude du test. Plus précisément, ils se concentrent sur deux points clés : premièrement, évaluer si la description du problème est suffisamment détaillée pour éviter qu'une description trop vague ne provoque des tests injustes ; deuxièmement, vérifier si le test unitaire FAIL_TO_PASS filtrera de manière incorrecte les solutions valides.

Chaque critère d'annotation a une étiquette dans la plage [0, 1, 2, 3] avec une gravité croissante. Les étiquettes 0 et 1 sont mineures ; les étiquettes 2 et 3 sont graves, indiquant que l'échantillon est inadéquat d'une manière ou d'une autre et doit être jeté.

De plus, OpenAI évalue la difficulté de chaque échantillon en demandant aux annotateurs d'estimer combien de temps il faudrait aux développeurs pour décider et mettre en œuvre une solution, en supposant que l'échantillon ne pose aucun problème. Enfin, OpenAI fournit une option de saisie sous forme libre pour signaler tout autre problème majeur lié à l'échantillon.

Pour créer SWE-bench Verified, OpenAI filtre tous les échantillons de l'ensemble de tests d'origine avec une déclaration de problème ou une gravité de test unitaire FAIL_TO_PASS de 2 ou supérieure, et filtre également tous les échantillons marqués d'autres problèmes graves.

Annoter les résultats

Selon les nouvelles normes, une grande partie des échantillons du banc SWE d'origine ne sont pas qualifiés. Comme le montre la figure, 38,3 % des échantillons ont été signalés parce que l'énoncé du problème n'était pas assez clair, et 61,1 % ont été signalés parce que les tests unitaires pouvaient injustement signaler à tort les solutions valides comme étant incorrectes (gravité 2, 3 : les deux niveaux s'additionnent) . Dans l'ensemble, leur processus d'annotation a entraîné le filtrage de 68,3 % des échantillons du banc SWE en raison d'énoncés de problèmes peu clairs, de tests unitaires injustes ou d'autres problèmes.







La figure ci-dessous compare la répartition des difficultés de l'ensemble de données SWE-bench d'origine et du nouvel ensemble de données SWE-bench Verified. Ils estiment la distribution des difficultés du banc SWE sur la base d’un sous-ensemble aléatoire de 1 699 échantillons.

Comme le montre la figure, dans l'ensemble de données original du banc SWE, le temps de réalisation estimé de la plupart (77,8 %) des échantillons est inférieur à une heure de travail pour un ingénieur logiciel expérimenté. SWE-bench Lite et le nouvel ensemble de données SWE-bench Verified augmentent encore cette proportion, avec moins de 10 % des problèmes qui devraient prendre plus d'une heure à résoudre. Cependant, les mécanismes à l'origine de ce changement sont assez différents : SWE-bench Lite est un sous-échantillonnage de l'ensemble de données d'origine pour faciliter l'analyse comparative, tandis que SWE-bench Verified tente de supprimer les fonctionnalités irréalisables de l'échantillon de l'ensemble de données.



Performance de chaque agent sur SWE-bench Vérifié

Sur le nouvel ensemble de données SWE-bench Verified, l'équipe de développement a testé les performances de GPT-4o à l'aide de plusieurs échafaudages open source qui ont bien fonctionné sur le classement original du SWE-bench.

Il a été constaté que les performances de GPT-4o sur l'échafaudage le plus performant atteignaient 33,2 % sur le banc SWE vérifié, soit plus du double du score de 16 % sur le banc SWE d'origine. Dans l’ensemble, cela confirme les soupçons initiaux d’OpenAI selon lesquels le banc SWE d’origine avait sous-estimé les capacités de l’agent.

Il convient de noter que le passage de SWE-bench Lite à SWE-bench Verified n'est pas si évident, car après filtrage, SWE-bench Lite est déjà plus facile que l'ensemble de données complet.



Analyse des performances stratifiée par difficulté

L'amélioration des performances lors de l'évaluation sur SWE-bench Verified peut être en partie due au fait que la répartition des échantillons de test est biaisée vers des échantillons plus simples.

OpenAI a étudié cela en traçant les performances stratifiées par difficulté. Si le nouvel ensemble de données modifie simplement la distribution des difficultés pour inclure des échantillons plus faciles, les performances stratifiées au sein de chaque catégorie ne changent pas, comme c'est le cas du banc SWE d'origine au banc SWE Lite.

En revanche, OpenAI a observé que les performances de l'agent se sont améliorées dans toutes les catégories de difficulté lors du passage à SWE-bench Verified, ce qui est cohérent avec l'effet attendu de la suppression des échantillons impossibles de toutes les catégories plutôt que de simplement déplacer Supprimer les échantillons difficiles.



Lien de référence : https://openai.com/index/introducing-swe-bench-verified/