[論文レビュー] SCC: Automatic Classification of Code Snippets
本論文では、小さなコードブロックにおけるプログラミング言語を自動的に分類するため、Stack Overflowのコードスニペットで学習されたMultinomial Naive Bayes分類器であるSCCを紹介する。SCCは75%の正確性を達成し、同じタスクで55.5%の正確性にとどまる商用のPLIツールを上回っている。また、C、C++、C#のような類縁言語を区別し、C#のバージョンを顕著な正確性で特定することができる。
Determining the programming language of a source code file has been considered in the research community; it has been shown that Machine Learning (ML) and Natural Language Processing (NLP) algorithms can be effective in identifying the programming language of source code files. However, determining the programming language of a code snippet or a few lines of source code is still a challenging task. Online forums such as Stack Overflow and code repositories such as GitHub contain a large number of code snippets. In this paper, we describe Source Code Classification (SCC), a classifier that can identify the programming language of code snippets written in 21 different programming languages. A Multinomial Naive Bayes (MNB) classifier is employed which is trained using Stack Overflow posts. It is shown to achieve an accuracy of 75% which is higher than that with Programming Languages Identification (PLI a proprietary online classifier of snippets) whose accuracy is only 55.5%. The average score for precision, recall and the F1 score with the proposed tool are 0.76, 0.75 and 0.75, respectively. In addition, it can distinguish between code snippets from a family of programming languages such as C, C++ and C#, and can also identify the programming language version such as C# 3.0, C# 4.0 and C# 5.0.
研究の動機と目的
- 短いコードスニペットにおけるプログラミング言語を正確に特定する課題に対処すること。これは、完全なソースファイルの分類よりも困難である。
- 言語タグがしばしば欠落しているオンラインフォーラムやコード共有プラットフォームにおけるコードスニペットの分類のためのオープンでアクセス可能なツールを開発すること。
- 既存の商用ソリューション(例:PLI)を上回ること。PLIは完全なファイルでは高い正確性を示すが、短いスニペットでは性能が著しく劣る。
- 細分化された分類、たとえばC、C#、C++の区別や、C#のバージョン(3.0、4.0、5.0)の特定を可能にすること。
- 閉鎖型ツールの代替として再現可能で透明性のある、コードスニペットの言語分類のための代替手段を提供すること。
提案手法
- コードスニペットのデータセットをStack Overflowの投稿から抽出し、その上でMultinomial Naive Bayes(MNB)分類器を学習する。
- 特徴量は、トークン化されたコードスニペットから得られ、各言語固有のキーワードや構文的パターンに焦点を当てる。
- モデルは21のプログラミング言語(C、C++、C#などの言語ファミリー、およびC# 3.0、4.0、5.0などのバージョンを含む)で評価される。
- 精度、再現率、F1スコア、正確性の指標を用いて、複数の言語カテゴリで性能を測定する。
- 同じ150個のStack Overflowスニペットで構成されるテストセットを用いて、商用のPLIツールと比較する。
- 各言語ごとに上位10個の特徴量(例:C#には「class」や「console」)を抽出し、モデルの意思決定プロセスを分析する。
実験結果
リサーチクエスチョン
- RQ1機械学習モデルは、完全なソースファイルとは対照的に、短いコードスニペットからのプログラミング言語分類において高い正確性を達成できるか?
- RQ2オープンソースのMNBベース分類器(SCC)は、商用ツール(PLI)と比較して、コードスニペット分類においてどの程度の性能を示すか?
- RQ3SCCは、C、C#、C++のような類縁言語を区別できるか?
- RQ4SCCは、C# 3.0、4.0、5.0のような特定の言語バージョンを識別できるか?
- RQ5短いコードスニペットにおいて、異なるプログラミング言語を区別するのに最も特徴的な特徴量は何か?
主な発見
- SCCは、コードスニペットからの21のプログラミング言語分類において、全体で75%の正確性を達成した。
- 全言語の平均F1スコアは0.75であり、精度と再現率はそれぞれ0.76と0.75であった。
- SCCは、同じテストセットで55.5%の正確性を達成するPLIを顕著に上回った。
- C、C#、C++の区別において、SCCは80%の正確性を達成し、言語ファミリー分類において優れた性能を示した。
- C#のバージョン(3.0、4.0、5.0)の識別において、SCCは61%の正確性を達成し、バージョンレベルの分類が可能であることを示した。
- モデルは、C#には「console」、C++には「cout」、Cには「class」などの言語固有のキーワードを、最も特徴的な特徴量として特定した。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。