AI

コード用AIモデル、GPT-2などより33~50%短いトークン列に

この記事のポイント

  1. 実現したこと

    コード向けモデルCodeBERTaは、コード中の隠した部分を予測できる。

  2. 実現の仕組み

    コードで学習したByte-level BPEトークナイザーが、入力をトークンに分割する。

  3. 得られた結果

    Hugging Faceによると、同じコードを分割した列はGPT-2やRoBERTaのトークナイザーより33~50%短い。

  4. 従来との違い

    事前学習したコード向けモデルに分類ヘッドを加え、プログラミング言語識別向けのモデルへ調整した。

コードを短いトークン列に分割し、隠れた箇所を予測する仕組みを示す図
AI生成画像

コードで学習したAIモデルCodeBERTaは、入力の分割器もコードに合わせた。Hugging Faceによると、同じコードから作るトークン列は、GPT-2やRoBERTaの分割器を使う場合より33~50%短い。

約200万の関数からコード向けモデルを学習

Hugging Faceのコード向けモデルCodeBERTa-small-v1は、CodeSearchNetのコードを使って学習したRoBERTa型モデルだ。6層、8400万パラメータで構成される。

学習には約200万の関数を含むコーパスを使い、モデルを初期状態から5エポック学習した。コードを入力として扱うこの構成では、入力をどうトークンに分割するかもモデルの設計に含まれる。

コードで学習した分割器がトークン列を短縮

CodeBERTaのByte-level BPEトークナイザーは、コードのコーパスで学習した。入力されたコードは、この分割器によってモデルが処理するトークン列になる。

Hugging Faceによると、同じコードのコーパスを分割したとき、トークン列はGPT-2やRoBERTaのトークナイザーを使う場合より33~50%短い。この比較は入力表現の長さを示すもので、コードの補完精度を比較した数値ではない。

隠したコードを予測するモデルとして利用

CodeBERTa-small-v1は、コード中の一部を隠して予測するFill-Maskモデルとして利用できる。分割された入力を受け取り、隠した位置に入る候補を返す。

モデルカードに掲載されたPHPコードの例では、予測候補の最上位は「function」だった。この結果は掲載例に対する出力であり、補完全般の正解率を示す測定値ではない。

分類ヘッドを加えてプログラミング言語を識別

コード向けの事前学習結果は、別の処理にも使われた。プログラミング言語識別モデルCodeBERTa-language-idは、CodeBERTa-small-v1のチェックポイントに系列分類ヘッドを追加し、識別向けにファインチューニングしたものだ。

Hugging Faceによると、この識別モデルは評価データで正解率とF1がともに0.999を超えた。コードの隠した部分を予測する事前学習モデルから、コード全体の言語を分類するモデルへ処理対象が広がった。