2025/05/13 11:20 ML-Enhanced Code Completion Improves Developer Productivity (2022)

ロボ子、Googleが社内向けにすごいコード補完ツールを作ったらしいのじゃ!

それは興味深いですね、博士。どのようなツールなのですか?

MLとSEを組み合わせた、TransformerベースのハイブリッドセマンティックMLコード補完だぞ!

MLとSEのハイブリッドですか。具体的にはどのように機能するのでしょう?

まず、Transformerモデルがコードを言語みたいに扱うのじゃ。サブワードトークンとSentencePiece語彙を使うらしいぞ。

なるほど。そして、エンコーダー・デコーダーTransformerモデルをTPU上で実行して、ビームサーチでシーケンスを生成するのですね。

そうそう!Googleのmonorepoで学習して、C++、Java、Python、Go、Typescript、Proto、Kotlin、Dartの8つの言語で単一のモデルを訓練したらしい。

一つのモデルで複数の言語に対応できるのは効率的ですね。モデルサイズは約0.5Bパラメータとのことですが、これは大きいのでしょうか?

0.5Bパラメータは、予測精度とレイテンシ、リソースコストのバランスが良いらしいぞ。Googleのエンジニアが3ヶ月使った結果、コーディングのイテレーション時間が6%も短縮されたらしいのじゃ!

6%短縮はすごいですね!具体的に、どのような仕組みで実現しているのですか?

MLモデルとSEからコード補完を同時に要求して、SEの単一トークン候補をMLで再ランキングするのじゃ。MLのトップ3候補がSEにも含まれていれば、ランクを上げてIDEで表示するらしい。

なるほど、MLとSEの良いところを組み合わせているんですね。意味的な正確性はどのように担保しているのですか?

そこもポイントで、ML補完候補の意味的正確性をSEでチェックして、コンパイルエラーをフィルタリングするのじゃ!Go言語の場合、意味チェック前に約8%の候補にコンパイルエラーが含まれていたのが、意味チェックで80%も除外できたらしいぞ。

それは素晴らしいですね。コンパイルエラーが減ることで、開発効率が大幅に向上しそうです。

シングルライン補完の採用率も、導入後6週間で1.9倍に向上したらしいぞ。ユーザーのコード補完の受け入れ率は25-34%とのことじゃ。

ユーザーの反応も良いようですね。ちなみに、補完されたコードはどのくらい使われているのですか?

現在、新規コードの3%がML補完候補の受け入れによって生成されているらしいぞ。MLによるコード追加の割合は、シングルラインで2.6%、複数行で0.6%とのことじゃ。

3%というと、結構な割合ですね。補完候補が表示されるまでの時間と受け入れ率には関係があるのでしょうか?

補完候補が750ms以上表示された場合の受け入れ率は、シングルラインで25%、複数行で34%らしいぞ。1回の受け入れあたりの平均文字数は、シングルラインで21文字、複数行で73文字とのことじゃ。

複数行の補完の方が、受け入れ率が高いのですね。セマンティック補完とフルライン補完の統合も行われているとのことですが、これはどのような機能ですか?

APIのメソッド候補を表示する際に、MLモデルからのフルライン補完をインラインで表示するらしいぞ。これで、さらにコーディングが楽になるのじゃ!

Googleのエンジニアの方々は、本当に恵まれていますね。私たちもいつか、このようなツールを作ってみたいものです。

そうじゃな!でも、その前に、ロボ子ももっとコードを書くのじゃ!…って、ロボットにコードを書くって言うのも変な話かの?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
