ゼファーネットのロゴ

組織向けのコーディング コンパニオンのカスタマイズ | アマゾン ウェブ サービス

日付:

コーディング コンパニオンの生成 AI モデルは、ほとんどが公開されているソース コードと自然言語テキストに基づいてトレーニングされます。 トレーニング コーパスのサイズが大きいため、モデルは一般的に使用される機能のコードを生成できますが、これらのモデルはプライベート リポジトリ内のコードや、プライベート リポジトリを使用して開発するときに強制される関連するコーディング スタイルを認識しません。 したがって、生成された提案は、内部リポジトリに適切に組み込む前に書き直す必要がある場合があります。

パブリック コードでトレーニングされた言語モデル上にプライベート リポジトリからのコード知識を埋め込むことで、このギャップに対処し、追加の手動編集を最小限に抑えることができます。 これが、私たちがカスタマイズ機能を開発した理由です。 アマゾン コード ウィスパラー。 この投稿では、検索拡張生成と微調整を使用してコーディング コンパニオンをカスタマイズする XNUMX つの方法を示します。

CodeWhisperer カスタマイズ機能の目標は、組織がプライベート リポジトリとライブラリを使用して CodeWhisperer モデルを調整し、時間を節約し、組織のスタイルと規則に従い、バグやセキュリティの脆弱性を回避する組織固有のコード推奨事項を生成できるようにすることです。 これはエンタープライズ ソフトウェア開発に利益をもたらし、次の課題の克服に役立ちます。

  1. 内部ライブラリや API に関するドキュメントや情報が希薄で、開発者は使用方法を再現するために以前に作成されたコードを調べることに時間を費やす必要があります。
  2. 企業固有のコーディング手法、スタイル、パターンの実装における認識と一貫性の欠如。
  3. 開発者による非推奨のコードと API の不注意な使用。

すでにコード レビューが行われている追加のトレーニングに内部コード リポジトリを使用することにより、言語モデルは、前述の問題リストを克服する内部 API とコード ブロックの使用を表面化できます。 リファレンス コードはすでにレビューされており、顧客の高い基準を満たしているため、バグやセキュリティの脆弱性が発生する可能性も最小限に抑えられます。 また、カスタマイズに使用するソース ファイルを慎重に選択することで、組織は非推奨のコードの使用を減らすことができます。

設計上の課題

組織のプライベート リポジトリに基づいてコード提案をカスタマイズするには、多くの興味深い設計上の課題があります。 コード提案を表示するために大規模言語モデル (LLM) をデプロイすると、可用性に関する固定コストと、生成されたトークンの数に基づく推論による変動コストが発生します。 したがって、顧客ごとに個別にカスタマイズして個別にホストすると、追加の固定費が発生し、法外に高価になる可能性があります。 一方、同じシステム上で同時に複数のカスタマイズを行うには、顧客ごとに独自のコードを分離するためのマルチテナント インフラストラクチャが必要になります。 さらに、カスタマイズ機能では、さまざまなメトリクス (たとえば、バグの履歴が少ないファイルや最近リポジトリにコミットされたコードなど) を使用して内部リポジトリから適切なトレーニング サブセットを選択できるようにするためのノブが表示される必要があります。 これらのメトリクスに基づいてコードを選択することで、より高品質のコードを使用してカスタマイズをトレーニングでき、コード提案の品質を向上させることができます。 最後に、コード リポジトリが継続的に進化している場合でも、企業が開発者の生産性向上によるコスト削減を実現できるように、カスタマイズに関連するコストは最小限に抑える必要があります。

カスタマイズを構築するためのベースライン アプローチは、既存の (パブリック) 事前トレーニング データセットと (プライベート) エンタープライズ コードで構成される単一のトレーニング コーパスでモデルを事前トレーニングすることです。 このアプローチは実際には機能しますが、各企業の公開データセットを使用した (冗長な) 個別の事前トレーニングが必要です。 また、顧客ごとに、その顧客からのクライアント要求のみに対応するカスタマイズされたモデルをホストすることに関連する冗長な展開コストも必要になります。 パブリック コードとプライベート コードのトレーニングを分離し、カスタマイズをマルチテナント システムに展開することで、これらの余分なコストを回避できます。

カスタマイズする方法

大まかに言うと、利用可能なカスタマイズ手法には、検索拡張生成 (RAG) と微調整 (FT) の XNUMX 種類があります。

  • 検索拡張生成: RAG は、リポジトリ内で特定のコード フラグメントに類似した一致するコード部分 (たとえば、IDE のカーソルの直前にあるコード) を検索し、これらの一致したコード スニペットで LLM のクエリに使用されるプロンプトを拡張します。 これにより、プロンプトが強化され、モデルがより関連性の高いコードを生成できるようになります。 これらの方向に沿って文献で検討されているテクニックがいくつかあります。 見る 知識集約型NLPタスクの検索拡張生成, レルム, kNN-LM & RETRO.

  • 微調整: FT は、事前トレーニングされた LLM を取得し、(事前トレーニング データセットと比較して) 特定のより小さいコードベースでさらにトレーニングして、適切なリポジトリに適応させます。 微調整では、このトレーニングに基づいて LLM の重みを調整し、組織固有のニーズに合わせて調整します。

RAG と微調整はどちらも、LLM ベースのカスタマイズのパフォーマンスを向上させるための強力なツールです。 RAG は、トレーニングの複雑さとコストを削減しながら、プライベート ライブラリや API に迅速に適応できます。 ただし、取得したコード スニペットを検索してプロンプトに追加すると、実行時の遅延が増加します。 代わりに、モデルはプライベート ライブラリと API ですでにトレーニングされているため、微調整にはコンテキストの拡張は必要ありません。 ただし、複数のカスタム モデルを複数の企業顧客にわたってサポートする必要がある場合、トレーニング コストが高くなり、モデルの提供が複雑になります。 後で説明しますが、これらの懸念は、アプローチをさらに最適化することで解決できます。

検索拡張生成

RAG にはいくつかの手順が含まれます。

インデキシング

管理者がプライベート リポジトリを入力すると、ソース コード ファイルをチャンクに分割してインデックスが作成されます。 簡単に言うと、チャンク化は、コード スニペットを、モデルにとって最も有益である可能性が高く、コンテキストに応じて簡単に取得できる、消化しやすい部分に変換します。 チャンクのサイズとそれをファイルから抽出する方法は、最終結果に影響を与える設計上の選択です。 たとえば、チャンクはコード行や構文ブロックなどに基づいて分割できます。

管理者のワークフロー


コンテキスト検索

カーソルの上の数行のコードに基づいてインデックス付きのコード スニペットのセットを検索し、関連するコード スニペットを取得します。 この取得は、さまざまなアルゴリズムを使用して実行できます。 これらの選択肢には次のものが含まれる場合があります。

  • 言葉の袋 (BM25) クエリ用語の頻度とコード スニペットの長さに基づいて、コード スニペットのセットをランク付けするバッグ オブ ワード検索関数。

BM25ベースの検索

次の図は、BM25 がどのように動作するかを示しています。 BM25 を使用するには、まず転置インデックスを構築します。 これは、さまざまな用語を、それらの用語が出現するコード スニペットにマッピングするデータ構造です。検索時に、クエリ内に存在する用語に基づいてコード スニペットを検索し、頻度に基づいてスコア付けします。

意味検索

BM25 は字句一致に重点を置いています。 したがって、「追加」を「削除」に置き換えても、クエリ内の用語に基づいて BM25 スコアは変更されない可能性がありますが、取得された機能は必要なものとは逆になる可能性があります。 対照的に、セマンティック検索では、変数名と API 名が異なる場合でも、コード スニペットの機能に焦点を当てます。 通常、BM25 とセマンティック検索を組み合わせると、より良い結果が得られるようにうまく連携できます。

拡張推論

開発者がコードを記述するときは、既存のプログラムを使用して、検索インデックスに送信されるクエリを作成します。 上で説明した手法のいずれかを使用して複数のコード スニペットを取得した後、それらを元のプロンプトの前に追加します。 ここには、取得するスニペットの数、プロンプト内でのスニペットの相対的な配置、スニペットのサイズなど、多くの設計上の選択肢があります。 最終的な設計の選択は主に、基礎となる言語モデルを使用してさまざまなアプローチを検討することによる経験的観察によって決定され、アプローチの精度を決定する上で重要な役割を果たします。 返されたチャンクの内容と元のコードが結合されてモデルに送信され、カスタマイズされたコードの提案が取得されます。

開発者のワークフロー

微調整:

微調整 言語モデルが完成しました 転移学習 事前トレーニングされたモデルの重みが新しいデータでトレーニングされます。 目標は、大規模なコーパスですでにトレーニングされたモデルから適切な知識を保持し、新しいコーパス (この場合は新しいコードベース) から新しい知識を改良、置換、または追加することです。 新しいコードベースでトレーニングするだけで、 壊滅的な忘却。 たとえば、言語モデルは次のようになります。 安全に関する知識を「忘れる」 または、これまでエンタープライズ コードベースでまばらに使用されていた API。 など様々なテクニックがあります 体験リプレイ, GEM, PP-TF この課題に対処するために採用されています。

微調整

微調整には XNUMX つの方法があります。 XNUMX つのアプローチは、モデルを微調整するためのプロンプトを拡張せずに追加データを使用することです。 もう XNUMX つのアプローチは、関連するコードの提案を取得することで、微調整中にプロンプ​​トを強化することです。 これは、取得されたコード スニペットが存在する場合に、より適切な提案を提供するモデルの機能を向上させるのに役立ちます。 モデルは、トレーニング後に、保持されている一連の例に基づいて評価されます。 その後、カスタマイズされたモデルがデプロイされ、コード提案の生成に使用されます。

プライベート リポジトリでコードを生成するために専用 LLM を使用することには利点がありますが、中小規模の組織ではコストが法外に高くなる可能性があります。 これは、チームの規模を考慮すると十分に活用されていない可能性があるにもかかわらず、専用のコンピューティング リソースが必要であるためです。 コスト効率を達成する XNUMX つの方法は、同じコンピューティング上で複数のモデルを提供することです (たとえば、 SageMaker マルチテナンシー)。 ただし、言語モデルでは、レイテンシとスループットの制約に対処するために、複数のゾーンにわたって XNUMX つ以上の専用 GPU が必要です。 したがって、各 GPU でフルモデルをホスティングするマルチテナンシーは実現不可能です。

この問題は、小規模なものを使用して同じコンピューティングで複数の顧客にサービスを提供することで解決できます。 アダプター LLMに。 次のようなパラメータ効率の高い微調整 (PEFT) 手法 プロンプトチューニング, プレフィックスチューニング、および低ランク適応 (ロラ) は、精度を損なうことなくトレーニング コストを削減するために使用されます。 特に LoRA は、フルモデルの微調整と同等 (またはそれ以上) の精度を達成することに大きな成功を収めています。 基本的な考え方は、モデルのターゲット層の元の行列重みを使用して行列に追加される低ランク行列を設計することです。 通常、これらのアダプターは、提供のために元のモデルの重みとマージされます。 これにより、元のニューラル ネットワークと同じサイズとアーキテクチャが得られます。 アダプターを分離しておくと、同じ基本モデルを多くのモデルのアダプターで提供できます。 これにより、スケールメリットが中小規模の顧客に還元されます。

低ランク適応 (LoRA)

カスタマイズの効果を測定する

カスタマイズされたソリューションの有効性を評価するには、評価指標が必要です。 オフライン評価指標は、デフォルト モデルと比較して標準以下のカスタマイズを出荷することに対するガードレールとして機能します。 提供されたリポジトリ内で保持されているデータセットからデータセットを構築することで、カスタマイズ アプローチをこのデータセットに適用して効果を測定できます。 既存のソース コードとカスタマイズされたコードの提案を比較すると、カスタマイズの有用性が定量化されます。 この定量化に使用される一般的な尺度には、次のような指標が含まれます。 類似性を編集する、完全一致、および コードブルー.

また、カスタマイズによって内部 API が呼び出される頻度を定量化し、既存のソースの呼び出しと比較することで有用性を測定することもできます。 もちろん、両方の側面を正しく行うことが、正常に完了するために重要です。 当社のカスタマイズ アプローチでは、カスタマイズ品質指数 (CQI) として知られる、1 ~ 10 の範囲の単一の使いやすい測定基準であるカスタマイズされたメトリクスを設計しました。CQI メトリクスは、コードと比較したカスタマイズされたモデルからの提案の有用性を示します。一般的な公開モデルを使用した提案。

まとめ

私たちは、このブログ投稿で説明した主要な技術手法の組み合わせに基づいて Amazon CodeWhisperer のカスタマイズ機能を構築し、Persistent Systems が実施した開発者の生産性に関するユーザー調査で評価しました。 AWS の委託を受けたこれら 8.2 つの調査では、開発者は内部ライブラリの使用を必要とする医療ソフトウェア アプリケーションを Java で作成するよう求められました。 最初の調査では、CodeWhisperer にアクセスできない開発者はタスクを完了するのに (平均) ~ 62 時間かかりましたが、CodeWhisperer (カスタマイズなし) を使用した開発者は 3.1% 速く、(平均) ~ XNUMX 時間でタスクを完了しました。

別の開発者コホートを対象とした 2.5 番目の調査では、プライベート コードベースを使用してカスタマイズされた CodeWhisperer を使用している開発者は、タスクを平均 28 時間で完了しました。これは、カスタマイズせずに CodeWhisperer を使用し、タスクを約 3.5 時間で完了した開発者よりも XNUMX% 速くなりました。平均して数時間。 私たちは、コードベースに合わせてカスタマイズされた CodeWhisperer のようなツールが、開発者の生産性をさらに高める上で重要な役割を果たすと強く信じており、実際に実行することをお勧めします。 詳細と開始方法については、次のサイトにアクセスしてください。 Amazon CodeWhisperer ページ.


著者について

チン・サン は AWS AI ラボの上級応用科学者であり、生成 AI を活用したコーディング アシスタントである AWS CodeWhisperer に取り組んでいます。 彼女の研究対象は、自然言語処理、AI4Code、生成 AI です。 彼女はこれまで、Comprehend Medical、Amazon Health AI の医療診断システム、Meta AI の機械翻訳システムなど、いくつかの NLP ベースのサービスに取り組んできました。 彼女は 2017 年にバージニア工科大学で博士号を取得しました。

アラシュ・ファラハニ Amazon CodeWhisperer の応用科学者です。 彼の現在の関心は、生成 AI、検索、パーソナライゼーションです。 Arash は、開発者の課題を解決するソリューションの構築に情熱を持っています。 彼は CodeWhisperer 内の複数の機能に取り組み、すべての Amazon 開発者に影響を与えるさまざまな内部ワークストリームに NLP ソリューションを導入しました。 彼は 2017 年にイリノイ大学アーバナ・シャンペーン校で博士号を取得しました。

シャオフェイ・マ AWS AI Labs の応用科学マネージャーです。 彼は 2016 年に SCOT 組織内の応用科学者として Amazon に入社し、その後 2018 年に AWS AI Labs で Amazon Kendra に取り組みました。 Xiaofei は、Kendra、Contact Lens、そして最近では CodeWhisperer と CodeGuru Security を含むいくつかのサービスのサイエンス マネージャーを務めています。 彼の研究関心は、AI4Code と自然言語処理の分野にあります。 彼は 2010 年にメリーランド大学カレッジパーク校で博士号を取得しました。

ムラリ・クリシュナ・ラマナサン AWS AI Labs の主任応用科学者であり、生成 AI を活用したコーディング コンパニオンである AWS CodeWhisperer を共同主導しています。 彼は、開発者の生産性向上に役立つソフトウェア ツールとワークフローの構築に情熱を注いでいます。 過去には、機能フラグが古いためにコードを削除するための自動リファクタリング ツールである Piranha を構築し、Uber エンジニアリングでコード品質の取り組みを主導しました。 Google 教員賞 (2015 年)、ACM SIGSOFT 優秀論文賞 (ISSTA 2016 年)、モーリス ハルステッド賞 (パデュー 2006 年) を受賞しています。 彼は 2008 年にパデュー大学でコンピューター サイエンスの博士号を取得しました。

ラメッシュ・ナラパティ AWS AI Labs の上級主任応用科学者であり、生成 AI を活用したコーディング コンパニオンである CodeWhisperer と AWS の Titan Large Language Models を共同主導しています。 彼の興味は主に自然言語処理と生成 AI の分野です。 Ramesh はこれまで、Kendra、Quicksight Q、Contact Lens などの多くの NLP ベースの AWS 製品の提供において科学分野のリーダーシップを発揮してきました。 彼はスタンフォード大学、CMU、IBM Research で研究職を歴任し、博士号を取得しました。 2006 年にマサチューセッツ大学アマースト校でコンピュータ サイエンスの博士号を取得。

スポット画像

最新のインテリジェンス

スポット画像