Nachricht

Das OpenAI-Erdbeermodell hat sich erneut verzögert. Was ist die am frühen Morgen veröffentlichte SWE-Bench?

2024-08-14

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

Maschinenherzbericht

Herausgeber: Zhang Qian, Xiaozhou

Jemand sagte: „Wir hatten Erdbeeren erwartet, aber sie haben Grünkohl herausgebracht.“ Mal sehen, wofür dieser „Grünkohl“ verwendet wird.

Die Programmierfähigkeiten großer Modelle haben schon immer große Aufmerksamkeit erregt, und das Aufkommen des übermächtigen KI-Programmierers Devin hat das Thema „Kann KI Programmierer ersetzen?“ in den Vordergrund gerückt. Kürzlich hat Devin auch einen neuen Gegner ins Spiel gebracht – einen unabhängigen KI-Programmierer, der vom Start-up-Unternehmen Cosine gegründet wurdeGenie. Das Unternehmen gab an, dass Genie Devin deutlich übertraf und im SWE-Benchmark eines Drittanbieters 30 % erreichte, während Devin nur 13,8 % erreichte.

Dieser SWE-Bench ist ein Benchmark-Datensatz, der zur Bewertung der Fähigkeit von LLM verwendet wird, echte Softwareprobleme auf GitHub zu lösen. Es sammelt 2.294 Issue-Pull-Request-Paare aus 12 beliebten Python-Repositories. Während des Tests erhält LLM eine Codebasis und eine Problembeschreibung und generiert dann einen Patch, um das im Problem beschriebene Problem zu lösen. Dieser Datensatz wurde häufig bei der Bewertung der KI-Programmierfähigkeiten verwendet.

Mit der Weiterentwicklung der KI-Programmierfähigkeiten entwickelt sich auch dieser Benchmark weiter. Heute früh wurde das online gemeldete OpenAI-Modell „Strawberry“ erneut verzögert, aber OpenAI hat etwas Neues veröffentlicht, nämlich eine verbesserte Version von SWE-Bench – SWE-bench Verified.

OpenAI wies darauf hin, dass die ursprüngliche SWE-Bench einige Probleme aufwies, die möglicherweise dazu geführt haben, dass die autonomen Software-Engineering-Fähigkeiten des Modells unterschätzt wurden. Daher arbeiteten sie während des Verbesserungsprozesses mit den ursprünglichen Autoren von SWE-Bench zusammen, um manuelle Überprüfungen und Verbesserungen durchzuführen, um sicherzustellen, dass der Umfang der Komponententests angemessen und die Problembeschreibung klar war.

In neuen Tests, die auf dem SWE-Bench Verified durchgeführt wurden, schnitten viele KI-Programmierer besser ab als zuvor. Unter anderem hat die Agentless-Lösung von UIUC die Punktzahl sogar verdoppelt. OpenAI glaubt, dass dies beweist, dass der vorherige Benchmark den Fehler aufweist, die KI-Programmierfähigkeiten zu unterschätzen.

Aber für Internetnutzer auf der ganzen Welt, die „Strawberry“ schauen, ist diese Veröffentlichung immer noch zu oberflächlich. Jemand sagte: „Wir hatten Erdbeeren erwartet, aber sie haben Grünkohl herausgebracht.“



Hintergrundwissen zur SWE-Bank

Jedes Beispiel im SWE-Bench-Testset wurde aus einem gelösten GitHub-Problem in 12 Open-Source-Python-Code-Repositories auf GitHub erstellt. Jedem Beispiel ist eine Pull-Anfrage (PR) zugeordnet, die Lösungscode und Komponententests enthält, um die Richtigkeit des Codes zu überprüfen. Diese Komponententests werden als FAIL_TO_PASS-Tests bezeichnet, da sie fehlschlagen, bevor der Lösungscode im PR hinzugefügt wird, und bestehen, nachdem er hinzugefügt wurde. Jedes Beispiel enthält außerdem PASS_TO_PASS-Tests, die vor und nach der Zusammenführung des PR durchgeführt werden, um zu überprüfen, ob der PR andere Funktionen in der Codebasis beeinträchtigt, die nicht mit dem Problem zusammenhängen.

Im SWE-Bench erhält der KI-Agent den Originaltext aus dem GitHub-Issue, also die Problemstellung, und hat Zugriff auf die Codebasis. Anhand dieser Informationen muss der Agent Dateien in der Codebasis bearbeiten, um das Problem zu lösen.

Vom KI-Agenten vorgenommene Änderungen werden durch Ausführen der Tests FAIL_TO_PASS und PASS_TO_PASS ausgewertet. Wenn der FAIL_TO_PASS-Test bestanden wird, bedeutet dies, dass der Editor das Problem behoben hat. Wenn der PASS_TO_PASS-Test bestanden wird, bedeutet dies, dass durch die Bearbeitung keine überflüssigen Teile der Codebasis beschädigt wurden. Um das ursprüngliche GitHub-Problem vollständig zu lösen, müssen beide Testreihen bestanden werden.

Drei Verbesserungsrichtungen zur Verbesserung der Robustheit und Zuverlässigkeit der SWE-Bank

Um die Robustheit und Zuverlässigkeit der SWE-Bank zu verbessern. Das Entwicklungsteam identifizierte drei Hauptrichtungen für Verbesserungen:

  • Unit-Tests zur Bewertung der Korrektheit einer Lösung sind oft zu spezifisch und manchmal nicht einmal relevant für das Problem. Dies kann dazu führen, dass die richtige Lösung abgelehnt wird.
  • Die Problembeschreibungen vieler Proben waren nicht klar genug, was zu Unklarheiten darüber führte, um welches Problem es sich handelte und wie es gelöst werden sollte.
  • Manchmal ist es schwierig, eine SWE-Bench-Entwicklungsumgebung für den Agenten zuverlässig einzurichten, was unabhängig von der Lösung unbeabsichtigt dazu führen kann, dass Unit-Tests fehlschlagen. In diesem Fall kann eine vollkommen gültige Lösung als falsch gewertet werden.

SWE-bench Verifiziert

Um diese Probleme anzugehen, initiierte OpenAI eine manuelle Annotationskampagne durch professionelle Softwareentwickler, bei der jedes Beispiel im SWE-Bench-Testset überprüft wurde, um sicherzustellen, dass die Unit-Tests einen angemessenen Umfang hatten und die Problembeschreibungen klar und eindeutig waren.

Zusammen mit den Autoren von SWE-bench veröffentlichten sie SWE-bench Verified: eine Teilmenge des ursprünglichen Testsatzes von SWE-bench, die 500 Proben enthält, die von menschlichen Annotatoren verifiziert wurden. Diese Version ersetzt die Original-Testsätze SWE-bench und SWE-bench Lite. Darüber hinaus veröffentlichen sie menschliche Anmerkungen für alle SWE-Bench-Testproben.

Außerdem arbeiteten sie mit den Autoren von SWE-bench zusammen, um ein neues Evaluierungstool für SWE-bench zu entwickeln, das eine containerisierte Docker-Umgebung nutzt, um die Evaluierung auf SWE-bench einfacher und zuverlässiger zu machen.

  • Tool-Adresse: https://github.com/princeton-nlp/SWE-bench/tree/main/docs/20240627_docker

Verbesserungsmethode

OpenAI arbeitete mit 93 Softwareentwicklern mit Python-Erfahrung zusammen, um SWE-Bench-Proben manuell zu überprüfen und 1699 Zufallsproben im SWE-Bench-Testsatz zu kommentieren, und erhielt schließlich SWE-Bench Verified.

Ihr Ansatz besteht darin, die Proben im SWE-Bench-Testsatz mit Anmerkungen zu versehen, um die Fairness und Genauigkeit des Tests sicherzustellen. Sie konzentrieren sich insbesondere auf zwei wichtige Punkte: Erstens, um zu bewerten, ob die Problembeschreibung detailliert genug ist, um zu verhindern, dass eine zu vage Beschreibung zu unfairen Tests führt, und zweitens, um zu überprüfen, ob der FAIL_TO_PASS-Komponententest fälschlicherweise gültige Lösungen herausfiltert.

Jedes Anmerkungskriterium hat eine Bezeichnung im Bereich [0, 1, 2, 3] mit zunehmendem Schweregrad. Die Markierungen 0 und 1 sind geringfügig; die Markierungen 2 und 3 sind schwerwiegend, was darauf hinweist, dass die Probe in irgendeiner Weise unzureichend ist und verworfen werden sollte.

Darüber hinaus bewertet OpenAI die Schwierigkeit jedes Beispiels, indem es Annotatoren auffordert, abzuschätzen, wie lange Entwickler brauchen würden, um sich für eine Lösung zu entscheiden und diese zu implementieren, vorausgesetzt, das Beispiel ist problemlos. Schließlich bietet OpenAI eine Freiform-Eingabeoption, um alle anderen größeren Probleme mit dem Beispiel zu kennzeichnen.

Um SWE-bench Verified zu erstellen, filtert OpenAI alle Proben aus dem ursprünglichen Testsatz mit einer Problemanweisung oder einem FAIL_TO_PASS-Komponententestschweregrad von 2 oder höher sowie alle Proben heraus, die mit anderen schwerwiegenden Problemen gekennzeichnet sind.

Kommentieren Sie die Ergebnisse

Nach den neuen Standards ist ein großer Teil der Proben im ursprünglichen SWE-Bench unqualifiziert. Wie in der Abbildung dargestellt, wurden 38,3 % der Proben markiert, weil die Problemstellung nicht klar genug war, und 61,1 % wurden markiert, weil die Komponententests zu Unrecht fälschlicherweise gültige Lösungen als falsch markieren konnten (Schweregrad 2, 3, die beiden Ebenen addieren sich). . Insgesamt führte ihr Annotationsprozess dazu, dass 68,3 % der SWE-Bench-Stichproben aufgrund unklarer Problemstellungen, unfairer Komponententests oder anderer Probleme herausgefiltert wurden.







Die folgende Abbildung vergleicht die Schwierigkeitsverteilung des ursprünglichen SWE-Bench-Datensatzes und des neuen verifizierten SWE-Bench-Datensatzes. Sie schätzen die Schwierigkeitsverteilung des SWE-Bench anhand einer zufälligen Teilmenge von 1699 Stichproben.

Wie aus der Abbildung ersichtlich ist, beträgt die geschätzte Fertigstellungszeit der meisten (77,8 %) Proben im ursprünglichen SWE-Bench-Datensatz weniger als eine Arbeitsstunde für einen erfahrenen Softwareentwickler. SWE-bench Lite und der neue SWE-bench Verified-Datensatz erhöhen diesen Anteil weiter, wobei erwartet wird, dass die Lösung von weniger als 10 % der Probleme mehr als eine Stunde dauert. Die Mechanismen hinter dieser Änderung sind jedoch recht unterschiedlich: SWE-bench Lite ist eine Unterabtastung des ursprünglichen Datensatzes, um das Benchmarking zu erleichtern, während SWE-bench Verified versucht, nicht realisierbare Funktionen aus der Datensatzstichprobe zu entfernen.



Leistung jedes Agenten im SWE-Bench verifiziert

Auf dem neuen SWE-Bench-verifizierten Datensatz testete das Entwicklungsteam die Leistung von GPT-4o mithilfe mehrerer Open-Source-Gerüste, die auf der ursprünglichen SWE-Bench-Bestenliste gut abschnitten.

Es wurde festgestellt, dass die Leistung von GPT-4o auf dem Gerüst mit der besten Leistung 33,2 % im SWE-Bench-Verified erreichte, mehr als das Doppelte der 16 %-Wertung im ursprünglichen SWE-Bench. Insgesamt bestätigt dies den anfänglichen Verdacht von OpenAI, dass die ursprüngliche SWE-Benchmark die Fähigkeiten des Agenten unterschätzt hat.

Es ist erwähnenswert, dass der Sprung von SWE-bench Lite zu SWE-bench Verified nicht so offensichtlich ist, da SWE-bench Lite nach dem Filtern bereits einfacher ist als der vollständige Datensatz.



Leistungsanalyse, geschichtet nach Schwierigkeitsgrad

Die Leistungsverbesserung bei der Auswertung auf dem SWE-Bench Verified kann teilweise darauf zurückzuführen sein, dass die Verteilung der Testproben hin zu einfacheren Proben verzerrt ist.

OpenAI untersuchte dies, indem es die Leistung nach Schwierigkeit geschichtet aufzeichnete. Wenn der neue Datensatz lediglich die Schwierigkeitsverteilung ändert, um einfachere Stichproben einzubeziehen, ändert sich die geschichtete Leistung innerhalb jeder Kategorie nicht, wie dies beim ursprünglichen SWE-Bench zum SWE-Bench Lite der Fall ist.

Im Gegensatz dazu beobachtete OpenAI, dass sich die Leistung des Agenten über alle Schwierigkeitskategorien hinweg verbesserte, als er zu SWE-bench Verified wechselte, was mit dem erwarteten Effekt übereinstimmt, unmögliche Proben aus allen Kategorien zu entfernen, anstatt einfach schwierige Proben zu entfernen.



Referenzlink: https://openai.com/index/introducing-swe-bench-verified/