コードを解読する LLMs

美容とファッションの世界を解読するLLMs' (Biyō to fasshon no sekai o kaidoku suru LLMs)

コードLLMの進化:RNNからトランスフォーマーへ

Photo by Markus Spiske on Unsplash

イントロダクション

近年、トランスフォーマーの導入により、言語モデルの進化が目覚ましいものとなっています。これにより、メールの作成、文書作成、ウェブ検索、コーディングなど、日常のタスクの方法が革新されました。研究者たちは大規模言語モデルをコードインテリジェンスタスクに適用し、新たな領域である「ニューラルコードインテリジェンス」が生まれました。この領域は、コードの要約、生成、翻訳などのタスクを解決することで、ソフトウェア業界におけるプログラミング効率の向上と人間エラーの最小化を目指しています。

最新のCode LlamaであるMeta AIによる最先端のモデルを用いて、この記事ではRNNからトランスフォーマーへと進化した大規模言語モデル(LLM)をコーディングの観点から振り返ります。

Fig-1: A timeline for Large Language Models For Code. Image by Author.

Code2Vec、2018年

これはコード理解のための最初の試みの一つでした。Code2Vecは、コードスニペットを埋め込みに変換することを目指していました。これらの埋め込みは、コードから意味的および構造的な情報を抽出し、コードの分類、検索、理解などのさまざまなソフトウェアエンジニアリングタスクに役立ちます。

モデルは、コードスニペットからメソッド名を予測するため、適切なトークンとAST(抽象構文木)パスをエンコードし、集約するためにニューラルアテンションを適用します。

Fig-2: Code2Vec Model Architecture: Program is first decomposed into Bag of Context which includes tokens and AST paths, then through fully connected layer and attention layer to generate code-vector.Image inspired from the original paper by Uri Alon et. al from Code2Vec

トレーニングセット:14MのJavaプログラム例モデルアーキテクチャー:RNN + フィードフォワードネットワーク新規性:

  • パスベースのアテンションモデル:著者たちは、コードスニペットの抽象構文木(AST)の構文パスを入力特徴として使用する、新しいニューラルネットワークアーキテクチャーを提案しています。モデルは、各パスに異なるアテンション重みを割り当て、それらを単一のコードベクトルに集約することを学習します。コードベクトルは、スニペットのラベル分布を予測するために使用することもでき、スニペット間の類似性や類推を測定するためにも使用できます。

モデルをここで試すことができます

CodeBERT、2020年

マイクロソフトリサーチチームによって開発されたCodeBERTは、大規模言語モデル(LLMs)の領域において、自然言語とプログラミング言語(NL + PL)の多様なデータプリトレーニングを導入することにより、重要な進展を遂げました。このモデルは、TransformerベースのBERTモデルにおいて、マスキング言語モデリング(MLM)および置換トークン検出(RTD)タスクのためのバイモーダルデータポイント対および単一モードデータポイントでトレーニングされます。CodeBERTは多岐にわたるドメインで優れた性能を発揮し、特に自然言語コード検索やコードからドキュメント生成において優れた成果を上げました。

Fig-3: CodeBERTモデルの事前トレーニングには、Replace Token Detection(RTD)タスクを使用します。自然言語生成とコード生成により、トークンを別のトークンに置き換え、CodeBERTモデルは各トークンを置換されたものか元のものかを分類するように訓練されます。画像はFeng et. alのCodeBERTから取得されました。

トレーニングデータセット: Codesearch Net Dataset – 2.1Mのバイモーダルデータポイント(自然言語 + プログラミング言語)、6.4Mの単モーダルデータポイント(Python、Java、Javascript、PHP、Ruby、Goの6つの言語)パラメータサイズ: 125Mモデルアーキテクチャ: RoBERTa-base新機能:

  • バイモーダルトレーニング: CodeBERTは自然言語とプログラミング言語のトークンの両方を含む革新的なトレーニング手法を導入しています。このバイモーダルトレーニング技術により、モデルは人間が読める説明とプログラミング言語の要素の複雑な相互作用を考慮してコードを理解し、生成する能力が向上します。
  • コードの置き換えトークン検出(RTD)タスク: CodeBERTの事前トレーニングには、Next Sentence Prediction(NSP)ではなくReplace Token Detection(RTD)が使用され、より優れた性能を示しました。

Codex、2021年

Codexは、高い精度でドックストリングや自然言語のプロンプトからコードを生成する最初の成功したCode LLMの1つであり、広く使用されているGithub Copilotの前身です。 OpenAIチームによって開発されたCodexは、GPT3のアーキテクチャとトークナイザーを使用し、大規模なGithubコードのコーパスで事前トレーニングされます。この大規模な言語モデルは12Bのパラメータを持ち、2021年の最先端モデルであり、human-evalデータセットで最初のパスで28.8%の問題を解決しました。

単独のPython関数に対してモデルのさらなる微調整が行われ、human-evalデータセットの問題の37.7%を解決することができました。

Fig-4: Codex GPTモデルで使用されるデコーダーのみのTransformerアーキテクチャ。Vaswani et. alの元のTransformer論文に触発された画像です。

トレーニングデータセット: 54MのGithubリポジトリからの159GBのPythonファイル。パラメータサイズ: 12B(Codex-12B)モデルアーキテクチャ: GPT3新機能:

  • 自然言語のプロンプトからコードを生成する能力に優れた最初の成功したモデルの1つ。これにより、GPT-3モデルは大規模なGithubリポジトリのコーパスでトレーニングされます。
  • このモデルの著者は、コード生成タスクのモデルをベンチマークするための新しいデータセットHumanEvalを作成しました。このデータセットは、ユニットテストを持つ手書きのプログラミング問題164問で構成されています。

OpenAI PlaygroundでCodexモデルを試す

CodeT5、2021

Code-T5は、T5アーキテクチャに基づいたエンコーダーデコーダーモデルであり、CodeBERT(エンコーダーのみ)およびCodex(デコーダーのみ)モデルとは異なるものです。コード内の識別子を区別し回復するための独自の識別子認識ノイズ除去事前学習タスクを導入しており、構造の理解を高めています。

Code-T5は、コード欠陥検出、クローン検出、コード翻訳、およびリファインメントといったさまざまなタスクにおいて、マルチタスク学習により優れた性能を発揮し、より迅速な微調整のために少ないデータを必要とします。ただし、人間の評価データセットに対してベンチマークを行うのではなく、CodeBleuスコアを使用して評価を行います。

Fig-5: CodeT5がさまざまなコード理解と生成タスクで優れた性能を発揮する様子を示す図。Wangらの論文「CodeT5」から取得した画像

訓練データセット: Codesearch Net Dataset(CodeBERTと同じ)パラメータサイズ: 220Mモデルアーキテクチャ: T5(エンコーダーデコーダーアーキテクチャ)新しさ

  • エンコーダーデコーダーモデル: コード理解およびコード生成タスクの両方をサポートする最初のエンコーダーデコーダーコードLLMの1つ。
  • 識別子認識に関する新しい事前学習目的identifier-aware denoisingを提案し、トークンタイプ情報とコードの構造を学習します。この手法により、モデルは識別子(変数名、関数名)とPLキーワード(if、whileなどのような)とを区別し、マスクされた識別子を復元することができます。
  • 微調整ステージでのマルチタスク学習: コード欠陥検出、クローン検出、コード翻訳、リファインメントなどのさまざまなコード関連タスクに同時に適用して微調整を行います。

PLBart、2021

PLBART、またはProgram and Language BARTモデルは、BARTモデルアーキテクチャを活用してソフトウェアエンジニアリングのさまざまなタスクを自動化し、PLUG(Program and Language Understanding and Generation)の範囲内でコードの要約、生成、および翻訳を包括的に行います。

これは、BERTとGPTモデルの強みを組み合わせた改善されたプログラムと言語の理解を行うためのノイズ除去シーケンスツーリーコモデリング手法を導入しています。これには、双方向エンコーダーと自己回帰デコーダーを組み合わせることにより、より包括的な文脈の把握と柔軟な生成プロセスが可能となります。モデルは、トークンマスキング、トークン削除、トークン補完といった3つのノイズ除去戦略を組み合わせて、効果的な訓練と微調整を行います。

Fig-6: BARTモデル(PLBartでも使用)のアーキテクチャを可視化する図。オリジナルBART論文(<a href=BART paper)からの画像” src=”https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*ALWss1SNCJSr3kuKvH5Lgw.png”/>

訓練データセット: Github、Stackoverflowから収集された2MのJavaとPythonの関数およびそれらの自然言語の説明(コードパラメータサイズ: 140M(6エンコーダーレイヤー+6デコーダーレイヤー+エンコーダーおよびデコーダーに追加のノームレイヤー)モデルアーキテクチャ: BART新しさ

  • デノイジングオートエンコーダーアプローチ:エンコーダーとデコーダーの双方向性と自己回帰性を効果的に活用することで、コードの理解と生成を向上させるデノイジングオートエンコーダーアプローチを採用し、BERTモデルとGPTモデルの強みを組み合わせています。
  • 多様なノイジング戦略:トークンマスキング、トークンの削除、トークンの埋め込みなど、複数のノイジング戦略を提案しています。これにより、ノイズのあるデータからの学習において、モデルの頑健性と効果を向上させ、コードの理解と生成を改善する貢献をしています。

すべてのモデルがパフォーマンスを評価するために同じベンチマークを使用するわけではありません。PLBARTの著者は、ベンチマーキングにおいて他のほとんどのモデルが使用するHumanEvalデータセットでモデルのパフォーマンスを評価していません。

Code Llama, 2023

Code Llamaは、Metaによってリリースされた最新のCode LLMであり、複数のベンチマークデータセットで既存のオープンソースモデルを凌駕しています。HumanEvalデータセットでは53%、MBPPデータセットでは55%のスコアを獲得しています(GPT-4のみがより優れたパフォーマンスを持つ)。これらの利点は、16Kのより長いコンテキスト長(Llama2の4倍)と、プログラムと自然言語の追加の500Bトークンからトレーニングされた事前トレーニング済みLlama 2に起因しています。

このモデルは、コードの生成と埋め込みのタスクに最適であり、IDEベースのソフトウェア開発中の最高の共同作業者として機能します。Code Llamaモデルファミリーには、以下の3種類のモデルがあります-

  1. Code Llama
  2. Code Llama Python
  3. Code Llama-Instruct

それぞれのモデルは、7B、13B、34Bの3つのサイズで提供されます。

Fig-7: Code Llama training and fine-tuning pipeline taking pre-trained Llama-2 model as input. Image from original Code Llama paper by Rozière et. al.

トレーニングデータセット:公開されているコードに対して500Bトークン+Code llama Pythonに対して追加の100Bトークンモデルアーキテクチャ:Llama 2パラメータサイズ:7B、13B、34Bの3つのサイズで利用可能革新性

  • Long Context Fine-Tuningと呼ばれる長いシーケンスを処理するためのファインチューニングステップを提案し、コンテキストの長さを16,384(Llama 2のコンテキストの長さの4倍)に増やします
  • Instruction Fine Tuning & Self-Instruct:ファインチューニングプロセス中に明示的な指示またはプロンプトを使用する、数少ないモデルの1つです。高価な人間のフィードバックデータを作成する代わりに、著者たちは自己指示データセットを構築するための革新的な実行フィードバックアプローチを提案しています。

結論

Open AIの創設者の1人であるAndrej Karapathyは最近、TransformersをAIの最高のアイデアと評しました。彼は、トランスフォーマーが同時に表現力、最適化可能性、効率性(X post)を持つ汎用差分可能コンピュータのようだと付け加えました。過去3〜4年間にもたらした変革から明らかなように、トランスフォーマーモデルはソフトウェアエンジニアとしてのコーディング方法の風景をさらに変える可能性を持っており、これはまさに始まりに過ぎません。

もっとフォローしてください!

私はリンクトインのスタッフMLエンジニアです。私をLinkedInTwitterでフォローしてください。さらなるクイックチャットのためには、Topmate.ioへお気軽にお問い合わせください。

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