180 čítania Nová história

Testovanie LLM na riešenie problémov Leetcode v roku 2025

podľa Alex Svetkin9m2025/04/08
Read on Terminal Reader

Príliš dlho; Čítať

Najmodernejšie "uvažovanie" LLM môže vyriešiť značné množstvo ťažkých algoritmických problémov Leetcode.
featured image - Testovanie LLM na riešenie problémov Leetcode v roku 2025
Alex Svetkin HackerNoon profile picture
0-item
1-item

Pred rokom, my benchmark ukázal, že Large Language Models (LLMs) mohli riešiť algoritmické kódovanie výzvy na Leetcode. Avšak ich schopnosť bola obmedzená na podskupinu známych, "populárnych" problémov. Nové problémy, ktoré nikdy neboli súčasťou ich školiacich dátových súborov, predstavovali ťažkosti. Zatiaľ čo najjednoduchšie boli väčšinou vyriešené modelmi, najťažšie zostali nedosiahnuteľné.

môj referenčný bodmôj referenčný bodOdvtedy Open AI, Anthropic a Google vydali vylepšené verzie svojich modelov a objavili sa noví hráči ako Deepseek a xAI.Mnohé modely sú teraz uvádzané na trh ako schopné písať kód, čo nebolo prípadom predtým.

Motivačné hodnotenie

Existujú existujúce referenčné hodnoty pre LLM na posúdenie ich kódovacích schopností.

SWE-bench sa zameriava na riešenie problémov so softvérom v reálnom živote - je založený na problémoch Github existujúcich projektov s otvoreným zdrojovým kódom.SWE-benchSWE-bench

Codeforces referenčné hodnoty lepšie odrážajú algoritmické schopnosti riešenia problémov LLMs. OpenAI testoval modely o1 a o3 na problémy Codeforces a zdieľal podrobné výsledky (1, 2), zatiaľ čo ostatní konkurenti to neurobili. To znemožnilo priame porovnanie.

CodeforcesCodeforces1122

Toto viedlo k vytvoreniu novej referenčnej hodnoty, ktorá umožňuje priame porovnanie LLM. A nakoniec, prečo to neurobiť len pre zábavu?

Výsledky referenčného návrhu

Myšlienkou je napodobňovať ľudské akcie pri riešení algoritmických problémov, ale použiť LLM na písanie kódu:

  1. Stiahnite si popis problému.
  2. Vytvorte výzvu z popisu.
  3. Vytvorte kód s LLM.
  4. Podajte kód na overenie.
  5. Počkajte na výsledky.
  • Stiahnite si popis problému.
  • Vytvorte výzvu z popisu.
  • Generovať kód s LLM.
  • Odoslať kód na overenie.
  • Čakať na výsledky.

  • Sketched kroky referenčnej hodnoty

    Sketched kroky referenčnej hodnoty


    Tieto kroky by sa mali vykonať pre každý problém v našom testovacom súbore a pre každý LLM. Kvôli jednoduchosti existuje len jeden pokus pre LLM napísať kód na každý problém, bez toho, aby sa opakovala spätná väzba na zlepšenie riešenia.< Br >


    Prečo Leetcode?

    Leetcode sa ukázal ako dobrá voľba pre benchmarking z niekoľkých dôvodov:

    • Problémy Leetcode sa používajú v skutočných rozhovoroch pre pozície softvérového inžiniera.
    • Študenti počítačových vied sa naučia riešiť podobné problémy počas svojho vzdelávania.
    • Má on-line sudcu, ktorý môže skontrolovať, či je riešenie správne v sekundách.
    • Mnohé populárne programovacie jazyky sú podporované.
    • Je k dispozícii aj výkonnosť ľudského používateľa pri tomto probléme.
  • Leetcode problémy sa používajú v skutočných rozhovoroch pre pozície softvérového inžiniera.
  • Študenti počítačových vied sa naučia riešiť podobné problémy počas vzdelávania.
  • Má on-line sudcu, ktorý môže skontrolovať, či je riešenie správne za niekoľko sekúnd.
  • Mnohé populárne programovacie jazyky sú podporované.
  • Je k dispozícii aj správa ľudského používateľa o tomto probléme.

  • Ako funguje Leetcode

    Ak ste sa nikdy nezaoberali konkurenčným programovaním alebo riešením algoritmických výziev, tu je stručné vysvetlenie.

    Vzhľadom na množinu celých čísel a cieľ celých čísel vráťte indexy dvoch čísel tak, aby sa pridali k cieľu. Môžete predpokladať, že každý vstup by mal presne jedno riešenie a nemôžete použiť ten istý prvok dvakrát. 
    Vzhľadom na množinu celých čísel a cieľ celých čísel vráťte indexy dvoch čísel tak, aby sa pridali k cieľu.Môžete predpokladať, že každý vstup by mal presne jedno riešenie a nemôžete použiť ten istý prvok dvakrát.

    Súťažiaci programátor musí napísať kúsok kódu, ktorý tento problém vyrieši.Na začiatok je tu „snippet“ – nedokončená funkcia, s názvom a argumentmi, ale prázdnym telom:

    class Riešenie:    def twoSum(self, nums: List[int], target: int) -> List[int]:      # váš kód tu  
    class Riešenie:    def twoSum(self, nums: List[int], target: int) -> List[int]:      # váš kód tu 

    Zvyčajne sa v popise uvádza niekoľko vzoriek vstupu a výstupu (testovacie prípady):

    Input:  čísla = [2,7,11,15], cieľ = 9  Výstup: [0,1]   
    Input:  čísla = [2,7,11,15], cieľ = 9  Výstup: [0,1]  

    Problém môže mať desiatky testovacích prípadov, ktoré sú k dispozícii iba pre online rozhodcu.Problém je vyriešený (alebo riešenie sa považuje za prijaté) ak a len ak kód produkuje očakávané výstupy pre všetky testovacie prípady v primeranom čase a pamäťových obmedzeniach.Riešenie môže byť napísané v akomkoľvek programovacom jazyku, ktorý je podporovaný rozhodcom.

    Každý problém má "miera prijatia", pomer prijatých riešení predložených používateľmi Leetcode.Všimnite si, že jeden používateľ môže odoslať svoj kód neobmedzený počet krát, a každý pokus sa počíta smerom k miere prijatia.

    Tieto pravidlá neboli vynájdené Leetcode; boli bežne používané v počítačových vedeckých súťažiach po pomerne dlhú dobu.


    Súbory údajov

    Rovnako ako v predchádzajúcom kritériu som chcel spustiť LLM na dvoch súboroch problémov:

    • "známe" problémy nie sú len publikované dávno, ale sú tiež najčastejšie používané pre softvérové rozhovory - preto riešenia sú široko dostupné.
    • "Neviditeľné" problémy, ktoré boli publikované nedávno, a ich riešenia neboli pravdepodobne pozorované testovanými LLM.
  • „známe“ problémy nie sú len publikované dávno, ale sú tiež najčastejšie používané pre softvérové rozhovory – preto sú riešenia široko dostupné.
  • „Neviditeľné“ problémy, ktoré boli nedávno publikované a ich riešenia neboli pravdepodobne pozorované testovanými LLM.
  • Zatiaľ čo väčšina problémov má jednoduché textové popisy a vyžaduje len rozšírenie danej funkcie kódom, iné sú odlišné. Niektoré vyžadujú implementáciu rozhrania, t. j. rozšírenie viacerých funkcií v jednom probléme. Iné majú externé odkazy a obrázky, ktoré môžu predstavovať ťažkosti pre LLM, pretože len málo modelov podporuje vstupy obrázkov alebo prehliadanie internetu. Rozhodol som sa oslobodiť od problémov s obrázkami, odkazmi a tými, ktoré vyžadujú implementáciu viacerých funkcií.

    Leetcode ponúka tri zoznamy problémov: "Leetcode 75", a "Top interview 150", "Leetcode 75", a "Top 100 Páči sa mi" Môj súbor údajov o "dobre znám"Top rozhovor 150""Leetcode 75""Top 100 Páči sa mi to"

    Pre "neviditeľné" problémy som vybral 99 z najnovších publikovaných problémov: 33 jednoduchých, 33 stredných a 33 ťažkých. Nedávnosť bola určená na základe identifikátorov problémov, ktoré sú inkrementálne. Hoci Leetcode nezobrazuje dátum publikovania problémov, možno ho zhrnúť z komentárov a diskusií. Najskoršie z týchto "neviditeľných" problémov boli pravdepodobne publikované okolo novembra 2024.

    Úrovne obtiažnosti sú čisto subjektívne a podľa uváženia redaktorov.Nechcel som zhodovať počet problémov pre každú obtiažnosť alebo dátovú sadu.




    Nastavenie problému





    Nastavenie problémov

    Nastavenie problémov

    Nastavenie problémov




    Dobre známy

    Dobre známy

    Dobre známy

    Neviditeľné
    (23 Mar 2025)

    Neviditeľné
    (23 Mar 2025)

    Neviditeľné
    (23 Mar 2025)
    < Br >

    Total

    133

    99

    Celkové hodnotenie

    Celkom

    Celková hodnota

    133

    133

    99

    99

    Easy

    41

    33

    Náročný

    Náročný

    Jednoduché

    41


    41

    33

    33

    Medium

    78

    33

    Medium

    Mediálne

    Mediálne

    78



    78

    33

    33

    Hard

    14

    33

    Ťažký Ťažký Ťažký Ťažký Ťažký Ťažký Ťažký

    Hrdý

    Tvrdý

    14



    14

    33

    33

    Rozsah akceptácie používateľov Leetcode

    53.44%

    37,05%

    Miera akceptácie používateľov Leetcode

    Miera akceptácie používateľov Leetcode

    Miera akceptácie používateľov Leetcode

    53.44%

    53.44 %

    53,44 %

    37,05%

    37,05%

    37,05%

    Problémové vyhlásenia a kódy boli získané pomocou môjho benchmarkingového nástroja, ktorý je publikovaný na Github: https://github.com/whisk/leetgptsolver

    https://github.com/whisk/leetgptsolverhttps://github.com/whisk/leetgptsolver


    Prompt, výber jazyka a generovanie kódu

    Benchmark bol navrhnutý takto: LLM robí len jeden pokus o generovanie kódu bez akýchkoľvek predchádzajúcich informácií o probléme (alebo akýchkoľvek iných problémoch) a bez toho, aby poznal jeho testovacie prípady, s výnimkou tých, ktoré boli v samotnom popise.

    Použil som rovnakú výzvu pre každý LLM a každý problém:

    Dobrý deň, toto je rozhovor o kódovaní. Dostanete: * Vyhlásenie o probléme (s prípadmi testovania vzoriek, ak sú k dispozícii). * Snímanie štartovacieho kódu (s podpismi pevných funkcií). Prosím, napíšte svoje riešenie v programovacom jazyku {language}. Váš kód musí: * vyriešiť problém úplne a správne. * Prejsť všetky poskytnuté prípady testovania vzoriek. * Spustiť v rámci prijateľných časových a pamäťových limitov (pripustiť veľké vstupy, ak nie sú špecifikované). * Dodržiavať dobré postupy kódovania (jasná logika, čitateľná štruktúra, vhodné používanie jazykových funkcií). Tu je vyhlásenie o probléme: {otázka} Tu jeDobrý deň, toto je rozhovor s kódovaním. Dostanete: * Vyhlásenie o probléme (s prípadmi testovania vzoriek, ak sú k dispozícii). * Odstránenie štartovacieho kódu (s podpismi pevných funkcií). Prosím, napíšte svoje riešenie v programovacom jazyku {language}. Váš kód musí: * vyriešiť problém úplne a správne. * Prejsť všetky poskytnuté prípady testovania vzoriek. * Spustiť v rámci prijateľných časových a pamäťových limitov (pripustiť veľké vstupy, ak nie sú špecifikované). * Dodržiavať dobré postupy kódovania (jasná logika, čitateľná štruktúra, vhodné používanie jazykových funkcií). Tu je vyhlásenie o probléme: {otázka} Tu je kódový od

    Prompt bol "polírovaný" s ChatGPT4 od môjho prvého návrhu, ale bez implementácie akýchkoľvek techník "prompt-engineering".

    Popis problému bol odstránený z HTML tagov pred jeho použitím v príkaze.

    Pre programovací jazyk som si vybral Python (verzia 3).

    LLMs boli požiadaní, aby vydali iba pracovný kód bez akéhokoľvek predchádzajúceho textu, ale to nebolo pravda v mnohých prípadoch.


    Modely a parametre

    Modely použité v referenčnej hodnote sú uvedené v tabuľke nižšie, pričom sú uvedené všetky parametre, ktoré nie sú predvolené.


    Predávajúci


    Knowledge cutoff date


    <

    Predávajúci

    Predávajúci

    Predávajúci

    Model


    Základné informácie

    Výsledok

    Dátum ukončenia znalostí

    Dátum ukončenia znalostí

    Dátum ukončenia znalostí

    "Pozornosť"

    Pozornosť

    „Rozumenie“

    Parametre

    Parametre a parametre

    Parametre a parametre

    Anthropic

    claude-3-7-sonnet-20250219

    Nov 2024

    No

    teplota = 0.0 max_tokens = 4096

    Anthropický

    Prírodné prostredie

    kľúč 3-7-sonnet-20250219

    symbolizácia 3-7-sonnet-20250219

    pohľadnice-3-7-sonet-20250219

    November 2024

    November 2019

    Nie


    Nie

    Nie

    teplota = 0.0 max_tokens = 4096

    teplota = 0.0 max_tokens = 4096


    claude-3-7-sonnet-20250219  (s umožnením myslenia)

    Nov 2024

    Yes

    temperatura = 0.0 max_tokens = 16384 budget_tokens = 8192



    kľúč-3-7-sonnet-20250219  (s možnosťou myslenia)

    kľúč-3-7-sonnet-20250219 (s možnosťou myslenia)

    pohľadnice-3-7-sonet-20250219 (s umožnením myslenia)

    November 2024

    November 2019

    Áno

    Áno

    Áno

    teplota = 0.0 max_tokens = 16384 budget_tokens = 8192

    teplota = 0.0 max_tokens = 16384 budget_tokens = 8192

    DeepSeek

    deepseek-chat (DeepSeek-V3)

    unknown

    No

    temperatura = 0.0

    Hlboké vyhľadávanie

    Hlboké vyhľadávanie

    deepseek-chat (DeepSeek-V3)

    Deepseek-chat(DeepSeek-V3)

    Deepseek-chat Strong>(DeepSeek-V3) Prehľad

    neznámy

    nie je známe

    Nie


    Nie

    Nie

    teplota = 0,0


    teplota = 0,0


    deepseek-reasoner (DeepSeek-R1)

    unknown

    Yes

    temperatura = 0.0



    Deepseek-reasoner (DeepSeek-R1)

    Pozorovanie hlbokého hľadania (DeepSeek-R1)

    Deepseek-reasoner (DeepSeek-R1) Prečítajte si viac

    neznámy

    nie je známe

    Áno

    Áno

    Áno

    teplota = 0,0


    teplota = 0,0

    Google

    p>2.0-flash-001

    unknown

    No

    teplota = 0.0

    Google

    Google

    systém 2.0-flash-001

    zrkadlovka 2.0-flash-001

    systém 2.0-flash-001

    neznámy

    nie je známe

    Nie


    Nie

    Nie

    teplota = 0,0


    teplota = 0,0


    p>


    unknown

    No

    teplota

    = 0.0



    zrkadlovka 2.0-pro-exp-02-05

    zrkadlovka 2.0-pro-exp-02-05

    pohľadnice 2.0-pro-exp-02-05

    neznámy

    nie je známe

    Nie


    Nie

    Nie

    teplota = 0,0


    teplota = 0,0


    p>


    unknown

    Yes

    teplota

    = 0.0



    symbolik-2.5-pro-exp-03-25

    zrkadlovka 2.5-pro-exp-03-25

    systém Gemini-2.5-pro-exp-03-25

    neznámy

    nie je známe

    Áno

    Áno

    Áno

    teplota = 0,0


    teplota = 0,0

    xAI

    grok-2-1212

    Júl 17, 2024

    No

    seed = 42

    xAI



    púzdro

    p212

    p2122

    Grok-2-1212 Prehľad

    Dňa 17. júla 2024

    Dňa 17. júla 2017

    Nie


    Nie

    Nie

    semená = 42

    semená = 42

    OpenAI

    o1-2024-12-17

    Oct 01, 2023

    Áno

    seed = 42

    OpenAI

    Otvorte si stránku

    o1-2024-12-17

    o1-2024-12-17

    o1-2024-12-17

    Oct 01, 2023

    Oct 01, 2019

    Áno

    Áno

    Áno

    semená = 42

    semená = 42


    o3-mini-2025-01-31

    Oct 01, 2023

    Yes

    seed = 42



    o3-mini-2025-01-31

    o3-mini-2025-01-31

    o3-mini-2025-01-31

    Oct 01, 2023

    Oct 01, 2019

    Áno

    Áno

    Áno

    semená = 42

    semená = 42

    Cieľom referenčnej hodnoty bolo byť čo najdeterministickejšia a reprodukovateľnejšia; preto sa použili parametre ako „teplota“ alebo „semeno“. Avšak, žiadny z testovaných modelov nezaručuje plne deterministický výstup.

    Všetky známe dátumy rezania vedomostí sú skôr ako najstarší problém v známej databáze (november 2024).Nemôžem však nájsť dátumy rezania pre modelové rodiny Gemini a DeepSeek.

    Niektoré modely podporujú predvolené režimy „rozumenia“ alebo „myslenia“, zatiaľ čo pre Claude 3.7 Sonnet je možné ho povoliť prechodom parametrov. Použitie tejto funkcie je uvedené v tabuľke. Ďalšie funkcie modelu (alebo „nástroje“) ako vyhľadávanie na webe neboli povolené, aj keď sú podporované.

    Výsledky

    Results on the "well-known" problem set

    Results on the "well-known" problem set


    Všetci konkurenti ukázali veľmi vysoké miery akceptácie na známych problémoch, ako v predchádzajúcom referenčnom hodnotení.Nietestoval som špičkové modely alebo modifikácie (teda: Claude 3.7 Sonnet s argumentáciou povolenou, DeepSeek R1, Gemini 2.5 Pro, O1) na úsporu času a kreditov, pretože výsledky boli vysoko predvídateľné.

    Results on the "unseen" problem set

    Results on the "unseen" problem set

    Výsledky sa pre „neviditeľné“ problémy výrazne líšia v dvoch aspektoch:

    1. Pre všetky modely je miera akceptácie nižšia pre "neviditeľné" problémy.Toto je obzvlášť pozoruhodné pre stredné a ťažké problémy.
    2. Modely s režimom "rozum" alebo "myslieť" umožnili lepšie výsledky v problémoch všetkých ťažkostí, hoci presné čísla sa líšili od modelu k modelu.
  • Pre všetky modely je miera akceptácie nižšia pre "neviditeľné" problémy.miera akceptácie je nižšia pre "neviditeľné" problémy
  • Modely s režimom „rozum“ alebo „myslieť“ umožnili lepšie výsledky v problémoch všetkých ťažkostí, hoci presné čísla sa líšili od modelu k modelu.
  • Modely s režimom „rozumenie“ alebo „myslenie“ umožnili lepšie výsledky

    Významne vyššie miery akceptácie pre známe problémy možno vysvetliť možnosťou, že tieto problémy a ich riešenia boli súčasťou školiacich súborov a modely museli iba reprodukovať známe správne riešenie. Avšak miera akceptácie používateľov pre nové stredné a ťažké problémy je tiež nižšia ako pre problémy v "známom" súbore. Tento prípad je ťažké kvantifikovať, a to nemusí nevyhnutne znamenať, že nové problémy sú "ťažšie". Hodnotenie ťažkostí, ako bolo uvedené skôr, je vysoko subjektívne. A, ako v prípade samotných LLM, ľudskí používatelia môžu predložiť známe správne riešenia pre známe problémy.

    Všetky modely s režimom „rozumenia“ umožnili výrazne prekonať ich základné náprotivky. Najdôležitejšie je, že niektoré z nich boli schopné vyriešiť značnú časť stredných a ťažkých problémov – neuskutočniteľný úspech len pred rokom. O3-mini ukazuje najlepšie výsledky medzi všetkými modelmi „rozumenia“ – vykonal sa ešte lepšie ako oveľa drahšie a pomalšie o1. Je potrebné poznamenať, že o3-mini bol špeciálne vyškolený na riešenie konkurenčných programovacích problémov.Najdôležitejšie je, že niektoré z nich boli schopné vyriešiť značnú časť stredných a ťažkých problémovo3-mini bol špeciálne vyškolenýo3-mini bol špeciálne vyškolený

    Budúce úvahy

    Nemôžeme zaručiť, že "neviditeľné" súbory problémov neboli zahrnuté do školiacich údajov modelov.Na riešenie tohto problému môžeme zvážiť generovanie nových, jedinečných problémov špeciálne navrhnutých pre budúce referenčné hodnoty – samozrejme pomocou LLM.

    Tento prístup môže vyžadovať, aby LLM navrhli riešenie namiesto "kopírovania" známeho správneho kódu napísaného v Pythone.

    Tieto myšlienky potrebujú ďalší výskum a dúfam, že sa do nich niekto iný alebo ja môžem ponoriť.

    Links

  • Raw výsledky, súbory problémov a zdrojový kód možno nájsť na mojom GitHub:  https://github.com/whisk/leetgptsolver
  • https://github.com/whisk/leetgptsolverhttps://github.com/whisk/leetgptsolver
  • Moje predchádzajúce referenčné výsledky (2024): https://hackernoon.com/testing-llms-on-solving-leetcode-problems
  • https://hackernoon.com/testing-llms-on-solving-leetcode-problemshttps://hackernoon.com/testing-llms-on-solving-leetcode-problems


    Kryť obrázok vytvorený DALL·E.

    Trending Topics

    blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks