タイミングのインサイトでコード補完ツールを改善する
この記事では、開発者のニーズを予測してコード補完ツールを強化する方法について話してるよ。
― 1 分で読む
コード補完ツールは、ソフトウェア開発でとても重要になってきてる。これらのツールは、プログラマーがこれまで書いたコードに基づいて次のコード行を提案してくれる。ただし、多くのツールは、提案をしすぎたり、タイミングが悪かったりすることがあって、開発者を気を散らせたり、流れを崩すことがある。この記事では、開発者がコード補完の助けを本当に必要とするタイミングを予測することで、これらのツールを改善する方法を探るよ。
背景
コード補完ツールは、通常、トランスフォーマーと呼ばれる先進的な機械学習モデルを使ってる。このモデルは、カーソルの前に書かれたコードを分析して、次に何を書くべきかを提案する。提案は役に立つこともあるけど、コンピュータリソースの面や開発者の生産性に影響することがある。
多くの研究は提案の質を向上させることに焦点を当ててきたけど、提案のタイミングはほとんど無視されてきた。開発者が作業に集中できるように、助けをいつ提供するかを知ることがめっちゃ大事なんだ。
問題
メインの問題は、現在のツールが開発者が提案を望むタイミングをうまく予測できないこと。いくつかのツールは、開発者が提案を受け入れそうだと判断したときだけ提案するシンプルなモデルに頼ってる。しかし、これは主にコードのコンテキストに基づいていて、開発者の行動やアクションといった他の要素を考慮してない。
課題は、開発者の行動や開発環境とのインタラクションからのテレメトリデータなど、複数の情報を基にコード補完を提供するのに最適な瞬間をうまく判断できるモデルを開発することだ。
提案された解決策
この問題に取り組むために、トランスフォーマーアーキテクチャを使った新しいフィルタリングモデルを提案する。私たちのモデルは、開発者の行動、周りのコードコンテキスト、追加のテレメトリデータに基づいて、補完を提示するタイミングを決定することを目指してる。
データ収集
私たちは、VSCodeやJetBrainsのような人気のある統合開発環境(IDE)で使えるオープンソースのコード補完ツールを使っている開発者からデータを集めている。このデータには、ユーザーが提案を受け入れたときや、手動で補完をリクエストしたときなど、さまざまなインタラクションの種類が含まれてる。
モデル学習
私たちのモデルは、この収集したデータでトレーニングされる。特に、開発者の好みを示す二つの指標を探してる:
- 提案を受け入れるとき。
- 手動で提案ツールを呼び出すとき。
正確な予測をするために、書かれているコードのコンテキスト情報や、最後の提案からどれくらい時間が経ったかといったテレメトリデータを集める。
評価
まず、コードのコンテキストだけを使った分類器をトレーニングし、その後にテレメトリデータをモデルに統合する。これにより、追加の情報を使うことでモデルのパフォーマンスが向上するか確認できる。さらに、ユーザーの研究を行って、フィルタが実際のシナリオでどれだけ機能するかを評価する。
結果
私たちの結果は、小さなトランスフォーマーモデルが以前のシステムよりも大幅に優れ、低遅延を維持できることを示している。このモデルは、提案を表示するタイミングをうまく予測し、開発者の集中力や全体的な生産性を向上させる。
コード補完の課題
AIツールはコーディングの速度を向上させることができる一方で、新たな問題も引き起こす。開発者は、常に提案があるために気が散ったり、関係のない補完に直面することがある。また、AIが生成したコードがソフトウェアの保守性や品質にどのように影響を及ぼすかについても懸念がある。
ユーザー体験
これらのツールが人気になるにつれて、ユーザー体験を理解することが重要になる。開発者は通常、異なるインタラクションモードに陥る。一部は自分が何を求めているかをよく知っていて、ツールを使って早く進むが、他はツールに頼ってガイダンスを受ける。
GitHub Copilotのようなツールは提案をしてくれるが、それらの多くは見過ごされがち。報告によると、提供された補完の大部分がユーザーによって無視されるため、その効果が疑問視されている。
現在のアプローチ
GitHub CopilotやAmazon CodeWhispererのような既存のコード補完ツールは、膨大なトレーニングデータに基づいて提案を生成する。しかし、彼らは提案が行われるタイミングやコンテキストを考慮せずに、高品質の補完を生成することにのみ焦点を当てている。
最近の研究の中には、関係のない提案をフィルタリングしようとするものもある。これらの方法は、開発者の行動の複雑さを完全には捉えられないシンプルなルールに頼ることが多い。さらに、こうした技術の中には、提案プロセスに余分な時間を加えるものもあり、逆効果になることがある。
新しいモデル設計
提案するモデルは、特にテレメトリデータとコーディングコンテキストを組み合わせて、異なる情報源をよりよく統合することを目指している。
アーキテクチャ
私たちのモデルには、文脈を理解する能力が優れていることで知られているトランスフォーマーベースのアーキテクチャを使う。開発者が提案システムをどれだけ使うかといったテレメトリデータを追加することで、より反応の良いツールを作ることを目指している。
分類器のバリエーション
テレメトリデータを意思決定プロセスに組み込んだ複数のモデルを構築した。どの構成が最も良い結果を produce するかを試験している。
予測学習
私たちの研究では、モデルが開発者が提案を望む可能性のあるタイミングを理解できるように特にトレーニングしている。これは、手動および自動的なコード補完のトリガーのパターンを認識する方法を教えることを含む。
実験的フレームワーク
私たちのアプローチを評価するために、従来の方法に対するモデルの効果を測定する実験をデザインしている。既存のツールと比較して、私たちのフィルタが実際のコーディング環境でどれだけ機能するかを見たい。
ユーザースタディ
開発者が私たちのコード補完ツールとインタラクションを行うユーザースタディを実施している。このスタディの中で、提案がどれだけ受け入れられるかや、開発者のワークフローにどのように影響するかを測定している。
メトリクス
成功を測定するために、以下の主要なメトリクスに焦点を当てている:
- 提案の受け入れ率。
- 提案を提示するかどうかを判断するモデルの速度。
- 提案の有用性についての開発者からのフィードバック。
結果と議論
私たちの実験は有望な結果を示している。開発したモデルは、既存のツールよりも効果的にコード補完を提供するタイミングを予測できる。私たちの研究に参加した開発者は、満足度や生産性が向上したと報告している。
質とタイミングのバランス
私たちのモデルの大きな進展の一つは、提案が必要なタイミングを優先する能力だ。提案の質と提示するタイミングの両方を最適化することで、ユーザーの気を散らすことを減らし、全体的なコーディング体験を向上させることを目指している。
長期的な影響
即効性のある結果は励みになるが、AIツールをコーディング環境で使うことの長期的な影響を考えることも重要だ。これらのツールが時間とともに開発者のニーズにより良く合致するようにすることが、さらなる進展には不可欠だ。
結論
結論として、私たちは提案そのものだけでなく、提案するタイミングにも焦点を当てた新しいコード補完のアプローチを探求した。コードコンテキストとテレメトリデータの両方を統合したトランスフォーマーベースのモデルを使うことで、開発者にとってのユーザー体験を向上させることができる。
今後の研究は、さまざまな開発者の行動をよりよく捉えるためにデータセットを拡張し、モデルをさらに洗練させることを目指すべきだ。そうすることで、AIツールがコーディングプロセスの妨げになることなく、有益であり続けることができる。
コーディングの実践が進化する中で、賢いツールの開発は、開発者の変化するニーズに応えるためには不可欠になるだろう。
タイトル: A Transformer-Based Approach for Smart Invocation of Automatic Code Completion
概要: Transformer-based language models are highly effective for code completion, with much research dedicated to enhancing the content of these completions. Despite their effectiveness, these models come with high operational costs and can be intrusive, especially when they suggest too often and interrupt developers who are concentrating on their work. Current research largely overlooks how these models interact with developers in practice and neglects to address when a developer should receive completion suggestions. To tackle this issue, we developed a machine learning model that can accurately predict when to invoke a code completion tool given the code context and available telemetry data. To do so, we collect a dataset of 200k developer interactions with our cross-IDE code completion plugin and train several invocation filtering models. Our results indicate that our small-scale transformer model significantly outperforms the baseline while maintaining low enough latency. We further explore the search space for integrating additional telemetry data into a pre-trained transformer directly and obtain promising results. To further demonstrate our approach's practical potential, we deployed the model in an online environment with 34 developers and provided real-world insights based on 74k actual invocations.
著者: Aral de Moor, Arie van Deursen, Maliheh Izadi
最終更新: 2024-05-23 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2405.14753
ソースPDF: https://arxiv.org/pdf/2405.14753
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。
参照リンク
- https://github.com/ar4l/curating-code-completions
- https://huggingface.co/collections/AISE-TUDelft/smart-invocation-of-code-completion-66473ddf6fa6cf6e541f750c
- https://tex.stackexchange.com/questions/300340/topsep-itemsep-partopsep-and-parsep-what-does-each-of-them-mean-and-wha
- https://dl.acm.org/ccs.cfm
- https://code4me.me
- https://anonymous.4open.science/r/curating-code-completions
- https://huggingface.co/AISE-TUDelft
- https://github.com/features/copilot
- https://aws.amazon.com/codewhisperer/
- https://www.tabnine.com/
- https://codeium.com/
- https://sourcegraph.com/cody
- https://www.jetbrains.com/ai/
- https://cloud.google.com/gemini/docs/codeassist/overview
- https://github.blog/2023-12-29-github-copilot-chat-now-generally-available-for-organizations-and-individuals/
- https://www.gitclear.com/
- https://github.com/vllm-project/vllm
- https://huggingface.co/huggingface/CodeBERTa-small-v1
- https://doi.org/10.5281/zenodo.10935342
- https://pytorch.org
- https://scikit-learn.org
- https://www.jetbrains.com/fleet/
- https://github.com/openai/tiktoken
- https://huggingface.co/sentence-transformers/all-mpnet-base-v2