ホームページ  >  記事  >  テクノロジー周辺機器  >  長いコード シナリオでのパフォーマンスを向上させるための、長いコード シーケンスのトランスフォーマー モデル最適化手法

長いコード シナリオでのパフォーマンスを向上させるための、長いコード シーケンスのトランスフォーマー モデル最適化手法

PHPz
PHPz転載
2023-04-29 08:34:061691ブラウズ

Alibaba Cloud Machine Learning Platform PAI は、華東師範大学の Gao Ming 教授のチームと協力して、構造を認識したスパース アテンション トランスフォーマー モデル SASA を SIGIR2022 で公開しました。これは、長いコード シーケンスに対するトランスフォーマー モデルの最適化手法であり、長いコードのシナリオの効果とパフォーマンスを改善します。セルフ アテンション モジュールの複雑さはシーケンスの長さに応じて指数関数的に増加するため、ほとんどのプログラミング ベースの事前トレーニング済み言語モデル (PPLM) はシーケンスの切り捨てを使用してコード シーケンスを処理します。 SASA メソッドはセルフ アテンションの計算を分散し、コードの構造的特徴を組み合わせることで、長いシーケンスのタスクのパフォーマンスを向上させ、メモリと計算の複雑さを軽減します。

論文: Tingting Liu、Chengyu Wang、Cen Chen、Ming Gao、および Aoying Zhou. 構造を意識した疎な注意による長いプログラミング言語の理解. SIGIR 2022

モデル フレームワーク

次の図は、SASA の全体的な枠組みを示しています。

面向长代码序列的 Transformer 模型优化方法,提升长代码场景性能

このうち、SASA は主に、前処理段階と Sparse Transformer トレーニング段階の 2 つの段階で構成されます。前処理段階では、2 つのトークン間の相互作用行列が取得されます。1 つは上位 k 周波数行列、もう 1 つは AST パターン行列です。 Top-k 頻度行列は、事前にトレーニングされたコード言語モデルを使用して、CodeSearchNet コーパス上のトークン間の注意相互作用頻度を学習します。AST パターン行列は、コードを解析する抽象構文ツリー (AST) に基づいて取得されます。構文ツリーの接続関係に関する情報 トークン間の対話情報Sparse Transformer のトレーニング フェーズでは、Transformer Encoder を基本フレームワークとして使用し、完全なセルフ アテンションを構造認識のスパース セルフ アテンションに置き換え、特定のパターンに準拠するトークン ペア間でアテンションの計算を実行することで、計算の複雑さを軽減します。

SASA スパース アテンションには、次の 4 つのモジュールが含まれています:

  • スライディング ウィンドウ アテンション: スライディング ウィンドウ内のトークン間のセルフ アテンションのみを計算し、ローカル コンテキストの特性を保持します。複雑さはシーケンスの長さ、はスライディング ウィンドウのサイズです。
  • グローバル アテンション: 特定のグローバル トークンを設定します。これらのトークンは、シーケンス内のすべてのトークンを使用してアテンション計算を実行し、シーケンスのグローバル情報を取得します。計算の複雑さは、グローバル トークンの数です。
  • 上位 k 個のスパースな注意: Transformer モデルの注意の相互作用は疎であり、ロングテールです。各トークンについて、最も高い注意の相互作用を持つ上位 k 個のトークンのみが計算されます。複雑度は次のとおりです。
  • AST を意識した構造アテンション: コードは自然言語シーケンスとは異なり、より強い構造特性を持っています。コードは抽象構文ツリー (AST) に解析され、アテンションの計算は構文ツリー内の接続関係。

#現代のハードウェアの並列計算特性に適応するために、シーケンスをトークン単位で計算するのではなく、いくつかのブロックに分割します。各クエリ ブロックは

## に関連付けられています。 面向长代码序列的 Transformer 模型优化方法,提升长代码场景性能

# スライディング ウィンドウ ブロックと

面向长代码序列的 Transformer 模型优化方法,提升长代码场景性能

グローバル ブロックと

面向长代码序列的 Transformer 模型优化方法,提升长代码场景性能

top-k および AST ブロック注意を計算し、全体の計算複雑さは

面向长代码序列的 Transformer 模型优化方法,提升长代码场景性能

b であり、ブロック サイズです。

各スパース アテンション パターンはアテンション マトリックスに対応します。スライディング ウィンドウ アテンションを例にとると、アテンション マトリックスの計算は次のようになります:

面向长代码序列的 Transformer 模型优化方法,提升长代码场景性能

ASA 疑似コード:

#

実験結果

評価には、CodeXGLUE[1] によって提供される 4 つのタスク データ セット (コード クローン検出、欠陥検出、コード検索、コード要約) を使用します。配列長が 512 を超えるデータを抽出して長い配列データセットを作成すると、次のような実験結果が得られます。 SASA は 3 つのデータセットで最高のパフォーマンスを示し、パフォーマンスはすべてのベースラインを大幅に上回っています。このうち、Roberta-base[2]、CodeBERT[3]、および GraphCodeBERT[4] は、長いシーケンスを処理するためにトランケーションを使用するため、コンテキスト情報の一部が失われます。 Longformer[5] や BigBird[6] は、自然言語処理において長いシーケンスを処理するために使用されるメソッドですが、コードの構造的特徴が考慮されておらず、コード タスクへの直接転送は効果的ではありません。

top-k スパース アテンション モジュールと AST 対応スパース アテンション モジュールの効果を検証するために、BigCloneBench と欠陥検出データ セットでアブレーション実験を実施しました。結果は次のとおりです: 面向长代码序列的 Transformer 模型优化方法,提升长代码场景性能

スパース アテンション モジュールは、長いコード タスクのパフォーマンスを向上させるだけでなく、ビデオ メモリの使用量も大幅に削減します。同じデバイスの下で、SASA はより大きなバッチ サイズを設定できますが、完全な自己-attention モデルはメモリ不足の問題に直面しています。具体的なビデオ メモリの使用量は次のとおりです:

面向长代码序列的 Transformer 模型优化方法,提升长代码场景性能

SASA は、スパース アテンション モジュールとして、他の事前トレーニング モデル ベースに移行できます。長いシーケンスの自然言語処理タスクを処理するための Transformer は、オープン ソース フレームワーク EasyNLP (https://github.com/alibaba/EasyNLP) に統合され、オープン ソース コミュニティに貢献されます。

紙のリンク: 面向长代码序列的 Transformer 模型优化方法,提升长代码场景性能https://arxiv.org/abs/2205.13730

以上が長いコード シナリオでのパフォーマンスを向上させるための、長いコード シーケンスのトランスフォーマー モデル最適化手法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。