最新AI論文をキャッチアップ

【SyntaxEval】コード予測変換機能の進化

【SyntaxEval】コード予測変換機能の進化

Software Engineering

3つの要点
✔️ 文法のルールも考慮してモデルを評価する方法を提案しています。
✔️ MLMがプログラムの構造をどの程度正確に予測しているかを評価する手法「SyntaxEval」を導入しました。

✔️ モデルは一部の構文的な特徴をうまく学習していることがわかりましたが、まだ改善の余地があります。

Which Syntactic Capabilities Are Statistically Learned by Masked Language Models for Code?
written by Alejandro VelascoDavid N. PalacioDaniel Rodriguez-CardenasDenys Poshyvanyk
(Submitted on 3 Jan 2024 (v1), last revised 21 Feb 2024 (this version, v2))
Comments: Published on arxiv.

Subjects: Software Engineering (cs.SE)

code:  

本記事で使用している画像は論文中のもの、紹介スライドのもの、またはそれを参考に作成したものを使用しております。  

概要

この論文では、プログラミングの補完というものに使われるモデルの評価方法について話しています。プログラミングの補完とは、例えばスマートフォンでメッセージを打つ時に、次に打つ言葉を予測してくれるような機能のことです。この予測が正確かどうかを評価するとき、普通は予測した言葉が合っているかどうかを見ますが、この方法だとプログラミングの文法のルールが守られているかどうかは見逃されがちです。

よって、この論文では、文法のルールも考慮してモデルを評価する方法を提案しています。これは、プログラミングの中で重要な部分を自動的に見つけて、それを使ってモデルをテストする方法です。具体的には、プログラムの構造を理解しているかどうかを見るために使います。この方法を使って、人気のある2つのモデルをテストしてみました。その結果、モデルが提案する言葉が、実際にはプログラムの構造に合わない場合があることが分かりました。つまり、予測が正しいというだけでなく、プログラムの構造にも合致しているかどうかを見ることが重要だということです。

はじめに

大規模な言語モデルは、プログラミング関連の作業で優れた性能を示しています。特に、コード生成という分野では、コードの自動補完が重要視されています。コード補完は、不完全なコードの一部分を、その文脈に合わせて適切に補完する技術です。これまでの研究では、機械学習を使ったコード補完がさまざまな手法で試みられてきました。

最近では、マスク言語モデル(MLM)がコード補完に使われ、高い精度を示しています。しかし、これらのモデルがどの程度プログラムの構造を理解しているかはあまり明らかにされていませんでした。この論文では、MLMがプログラムの構造をどの程度正確に予測しているかを評価する手法「SyntaxEval」を導入しました。そして、MLMの予測に対する構文上の特徴の影響を調査しました。

関連研究

プログラミング関連の作業では、コードの正確な生成や理解が重要です。最新のコード生成技術では、大量のコードを学習して、コードの一部(トークンと呼ばれる要素)を予測する確率的なモデルが使われています。簡単に言うと、コード生成のモデルは、プログラミング言語の構文規則に従ってコードの一部を自動的に作り出す必要があります。

提案手法

まず、MLMの性能を評価するために、コードの構文(文法)を理解する必要があります。コードは、特定の構造で書かれており、それを理解することが重要です。この構造を理解するために、抽象構文木(AST)と呼ばれるものを使用します。ASTは、コードの構造を木構造で表現したものです。

 SyntaxEval 識別子 AST ノードのプロセス

次に、MLMの性能を評価するために、以下の手順が実行されます。

 1. コードからASTを生成します。
 2. 生成されたASTの一部をランダムに隠します。
 3. 隠された部分をMLMに提示し、MLMが隠された部分を予測するようにします。
 4. 予測された結果と隠された部分の正解を比較し、MLMの性能を評価します。

また、MLMの性能に影響を与える要因を理解するために、因果関係の解釈可能性が計算されます。これは、MLMの性能に影響を与える要因を定量化する方法です。

最後に、この評価方法を使って、Pythonというプログラミング言語を使用したコード補完の実験が行われました。この実験では、Pythonのコードを使用してMLMの性能を評価し、コードの構造がMLMの性能に与える影響を調査しました。 

実験

構文機能のパフォーマンスのグローバル結果

ここでは、機械学習モデルの性能を評価する結果を示します。機械学習モデルは、コードの一部を隠したり、マスクしたりして、その部分を予測する能力を評価されました。

以下の図は、ノードごとの比較において、ランダムにマスクされたトークン(𝑇0)と構文に基づいてマスクされたトークン(𝑇1)の間で、𝑀1によって使用されたノードのJaccard類似性(2つの集合の類似度を計算するための統計的な尺度)を評価します。つまり、各ノードの予測の一貫性を測定し、ランダムなマスクと構文に基づくマスクの間の違いを把握します。

以下の表は、モデルのパフォーマンスに影響を与える要因を評価し、それらの関係を調べます。つまり、モデルがどの構文的な特徴を重視しているかを見て、それがモデルのパフォーマンスにどの程度影響するかを理解します。Jaccard, Levenshtein, Sorensen-Diceは、それぞれの文字の類似性や文字列の距離を測る指標です。

以下の図は、モデルが学習した構文の特徴に焦点を当て、それらがどのように予測に使われているかを評価しています。つまり、モデルがコードの形や構造を理解しているかどうかを見て、それがモデルの正確さにどの程度影響するかを理解します。

結果的に、モデルはコードの構文的な特徴を十分に学習していることが示されました。しかし、一部の特定の部分では、モデルの予測が難しいことがわかりました。つまり、モデルは一部のコードの形式にはうまく対応できるが、他の部分にはまだ改善の余地があることが示唆されました。

因果評価効果

ここでは、モデルの性能に影響を与える要因を調査するために、因果関係の評価方法が使用されました。結果的に、モデルの性能にはコードの構文情報が大きく影響していることがわかりました。しかし、ランダムにマスクされた部分もモデルの性能に影響を与えており、特定の部分の予測性能が低下していることが示されました。つまり、モデルはコードの一部を予測するのにうまく機能していますが、まだ改善の余地があることが示唆されました。

結論

この研究では、機械学習モデルがプログラミング言語の構文を理解する能力に焦点を当て、その性能を評価しました。結果から、モデルは一部の構文的な特徴をうまく学習していることがわかりましたが、まだ改善の余地があります。特に、ランダムにマスクされた部分の予測性能が低いことが示されました。これは、機械学習モデルがプログラミング言語の構文を完全に理解していない可能性を示唆しています。

今後の研究では、さらに進んで、プログラミング言語の意味論的な機能を評価するための手法や、機械学習モデルがランダムにマスクされたトークンの予測に優れている理由について深く理解する必要があります。また、機械学習モデルの事前トレーニング目標に関連する要因も考慮することが重要です。

 

記事の内容等について改善箇所などございましたら、
お問い合わせフォームよりAI-SCHOLAR編集部の方にご連絡を頂けますと幸いです。
どうぞよろしくお願いします。

お問い合わせする