Simple Science

最先端の科学をわかりやすく解説

# コンピューターサイエンス# 計算と言語

大規模データセットを使ったコード表現学習の向上

新しい方法が、大量のデータとトレーニング技術でコードの理解を向上させる。

― 1 分で読む


コード学習の上級テクニックコード学習の上級テクニックコードの理解が高まる。新しい方法で、広範なデータセットを通じて
目次

最近の人工知能の進歩により、コードを理解したり生成したりできる強力なモデルが作成されました。これらのモデルは、コード生成やコードスニペットの検索を改善するのに特に役立ちます。しかし、既存の方法の多くは、トレーニングに限られた量のデータを使用しているため、パフォーマンスが妨げられることがあります。このディスカッションでは、大規模なデータセットを使用することでコード表現学習の効果がどのように向上するかに焦点を当てます。

コード表現学習の現在の課題

現在の多くのモデルは数億のパラメータでトレーニングされていますが、少量のプレトレーニングデータに依存していることが多いです。これにより、さまざまなタスクでうまく機能しないモデルが生まれることがあります。私たちは、大量のコードデータを使用してモデルを二段階でトレーニングする方法を提案します。

最初の段階では、さまざまな技術を用いてモデルがコードの構造を理解するようにトレーニングします。これには、マスキング言語モデルという技術を用いて、モデルがコードの欠けている部分を埋める学習を行います。第二段階では、対比学習を通じてこの理解をさらに洗練します。この方法は、類似したコードの断片を区別することに焦点を当て、モデルがより良い表現を学べるようにします。

二段階トレーニングプロセス

私たちのアプローチでは、まず大量のコードデータを使用する二段階プレトレーニングプロセスを行います。このプロセスは、2つの主要なステップから成ります。

  1. 初期トレーニング: ここでは、さまざまな技術を用いてモデルをトレーニングします。中でも、ランダムトークンマスキングを使って、一部のコードを隠してモデルがそれを推測できるかを見る実験を行います。また、プログラミング言語の構造にも注目して、トレーニングをより効果的にします。

  2. 洗練: この段階では、対比学習を用いてモデルの能力を改善します。このプロセスでは、似ているコードのペア(ポジティブペア)と異なるコードのペア(ネガティブペア)を作成します。これにより、モデルは微細な違いを区別する能力を高めます。

データサイズと特徴の重要性

最近の研究では、大規模データセットでトレーニングされた大規模言語モデルがコード生成タスクで著しくパフォーマンスが向上することが示されています。例えば、6TBのソースコードを含むデータセットは、これらのモデルができることの限界を押し広げるのに不可欠です。しかし、ただ大量のデータがあっても十分ではありません。このデータでモデルをどのようにトレーニングするかも同じくらい重要です。

従来のマスキング言語モデルの方法は、プログラミングタスクには理想的でないことがよくあります。元の80-10-10マスキングスキームは、大部分のトークンを[MASK]トークンで置き換えるため、コードの意味を妨げることがあります。変数名などのトークンがランダムに置き換えられると、学習成果が悪化することがわかりました。代わりに、コード構造の整合性を維持するマスキング戦略を推奨します。

鑑別力の強化

初期トレーニングステップでは文脈に基づくトークン表現を作成することに焦点を当てていますが、多くの実用的なアプリケーションでは、モデルがコードのシーケンスを解釈したり生成したりすることが求められます。モデルの鑑別能力を強化する際には、対比学習が重要になります。

対比学習では、密接に関連する例のペア(ポジティブペア)と異なる例のペア(ネガティブペア)を作成します。これにより、モデルは類似したトークンと異なるトークンを効果的に区別することができます。

ソースコードのための双方向表現モデル

私たちは、ソースコードを理解するために特別に設計された新しいモデル、双方向エンコーダ表現モデルを提案します。このモデルは、大規模データセットと二段階トレーニングアプローチを使用してプレトレーニングされており、利用可能なデータを最大限に活かすことができます。

最初のトレーニングステップでは、モデルは難読化された変数名の意味のある名前を特定することを学びます。これは、コードの根底にある意味を理解することを必要とし、まるで人間のプログラマーのように行います。残りのコードについてはマスキングを行い、モデルが包括的な理解を発展させることを確保します。

ハードネガティブとハードポジティブを使った対比学習

第二のステップでは、自然に発生するテキストとコードの関係からポジティブペアを作成します。例えば、関数定義と関連するコメントを組み合わせることで、モデルのコードと自然言語の理解をさらに一致させることができます。

しかし、ネガティブペアを作成するのはより難しいです。私たちは距離ベースの方法を利用して、同一ではないが意味的な類似性を持つ例を特定します。このプロセスにより、モデルは微妙な違いに焦点を当てることができるようになります。

トレーニングと評価方法

私たちは、Python、Java、JavaScriptなどの多様なプログラミング言語でモデルをトレーニングします。こうすることで、モデルが多様でさまざまなコーディングタスクに適用可能であることを確認します。

モデルのパフォーマンスを評価するために、コード検索と分類タスクの2つの主要なカテゴリを使用します。例えば、code2code検索を使用して関連するコードスニペットを取得し、NL2Code検索では自然言語クエリを使用して関連するコードを見つけます。

パフォーマンス結果

私たちの期待に沿って、モデルは以前のモデルに対していくつかのタスクで顕著な改善を示しています。code2codeセマンティック検索に参加すると、私たちのモデルは常に既知のサイズの他のモデルを上回り、平均パフォーマンスが大幅に向上しています。

NL2Code検索でも、私たちのアプローチは以前のモデルと比較して優れた結果を示しています。この成功の大部分は、大規模データセットと効果的なマスキング戦略を活用した革新的なトレーニング方法に起因しています。

トークン分布とマスキング率の役割

トークン分布は、モデルの効果において重要な役割を果たします。多くのプログラミング言語では、プログラミング言語のトークンと混ざった自然言語トークンが substantial に存在します。この混合は、特にランダムマスキング戦略を使用する場合にトレーニングプロセスを複雑にすることがあります。

私たちはさまざまなマスキング率を調べ、15%という固定のマスキング率が最適であることを見つけました。最適な率を確保することで、学習プロセスへの悪影響を軽減できます。

識別子の難読化解除の利点

私たちのアプローチの主要な革新の一つは、トレーニング中に識別子の難読化解除を使用することです。モデルに識別子の名前を予測させることで、コードの構造や意味をより良く理解することができます。このプロセスは、パターン認識のみを頼りにする他の方法とは異なります。

結論

ここで説明した進歩は、コード表現学習に対する堅固なアプローチの重要性を強調します。大規模データセット、革新的なトレーニング方法、対比学習に焦点を当てることで、私たちの提案するモデルはコードの理解を深め、さまざまなタスクでより優れたパフォーマンスを発揮します。

この研究は、将来の研究の基盤となり、公開されている膨大な量のコードデータを活用したより効果的なコード表現学習の方法を開拓する道を切り開きます。

オリジナルソース

タイトル: Code Representation Learning At Scale

概要: Recent studies have shown that code language models at scale demonstrate significant performance gains on downstream tasks, i.e., code generation. However, most of the existing works on code representation learning train models at a hundred million parameter scale using very limited pretraining corpora. In this work, we fuel code representation learning with a vast amount of code data via a two-stage pretraining scheme. We first train the encoders via a mix that leverages both randomness in masking language modeling and the structure aspect of programming language. We then enhance the representations via contrastive learning with hard negative and hard positive constructed in an unsupervised manner. We establish an off-the-shelf encoder model that persistently outperforms the existing models on a wide variety of downstream tasks by large margins. To comprehend the factors contributing to successful code representation learning, we conduct detailed ablations and share our findings on (i) a customized and effective token-level denoising scheme for source code; (ii) the importance of hard negatives and hard positives; (iii) how the proposed bimodal contrastive learning boost the cross-lingual semantic search performance; and (iv) how the pretraining schemes decide the downstream task performance scales with the model size.

著者: Dejiao Zhang, Wasi Ahmad, Ming Tan, Hantian Ding, Ramesh Nallapati, Dan Roth, Xiaofei Ma, Bing Xiang

最終更新: 2024-02-02 00:00:00

言語: English

ソースURL: https://arxiv.org/abs/2402.01935

ソースPDF: https://arxiv.org/pdf/2402.01935

ライセンス: https://creativecommons.org/licenses/by-nc-sa/4.0/

変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。

オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。

著者たちからもっと読む

類似の記事