(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-05-21
(54)【発明の名称】コンピュータコードのリファクタリング
(51)【国際特許分類】
G06F 8/72 20180101AFI20240514BHJP
G06N 3/0455 20230101ALI20240514BHJP
【FI】
G06F8/72
G06N3/0455
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023570435
(86)(22)【出願日】2022-05-10
(85)【翻訳文提出日】2023-12-28
(86)【国際出願番号】 US2022028535
(87)【国際公開番号】W WO2022245590
(87)【国際公開日】2022-11-24
(32)【優先日】2021-05-17
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2021-05-17
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2022-05-09
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】504080663
【氏名又は名称】エヌイーシー ラボラトリーズ アメリカ インク
【氏名又は名称原語表記】NEC Laboratories America, Inc.
(74)【代理人】
【識別番号】100123788
【氏名又は名称】宮崎 昭夫
(74)【代理人】
【識別番号】100127454
【氏名又は名称】緒方 雅昭
(72)【発明者】
【氏名】ジャン、 シュチャオ
(72)【発明者】
【氏名】チェン、 ハイフォン
(72)【発明者】
【氏名】チェン、 ウェイ
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC69
(57)【要約】
自動化されたコンピュータコード編集のためのシステム及び方法が提供される。本方法は、編集前サンプル及び編集後サンプルを含むコード編集データサンプルのコーパスを用いてコード編集ニューラルネットワークモデルを訓練し、編集前サンプル及び編集後サンプルを抽象構文木(AST)に構文解析する。本方法は、文法仕様を用いて、AST木を様々なプログラミング言語用の統一された抽象構文記述言語グラフに変換し、ゲートグラフニューラルネットワークを用いて、統一された抽象構文記述言語グラフにおける各ノードのベクトル表現を計算することをさらに含む。本方法は、マルチエクステントアンサンブル法によるクエリコードに基づいてサポートサンプルを選択して統合し、コード編集ニューラルネットワークモデルと、編集前サンプル及び編集後サンプルから学習したパターンとを用いて、クエリコードを反復的に変更することをさらに含む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
自動化されたコンピュータコード編集のためのコンピュータで実施される方法であって、
編集前サンプル(110)及び編集後サンプル(120)を含むコード編集データサンプルのコーパスを用いてコード編集ニューラルネットワークモデル(320)を訓練するステップと、
前記編集前サンプル及び前記編集後サンプルを抽象構文木(AST)に構文解析するステップ(130)と、
文法仕様を用いて、AST木を様々なプログラミング言語用の統一された抽象構文記述言語(ASDL)グラフに変換するステップ(130)と、
ゲートグラフニューラルネットワーク(GGNN)(320)を用いて、前記統一された抽象構文記述言語(ASDL)グラフにおける各ノードのベクトル表現(140、150)を計算するステップと、
マルチエクステントアンサンブル法によるクエリコードに基づいてサポートサンプルを選択して統合するステップ(160)と、
前記コード編集ニューラルネットワークモデルと、前記編集前サンプル及び前記編集後サンプルから学習したパターンとを用いて、クエリコードを反復的に変更するステップ(170)とを有する、コンピュータで実施される方法。
【請求項2】
前記編集前サンプル及び前記編集後サンプルは、前記マルチエクステントアンサンブル法を用いて組み合わされる、請求項1に記載のコンピュータで実施される方法。
【請求項3】
クエリコードスニペットのコーパスデータは、各編集タイプに関するクエリコードスニペットのセットを含む、請求項2に記載のコンピュータで実施される方法。
【請求項4】
コード編集のための初期入力として、前記クエリコードを入力するステップをさらに有する、請求項3に記載のコンピュータで実施される方法。
【請求項5】
前記クエリコードは、訓練中の編集前コードスニペット及び編集後コードスニペットの両方に対する編集サンプルとして提供される、サポートコードスニペットのセットである、請求項4に記載のコンピュータで実施される方法。
【請求項6】
親ノードと子ノードとの間に双方向エッジを追加することで、オリジナルのAST木を拡張するステップをさらに有する、請求項5に記載のコンピュータで実施される方法。
【請求項7】
平均プールを用いてグラフ全体を表すステップをさらに有する、請求項6に記載のコンピュータで実施される方法。
【請求項8】
クエリサンプル及びサポートサンプルに関するアクティベーションを計算するステップをさらに有する、請求項7に記載のコンピュータで実施される方法。
【請求項9】
前記クエリサンプルの前記アクティベーションは、
【数1】
で与えられ、
前記サポートサンプルの前記アクティベーションは、
【数2】
で与えられる、請求項8に記載のコンピュータで実施される方法。
【請求項10】
クエリコードグラフの前記グラフ表現は、
【数3】
で生成され、サポートコードグラフの前記グラフ表現は、
【数4】
で生成される、請求項9に記載のコンピュータで実施される方法。
【請求項11】
自動化されたコンピュータコード編集のためのコンピュータシステム(400)であって、
1つまたは複数のプロセッサ(410)と、
前記1つまたは複数のプロセッサ(410)のうちの少なくとも1つと動作可能に接続されるコンピュータメモリ(420)と、
前記1つまたは複数のプロセッサのうちの少なくとも1つ及び前記コンピュータメモリと動作可能に接続されるコンピュータ表示装置(430)と、
を有し、前記コンピュータメモリは、前記コンピュータシステムに、
編集前サンプル(110)及び編集後サンプル(120)を含むコード編集データサンプルのコーパスを用いてコード編集ニューラルネットワークモデル(320)を訓練するステップと、
前記編集前サンプル及び前記編集後サンプルを抽象構文木(AST)に構文解析するステップ(130)と、
文法仕様を用いて、AST木を様々なプログラミング言語用の統一された抽象構文記述言語(ASDL)グラフに変換するステップ(130)と、
ゲートグラフニューラルネットワーク(GGNN)(320)を用いて、前記統一された抽象構文記述言語(ASDL)グラフにおける各ノードのベクトル表現(140、150)を計算するステップと、
マルチエクステントアンサンブル法によるクエリコードに基づいてサポートサンプルを選択して統合するステップ(160)と、
前記コード編集ニューラルネットワークモデルと、前記編集前サンプル及び前記編集後サンプルから学習したパターンとを用いて、クエリコードを反復的に変更するステップ(170)と、
を実行させる命令コードを含む、コンピュータシステム。
【請求項12】
前記編集前サンプル及び前記編集後サンプルは、前記マルチエクステントアンサンブル法を用いて組み合わされる、請求項11に記載のコンピュータシステム。
【請求項13】
クエリコードスニペットのコーパスデータは、各編集タイプに関するクエリコードスニペットのセットを含む、
請求項12に記載のコンピュータシステム。
【請求項14】
コード編集のための初期入力として、前記クエリコードを入力するステップを、前記コンピュータシステムに実行させることができる命令コードをさらに有する、請求項13に記載のコンピュータシステム。
【請求項15】
前記クエリコードは、訓練中の編集前コードスニペット及び編集後コードスニペットの両方に対する編集サンプルとして提供される、サポートコードスニペットのセットである、請求項14に記載のコンピュータシステム。
【請求項16】
親ノードと子ノードとの間に双方向エッジを追加することで、オリジナルのAST木を拡張するステップを、前記コンピュータシステムに実行させることができる命令コードをさらに有する、請求項15に記載のコンピュータシステム。
【請求項17】
平均プールを用いてグラフ全体を表すステップを、前記コンピュータシステムに実行させることができる命令コードをさらに有する、請求項16に記載のコンピュータシステム。
【請求項18】
クエリサンプル及びサポートサンプルに関するアクティベーションを計算するステップを、前記コンピュータシステムに実行させることができる命令コードをさらに有する、請求項17に記載のコンピュータシステム。
【請求項19】
前記クエリサンプルの前記アクティベーションは、
【数5】
で与えられ、
前記サポートサンプルの前記アクティベーションは、
【数6】
で与えられる、請求項18に記載のコンピュータシステム。
それぞれ。
【請求項20】
クエリコードグラフの前記グラフ表現は、
【数7】
で生成され、サポートコードグラフの前記グラフ表現は、
【数8】
で生成される、請求項19に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
この出願は、2021年5月17日に出願された米国仮特許出願第63/189,236号、2021年5月17日に出願された米国仮特許出願第63/189,274号及び2022年5月9日に出願された米国特許出願第17/739,727号を基礎とする優先権を主張し、これらの開示の全てをここに取り込む。
【0002】
本発明は、ニューラルネットワークを用いてコンピュータコード及びソフトウェアを第1の状態からより効率的に修正された第2の状態に編集することに関し、より詳細には、コンピュータコード及びソフトウェアを第1の状態から修正された第2の状態に変換するために用いるニューラルネットワークのエンコーダの使用に関する。
【背景技術】
【0003】
ニューラルネットワークのエンコーダは、ラベルのないデータの効率的なコーディングを学習するために使用される人工的なニューラルネットワークの一種である。エンコーダは、入力データを受け取り、それを状態値に変換できる。デコーダは、エンコードされた状態値を出力にマップできる。機械翻訳は、ある言語のソーステキストを別の言語の出力テキストに自動的に変換することに関連しており、入力シーケンスが処理されて出力シーケンスが生成される。
【0004】
ソフトウェア工学におけるコード編集は、既存のプログラミングコードの設計、構造、機能または実装を望ましい形式に修正することを目的としている。リファクタリングは、コンピュータコードを、以前と同様に動作するがより効率的な新しい形式に変換する。自動リファクタリングでは、システムの機能を変更せずに不要なコードや冗長なコードを削除し、非構造化コードを適切な構造化されたコードに変換し、手続き型コードをオブジェクト指向コードに変換できる。
【0005】
コンピュータプログラミングにおける分解パラダイムは、プログラムを多数のパーツで体系化するための戦略であり、通常、プログラムのテキストを整理する特定の方法を意味する。少数ショット学習は限られた数のサンプルに基づいて予測を行う問題である。
【発明の概要】
【0006】
本発明の一態様によれば、自動化されたコンピュータコード編集のための方法が提供される。本方法は、編集前サンプル及び編集後サンプルを含むコード編集データサンプルのコーパスを用いてコード編集ニューラルネットワークモデルを訓練し、編集前サンプル及び編集後サンプルを抽象構文木(AST)に構文解析する。本方法は、文法仕様を用いて、AST木を様々なプログラミング言語用の統一された抽象構文記述言語(ASDL)グラフに変換し、ゲートグラフニューラルネットワーク(GGNN)を用いて、統一された抽象構文記述言語(ASDL)グラフにおける各ノードのベクトル表現を計算することをさらに含む。本方法は、マルチエクステントアンサンブル法によるクエリコードに基づいてサポートサンプルを選択して統合し、コード編集ニューラルネットワークモデルと、編集前サンプル及び編集後サンプルから学習したパターンとを用いて、クエリコードを反復的に変更することをさらに含む。
【0007】
本発明の別の態様によれば、自動化されたコンピュータコード編集のためのシステムが提供される。本システムは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサのうちの少なくとも1つと動作可能に接続されるコンピュータメモリと、1つまたは複数のプロセッサのうちの少なくとも1つ及びコンピュータメモリと動作可能に接続されるコンピュータ表示装置とを有し、コンピュータメモリは、コンピュータシステムに、編集前サンプル及び編集後サンプルを含むコード編集データサンプルのコーパスを用いてコード編集ニューラルネットワークモデルを訓練し、編集前サンプル及び編集後サンプルを抽象構文木(AST)に構文解析し、文法仕様を用いて、AST木を様々なプログラミング言語用の統一された抽象構文記述言語(ASDL)グラフに変換し、ゲートグラフニューラルネットワーク(GGNN)を用いて、統一された抽象構文記述言語(ASDL)グラフにおける各ノードのベクトル表現を計算し、マルチエクステントアンサンブル法によるクエリコードに基づいてサポートサンプルを選択して統合し、コード編集ニューラルネットワークモデルと、編集前サンプル及び編集後サンプルから学習したパターンとを用いて、クエリコードを反復的に変更することを実行させる命令コードを含む。
【0008】
これら及び他の特徴並びに利点は、以下の典型的な実施形態の詳細な説明を添付の図面と併せて読むことで明らかになるであろう。
【0009】
本開示では、後述するように、以下の図面を参照しながら好ましい実施形態について詳細に説明する。
【図面の簡単な説明】
【0010】
【
図1】
図1は、本発明の一実施形態による、コード編集問題に対処する少数ショットサンプルからのコード編集アプローチ(CEFS)のための高レベルのシステム/方法を示すブロック/フロー図である。
【0011】
【
図2】
図2は、本発明の一実施形態による、マルチエクステントサンプル構成に基づくクエリコードに基づいてサポートサンプルを統合するためのシステム/方法を示すブロック/フロー図である。
【0012】
【
図3】
図3は、本発明の一実施形態による、入力されたコンピュータコードのコンピュータコードリファクタリングのためのコンピュータシステム/方法を示すブロック図である。
【0013】
【
図4】
図4は、本発明の一実施形態による、コンピュータコードリファクタリングのためのコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【0014】
本発明の実施形態によれば、既存のコンピュータコードまたはプログラミング言語を再構築するプロセスのためのシステム及び方法が提供される。コンピュータプログラミングでは、特定の編集パターンやコーディングスタイルを示す幾つかのインスタンスに従ってコードをリファクタリングすることに関心がある。リファクタリングは、ソフトウェアの機能を維持しながら、ソフトウェアの設計、構造及び/または実装を改善することを目的とする。与えられたコードサンプルから、異なるコンテンツで記述されたクエリコードに編集パターンを適応できる。サポートセットにおけるコードサンプルの所定の編集動作を組み合わせて、クエリコードを編集するための新しい編集表現を生成できる。コード構文木(code syntax tree)の類似度は、クエリサンプルとサポートサンプルとの間で編集する前に評価できる。
【0015】
1つまたは複数の実施形態において、グラフベースのツリーエンコーダを利用して、コンピュータコード及びソフトウェアを第1の状態から修正された第2の状態に修正することが可能であり、第2の状態は以前と同様に動作するが、より効率的である。
【0016】
非限定的な例示的な実施形態では、
【0017】
Input: Both exemplars and new query code;
【0018】
Pre-edit;
【0019】
normalized = list(filter(lambda x; x is not None, map(harvester.normalize, harvested[:25])))
【0020】
Post-edit:
【0021】
normalized = list([x for x in map(harvester nomalize, harvested[:25]) if x is not None])
【0022】
New query:
【0023】
chunk = filter(lambda x: x.feature == feature, ichunk
【0024】
Output (edited code for new query using the learned pattern from exemplars):
【0025】
chunk = [x for x in ichunk if x.feature == feature]
である。
【0026】
1つまたは複数の実施形態において、編集前サンプル及び編集後サンプル、並びにそれらの対応する編集タイプを含むコード編集データサンプルのコーパスが与えられると、コード編集モデルを少数の編集から学習し、知識(訓練された編集タイプでタスクを処理する機能)を訓練データが利用できない未知の編集タイプに転送する。同じプロジェクトにおけるコードは、幾つかの典型的なコーディングスタイルでは統一されている場合がある。コードの編集方法を示すために少数のサンプルしか利用できないという設定下でコード編集の問題に対処するため、少数ショットサンプルからのコード編集アプローチ(CEFS:Code Editing Approach from Few-shot Samples)が提示される。標準コーディングスタイルをプロジェクトに自動的に適用できるため、人のプログラマーは記載されたコンピュータコードを手動で検査する必要がなくなる。
【0027】
様々な実施形態において、コード構文木に関する類似度は、クエリサンプルとサポートサンプルとの間の編集前に評価され、編集の組み合わせに類似度のシグナルを使用できる。編集において、幾つかの動作は構文木における幾つかの個々のノードの一貫性によって単純に借用できるが、一部の動作は環境に依存する。そのため、個々のノードと構文木全体にわたる集合との間のマルチエクステントどうしの類似度を評価する。
【0028】
様々な実施形態において、入力コードの抽象構文木に関するC
-及び所望の出力木に関するC
+等の抽象構文木を用いてコンピュータコードを表すことができる。入力コードの抽象構文木(abstract syntax tree)をC
-とし、望ましい出力木をC
+として示し、同じ編集方法
【数1】
に属するK個のインスタンスを含むサンプルのセットを提供する。
【0029】
クエリサンプル
【数2】
のK個のサンプル間のS共有の基礎となる編集パターンを適応させたい場合、編集前のツリーであっても同じプログラミングコンテンツを共有しない。
【0030】
Graph2Editフレームワークは、以下の(1)~(3)を含んでいてもよい。(1)グラフベースのツリーエンコーダは、入力抽象構文木C
-をベクトル
【数3】
に埋め込む。ここで、Nはノード数であり、Dは特徴次元である。(2)入力と対応する出力を編集パターンと同様に一連の編集動作を表すベクトル
【数4】
に埋め込む編集エンコーダ
【数5】
。(3)ツリー埋め込みと編集表現に対して条件付きで動作する予測のためのデコーダ。予測には、作業(ノードの追加/削除、サブツリーの追加または編集の停止)、抽象構文木の実行位置、並びにツリー埋め込み及び編集表現に関する条件付きの関連動作値が含まれる。
【0031】
ツリー埋め込み履歴を
【数6】
とし、ステップtまでの編集履歴を
【数7】
とする。編集は、
【0032】
【0033】
【0034】
サポートサンプル
【数10】
の初期入力木がクエリ入力木
【数11】
とより多くの類似度を共有する場合、クエリサンプルは、正しい自己編集のためにサポートサンプルの編集表現を採用する可能性が高くなると仮定できる。
【0035】
様々な実施形態において、ツリーエンコーダの出力空間Zのクエリサンプルとサポートサンプルとの間の類似度の評価が実施される。既存のリソースからのクエリサンプルの編集表現の採用可能性を最大化する、サポートセット
【数12】
からの編集表現の凸結合(convex combination)が学習される。ツリーエンコーダの出力は、1次元ベクトルを備える抽象構文木における各ノードを表し、(サポートまたはクエリのいずれかの)個々のC
-サンプルのグローバル表現を取得するため、平均プーリングや最大プーリング等の全てのノードに対する標準的なグラフプーリング作業を使用できる。
【0036】
例えば、抽象構文木(AST:Abstract Syntax Tree)は、コード上で動作するときにコンパイラによって生成されることが多い。ほとんどのコンパイラは、まずコンパイル中のコンピュータ言語からASTを生成し、その後、コードの別の部分がASTを読み取り、そこから新しいコンピュータコードを生成する。言語の構文が表現されているため、構文木になる。何かの構文は命令文の構造である。有効な構文を有するということは、特定の文法の規則に基づいて意味をなすものが書かれたことを意味する。
【0037】
ツリーエンコーダの出力空間Zのクエリサンプルとサポートサンプルとの間の類似度の評価を実施することが可能であり、評価値を元に戻してサポートセット
【数13】
からの編集表現の凸結合を学習できる。これにより、既存のリソースからのクエリサンプルの編集表現の採用可能性が最大化される。
【0038】
コード編集及び抽象構文木に基づいて、ノードの幾つかの編集はそのコンテキストに基づいて選択されるが、幾つかの編集はその隣接ノードに影響されないようにする必要がある。例えば、バケット(bucket)の削除はコンテンツの内部に分からないようにする必要がある。この観点から、個々のノードのマッチングと集合的なツリー表現との間のスライディングトレードオフを実行するマルチエクステントグラフプーリング評価を設計する。
【0039】
しかしながら、そのような標準的なグラフプーリング作業は、サンプル間の個々のノード間のマッチングを考慮していない。
【0040】
コード編集及び抽象構文木に基づいて、ノードの幾つかの編集はそのコンテキストに基づいて選択されるが、幾つかの編集はその隣接ノードに影響されないようにする必要がある。例えば、バケット(bucket)の削除はコンテンツの内部に分からないようにする必要がある。この観点から、個々のノードのマッチングと集合的なツリー表現との間のスライディングトレードオフを実行するマルチエクステントグラフプーリング評価を設計する。
【0041】
全てのノード表現を単純に平均する代わりに、反対側のサンプルにおける類似するノードとマッチする幾つかの個々のノードを強調するように設計する。
【数14】
がクエリサンプル及びサポートサンプルのn番目のノード表現を表し、
【数15】
がノード表現を入力として受け取るクエリサポートの類似度の評価値とする。これらに基づいて、クエリサポートノードのマッチング度は以下のように計算できる。
【0042】
【0043】
【0044】
ここで、
【数18】
は、クエリ及びサポートノード表現に関する学習可能な投影であり、N
qはクエリサンプルにおけるノード数、N
sはサポートサンプルにおけるノード数である。簡単にするために、各モジュールの学習可能なパラメータθは区別されていないことに留意されたい。最大作業は、個々のノード間のマッチングを強調し、対応するノードに少なくとも1つの適切なマッチがある場合に高い値が返される。したがって、以下で示す個々のノードと集合的なツリーとの間の中間位置を制御するためのマッチング度の正規化のためのλ-ソフトマックス関数を設計する。
【0045】
【0046】
【0047】
上記の個々のノード表現に基づいて、1つのクエリサンプル及びK個のサポートサンプルの集合的なツリー表現が、以下で示す加重平均プーリングを用いて取得される。
【0048】
【0049】
【0050】
ここで、
【数23】
は、クエリからのアクティベーション及びサポートセットにおけるk番目のサンプルS
kである。変数λの直観的な解釈は、λが大きいほど、ツリー表現における個々のノードの優位性、つまり、λ-ソフトマックス正規化の鮮明度が大きいことを示す。
【数24】
は、ツリー表現tを平均プーリング後の初期値として保存し、
【数25】
は、ほとんどの場合、単一ノードが1つだけあるツリーを近似的に表す。ノードは、
【数26】
からの最大アクティベーション時に選択される。この性質は、指数関数の1次勾配が単調増加するために成り立つ。
【0051】
集合的なツリー表現を使用すると、以下のクエリサンプル編集のための編集表現の生成に関する式を生成する、更新されたツリー表現が得られる。
【0052】
【0053】
ここで、φ(・,・)は、クエリ及びサポートツリー表現に対する類似度の評価である。
【0054】
単一のエクステントでは、組み合わせのためのロバスト係数
【数28】
に関する評価値を一般化して完全にカバーするには十分ではない可能性がある。一方、コード編集サンプルには大きなばらつきがあるため、個々と集合との間の最適な位置、つまりλにアクセスすることは困難である。ここでは、複数のλを様々に設定し、複雑なコードサンプルの一般化を支援するために、
【数29】
に関する全ての結果
【数30】
をアンサンブルすることで、このような潜在的な弱点を補うマルチエクステントの個々-集合の評価値を提案する。
【0055】
しかしながら、モデル構成においてλを任意に設定すると、全てのエクステントが良好なツリー表現を提供できるわけではなく、幾つかのエクステントは全体的なツリー表現
【数31】
に間違いを含み、モデルを劣化させるおそれがある。ロバストなアンサンブル及び統合の場合、編集表現のマージナルランキング誤差を用いて様々なλ
iに対する
【数32】
の品質を評価することを検討する。グラウンドトゥルース
【数33】
は訓練においてアクセスできるため、1つのλの組み合わせ係数がクエリサンプルとKサポートサンプルとの間の実際の類似度とどの程度一致するかをランキング誤差に明確に反映させる。推論フェーズにおいて、
【数34】
が欠落しているため、外部の予測器Rを導入して各λの品質を予測し、その結果をアンサンブルに使用する。Rは、訓練プロセスで訓練され、多層パーセプトロンとして実装される。
【0056】
まず、以下のコサイン類似度を用いてクエリとサポート編集表現との間の類似度を評価する。
【0057】
【0058】
各λの誤差は以下によってアクセスできる。
【0059】
【0060】
ここで、Γ(・)は、sΓ(1)>sΓ(2)>...sΓ(k)を満たすK個のサポートサンプルのインデックスマッピング、すなわち、s
kを降順にソートするためのマッピングであり、ρはハイパーパラメータとして設定されたマージンである。この式は、最も近いサポートサンプルが他のサポートサンプルよりもどの程度良好かを示し、係数
【数37】
は誤差の信頼度を表す。上記の誤差項は、編集モデル
【数38】
に依存し、概算の見積りに過ぎない可能性があることに留意されたい。
【0061】
複数のエクステントλとその誤差の逆数を用いて、適切にアンサンブルし、以下の編集表現を形成できる。
【0062】
【0063】
メタ訓練プロセスとして訓練を行い、1つのクエリサンプルとK個のサポートサンプルを備えたサポートセットを含む、一連の訓練エピソードにわたってネットワークを最適化する。訓練では、クエリサンプルのグラウンドトゥルースC+を提供する。これにより、各λに関するlλを明示的に計算し、そのような分布に近づくように予測器Rを訓練できる。
【0064】
様々な実施形態において、全てのサポートサンプル及びクエリサンプルは、1つのエピソードにおいて
【数40】
に入力することが可能であり、その後の分布の相違を最小化する。
【0065】
【0066】
さらに、単純にl
λを
【数42】
に置き換えると、推論時間における定式化が得られる。モデルの残りの部分では、完全な訓練の目的関数は次のように定義される。
【0067】
【0068】
LYは、各タイムステップで正しい判断(演算を予測し、実行ノード及び関連する演算値をローカライズする)を行う各編集デコーダモジュールの確率を共に最大化することに等しい。
【0069】
ここで、同じ数字が同一または同様の要素を表す図面、
図1を詳細に参照すると、
図1は、本発明の一実施形態による、コード編集問題に対処する少数ショットサンプルからのコード編集アプローチ(CEFS)のための高レベルのシステム/方法を示すブロック/フロー図である。
【0070】
ブロック110において、クエリコードスニペットのコーパスデータは、各編集タイプのクエリコードスニペットのセットを含む。クエリコードは、コード編集の初期入力として使用される。訓練フェーズにおいて、編集前コードスニペットと編集後コードスニペットの両方が訓練目的で提供されるが、テストフェーズでは編集前コードスニペットを使用できる。オリジナルのサポートコードスニペットと修正されたサポートコードスニペットを含む編集サンプルは、特定の編集パターンを示し、クエリコードスニペットの編集意図を暗示する。機械学習アプローチは、少数の代表例から導き出された編集パターンをクエリコードスニペットに適応させる。
【0071】
ブロック120において、クエリコード毎にサポートコードスニペットのセットが編集サンプルとして与えられる。編集前及び編集後のコードスニペットの両方は、訓練フェーズとテストフェーズで提供される。サポートサンプルは同じ編集カテゴリに属している必要がある。
【0072】
ブロック130において、コードスニペットは、その抽象構文木(AST)フォーマットに構文解析され、文法仕様を用いて、ASTフォーマットが、コードの抽象表現グラフとしての抽象構文記述言語(ASDL:Abstract Syntax Description Language)フォーマットに変換される。コードスニペットは、言語固有の文法を用いて抽象構文木に構文解析できる。抽象構文記述言語(ASDL)は、ツリー状のデータ構造を記述するために設計された言語である。ASDLは、コードを、プログラミングトークンのシーケンスにまさる、文法的に意味のある構文木構造として表現する。親ノード及び子ノード、並びに隣接するシブリング(sibling)ノードの間に双方向エッジを追加することで、オリジナルのASTツリーを拡張する。Graph2Editは、編集エンコーダを用いて一連の編集動作を埋め込み、コードの一部のツリー埋め込みでそれを入力する。続いて、編集作業、編集位置及び関連する動作値を予測し、複数のステップで手順を繰り返す。
【0073】
ブロック140において、ゲートグラフニューラルネットワーク(GGCN:gated graph neural network)を用いてASDLグラフにおける各ノードのベクトル表現を計算する。平均プールを用いてグラフ全体を表すことができる。
【0074】
ブロック150において、編集ペアが与えられると、編集の背後にある意図を表すベクトルを学習可能であり、このベクトルには、編集前と編集後のコードスニペットのトークンレベルの差異等、編集を表すのに必要な情報が含まれる。編集表現は、編集前及び編集後のコードを変換する構造的な編集動作のシーケンスをエンコードすることで学習できる。
【0075】
ブロック160において、ブロック150で生成されたサポートサンプルセットの編集表現に基づいて、クエリ及びサポートアクティベーション学習(Query and Support Activation Learning)、集合的なグラフ表現生成(Collective Graph Representation Generation)及びマルチエクステントアンサンブル(Multi-Extent Ensemble)のステップにおけるクエリコードに基づいたサポートサンプルの統合を選択できる。
【0076】
様々な実施形態において、クエリコードの特徴に基づくサポートサンプルを変換する方法を学習するため、マルチエクステントアンサンブル法を用いてもよい。
【0077】
ブロック170において、編集デコーダは、オペレータ予測器、ノード選択器及びノード値予測器の3つのコンポーネントを用いて動作を予測する。毎回、オペレータ予測器は、削除(Delete)、追加(Add)、サブツリーのコピー(CopySubTree)、停止(Stop)の4つの選択肢からオペレータを決定する。ノード選択器は、ツリーからノードを予測し、4つの作業のいずれかを適用するターゲット位置を特定する。最後に、作業が追加またはサブツリーのコピーの場合、値予測器はこれらのオペレータの追加の値を決定する。
【0078】
プロセスには以下が含まれる。
【0079】
ステップ1。コードの前処理と構文解析。このステップでは、コードスニペットをその抽象構文木(AST)フォーマットに構文解析し、文法仕様を用いてAST木を様々なプログラミング言語のための統一されたグラフに変換する。
【0080】
ステップ2。グラフベースコードエンコーダ。ゲートグラフニューラルネットワーク(GGCN)を用いて、ASDLグラフにおける各ノードのベクトル表現を計算する。
【0081】
ステップ3。シーケンシャル編集エンコーダ。編集ペアが与えられると、編集の背後にある意図を表すベクトルを学習することを目的とする。これには、編集を表すために必要な情報が含まれる。
【0082】
ステップ4。マルチエクステントサンプルアンサンブル。変換方法を学習するため、マルチエクステントアンサンブル法を用いてクエリコードに基づきサポートサンプルを選択して統合する。
【0083】
ステップ5。動作デコーダを編集する。編集デコーダは、オペレータ、ノード位置、対応するノード値の3つの側面において編集動作を予測する。
【0084】
図2は、本発明の一実施形態による、マルチエクステントサンプル構成を用いてクエリコードに基づくサポートサンプルを統合するためのシステム/方法を示すブロック/フロー図である。
【0085】
ブロック210において、クエリサンプル及びサポートサンプルの両方についてアクティベーションが計算される。特に、1つのクエリサンプルと1つのサポートサンプルを用いた類似度の評価
【数44】
を考慮する。クエリサンプルのアクティベーションは次のように定義され、
【0086】
【数45】
サポートサンプルのアクティベーションは次のように定義される。
【0087】
【0088】
ここで、
【数47】
は、クエリサンプル及びサポートサンプルに関する線形プロジェクトである。最大値演算では、個々のノード間のマッチングが強調され、反対側のツリーに少なくとも1つの適切なマッチがある場合に高い値が返される。
【0089】
ブロック220において、個別のグラフアテンションと集合的なグラフアテンションとの間の中間位置を制御するための追加の変数を伴うコードグラフ表現を生成するクエリ及びサポートのアクティベーションが行われる。強化されたクエリのアクティベーションは次のように表すことができる。
【0090】
【0091】
クエリコードグラフのグラフ表現は次のように生成できる。
【0092】
【数49】
また、サポートコードグラフのグラフ表現は次のように生成できる。
【0093】
【0094】
ここで、
【数51】
は、クエリコードグラフ及びサポートコードグラフにおけるn番目のノードのノード表現である。
【0095】
ブロック230において、マルチエクステントアンサンブル法を用いてサポートサンプルの編集表現を選択して統合する。多層パーセプトロン予測器Rを用いて、クエリコード表現
【数52】
とサポートサンプル表現
【数53】
との類似度
【数54】
の品質を予測できる。類似度の評価値の逆品質は次のように計算できる。
【0096】
【0097】
ここで、Γ(・)は、Skを降順にソートするためのインデックスマッピングである。したがって、以下のように複数のエクステントからの結果を適応的にアンサンブルすることでツリー表現を取得できる。
【0098】
【0099】
予測器Rの損失は、以下のように表すことができる。
【0100】
【0101】
この損失は、ブロック170においてデコーダ損失と組み合わされてモデル全体を訓練する。コンテンツは異なるが編集パターンが同じである、限定されたコードサンプルを参照するだけで、新しいクエリサンプルの編集を自動的に実現できるモデルを訓練できる。
【0102】
図3は、本発明の一実施形態による、入力されたコンピュータコードのコンピュータコードリファクタリングのためのコンピュータシステム/方法を示すブロック図である。
【0103】
1つまたは複数の実施形態において、オリジナルのコンピュータコード310をコードリファクタラ320に供給することが可能であり、コードリファクタラ320は、編集前及び編集後のサンプルからより効率的なコードを生成する学習したパターンを反復的に使用することでクエリコードから修正された、入力されたコードの修正バージョン330を出力する。コードリファクタラ320は、グラフベースコードエンコーダ及び編集動作デコーダを含むことができる訓練されたグラフニューラルネットワークを含んでいてもよい。グラフベースコードエンコーダは、ゲートグラフニューラルネットワーク(GGCN)を用いて、ASDLグラフにおける各ノードのベクトル表現を計算できる。
【0104】
図4は、本発明の一実施形態による、コンピュータコードリファクタリングのためのコンピュータシステムを示すブロック図である。
【0105】
1つまたは複数の実施形態において、コンピュータリファクタリングシステム400は、中央処理装置(CPU)、グラフィックス処理装置(GPU)及びそれらの組み合わせが可能な1つまたは複数のプロセッサ410と、1つまたは複数のプロセッサ410と通信するコンピュータメモリ420とを含んでいてもよい。コンピュータメモリ420は、ランダムアクセスメモリ(RAM)、ソリッドステートドライブ(SSD)、ハードディスクドライブ(HDD)、光ディスクドライブ(ODD)等であってもよい。メモリ420は、コードスニペット470、コードパーサ460及びリファクタラ450を格納するように構成できる。コードスニペット470は、クエリコードスニペット及び/またはサンプルコードスニペットであってもよい。コード構文解析器460は、コードスニペットを抽象構文木(AST)フォーマットに構文解析し、コードの抽象表現グラフとして文法仕様を用いて、ASTフォーマットを抽象構文記述言語(ASDL)フォーマットに変換するように構成できる。リファクタラ450は、コードグラフベースのエンコーダ140及び編集動作デコーダ170を備えた逐次編集エンコーダ150を実装する訓練されたニューラルネットワークを用いて、入力されたコードから新しいコンピュータコードを生成するように構成できる。マルチエクステントサンプルアンサンブル160は、クエリコードに基づいてサポートサンプルを選択して統合できる。コンピュータ表示モジュール430は、オリジナルのコードと修正されたコードをユーザに提示できる。メモリ420及び1つまたは複数のプロセッサ410は、システムバス415及びI/Oコントローラを介して表示装置430と電気通信することが可能であり、表示装置430は、リファクタラ450の出力をユーザに提示できる。
【0106】
本明細書に記載する実施形態は、全てハードウェアで実現してもよく、全てソフトウェアで実現してもよく、ハードウェアとソフトウェアの両方の要素を含んでいてもよい。好ましい実施形態において、本発明は、ファームウェア、常駐ソフトウェア、マイクロコード等を含むが、これらに限定されないソフトウェアでも実現可能である。
【0107】
実施形態には、コンピュータもしくは任意の命令実行システムによって使用される、または関連して使用されるプログラムコードを提供する、コンピュータで使用可能な、またはコンピュータで読み取り可能な媒体からアクセスできる、コンピュータプログラム製品を含んでもいてよい。コンピュータで使用可能な、またはコンピュータで読み取り可能な媒体には、命令実行システム、機器、もしくは装置によって使用される、または関連して使用されるプログラムを格納、伝達、伝搬または転送する任意の機器を含んでいてもよい。該媒体は、磁気媒体、光学媒体、電子媒体、電磁気媒体、赤外線媒体または半導体システム(または機器もしくは装置)、あるいは伝搬媒体であってもよい。該媒体には、半導体または固体メモリ、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、リジッド磁気ディスク及び光ディスク等のコンピュータで読み取り可能な媒体を含んでいてもよい。
【0108】
各コンピュータプログラムは、汎用または特別な目的を持つプログラム可能なコンピュータで読み取ることができる、機械で読み取り可能な記録媒体または装置(例えば、プログラムメモリまたは磁気ディスク)に格納される。該コンピュータプログラムは、記録媒体または装置から本明細書に記載された手順を実行するコンピュータで読み出される、該コンピュータの設定及び制御動作のためのものである。本発明のシステムには、本明細書に記載した機能を実行する、特定の及び事前に定義された方法をコンピュータに動作させるように構成されたコンピュータプログラムを含む、コンピュータで読み取り可能な記録媒体も考慮される。
【0109】
プログラムコードを格納及び/または実行するのに適したデータ処理システムは、システムバスを介してメモリ要素に直接または間接的に接続された少なくとも1つのプロセッサを備えていてもよい。このメモリ要素には、処理の実行中にバルクメモリ装置からコードが検索される回数を減らすために、プログラムコードの実際の実行中に用いられるローカルメモリ、バルクメモリ装置及び少なくとも幾つかのプログラムコードを一時的に記憶するキャッシュメモリを備えていてもよい。入出力またはI/O装置(限定されるものではないが、キーボード、ディスプレイ、ポインティング装置等を含む)は、直接またはI/Oコントローラを介してシステムに接続されてもよい。
【0110】
ネットワークアダプタは、データ処理システムが、プライベートネットワークまたは公衆ネットワークを介して、他のデータ処理システムまたはリモートプリンタもしくはメモリ装置に接続されることを可能にするために、上記システムと接続されていてもよい。モデム、ケーブルモデム及びイーサネット(登録商標)カードは、現在利用可能なタイプのネットワークアダプタのほんの一例である。
【0111】
本明細書で用いる「ハードウェアプロセッササブシステム」または「ハードウェアプロセッサ」という用語は、1つ以上の特定のタスクを実行するために協働するプロセッサ、メモリ、ソフトウェアまたはそれらの組み合わせを指すことができる。有用な実施形態において、ハードウェアプロセッササブシステムは、1つまたは複数のデータ処理要素(例えば、論理回路、処理回路、命令実行装置等)を含むことができる。1つまたは複数のデータ処理要素は、中央処理装置、グラフィックス処理装置及び/または個別のプロセッサまたはコンピューティング要素ベースのコントローラ(例えば、論理ゲート等)を含めることができる。ハードウェアプロセッササブシステムは、1つ以上のオンボードメモリ(例えば、キャッシュ、専用メモリアレイ、読み出し専用メモリ等)を含むことができる。任意の実施形態において、ハードウェアプロセッササブシステムは、オンボードまたはオフボードとすることができる、またはハードウェアプロセッササブシステム(例えば、ROM、RAM、基本入出力システム(BIOS)等)で用いるための専用の1つ以上のメモリを含むことができる。
【0112】
幾つかの実施形態において、ハードウェアプロセッササブシステムは、1つまたは複数のソフトウェア要素を含み、実行することができる。1つまたは複数のソフトウェア要素は、オペレーティングシステム及び/または1つまたは複数のアプリケーション及び/または特定の結果を達成するための特定のコードを含むことができる。
【0113】
他の実施形態において、ハードウェアプロセッササブシステムは、指定された結果を達成するために1つまたは複数の電子処理機能を実行する専用回路を含むことができる。そのような回路は、1つまたは複数の特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)及び/またはプログラマブルロジックアレイ(PLA)を含むことができる。
【0114】
ハードウェアプロセッササブシステムのこれら及び他の変形例もまた、本発明の実施形態によって考えられる。
【0115】
本明細書では本発明の「一実施形態」または「一実施形態」、並びにその他の変形形態に言及し、実施形態に関連して説明した特定の機能、構成、特徴などが、本発明の少なくとも1つの実施形態に含まれることを意味する。したがって、「一実施形態において」または「一実施形態において」という語句の出現、並びに本明細書全体を通して様々な場所に出現する任意の他の変形形態は、必ずしも全てが同じ実施形態を参照しているわけではない。しかしながら、本明細書で提供される本発明の教示が与えられると、1つまたは複数の実施形態の特徴を組み合わせることができることを理解されたい。
【0116】
例えば、「A/B」、「A及び/またはB」、並びに「A及びBのうちの少なくとも1つ」の場合における「/」、「及び/または」、並びに「うちの少なくとも1つ」のうちのいずれかの使用は、第1に挙げた選択肢(A)のみの選択、第2に挙げた選択肢(B)のみの選択、または両方の選択肢(A及びB)の選択を含むことを意図したものと理解すべきである。さらに例を挙げれば、「A、B及び/またはC」、並びに「A、B及びCのうちの少なくとも1つ」の場合、このような表現法は、第1に挙げた選択肢(A)のみの選択、第2に挙げた選択肢(B)のみの選択、第3に挙げた選択肢(C)のみの選択、第1及び第2に挙げた選択肢(A及びB)のみの選択、第1及び第3に挙げた選択肢(A及びC)のみの選択、第2及び第3に挙げた選択肢(B及びC)のみの選択、または3つの選択肢全て(A及びB及びC)の選択を含むことを意図したものである。上述した例は、列挙される多数の項目に応じて拡大適用される。
【0117】
上記は、あらゆる観点において説明的かつ典型的であって限定的でないものと理解されるべきであり、本明細書で開示する本発明の範囲は、詳細な説明から決定されるべきではなく、特許法で認められた最大限の広さに基づいて解釈される特許請求の範囲から決定されるべきである。本明細書中に図示及び記載されている実施形態は、本発明の原理を説明するものにすぎず、本発明の範囲及び主旨から逸脱することなく当業者は様々な変更を実施することができることを理解されたい。当業者は、本発明の範囲及び精神から逸脱することなく、様々な他の特徴の組み合わせを実施できる。以上、本発明の態様について、特許法で要求される細部及び詳細な事項と共に説明したが、特許証で保護されることを要求する特許請求の範囲は、添付の特許請求の範囲に示されている。
【国際調査報告】