JP2024519795A - コンピュータコードのリファクタリング - Google Patents
コンピュータコードのリファクタリング Download PDFInfo
- Publication number
- JP2024519795A JP2024519795A JP2023570435A JP2023570435A JP2024519795A JP 2024519795 A JP2024519795 A JP 2024519795A JP 2023570435 A JP2023570435 A JP 2023570435A JP 2023570435 A JP2023570435 A JP 2023570435A JP 2024519795 A JP2024519795 A JP 2024519795A
- Authority
- JP
- Japan
- Prior art keywords
- code
- samples
- edit
- query
- computer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 44
- 238000012549 training Methods 0.000 claims abstract description 17
- 238000013528 artificial neural network Methods 0.000 claims abstract description 14
- 238000003062 neural network model Methods 0.000 claims abstract description 10
- 230000004913 activation Effects 0.000 claims description 15
- 238000001994 activation Methods 0.000 claims description 15
- 238000011176 pooling Methods 0.000 claims description 11
- 230000002457 bidirectional effect Effects 0.000 claims description 3
- 230000001131 transforming effect Effects 0.000 claims 2
- 230000015654 memory Effects 0.000 description 14
- 238000012545 processing Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 8
- 238000011156 evaluation Methods 0.000 description 8
- 230000009471 action Effects 0.000 description 7
- 238000013461 design Methods 0.000 description 6
- 230000014509 gene expression Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000011524 similarity measure Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- 230000002194 synthesizing effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000009472 formulation Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000011426 transformation method Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/72—Code refactoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/09—Supervised learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/01—Dynamic search techniques; Heuristics; Dynamic trees; Branch-and-bound
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Machine Translation (AREA)
- Stored Programmes (AREA)
Abstract
自動化されたコンピュータコード編集のためのシステム及び方法が提供される。本方法は、編集前サンプル及び編集後サンプルを含むコード編集データサンプルのコーパスを用いてコード編集ニューラルネットワークモデルを訓練し、編集前サンプル及び編集後サンプルを抽象構文木(AST)に構文解析する。本方法は、文法仕様を用いて、AST木を様々なプログラミング言語用の統一された抽象構文記述言語グラフに変換し、ゲートグラフニューラルネットワークを用いて、統一された抽象構文記述言語グラフにおける各ノードのベクトル表現を計算することをさらに含む。本方法は、マルチエクステントアンサンブル法によるクエリコードに基づいてサポートサンプルを選択して統合し、コード編集ニューラルネットワークモデルと、編集前サンプル及び編集後サンプルから学習したパターンとを用いて、クエリコードを反復的に変更することをさらに含む。【選択図】図1
Description
この出願は、2021年5月17日に出願された米国仮特許出願第63/189,236号、2021年5月17日に出願された米国仮特許出願第63/189,274号及び2022年5月9日に出願された米国特許出願第17/739,727号を基礎とする優先権を主張し、これらの開示の全てをここに取り込む。
本発明は、ニューラルネットワークを用いてコンピュータコード及びソフトウェアを第1の状態からより効率的に修正された第2の状態に編集することに関し、より詳細には、コンピュータコード及びソフトウェアを第1の状態から修正された第2の状態に変換するために用いるニューラルネットワークのエンコーダの使用に関する。
ニューラルネットワークのエンコーダは、ラベルのないデータの効率的なコーディングを学習するために使用される人工的なニューラルネットワークの一種である。エンコーダは、入力データを受け取り、それを状態値に変換できる。デコーダは、エンコードされた状態値を出力にマップできる。機械翻訳は、ある言語のソーステキストを別の言語の出力テキストに自動的に変換することに関連しており、入力シーケンスが処理されて出力シーケンスが生成される。
ソフトウェア工学におけるコード編集は、既存のプログラミングコードの設計、構造、機能または実装を望ましい形式に修正することを目的としている。リファクタリングは、コンピュータコードを、以前と同様に動作するがより効率的な新しい形式に変換する。自動リファクタリングでは、システムの機能を変更せずに不要なコードや冗長なコードを削除し、非構造化コードを適切な構造化されたコードに変換し、手続き型コードをオブジェクト指向コードに変換できる。
コンピュータプログラミングにおける分解パラダイムは、プログラムを多数のパーツで体系化するための戦略であり、通常、プログラムのテキストを整理する特定の方法を意味する。少数ショット学習は限られた数のサンプルに基づいて予測を行う問題である。
本発明の一態様によれば、自動化されたコンピュータコード編集のための方法が提供される。本方法は、編集前サンプル及び編集後サンプルを含むコード編集データサンプルのコーパスを用いてコード編集ニューラルネットワークモデルを訓練し、編集前サンプル及び編集後サンプルを抽象構文木(AST)に構文解析する。本方法は、文法仕様を用いて、AST木を様々なプログラミング言語用の統一された抽象構文記述言語(ASDL)グラフに変換し、ゲートグラフニューラルネットワーク(GGNN)を用いて、統一された抽象構文記述言語(ASDL)グラフにおける各ノードのベクトル表現を計算することをさらに含む。本方法は、マルチエクステントアンサンブル法によるクエリコードに基づいてサポートサンプルを選択して統合し、コード編集ニューラルネットワークモデルと、編集前サンプル及び編集後サンプルから学習したパターンとを用いて、クエリコードを反復的に変更することをさらに含む。
本発明の別の態様によれば、自動化されたコンピュータコード編集のためのシステムが提供される。本システムは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサのうちの少なくとも1つと動作可能に接続されるコンピュータメモリと、1つまたは複数のプロセッサのうちの少なくとも1つ及びコンピュータメモリと動作可能に接続されるコンピュータ表示装置とを有し、コンピュータメモリは、コンピュータシステムに、編集前サンプル及び編集後サンプルを含むコード編集データサンプルのコーパスを用いてコード編集ニューラルネットワークモデルを訓練し、編集前サンプル及び編集後サンプルを抽象構文木(AST)に構文解析し、文法仕様を用いて、AST木を様々なプログラミング言語用の統一された抽象構文記述言語(ASDL)グラフに変換し、ゲートグラフニューラルネットワーク(GGNN)を用いて、統一された抽象構文記述言語(ASDL)グラフにおける各ノードのベクトル表現を計算し、マルチエクステントアンサンブル法によるクエリコードに基づいてサポートサンプルを選択して統合し、コード編集ニューラルネットワークモデルと、編集前サンプル及び編集後サンプルから学習したパターンとを用いて、クエリコードを反復的に変更することを実行させる命令コードを含む。
これら及び他の特徴並びに利点は、以下の典型的な実施形態の詳細な説明を添付の図面と併せて読むことで明らかになるであろう。
本開示では、後述するように、以下の図面を参照しながら好ましい実施形態について詳細に説明する。
本発明の実施形態によれば、既存のコンピュータコードまたはプログラミング言語を再構築するプロセスのためのシステム及び方法が提供される。コンピュータプログラミングでは、特定の編集パターンやコーディングスタイルを示す幾つかのインスタンスに従ってコードをリファクタリングすることに関心がある。リファクタリングは、ソフトウェアの機能を維持しながら、ソフトウェアの設計、構造及び/または実装を改善することを目的とする。与えられたコードサンプルから、異なるコンテンツで記述されたクエリコードに編集パターンを適応できる。サポートセットにおけるコードサンプルの所定の編集動作を組み合わせて、クエリコードを編集するための新しい編集表現を生成できる。コード構文木(code syntax tree)の類似度は、クエリサンプルとサポートサンプルとの間で編集する前に評価できる。
1つまたは複数の実施形態において、グラフベースのツリーエンコーダを利用して、コンピュータコード及びソフトウェアを第1の状態から修正された第2の状態に修正することが可能であり、第2の状態は以前と同様に動作するが、より効率的である。
非限定的な例示的な実施形態では、
Input: Both exemplars and new query code;
Pre-edit;
normalized = list(filter(lambda x; x is not None, map(harvester.normalize, harvested[:25])))
Post-edit:
normalized = list([x for x in map(harvester nomalize, harvested[:25]) if x is not None])
New query:
chunk = filter(lambda x: x.feature == feature, ichunk
Output (edited code for new query using the learned pattern from exemplars):
chunk = [x for x in ichunk if x.feature == feature]
である。
である。
1つまたは複数の実施形態において、編集前サンプル及び編集後サンプル、並びにそれらの対応する編集タイプを含むコード編集データサンプルのコーパスが与えられると、コード編集モデルを少数の編集から学習し、知識(訓練された編集タイプでタスクを処理する機能)を訓練データが利用できない未知の編集タイプに転送する。同じプロジェクトにおけるコードは、幾つかの典型的なコーディングスタイルでは統一されている場合がある。コードの編集方法を示すために少数のサンプルしか利用できないという設定下でコード編集の問題に対処するため、少数ショットサンプルからのコード編集アプローチ(CEFS:Code Editing Approach from Few-shot Samples)が提示される。標準コーディングスタイルをプロジェクトに自動的に適用できるため、人のプログラマーは記載されたコンピュータコードを手動で検査する必要がなくなる。
様々な実施形態において、コード構文木に関する類似度は、クエリサンプルとサポートサンプルとの間の編集前に評価され、編集の組み合わせに類似度のシグナルを使用できる。編集において、幾つかの動作は構文木における幾つかの個々のノードの一貫性によって単純に借用できるが、一部の動作は環境に依存する。そのため、個々のノードと構文木全体にわたる集合との間のマルチエクステントどうしの類似度を評価する。
様々な実施形態において、入力コードの抽象構文木に関するC-及び所望の出力木に関するC+等の抽象構文木を用いてコンピュータコードを表すことができる。入力コードの抽象構文木(abstract syntax tree)をC-とし、望ましい出力木をC+として示し、同じ編集方法
に属するK個のインスタンスを含むサンプルのセットを提供する。
Graph2Editフレームワークは、以下の(1)~(3)を含んでいてもよい。(1)グラフベースのツリーエンコーダは、入力抽象構文木C-をベクトル
に埋め込む。ここで、Nはノード数であり、Dは特徴次元である。(2)入力と対応する出力を編集パターンと同様に一連の編集動作を表すベクトル
に埋め込む編集エンコーダ
。(3)ツリー埋め込みと編集表現に対して条件付きで動作する予測のためのデコーダ。予測には、作業(ノードの追加/削除、サブツリーの追加または編集の停止)、抽象構文木の実行位置、並びにツリー埋め込み及び編集表現に関する条件付きの関連動作値が含まれる。
様々な実施形態において、ツリーエンコーダの出力空間Zのクエリサンプルとサポートサンプルとの間の類似度の評価が実施される。既存のリソースからのクエリサンプルの編集表現の採用可能性を最大化する、サポートセット
からの編集表現の凸結合(convex combination)が学習される。ツリーエンコーダの出力は、1次元ベクトルを備える抽象構文木における各ノードを表し、(サポートまたはクエリのいずれかの)個々のC-サンプルのグローバル表現を取得するため、平均プーリングや最大プーリング等の全てのノードに対する標準的なグラフプーリング作業を使用できる。
例えば、抽象構文木(AST:Abstract Syntax Tree)は、コード上で動作するときにコンパイラによって生成されることが多い。ほとんどのコンパイラは、まずコンパイル中のコンピュータ言語からASTを生成し、その後、コードの別の部分がASTを読み取り、そこから新しいコンピュータコードを生成する。言語の構文が表現されているため、構文木になる。何かの構文は命令文の構造である。有効な構文を有するということは、特定の文法の規則に基づいて意味をなすものが書かれたことを意味する。
ツリーエンコーダの出力空間Zのクエリサンプルとサポートサンプルとの間の類似度の評価を実施することが可能であり、評価値を元に戻してサポートセット
からの編集表現の凸結合を学習できる。これにより、既存のリソースからのクエリサンプルの編集表現の採用可能性が最大化される。
コード編集及び抽象構文木に基づいて、ノードの幾つかの編集はそのコンテキストに基づいて選択されるが、幾つかの編集はその隣接ノードに影響されないようにする必要がある。例えば、バケット(bucket)の削除はコンテンツの内部に分からないようにする必要がある。この観点から、個々のノードのマッチングと集合的なツリー表現との間のスライディングトレードオフを実行するマルチエクステントグラフプーリング評価を設計する。
しかしながら、そのような標準的なグラフプーリング作業は、サンプル間の個々のノード間のマッチングを考慮していない。
コード編集及び抽象構文木に基づいて、ノードの幾つかの編集はそのコンテキストに基づいて選択されるが、幾つかの編集はその隣接ノードに影響されないようにする必要がある。例えば、バケット(bucket)の削除はコンテンツの内部に分からないようにする必要がある。この観点から、個々のノードのマッチングと集合的なツリー表現との間のスライディングトレードオフを実行するマルチエクステントグラフプーリング評価を設計する。
全てのノード表現を単純に平均する代わりに、反対側のサンプルにおける類似するノードとマッチする幾つかの個々のノードを強調するように設計する。
がクエリサンプル及びサポートサンプルのn番目のノード表現を表し、
がノード表現を入力として受け取るクエリサポートの類似度の評価値とする。これらに基づいて、クエリサポートノードのマッチング度は以下のように計算できる。
ここで、
は、クエリ及びサポートノード表現に関する学習可能な投影であり、Nqはクエリサンプルにおけるノード数、Nsはサポートサンプルにおけるノード数である。簡単にするために、各モジュールの学習可能なパラメータθは区別されていないことに留意されたい。最大作業は、個々のノード間のマッチングを強調し、対応するノードに少なくとも1つの適切なマッチがある場合に高い値が返される。したがって、以下で示す個々のノードと集合的なツリーとの間の中間位置を制御するためのマッチング度の正規化のためのλ-ソフトマックス関数を設計する。
上記の個々のノード表現に基づいて、1つのクエリサンプル及びK個のサポートサンプルの集合的なツリー表現が、以下で示す加重平均プーリングを用いて取得される。
ここで、
は、クエリからのアクティベーション及びサポートセットにおけるk番目のサンプルSkである。変数λの直観的な解釈は、λが大きいほど、ツリー表現における個々のノードの優位性、つまり、λ-ソフトマックス正規化の鮮明度が大きいことを示す。
は、ツリー表現tを平均プーリング後の初期値として保存し、
は、ほとんどの場合、単一ノードが1つだけあるツリーを近似的に表す。ノードは、
からの最大アクティベーション時に選択される。この性質は、指数関数の1次勾配が単調増加するために成り立つ。
集合的なツリー表現を使用すると、以下のクエリサンプル編集のための編集表現の生成に関する式を生成する、更新されたツリー表現が得られる。
ここで、φ(・,・)は、クエリ及びサポートツリー表現に対する類似度の評価である。
単一のエクステントでは、組み合わせのためのロバスト係数
に関する評価値を一般化して完全にカバーするには十分ではない可能性がある。一方、コード編集サンプルには大きなばらつきがあるため、個々と集合との間の最適な位置、つまりλにアクセスすることは困難である。ここでは、複数のλを様々に設定し、複雑なコードサンプルの一般化を支援するために、
に関する全ての結果
をアンサンブルすることで、このような潜在的な弱点を補うマルチエクステントの個々-集合の評価値を提案する。
しかしながら、モデル構成においてλを任意に設定すると、全てのエクステントが良好なツリー表現を提供できるわけではなく、幾つかのエクステントは全体的なツリー表現
に間違いを含み、モデルを劣化させるおそれがある。ロバストなアンサンブル及び統合の場合、編集表現のマージナルランキング誤差を用いて様々なλiに対する
の品質を評価することを検討する。グラウンドトゥルース
は訓練においてアクセスできるため、1つのλの組み合わせ係数がクエリサンプルとKサポートサンプルとの間の実際の類似度とどの程度一致するかをランキング誤差に明確に反映させる。推論フェーズにおいて、
が欠落しているため、外部の予測器Rを導入して各λの品質を予測し、その結果をアンサンブルに使用する。Rは、訓練プロセスで訓練され、多層パーセプトロンとして実装される。
まず、以下のコサイン類似度を用いてクエリとサポート編集表現との間の類似度を評価する。
各λの誤差は以下によってアクセスできる。
ここで、Γ(・)は、sΓ(1)>sΓ(2)>...sΓ(k)を満たすK個のサポートサンプルのインデックスマッピング、すなわち、skを降順にソートするためのマッピングであり、ρはハイパーパラメータとして設定されたマージンである。この式は、最も近いサポートサンプルが他のサポートサンプルよりもどの程度良好かを示し、係数
は誤差の信頼度を表す。上記の誤差項は、編集モデル
に依存し、概算の見積りに過ぎない可能性があることに留意されたい。
複数のエクステントλとその誤差の逆数を用いて、適切にアンサンブルし、以下の編集表現を形成できる。
メタ訓練プロセスとして訓練を行い、1つのクエリサンプルとK個のサポートサンプルを備えたサポートセットを含む、一連の訓練エピソードにわたってネットワークを最適化する。訓練では、クエリサンプルのグラウンドトゥルースC+を提供する。これにより、各λに関するlλを明示的に計算し、そのような分布に近づくように予測器Rを訓練できる。
LYは、各タイムステップで正しい判断(演算を予測し、実行ノード及び関連する演算値をローカライズする)を行う各編集デコーダモジュールの確率を共に最大化することに等しい。
ここで、同じ数字が同一または同様の要素を表す図面、図1を詳細に参照すると、図1は、本発明の一実施形態による、コード編集問題に対処する少数ショットサンプルからのコード編集アプローチ(CEFS)のための高レベルのシステム/方法を示すブロック/フロー図である。
ブロック110において、クエリコードスニペットのコーパスデータは、各編集タイプのクエリコードスニペットのセットを含む。クエリコードは、コード編集の初期入力として使用される。訓練フェーズにおいて、編集前コードスニペットと編集後コードスニペットの両方が訓練目的で提供されるが、テストフェーズでは編集前コードスニペットを使用できる。オリジナルのサポートコードスニペットと修正されたサポートコードスニペットを含む編集サンプルは、特定の編集パターンを示し、クエリコードスニペットの編集意図を暗示する。機械学習アプローチは、少数の代表例から導き出された編集パターンをクエリコードスニペットに適応させる。
ブロック120において、クエリコード毎にサポートコードスニペットのセットが編集サンプルとして与えられる。編集前及び編集後のコードスニペットの両方は、訓練フェーズとテストフェーズで提供される。サポートサンプルは同じ編集カテゴリに属している必要がある。
ブロック130において、コードスニペットは、その抽象構文木(AST)フォーマットに構文解析され、文法仕様を用いて、ASTフォーマットが、コードの抽象表現グラフとしての抽象構文記述言語(ASDL:Abstract Syntax Description Language)フォーマットに変換される。コードスニペットは、言語固有の文法を用いて抽象構文木に構文解析できる。抽象構文記述言語(ASDL)は、ツリー状のデータ構造を記述するために設計された言語である。ASDLは、コードを、プログラミングトークンのシーケンスにまさる、文法的に意味のある構文木構造として表現する。親ノード及び子ノード、並びに隣接するシブリング(sibling)ノードの間に双方向エッジを追加することで、オリジナルのASTツリーを拡張する。Graph2Editは、編集エンコーダを用いて一連の編集動作を埋め込み、コードの一部のツリー埋め込みでそれを入力する。続いて、編集作業、編集位置及び関連する動作値を予測し、複数のステップで手順を繰り返す。
ブロック140において、ゲートグラフニューラルネットワーク(GGCN:gated graph neural network)を用いてASDLグラフにおける各ノードのベクトル表現を計算する。平均プールを用いてグラフ全体を表すことができる。
ブロック150において、編集ペアが与えられると、編集の背後にある意図を表すベクトルを学習可能であり、このベクトルには、編集前と編集後のコードスニペットのトークンレベルの差異等、編集を表すのに必要な情報が含まれる。編集表現は、編集前及び編集後のコードを変換する構造的な編集動作のシーケンスをエンコードすることで学習できる。
ブロック160において、ブロック150で生成されたサポートサンプルセットの編集表現に基づいて、クエリ及びサポートアクティベーション学習(Query and Support Activation Learning)、集合的なグラフ表現生成(Collective Graph Representation Generation)及びマルチエクステントアンサンブル(Multi-Extent Ensemble)のステップにおけるクエリコードに基づいたサポートサンプルの統合を選択できる。
様々な実施形態において、クエリコードの特徴に基づくサポートサンプルを変換する方法を学習するため、マルチエクステントアンサンブル法を用いてもよい。
ブロック170において、編集デコーダは、オペレータ予測器、ノード選択器及びノード値予測器の3つのコンポーネントを用いて動作を予測する。毎回、オペレータ予測器は、削除(Delete)、追加(Add)、サブツリーのコピー(CopySubTree)、停止(Stop)の4つの選択肢からオペレータを決定する。ノード選択器は、ツリーからノードを予測し、4つの作業のいずれかを適用するターゲット位置を特定する。最後に、作業が追加またはサブツリーのコピーの場合、値予測器はこれらのオペレータの追加の値を決定する。
プロセスには以下が含まれる。
ステップ1。コードの前処理と構文解析。このステップでは、コードスニペットをその抽象構文木(AST)フォーマットに構文解析し、文法仕様を用いてAST木を様々なプログラミング言語のための統一されたグラフに変換する。
ステップ2。グラフベースコードエンコーダ。ゲートグラフニューラルネットワーク(GGCN)を用いて、ASDLグラフにおける各ノードのベクトル表現を計算する。
ステップ3。シーケンシャル編集エンコーダ。編集ペアが与えられると、編集の背後にある意図を表すベクトルを学習することを目的とする。これには、編集を表すために必要な情報が含まれる。
ステップ4。マルチエクステントサンプルアンサンブル。変換方法を学習するため、マルチエクステントアンサンブル法を用いてクエリコードに基づきサポートサンプルを選択して統合する。
ステップ5。動作デコーダを編集する。編集デコーダは、オペレータ、ノード位置、対応するノード値の3つの側面において編集動作を予測する。
図2は、本発明の一実施形態による、マルチエクステントサンプル構成を用いてクエリコードに基づくサポートサンプルを統合するためのシステム/方法を示すブロック/フロー図である。
ブロック210において、クエリサンプル及びサポートサンプルの両方についてアクティベーションが計算される。特に、1つのクエリサンプルと1つのサポートサンプルを用いた類似度の評価
を考慮する。クエリサンプルのアクティベーションは次のように定義され、
ここで、
は、クエリサンプル及びサポートサンプルに関する線形プロジェクトである。最大値演算では、個々のノード間のマッチングが強調され、反対側のツリーに少なくとも1つの適切なマッチがある場合に高い値が返される。
ブロック220において、個別のグラフアテンションと集合的なグラフアテンションとの間の中間位置を制御するための追加の変数を伴うコードグラフ表現を生成するクエリ及びサポートのアクティベーションが行われる。強化されたクエリのアクティベーションは次のように表すことができる。
クエリコードグラフのグラフ表現は次のように生成できる。
ブロック230において、マルチエクステントアンサンブル法を用いてサポートサンプルの編集表現を選択して統合する。多層パーセプトロン予測器Rを用いて、クエリコード表現
とサポートサンプル表現
との類似度
の品質を予測できる。類似度の評価値の逆品質は次のように計算できる。
ここで、Γ(・)は、Skを降順にソートするためのインデックスマッピングである。したがって、以下のように複数のエクステントからの結果を適応的にアンサンブルすることでツリー表現を取得できる。
予測器Rの損失は、以下のように表すことができる。
この損失は、ブロック170においてデコーダ損失と組み合わされてモデル全体を訓練する。コンテンツは異なるが編集パターンが同じである、限定されたコードサンプルを参照するだけで、新しいクエリサンプルの編集を自動的に実現できるモデルを訓練できる。
図3は、本発明の一実施形態による、入力されたコンピュータコードのコンピュータコードリファクタリングのためのコンピュータシステム/方法を示すブロック図である。
1つまたは複数の実施形態において、オリジナルのコンピュータコード310をコードリファクタラ320に供給することが可能であり、コードリファクタラ320は、編集前及び編集後のサンプルからより効率的なコードを生成する学習したパターンを反復的に使用することでクエリコードから修正された、入力されたコードの修正バージョン330を出力する。コードリファクタラ320は、グラフベースコードエンコーダ及び編集動作デコーダを含むことができる訓練されたグラフニューラルネットワークを含んでいてもよい。グラフベースコードエンコーダは、ゲートグラフニューラルネットワーク(GGCN)を用いて、ASDLグラフにおける各ノードのベクトル表現を計算できる。
図4は、本発明の一実施形態による、コンピュータコードリファクタリングのためのコンピュータシステムを示すブロック図である。
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の出力をユーザに提示できる。
本明細書に記載する実施形態は、全てハードウェアで実現してもよく、全てソフトウェアで実現してもよく、ハードウェアとソフトウェアの両方の要素を含んでいてもよい。好ましい実施形態において、本発明は、ファームウェア、常駐ソフトウェア、マイクロコード等を含むが、これらに限定されないソフトウェアでも実現可能である。
実施形態には、コンピュータもしくは任意の命令実行システムによって使用される、または関連して使用されるプログラムコードを提供する、コンピュータで使用可能な、またはコンピュータで読み取り可能な媒体からアクセスできる、コンピュータプログラム製品を含んでもいてよい。コンピュータで使用可能な、またはコンピュータで読み取り可能な媒体には、命令実行システム、機器、もしくは装置によって使用される、または関連して使用されるプログラムを格納、伝達、伝搬または転送する任意の機器を含んでいてもよい。該媒体は、磁気媒体、光学媒体、電子媒体、電磁気媒体、赤外線媒体または半導体システム(または機器もしくは装置)、あるいは伝搬媒体であってもよい。該媒体には、半導体または固体メモリ、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、リジッド磁気ディスク及び光ディスク等のコンピュータで読み取り可能な媒体を含んでいてもよい。
各コンピュータプログラムは、汎用または特別な目的を持つプログラム可能なコンピュータで読み取ることができる、機械で読み取り可能な記録媒体または装置(例えば、プログラムメモリまたは磁気ディスク)に格納される。該コンピュータプログラムは、記録媒体または装置から本明細書に記載された手順を実行するコンピュータで読み出される、該コンピュータの設定及び制御動作のためのものである。本発明のシステムには、本明細書に記載した機能を実行する、特定の及び事前に定義された方法をコンピュータに動作させるように構成されたコンピュータプログラムを含む、コンピュータで読み取り可能な記録媒体も考慮される。
プログラムコードを格納及び/または実行するのに適したデータ処理システムは、システムバスを介してメモリ要素に直接または間接的に接続された少なくとも1つのプロセッサを備えていてもよい。このメモリ要素には、処理の実行中にバルクメモリ装置からコードが検索される回数を減らすために、プログラムコードの実際の実行中に用いられるローカルメモリ、バルクメモリ装置及び少なくとも幾つかのプログラムコードを一時的に記憶するキャッシュメモリを備えていてもよい。入出力またはI/O装置(限定されるものではないが、キーボード、ディスプレイ、ポインティング装置等を含む)は、直接またはI/Oコントローラを介してシステムに接続されてもよい。
ネットワークアダプタは、データ処理システムが、プライベートネットワークまたは公衆ネットワークを介して、他のデータ処理システムまたはリモートプリンタもしくはメモリ装置に接続されることを可能にするために、上記システムと接続されていてもよい。モデム、ケーブルモデム及びイーサネット(登録商標)カードは、現在利用可能なタイプのネットワークアダプタのほんの一例である。
本明細書で用いる「ハードウェアプロセッササブシステム」または「ハードウェアプロセッサ」という用語は、1つ以上の特定のタスクを実行するために協働するプロセッサ、メモリ、ソフトウェアまたはそれらの組み合わせを指すことができる。有用な実施形態において、ハードウェアプロセッササブシステムは、1つまたは複数のデータ処理要素(例えば、論理回路、処理回路、命令実行装置等)を含むことができる。1つまたは複数のデータ処理要素は、中央処理装置、グラフィックス処理装置及び/または個別のプロセッサまたはコンピューティング要素ベースのコントローラ(例えば、論理ゲート等)を含めることができる。ハードウェアプロセッササブシステムは、1つ以上のオンボードメモリ(例えば、キャッシュ、専用メモリアレイ、読み出し専用メモリ等)を含むことができる。任意の実施形態において、ハードウェアプロセッササブシステムは、オンボードまたはオフボードとすることができる、またはハードウェアプロセッササブシステム(例えば、ROM、RAM、基本入出力システム(BIOS)等)で用いるための専用の1つ以上のメモリを含むことができる。
幾つかの実施形態において、ハードウェアプロセッササブシステムは、1つまたは複数のソフトウェア要素を含み、実行することができる。1つまたは複数のソフトウェア要素は、オペレーティングシステム及び/または1つまたは複数のアプリケーション及び/または特定の結果を達成するための特定のコードを含むことができる。
他の実施形態において、ハードウェアプロセッササブシステムは、指定された結果を達成するために1つまたは複数の電子処理機能を実行する専用回路を含むことができる。そのような回路は、1つまたは複数の特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)及び/またはプログラマブルロジックアレイ(PLA)を含むことができる。
ハードウェアプロセッササブシステムのこれら及び他の変形例もまた、本発明の実施形態によって考えられる。
本明細書では本発明の「一実施形態」または「一実施形態」、並びにその他の変形形態に言及し、実施形態に関連して説明した特定の機能、構成、特徴などが、本発明の少なくとも1つの実施形態に含まれることを意味する。したがって、「一実施形態において」または「一実施形態において」という語句の出現、並びに本明細書全体を通して様々な場所に出現する任意の他の変形形態は、必ずしも全てが同じ実施形態を参照しているわけではない。しかしながら、本明細書で提供される本発明の教示が与えられると、1つまたは複数の実施形態の特徴を組み合わせることができることを理解されたい。
例えば、「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)の選択を含むことを意図したものである。上述した例は、列挙される多数の項目に応じて拡大適用される。
上記は、あらゆる観点において説明的かつ典型的であって限定的でないものと理解されるべきであり、本明細書で開示する本発明の範囲は、詳細な説明から決定されるべきではなく、特許法で認められた最大限の広さに基づいて解釈される特許請求の範囲から決定されるべきである。本明細書中に図示及び記載されている実施形態は、本発明の原理を説明するものにすぎず、本発明の範囲及び主旨から逸脱することなく当業者は様々な変更を実施することができることを理解されたい。当業者は、本発明の範囲及び精神から逸脱することなく、様々な他の特徴の組み合わせを実施できる。以上、本発明の態様について、特許法で要求される細部及び詳細な事項と共に説明したが、特許証で保護されることを要求する特許請求の範囲は、添付の特許請求の範囲に示されている。
Claims (20)
- 自動化されたコンピュータコード編集のためのコンピュータで実施される方法であって、
編集前サンプル(110)及び編集後サンプル(120)を含むコード編集データサンプルのコーパスを用いてコード編集ニューラルネットワークモデル(320)を訓練するステップと、
前記編集前サンプル及び前記編集後サンプルを抽象構文木(AST)に構文解析するステップ(130)と、
文法仕様を用いて、AST木を様々なプログラミング言語用の統一された抽象構文記述言語(ASDL)グラフに変換するステップ(130)と、
ゲートグラフニューラルネットワーク(GGNN)(320)を用いて、前記統一された抽象構文記述言語(ASDL)グラフにおける各ノードのベクトル表現(140、150)を計算するステップと、
マルチエクステントアンサンブル法によるクエリコードに基づいてサポートサンプルを選択して統合するステップ(160)と、
前記コード編集ニューラルネットワークモデルと、前記編集前サンプル及び前記編集後サンプルから学習したパターンとを用いて、クエリコードを反復的に変更するステップ(170)とを有する、コンピュータで実施される方法。 - 前記編集前サンプル及び前記編集後サンプルは、前記マルチエクステントアンサンブル法を用いて組み合わされる、請求項1に記載のコンピュータで実施される方法。
- クエリコードスニペットのコーパスデータは、各編集タイプに関するクエリコードスニペットのセットを含む、請求項2に記載のコンピュータで実施される方法。
- コード編集のための初期入力として、前記クエリコードを入力するステップをさらに有する、請求項3に記載のコンピュータで実施される方法。
- 前記クエリコードは、訓練中の編集前コードスニペット及び編集後コードスニペットの両方に対する編集サンプルとして提供される、サポートコードスニペットのセットである、請求項4に記載のコンピュータで実施される方法。
- 親ノードと子ノードとの間に双方向エッジを追加することで、オリジナルのAST木を拡張するステップをさらに有する、請求項5に記載のコンピュータで実施される方法。
- 平均プールを用いてグラフ全体を表すステップをさらに有する、請求項6に記載のコンピュータで実施される方法。
- クエリサンプル及びサポートサンプルに関するアクティベーションを計算するステップをさらに有する、請求項7に記載のコンピュータで実施される方法。
- 自動化されたコンピュータコード編集のためのコンピュータシステム(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)と、
を実行させる命令コードを含む、コンピュータシステム。 - 前記編集前サンプル及び前記編集後サンプルは、前記マルチエクステントアンサンブル法を用いて組み合わされる、請求項11に記載のコンピュータシステム。
- クエリコードスニペットのコーパスデータは、各編集タイプに関するクエリコードスニペットのセットを含む、
請求項12に記載のコンピュータシステム。 - コード編集のための初期入力として、前記クエリコードを入力するステップを、前記コンピュータシステムに実行させることができる命令コードをさらに有する、請求項13に記載のコンピュータシステム。
- 前記クエリコードは、訓練中の編集前コードスニペット及び編集後コードスニペットの両方に対する編集サンプルとして提供される、サポートコードスニペットのセットである、請求項14に記載のコンピュータシステム。
- 親ノードと子ノードとの間に双方向エッジを追加することで、オリジナルのAST木を拡張するステップを、前記コンピュータシステムに実行させることができる命令コードをさらに有する、請求項15に記載のコンピュータシステム。
- 平均プールを用いてグラフ全体を表すステップを、前記コンピュータシステムに実行させることができる命令コードをさらに有する、請求項16に記載のコンピュータシステム。
- クエリサンプル及びサポートサンプルに関するアクティベーションを計算するステップを、前記コンピュータシステムに実行させることができる命令コードをさらに有する、請求項17に記載のコンピュータシステム。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163189236P | 2021-05-17 | 2021-05-17 | |
US202163189274P | 2021-05-17 | 2021-05-17 | |
US63/189,236 | 2021-05-17 | ||
US63/189,274 | 2021-05-17 | ||
US17/739,727 | 2022-05-09 | ||
US17/739,727 US11782703B2 (en) | 2021-05-17 | 2022-05-09 | Computer code refactoring |
PCT/US2022/028535 WO2022245590A1 (en) | 2021-05-17 | 2022-05-10 | Computer code refactoring |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2024519795A true JP2024519795A (ja) | 2024-05-21 |
Family
ID=84103666
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2023570435A Pending JP2024519795A (ja) | 2021-05-17 | 2022-05-10 | コンピュータコードのリファクタリング |
Country Status (3)
Country | Link |
---|---|
US (1) | US11782703B2 (ja) |
JP (1) | JP2024519795A (ja) |
WO (1) | WO2022245590A1 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116661805B (zh) * | 2023-07-31 | 2023-11-14 | 腾讯科技(深圳)有限公司 | 代码表示的生成方法和装置、存储介质及电子设备 |
CN117573096B (zh) * | 2024-01-17 | 2024-04-09 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种融合抽象语法树结构信息的智能代码补全方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9182980B2 (en) * | 2012-12-11 | 2015-11-10 | Microsoft Technology Licensing, Llc. | Expansion and reduction of source code for code refactoring |
US8984485B2 (en) * | 2013-05-01 | 2015-03-17 | International Business Machines Corporation | Analysis of source code changes |
US9940104B2 (en) * | 2013-06-11 | 2018-04-10 | Microsoft Technology Licensing, Llc. | Automatic source code generation |
US20170212829A1 (en) * | 2016-01-21 | 2017-07-27 | American Software Safety Reliability Company | Deep Learning Source Code Analyzer and Repairer |
KR102167476B1 (ko) * | 2019-01-31 | 2020-10-19 | 성균관대학교 산학협력단 | 리소스 모니터링을 이용한 소프트웨어 리팩토링 방법 및 장치 |
-
2022
- 2022-05-09 US US17/739,727 patent/US11782703B2/en active Active
- 2022-05-10 JP JP2023570435A patent/JP2024519795A/ja active Pending
- 2022-05-10 WO PCT/US2022/028535 patent/WO2022245590A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2022245590A1 (en) | 2022-11-24 |
US11782703B2 (en) | 2023-10-10 |
US20220374232A1 (en) | 2022-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Volpi et al. | Continual adaptation of visual representations via domain randomization and meta-learning | |
Miao et al. | Towards unified data and lifecycle management for deep learning | |
DE102020110536A1 (de) | Verfahren, Systeme, Herstellungsgegenstände und Vorrichtungen für ein kontext- und komplexitätsbewusstes Empfehlungssystem zur verbesserten Softwareentwicklungseffizienz | |
JP2024519795A (ja) | コンピュータコードのリファクタリング | |
JP7324831B2 (ja) | ディープラーニングフレームワークにおける演算子の展開方法、展開装置及び電子機器 | |
Gauthier et al. | Premise selection and external provers for HOL4 | |
KR20150143473A (ko) | 재계산 사용자 인터페이스 내의 신호 캡처 컨트롤 | |
CN113283613B (zh) | 深度学习模型的生成方法、优化方法、装置、设备及介质 | |
US11521076B2 (en) | Architecture-independent approximation discovery | |
US20220004914A1 (en) | Code generation for auto-ai | |
CN112597063A (zh) | 缺陷代码定位的方法、装置以及存储介质 | |
CN117170685B (zh) | 一种数据处理方法、装置、设备及介质 | |
CN112036563A (zh) | 使用起源数据的深度学习模型洞察 | |
US9436912B1 (en) | Symmetric schema instantiation method for use in a case-based reasoning system | |
Stelly et al. | Nugget: A digital forensics language | |
Zhou et al. | On the opportunities of green computing: A survey | |
US20220036232A1 (en) | Technology for optimizing artificial intelligence pipelines | |
US20210398012A1 (en) | Method and system for performing data pre-processing operations during data preparation of a machine learning lifecycle | |
Nickles | A tool for probabilistic reasoning based on logic programming and first-order theories under stable model semantics | |
US20230409976A1 (en) | Rewriting method and information processing apparatus | |
CN116306672A (zh) | 一种数据处理方法及其装置 | |
CN111612156A (zh) | 用于XGBoost模型的解释方法 | |
Feser et al. | Differentiable functional program interpreters | |
CN116974554A (zh) | 代码数据处理方法、装置、计算机设备和存储介质 | |
Körner et al. | Mastering Azure Machine Learning: Perform large-scale end-to-end advanced machine learning in the cloud with Microsoft Azure Machine Learning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20231228 |