180 測定値 新しい歴史

2025年にLeetcodeの問題を解決するためのLLMのテスト

Alex Svetkin9m2025/04/08
Read on Terminal Reader

長すぎる; 読むには

最先端の「推論」LLM は、Leetcode の難しいアルゴリズム問題のかなりの量を解決できます。
featured image - 2025年にLeetcodeの問題を解決するためのLLMのテスト
Alex Svetkin HackerNoon profile picture
0-item
1-item

一年前、私のベンチマーク大規模言語モデル (LLM) は、Leetcode のアルゴリズム コーディングの課題を解決できることが示されました。ただし、その能力は、よく知られた「一般的な」問題のサブセットに限定されていました。トレーニング データセットの一部ではなかった新しい問題が、困難をもたらしました。最も簡単な問題はほとんどモデルによって解決されましたが、最も難しい問題は解決できませんでした。

それ以来、Open AI、Anthropic、Google がモデルの強化版をリリースし、Deepseek や xAI などの新しいプレーヤーが登場しました。多くのモデルが、以前はそうではありませんでしたが、今ではコードを書くことができるものとして販売されています。私は、これらの最先端の LLM をベンチマークして、新しいアルゴリズムの問題を解決する能力が向上したかどうかを調べるつもりです。

モチベーション

LLM のコーディング能力を評価するためのベンチマークが既に存在します。

SWEベンチは、現実のソフトウェア問題の解決に焦点を当てており、既存のオープンソース プロジェクトの Github の問題に基づいています。確かに素晴らしいアイデアですが、私が焦点を当てていた実際のアルゴリズムの問題解決以外にも、あまりにも多くのことをカバーしています。

コードフォースベンチマークはLLMのアルゴリズム問題解決スキルをよりよく反映しています。OpenAIはCodeforcesの問題でo1とo3のモデルをテストし、詳細な結果を共有しました( 1 2 )ですが、他の競合他社はそうではありませんでした。そのため、直接比較することは不可能でした。

これにより、LLM を直接比較できる新しいベンチマークが作成されました。結局のところ、楽しみのためにそれをやってみるのはいかがでしょうか?

ベンチマークデザイン

アルゴリズムの問題を解決するときに人間の行動をエミュレートしますが、LLM を使用してコードを記述するというアイデアです。

  1. 問題の説明をダウンロードしてください。
  2. 説明からプロンプトを作成します。
  3. LLM を使用してコードを生成します。
  4. 検証のためにコードを送信します。
  5. 結果を待ちます。


ベンチマークの概略手順


これらの手順は、テスト セット内の各問題と各 LLM に対して実行する必要があります。簡単にするために、LLM が各問題に対してコードを記述する試行は 1 回のみで、ソリューションを改善するために繰り返し行うフィードバックはありません。すべての問題は独立したものとして扱われ、問題間でコンテキストは共有されません。


なぜ Leetcode なのか?

Leetcode は、いくつかの理由からベンチマークに適した選択肢であることが証明されました。

  • Leetcode の問題は、ソフトウェア エンジニア職の実際の面接で使用されます。
  • コンピュータサイエンスの学生は、教育中に同様の問題を解決する方法を学びます。
  • 数秒で解答が正しいかどうかを確認できるオンラインジャッジを備えています。
  • 多くの一般的なプログラミング言語がサポートされています。
  • この問題に対する人間のユーザーのパフォーマンスも利用可能です。


Leetcodeの仕組み

競技プログラミングやアルゴリズムの課題を解決したことがない方のために、簡単な説明を記載します。次のサンプル問題の説明をご覧ください。

 Given an array of integers numbers and an integer target, return indices of the two numbers such that they add up to the target. You may assume that each input would have exactly one solution, and you may not use the same element twice.  You can return the answer in any order.

コンテストに参加するプログラマーは、その問題を解決するコードを書く必要があります。まず、「スニペット」があります。これは、名前と引数は指定されているが、本体が空である未完成の関数です。

 class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]:   # your code here

通常、説明には入力と出力のサンプル (テスト ケース) がいくつか提供されます。

 Input: nums = [2,7,11,15], target = 9 Output: [0,1]

問題には、オンライン ジャッジのみが利用できるテスト ケースが数十個ある場合があります。コードが、妥当な時間とメモリ制限内ですべてのテスト ケースに対して期待される出力を生成した場合にのみ、問題は解決されます (またはソリューションが受け入れられたとみなされます)。ソリューションは、ジャッジがサポートする任意のプログラミング言語で記述できます。

各問題には「承認率」があり、これは Leetcode ユーザーが提出した承認済みのソリューションの比率です。1 人のユーザーはコードを無制限に提出でき、各試行が承認率にカウントされることに注意してください。

これらのルールは Leetcode によって考案されたものではなく、かなり長い間、コンピュータ サイエンスのコンテストで一般的に使用されてきました。


データセット

前回のベンチマークと同様に、次の 2 つの問題セットで LLM を実行したいと考えました。

  • 「よく知られている」問題は、かなり以前に公開されているだけでなく、ソフトウェア面接で最も頻繁に使用されるため、解決策が広く入手可能です。
  • 最近公開された「目に見えない」問題であり、その解決策はテストされた LLM では確認されなかった可能性があります。

ほとんどの問題はプレーンテキストで記述されており、特定の関数をコードで拡張するだけで済みますが、他の問題は異なります。インターフェイスの実装、つまり 1 つの問題で複数の関数を拡張する必要があるものもあります。外部リンクや画像が含まれる問題もありますが、画像入力やインターネットの閲覧をサポートするモデルがほとんどないため、LLM にとって問題となる可能性があります。画像やリンクが含まれる問題、および複数の関数の実装が必要な問題は除外することにしました。

Leetcode は、 「トップインタビュー 150」「Leetcode 75」「トップ 100 いいね」の3 つの問題リストを提供しています。私の「よく知られている」問題データセットはこれらのリストを組み合わせたもので、上記の除外後、合計 134 の問題になります。

「未公開」の問題については、最近公開された問題のうち、簡単なものが 33 問、中程度のものが 33 問、難しいものが 33 問、合計 99 問を選択しました。最新かどうかは、増分される問題 ID に基づいて判断されます。Leetcode では問題の公開日が表示されませんが、コメントやディスカッションから概算できます。これらの「未公開」の問題のうち最も古いものは、おそらく 2024 年 11 月頃に公開されたものです。

難易度は完全に主観的であり、編集者の裁量によります。各難易度やデータセットの問題数を一致させるつもりはありませんでした。



問題セット


よく知られている

見えない
(2025年3月23日)

合計

133

99

簡単

41

33

中くらい

78

33

難しい

14

33

Leetcodeユーザーの受け入れ率

53.44%

37,05%

問題ステートメントとコード スニペットは、Github で公開されている私のベンチマーク ツールを使用して取得されました。 https://github.com/whisk/leetgptsolver


プロンプト、言語の選択、コード生成

ベンチマークは次のように設計されました: LLM は、問題 (またはその他の問題) に関する事前情報なしで、また説明自体に記載されているテスト ケースを除いてテスト ケースを知らずに、コード生成を 1 回だけ試行します。生成後にフィードバックを提供したり、コードを改善したりするメカニズムはありません。

私はすべての LLM とすべての問題に同じプロンプトを使用しました。

 Hi, this is a coding interview. You will be given: * A problem statement (with sample test cases if available). * A starter code snippet (with fixed function signatures). Please write your solution in the {language} programming language. Your code must: * Solve the problem fully and correctly. * Pass all provided sample test cases. * Run within acceptable time and memory limits (assume large inputs if none are specified). * Follow good coding practices (clear logic, readable structure, appropriate use of language features). Here is the problem statement: {question} Here is the code snippet, which you should expand with your solution: {snippet} Important Requirements: * Do not change any provided function signatures, class names, or method names. * Output only valid source code that can be executed as-is, without any further improvements or bugfixes. * Do not include docstrings, markdown, or commentary in your final code. Good luck!

プロンプトは最初のドラフトから ChatGPT4 で「洗練」されましたが、「プロンプト エンジニアリング」テクニックは実装されていません。

問題の説明は、プロンプトで使用する前に HTML タグが削除されました。

プログラミング言語には Python (バージョン 3) を選択しました。

LLM は、先行テキストなしで動作するコードのみを出力するように求められましたが、多くの場合、それは当てはまりませんでした。基本的なクリーンアップが実装され、実際のコード以外のすべてが削除され、送信されませんでした。


モデルとパラメータ

ベンチマークで使用されたモデルは、デフォルト以外のすべてのパラメータが指定されて、下の表にリストされています。知識カットオフ日付は、ベンダーの公式ドキュメントから取得され、わかっている場合は参照用に提供されます。

ベンダー

モデル

知識の締め切り日

「推論」

パラメータ

人類学的

クロード-3-7-ソネット-20250219

2024年11月

いいえ

温度 = 0.0 最大トークン = 4096


claude-3-7-sonnet-20250219 (思考が有効)

2024年11月

はい

温度 = 0.0 最大トークン = 16384 予算トークン = 8192

ディープシーク

ディープシーク チャット(DeepSeek-V3)

未知

いいえ

温度 = 0.0


ディープシーク推論器 (DeepSeek-R1)

未知

はい

温度 = 0.0

グーグル

ジェミニ-2.0-フラッシュ-001

未知

いいえ

温度 = 0.0


ジェミニ 2.0 プロ exp-02-05

未知

いいえ

温度 = 0.0


ジェミニ 2.5 プロ exp-03-25

未知

はい

温度 = 0.0

xAI

グロク-2-1212

2024年7月17日

いいえ

シード = 42

オープンAI

2024年12月17日

2023年10月1日

はい

シード = 42


o3-ミニ-2025-01-31

2023年10月1日

はい

シード = 42

ベンチマークは、可能な限り決定論的かつ再現性があることを目指したため、「温度」や「シード」などのパラメータが使用されました。ただし、テストされたモデルのいずれも、完全に決定論的な出力を保証するものではありません。これらのテストを再実行するときは、この要素を考慮する必要があります。

既知の知識のカットオフ日付はすべて、よく知られているデータセットの最も古い問題 (2024 年 11 月) よりも前です。ただし、Gemini および DeepSeek モデル ファミリのカットオフ日付は見つかりませんでした。

一部のモデルはデフォルトで「推論」または「思考」モードをサポートしていますが、Claude 3.7 Sonnet では、パラメータを渡すことによって有効にすることができます。この機能の使用は、表に指定されています。Web 検索などの他のモデル機能 (または「ツール」) は、サポートされていても有効になっていません。

結果

「よく知られている」問題セットの結果


前回のベンチマークと同様に、すべての競合相手は、よく知られている問題で非常に高い合格率を示しました。結果は非常に予測可能であったため、時間とクレジットを節約するために、優れたモデルや修正 (つまり、推論が有効になっている Claude 3.7 Sonnet、DeepSeek R1、Gemini 2.5 Pro、O1) はテストしませんでした。

「目に見えない」問題セットの結果

「目に見えない」問題の場合、結果は 2 つの点で著しく異なります。

  1. すべてのモデルにおいて、 「未知の」問題に対する受け入れ率は低くなります。これは、中程度および難しい問題で特に顕著です。
  2. 「推論」または「思考」モードが有効になっているモデルは、すべての難易度の問題でより良い結果を出しましたが、正確な数値はモデルごとに異なります。

よく知られている問題に対する受け入れ率が著しく高いのは、それらの問題とその解決策がトレーニング セットの一部であり、モデルは既知の正しい解決策を再現するだけでよかったためと考えられます。ただし、新しい中程度および難しい問題に対するユーザーの受け入れ率も、「よく知られている」セットの問題よりも低くなっています。このケースは定量化が難しく、必ずしも新しい問題が「難しい」ことを意味するわけではありません。前述のように、難易度の評価は非常に主観的です。また、LLM 自体の場合と同様に、人間のユーザーがよく知られている問題に対して既知の正しい解決策を提出することもあります。

「推論」モードを有効にしたすべてのモデルは、基本モデルを大幅に上回るパフォーマンスを発揮しました。最も重要なのは、それらのいくつかが中程度から難しい問題のかなりの部分を解決することができたことです。これは、わずか1年前には実現不可能な成果でした。o3-miniは、すべての「推論」モデルの中で最も優れた結果を示しており、はるかに高価で遅いo1よりも優れたパフォーマンスを発揮しました。 o3-miniは特別に訓練された競技プログラミングの問題を解決するために。ただし、アルゴリズムの問題を解決するのにどのモデルが優れているかを結論付けることは控えます。これはトークンの予算に大きく依存し、レイテンシとコストも考慮する必要があるためです。

今後の検討事項

「目に見えない」問題セットがモデルのトレーニング データに含まれていないという保証はありません。これに対処するために、将来のベンチマーク用に特別に設計された新しい独自の問題を生成することを検討する可能性があります (もちろん、LLM を使用します)。

さらに、もう 1 つの戦略は、あまり一般的に使用されていないプログラミング言語を使用することです。このアプローチでは、LLM は Python で記述された既知の正しいコードを「コピー アンド ペースト」するのではなく、ソリューションを考案する必要があります。

これらのアイデアはさらなる研究が必要であり、他の誰かまたは私がそれらに深く取り組むことができればと思います。

リンク


カバー画像はDALL·Eが作成しました。

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks