コードモデルをサポートするプログラミング言語
研究によると、プログラミング言語同士がコード生成のパフォーマンスを向上させることができるらしい。
― 1 分で読む
プログラマーが新しいプログラミング言語を学ぶとき、すでに別の言語を知っていると、よくあることだけど、もっと簡単になることが多いんだ。この考えから、プログラミング言語がコードを理解する大規模な言語モデルのトレーニングでお互いをサポートできるかどうか考えてみたんだ。
このレポートは、異なるプログラミング言語がコードモデルのファインチューニング段階でお互いの能力を向上させられるかどうかをテストすることに焦点を当てているよ。Python、JavaScript、TypeScript、C、C++、Java、Go、HTMLなどの人気のプログラミング言語を使ってStarCoderっていうモデルで一連の実験を行ったんだ。テストの結果、プログラミング言語が本当にお互いを改善できることがわかった。
例えば、PythonでトレーニングされたモデルがJavaでトレーニングされたモデルのパフォーマンスを引き上げることができて、正解の数が増えたんだ。さらに驚いたことに、HTMLでのトレーニングもJavaに良い影響を与えたんだ。これにより、私たちが作ったトレーニングデータがさらに探求するための重要なリソースになり得ることを示唆しているよ。
コードモデルの台頭
最近、大規模な言語モデルによるコード生成が急増している。Codex、AlphaCode、StarCoderといった異なるモデルが開発され、コード生成において印象的な能力を示しているんだ。彼らのパフォーマンスは学術や産業などさまざまな分野から注目を集めている。
最近注目を集めている技術の一つが「インストラクションチューニング」と呼ばれるもの。これは、モデルに指示に従う能力を向上させるための方法なんだ。一部のモデルはこの技術を使ってコード生成能力を高めている。多くのモデルが複数のプログラミング言語でトレーニングされているけど、これらの言語間の相互作用についてはまだ十分に評価されていないんだ。
実際、プログラマーが言語を学ぶと、その後の新しい言語をつかむのが簡単になるのは、構造や文法に似てるところがあるからだよ。この理解が、さまざまなプログラミング言語がコードモデルのインストラクションファインチューニング中にお互いを改善できるかどうかを調査する動機になったんだ。
トレーニングデータの作成
このアイデアを探るために、まず選んだプログラミング言語ごとにデータを集めて、各セットに約決まった数の演習が含まれるようにしたんだ。各演習は、プログラミングタスクを説明する指示と、それに対応する解決策のペアになっている。例えば、HTMLのタスクの一つは、「Hello, World」を表示するシンプルなウェブページを作ることかもしれない。
各プログラミング言語に対して、トレーニングデータを生成したよ。最初に既存のデータセットを使って、有用なPython関連のデータを抽出して、それから選んだ各言語のために、関連する新しい指示を作るためにこれらの指示を修正したんだ。HTMLは他のプログラミング言語とかなり違うから、ただ既存のものを修正するのではなく、完全に新しい指示を作ることに焦点を当てたよ。
インストラクションチューニングプロセス
CodexやStarCoderのような事前トレーニングされたモデルは、コーディングに関する多くの知識を持っている。でも、最初はただ直近の文脈だけでコードを生成するから、理解が制限されちゃう。最近のインストラクションチューニングの技術は、モデルの指示に従う能力を向上させ、より良いコード生成を可能にするために設計されているんだ。
インストラクションチューニングの段階では、StarCoderを特別なプロンプトを使ってトレーニングして、その学習を豊かにしたよ。トレーニングは、情報を効率よく処理できる技術を活用してスピードアップしたんだ。チューニング後、さまざまなプログラミングタスクに基づいてモデルがどれくらいコードを生成できるかを評価したよ。
パフォーマンスの評価
モデルのパフォーマンスを測るために、Python、JavaScript、C++、Java、Goなどの異なる言語で多言語能力をテストするために設計された特定のベンチマークを使ったんだ。既存の評価タスクを新しいプログラミング言語に適用するように調整しつつ、課題を考慮したよ。
主な焦点は、言語Aでのトレーニングが言語Bでのパフォーマンス向上に寄与するかどうかを見ることだったんだ。全てのテスト結果は基準モデルと比較されて、改善点を特定したよ。全てのテストに合格すると、そのタスクは解決済みと見なされて、モデルの精度を定量化する簡単な方法が提供されたんだ。
主な発見
モデルのパフォーマンスは、全てのプログラミング言語で基準モデルを大きく上回ることを示したんだ。例えば、Pythonでトレーニングされたモデルは、Javaタスクを解く能力において顕著な改善を示したよ。結果は、改善が言語の関連性に影響されることを示している。例えば、JavaScriptとTypeScriptは一緒にトレーニングされることで高いレベルの向上を示したんだ。
さらに、一部のモデルは共通の特徴を持つ言語でトレーニングされたときに、驚くべき改善を達成できることがわかったよ。これらの観察から得られる理解は、コード生成の向上が新しい知識の単なる追加ではなく、インストラクションチューニングプロセスに密接に関連している可能性があることを示唆している。
言語の相関分析
異なるプログラミング言語がどのように関連しているかを詳しく見たよ。分析の結果、1つの言語でモデルをトレーニングすると、他の全ての言語のパフォーマンスが向上することがわかった。類似した文法や構造を持つ言語は、より大きな相互利益を提供できることが示されたんだ。
評価の中で、CとC++のような言語は、お互いのパフォーマンスを大きく向上させることができたし、JavaScriptとTypeScriptも同様だった。この言語間の相関は、共通の特徴がスムーズな学習プロセスを促進することを示唆しているよ。
今後の方向性
この結果は、コード生成やプログラミング言語の研究に新たな道を開いている。異なる言語がどのようにお互いを支援できるのか、その理由を探るつもりだよ。目指すのは、これらの発見を活用して、あまり一般的でないプログラミング言語のコード生成を改善する方法を探すことなんだ。
要するに、私たちの研究はプログラミング言語がインストラクションチューニング段階でお互いに良い影響を与えることを示した。この発見は、さまざまなプログラミング言語のつながりを強調し、コード生成の分野での今後の研究の扉を開くことになる。私たちはこのトレーニングデータを広いコミュニティと共有して、このエキサイティングな研究分野をさらに探求することを楽しみにしているよ。
タイトル: Can Programming Languages Boost Each Other via Instruction Tuning?
概要: When human programmers have mastered a programming language, it would be easier when they learn a new programming language. In this report, we focus on exploring whether programming languages can boost each other during the instruction fine-tuning phase of code large language models. We conduct extensive experiments of 8 popular programming languages (Python, JavaScript, TypeScript, C, C++, Java, Go, HTML) on StarCoder. Results demonstrate that programming languages can significantly improve each other. For example, CodeM-Python 15B trained on Python is able to increase Java by an absolute 17.95% pass@1 on HumanEval-X. More surprisingly, we found that CodeM-HTML 7B trained on the HTML corpus can improve Java by an absolute 15.24% pass@1. Our training data is released at https://github.com/NL2Code/CodeM.
著者: Daoguang Zan, Ailun Yu, Bo Shen, Jiaxin Zhang, Taihong Chen, Bing Geng, Bei Chen, Jichuan Ji, Yafen Yao, Yongji Wang, Qianxiang Wang
最終更新: 2023-09-03 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2308.16824
ソースPDF: https://arxiv.org/pdf/2308.16824
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。