コードLLMの分析:パフォーマンスと感度
コードLLMがコードの変換をどう管理しているかを詳しく見てみよう。
― 1 分で読む
コード要約
このセクションでは、コード言語モデル(LLM)がコードを要約する際に、コードの変更にどれくらい対応できるかを見ていくよ。注目するのは、意味を保った変換(SP)と意味を変える変換(SNP)の2種類の変更。
表1には、元のコードがこれらの変更を経た際にモデルが生成するコード要約の平均類似度が示されてる。結果を見ると、モデルは両方の変換にかなり対応できてるね。SP変換の時、元のコード要約と変換後のコード要約の平均類似度は約0.9。一方、SNP変換ではこの類似度が約0.1に落ちる。つまり、意味を保ったコードの要約は非常に似てるけど、意味が変わるコードの要約はそうじゃないってこと。
例えば、あるコードが数字が素数かどうかをチェックするものだとする。そのコードの要約と、条件を否定して変わったバージョンの要約はすごく似てるけど、後者はもう素数をチェックしてない。これは、モデルがコードの意味が変わっても似た要約を作るのが得意だってことを示してる。彼らは実際の操作を理解するんじゃなくて、コードの構造に依存してるんだ。
全体적으로、コードLLMは要約する際に強いパフォーマンスを見せてるよ。
メソッド名予測
次に、コードが変換されたときにコードLLMがメソッド名を予測する能力を見てみるよ。同じくSPとSNPの2種類の変換がここでも適用される。表2の結果によると、モデルはこのタスクでは要約と比べて一貫性が少ないみたい。
SP変換の際、変換されたJavaのコードの約62%とPythonのコードの48%のメソッド名が元のままだった。SNP変換では、元のものと比べてかなりの割合でメソッド名が変わった。これは、モデルがメソッド名の予測において変更に対してより感度が高いことを示してるね。
例えば、リストが回文かどうかをチェックするコードがあるとする。元のコードには「isPalindromeAndSumLessThen」というメソッド名が付けられていて、これがその機能を正確に表してる。でも、パラメータの順序が変更された場合、モデルは「isSymmetric」みたいな別の名前を提案するかもしれない。これを見ると、モデルは特に変更があった時にはメソッド名を一貫させるのが苦手だってことがわかる。
調査結果では、コードLLMが時にはコードの意味を把握できるものの、出力は適用される変換によって大きく異なることが示されてる。
出力予測
出力予測タスクでは、モデルが期待される出力の変換にどう対応するかを観察するよ。表3の結果から、モデルは特に変更に敏感であることがわかる。元のコードとそのSP変換バージョンの出力が一致したのはたった64%。一方、元のコードとSNP変換バージョンでは異なる出力が得られたのが47%だった。
3つのタスクを分析した結果、モデルはSNP変換よりもSP変換の方が扱いやすいみたい。メソッド名予測と出力予測タスクでは、モデルは意味が同じままのケースを認識するのが得意だね。
変換演算子分析
表4では、異なる変換演算子がモデルに与える影響を示してる。SP演算子の中では、変数の名前変更が最も大きな影響を持ち、要約とメソッド名の両方に影響している。例えば、変数名を変更した後、元の名前と一致するメソッド名は約33%しかなかった。他のSP演算子と比べてずっと低いね。
これは、変数名がコードの目的に関する重要なコンテキストを持っているから。これらの名前を変更すると、コードの意図を誤解することにつながり、異なる出力をもたらす可能性があるんだ。
さらに、SNP演算子の中では、条件文を削除することで出力の違いが最も顕著になり、モデルは他の変換タイプよりも頻繁に予測を変えた。
これらの結果は、モデルがさまざまな変換操作に対して異なる反応を示し、特に変数名の変更が顕著に影響を与えることを示してる。
モデルサイズ分析
次に、モデルのサイズがパフォーマンスにどう影響するかを分析するよ。結果によると、タスクタイプがモデルのロバスト性と感度に影響を与える主な要因で、パラメータの数じゃないみたい。
サイズに関係なく、モデルは要約タスクでSP変換のために約0.92、SNP変換のために約0.09という似たような要約を生成してた。しかし、出力予測のパフォーマンスは全体的に低くて、値は0.64から0.69の範囲だった。
これは、モデルのサイズがパフォーマンスに大きな影響を与えないことを示してる。むしろ、タスクのタイプがより重要のようだね。
正確性相関
この分析では、モデルが分析されるコードの正確性に基づいてどれくらい良くパフォーマンスを発揮するかを見てみるよ。結果は、モデルが正しいコードの変換を扱うのが、誤ったバージョンよりも得意だってことを示してる。
正しいコードでは、約84%の意味的に同等なスニペットが似たような名前予測を受けたけど、誤ったスニペットでは只有77%だった。また、変換後の誤ったコードの異なる予測名にはモデルが苦戦してた。
これは、コードが誤っていると、モデルが学習した内容から逸脱する可能性があり、その結果、変換後にその意味を正確に把握するのが難しくなることを示してる。
意味的推論分析
この部分では、コードLLMがコードスニペットの関係をどれくらいよく推論できるかを評価するよ。モデルはデータ依存性よりも制御依存性を特定するのが得意だった。
要約すると、LLMは制御依存性のあるステートメントペアの約30-40%を正しく予測できたけど、データ依存性の場合はその精度が12-15%に落ちた。これは、制御依存性がif-else文のように明確なのに対し、データ依存性はもっと微妙で、変数の相互作用を深く理解する必要があるからかもしれない。
さらに、モデルはJavaよりもPythonでのパフォーマンスが良かった。これは、彼らの制御関係を理解する能力がプログラミング言語によって異なる可能性があることを示しているね。
結論
結論として、分析の結果、コードLLMは要約のような特定のタスクで強い能力を発揮する一方で、メソッド名予測や出力予測では、特に変換がコードの意味を変えるときに課題に直面していることがわかった。モデルサイズはこれらのパフォーマンス結果に大きな影響を与えないが、タスクのタイプやコードの正確性がより重要な役割を果たしている。
全体的に見ると、コードLLMは理解力や予測能力が役立つ一方で、コード要素間の微妙な関係を把握するのに苦労していることがわかる。これは、彼らの理解能力を向上させるための将来の開発の余地を示しているね。
タイトル: An Empirical Study on Capability of Large Language Models in Understanding Code Semantics
概要: Large Language Models for Code (code LLMs) have demonstrated remarkable performance across various software engineering (SE) tasks, increasing the application of code LLMs in software development. Despite the success of code LLMs, there remain significant concerns about the actual capabilities and reliability of these models, "whether these models really learn the semantics of code from the training data and leverage the learned knowledge to perform the SE tasks". In this paper, we introduce EMPICA, a comprehensive framework designed to systematically and empirically evaluate the capabilities of code LLMs in understanding code semantics. Specifically, EMPICA systematically introduces controlled modifications/transformations into the input code and examines the models' responses. Generally, code LLMs must be robust to semantically equivalent code inputs and be sensitive to non-equivalent ones for all SE tasks. Specifically, for every SE task, given an input code snippet c and its semantic equivalent variants, code LLMs must robustly produce consistent/equivalent outputs while they are expected to generate different outputs for c and its semantic non-equivalent variants. Our experimental results on three representative code understanding tasks, including code summarization, method name prediction, and output prediction, reveal that the robustness and sensitivity of the state-of-the-art code LLMs to code transformations vary significantly across tasks and transformation operators. In addition, the code LLMs exhibit better robustness to the semantic preserving transformations than their sensitivity to the semantic non-preserving transformations. These results highlight a need to enhance the model's capabilities of understanding code semantics, especially the sensitivity property.
著者: Thu-Trang Nguyen, Thanh Trong Vu, Hieu Dinh Vo, Son Nguyen
最終更新: 2024-07-03 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2407.03611
ソースPDF: https://arxiv.org/pdf/2407.03611
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。
参照リンク
- https://github.com/features/copilot
- https://huggingface.co/microsoft/phi-2
- https://huggingface.co/deepseek-ai/deepseek-coder-6.7b-instruct
- https://huggingface.co/codellama/CodeLlama-7b-Instruct-hf
- https://huggingface.co/ise-uiuc/Magicoder-DS-6.7B
- https://platform.openai.com/docs/models/gpt-3-5-turbo
- https://ttrangnguyen.github.io/EMPICA/