Pred rokom,
Motivačné hodnotenie
Existujú existujúce referenčné hodnoty pre LLM na posúdenie ich kódovacích schopností.
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:
- Stiahnite si popis problému.
- Vytvorte výzvu z popisu.
- Vytvorte kód s LLM.
- Podajte kód na overenie.
- Počkajte na výsledky.
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.
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ý odPrompt 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
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é.
Výsledky sa pre „neviditeľné“ problémy výrazne líšia v dvoch aspektoch:
- 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.
- 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ýsledkyVý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, nastavenia problémov a zdrojový kód možno nájsť na mojom GitHub:
https://github.com/whisk/leetgptsolver - Moje predchádzajúce výsledky referenčných hodnôt (2024):
https://hackernoon.com/testing-llms-on-solving-leetcode-problems
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/leetgptsolverMoje 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-problems https://hackernoon.com/testing-llms-on-solving-leetcode-problems
Kryť obrázok vytvorený DALL·E.