ウィザードコーダー:最高のコーディングモデルとは何でしょう

「ウィザードコーダー:最高のファッションモデルとは何でしょうか?」 (Wizādo Kōdā Saikō no fasshon moderu to wa nan deshō ka?)

このブログでは、WizardCoderとは何か、そしてなぜそのモデルが最も優れたコーディングモデルとして際立っているのかについて深く掘り下げます。さらに、HumanEvalベンチマークでのパフォーマンスが優れている理由についても調査します。さらに、データセットの準備とファインチューニングプロセスがWizardCoderの成功にどのように貢献しているかを詳しく見ていきます。

まずはWizardCoderについての簡単な紹介から始めましょう。WizardCoderは、Llama2でファインチューニングされたCode Large Language Model(LLM)であり、他のオープンソースおよびクローズドLLMよりも優れたパフォーマンスを示しています。

出典:WizardCoder論文

WizardCoderの特徴

特にHumanEvalにおけるWizardCoderのパフォーマンスがどれほど優れているのかは、その比較的コンパクトなサイズを考慮すると、興味深い点です。WizardCoder-python-34BとCoderLlama-Python-34Bを比較してみましょう:

HumanEval Pass@1

WizardCoder-python-34B = 73.2%

CoderLlama-Python-34B = 53.7%

HumanEvalベンチマークのパフォーマンスにおけるこのような大きな違いの最も重要な要素は、モデルのトレーニングに使用されたデータセットです。

データの力: WizardCoderのユニークなデータセット

WizardCoderの優れたパフォーマンスに貢献している要素の一つは、そのトレーニングデータセットです。多くのモデルは、通常以下を含むデータセット構造に依存しています:

  • 多くのシンプルな命令を含む堅固なベース
  • 複雑な命令の削減量
  • 非常に複雑な命令の最小限の量
出典:https://www.youtube.com/watch?v=0R_2layS6Ho

評価ベンチマークでのピークパフォーマンスのためには、トレーニングデータセットにシンプルな命令、複雑な命令、そして非常に複雑な命令のバランスが必要です。

出典:https://www.youtube.com/watch?v=0R_2layS6Ho

ここでWizardCoderのデータセットが輝くのです。それは次の特徴を持っています:

  • 非常に複雑な命令の豊富な量
  • 複雑な命令の豊富な量
  • 多くのシンプルな命令を含む堅固なベース

しかし、課題もあります: 複雑な命令を含むデータセットを作成することは困難であり、一方でシンプルな命令は簡単に入手できます。

Evol Instruct

Evol-Instructは、LLM(GPT-4)を使用して多様で複雑な命令のデータセットを生成するための進化アルゴリズムです。これは、高品質な手作業によっては難しい命令をLLMに提供することで、LLMのパフォーマンスを向上させるために設計されています。

出典:https://www.youtube.com/watch?v=0R_2layS6Ho

単純な言葉で言うと、Evol-Instructは合成的に生成された(GPT-4)命令データセットの複雑性カスケードです。

命令の進化

LLMは特定のプロンプトを使用して、与えられた命令をより複雑で難解にすることができます。さらに、彼らは全く異なるが同じくらい複雑な新しい命令を生成することもできます。これにより、初期の命令データセットを反復的に進化させ、難易度を向上させ、その豊かさと多様性を拡大することができます。

A. 命令エボルバー

命令エボルバーは、プロンプトを使用して命令を進化(開発)させるLLMで、次の2つのタイプがあります:

  1. 詳細な進化。
  2. 幅広い進化

基底データセットが与えられます(例:自己指導によって生成されたアルパカ、または実際のユーザーによって共有された70k ShareGPT)そしてこの基底データセットを使用して、より複雑で多様なデータセットを作成することができます。

a) 詳細な進化

詳細な進化は、以下の5つのタイプのプロンプトを使用して命令をより複雑に難解にします:

詳細な進化のプロンプト

詳細な進化の目標は次のとおりです:

(i) 制約の追加

(ii) 深化

(iii) 具体化(より具体的に)

(iv) 推論ステップの増加

(v) 入力の複雑化

詳細な進化のプロンプトの中核部分は次のとおりです

「あなたの目標は、与えられたプロンプトをより複雑なバージョンに書き直して、それらの有名なAIシステム(例:ChatGPTとGPT4 [3])を少し扱いにくくすることです。ただし、書き直されたプロンプトは合理的であり、人間に理解され、応答される必要があります。」。

制約を追加する例示的なプロンプトは次のとおりです:

私はあなたにプロンプトリライトライターとして行動してほしいです。

あなたの目標は、与えられたプロンプトをより複雑なバージョンに書き直して、それらの有名な

AIシステム(例:ChatGPTとGPT4)を少し扱いにくくすることです。ただし、書き直されたプロンプトは合理的であり、人間に理解され、応答される必要があります。また、#Given Prompt#内のテーブルやコードなどのテキスト以外の部分を省略してはいけません。さらに、#Given Prompt#の入力を省略してはいけません。

次の方法を使って、与えられたプロンプトを複雑にしてください:

#Given Prompt#内に1つ以上の制約/要件を追加してください

#Rewritten Prompt#を冗長にしないように最善を尽くしてください,#Rewritten Prompt#は#Given Prompt#に10〜20ワードしか追加できません。

#Given Prompt#、#Rewritten Prompt#、’given prompt’、’rewritten prompt’は#Rewritten Prompt#に現れてはいけません

#Given Prompt#

<ここに命令があります。>

#Rewritten Prompt#:

これらのプロンプトは、他のタイプの詳細な進化に対しても同様のテンプレートを持つ複雑な命令データセットを生成するのに役立ちます。

b) 幅広い進化

幅広い進化は、オープンドメインの命令チューニングデータセット(例:アルパカ、ShareGPTなど)の制約に対処するためにあります。これらのデータセットはしばしばスケールが小さく、トピックとスキルの多様性が欠けています。幅広い進化は、与えられた命令に基づいて完全に新しい命令を生成するためのプロンプトを設計し、新しい命令がよりロングテールになることを要求します。

幅広い進化のプロンプト

幅広い進化の目標は次のとおりです:

1. トピックのカバー範囲の拡大

2. スキルのカバー範囲

3. 全体のデータセットの多様性

幅広いプロンプトは次のとおりです:

私はあなたにプロンプトクリエイターとして行動してほしいです。

あなたの目標は、#Given Prompt#からインスピレーションを得て、新しいプロンプトを作成することです。

この新しいプロンプトは、#Given Prompt#と同じドメインに属する必要がありますが、さらにまれであることが求められます。

#Created Prompt#の長さと難易度レベルは、#Given Prompt#のものと同じである必要があります。

#Created Prompt#は合理的である必要があり、人間に理解され、応答される必要があります。

#Given Prompt#、#Created Prompt#、’given prompt’、’created prompt’は#Created Prompt#に現れてはいけません。

#Given Prompt#:

«Here is instruction.>

#Created Prompt#:

B. レスポンス生成

同じLLMは、プロンプト:<Here is instruction>を使用して、進化した命令に対応するレスポンスを生成するために使用されます。

C. エリミネーション進化(命令除去)

進化した命令は、LLMに対してレスポンスを生成することに挑戦する場合があります。生成されたレスポンスが「sorry」という言葉を含み、長さが比較的短い(つまり、80語未満)場合、それはLLMが進化した命令に対応するのに苦労していることを示しています。したがって、このルールを使用して判断することができます。

LLMによって生成されたレスポンスは、句読点とストップワードのみを含みます。

D. 進化した命令に対するLLMの微調整

すべての進化が完了したら、初期の命令データセット(Alpacaの52K命令データセット)が、すべてのエポックからの進化した命令データと結合され、サンプルがランダムにシャッフルされて最終的な微調整データセットが作成されます。この処理により、データセット内の難易度の異なる命令が均等に分布し、モデルの微調整のスムーズさが最大限に確保されます。

Wizardlmは、進化した命令を使ってオープンソースのLLaMA 7Bを微調整し、そのパフォーマンスを評価し、モデルの名前をWizardLMとすることでEvol-Instructを検証します。

Evol-Instructは、初期命令のプール(Alpacaの52k命令データセット)を生成し、その後一連のステップでより複雑で多様な命令を生成することで機能します。命令プールが生成されたら、それを使用してLLMを微調整し、WizardCoderという新しいモデルが生成されます。微調整プロセスは、LLMを命令データでトレーニングして、異なる入力に対して連続的かつ流暢なテキストを生成する能力を向上させることを含みます。

プロンプトの形式

WizardCoderの場合、プロンプトは以下のようになります:

以下は、タスクを説明する命令です。要求を適切に完了するレスポンスを書いてください。### Instruction:{instruction}### Response:

最適な使用例

WizardCoderは、コード関連のさまざまなタスクに使用することができます。コードの生成、コードの補完、コードの要約などが含まれます。以下は、モデルと共に使用できる入力プロンプトのいくつかの例です:

  • コードの生成: プログラミングタスクの説明を与えられた場合、対応するコードを生成します。例:「入力として整数のリストを受け取り、リスト内の偶数の合計を返すPythonの関数を書いてください。」
  • コードの補完: 不完全なコード断片が与えられた場合、コードを補完します。例:「def multiply(a, b): \n return a * b _」
  • コードの要約: 長いコードスニペットが与えられた場合、コードの要約を生成します。例:「CSVファイルを読み込んで特定の列の平均値を計算するPythonプログラムを書いてください。」

34Bモデルは、単なるコーディングアシスタントにとどまらず、次のようなパワーハウスとしての機能を持っています:

  1. DevOpsスクリプトの自動化: タスクの自動化のためのシェルスクリプトやPythonスクリプトを生成します。
  2. データ分析: データの前処理、分析、可視化のためのPythonコードを生成します。
  3. 機械学習パイプライン: データ収集からモデル展開までのエンドツーエンドの機械学習パイプラインを生成します。
  4. Webスクレイピング: Webスクレイピングタスクのためのコードを生成します。
  5. API開発: RESTful APIのための雛形コードを生成します。
  6. ブロックチェーン: Ethereumや他のブロックチェーンプラットフォーム向けのスマートコントラクトを生成します。

評価

WizardCoderは、人間評価、HumanEval+、MBPP、およびDS-100の4つのコード生成ベンチマークに関する実験的な調査結果によれば、他のオープンソースのコードLLMを凌駕し、最新技術(SOTA)のパフォーマンスを達成しています。

WizardCoder-Python-34Bは、コード関連のタスクにおいて卓越したパフォーマンスを発揮しています。このモデルは、主要なコード生成ベンチマークで他のオープンソースおよびクローズドなLLMを上回っており、HumanEval(73.2%)やHumanEval+、MBPP(61.2%)を凌駕しています。

WizardCoder-Python-34B-V1.0はHumanEval Benchmarksで2位を獲得し、GPT4(2023/03/15、73.2 vs. 67.0)、ChatGPT-3.5(73.2 vs. 72.5)、およびClaude2(73.2 vs. 71.2)を上回っています。

出典: WizardCoder論文

WizardCoder-15B-v1.0モデルはHumanEvalベンチマーク57.3 pass@1を達成しており、StarCoder、CodeGen、CodeGee、およびCodeT5+などのSOTAオープンソースのCode LLMSよりも22.3ポイント高い成績を収めています。さらに、WizardCoderはInstructCodeT5+、StarCoder-GPTeacher、およびInstruct-Codegen-16Bを含む、すべてのオープンソースのCode LLMS with instructions fine-tuningを大幅に上回っています。

出典: WizardCoder論文

結論として、WizardCoderの成功は、その独自のデータセットとEvol-Instructの革新的な活用による、さまざまなコード関連のタスクとベンチマークでの優れた性能に起因しています。

参考文献

YouTube: WizardCoder 34B: 複雑なFine-Tuningの説明

GitHub

論文: WizardLM- Empowering Large Language Models to Follow Complex Instructions

論文: WizardCoder: Evol-Instructを用いたコード大規模言語モデルの強化

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

「IntelのOpenVINOツールキットを使用したAI最適化と展開のマスタリング」

イントロダクション 人間の労働力を置き換えるAIの影響が増しているため、私たちはほぼ毎日AIについて話題にしています。AIを...

AIニュース

ジャーナリズムでのAIの受容 - ニュースカルーセル

最近のジャーナリズムAIの調査によると、LSEのポリスシンクタンクのプロジェクトによると、調査対象の世界のニュース機関の75...

AIテクノロジー

「生成AIに関する一般的な迷信を解明する 網羅的な探求」

イントロダクション テクノロジーは常に変化しており、生成的人工知能は近年の最も革命的な進展の一つです。この革新的な技術...

機械学習

オラクルは、AIとクラウドを基盤とした未来のビジョンを明らかにしました

ラリー・エリソンは、生成的AIが変革的であり、エンタープライズAIアプリケーションの構築におけるOracle Cloudの独特な利点...

機械学習

「イギリスのテックフェスティバルが、クリエイティブ産業でAIを活用するスタートアップ企業を紹介する」

英国最大的技术节之一,企业和初创公司本周正展示他们最新的创新成果,举办研讨会,并庆祝位于英国西南部的技术生态系统的不...