(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2025-07-08
(54)【発明の名称】自動プログラム修復のための検索拡張パッチ生成のためのシステム及び方法
(51)【国際特許分類】
G06F 8/35 20180101AFI20250701BHJP
G06F 8/30 20180101ALI20250701BHJP
G06F 8/65 20180101ALI20250701BHJP
【FI】
G06F8/35
G06F8/30
G06F8/65
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024568263
(86)(22)【出願日】2023-05-05
(85)【翻訳文提出日】2024-11-15
(86)【国際出願番号】 US2023021133
(87)【国際公開番号】W WO2023224819
(87)【国際公開日】2023-11-23
(32)【優先日】2022-05-18
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2022-08-26
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】110004381
【氏名又は名称】弁理士法人ITOH
(72)【発明者】
【氏名】ワン,ユエ
(72)【発明者】
【氏名】ワン,ウェイシ
(72)【発明者】
【氏名】ジョティ,シャフィク レイハン
(72)【発明者】
【氏名】ホイ,チュ ホォン
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC31
5B376CA02
(57)【要約】
ニューラルネットワークモデルを使用した自動プログラム修復のためのシステム及び方法について説明する。第1のバグ含有コードパッチが受信された後、パッチリトリーバのリトリーバエンコーダを使用して、第1のバグ含有コードパッチの第1の表現が生成される。パッチリトリーバは、第1の表現に基づいて、第1の複数のバグ修正コードペアから第1のバグ修正コードペアを検索する。第1の拡張バグ含有コードパッチは、第1のバグ含有コードパッチ及び第1のバグ修正コードペアに基づいて生成される。パッチジェネレータは、第1の拡張バグ含有コードパッチに基づいて、修正されたコードパッチを生成する。
【特許請求の範囲】
【請求項1】
自動プログラム修復のための方法であって、
第1のバグ含有コードパッチを受信するステップと、
パッチリトリーバのリトリーバエンコーダを使用して、前記第1のバグ含有コードパッチの第1の表現を生成するステップと、
前記パッチリトリーバを使用して、前記第1の表現に基づいて、第1の複数のバグ修正コードペアから第1のバグ修正コードペアを検索するステップと、
前記第1のバグ含有コードパッチ及び前記第1のバグ修正コードペアに基づいて第1の拡張バグ含有コードパッチを生成するステップと、
パッチジェネレータを介して、前記第1の拡張バグ含有コードパッチに基づいて、修正されたコードパッチを生成するステップと
を含む方法。
【請求項2】
前記パッチリトリーバは、前記第1のバグ含有コードパッチとの語彙的類似性及び意味的類似性のうちの少なくとも1つに基づいて検索を実行するように構成される、請求項1に記載の方法。
【請求項3】
前記パッチリトリーバは、前記第1のバグ含有コードパッチとの語彙的類似性及び意味的類似性の組合せに基づいて検索を実行するように構成される、請求項2に記載の方法。
【請求項4】
前記パッチジェネレータは、シーケンス生成のためのTransformerベースのニューラルネットワークモデルを含む、請求項1に記載の方法。
【請求項5】
前記第1の拡張バグ含有の前記第1のバグ修正ペアは、前記パッチジェネレータのためのガイド修正パターンとして使用される、請求項1に記載の方法。
【請求項6】
前記第1のバグ含有コードパッチを受信する前に、2段階トレーニングプロセスを実行するステップであって、
第1のトレーニングセットを使用して第1段階で前記パッチリトリーバをトレーニングすること、及び
前記トレーニングされたパッチリトリーバ及び第2のトレーニングセットを使用して、第2段階で前記パッチジェネレータをトレーニングすること
を含むステップ
をさらに含む、請求項1に記載の方法。
【請求項7】
前記第1のトレーニングセットは、バグ含有パッチ及び対応する修正されたパッチを含む、請求項6に記載の方法。
【請求項8】
複数の機械可読命令を含む非一時的機械可読媒体であって、前記複数の機械可読命令は、1つ又は複数のプロセッサによって実行されると、前記1つ又は複数のプロセッサに、
第1のバグ含有コードパッチを受信するステップと、
パッチリトリーバのリトリーバエンコーダを使用して、前記第1のバグ含有コードパッチの第1の表現を生成するステップと、
前記パッチリトリーバを使用して、前記第1の表現に基づいて、第1の複数のバグ修正コードペアから第1のバグ修正コードペアを検索するステップと、
前記第1のバグ含有コードパッチ及び前記第1のバグ修正コードペアに基づいて第1の拡張バグ含有コードパッチを生成するステップと、
パッチジェネレータを介して、前記第1の拡張バグ含有コードパッチに基づいて、修正されたコードパッチを生成するステップと
を含む方法を実行させるように適合される、非一時的機械可読媒体。
【請求項9】
前記パッチリトリーバは、前記第1のバグ含有コードパッチとの語彙的類似性及び意味的類似性のうちの
1つ又は複数に基づいて検索を実行するように構成される、請求項8に記載の非一時的機械可読媒体。
【請求項10】
システムであって、
非一時的メモリと、
前記非一時的メモリに結合され、前記非一時的メモリから命令を読み出して前記システムに方法を実行させるように構成された1つ又は複数のハードウェアプロセッサと
を備え、前記方法は、
第1のバグ含有コードパッチを受信するステップと、
パッチリトリーバのリトリーバエンコーダを使用して、前記第1のバグ含有コードパッチの第1の表現を生成するステップと、
前記パッチリトリーバを使用して、前記第1の表現に基づいて、第1の複数のバグ修正コードペアから第1のバグ修正コードペアを検索するステップと、
前記第1のバグ含有コードパッチ及び前記第1のバグ修正コードペアに基づいて第1の拡張バグ含有コードパッチを生成するステップと、
パッチジェネレータを介して、前記第1の拡張バグ含有コードパッチに基づいて、修正されたコードパッチを生成するステップと
を含む、システム。
【請求項11】
前記パッチリトリーバは、前記第1のバグ含有コードパッチとの語彙的類似性及び意味的類似性のうちの少なくとも1つに基づいて検索を実行するように構成される、請求項
10に記載のシステム。
【請求項12】
前記パッチリトリーバは、前記第1のバグ含有コードパッチとの前記語彙的類似性及び前記意味的類似性の組合せに基づいて検索を実行するように構成される、請求項
11に記載のシステム。
【請求項13】
前記パッチジェネレータは、シーケンス生成のためのTransformerベースのニューラルネットワークモデルを含む、請求項
10に記載のシステム。
【請求項14】
前記第1の拡張バグ含有の前記第1のバグ修正ペアは、前記パッチジェネレータのためのガイド修正パターンとして使用される、請求項
10に記載のシステム。
【請求項15】
前記方法は、
前記第1のバグ含有コードパッチを受信する前に、2段階トレーニングプロセスを実行するステップであって、
第1のトレーニングセットを使用して第1段階で前記パッチリトリーバをトレーニングすること、及び
前記トレーニングされたパッチリトリーバ及び第2のトレーニングセットを使用して、第2段階で前記パッチジェネレータをトレーニングすること
を含むステップ
をさらに含む、請求項
10に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
[相互参照]
本開示は、2022年8月26日に出願された米国非仮特許出願第17/896,873号の優先権を主張するものであり、この米国非仮特許出願は、米国特許法第119条の下で、2022年5月18日に出願された米国仮特許出願第63/343,264号の優先権を主張するものであり、これらは、その全体が参照により本明細書に組み込まれる。
【0002】
[技術分野]
実施形態は、一般に、機械学習及び自動コード生成に関し、より具体的には、検索拡張パッチ生成(RAP-Gen)を使用した自動プログラム修復(APR)のためのシステム及び方法に関する。
【背景技術】
【0003】
ソフトウェア開発者は、多くの場合、ソースコードをデバッグ及び修復するために多大な時間及びエネルギーを費やしており、ソフトウェア開発が高価で時間のかかるものになっている。既存の自動プログラム修復ツールの中には、開発時、構築時、又は実行時におけるパッチの探索を含むユースケースで、プログラム修復の難易度及びコストを軽減するものもある。例えば、いくつかの探索ベースの(generate-and-validateとも呼ばれる)アプローチでは、手動のヒューリスティックルール又は冗長性ベースの技法を介してマイニングされた修正パターンに基づいて修復を探索し得る。冗長性ベースの技法は、一般に、多くの場合、修正されたパッチがコードベース内の他の場所(ドナーコードスニペット)から見つかる(又は再構成される)ことができるという冗長性仮定を行う。従って、これらの従来の探索ベースの技法は、プログラムを修復する際の精度及び効率が限られている。
【0004】
従って、自動プログラム修復のためのより効率的な方法が必要である。
【図面の簡単な説明】
【0005】
【
図1】
図3に記載の自動プログラム修復フレームワーク及び本明細書で説明される他の実施形態を実装するためのコンピューティングデバイスの簡略図である。
【
図2】
図3に記載の自動プログラム修復フレームワーク及び本明細書で説明される他の実施形態を実装するのに適したネットワーク化されたシステムの簡略ブロック図である。
【
図3】本明細書で説明されるいくつかの実施形態による、検索拡張パッチ生成を使用した自動プログラム修復フレームワークのための例示的なアーキテクチャを示す例示的なブロック図である。
【
図4A】本明細書で説明されるいくつかの実施形態による、
図3に示されるような自動プログラム修復のための検索拡張パッチ生成フレームワークをトレーニングする方法を示す例示的な論理フロー図である。
【
図4B】本明細書で説明されるいくつかの実施形態による、トレーニングされた検索拡張パッチ生成フレームワークを使用した推論プロセスの方法を示す例示的な論理フロー図である。
【
図5】本明細書で説明されるいくつかの実施形態による、
図1~
図4Bに関連して説明される検索拡張パッチ生成を使用した自動プログラム修復フレームワークの例示的なデータ性能を示す例示的なデータテーブルを提供する。
【
図6】本明細書で説明されるいくつかの実施形態による、
図1~
図4Bに関連して説明される検索拡張パッチ生成を使用した自動プログラム修復フレームワークの例示的なデータ性能を示す例示的なデータテーブルを提供する。
【
図7】本明細書で説明されるいくつかの実施形態による、
図1~
図4Bに関連して説明される検索拡張パッチ生成を使用した自動プログラム修復フレームワークの例示的なデータ性能を示す例示的なデータテーブルを提供する。
【
図8】本明細書で説明されるいくつかの実施形態による、
図1~
図4Bに関連して説明される検索拡張パッチ生成を使用した自動プログラム修復フレームワークの例示的なデータ性能を示す例示的なデータテーブルを提供する。
【
図9】本明細書で説明されるいくつかの実施形態による、
図1~
図4Bに関連して説明される検索拡張パッチ生成を使用した自動プログラム修復フレームワークの例示的なデータ性能を示す例示的なデータテーブルを提供する。
【
図10】本明細書で説明されるいくつかの実施形態による、
図1~
図4Bに関連して説明される検索拡張パッチ生成を使用した自動プログラム修復フレームワークの例示的なデータ性能を示す例示的なデータテーブルを提供する。
【
図11】本明細書で説明されるいくつかの実施形態による、
図1~
図4Bに関連して説明される検索拡張パッチ生成を使用した自動プログラム修復フレームワークの例示的なデータ性能を示す例示的なデータテーブルを提供する。
【
図12】本明細書で説明されるいくつかの実施形態による、
図1~
図4Bに関連して説明される検索拡張パッチ生成を使用した自動プログラム修復フレームワークの例示的なデータ性能を示す例示的なデータテーブルを提供する。
【
図13】本明細書で説明されるいくつかの実施形態による、
図1~
図4Bに関連して説明される検索拡張パッチ生成を使用した自動プログラム修復フレームワークの例示的なデータ性能を示す例示的なデータテーブルを提供する。
【
図14】本明細書で説明されるいくつかの実施形態による、
図1~
図4Bに関連して説明される検索拡張パッチ生成を使用した自動プログラム修復フレームワークの例示的なデータ性能を示す例示的なデータテーブルを提供する。
【
図15】本明細書で説明されるいくつかの実施形態による、
図1~
図4Bに関連して説明される検索拡張パッチ生成を使用した自動プログラム修復フレームワークの例示的なデータ性能を示す例示的なデータテーブルを提供する。
【0006】
これらの図では、同じ符号を有する要素は、同じ又は同様の機能を有する。
【発明を実施するための形態】
【0007】
本明細書で使用される場合、「ネットワーク」という用語は、任意の人工知能ネットワーク若しくはシステム、ニューラルネットワーク若しくはシステム、及び/又はその上に若しくはそれと共に実装される任意のトレーニング若しくは学習モデルを含む、任意のハードウェア又はソフトウェアベースのフレームワークを備え得る。
【0008】
本明細書で使用される場合、「モジュール」という用語は、1つ又は複数の機能を実行するハードウェア又はソフトウェアベースのフレームワークを含み得る。いくつかの実施形態では、モジュールは、1つ又は複数のニューラルネットワーク上に実装され得る。
【0009】
既存の自動プログラム修復システムは、手動デバッギング作業を低減し、ソフトウェア信頼性を向上させ得る。従来の探索ベースの技法は、典型的には、修正パターンをマイニングするためにヒューリスティックルール又は冗長性仮定に依拠する。深層学習ベースのアプローチの中には、コード修復パッチを生成するように学習モデルをトレーニングすることによって、プログラム修復プロセスを自動化し得るものもある。しかしながら、このような学習モデルの性能は、プログラム修復の非常に複雑な探索空間をモデル化するための固定パラメータセットによって制限されることが多い。
【0010】
効率的且つ正確なコード修復システムの必要性に鑑み、本明細書で説明される実施形態は、関連する修正パターンに基づいてパッチリトリーバを使用してコードパッチを検索するための検索拡張パッチ生成フレームワークを提供する。具体的には、生のソースコードに基づく疎な検索及び密な検索を通じて、語彙的マッチング及び意味的マッチングの両方を考慮する修正パターンマイニング用にハイブリッドパッチリトリーバが構成され得る。また、このリトリーバは、抽象構文木などの言語固有の特徴を必要としないので、言語に依存しないリトリーバである。以前の修正パターンマイニングモデルからの1つの改善点は、リトリーバが、様々な修正テンプレートをクラスタ化する代わりに、各バグ含有パッチ(buggy patch:バグのあるパッチ)のためのガイド修正パターンとして、上位1つの関連するバグ修正ペア(bug-fix pair)を利用することである。この戦略は、関連するバグ修正例を探索してバグ修正のためのいくつかの修復手がかりを抽出することが多い人間の開発者のデバッグ挙動と一致する。
【0011】
一実施形態では、事前トレーニングされたTransformerベースのエンコーダ-デコーダモデル(例えば、CodeT5モデル)が、基盤パッチジェネレータとして採用され得る。CodeT5は、コード認識言語モデリング目標を使用して大規模ソースコードコーパスで事前トレーニングされたジェネリックプログラミング言語モデルである。事前トレーニングされたエンコーダ-デコーダモデルをトレーニングして、パッチリトリーバとCodeT5パッチジェネレータとを接続するために、2段階トレーニング戦略が使用され得る。パッチリトリーバは、まず、関連するバグ修正パターンを探索し、次いで、ソースバグ含有コード(buggy code:バグのあるコード)及び外部(検索された)バグ修正知識の両方に基づいて、修正されたパッチを合成するために、それらをパッチジェネレータに渡す。次いで、検索された修正パターンは、ソースバグ含有パッチに直接追加され得る。このようにして、リトリーバは、プログラム修復のための修正パターンマイニングにおける検索のために、任意のシーケンスツーシーケンス学習ベースのモデルと統合され得る。
【0012】
図1は、いくつかの実施形態による、
図3に示される自動プログラム修復フレームワークを実装するためのコンピューティングデバイス100の簡略図である。
図1に示すように、コンピューティングデバイス100は、メモリ120に結合されたプロセッサ110を含む。コンピューティングデバイス100の動作は、プロセッサ110によって制御される。また、コンピューティングデバイス100は、1つのプロセッサ110のみと共に示されているが、プロセッサ110は、コンピューティングデバイス100内の1つ又は複数の中央処理装置、マルチコアプロセッサ、マイクロプロセッサ、マイクロコントローラ、デジタルシグナルプロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、グラフィックス処理ユニット(GPU)などを表し得ることが理解される。コンピューティングデバイス100は、スタンドアロンサブシステムとして、コンピューティングデバイスに追加されたボードとして、及び/又は仮想マシンとして実装され得る。
【0013】
メモリ120は、コンピューティングデバイス100によって実行されるソフトウェア及び/又はコンピューティングデバイス100の動作中に使用される1つ又は複数のデータ構造を記憶するために使用され得る。メモリ120は、1つ又は複数のタイプの機械可読媒体を含み得る。機械可読媒体のいくつかの一般的な形態には、フロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、磁気テープ、任意の他の磁気媒体、CD-ROM、任意の他の光学媒体、パンチカード、紙テープ、穴のパターンを有する任意の他の物理媒体、RAM、PROM、EPROM、FLASH-EPROM、任意の他のメモリチップ若しくはカートリッジ、及び/又はプロセッサ若しくはコンピュータが読み取るように適合された任意の他の媒体が含まれ得る。
【0014】
プロセッサ110及び/又はメモリ120は、任意の適切な物理的配置で配置され得る。いくつかの実施形態では、プロセッサ110及び/又はメモリ120は、同じボード上、同じパッケージ(例えば、システムインパッケージ)内、同じチップ(例えば、システムオンチップ)上などにおいて実装され得る。いくつかの実施形態では、プロセッサ110及び/又はメモリ120は、分散、仮想化、及び/又はコンテナ化されたコンピューティングリソースを含み得る。そのような実施形態と一致して、プロセッサ110及び/又はメモリ120は、1つ又は複数のデータセンタ及び/又はクラウドコンピューティング施設に位置し得る。
【0015】
いくつかの例では、メモリ120は、1つ又は複数のプロセッサ(例えば、プロセッサ110)によって実行されたとき、本明細書でさらに詳細に説明する方法を1つ又は複数のプロセッサに実行させ得る実行可能コードを含む非一時的有形機械可読媒体を含み得る。例えば、図示のように、メモリ120は、システム及びモデルを実装及び/若しくはエミュレートするために、並びに/又は本明細書でさらに説明される方法のいずれかを実装するために使用され得る自動プログラム修復モジュール130のための命令を含む。自動プログラム修復モジュール130は、データインターフェース115を介して、プログラムバグなどの入力を含む入力140を受信し得る。自動プログラム修復モジュール130は、コードパッチなどの出力150を生成し得る。
【0016】
いくつかの実施形態では、自動プログラム修復モジュール130は、リトリーバエンコーダサブモジュール131と、パッチリトリーバサブモジュール132と、パッチジェネレータサブモジュール133とを含む。一実施形態では、自動プログラム修復モジュール130及びそのサブモジュール131~133は、ハードウェア、ソフトウェア、及び/又はそれらの組合せによって実装され得る。
【0017】
コンピューティングデバイス200などのコンピューティングデバイスのいくつかの例には、1つ又は複数のプロセッサ(例えば、プロセッサ110)によって実行されると、1つ又は複数のプロセッサに、方法のプロセスを実行させ得る実行可能コードを含む非一時的な有形の機械可読媒体が含まれ得る。方法のプロセスを含み得る機械可読媒体のいくつかの一般的な形態としては、例えば、フロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、磁気テープ、任意の他の磁気媒体、CD-ROM、任意の他の光学媒体、パンチカード、紙テープ、穴のパターンを有する任意の他の物理媒体、RAM、PROM、EPROM、FLASH-EPROM、任意の他のメモリチップ若しくはカートリッジ、及び/又はプロセッサ若しくはコンピュータが読み取るように適合された任意の他の媒体が挙げられる。
【0018】
図2は、
図3に記載の自動プログラム修復フレームワーク及び本明細書で説明される他の実施形態を実装するのに適したネットワーク化されたシステムの簡略ブロック図である。一実施形態では、ブロック
図200は、ユーザ240によって動作され得るユーザデバイス210と、データベンダサーバ245、270、及び280と、サーバ230と、説明される実施形態に従って、様々な方法論を実行するように動作する他の形態のデバイス、サーバ、及び/又はソフトウェア構成要素とを含むシステムを示す。例示的なデバイス及びサーバには、MICROSOFT(登録商標)OS、UNIX(登録商標)OS、LINUX(登録商標)OS、又は他の適切なデバイス及び/若しくはサーバベースのOSなどのOSを動作させる、
図1に記載されたコンピューティングデバイス100と同様であり得るデバイス、スタンドアロン、及びエンタープライズクラスのサーバが含まれ得る。
図2に示されるデバイス及び/又はサーバは、他の方法で展開されてもよく、実行される動作、及び/又はそのようなデバイス及び/又はサーバによって提供されるサービスは、所与の実施形態のために組み合わせられるか、又は分離されてもよく、より多数又はより少数のデバイス及び/又はサーバによって実行されてもよいことを理解することができる。1つ又は複数のデバイス及び/又はサーバは、同じ又は異なるエンティティによって動作及び/又は維持され得る。
【0019】
ユーザデバイス210、データベンダサーバ245、270及び280、並びにサーバ230は、ネットワーク260を介して互いに通信し得る。ユーザデバイス210は、出力データ異常レポートを受信するためにサーバ230に関連付けられたプロセス及び/又はアプリケーションを含み得る、ユーザデバイス210に利用可能な様々な機能にアクセスするために、ユーザ240(例えば、ドライバ、システム管理者など)によって利用され得る。
【0020】
ユーザデバイス210、データベンダサーバ245、及びサーバ230は各々、本明細書で説明される様々なアプリケーション、データ、及びステップを実装するために、1つ又は複数のコンピュータ可読媒体上に記憶されたプログラムコード及び/又はデータなどの命令を実行するための1つ又は複数のプロセッサ、メモリ、及び他の適切な構成要素を含み得る。例えば、そのような命令は、システム200の様々な構成要素の内部及び/若しくは外部の、並びに/又はネットワーク260を介してアクセス可能なメモリ又はデータ記憶デバイスなどの1つ又は複数のコンピュータ可読媒体に記憶され得る。
【0021】
ユーザデバイス210は、データベンダサーバ245及び/又はサーバ230とのワイヤード及び/又はワイヤレス通信のために構成された適切なハードウェア及びソフトウェアを利用し得る通信デバイスとして実装され得る。例えば、一実施形態では、ユーザデバイス210は、自律運転車両、パーソナルコンピュータ(PC)、スマートフォン、ラップトップ/タブレットコンピュータ、適切なコンピュータハードウェアリソースを有する腕時計、適切なコンピュータハードウェアを有する眼鏡(例えば、GOOGLE GLASS(登録商標))、他のタイプのウェアラブルコンピューティングデバイス、埋め込み型通信デバイス、及び/又はAPPLE(登録商標)のIPAD(登録商標)などのデータを送信及び/又は受信することができる他のタイプのコンピューティングデバイスとして実装され得る。1つの通信デバイスのみが示されているが、複数の通信デバイスが同様に機能してもよい。
【0022】
図2のユーザデバイス210は、ユーザインターフェース(UI)アプリケーション212、及び/又は他のアプリケーション216を含み、これらは、実行可能なプロセス、プロシージャ、及び/又は関連するハードウェアを有するアプリケーションに対応し得る。例えば、ユーザデバイス210は、サーバ230からバグ含有コード及び/又は修正されたコードを示すメッセージを受信し、UIアプリケーション212を介してメッセージを表示し得る。他の実施形態では、ユーザデバイス210は、必要に応じて、専用ハードウェア及び/又はソフトウェアを有する追加の又は異なるモジュールを含んでもよい。
【0023】
様々な実施形態では、ユーザデバイス210は、ユーザデバイス210に機能を提供するために特定の実施形態において所望され得る他のアプリケーション216を含む。例えば、他のアプリケーション216には、クライアント側セキュリティ機能を実装するためのセキュリティアプリケーション、ネットワーク260を介して適切なアプリケーションプログラミングインターフェース(API)とインターフェースをとるためのプログラムクライアントアプリケーション、又は他のタイプのアプリケーションが含まれ得る。他のアプリケーション216にはまた、ユーザが、ネットワーク260を介して、電子メール、通話、テキスト、及び他の通知を送受信することを可能にする、電子メール、テキスティング、音声、ソーシャルネットワーキング、及びIMアプリケーションなどの通信アプリケーションが含まれ得る。例えば、他のアプリケーション216は、サーバ230から予測結果メッセージを受信する電子メール又はインスタントメッセージングアプリケーションであり得る。他のアプリケーション216は、入力及び/又は出力情報を受信し得るデバイスインターフェース及び他のディスプレイモジュールを含み得る。例えば、他のアプリケーション216は、バグ含有コード及び/又は修正されたコードを閲覧するためのインターフェースをユーザ240に提供するように構成されたグラフィカルユーザインターフェース(GUI)を含む、プロセッサによって実行可能な資産管理のためのソフトウェアプログラムを含み得る。
【0024】
ユーザデバイス210は、様々なアプリケーション及びデータを記憶し、ユーザデバイス210の様々なモジュールの実行中に利用され得る、ユーザデバイス210の一時的及び/又は非一時的メモリに記憶されたデータベース218をさらに含み得る。データベース218は、ユーザ240に関するユーザプロファイル、ユーザ240によって以前に閲覧又は保存された予測、サーバ230から受信された履歴データなどを記憶し得る。いくつかの実施形態では、データベース218は、ユーザデバイス210に対してローカルであり得る。しかしながら、他の実施形態では、データベース218は、ユーザデバイス210の外部にあり、ネットワーク260を介してアクセス可能なクラウドストレージシステム及び/又はデータベースを含むユーザデバイス210によってアクセス可能であり得る。
【0025】
ユーザデバイス210は、データベンダサーバ245及び/又はサーバ230と通信するように適合された少なくとも1つのネットワークインターフェース構成要素219を含む。様々な実施形態では、ネットワークインターフェース構成要素219には、DSL(例えば、Digital Subscriber Line)モデム、PSTN(Public Switched Telephone Network)モデム、イーサネット(登録商標)デバイス、ブロードバンドデバイス、衛星デバイス、並びに/又はマイクロ波、無線周波数、赤外線、Bluetooth(登録商標)、及び近距離通信デバイスを含む様々な他のタイプのワイヤード及び/若しくはワイヤレスネットワーク通信デバイスが含まれ得る。
【0026】
データベンダサーバ245は、バグ含有コード及び修正されたコードのペアを含むトレーニングデータセットをサーバ230に提供するために、データベース203a~n(又は集合的に203と呼ばれる)のうちの1つ又は複数をホストするサーバに対応し得る。データベース203は、1つ又は複数のリレーショナルデータベース、分散データベース、クラウドデータベースなどによって実装され得る。
【0027】
データベンダサーバ245は、ユーザデバイス210及び/又はサーバ230と通信するように適合された少なくとも1つのネットワークインターフェース構成要素226を含む。様々な実施形態では、ネットワークインターフェース構成要素226には、DSL(例えば、Digital Subscriber Line)モデム、PSTN(Public Switched Telephone Network)モデム、イーサネット(登録商標)デバイス、ブロードバンドデバイス、衛星デバイス、並びに/又はマイクロ波、無線周波数、赤外線、Bluetooth(登録商標)、及び近距離通信デバイスを含む様々な他のタイプのワイヤード及び/若しくはワイヤレスネットワーク通信デバイスが含まれ得る。例えば、一実装形態では、データベンダサーバ245は、ネットワークインターフェース226を介してデータベース203からサーバ230に資産情報を送信し得る。
【0028】
サーバ230は、
図1に記載された自動プログラム修復モジュール130及びそのサブモジュールと共に収容され得る。いくつかの実装形態では、モジュール130は、コードの修正されたパッチを生成するために、ネットワーク260を介してデータベンダサーバ245においてデータベース219からデータを受信し得る。生成されたコードの修正されたパッチは、ネットワーク260を介してユーザ240によるレビューのためにユーザデバイス210に送信され得る。
【0029】
データベース232は、サーバ230の一時的及び/又は非一時的メモリに記憶され得る。一実装形態では、データベース232は、データベンダサーバ245から取得されたデータを記憶し得る。一実装形態では、データベース232は、自動プログラム修復モジュール130のパラメータを記憶し得る。一実装形態では、データベース232は、以前に生成されたコードの修正されたパッチ及び対応する入力特徴ベクトルを記憶し得る。
【0030】
いくつかの実施形態では、データベース232は、サーバ230に対してローカルであり得る。しかしながら、他の実施形態では、データベース232は、サーバ230の外部にあり、ネットワーク260を介してアクセス可能なクラウドストレージシステム及び/又はデータベースを含むサーバ230によってアクセス可能であり得る。
【0031】
サーバ230は、ネットワーク260を介してユーザデバイス210及び/又はデータベンダサーバ245、270若しくは280と通信するように適合された少なくとも1つのネットワークインターフェース構成要素233を含む。様々な実施形態では、ネットワークインターフェース構成要素233には、DSL(例えば、Digital Subscriber Line)モデム、PSTN(Public Switched Telephone Network)モデム、イーサネット(登録商標)デバイス、ブロードバンドデバイス、衛星デバイス、並びに/又はマイクロ波、無線周波数(RF)、及び赤外線(IR)通信デバイスを含む様々な他のタイプのワイヤード及び/若しくはワイヤレスネットワーク通信デバイスが含まれ得る。
【0032】
ネットワーク260は、単一のネットワーク又は複数のネットワークの組合せとして実装され得る。例えば、様々な実施形態では、ネットワーク260は、インターネット又は1つ又は複数のイントラネット、地上通信線ネットワーク、ワイヤレスネットワーク、及び/又は他の適切なタイプのネットワークを含み得る。従って、ネットワーク260は、システム200の様々な構成要素によってアクセス可能な、プライベート若しくはローカルエリアネットワークなどの小規模通信ネットワーク、又はワイドエリアネットワーク若しくはインターネットなどの大規模ネットワークに対応し得る。
【0033】
図3は、本明細書で説明される実施形態による、RAP-Genフレームワーク300とも呼ばれる、検索拡張パッチ生成(RAP-Gen)を使用した自動プログラム修復フレームワーク300の例示的なアーキテクチャを示す例示的なブロック図である。RAP-Genフレームワーク300は、検索を介して関連するバグ修正パターンと共に、入力されたバグ含有パッチに基づいてターゲットプログラムパッチを生成することを目的とする。
【0034】
自動プログラム修復のための検索拡張パッチ生成のタスク定式化は、以下のように説明される。
【数1】
を、|D|個のバグ修正ペア(X
iY
i)から構成されるプログラム修復データセットとし、ここで、X
i及びY
iは、それぞれ、i番目のバグ含有プログラムパッチ及び修正されたプログラムパッチである。コードベースC(例えば、コードベース302)は、以前のバグ修正ペアの大きな集合
【数2】
を含み、ここで、(B
j,F
j)は、j番目のバグ修正ペアを示す。D内のバグ含有プログラムパッチX
i308が与えられると、パッチリトリーバ304は、φによってパラメータ化された関連性スコアリング関数f
φ(X
i,B
j)に基づいて、コードベースC内の1つ又は複数の最も関連性のあるバグ修正ペア(複数可)(B
j、F
j)を検索する。
【0035】
いくつかの実施形態では、元の入力シーケンスX
i308を、検索されたバグ修正ペアで拡張して、新しい入力シーケンス312を形成し、例えば、
【数3】
次いで、パッチジェネレータ306(例えば、シーケンスツーシーケンス(seq2seq)ジェネレータを使用するものであり、シーケンスジェネレータ306とも呼ばれる)が、自己回帰的に
【数4】
からY
i316を生成し得る。フレームワーク300は、θによってパラメータ化されたパッチジェネレータ306を用いて確率
【数5】
を学習し得、ここで、Y
i,1:Y
i,k-1は、k番目のトークンの前の前のシーケンスであり、nは、ターゲットシーケンスYi内のトークンの数を示す。いくつかの実施形態では、外部コードベースC302は、ノンパラメトリックメモリとみなされ得、検索されたバグ修正ペア310は、パッチ生成モデル306のためのガイド修正パターンとみなされ得る。確率的には、検索Z
j(B
j,F
j)は、潜在変数として定式化され得、これは、場合によってはtop-1で近似され得る。形式的には、
【数6】
であり、ここで、
【数7】
は、リトリーバP
φ(Z
jX
i)からのtop-1の検索された出力である。k>1にわたるマージナライゼーションはトレーニング及び推論を複雑且つ非効率的にするので、効率向上のためにtop-1近似が採用され得る。いくつかの実施形態では、フレシェ開始距離(FiD)法を用いたtop-k(例えば、k=2,3,5)が使用され得る。
【0036】
図3の例に示すように、RAP-Genフレームワーク300は、パッチリトリーバ304と、コード認識事前トレーニング済みパッチジェネレータ306とを含む。パッチリトリーバ304は、自動プログラム修復に役立つ関連する修正パターンを検索するように構成される。これは、関連性スコアリング関数f
φ(X
i、B
j)を基に、(クエリ)バグ含有パッチXi308とコードベースC302内の前の(キー)バグ含有パッチB
jとの間の関連性を計算し得る。様々な実施形態では、パッチリトリーバ304は、語彙ベースのリトリーバ(lexical-based retriever)(例えば、BM25)及び/又は意味ベースのリトリーバ(semantic-based retriever)(例えば、Dense Passage Retrieval(DPR))を含み得る。
図3の例では、パッチリトリーバ304は、ニューラルネットワークモデル(例えば、リトリーバエンコーダ318)を含み、ハイブリッドアプローチを使用して、語彙ベースのリトリーバ(例えば、BM25)と意味ベースのリトリーバ(例えば、DPR)とを組み合わせて、語彙情報と意味情報の両方を考慮に入れる。
【0037】
語彙ベースのリトリーバ(Lexical-based Retriever)。いくつかの実施形態では、語彙ベースのリトリーバ(例えば、BM25)は、用語ベースのリトリーバを使用して実装され得、語彙的マッチングのために疎ベクトル表現を使用し得る。語彙ベースのリトリーバは、各コードパッチをbag-of-words表現として変換し、クエリパッチXiと候補パッチBjとの間の語彙的類似性(lexical similarity)を計算し得る。計算された類似性スコアは、fφ(Xi,Bj)=BM25(Xi,Bj)と表される。一例では、疎な用語ベースのリトリーバは、コードのセマンティクスに影響を与えないソースコード内の識別子命名(identifier naming)の選択に敏感であり得る。
【0038】
意味ベースのリトリーバ(Semantic-based Retriever)。いくつかの実施形態では、意味ベースのリトリーバは、Dense Passage Retriever(DPR)を使用して実装され得、それらの意味的類似性(semantic similarity)を測定することを介して、関連するパッチを検索し得る。いくつかの実施形態では、コードパッチを符号化するために、エンコーダ(例えば、Transformerベースのエンコーダ)を使用して、各パッチを固定サイズの密ベクトルにマッピングし得る。DPRは、事前トレーニングされたTransformerベースのニューラルネットワークモデル(例えば、Code Bidirectional Encoder Representations from Transformers(CodeBERT)など)のエンコーダから初期化され得る。エンコーダは、1つ又は複数のプログラミング言語の大規模なコードリポジトリ(例えば、6つのプログラミング言語のGitHubコードリポジトリ)を使用して事前トレーニングされ得る。一例では、エンコーダからの[CLS]トークンの最終層の隠れ状態がパッチ表現として使用される。いくつかの実施形態では、共有DPRを使用して、クエリパッチX
i308及びC内の候補パッチB
jを、それぞれ、
【数8】
として別々に符号化し得る。次いで、以下のように、これらの2つのパッチ表現間の内積によって類似性が計算される:
【数9】
【0039】
いくつかの実施形態では、共有DPRを使用して、クエリパッチX
i308及びC内の候補パッチF
jを、それぞれ、
【数10】
として別々に符号化し得る。次いで、以下のように、これらの2つのパッチ表現間の内積によって類似性が計算される:
【数11】
【0040】
本明細書の説明は、一般に、検索のためにXiとBjとの間の類似性(例えば、fφ(Xi,Bj)を使用)を使用するが、検索に使用される類似性は、XiとBjとの間の類似性(例えば、fφ(Xi,Bj)を使用)、XiとFjとの間の類似性(例えば、fφ(Xi,Fj)を使用)、及び/又はそれらの組合せを含み得ることに留意されたい。
【0041】
いくつかの実施形態では、意味ベースのリトリーバ(例えば、DPR)は、バグ含有パッチと修正されたパッチとのペアを含むトレーニングデータセットを使用してさらにトレーニングされる。一例では、バグ含有コードBjをクエリとみなし、対応する修正されたコードFjをキーとみなすことによって、バグ修正ペアを含むコードベース302が使用され得る。これは、バグ含有パッチ及びその修正されたパッチが多くの場合同様のセマンティクス(例えば、識別子、データフロー、及びコード構造)を共有するという仮定に基づいて実行され得る。この技法は、バグツーバグ探索データセットをキュレーションするために必要とされる膨大な手作業による注釈付け作業を回避するために使用され得る。
【0042】
バグ修正ペアがクエリ及び対応するキーとして使用される例では、意味ベースのリトリーバをトレーニングするために、バッチ内ネガティブを用いた対照学習法314が使用され、バッチ内ネガティブは、以下のように、対照損失(例えば、InfoNCE対照損失)を最適化するために使用される:
【数12】
ここで、Mは現在のミニバッチであり、Nはミニバッチ内の正のトレーニング例の数を示す。この目的は、負例間の類似性を最小にしながら、正例間の類似性を最大にすることを目的とする。それぞれの正例は、|M|-1個の負のサンプルを有し得る。様々な対照学習技法、例えば、バッチ内ネガティブ戦略、ハードネガティブマイニング戦略などが使用され得るが、いくつかの実施形態では、上記で説明したバッチ内ネガティブを用いた対照学習は、ノイズの多いトレーニングデータに対してハードネガティブマイニング戦略よりも良好な性能を提供することに留意されたい。
【0043】
いくつかの実施形態では、推論段階において、クエリバグ含有パッチXi308が与えられると、意味ベースのリトリーバ(例えば、DPR)は、Xi(クエリ)とBj(キー)との間の類似性を計算することによって、関連するバグ修正ペア(Bj,Fj)を検索する。いくつかの実施形態では、意味ベースのリトリーバは、XiとFjとの間の類似性、及び/又はXi(クエリ)とBj(キー)との間の類似性との組合せに基づいて、関連するバグ修正ペアを検索し得る。
【0044】
ハイブリッドリトリーバ(Hybrid Retriever)。
図3の例に示すように、いくつかの実施形態では、語彙情報と意味情報の両方を考慮に入れるために、語彙リトリーバ(例えば、BM25)と意味リトリーバ(例えば、DPR)を組み合わせるハイブリッドアプローチが利用される。例えば、類似性スコアは、
【数13】
として計算され得、ここで、
【数14】
は、2つのリトリーバのバランスをとるための重みであり、経験的に1に設定され得る。ハイブリッドリトリーバは、語彙情報又は意味情報のいずれかのみに依拠するリトリーバと比較して、よりロバストである。
【0045】
図3の例では、RAP-Genフレームワーク300は、修正されたコードパッチを生成するためのパッチジェネレータ306を含む。いくつかの実施形態では、コード認識事前トレーニングパッチジェネレータ306によって、ソースバグ含有パッチ308又はクエリバグ含有パッチ308とも呼ばれる入力バグ含有パッチ308(X
iと示される)、及び検索されたバグ修正パターン310(B
j、F
jと示される)を使用して、例えば、以下のような連結を使用して、拡張バグ含有コードパッチ312が生成される:
【数15】
パッチジェネレータ306は、(例えば、seq2seqモデルを用いて)修正されたコードパッチY
i316を生成するために構築される。RAP-Genフレームワーク300内のパッチジェネレータ306は、シーケンス生成のための任意の適切なニューラルネットワークモデル(シーケンス生成モデル又はシーケンスジェネレータとも呼ばれる)を含み得る。いくつかの実施形態では、パッチジェネレータ306は、自然言語実装上で最適化されたシーケンスジェネレータを含む。
【0046】
いくつかの実施形態では、パッチジェネレータ306は、大規模ソースコードコーパスで事前トレーニングされたコード認識プログラミング言語モデルを含む。一例では、シーケンスジェネレータは、欠陥検出及びコードリファインメント(code refinement)など、複数のコードインテリジェンスタスクにおいて最先端の(SoTA)結果を達成する、統合された事前トレーニングされたTransformerベースのエンコーダデコーダモデルであるCodeT5を使用する。これは、GitHubから収集された8つの異なるプログラミング言語(JavaScript(登録商標)及びJava(登録商標)を含む)における830万個の関数で事前トレーニングされ得る。CodeT5は、識別子認識事前トレーニング目的を採用して、コード固有の知識を言語モデルに組み込み得る。これは、コードに対して最適化されたコード固有のバイトペア符号化(BPE)トークナイザを提供し得、Out-of-Vocabulary(OoV)問題を回避することが可能であり得る。CodeT5は、強力なコード理解能力を提供し得るパッチジェネレータ306において使用され得る。
【0047】
図3の例に示すように、パッチジェネレータ306(例えば、CodeT5)への検索拡張入力312は、
【数16】
として準備され得、ここで、[BUG]及び[FIX]は、検索されたバグ修正ペアをソースバグ含有パッチ308と分離するための特別なトークンである。パッチジェネレータ306(例えば、CodeT5)は、
【数17】
を入力としてとるためのエンコーダ318と、修正されたパッチY
i316を合成及び生成するためのデコーダ320とを含み得る。いくつかの実施形態では、パッチジェネレータ306のトレーニング中、教師強制アルゴリズムを使用して、言語モデリング損失を最小限に抑え得る。いくつかの実施形態では、トレーニングされたパッチジェネレータを使用した推論中、ビーム探索(例えば、サイズ5)を使用して、候補修正されたパッチのランキングリストを生成する。
【0048】
様々な実施形態では、RAP-Genフレームワーク300は、(例えば、CodeT5を使用して)大規模コードコーパスに対する事前トレーニングを介して符号化された一般的なコード理解知識を活用する。例えば、ソース入力シーケンス312は、元のバグ含有コードパッチ308と、パッチリトリーバ304からの上位にランク付けされたバグ修正ペア310とを連結することによって生成され得る。いくつかの実施形態では、拡張されたソース入力バグ含有パッチ312は、top-k(例えば、k=2,3,5)の検索されたバグ修正ペアを入力バグ含有パッチ308に連結することによって生成され得る。
【0049】
図4Aは、本明細書で説明されるいくつかの実施形態による、
図3に示されるような自動プログラム修復のための検索拡張パッチ生成フレームワークをトレーニングする方法を示す例示的な論理フロー図である。方法400のプロセスのうちの1つ又は複数は、少なくとも部分的に、1つ又は複数のプロセッサによって実行されると、1つ又は複数のプロセッサに、プロセスのうちの1つ又は複数を実行させ得る、非一時的有形機械可読媒体上に記憶された実行可能コードの形態で実装され得る。いくつかの実施形態では、方法400は、検索拡張パッチ生成を使用して自動プログラム修復を実行するための自動プログラム修復モジュール130(例えば、
図1)の動作に対応する。
【0050】
ステップ402において、リトリーバエンコーダを含むパッチリトリーバが提供される。
図3の例では、検索拡張パッチ生成フレームワーク300において、リトリーバエンコーダ318を含むパッチリトリーバ304が提供される。いくつかの実施形態では、ステップ404に示されるように、リトリーバエンコーダ318は、例えば、大規模プログラミング言語コーパス(例えば、1つ又は複数のプログラミング言語におけるGitHubコードリポジトリ又は他の適したコードリポジトリ)を含む第1のトレーニングデータセットを使用して、事前トレーニングされる。
【0051】
ステップ406において、シーケンスジェネレータニューラルネットワークモデルを含むパッチジェネレータが提供される。
図3の例では、検索拡張パッチ生成フレームワーク300において、パッチジェネレータ306は、シーケンスジェネレータニューラルネットワークモデル、具体的には、ジェネレータエンコーダ318及びジェネレータデコーダ320を含むTransformerベースのエンコーダデコーダモデルを含む。いくつかの実施形態では、ステップ404に示されるように、パッチジェネレータ306は、例えば、大規模プログラミング言語コーパス(例えば、1つ又は複数のプログラミング言語におけるGitHubコードリポジトリ又は他の適したコードリポジトリ)を含む第2のトレーニングデータセットを使用して、事前トレーニングされる。
【0052】
ステップ410において、パッチリトリーバ及びパッチジェネレータを含むRAP-Genフレームワーク(例えば、
図3のRAP-Genフレームワーク)が、例えば、2段階トレーニングプロセスを使用してトレーニングされ得る。2段階トレーニングプロセスは、第3のトレーニングデータセットを使用してパッチリトリーバをトレーニングすることによって第1段階トレーニングが実行されるステップ412を含む。いくつかの実施形態では、第3のトレーニングデータセットは、コードベース302内のバグ修正ペアを使用し得る。例えば、パッチリトリーバ304の意味リトリーバをトレーニングするために第3のトレーニングデータセットを使用する場合、コードベース内のバグ修正ペアのバグ含有コードBjがクエリとみなされ得、対応する修正されたコードFjがキーとみなされ得る。別の例では、コードベース内のバグ修正ペアの修正されたコードFjがクエリとみなされ得、対応するバグ含有コードBjがキーとみなされ得る。これは、バグ含有パッチ及びその修正されたパッチが多くの場合同様のセマンティクス(例えば、識別子、データフロー、及びコード構造)を共有するという仮定に基づく。第3のトレーニングデータセットのためにコードベース302内のバグ修正ペアを使用することによって、第3のトレーニングデータセットとしてバグツーバグ探索データセットをキュレーションするために必要とされる膨大な手作業による注釈付け作業が回避され得る。一例では、第1段階のトレーニングは、対照損失を最適化することによって、対照学習アルゴリズムを使用し得る。
【0053】
2段階トレーニングプロセスは、第1段階トレーニングによってトレーニングされたパッチリトリーバを使用して、第4のトレーニングデータセットを使用してパッチジェネレータをトレーニングすることによって第2段階トレーニングが実行されるステップ414を含む。一例では、パッチジェネレータへの入力が、元の入力バグ含有コードパッチと、トレーニングされたパッチリトリーバからの上位にランク付けされたバグ修正ペアとを使用して生成される場合、教師強制アルゴリズムを使用して、言語モデリング損失を最小限に抑える。
【0054】
第2段階トレーニング中、第4のトレーニングセットがバグ修正ペアコードベースから生成される例では、パッチリトリーバ(第1段階トレーニングを使用して既にトレーニング済み)は、グラウンドトゥルースのバグ修正ペアにアクセスすることを許可されない。そうでなければ、パッチジェネレータが検索された修正をターゲット出力として直接コピーし得るので、トレーニング損失は容易にゼロ近くまで低下する。その例では、第4のトレーニングセットの各サンプルは、コードベースからの対応するバグ修正ペア(グラウンドトゥルースバグ修正ペアとも呼ばれる)のバグ含有パッチであり、対応するグラウンドトゥルースは、対応するバグ修正ペアの修正されたパッチである。各サンプルバグ含有パッチ入力について、別のバグ修正ペア(グラウンドトゥルースのものではない)が、パッチリトリーバによってコードベースから検索される。検索されたバグ修正ペアは、バグ含有パッチ入力に付加されて、パッチジェネレータのための拡張シーケンス入力を生成する。グラウンドトゥルースのバグ修正ペアへのアクセスがないという要件は、コードベースが第4のトレーニングセットを提供するために使用されるときのトレーニングの第2段階にのみ適用され、コードベースが第3のトレーニングセットを提供するために使用されるときのパッチリトリーバをトレーニングする第1段階には適用されないことに留意されたい。
【0055】
第3及び第4のデータセットがどのように生成されるか?ダウンストリームデータセットごとにバグ修正ペアがあり、これはまさに第3のトレーニングセットであることを想起されたい。
【0056】
図4Bを参照すると、本明細書で説明されるいくつかの実施形態による、トレーニングされた検索拡張パッチ生成フレームワークを使用する推論プロセスの方法450を示す例示的な論理フロー図が示されている。方法450のプロセスのうちの1つ又は複数は、少なくとも部分的に、1つ又は複数のプロセッサによって実行されると、1つ又は複数のプロセッサに、プロセスのうちの1つ又は複数を実行させ得る、非一時的有形機械可読媒体上に記憶された実行可能コードの形態で実装され得る。いくつかの実施形態では、方法450は、検索拡張パッチ生成を使用して自動プログラム修復を実行するための自動プログラム修復モジュール130(例えば、
図1)の動作に対応する。
【0057】
ステップ452において、トレーニングされた検索拡張パッチ生成フレームワークによって第1のバグ含有パッチが受信される。
図3の例では、トレーニングされた検索拡張パッチ生成フレームワーク300は、第1のバグ含有パッチ308を受信し、それをそのトレーニングされたパッチリトリーバ304の入力に提供する。
【0058】
ステップ454において、第1のバグ含有パッチに基づいて1つ又は複数のバグ修正ペアが提供される。
図3の例では、トレーニングされたパッチリトリーバ304は、第1のバグ含有パッチ308を受信し、例えば、第1のバグ含有パッチ308とバグ修正ペアとの間の類似性に基づいて、コードベース302から1つ又は複数のバグ修正ペアを検索する。様々な実施形態では、類似性は、第1のバグ含有パッチ308とバグ修正ペアのバグ含有パッチとの間の類似性、第1のバグ含有パッチ308とバグ修正ペアの修正されたパッチとの間の類似性、又はそれらの組合せに基づいて決定される。類似性は、語彙的類似性、意味的類似性、又はそれらの組合せを含み得る。
【0059】
ステップ456において、第1のバグ含有パッチ及び検索された1つ又は複数のバグ修正ペアに基づいて、第1の拡張バグ含有パッチが生成される。
図3の例では、第1のバグ含有パッチ308と、パッチリトリーバ304によって提供された1つ又は複数のバグ修正ペア310とを使用して第1の拡張バグ含有パッチ312が生成される。第1の拡張バグ含有パッチ312は、パッチジェネレータ306に提供される。
【0060】
ステップ458において、第1の拡張バグ含有パッチを使用して、第1のバグ含有パッチのための第1の修正されたパッチが生成される。
図3の例では、パッチジェネレータ306は、第1の拡張バグ含有パッチ312を受信し、第1の拡張バグ含有パッチ312に基づいて第1の修正されたパッチ316を生成する。
例示的なデータ実験及び性能
【0061】
図5を参照すると、いくつかの実験では、RAP-Genフレームワークは、2つの一般的なAPRデータセット、すなわち、JavaScriptにおけるTFix(Berkay Berabi, Jingxuan He, Veselin Raychev, and Martin T. Vechev, TFix: Learning to Fix Coding Errors with a Text-to-Text Transformer, Proceedings of Machine Learning Research (PMLR), Vol. 139, 780-791)及びJavaにおけるCode Refinement(Michele Tufano, Cody Watson, Gabriele Bavota, Massimiliano Di Penta, Martin White, and Denys Poshyvanyk, An Empirical Study on Learning Bug-Fixing Patches in the Wild via Neural Machine Translation, ACM Trans. Softw. Eng. Methodol. 28, 4 (2019), 19:1-19:29)で評価されている。両方のデータセットは、元々GitHubコミットから収集されるが、TFix内のバグ修正ペアが静的アナライザによって検証され得る一方で、Code Refinement内のペアは、コミットメッセージが「fix bug」のようなキーワードを含むかどうかをチェックすることにより検証されるという大きな違いがある。TFix及びCode Refinementベンチマークのデータ統計を
図5の表1に示す。
【0062】
TFix。具体的には、TFixは、550万個のGitHubコミットからキュレーションされたJavaScriptコードパッチペアを含む大規模プログラム修復データセットである。これは、静的アナライザESLintによって検出される52個の一意のエラータイプ(error type)を包括的にカバーする。エラータイプに加えて、エラーメッセージ及び局所化されたエラー行などの豊富なエラー注釈を提供するので、従来の作業のような欠陥局所化(fault localization)の必要がない。TFixでは、T5-largeを用いたテキストツーテキスト生成問題としてAPRタスクに取り組む。ソース入力シーケンスにおいて、それらは、全てのエラー情報をバグ含有コードパッチと共に組み合わせて単一のテキストにする:
fix {error type} {error message} {error context}
ここで、エラーコンテキストは、所与の局所化されたエラー行からなり、その2つの隣接するコード行は、バグ含有コードパッチを形成するために使用される。目標シーケンスは、エラーコンテキストにおいてエラー行を修正された行で置き換えることである。同じデータフォーマットが実験において採用され、データ例は、
図6のソース入力において見出され得る(RAP-Genフレームワークがバグを正しく修正する、TFixテストセットでの1つのバグ修正例を示す)。
【0063】
データ処理中、データ分割(data split)内及びデータ分割間の重複問題が観察される。具体的には、トレーニング、検証、及びテスト用の分割において、それぞれ114個、2個、及び4個の複製がある。分割間の重複については、トレーニング用とテスト用、トレーニング用とテスト用、及び検証用とテスト用の分割間に、それぞれ28個、34個、及び4個の重複がある。これらの重複(243)をフィルタリングし、重複排除されたバージョンTFix(Dedup)を
図5の表1に示す。
【0064】
コードリファインメント(Code Refinement)。Tufanoらは、2011年3月から2017年10月の間に公開されたGitHub Archive(https://www.gharchive.org/)から収集された、関数レベルでバグ修正ペアを含む2つのコードリファインメントデータセットをリリースした。収集されたバグ修正関数のペアのクオリティを確保するために、Google BigQuery APIを使用して、(「fix」又は「solve」)及び(「bug」又は「issue」又は「problem」又は「error」)のパターンを含むメッセージを有する全てのJavaコミットを識別する。TYPE1、VAR1、METHOD1などのインデックス付きトークンを用いて識別子を難読化することで関数を正規化した。1つのデータ例は
図7に見られ得る(Refinement Smallテストセットにおける1つのバグ修正例を示しており、ここでは、RAP-Genフレームワークが正しい予測を行っている)。2つのデータサブセットは、トークンの数によって決定され、すなわち、smallセットについては、コードトークンの数≦50であり、mediumセットについては、50<コードトークンの数≦100である。
【0065】
いくつかの実施形態では、RAP-Genフレームワーク300は、例えば、AdamWオプティマイザ(Ilya Loshchilov and Frank Hutter DecoupledWeight Decay Regularization, ICLR, 2019)を使用して、ベンチマークごとにシーケンスツーシーケンス生成損失を用いて(例えば、30エポックで)微調整され得る。様々なバッチサイズ(例えば、16、32、64)及び学習率(例えば、1e-4、5e-5、2e-5)を用いて、ハイパーパラメータ調整のためにグリッド探索が行われ得る。例えば、学習率1e-4とバッチサイズ64がTFixに使用され、学習率5e-5とバッチサイズ32がCode Refinementに使用され得る。一例では、1つのA100 GPUを用いた各ベンチマークにおけるRAP-Gen-baseのトレーニング時間は2日以内である。推論中、合成された修正されたパッチのランク付けされたリストを生成するために、5のビームサイズでビーム探索が採用され得る。
【0066】
いくつかの実施形態では、トレーニングセット内のバグ修正ペアは、パッチリトリーバ304を構築するための探索コードベースとして採用される。語彙ベースのリトリーバの場合、例示的なオープンソースのPythonライブラリ(例えば、BM25のhttps://pypi.org/project/rank-bm25)が使用され得る。疎な用語ベースのリトリーバとして、トークナイザの選択は、検索性能に大きく影響する。実験では、コードトークン化のために最適化されたコード固有のBPEトークナイザであるCodeT5トークナイザが採用される。ベンチマークTFix及びCode RefinementのBM25サーチエンジンは、600Gメモリを持つ95CPUのマシン上で適用される。各実験は、多重処理で1時間以内に終了する。
【0067】
実験では、意味ベースのリトリーバについて、DPRで初期化されたCodeBERTを使用して、意味的マッチングのために各パッチを密ベクトルに符号化する。また、InfoNCE対照損失を使用して、50エポックで各ベンチマークに対してDPRモデルを微調整する。バッチサイズ64と学習率2e-5とが、40Gメモリを持つ1つのA100 GPU上で微調整するために使用される。TFix及びCode Refinementのためのトレーニング時間は、それぞれ約9及び5GPU時間である。
【0068】
ハイブリッドリトリーバの場合、BM25及びDPRのランキングスコアが計算され、これらの正規化されたスコアを等しい重みで線形結合して、ハイブリッドリトリーバ、すなわち「Hybrid」を構築する。全てのリトリーバについて、CodeT5トークナイザを使用して、256の最大シーケンス長を有するパッチを符号化する。
【0069】
評価メトリック(Evaluation Metrics)。評価メトリックについては、平滑化されたBLEU-4(Chin-Yew Lin and Franz Josef Och, ORANGE: a Method for Evaluating Automatic Evaluation Metrics for Machine Translation, COLING, 2004)スコア及び完全一致(EM)精度を使用して、プログラム修復性能を評価する(例えば、Yue Wang, Weishi Wang, Shafiq R. Joty, and Steven C. H. Hoi, CodeT5:Identifier-aware Unified Pre-trained Encoder-Decoder Models for Code Understanding and Generation, EMNLP, Association for Computational Linguistics, 8696-8708に従う)。BLEU-4は、サブワードのオーバーラップの程度を評価するためのより緩いメトリックであり、EMは、予測が実際のコミットにおけるグラウンドトゥルースパッチと同一であることを必要とするより厳しいメトリックである。バグ含有プログラムは、異なる修復方法を有し得るので、Error Removalメトリック(例えば、TFixで使用されるような)を使用して、様々な形態の修正を考慮する。既存のエラーが除去され、修正後に新しいエラーが導入されない場合、Error Removalに対して予測は正しいものとしてカウントされる。全てのメトリックについて、結果は0~100(%)のスケールで提示され、スコアが高いほど性能が良好であることを表す。
【0070】
ベースラインモデル(Baseline Models)。RAP-Genフレームワークは、2つのプログラム修復ベンチマークにおいて学習ベースのモデルと比較される。CoCoNuTは、畳み込みエンコーダ-デコーダモデルに基づくコンテキスト認識ニューラル機械翻訳フレームワークである。SequenceRは、コピー機構を有するLSTMベースのシーケンスツーシーケンス生成モデルである。加えて、RAP-Genフレームワークは、Transformerアーキテクチャに基づいて事前トレーニングされたプログラミング言語モデルと比較される。これらのモデルの1つのグループは、RoBERTa(コード)、CodeBERT、及びGraphCodeBERTなどのエンコーダのみのモデルである。これらのエンコーダのみのモデルは、プログラム修復タスクのためにランダムに初期化されたデコーダを必要とする。
【0071】
さらに、RAP-Genフレームワークは、エンコーダ-デコーダTransformerモデルと比較される。PLBARTは、トークンマスキング、トークン削除、及びトークンインフィリングを含むノイズ除去目的を有する統合された事前トレーニングされたモデルである。TFixは、T5-largeチェックポイントで初期化され、TFixデータセットに対する微調整を継続する。CoTexTは、テキストとコードの両方で事前トレーニングされた別のT5ベースのモデルである。NSEditは、エンコーダ及びデコーダがそれぞれCodeBERT及びCodeGPTから初期化された言語モデルである。これは、ニューラル記号編集シーケンスを介して修正を生成するように微調整され、Code Refinementベンチマーク上の現在のSoTAモデルとしてランク付けする。全てのベースラインモデルからの結果は、それらの原論文から得たものである。
【0072】
実験では、検索拡張パッチ生成がプログラム修復のための効果的なアプローチであることを検証する。RAP-Genを2つのベンチマークで従来の学習ベースの方法と比較するために、包括的な実験を行った。まず、CodeT5モデルがTFixに対して評価され、その評価は、データセットの重複排除されたバージョン及びより合理的なメトリックを提供することによって、並びに完全一致と一致するBLEU-4スコアのより緩いメトリックを追加的に導入することによって改善される。その結果、CodeT5-baseが、このタスクで新しいSoTA性能を確立し、EMにおいてT5-largeの49.70を53.57に、BLEU-4において76.98を78.85に改善した。さらに、RAP-Genモデルは、TFix及びCode Refinementの両方のデータセットの両方を使用して評価される。語彙及び意味ベースのリトリーバを用いたRAP-Genが性能を大幅に向上させることが観察される。具体的には、「Hybrid」を用いたRAP-Gen-baseは、TFixにおけて最良の性能のベースラインを超えて完全一致を改善し(49.70→54.15)、「Hybrid」を用いたRAP-Gen-baseは、Code Refinementベンチマークのsmallセットにおける完全一致(24.04→24.80)を向上させるとともに、mediumセットにおける完全一致(14.18→15.84)を向上させた。全てのこれらの結果は、検索拡張パッチ生成(RAP-Gen)がAPRのための効果的なアプローチであることを検証する。
【0073】
この実験は、CodeT5を用いた検索拡張パッチ生成が、プログラム修復のための効果的なアプローチであることを示している。まず、CodeT5がTFixベンチマークで従来のAPR技法と比較され、データの重複排除されたバージョン及びより適切な評価メトリックを用いて改善される。次いで、2つのサイズのCodeT5と統合されたRAP-Genフレームワークが、TFix及びCode Refinementベンチマークで評価される。さらに、この実験は、パッチリトリーバが語彙的類似性及び意味的類似性に関して関連するパッチを見つけることを示している。加えて、検索されたバグ修正パターンがプログラム修復にどのように役立つかを示すためにケーススタディが提供される。加えて、実験が示すように、RAP-Genフレームワークは、様々なエラータイプ及び修正パターンに対して改善された性能を提供する。52個のエラータイプに対する詳細な性能の内訳がリストされ、RAP-Genにおける検索拡張の恩恵を受けないエラーのタイプが検査される。さらに、バグ含有コードからエラー行を単に除去する、些細だが支配的なエラー行除去の修正パターンを用いてモデルがどのように機能するかが研究される。
【0074】
この実験は、CodeT5を用いた検索拡張パッチ生成がプログラム修復のための効果的なアプローチであることを示している。まず、TFix評価が改善する。元のTFixベンチマークは、主な評価メトリックとして、52個のエラータイプにわたる完全一致(EM)精度の直接平均を使用する。しかしながら、
図14の表7に示すように、これらのエラータイプは、分布がかなり不均衡であり、例えば、主要エラータイプ「no-invalid-this」のインスタンスが16,217個である一方で、最小エラータイプ「no-new-symbol」のインスタンスはわずか10個である。そのため、いくつかの実施形態では、エラータイプ分布を考慮に入れるために加重平均が採用される。さらに、TFixが完全一致をどのように計算するかについてのリリースされたコードを検査したところ、予測された修正がグラウンドトゥルース修正よりもスペース又は新しい行などの空白を1つでも多く含む場合、誤った完全一致とみなされるという別の制限があった。しかしながら、JavaScript言語では、余分な空白はプログラムの正しさに影響を与えない。従って、複数の空白における不一致の影響を排除するためにEMを計算する前に空白を正規化する、EM w/o spacesの加重平均のより良好なメトリックが提案される。TFixデータセットには重複問題があるので、その重複排除されたバージョンに関する結果も含まれる。完全一致精度とは別に、BLEU-4スコアのより緩いメトリックを使用して、予測された修正とそのグラウンドトゥルース修正との間の部分的なオーバーラップ(subsequence overlap)を測定する。BLEU-4スコアもまた、空白正規化の後に計算されることに留意されたい。
【0075】
図9の表2に示すように、CodeT5モデルは、TFixで他の学習ベースのベースラインと比較される。1つの主な観察点は、元の平均EM w/ spacesメトリックの場合、CodeT5-base(50.88)は、T5-largeのモデルサイズがはるかに大きい(CodeT5-baseの約3.5倍)にもかかわらず、T5-large(49.33)よりも良好な精度をもたらすことである。さらに、妥当な直接平均EM w/o spacesに注目すると、CodeT5-baseは、T5-largeに対して絶対精度を約5だけ改善し(49.35→54.30)、性能を大幅に向上させる。加重平均EM w/o spacesに基づいて、CodeT5-small(50.31)及びCodeT5-base(53.57)はいずれも、T5-large(49.70)を含む全てのベースラインよりも性能が優れている。これは、大規模コードコーパスに対するコード認識事前トレーニングを有するCodeT5モデルが、プログラムをより理解していることを示す。TFix評価については、EMは、指定されない限り、加重平均EM w/o spacesを示すために使用される。BLEU-4メトリックについては、完全一致メトリックとの整合性が良好であり、CodeT5-baseはまた、元のTFixに対して78.85の最先端(SoTA)性能を発揮する。
【0076】
次に、アブレーション研究観察について説明する。重複排除されたTFixデータセットでは、様々なメトリックにわたる性能は一貫してわずかに低下する。これは、元のデータにおけるトレーニング用とテスト用の分割間の重複(34個のインスタンス)がデータ漏洩問題につながり、性能を不適切に増加させることになるので、予想される現象である。エラータイプ及びエラーメッセージを含むエラー情報が除去された場合、CodeT5-smallモデルとCodeT5-baseモデルの両方で、一貫した性能低下が見られ、プログラム修復モデルのためにどのタイプのエラーを修正する必要があるかを通知することが有用であることが明らかになった。
【0077】
図10の表3を参照して、TFixに対するRAP-Gen評価について説明する。表3は、TFixベンチマークの重複排除されたバージョンに対するRAP-Genフレームワークの結果を示す。まず、コードベースからバグ修正ペアをランダムに検索することによって、Randomベースラインが確立される。ランダム検索によるRAP-Gen-smallとRAP-Gen-baseの両方の性能低下は、ランダムに検索された修正パターンがプログラム修復のための有用な案内シグナルを提供することができないことを意味している。次いで、語彙ベースのリトリーバBM25、密ベクトルマッチングに基づく意味ベースのリトリーバDPR、及びそれらを組み合わせる2つのアンサンブル方法を使用することを含む、異なるリトリーバと統合されたRAP-Genが比較される。その結果、全ての検索拡張アプローチが、smallモデル及びbaseモデルの両方について、完全一致及びBLEU-4の両方に対する性能を有意に改善した。これは、検索拡張生成がAPRのための実行可能且つ効果的なアプローチであり、意味情報及び語彙情報の両方が関連する修正パターンを検索するために重要であることを示す。アンサンブル方法の場合、「Hybrid」を用いたRAP-Gen-baseは、T5-largeを超えて最良の改善をもたらす(49.58→54.15 EM)。これは、語彙情報と意味情報の両方を考慮するアンサンブルアプローチが、2つの世界の最良のものを組み合わせ得ることを検証する。別の観察点は、検索拡張を用いた性能利得が、RAP-Gen-baseよりもRAP-Gen-smallで大きいことであり、これは、改善が、モデルサイズの増加と共に飽和点に達する傾向があることを意味している。RAP-Gen-small及びRAP-Gen-baseは両方とも、異なるパッチジェネレータバックボーンを有するRAP-Genフレームワーク、具体的には、それぞれ異なるモデルサイズを有するCodeT5-base及びCodeT5-smallを使用する。
【0078】
いくつかの実施形態では、バグを修正する複数の方法が存在し得る。そのため、1つのグラウンドトゥルースパッチとの完全一致は、他の形態の正しい修正を考慮するには厳密すぎるメトリックである。これに対処するために、TFixに従ったエラー除去メトリックを用いたより緩い評価が使用される。このメトリックの下で、修正されたパッチは、それがソースバグ含有パッチ内のエラーを解決し、新しいエラー(静的アナライザESLintによって検出される)をもたらさない限り、正しいとみなされる。10,465個のテストインスタンスに対してこのメトリックを再現しようとすると、2つの困難がある:(1)ESLintを適用するには、各コードパッチに対して完全なファイルコンテキストが必要であるが、95個のコードファイルは検索することができなくなっていることが分かった。(2)いくつかのデータサンプルでは、リリースされた構成(https://github.com/eth-sri/TFix)でESLintを適用すると、パーサエラーが発生する。その結果、それらの利用不可能なコードファイル及びパーサエラーを有するサンプルを除外することによって、6,793個のインスタンスのフィルタリングされたサブセットがキュレーションされ、ここで、TFixから生成された修正がより多くのパーサエラーを有する傾向があることも判明した。
図11の表4を参照すると、エラー除去比較が示されている。RAP-Gen-smallモデルは、エラー除去においてT5-largeモデルよりも大幅に性能が優れていることが観察され、これは、RAP-Genモデルが、良好な修正の異なる形態を合成することがより可能であることを意味している。さらに、RAP-Gen-smallでは、完全一致は低いがエラー除去精度は高いという、エラー除去メトリックと完全一致メトリックとの間にずれ(misalignment)があることが観察される。このようなずれは、TFixにおいても観察される。
【0079】
図12の表5を参照すると、Code Refinement結果及び前述した方法との比較が示されている。全てのベースライン結果(CodeT5モデルを含む)は、それらの原論文から直接得られる。「Naive Copy」では、BLEU-4スコアはかなり高いが、完全一致(EM)はゼロであり、これは、バグ含有コード及びその修正のオーバーラップが大きく、完全一致が一次評価メトリックとして採用されるべきであることを示すことが観察される。ベースラインの中で、NSEditは、smallサブセットで最良の結果(24.04 EM)を出す非常に競合力のあるものであり、マルチタスクトレーニングを伴うCodeT5-baseは、mediumセットで最良の結果(14.18 EM)を出している。
【0080】
RAP-Genモデル比較から、様々なリトリーバを用いたRAP-Genは、それらのCodeT5対応物よりも性能を一貫して向上させることが観察される。最良のモデルは、2つのサブセットで新しいSoTA結果を確立し(smallの場合は24.80 EM、mediumの場合は15.84 EM)、特に、より困難なmediumセットではNSEditを約2絶対ポイント上回る。これは、検索された修正パターンがプログラム修復を案内するための有用なシグナルを提供することを再び確認する。様々なリトリーバの中で、DPRは、RAP-Gen-small及びRAP-Gen-baseの両方について、BM25よりも良好な結果を出しており、意味情報が、このベンチマークについての意味情報よりも重要な役割を果たし得ることを明らかにする。さらに、「Hybrid」は、BM25及びDPRよりも性能が優れており、これは、ハイブリッドアンサンブル方法が、このベンチマークについて意味情報と意味情報の両方のバランスをとるためのよりロバストなリトリーバであることを意味している。
【0081】
要約すると、2つのベンチマークでRAP-Genを従来の学習ベースの方法と比較するために、包括的な実験を実施する。まず、TFixに対してCodeT5モデルを評価し、データセットの重複排除されたバージョン及びより合理的なメトリックを提供し、さらに、完全一致と一致するBLEU-4スコアのより緩いメトリックを導入することによって、その評価を改善する。その結果、CodeT5-baseが、このタスクで新しいSoTA性能を確立し、EMにおいてT5-largeの49.70を53.57に、BLEU-4において76.98を78.85に改善した。次に、TFixデータセットとコードリファインメントデータセットの両方でRAP-Genモデルを評価し、語彙及び意味ベースのリトリーバを用いたRAP-Genが性能を大幅に向上させることを観察する。具体的には、「Hybrid」を用いたRAP-Gen-baseは、TFixにおけて最良の性能のベースラインを超えて完全一致を改善し(49.70→54.15)、「Hybrid」を用いたRAP-Gen-baseは、Code Refinementベンチマークのsmallセットにおける完全一致(24.04→24.80)を向上させるとともに、mediumセットにおける完全一致(14.18→15.84)を向上させた。全てのこれらの結果は、CodeT5を用いた検索拡張パッチ生成(RAP-Gen)がAPRのための効果的なアプローチであることを検証する。
【0082】
次に、パッチリトリーバが、プログラム修復に役立つ関連する修正パターンを見つけることができるかどうかを評価するために、実験を実施する。まず、クエリと検索されたパッチとの間の語彙的及び意味的類似性に関する関連性を測定するための自動評価が提供される。さらに、検索された修正パターンがより良いAPRにどのように寄与するかを理解するために、特定のケースが提供される。
【0083】
図13の表6を参照すると、リトリーバの評価が示されている。リトリーバは、クエリと上位の検索されたパッチとの間の語彙的マッチング及び意味的マッチングに関して分析される。語彙的マッチングの場合、それらのサブトークンオーバーラップを測定するためにBLEU-4スコアが使用され、意味的マッチングの場合、微調整されたDPRリトリーバによって符号化されたそれらの密ベクトル間のコサイン類似度(CosSim)が使用される。
図13の表6は、TFix及びCode Refinementの両方のベンチマークでのパッチリトリーバの性能を示す。最初の行は、コードベースからバグ修正ペアをランダムに検索することによる下界性能を示し、このRandomベースラインは、語彙マッチングと意味マッチングの両方においてはるかに低いスコアを達成することが観察される。語彙マッチングの場合、BM25は、TFixでDPRより性能が優れているが、2つのCode Refinementサブセットでは性能が劣っており、これは、TFixとCode Refinementとの間のデータ差が原因であり得、後者は、語彙ベースのBM25リトリーバの性能を妨げる難読化された識別子(例えば、VAR1、VAR2、…)を採用する。ハイブリッドリトリーバは、全てのデータセットにおいて最良の語彙的マッチングを達成し、意味情報が語彙的マッチングを補完することができることを明らかにする。
【0084】
意味的マッチングの場合、DPRは、全てのデータセットに対して最良の結果を達成しているが、これは、同一の目的に向けて最適化されることから、驚くべきことではない。特に、ハイブリッドリトリーバは、DPRよりもわずかに低い結果を達成するが、BM25よりははるかに良好な結果を達成し、これは、ハイブリッドリトリーバが、語彙情報と意味情報の両方のバランスをとり、識別子命名の選択に敏感である語彙ベースのリトリーバよりもロバストであり得ることを意味している。
【0085】
再び
図6及び
図7を参照すると、TFix(
図6)及びCode Refinement(
図7)に関するケーススタディなど、プログラム修復において検索された修正パターンがどのように役立つかを示すためにケーススタディが使用され、ここでは、検索拡張ありのRAP-Genモデルは正しい修正を予測するが、検索拡張なしのCodeT5はそうすることができない。
図6に示すように、検索されたバグ修正パターンは、正確には、ソースバグ含有コードを修復するために必要とされるものである。検索拡張なしでは、CodeT5は、恐らく、前の隣接する行からの学習を介して、バグのある行から「.classify()」を誤って除去する。
図7のCode Refinementの場合、検索されたバグ修正ペアは、ソースバグ含有コードを修正するようにRAP-Genモデルを案内するのに十分な情報を提供する。検索拡張なしでは、CodeT5は、単にコードの最後の行を除去することによって、誤った修復を実行する。
【0086】
そのため、パッチリトリーバ及び対応する自動プログラム修復システムの性能を評価するために、定量的(
図13の表6)及び定性的(
図6及び
図7)の両方の結果が得られる。その結果、ハイブリッドパッチリトリーバは、よりロバストであり、プログラム修復システムを支援するために、語彙的及び意味的に関連するパッチを見つけることができることが示された。
【0087】
図8及び
図15の表7を参照して、様々なエラータイプ及び修正パターンについてのRAP-Genの性能について説明する。まず、異なるエラータイプに対するその性能の内訳に関して、重複排除されたTFixデータセットに対する詳細なプログラム修復性能内訳が、
図15の表7にリストされている。CodeT5-baseは、44/52のエラータイプにおいて以前のSoTA T5-largeよりも性能が優れている。特に、主要なエラータイプ「no-invalid-this」の場合、CodeT5-baseは、その完全一致をT5-largeの37.48から43.57に改善し、これは、より多くの98個のインスタンスを修復することに相当する。T5-largeは、52個のエラータイプのうちの44%について少なくとも50%のバグを修復することができるが、CodeT5-baseは、このパーセンテージを60%に大幅に増加させ、RAP-Gen-smallは、63%にさらに向上させる。全体で、RAP-Gen-baseは、はるかに小さいモデルサイズでT5-largeよりも多くの478個のバグ含有プログラムを正しく修復する。
【0088】
さらに、様々なエラータイプについて、CodeT5モデルと比較したRAP-Genにおける検索拡張の効果を分析する。
図14の表7に示すように、検索拡張技法は、様々なエラータイプに対して異なる効果を有し、特定のエラータイプサブセットに対してはプログラム修復性能を損なうことさえあることが観察される。具体的には、実験において、それは、CodeT5-smallの10個のエラータイプ及びCodeT5-baseの18個のエラータイプについてAPR性能をダウングレードする。完全一致修正の数に基づいて、RAP-Gen-smallの最大の性能ダウングレードは、エラータイプ「no-extra-semi」であり(497→490)、RAP-Gen-baseの最大の性能ダウングレードは、エラータイプ「no-console」である(228→220)ことが観察される。
【0089】
検索拡張がRAP-Genモデルにおける完全一致性能を妨げることがある理由を調査するために、「no-console」エラータイプのケーススタディを
図8に提供する。この場合、グラウンドトゥルース修正は、バグ含有パッチ内のエラー行を直接除去することであり、RAP-Genモデルは、完全一致に関して誤った予測としてカウントされる検索された修正パターンに基づいて、それを異なる形式に修復する。これは、プログラム修復システムを評価するための完全一致メトリックの制限を再び確認するものである。
【0090】
次に、TFixベンチマークを使用して、どの修正パターンがモデルによって実行されるかが分析される。バグ修正ペアを手動で検査した後、修正の大部分は、コード挿入及び置換操作と比較して削除操作から構成されることが観察される。バグ修正動作は、コード挿入(12.5%)、置換(8.1%)、削除(47.9%)、挿入と置換(6.9%)、挿入と削除(8.2%)、置換と削除(7.2%)、及び3つ全ての方法(9.2%)から構成される。以前の研究もまた、削除操作が最も一般的な修正パターンの1つであることを反映している。削除動作の中で、1つの支配的なバグ修正パターンは、エラー行除去であり、これは、(
図8に示す例のように)バグ含有コードからエラー行を単に除去することである。この自明な修正パターンは、重複排除されたTFixテストセットにおいて約23%を占める。このパターンをさらに分析するために、エラー行除去パターンを使用して異なるモデルがどのように機能するかを比較し、その結果を表8に示す。検索拡張を用いて、RAP-Gen-baseが、CodeT5-baseの67及びT5-largeの71と比較して、最も低い誤検出数56(97.09という最も高い精度に相当)を達成することを観察する。これは、RAP-Genが、自明なエラー行除去パターンに過度に依存するのではなく、より多様なバグ修正パターンを学習することができることを示す。さらに、RAP-Gen-smallは、最良の再現率及びF1スコアを達成するが、その代償として、より多くの誤検出の予測を生じる。
【0091】
要約すると、プログラム修復の難易度は、エラータイプごとに異なる。実験における最良のRAP-Gen-baseは、最良の性能を発揮するベースラインT5-largeよりも多くの456個のバグ含有プログラムを修復し得る。検索拡張が性能をダウングレードさせることがある理由を分析するためにエラー分析が行われ、それが完全一致メトリックの制限によるものであり得ることを示すためにケーススタディが提供される。さらに、エラー行除去の1つの高頻度修正パターンを調査して、このパターンを扱う際に、RAP-Gen-baseが最良の精度スコアを与え、RAP-Gen-smallが最良の再現及びF1スコアを達成することを示す。
【0092】
本発明の態様、実施形態、実装形態、又は適用例を示すこの説明及び添付の図面は、限定するものと解釈されるべきではない。本明細書及び特許請求の範囲の趣旨及び範囲から逸脱することなく、様々な機械的、組成的、構造的、電気的、及び動作的な変更を行うことができる。いくつかの事例では、周知の回路、構造、又は技法は、本開示の実施形態を不明瞭にしないために、詳細に図示又は説明されていない。2つ以上の図における同様の番号は、同じ又は同様の要素を表す。
【0093】
この説明では、本開示と一致するいくつかの実施形態を説明する具体的な詳細が記載される。実施形態の完全な理解を提供するために、多数の具体的な詳細が記載される。しかしながら、いくつかの実施形態は、これらの具体的な詳細の一部又は全部がなくても実施され得ることが当業者には明らかであろう。本明細書に開示される特定の実施形態は、例示的なものであり、限定するものではない。当業者は、本明細書では具体的に説明されていないが、本開示の範囲及び趣旨内にある他の要素を実現し得る。加えて、不必要な反復を回避するために、一実施形態に関連して図示及び説明される1つ又は複数の特徴は、具体的に別様に説明されない限り、又は1つ又は複数の特徴が実施形態を非機能的にするであろう場合、他の実施形態に組み込まれてもよい。
【0094】
例示的な実施形態が示され、説明されてきたが、広範囲の修正、変更、及び置換が前述の開示において企図され、いくつかの事例では、実施形態のいくつかの特徴は、他の特徴の対応する使用なしに採用され得る。当業者であれば、多くの変形、代替、及び修正を認識するであろう。従って、本発明の範囲は、以下の特許請求の範囲によってのみ限定されるべきであり、特許請求の範囲は、広く、本明細書に開示された実施形態の範囲と一致するように解釈されることが適切である。
【国際調査報告】