Skip to main content
QUICK REVIEW

[論文レビュー] Explainable AI for Pre-Trained Code Models: What Do They Learn? When They Do Not Work?

Ahmad Haji Mohammadkhani, Chakkrit Tantithamthavorn|arXiv (Cornell University)|Nov 23, 2022
Software Engineering Research被引用数 6
ひとこと要約

この論文は、コード生成および変換タスクにおける事前学習済みコードモデルが何を学んでいるか、そしていつ失敗するかを解明するために、CodeBERT および GraphCodeBERT に注目メカニズムを適用する。コード要約ではメソッドシグネチャに注目し、コード翻訳では構文に注目し、コード精練では両者をバランスさせる。性能低下は、複雑な入力に対して注目分布が不十分になることに起因する。

ABSTRACT

In recent years, there has been a wide interest in designing deep neural network-based models that automate downstream software engineering tasks on source code, such as code document generation, code search, and program repair. Although the main objective of these studies is to improve the effectiveness of the downstream task, many studies only attempt to employ the next best neural network model, without a proper in-depth analysis of why a particular solution works or does not, on particular tasks or scenarios. In this paper, using an example eXplainable AI (XAI) method (attention mechanism), we study two recent large language models (LLMs) for code (CodeBERT and GraphCodeBERT) on a set of software engineering downstream tasks: code document generation (CDG), code refinement (CR), and code translation (CT). Through quantitative and qualitative studies, we identify what CodeBERT and GraphCodeBERT learn (put the highest attention on, in terms of source code token types), on these tasks. We also show some of the common patterns when the model does not work as expected (performs poorly even on easy problems) and suggest recommendations that may alleviate the observed challenges.

研究の動機と目的

  • コード生成および変換タスク中に、CodeBERT や GraphCodeBERT といった事前学習済みコードモデルがどのトークンタイプに注目しているかを理解すること。
  • 特に低性能ケースにおいて注目分布を分析することで、モデル予測の失敗パターンを特定すること。
  • ソフトウェア工学応用におけるモデルの頑健性と解釈可能性を向上させるための実用的提案を提供すること。
  • 高精度なモデルでも信頼性に欠ける理由を診断することで、正確または誤った予測をなぜ下すのかを解明し、信頼性のギャップを埋めること。
  • 再現可能性と今後の研究を支援するため、レプリケーションパッケージを公開することでオープンサイエンスを支援すること。

提案手法

  • 研究は、変換器アーキテクチャの内蔵注目メカニズムを説明可能なAI(XAI)手法として用い、モデル予測の解釈を行う。
  • モデルの全6層にわたる注目スコアを抽出・正規化し、命名、構造的、その他という3つのトークンタイプカテゴリへの注目度を分析する。
  • 高パフォーマンスと低パフォーマンスのサンプル(例:Easy-Low とすべてのサンプル)間の注目分布を比較し、失敗パターンを同定する。
  • 定量的指標(例:BLEU)を用いてモデルパフォーマンスを評価し、定性的な検査により注目パターンを検証する。
  • 研究は、Java および Python コードを対象とした3つの下流タスク(コードドキュメント生成(CDG)、コード精練(CR)、コード翻訳(CT))を評価する。
  • 観察された注目失敗に基づき、トークンタイプタギング、主観的評価指標、注目スコアの増幅といった提案を導出する。

実験結果

リサーチクエスチョン

  • RQ1下流タスク中に CodeBERT および GraphCodeBERT は、ソースコードのどのトークンタイプに学習しているか?
  • RQ2高パフォーマンスと低パフォーマンスの予測における注目分布には、どのような違いがあるか?
  • RQ3モデル予測における一般的な失敗パターンは何か? そして、それらは注目行動にどのように反映されるか?
  • RQ4注目ベースの説明は、長大または複雑なコードサンプルでモデルが性能を発揮できない理由を明らかにできるか?
  • RQ5注目分析に基づいて、モデルの信頼性と解釈可能性を向上させるためにどのような提案が可能か?

主な発見

  • コードドキュメント生成(CDG)では、両モデルとも命名トークン(例:メソッド名やパラメータ)に最も注目しており、特に Python CDG において GraphCodeBERT は命名トークンに 73.68% の注目を示している。
  • コード翻訳(CT)では、構造的トークン(例:構文キーワード)に注目が集まり、CodeXGLUE と GraphCodeBERT はそれぞれ 48.85% および 49.51% を構造的トークンに割り当てている。
  • コード精練(CR)では注目がよりバランスが取れており、CodeXGLUE と GraphCodeBERT は命名トークンにそれぞれ 56.64% および 55.82%、構造的トークンに 46.29% および 48.35% を割り当てている。
  • モデルは長大または複雑な入力に対してより頻繁に失敗し、その失敗はタスクに重要なトークンタイプに対する注目が不足している注目分布に一貫して反映されている。
  • Easy-Low とすべてのサンプル間の注目シフトを分析した結果、パフォーマンス低下は関連するトークンタイプへの注目が減少することと相関しており、例として CodeXGLUE の CT で構造的注目が 7.92% 減少している。
  • GraphCodeBERT は CodeBERT よりも構造的要素に強く注目しており、これはコードフローグラフ統合のおかげで構造的認識が強化されているためと推測される。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。