AI

6言語のコード片を識別するAIモデル、評価正解率は99.9%超

この記事のポイント

  1. 実現したこと

    コード片をGo、Java、JavaScript、PHP、Python、Rubyの6言語に分類する。

  2. 実現の仕組み

    事前学習済みのコード向けモデルに分類層を加え、基盤モデルを固定して最後の層を学習する。

  3. 得られた結果

    Hugging Faceが示した評価データでは、正解率とF1値がともに0.999を超えた。

  4. 従来との違い

    コードを扱う事前学習済みモデルが、追加学習によって言語識別用の分類モデルになった。

6種類のコード片がコード向けモデルを通り、分類層で言語ごとに分岐する概念図
AI生成画像

コード片のプログラミング言語を識別するAIモデルが、6言語を対象とする分類用に調整された。Hugging Faceが示した評価データでは、正解率とF1値がともに0.999を超えた。

コード向けモデルを6言語の分類に転用

Hugging Faceは、事前学習済みのコード向けモデルCodeBERTa-small-v1を追加学習し、コード片の言語を識別するCodeBERTa-language-idを作成した。公開された学習コードでは、Go、Java、JavaScript、PHP、Python、Rubyの6言語を分類対象としている。

分類層を追加し、基盤モデルの重みを固定

言語識別モデルは、事前学習済みモデルの出力を受け取る系列分類用の層を追加している。公開された学習コードでは基盤モデルのパラメーターを固定し、最後の分類層だけを学習する。

入力の処理には、CodeSearchNetのデータで独自に学習した、バイト列を扱うトークナイザーを使う。このトークナイザーでは、空白に続く「:=」が一つのトークンになる。

評価データで正解率とF1値が0.999超

Hugging Faceが示した評価データでは、分類の正解率が0.999を超えた。F1値も0.999を超えており、公開された評価コードは言語ごとの結果をマクロ平均してF1値を計算する。

短いコード片では表記の違いが分類結果に現れる

公開された実行例では、「foo = ‘bar’」はJavaScriptに分類された。一方、文字列の前に「u」を付けた「foo = u’bar’」はPythonに分類されている。