最新AI論文をキャッチアップ

【IRCoder】中間表現により言語モデルが堅牢な多言語コードジェネレーターに

【IRCoder】中間表現により言語モデルが堅牢な多言語コードジェネレーターに

Computation and Language

3つの要点
✔️ 異なるプログラミング言語間での情報の転送や、コード生成の精度向上のためには、コンパイラの中間表現が有用
✔️ 実験から、IRを利用することが異種言語コードの理解やパフォーマンス向上に有益であることが分かった

✔️ コード理解や生成の能力を向上させるための新たな手法やツールが開発される可能性がある

IRCoder: Intermediate Representations Make Language Models Robust Multilingual Code Generators
written by Indraneil Paul, Jun Luo, Goran Glavaš, Iryna Gurevych
(Submitted on 6 Mar 2024)
Comments: Published on arxiv.

Subjects:  Artificial Intelligence (cs.AI); Computation and Language (cs.CL); Programming Languages (cs.PL)

code:  

本記事で使用している画像は論文中のもの、紹介スライドのもの、またはそれを参考に作成したものを使用しております。  

概要 

この研究は、コード生成における言語モデル(LM)の発展に焦点を当てています。従来のLMは、主に自然言語テキストに焦点を当ててきましたが、コード生成においては新たな進展が見られます。特に、異なるプログラミング言語間での情報の転送や、コード生成の精度向上のためには、コンパイラの中間表現が有用である可能性があります。

この研究では、SLTransと呼ばれる大規模なデータセットを活用し、中間表現を介したコード生成モデルのトレーニングを行いました。SLTransには、異なるプログラミング言語の中間表現と約400万の自己完結型ソースコードファイルが含まれています。そして、さまざまなサイズの基本的なCode-LMを利用し、中間表現に基づいた因果言語モデリングのトレーニングを行いました。この結果、IRCoderというモデルが開発されました。IRCoderは、多言語コード生成タスクにおいて、即時の堅牢性やコード理解の向上を示し、多様なコード生成タスクにおいて一貫した改善をもたらします。

はじめに

従来、Code-LMのベンチマークは主にPythonなどのリソースが豊富な言語に限定されていましたが、実際にはすべてのプログラミング言語におけるコード生成の需要があります。最近のベンチマークでは、異なるプログラミング言語間でのCode-LMのパフォーマンスの差が明らかにされています。例えば、Bashなどの言語ではPythonよりも遅れが生じています。

この問題は、コードコーパスの偏りやプログラミング言語の急速な変化によってさらに悪化しています。従来のアプローチでは、このような多様性を考慮するのが難しいため、新しい方法が必要です。この研究では、コンパイラの中間表現(IR)を活用し、異種言語間でのコード理解の基盤として提案されています。IRはプログラミング言語やプラットフォームに依存しない中間表現であり、多言語コードLMのための理想的な共有表現として利用されます。

関連研究

ここでは、コード生成モデルの開発における重要な作業ラインについて提供します。

まず、高品質の事前トレーニングデータのキュレーションが挙げられています。これは、ドメイン固有のデータを選別し、効率的なLMの事前トレーニングに役立つとされています。例えば、Phi-1などのモデルは、わずか70億のトークンでトレーニングされ、同等のパフォーマンスを示しています。

次に、ツールチェーンのメタデータによる基礎付けが行われます。これは、コンパイラの出力から情報を取得し、ソースコードの理解を支援するために活用されます。例えば、抽象構文ツリー(AST)をエンコードする手法が挙げられています。

最後に、言語間の移転と調整については、多言語モデルのトレーニングにおいてトレーニング言語の数やリソースの割合が変化することによるパフォーマンスの低下を避けるための取り組みが必要であることが強調されています。特に、中間コンパイラ表現(IR)を使用して事前トレーニングを行うことで、トレーニングされたモデルが非英語の言語間での言語間転送を促進し、下流のタスクでのパフォーマンスを向上させる可能性が示唆されています。 

提案手法

ここでは、SLTransと呼ばれるLLVM IR変換ペアデータセットの作成手法について説明します。下の表は、プログラミング言語間の SLTrans の内訳 を示しています。

まず、このデータセットは、低、中、高リソースのプログラミング言語が混在する並列ソースIRデータを取得することを目指しています。これには、ソースコードをLLVM IRに変換する作業が含まれます。LLVMは、その普及度と人間が判読可能なIR標準を維持するなどの利点から、中間表現として選択されました。下の表は、並行データソーシングとトレーニング目標の概要です。

次に、LLVM IRを取得するためにいくつかの課題が挙げられています。例えば、依存関係の追跡やコンパイル可能なコード単位の取得の難しさなどがあります。これらの問題を解決するため、プログラミングコンテストの問題など、自己完結型のコンパイルユニットを利用しています。

そして、取得したソースファイルをサイズ最適化IRとパフォーマンス最適化IRにコンパイルし、サイズが最適化されたIRとパフォーマンスが最適化されたIRの両方を収集しています。最後に、MinHashベースの重複排除を行い、最終的なSLTransデータセットが作成されました。このデータセットには、12のプログラミング言語にわたる約400万のサンプルと、合計262億トークンが含まれています。

実験

設定とデータ

まず、異種言語間でのマッチング構造を確立し、言語間の転送を促進するために、LLVM IRを利用します。実験では、ヘッダーデータを削除し、IRから余分な情報を取り除きます。その後、80%の確率でサイズ最適化されたIRを選択し、残りの20%にはパフォーマンス最適化されたIRを選択します。

次に、トレーニングコーパスを準備するために、UniMax-1サンプリングを使用してトークンレベルでサブサンプリングを行います。また、トレーニングコーパスには、TheStackから2億トークンのオープンドメインIRコード、高品質のコードとテキストデータ、さらにはOpenWebMathデータセットからの数学記事などが含まれます。

そして、トークン予算を確保し、サイズが1.1Bから7.3Bのパラメーターを持つ3つの異なるプロバイダーの6つの異なるCode-LMでIRグラウンディングの影響をテストします。これらのモデルには、StarCoderBase、DeepSeekCoder、CodeLlamaなどが含まれます。

最後に、モデルのトレーニングを実行します。これには、2つの新しいセンチネルトークンを導入し、埋め込みをガウス分布からランダムに初期化します。トレーニングにはLoRAに依存し、DeepSpeed Zero Stage-2を利用してトレーニングジョブを加速します。Adamオプティマイザーを使用し、最大シーケンス長4096トークンでトレーニングします。

結果と考察

まず、ソースコードとIRの組み合わせの重要性を調査しました。この目的のために、ソースコードとIRのペアを持つデータでトレーニングされたモデルのパフォーマンスを、ペアがない場合のソースコードと比較しました。結果は、ペアデータがない場合にもある程度のパフォーマンス向上が見られますが、ペアデータを追加することで得られるゲインよりも小さいことを示唆しています。これは、異種ソースコード言語を同じIRに固定することが、単にIRに曝露されるだけでなく、パフォーマンス向上の大部分を占めることを示唆しています。

次に、IRでのグラウンディングが、Code-LMの摂動耐性にどのような影響を与えるかを調査しました。結果は、IRに基づいている場合、特に構文のバリエーションに対する堅牢性が向上することを示しています。

そして、IRでのグラウンディング後のモデルの多言語コード補完と理解機能をテストしました。結果は、IRでトレーニングされたモデルがすべての多言語ベンチマークで基本LMよりも大幅に向上していることを示しています。

最後に、IRでのグラウンディングが次の指示にも及ぶかどうかをテストしました。結果は、IR接地がパフォーマンスの向上をもたらし、命令チューニングの利点が最も強力な基本モデルで最も明らかであることを示しています。 

これらの結果は、IRを利用することが異種言語コードの理解やパフォーマンス向上に有益であることを示唆しています。

結論

この研究では、異なるプログラミング言語のソースコードを共通の中間表現であるIRに変換することが、コード理解と生成の能力にどのような影響を与えるかを調査しました。

研究者は、これらの結果が中間コード表現の組み込みに関する広範な研究活動を促進することを期待しています。そして、これにより、コード理解や生成の能力を向上させるための新たな手法やツールが開発される可能性があります。

 
  • メルマガ登録(ver
  • ライター
  • エンジニア_大募集!!

記事の内容等について改善箇所などございましたら、
お問い合わせフォームよりAI-SCHOLAR編集部の方にご連絡を頂けますと幸いです。
どうぞよろしくお願いします。

お問い合わせする