JP2022073981A - ソースコード取得 - Google Patents
ソースコード取得 Download PDFInfo
- Publication number
- JP2022073981A JP2022073981A JP2021156668A JP2021156668A JP2022073981A JP 2022073981 A JP2022073981 A JP 2022073981A JP 2021156668 A JP2021156668 A JP 2021156668A JP 2021156668 A JP2021156668 A JP 2021156668A JP 2022073981 A JP2022073981 A JP 2022073981A
- Authority
- JP
- Japan
- Prior art keywords
- natural language
- code
- vector
- language search
- training
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/332—Query formulation
- G06F16/3329—Natural language query formulation or dialogue systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/3332—Query translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
- G06F16/3344—Query execution using natural language analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
- G06F16/3347—Query execution using vector based model
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
- G06F40/226—Validation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- 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
-
- 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/045—Combinations of networks
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- 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/044—Recurrent networks, e.g. Hopfield networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Evolutionary Computation (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
【課題】 検索クエリに応答してユーザにソースコードを効果的に提供する。【解決手段】 一方法が、訓練コードを取得するステップと、訓練コードから特徴を抽出するステップを含み得る。訓練コードの抽出された特徴は、ディープニューラルネットワークにより自然言語コードベクトルにマッピングされ得る。ソースコード提案を要求する自然言語検索クエリを受信することができ、自然言語検索クエリは、ディープニューラルネットワークにより自然言語検索ベクトルにマッピングされ得る。当該方法は、訓練コードの抽出された特徴を自然言語コードベクトルにマッピングするのと同じ又は類似の方法で自然言語検索クエリを自然言語検索ベクトルにマッピングするステップを含んでもよく、自然言語検索ベクトルは、自然言語コードベクトルと比較され得る。自然言語検索クエリに応答するソースコードが、自然言語検索ベクトルと自然言語コードベクトルと間の比較に基づいて提案され得る。【選択図】 図1
Description
本開示は、一般にソースコードの取得に関する。
ソースコードの実装を利用するタスクを達成することに関心のあるユーザは、タスクを達成するためにソフトウェアプログラムを効果的に書く方法を理解していないことがあり、タスクを完了するために使用できるソースコードを検索したい場合がある。しかしながら、そのようなソースコードの検索は、現在のアプローチを用いると効果的でない可能性がある。
ディープラーニングは、機械学習のサブセットであり、ディープニューラルネットワークは、従来の機械学習モデルの出力より複雑な出力をもたらし得る入力データセットから情報を抽出するために、複数の処理層を使用することがある。ディープラーニングの多層の態様は、ディープラーニングモデルが入力データセットの異なる特性を漸進的に分析することを可能にし、人間の意思決定により類似した高レベルの抽象的な出力を結果としてもたらし得る。
本開示において請求される主題事項は、何らかの欠点を解決し又は上記のような環境においてのみ動作する実施形態に限定されない。むしろ、この背景技術は、本開示に記載されるいくつかの実施形態が実施され得る1つの例示的な技術分野を示すためにのみ提供される。
一実施形態の態様によれば、一方法が、1つ以上の訓練コードサーバから訓練コードを取得するステップを含み得る。訓練コードの特徴、例えば、コードスニペット、ソフトウェアドキュメンテーション、及びコードコメントなどが、訓練コードから抽出され、コードデータセットに記憶され得る。訓練コードの抽出された特徴は、ディープニューラルネットワークにより自然言語コードベクトルにマッピングされ得る。自然言語検索クエリを受信することができ、自然言語検索クエリはソースコード提案を要求している。当該方法は、自然言語検索クエリを第1の自然言語検索セクション及び第2の自然言語検索セクションに編成するステップを含んでもよい。自然言語検索クエリは、ディープニューラルネットワークにより自然言語検索ベクトルにマッピングされ得る。当該方法は、訓練コードの抽出された特徴を自然言語コードベクトルにマッピングするのと同じ又は類似の方法で自然言語検索クエリを自然言語検索ベクトルにマッピングするステップを含んでもよく、自然言語検索ベクトルは、自然言語コードベクトルと比較され得る。当該方法は、自然言語検索ベクトルと自然言語コードベクトルとの間のコサイン類似度を使用して、自然言語検索ベクトルと自然言語コードベクトルとの間の関連性を決定するステップを含んでもよい。自然言語検索クエリに応答するソースコードが、自然言語検索ベクトルと自然言語コードベクトルとの間の比較に基づいて提案され得る。
実施形態の目的及び利点は、少なくとも特許請求の範囲において特に指し示された要素、特徴、及び組み合わせにより実現され、達成される。前述の一般的な説明及び以下の詳細な説明の双方が説明的であり、請求される発明を限定するものではないことが理解されるべきである。
添付の図面を通じてさらなる特定性及び詳細と共に例示的な実施形態について記載し、説明する。
提案ソースコードを用いた自然言語検索クエリへの応答に関する一例示的なシステムを表す図である。
提案ソースコードを用いて自然言語検索クエリに応答する一例示的な方法のフローチャートである。
訓練コードを取得し、訓練コードから特徴を抽出する一例示的な方法のフローチャートである。
訓練コードからの抽出された特徴に基づいてコードサマリを予測する一例示的な方法のフローチャートである。
自然言語検索クエリを第1の自然言語検索セクション及び第2の自然言語検索セクションに編成し、自然言語検索セクションの各々に基づいて提案ソースコードを返す一例示的な方法のフローチャートである。
一例示的なコンピューティングシステムを示す。
本開示に記載される実施形態は、検索クエリに応答してユーザにソースコードを効果的に提供することに関し得る。いくつかの状況において、ユーザは、ソースコードを書くことや見つけることに精通しておらず、あるいは熟練していない場合がある。さらに又は代わりに、ユーザは、提案された解決策を実装し又はコードを書くことが困難な場合があり、エラーなしに動作することが知られているソースコードを検索したい場合がある。さらに又は代わりに、ユーザは、ユーザにより書かれたソースコードを改善する方法についてのアイデアを得るためにソースコードを検索したい場合がある。コード検索は、ユーザがユーザの問題に応答するソースコードを見つけることを可能にし得る。いくつかのコード検索システムでは、ユーザは、自然言語検索フレーズを入力することができ、コード検索システムは、周知の情報取り出し方法及びシステムに基づいてソースコードを発見し、取り出すことができる。
コード検索の情報取り出し方法は、コード検索を行うユーザに最も対応し役立つソースコードを発見し又は取り出すものでない可能性がある。ユーザにより生成された自然言語検索フレーズの高レベルの意図と、ソースコードにおいて自然言語の単語及びフレーズが使用される低レベルの実装及びコンテキストとの間に、ミスマッチが存在する可能性がある。プログラミング言語と自然言語は、構文構造、同義語、又は単語定義さえも共有しない可能性があり、高レベルの抽象化においてのみ意味的に関連する可能性がある。結果的に、周知の情報取り出し方法に依存するコード検索の結果は、ユーザ生成の検索クエリに最も関連するソースコードを提示しない可能性がある。
本開示は、とりわけ、自然言語検索クエリに応答するコード検索結果の精度及び関連性を改善することに向けられ得る。例えば、ディープニューラルネットワークが、潜在的なソースコード結果と自然言語検索クエリとの間のベクトル比較を容易にすることができる。特に、以下でさらに詳細に説明するように、ディープニューラルネットワークを含むコード解析システムが、訓練コードを取得するように構成されてもよく、コード解析システムは、上記訓練コードから、訓練コードの様々な特徴を抽出し、抽出された特徴及び訓練コードを1つ以上のコードデータセットに記憶することができる。コード解析システムは、訓練コードの抽出された特徴を自然言語コードベクトルにマッピングすることができる。さらに、自然言語検索クエリは、自然言語検索ベクトルにマッピングすることができ、自然言語コードベクトルと比較することができる。コード解析システムは、次いで、自然言語検索ベクトルと自然言語コードベクトルとの間の比較に基づいて、自然言語検索クエリに関連する提案ソースコードを返すことができる。
本開示の特定の実施形態は、ソフトウェアコード生成及び/又は検索システムの従前の反復を越える改善を提供し得る。例えば、ソフトウェア開発は、コンピューティングシステムがコード検索クエリに対してより対応及び関連するコード検索結果を提供することができるようにコンピュータシステムを構成することにより改善され得る。別の例として、ソフトウェア開発は、コンピュータシステムが同じ検索クエリに応答する2つ以上のコード検索結果を組み合わせることができ、より効果的なソフトウェア統合を結果としてもたらすようにコンピュータシステムを構成することにより改善され得る。例えば、自然言語の検索ベクトル及びコードベクトルの比較は、より役立つ結果を生じるために、より焦点を合わせた比較を容易にし得る。別の例として、計算及びネットワークリソースは、繰り返されるものとして保持されてもよく、役立つ結果を試行し発見するための反復的検索は、最初のインスタンスでより役立つ結果が提供されるとき回避され、あるいは低減され得る。
本開示の実施形態は、添付の図面を参照して説明される。
図1は、本開示の1つ以上の実施形態による、提案ソースコードを用いた自然言語検索クエリへの応答に関する一例示的なシステム100を表す図である。システム100は、コード解析システム110を含むことができ、コード解析システム110は、ディープニューラルネットワーク115をさらに含む。コード解析システム110は、訓練コードサーバ120から訓練コードを取得することができ、コード解析システム110は、自然言語検索クエリ140を受信することができる。コード解析システム110は、複数の自然言語検索クエリ140を受信してもよく、自然言語検索クエリ140は、1以上のユーザ130により送信されてもよい。コード解析システム110は、提案ソースコード150を用いて自然言語検索クエリ140に応答することができる。例えば、コード解析システム110は、提案ソースコード150をユーザ130に返すことにより、自然言語検索クエリ140に応答してもよい。提案ソースコード150は、訓練コードサーバ120から取得された訓練コードを使用して識別することができる。「ユーザ130」が参照されるが、ユーザ130はコード解析システム110と通信及び対話するために電子デバイスを使用していることが理解されるであろう。
コード解析システム110は、ディープニューラルネットワーク115を含むことができ、ディープニューラルネットワーク115は、訓練コードサーバ120から取得される訓練コードを受信することができる。いくつかの実施形態において、ディープニューラルネットワーク115は、訓練コードサーバ120から取得された訓練コードを解析し、訓練コードの特徴を抽出することができる。さらに又は代わりに、ディープニューラルネットワーク115は、訓練コードから抽出された特徴を自然言語コードベクトルにマッピングすることができる。さらに又は代わりに、ディープニューラルネットワーク115は、自然言語検索クエリを自然言語検索ベクトルにマッピングすることができる。さらに又は代わりに、ディープニューラルネットワーク115は、自然言語検索ベクトルを自然言語コードベクトルと比較し、自然言語検索ベクトルと自然言語コードベクトルとの間の比較に基づいて自然言語検索クエリに応答するソースコードを提案することができる。いくつかの実施形態において、ディープニューラルネットワーク115は、多層パーセプトロン(multi-layer perceptron、MLP)ネットワーク、長短期記憶(long short-term memory、LSTM)ネットワーク、又は平均確率的勾配降下重みドロップ長短期記憶(average-stochastic gradient descent weight-dropped long short-term memory、AWD-LSTM)ネットワークのうち少なくとも1つを含んでもよい。ディープニューラルネットワーク115により実行される様々な動作の例は、図2~図6でより詳細に説明され得る。
自然言語検索クエリ140は、実装すべきソースコードを利用するタスクを実行することに関連する任意の適切な検索クエリであってよい。例えば、自然言語検索クエリ140は、フレーズ「線をプロットする」を含んでもよい。この例示的な実施形態において、自然言語検索クエリ140は、ユーザ130が、ユーザが線をプロットすることを可能にするソースコードを検索していることを表し得る。いくつかの実施形態において、自然言語検索クエリ140は、2つ以上の自然言語検索セクション(search sections)を含み得る。例えば、自然言語検索クエリ140は、「私がXの件名を有する電子メールを受信したとき、私の電話にSMSを送信する」というフレーズを含んでもよい。この例示的な実施形態において、自然言語検索クエリ140は、「SMSを送信する」に関する第1の自然言語検索セクションと、「私がXの件名を有する電子メールを受信したとき」に関する第2の自然言語検索セクションとを含み得る。
提案ソースコード150は、自然言語検索クエリ140に応答する任意の適切なソースコードであってよい。コード解析システム110は、自然言語検索クエリ140と訓練コードサーバ120から取得された訓練コードとの間の類似度に基づいて、取得された訓練コードから提案ソースコード150を出力することができる。いくつかの実施形態において、自然言語検索クエリ140が複数の自然言語検索セクションを含む場合、提案ソースコード150は、複数の自然言語検索セクションそれぞれに応答する複数のソースコードを含んでもよい(例えば、第1の及び第2のソースコードが、それぞれの第1及び第2の自然言語クエリに対応し得る)。さらに又は代わりに、提案ソースコード150は、複数のセクションに対応する単一のソースコードを含んでもよい。
本開示の範囲から逸脱することなく、システム100に対して修正、追加、又は省略がなされ得る。例えば、記載される方法における異なる要素の指定は、本明細書に記載される概念の説明を助けることを意図し、限定するものではない。さらに、システム100は、任意の数の他の要素を含んでもよく、あるいは記載されたもの以外のシステム又は文脈内で実施されてもよい。
図2は、本開示に記載される少なくとも1つの実施形態による、提案ソースコードを用いて自然言語検索クエリに応答する一例示的な方法200のフローチャートである。方法200は、任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、コード解析システム110、訓練コードサーバ120、及び/又はユーザ130は、方法200に関連づけられた動作の1つ以上を実行することができる。個別のブロックで示されているが、方法200のブロックの1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは削除されてもよい。
方法200はブロック210で開始でき、ブロック210において、訓練コードが取得され得る。例えば、訓練コードは、1つ以上の訓練コードサーバ(訓練コードサーバ120など)から、コード解析システム(コード解析システム110など)により取得することができる。訓練コードには、オープンソースプロジェクト(例えば、GITHUBプロジェクト、SOURCEFORGEプロジェクト、GITLABプロジェクトなど)、if-this-then-that(IFTTT)レシピ、専有ソフトウェアなどを含む任意の数のソースからのコードを含むことができる。訓練コード内の不必要な情報は、よりパース可能及び検索可能な訓練コードを提供するために除去され得る。訓練コード内の不必要な情報には、無関係な改行、空白、「/」記号、「>」記号などを含んでもよい。取得された訓練コードから不必要な情報を除去することは、訓練コード内のパース(parsing)及び/又は検索を容易にすることができ、これは、前に捕捉されていない特徴の抽出を可能にし得る。前に捕捉されていない特徴には、図4を参照してより詳細に説明されるように、テストケース検証情報又はパースされたソースコード自体を含んでもよい。いくつかの実施形態において、訓練コードは、取得される訓練コードが人気がある(popular)と考えられるものであるようにフィルタリングされてもよい。コードが人気があるか否かを決定する一例が、図3を参照してより詳細に説明され得る。
ブロック220において、訓練コードの特徴が抽出され得る。訓練コードの抽出された特徴は、区別可能な機能を実行するコードスニペットを含んでもよい。例えば、「ユーザがXの件名を有する電子メールを受信したとき、SMSを送信する」というタスクを実行する訓練コードは、SMSを送信するという区別可能な機能を実行するコードのスニペットと、ユーザが電子メールを受信したことを確認するという区別可能な機能を実行するコードのスニペットと、電子メールがXの件名を有することを確認するという区別可能な機能を実行するコードのスニペットを含み得る。これら及び他の実施形態において、訓練コードの抽出された特徴は、訓練コードに関連づけられたドキュメンテーション、ソースコード内のコメント、又は訓練コードが実行環境で実行されるときのテストケースログをさらに含んでもよい。例えば、あるソースコード内のコメントが、このソースコードに関連する特徴として抽出され、記憶されてもよい。別の例として、あるソースコードがクラウドベースのプラットフォーム(例えば、AMAZON(登録商標) WEB SERVICES(AWS)、MICROSOFT(登録商標) AZUREなど)上で成功裏に実行できるかどうかが、このソースコードに関連する特徴として記憶されてもよい(例えば、このソースコードの実行がAWS上で失敗する場合、「AWS上で実行不可能」を特徴として記憶する)。訓練コードの抽出された特徴は、ブロック230において1つ以上のコードデータセットに記憶され得る。
ブロック240において、抽出された特徴の各々が自然言語コードベクトルにマッピングされ得る。いくつかの実施形態において、ディープニューラルネットワーク115などのディープニューラルネットワークは、抽出された特徴の各々を自然言語コードベクトルにマッピングすることができる。抽出された特徴の各々を自然言語コードベクトルにマッピングすることは、訓練コードの抽出された特徴及び自然言語検索クエリを統一ベクトル空間(unified vector space)に埋め込むために、共同埋め込み(joint embedding)又はマルチモーダル埋め込み(multi-modal embedding)を使用することを含んでもよい。例えば、訓練コードの抽出された特徴Xの、統一ベクトル空間Vへの共同埋め込みは、以下の式で表され得る。
ここで、
は、訓練コードの抽出された特徴Xをd次元ベクトル空間Vにマッピングする埋め込み関数である。ブロック240でマッピングされた自然言語コードベクトルは、検索インデックスに記憶されてもよい。自然言語コードベクトルを検索インデックスに記憶することは、より速いベクトル比較のための、自然言語コードベクトルのより効率的な再呼び出しを容易にすることができる。いくつかの実施形態において、ブロック240を完了すると、コード解析システムは、コード解析システムへのクエリを受信及び処理するように構成され、訓練され、準備されてもよい。
ここで、
は、訓練コードの抽出された特徴Xをd次元ベクトル空間Vにマッピングする埋め込み関数である。ブロック240でマッピングされた自然言語コードベクトルは、検索インデックスに記憶されてもよい。自然言語コードベクトルを検索インデックスに記憶することは、より速いベクトル比較のための、自然言語コードベクトルのより効率的な再呼び出しを容易にすることができる。いくつかの実施形態において、ブロック240を完了すると、コード解析システムは、コード解析システムへのクエリを受信及び処理するように構成され、訓練され、準備されてもよい。
ブロック250において、自然言語検索クエリが受信され得る。いくつかの実施形態において、自然言語検索クエリは、例示的なシステム100のユーザ130などのユーザから受信することができる。これら及び他の実施形態において、自然言語検索クエリは、コンピューティングシステムから受信してもよい。いくつかの実施形態において、自然言語検索クエリは、自然言語検索クエリを構成する2つ以上の自然言語検索セクションを含んでもよい。
ブロック260において、自然言語検索クエリが自然言語検索ベクトルにマッピングされ得る。いくつかの実施形態において、ディープニューラルネットワーク115などのディープニューラルネットワークは、自然言語検索クエリを自然言語検索ベクトルにマッピングすることができる。これら及び他の実施形態において、自然言語検索クエリは、提案ソースコードに対する2つ以上の要求を含んでもよい。自然言語検索クエリを自然言語検索ベクトルにマッピングすることは、例えば、クエリから不必要なテキストを除去し、クエリをトークン化することにより、ベクトル化のために自然言語検索クエリを準備することを含んでもよい。自然言語検索クエリをトークン化することは、自然言語検索クエリを個々の単語に分割することを含んでもよい。例えば、「線をプロットする(plot a line)」という自然言語検索クエリは、3つの個々の単語「plot」、「a」、及び「line」にトークン化され得る。自然言語検索クエリを自然言語検索ベクトルにマッピングすることは、自然言語検索クエリを自然言語コードベクトルと同じベクトル空間に埋め込むために、共同埋め込み又はマルチモーダル埋め込みを使用することを含んでもよい。例えば、自然言語検索クエリYの、自然言語コードベクトルXを含む同じ統一ベクトル空間への共同埋め込みは、以下の式で表され得る。
ここで、
は、自然言語検索クエリYを、自然言語コードベクトルVを含む同じベクトル空間にマッピングする埋め込み関数であり、それにより、自然言語検索ベクトルと自然言語コードベクトルは、ベクトル空間の近傍領域(VX,VY)を占有する。
ここで、
は、自然言語検索クエリYを、自然言語コードベクトルVを含む同じベクトル空間にマッピングする埋め込み関数であり、それにより、自然言語検索ベクトルと自然言語コードベクトルは、ベクトル空間の近傍領域(VX,VY)を占有する。
ブロック270において、自然言語検索ベクトルが自然言語コードベクトルと比較され得る。自然言語検索ベクトルと自然言語コードベクトルとの間の比較は、自然言語検索ベクトルと自然言語コードベクトルとの間の類似度合いを決定することができる。例えば、そのような比較は、以下の関係に従って実行され得る。
ここで、J(VX,VY)は、VXとVYとの間の類似度のスコアを提供する類似度尺度であってよい。自然言語検索ベクトルは、ブロック240で検索インデックスに記憶された自然言語コードベクトルと比較されてもよい(例えば、反復的に比較され得る)。いくつかの実施形態において、自然言語検索ベクトルと自然言語コードベクトルとの間の比較は、自然言語検索ベクトルと自然言語コードベクトルの各々との間のコサイン類似度(cosine similarity)に基づいてもよく、それにより、J(VX,VY)は、自然言語検索ベクトルと自然言語コードベクトルとの間のコサイン類似度を決定する埋め込み関数を表す。
ここで、J(VX,VY)は、VXとVYとの間の類似度のスコアを提供する類似度尺度であってよい。自然言語検索ベクトルは、ブロック240で検索インデックスに記憶された自然言語コードベクトルと比較されてもよい(例えば、反復的に比較され得る)。いくつかの実施形態において、自然言語検索ベクトルと自然言語コードベクトルとの間の比較は、自然言語検索ベクトルと自然言語コードベクトルの各々との間のコサイン類似度(cosine similarity)に基づいてもよく、それにより、J(VX,VY)は、自然言語検索ベクトルと自然言語コードベクトルとの間のコサイン類似度を決定する埋め込み関数を表す。
ブロック280において、自然言語検索クエリに応答する提案ソースコードが、ブロック270で実行された自然言語検索ベクトルと自然言語コードベクトルとの間の比較に基づいて返され得る。提案ソースコードは、ブロック230で1つ以上のコードデータセットに記憶された訓練コードの抽出された特徴に関連づけられたソースコードでもよい。これら及び他の実施形態において、提案ソースコードは、ブロック270で自然言語検索ベクトルに最も類似していることが判明し又は閾値スコアを上回る類似度スコアを有することが判明した自然言語コードベクトルに関連づけられたソースコードでもよい。いくつかの実施形態において、ソースコードの複数の提案が、クエリに応答するコードとして提供されてもよい。これら及び他の実施形態において、このような応答は、ソースコードの提案の相対スコアを含んでも又はそうでなくてもよく、それにより、ユーザは、最も高いスコア付けのソースコードを選択することができ、あるいは、異なる応答ソースコードを閲覧し、自身のプロジェクトに適合するものを選択してもよい。
本開示の範囲から逸脱することなく、方法200に対して修正、追加、又は省略がなされ得る。例えば、記載される方法における異なる要素の指定は、本明細書に記載される概念の説明を助けることを意図し、限定するものではない。さらに、方法200は、任意の数の他の要素を含んでもよく、あるいは記載されたもの以外のシステム又は文脈内で実施されてもよい。
図3は、訓練コードを取得し、訓練コードから特徴を抽出する一例示的な方法300のフローチャートである。いくつかの実施形態において、方法300は、方法200でブロック210、220、及び/又は230に記載されるステップのより詳細な説明を提供し得る。いくつかの実施形態において、方法300は、方法200でブロック210、220、及び/又は230に記載されるステップを置き換えることができる。方法300は、任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、コード解析システム110、訓練コードサーバ120、及び/又はユーザ130は、方法300に関連づけられた動作の1つ以上を実行することができる。個別のブロックで示されているが、方法300のブロックの1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは削除されてもよい。
方法300はブロック310で開始でき、ブロック310において、訓練データが発見及び取得される。訓練コードは、様々なソースから発見されてもよい。例えば、ブロック312において、IFTTTコードを記憶することが知られている1つ以上のウェブサイト又はリポジトリ上でIFTTTレシピが発見され得る。別の例として、ブロック314において、GITHUBプロジェクト、SOURCEFORGEプロジェクトなどのオープンソースプロジェクト又はリポジトリが検索され得る。これら及び他の実施形態において、訓練コードは、他の任意のソースから、例えば、STACKOVERFLOW及び他の公に利用可能なソースコードリポジトリから、公に利用可能でない専有ソフトウェアから、又は他の任意のソースから発見されてもよい。ブロック316において、ブロック312及び314で発見されたソースコードが訓練コードとして使用され得る。ブロック316で実行される訓練コード獲得ステップは、方法200のブロック210で実行される訓練コード獲得方法ステップと同じ又は類似のステップでもよい。
ブロック320において、ブロック310で発見及び取得された訓練コードの人気(popularity)が決定され得る。例えば、結果の数量をフィルタリングする一アプローチとして、人気を使用し、訓練コードとして使用されるソースコードプロジェクトの数を低減してもよい。例えば、ブロック310で取得された訓練コードの数量が多すぎ、コード解析システム(コード解析システム110など)又はディープニューラルネットワーク(ディープニューラルネットワーク115など)を訓練するのに性能問題を引き起こす可能性があり、取得された訓練コードをフィルタリングする手順は、有益であり得る。別の例として、ブロック310で取得された訓練コードの品質が一貫しておらず、コード解析システム又はディープニューラルネットワークを訓練するのに精度問題を引き起こす可能性がある。これら及び他の実施形態において、訓練コードの人気は、取得された訓練コードをフィルタリングするためのメトリックとして機能することができる。訓練コードの人気は、訓練コードに関連づけられた様々なメトリックに基づいて決定される人気格付けでもよい。例えば、公に利用可能なGITHUBプロジェクトは、星数、フォーク数、ウォッチリスト数、コミット数、プルリクエスト数などを有し得る。さらに又は代わりに、キーワード(例えば、「機能する」、「素晴らしい」、「満足」など)を有する最小レビュー数又は任意の他のメトリックを使用して、ソースコードの人気のあるソースを決定してもよい。
訓練コードの人気格付けを決定した後、訓練コードは、人気格付けに基づいてソートされてもよい。人気格付けによりソートされた訓練コードの一部が、フィルタリングされた訓練コードとして選択されてもよい。いくつかの実施形態において、ソートされた訓練コードの閾値パーセンテージが、フィルタリングされた訓練コードとして選択されてもよい(例えば、それらの人気格付けの観点でソートされた訓練コードの上位20%が、フィルタリングされた訓練コードとして選択されてもよい)。いくつかの実施形態において、ソートされた訓練コードの閾値絶対数が、フィルタリングされた訓練コードとして選択されてもよい(例えば、それらの人気格付けの観点でソートされた訓練コードの上位100個が、フィルタリングされた訓練コードとして選択されてもよい)。いくつかの実施形態において、人気格付けは、訓練コードをフィルタリングするための人気閾値として選択されてもよい(例えば、10を上回る人気格付けを有する全てのソートされた訓練コードが、フィルタリングされた訓練コードとして選択されてもよい)。これら及び他の実施形態において、閾値パーセンテージ、絶対数、又は人気値は、統計的評価アプローチに基づいて決定されてもよい(例えば、フィルタリングされた訓練コードが各抽出された特徴について少なくとも10個のソースコードを含むように、未知の閾値Xが決定されてもよい)。さらに又は代わりに、様々な閾値が特徴ごとに作用してもよい(例えば、各抽出された特徴に関連づけられた10個の最も人気のあるソースコードが取得されてもよい)。
ブロック330において、フィルタリングされた訓練コードの特徴が抽出され得る。ブロック330における特徴抽出は、方法200のブロック220での特徴抽出に関連して説明したものと同じプロセス又は類似のプロセスにより、ブロック332で訓練コードの特徴を抽出することを含んでもよい。ブロック330における特徴抽出は、訓練コードをテスト及び実行することに基づいて、ブロック334で訓練コードの特徴を抽出することをさらに含んでもよい。ブロック330における特徴抽出は、特定の実行環境で訓練コードをテストすることに基づいて、ブロック336で訓練コードの特徴を抽出することをさらに含んでもよい。いくつかの実施形態において、ブロック334及び/又は336における特徴抽出ステップは省略されてもよい。
ブロック334において、取得された訓練コードの特徴は、取得された訓練コードをテストすることにより抽出することができる。取得された訓練コードをテストすることは、訓練コードのドキュメンテーション又はコメントにおいて提供されるサンプルテストケースに基づいてもよい。取得された訓練コードをテストすることは、取得された訓練コードをパース及び検証することをさらに含んでもよい。取得された訓練コードをパース及び検証することは、取得された訓練コードの構文を解析して、取得された訓練コードが文法的に正しい(例えば、実行されたときに構文エラーを生じない)ことを保証することを含んでもよい。取得された訓練コードをパース及び検証することは、抽出に関して前に捕捉されていない特徴、例えば、構文エラーメッセージなどを提供することができる。これら及び他の実施形態において、パースされた訓練コード自体が、取得された訓練コードの1つ以上の特徴として抽出されてもよい。
ブロック336において、取得された訓練コードの特徴は、取得された訓練コードを特定の実行環境でテストすることにより抽出することができる。取得された訓練コードの実行環境には、特定のオペレーティングシステム、ローカルの内部環境、クラウドベースのプラットフォームなどを含んでもよい。取得された訓練コードをテストできる実行環境は、取得された訓練コードのドキュメンテーションから決定されてもよい。例えば、訓練コードとして取得されたPYTHONのソースコードは、TOX、PYTHON固有のテストコマンドラインツールからのドキュメンテーションを含むことがあり、ソースコードがPYTHONの様々なバージョンに準拠し得ることを示す(例えば、コードがPython3.5及びPython3.6に準拠していることを示す)。取得された訓練コードを特定の実行環境でテストすることは、エラーメッセージ、依存関係問題、例外イベントの存在などの、訓練コードの静的解析では捕捉されないさらなる特徴の抽出を可能にし得る。
ブロック340において、ブロック330で抽出された特徴が1つ以上のコードデータセットに記憶され得る。1つ以上のコードデータセットにおける抽出された特徴の記憶は、方法200のブロック230に記載される抽出された特徴の記憶と同じプロセス又は類似のプロセスで達成することができる。特徴が抽出されたソースコードは、抽出された特徴と共に1つ以上のコードデータセットに記憶することができる。
本開示の範囲から逸脱することなく、方法300に対して修正、追加、又は省略がなされ得る。例えば、記載される方法における異なる要素の指定は、本明細書に記載される概念の説明を助けることを意図し、限定するものではない。さらに、方法300は、任意の数の他の要素を含んでもよく、あるいは記載されたもの以外のシステム又は文脈内で実施されてもよい。
図4は、訓練コードから抽出された特徴に基づいてコードサマリを予測及び生成する一例示的な方法400のフローチャートである。いくつかの実施形態において、方法400は、方法200でブロック220、230、及び/又は240に、又は方法300でブロック330に記載されるステップのより詳細な説明を提供し得る。これら及び他の実施形態において、ブロック410における訓練コードから特徴を抽出することは、方法200のブロック220又は方法300のブロック330において訓練コードから特徴を抽出することと同じプロセス又は類似のプロセスで実行されてもよい。これら及び他の実施形態において、ブロック410における訓練コードから特徴を抽出することは、さらに、方法300のブロック334においてテストケース検証から特徴を抽出すること、又は方法300のブロック336において実行環境で実行されるテストケースから特徴を抽出することと同じプロセス又は類似のプロセスを含んでもよい。方法400は、任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、コード解析システム110、訓練コードサーバ120、及び/又はユーザ130は、方法400に関連づけられた動作の1つ以上を実行することができる。個別のブロックで示されているが、方法400のブロックの1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは削除されてもよい。
方法400はブロック410で開始でき、ブロック410において、訓練コードの特徴が抽出され得る。ブロック410における訓練コード特徴の抽出は、方法200のブロック220において訓練コードから特徴を抽出するのと同じプロセス又は類似のプロセスで実行されてもよい。これら及び他の実施形態において、ブロック410における訓練コードから特徴を抽出することは、さらに、テストケース検証及び特定の実行環境におけるテストケース検証に関連して取得された訓練コードの特徴を抽出することを含んでもよい。これら及び他の実施形態において、テストケース検証及び特定の実行環境におけるテストケース検証は、方法300のブロック334においてテストケース検証から特徴を抽出すること、又は方法300のブロック336において実行環境で実行されたテストケースから特徴を抽出することと同じプロセス又は類似のプロセスを含んでもよい。
ブロック420において、ブロック410で抽出された特徴に基づいてコードサマリが予測され、生成され得る。コードサマリ予測及び生成は、コード解析システム110又はディープニューラルネットワーク115などのコード解析システムにより容易にすることができる。コードサマリは、取得された訓練コードから抽出された特徴の自然言語記述、抽出された特徴に関連づけられたソースコード、又は特徴が抽出されたソースコードを含むことができる。コードサマリは、訓練コードから抽出された特徴、抽出された特徴に関連づけられたソースコード、又は特徴が抽出されたソースコードに基づいて予測され、生成され得る。いくつかの実施形態において、あるソースコードのコードサマリは、このソースコードからの1つ以上のコードスニペットに基づいて予測及び生成されてもよく、1つ以上のコードスニペットは、このソースコードに記載された動作の実行順序を示す。
ブロック430において、予測及び生成されたコードサマリに基づいて自然言語コードベクトルがマッピングされ得る。コードサマリは、サマリが予測及び生成されたソースコードとペアにされて、コード‐サマリペアを形成することができる。コード‐サマリペアは、自然言語コードベクトルとしてベクトル空間にマッピングすることができ、それにより、同じ又は類似の概念を記述するコード‐サマリペアに対応する2つ以上の自然言語コードベクトルは、ベクトル空間内で近隣点(close neighbors)であり得る。これら及び他の実施形態において、異なる又は類似していない概念を記述するコード‐サマリペアに対応する2つ以上の自然言語コードベクトルは、ベクトル空間内で互いからさらに離れ得る。類似度スコアを使用して、2つ以上の自然言語コードベクトルが近隣点である(したがって、2つ以上の自然言語コードベクトルに対応する2つ以上のコード‐サマリペアが同じ又は類似の概念を記述している)かどうかを判定することができる。例えば、2つ以上の自然言語コードベクトル間のコサイン類似度を計算して、2つ以上のコード‐サマリペア間の類似度合いを決定してもよい。コード‐サマリペア及びそれらの対応する自然言語コードベクトルは、方法200のブロック240に関連して前述した検索インデックスなどの検索インデックスに配置されてもよい。検索インデックスにおける自然言語コードベクトルの記憶は、より速いベクトル比較のための、自然言語コードベクトルのより効率的な再呼び出しを容易にし得る。いくつかの実施形態において、ブロック430を完了すると、コード解析システムは、コード解析システムへのクエリを受信及び処理するように構成され、訓練され、準備されてもよい。
コード解析システムは、システム100のディープニューラルネットワーク115などのディープニューラルネットワークを使用することにより、コード解析システムに向けられたクエリを受信及び処理するように構成され、訓練され、準備され得る。ディープニューラルネットワークは、1つ以上のディープラーニングモデルを生成することができ、ディープラーニングモデルは、取得された訓練コード、取得された訓練コードの抽出された特徴、及び取得された訓練コードの生成されたコードサマリなどの入力に基づいて自然言語コードベクトルを出力するように教示され得る。ディープラーニングモデルは、MLPモデル、LSTMモデル、及び/又は類似のモデルを含んでもよい。いくつかの実施形態において、複数の異なるディープラーニングモデルが使用されてもよく、同じ入力に応答したディープラーニングモデルの各々からの出力された自然言語コードベクトルは、連結された自然言語コードベクトルに連結されてもよい。同じ入力に応答した複数の異なるディープラーニングモデルからの出力された自然言語コードベクトルの連結は、任意の出力された自然言語コードベクトルが単独で捕捉し得るよりも、取得された訓練コード、取得された訓練コードの抽出された特徴、及び/又は取得された訓練コードの生成されたコードサマリに関するより概念的な情報を捕捉することができる。例えば、ディープニューラルネットワークは、MLPモデル及びLSTMモデルなどの2つのディープラーニングモデルを含んでもよく、ディープニューラルネットワークは、入力としてあるソースコードを受け取ることができる。MLPモデルは、入力として受け取ったこのソースコードに関連する第1の自然言語コードベクトルを出力することができ、LSTMモデルは、入力として受け取ったこの同じソースコードに関連する第2の自然言語コードベクトルを出力することができる。第1の自然言語コードベクトルは、第2の自然言語コードベクトルと連結されて、入力として受け取った上記ソースコードに関連する連結された自然言語コードベクトルを生成することができる。
1つ以上の連結された自然言語コードベクトルは、コード解析システムに向けられたクエリを受信及び処理するディープニューラルネットワークを構成、訓練、及び/又は準備するために、ディープニューラルネットワークにより解析され、処理され得る。1つ以上の連結された自然言語コードベクトルは、ディープニューラルネットワークの高密度層(dense layer)を通され得る。ディープニューラルネットワークの高密度層は、1つ以上の連結された自然言語コードベクトルを解析して、連結された自然言語コードベクトルと、連結された自然言語コードベクトルが計算されたソースコードとの間の関係を決定することができる。いくつかの実施形態において、1つ以上の連結された自然言語コードベクトルは、ディープニューラルネットワークの2つ以上の高密度層を順次通されてもよい。これら及び他の実施形態において、各高密度層の間にバッチ正規化ステップが生じてもよい。バッチ正規化ステップは、各高密度層への入力を標準化することができる。
本開示の範囲から逸脱することなく、方法400に対して修正、追加、又は省略がなされ得る。例えば、記載される方法における異なる要素の指定は、本明細書に記載される概念の説明を助けることを意図し、限定するものではない。さらに、方法400は、任意の数の他の要素を含んでもよく、あるいは記載されたもの以外のシステム又は文脈内で実施されてもよい。
図5は、自然言語検索クエリを第1の自然言語検索セクション及び第2の自然言語検索セクションに編成し、自然言語検索セクションの各々に応答する提案ソースコードを返す一例示的な方法500のフローチャートである。いくつかの実施形態において、方法500は、方法200でブロック250、260、270、及び/又は280に記載されるステップのより詳細な説明を提供し得る。いくつかの実施形態において、方法500は、方法200でブロック250、260、270、及び/又は280に記載されるステップを置き換えることができる。個別のブロックで示されているが、方法500のブロックの1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは削除されてもよい。
方法500はブロック510で開始でき、ブロック510において、自然言語検索クエリが受信され、2つ以上の自然言語検索セクションに分離される。ブロック512における自然言語検索クエリを受信することは、方法200のブロック250において自然言語検索クエリを受信するのと同じ又は類似のプロセスで達成することができる。システム100に関連して説明されたコード解析システム110又はディープニューラルネットワーク115などのコード解析システムは、ブロック512で受信した自然言語検索クエリが、各タスクを達成するために区別可能なソースコードを利用する2つ以上のタスクを含むかどうかを判定することができる。
自然言語検索クエリが、各タスクを達成するために区別可能なソースコードを利用する2つ以上のタスクを含むと判定すると、自然言語検索クエリは、2つ以上の自然言語検索セクションに分離することができ、例えば、ブロック514において第1の自然言語検索セクションを決定し、ブロック516において第2の自然言語検索セクションを決定する。これら及び他の実施形態において、各自然言語検索セクションは、少なくとも1つのソースコードにより実装されてもよい。所与の自然言語検索セクションが、対応するタスクを達成するために複数のソースコードを利用する場合、この所与の自然言語検索セクションは、2つ以上の自然言語検索セクションにさらに分割されてもよい。
ブロック520において、第1の自然言語検索セクションが第1の自然言語検索ベクトルにマッピングされ得る。第1の自然言語検索セクションを第1の自然言語検索ベクトルにマッピングすることは、方法200のブロック260において自然言語検索ベクトルをマッピングするのと同じ又は類似のプロセスで達成することができる。ブロック522において、第2の自然言語検索が、ブロック520において第1の自然言語検索セクションを第1の自然言語検索セクションにマッピングするのと同じプロセス又は類似のプロセスで、第2の自然言語検索ベクトルにマッピングされ得る。
ブロック530において、第1の自然言語検索ベクトルが自然言語コードベクトルと比較され得る。第1の自然言語検索ベクトルと自然言語コードベクトルとの間の比較は、方法200のブロック270において自然言語検索ベクトルと自然言語コードベクトルとを比較するのと同じプロセス又は類似のプロセスにより達成することができる。ブロック532において、第2の自然言語検索ベクトルが、ブロック530において第1の自然言語検索ベクトルを自然言語コードベクトルと比較するのと同じプロセス又は類似のプロセスで、自然言語コードベクトルと比較され得る。
ブロック540において、第1の自然言語検索ベクトルと自然言語コードベクトルとの間の比較に基づいて、第1の提案ソースコードが返され得る。ブロック542において、第2の自然言語検索ベクトルと自然言語コードベクトルとの間の比較に基づいて、第2の提案ソースコードが返され得る。ブロック540及び542それぞれにおける第1及び第2の自然言語検索ベクトルと自然言語コードベクトルとの間の比較に応答したソースコードの提案は、方法200のブロック280において自然言語検索ベクトルと自然言語コードベクトルとの間の比較に基づいてソースコードを提案するのと同じプロセス又は類似のプロセスにより達成することができる。
これら及び他の実施形態において、2つ以上のソースコードが第1の自然言語検索ベクトルと自然言語コードベクトルとの間の比較に応答する場合、ブロック540の第1のソースコードとして2つ以上の提案ソースコードが返されてもよい。さらに又は代わりに、2つ以上のソースコードが第2の自然言語検索ベクトルと自然言語コードベクトルとの間の比較に応答する場合、ブロック542の第2のソースコードとして2つ以上の提案ソースコードが返されてもよい。これら及び他の実施形態において、第1の提案ソースコードは、第1の自然言語検索セクションに応答するソースコードとして提示されてもよく、第2の提案ソースコードは、第2の自然言語検索セクションに応答するソースコードとして提示されてもよい。さらに又は代わりに、第1の提案ソースコード及び第2の提案ソースコードは、自然言語検索クエリに応答するソースコードとして一緒に提示されてもよい。
本開示の範囲から逸脱することなく、方法500に対して修正、追加、又は省略がなされ得る。例えば、記載される方法における異なる要素の指定は、本明細書に記載される概念の説明を助けることを意図し、限定するものではない。さらに、方法500は、任意の数の他の要素を含んでもよく、あるいは記載されたもの以外のシステム又は文脈内で実施されてもよい。
図6は、本開示に記載される少なくとも1つの実施形態による、一例示的なコンピューティングシステム600を示す。コンピューティングシステム600は、プロセッサ610、メモリ620、データ記憶装置630、及び/又は通信ユニット640を含んでもよく、これらは全て通信上結合され得る。コード解析システム110、訓練コードサーバ120、及び/又は自然言語検索クエリ140を含む図1のシステム100のいずれか又は全てが、コンピューティングシステム600と矛盾しないコンピューティングシステムとして実装されてもよい。
一般に、プロセッサ610は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む、任意の適切な専用若しくは汎用コンピュータ、コンピューティングエンティティ、又は処理デバイスを含んでもよく、任意の適用可能なコンピュータ読取可能記憶媒体に記憶された命令を実行するように構成されてもよい。例えば、プロセッサ610は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又はプログラム命令を解釈及び/又は実行するよう及び/又はデータを処理するように構成された任意の他のデジタル若しくはアナログ回路を含んでもよい。
図6において単一のプロセッサとして示されているが、プロセッサ610は、本開示に記載の任意の数の動作を個々又は集合的に実行するように構成された、任意の数のネットワーク又は物理位置にわたり分散された任意の数のプロセッサを含んでもよい。いくつかの実施形態において、プロセッサ610は、メモリ620、データ記憶装置630、又はメモリ620及びデータ記憶装置630に記憶されたプログラム命令を解釈及び/又は実行し、かつ/あるいはデータを処理してもよい。いくつかの実施形態において、プロセッサ610は、データ記憶装置630からプログラム命令を取り出し、プログラム命令をメモリ620にロードしてもよい。
プログラム命令がメモリ620にロードされた後、プロセッサ610は、プログラム命令、例えば、図2、図3、図4、及び図5それぞれの方法200、300、400、及び/又は500のうち任意のものを実行する命令などを実行することができる。例えば、プロセッサ610は、訓練コードを取得すること、訓練コードから特徴を抽出すること、及び/又は抽出された特徴を自然言語コードベクトルにマッピングすることに関する命令を取得してもよい。
メモリ620及びデータ記憶装置630は、記憶されたコンピュータ実行可能命令又はデータ構造を搬送し又は有するコンピュータ読取可能記憶媒体又は1つ以上のコンピュータ読取可能記憶媒体を含むことができる。そのようなコンピュータ読取可能記憶媒体は、プロセッサ610などの汎用又は専用コンピュータによりアクセスされ得る任意の利用可能な媒体でもよい。例えば、メモリ620及び/又はデータ記憶装置630は、取得された訓練コード(図2のブロック210で取得された訓練コードなど)を記憶してもよい。いくつかの実施形態において、コンピューティングシステム600は、メモリ620及びデータ記憶装置630のいずれかを含んでもよく、あるいは含まなくてもよい。
限定でなく例として、そのようなコンピュータ読取可能記憶媒体は、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、電気的消去可能プログラマブル読取専用メモリ(EEPROM)、コンパクトディスク読取専用メモリ(CD‐ROM)若しくは他の光ディスク記憶装置、磁気ディスク記憶装置若しくは他の磁気記憶デバイス、フラッシュメモリデバイス(例えば、ソリッドステートメモリデバイス)、又はコンピュータ実行可能命令又はデータ構造の形式で所望のプログラムコードを搬送又は記憶するために使用でき、かつ汎用又は専用コンピュータによりアクセスできる任意の他の記憶媒体を含む、非一時的なコンピュータ読取可能記憶媒体を含んでもよい。上記の組み合わせもまた、コンピュータ読取可能記憶媒体の範囲内に含まれてもよい。コンピュータ実行可能命令は、例えば、プロセッサ610に特定の動作又は動作のグループを実行させるように構成された命令及びデータを含んでもよい。
通信ユニット640は、ネットワークを介して情報を送信又は受信するように構成された任意のコンポーネント、デバイス、システム、又はこれらの組み合わせを含んでもよい。いくつかの実施形態において、通信ユニット640は、他の場所、同じ場所における他のデバイス、又はさらには同じシステム内の他のコンポーネントと通信してもよい。例えば、通信ユニット640は、モデム、ネットワークカード(無線又は有線)、光通信装置、赤外線通信装置、無線通信装置(アンテナなど)、及び/又はチップセット(Bluetooth(登録商標)装置、802.6装置(メトロポリタンエリアネットワーク(MAN)など)、WiFi装置、WiMax(登録商標)装置、セルラー通信設備等)などを含んでもよい。通信ユニット640は、ネットワーク及び/又は本開示に記載される任意の他のデバイス又はシステムとの間でデータが交換されることを可能にし得る。例えば、通信ユニット640は、システム600が、コンピューティングデバイス及び/又は他のネットワークなどの他のシステムと通信することを可能にし得る。
当業者は本開示を検討した後、本開示の範囲から逸脱することなくシステム600に対して修正、追加、又は省略がなされ得ることを認識し得る。例えば、システム600は、明示的に例示及び記載されたものより多くの又は少ないコンポーネントを含んでもよい。
前述の開示は、開示された正確な形式又は特定の分野の使用に本開示を限定することは意図されない。したがって、本明細書に明示的に記載されているか又は暗に示されているかにかかわらず、本開示に対する様々な代替実施形態及び/又は修正が本開示に照らして可能なことが企図される。このように本開示の実施形態を説明したが、本開示の範囲から逸脱することなく形式及び詳細において変更がなされ得ることが認識され得る。したがって、本開示は、特許請求の範囲によってのみ限定される。
いくつかの実施形態において、本明細書に記載される異なるコンポーネント、モジュール、エンジン、及びサービスが、コンピューティングシステム上で実行するオブジェクト又はプロセスとして(例えば、別個のスレッドとして)実現されてもよい。本明細書に記載されるシステム及びプロセスのいくつかは、一般に、(汎用ハードウェアに記憶され、及び/又は汎用ハードウェアにより実行される)ソフトウェアで実現されるものとして記載されるが、特定のハードウェア実装、又はソフトウェアと特定のハードウェア実装との組み合わせもまた可能であり、企図される。
本開示において、特に別記の特許請求の範囲(例えば、別記の特許請求の範囲の本文)において用いられる用語は、一般に「開放的」な用語として意図されている(例えば、用語「含んでいる」は、「含んでいるがこれに限定されない」と解釈されるべきである)。
さらに、特定数の導入された請求項記載が意図されている場合、そのような意図は請求項に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、以下の別記の特許請求の範囲は、請求項記載を導入するために、導入フレーズ「少なくとも1つの」及び「1つ以上の」の使用を含むことがある。しかしながら、そのようなフレーズの使用は、不定冠詞「一の」(“a”又は“an”)による請求項記載の導入が、同じ請求項が導入フレーズ「1つ以上の」又は「少なくとも1つの」と「一の」などの不定冠詞とを含むときでも、そのような導入された請求項記載を含む任意の特定の請求項を1つのそのような記載のみ含む実施形態に限定することを暗に示すように見なされるべきではない(例えば、「一の」(“a”及び/又は“an”)は「少なくとも1つの」又は「1つ以上の」を意味するよう解釈されるべきである)。請求項記載を導入するために用いられる定冠詞の使用についても同様である。
さらに、特定数の導入された請求項記載が明確に記載されている場合であっても、当業者は、そのような記載は少なくとも記載された数を意味するよう解釈されるべきであることを認識するであろう(例えば、他の修飾語を伴わない「2つの記載」というただそれだけの記載は、少なくとも2つの記載、又は2つ以上の記載を意味する)。さらに、「A、B、及びC等のうち少なくとも1つ」又は「A、B、及びC等のうち1つ以上」と類似の規定が用いられている例において、一般に、そのような構造は、A単独、B単独、C単独、A及びB共に、A及びC共に、B及びC共に、又はA、B、及びC共に等を含むことが意図される。
さらに、明細書においてか、特許請求の範囲においてか、又は図面においてかにかかわらず、2つ以上の代替的な用語に先行するいかなる分離的なワード又はフレーズも、用語のうち1つ、用語のうちいずれか、又は用語の双方を含む可能性を考慮するよう理解されるべきである。例えば、フレーズ「A又はB」は、「A」又は「B」又は「A及びB」の可能性を含むよう理解されるべきである。
本開示に記載される全ての例及び条件付き言語は、本開示及び発明者が当該技術分野を促進するために寄与した概念を理解する際に読者を助けるための教育的目的が意図され、このように具体的に記載された例及び条件に限定されないものとみなされるべきである。本開示の実施形態が詳細に説明されたが、本開示の主旨及び範囲から逸脱することなく様々な変更、置換、及び改変をこれに行える。
上記の実施形態につき以下の付記を残しておく。
(付記1)
訓練コードを取得するステップと、
前記訓練コードから特徴を抽出するステップと、
前記抽出された特徴をコードデータセットに記憶するステップと、
ディープニューラルネットワークにより、前記訓練コードからの前記抽出された特徴を自然言語コードベクトルにマッピングするステップと、
ソースコード提案のための自然言語検索クエリを受信するステップと、
前記ディープニューラルネットワークにより、前記自然言語検索クエリを自然言語検索ベクトルにマッピングするステップと、
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較するステップと、
前記自然言語検索ベクトルを自然言語コードベクトルと比較することに基づいてソースコードを用いて前記自然言語検索クエリに応答するステップと、
を含む方法。
(付記2)
テストケース特徴を生成するステップと、前記テストケース特徴を前記コードデータセットに記憶するステップと、をさらに含み、前記テストケース特徴を生成することは、
前記取得された訓練コードをパースすることと、
前記パースされた訓練コードに基づいて前記パースされた訓練コードのためのテスト実行環境を決定することと、
前記テスト実行環境に基づいて前記パースされた訓練コードの実行を検証することと、
前記パースされた訓練コードのテストケース特徴を生成することであり、前記テストケース特徴は、前記テスト実行環境で前記パースされた訓練コードが実行可能かどうかを示す、ことと、
を含む、付記1に記載の方法。
(付記3)
前記訓練コードから特徴を抽出することは、前記訓練コードからコードスニペット、ソフトウェアドキュメンテーション、コードコメント、又はテストケースログのうち少なくとも1つを抽出することを含む、付記1に記載の方法。
(付記4)
前記ディープニューラルネットワークは、多層パーセプトロン(MLP)ネットワーク、長短期記憶(LSTM)ネットワーク、及び平均確率的勾配降下重みドロップ長短期記憶(AWD LSTM)ネットワークのうち少なくとも1つを含む、付記1に記載の方法。
(付記5)
前記ディープニューラルネットワークにより前記抽出された特徴のためのコードサマリを生成するステップであり、前記コードサマリは、前記抽出された特徴の自然言語記述を含む、ステップ
をさらに含み、
前記抽出された特徴を前記自然言語コードベクトルにマッピングすることは、前記生成されたコードサマリに基づく、付記1に記載の方法。
(付記6)
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較することは、前記自然言語検索ベクトルと前記自然言語コードベクトルとの間のコサイン類似度に基づく、付記1に記載の方法。
(付記7)
前記自然言語検索クエリを前記自然言語検索ベクトルにマッピングすることは、
前記自然言語検索クエリを第1の自然言語検索セクション及び第2の自然言語検索セクションに編成することと、
前記第1の自然言語検索セクションを第1の自然言語検索ベクトルにマッピングすることと、
前記第2の自然言語検索セクションを第2の自然言語検索ベクトルにマッピングすることと、を含み、
前記自然言語検索ベクトルと前記自然言語コードベクトルとを比較することは、
前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、を含み、
前記ソースコードは、さらに、前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと、及び前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することに基づく、
付記1に記載の方法。
(付記8)
実行されることに応答してシステムに動作を実行させる命令を記憶するように構成された1つ以上の非一時的コンピュータ読取可能記憶媒体であって、前記動作は、
訓練コードを取得することと、
前記訓練コードから特徴を抽出することと、
前記抽出された特徴をコードデータセットに記憶することと、
ディープニューラルネットワークにより、前記訓練コードからの前記抽出された特徴を自然言語コードベクトルにマッピングすることと、
ソースコード提案のための自然言語検索クエリを受信することと、
前記ディープニューラルネットワークにより、前記自然言語検索クエリを自然言語検索ベクトルにマッピングすることと、
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記自然言語検索ベクトルを自然言語コードベクトルと比較することに基づいてソースコードを用いて前記自然言語検索クエリに応答することと、
を含む、1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記9)
テストケース特徴を生成することと、前記テストケース特徴を前記コードデータセットに記憶することと、をさらに含み、前記テストケース特徴を生成することは、
前記取得された訓練コードをパースすることと、
前記パースされた訓練コードに基づいて前記パースされた訓練コードのためのテスト実行環境を決定することと、
前記テスト実行環境に基づいて前記パースされた訓練コードの実行を検証することと、
前記パースされた訓練コードのテストケース特徴を生成することであり、前記テストケース特徴は、前記テスト実行環境で前記パースされた訓練コードが実行可能かどうかを示す、ことと、
を含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記10)
前記訓練コードから特徴を抽出することは、前記訓練コードからコードスニペット、ソフトウェアドキュメンテーション、コードコメント、及びテストケースログのうち少なくとも1つを抽出することを含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記11)
前記ディープニューラルネットワークは、多層パーセプトロン(MLP)ネットワーク、長短期記憶(LSTM)ネットワーク、及び平均確率的勾配降下重みドロップ長短期記憶(AWD LSTM)ネットワークのうち少なくとも1つを含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記12)
前記ディープニューラルネットワークにより前記抽出された特徴のためのコードサマリを生成することであり、前記コードサマリは、前記抽出された特徴の自然言語記述を含む、こと
をさらに含み、
前記抽出された特徴を前記自然言語コードベクトルにマッピングすることは、前記生成されたコードサマリに基づく、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記13)
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較することは、前記自然言語検索ベクトルと前記自然言語コードベクトルとの間のコサイン類似度に基づく、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記14)
前記自然言語検索クエリを前記自然言語検索ベクトルにマッピングすることは、
前記自然言語検索クエリを第1の自然言語検索セクション及び第2の自然言語検索セクションに編成することと、
前記第1の自然言語検索セクションを第1の自然言語検索ベクトルにマッピングすることと、
前記第2の自然言語検索セクションを第2の自然言語検索ベクトルにマッピングすることと、を含み、
前記自然言語検索ベクトルと前記自然言語コードベクトルとを比較することは、
前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、を含み、
前記ソースコードは、さらに、前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと、及び前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することに基づく、
付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記15)
システムであって、
1つ以上のプロセッサと、
実行されることに応答して当該システムに動作を実行させる命令を記憶するように構成された1つ以上の非一時的コンピュータ読取可能記憶媒体と、を含み、前記動作は、
訓練コードを取得することと、
前記訓練コードにおける特徴を抽出することと、
前記抽出された特徴をコードデータセットに記憶することと、
ディープニューラルネットワークにより、前記訓練コードにおける前記抽出された特徴を自然言語コードベクトルにマッピングすることと、
ソースコード提案のための自然言語検索クエリを受信することと、
前記ディープニューラルネットワークにより、前記自然言語検索クエリを自然言語検索ベクトルにマッピングすることと、
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記自然言語検索ベクトルを自然言語コードベクトルと比較することに基づいてソースコードを用いて前記自然言語検索クエリに応答することと、
を含む、システム。
(付記16)
テストケース特徴を生成することと、前記テストケース特徴を前記コードデータセットに記憶することと、をさらに含み、前記テストケース特徴を生成することは、
前記取得された訓練コードをパースすることと、
前記パースされた訓練コードに基づいて前記パースされた訓練コードのためのテスト実行環境を決定することと、
前記テスト実行環境に基づいて前記パースされた訓練コードの実行を検証することと、
前記パースされた訓練コードのテストケース特徴を生成することであり、前記テストケース特徴は、前記テスト実行環境で前記パースされた訓練コードが実行可能かどうかを示す、ことと、
を含む、付記15に記載のシステム。
(付記17)
前記訓練コードにおける特徴を抽出することは、前記訓練コードからコードスニペット、ソフトウェアドキュメンテーション、コードコメント、及びテストケースログのうち少なくとも1つを抽出することを含む、付記15に記載のシステム。
(付記18)
前記ディープニューラルネットワークは、多層パーセプトロン(MLP)ネットワーク、長短期記憶(LSTM)ネットワーク、及び平均確率的勾配降下重みドロップ長短期記憶(AWD LSTM)ネットワークのうち少なくとも1つを含む、付記15に記載のシステム。
(付記19)
前記ディープニューラルネットワークにより前記抽出された特徴のためのコードサマリを生成することであり、前記コードサマリは、前記抽出された特徴の自然言語記述を含む、こと
をさらに含み、
前記抽出された特徴を前記自然言語コードベクトルにマッピングすることは、前記生成されたコードサマリに基づく、付記18に記載のシステム。
(付記20)
前記自然言語検索クエリを前記自然言語検索ベクトルにマッピングすることは、
前記自然言語検索クエリを第1の自然言語検索セクション及び第2の自然言語検索セクションに編成することと、
前記第1の自然言語検索セクションを第1の自然言語検索ベクトルにマッピングすることと、
前記第2の自然言語検索セクションを第2の自然言語検索ベクトルにマッピングすることと、を含み、
前記自然言語検索ベクトルと前記自然言語コードベクトルとを比較することは、
前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、を含み、
前記ソースコードは、さらに、前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと、及び前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することに基づく、
付記15に記載のシステム。
(付記1)
訓練コードを取得するステップと、
前記訓練コードから特徴を抽出するステップと、
前記抽出された特徴をコードデータセットに記憶するステップと、
ディープニューラルネットワークにより、前記訓練コードからの前記抽出された特徴を自然言語コードベクトルにマッピングするステップと、
ソースコード提案のための自然言語検索クエリを受信するステップと、
前記ディープニューラルネットワークにより、前記自然言語検索クエリを自然言語検索ベクトルにマッピングするステップと、
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較するステップと、
前記自然言語検索ベクトルを自然言語コードベクトルと比較することに基づいてソースコードを用いて前記自然言語検索クエリに応答するステップと、
を含む方法。
(付記2)
テストケース特徴を生成するステップと、前記テストケース特徴を前記コードデータセットに記憶するステップと、をさらに含み、前記テストケース特徴を生成することは、
前記取得された訓練コードをパースすることと、
前記パースされた訓練コードに基づいて前記パースされた訓練コードのためのテスト実行環境を決定することと、
前記テスト実行環境に基づいて前記パースされた訓練コードの実行を検証することと、
前記パースされた訓練コードのテストケース特徴を生成することであり、前記テストケース特徴は、前記テスト実行環境で前記パースされた訓練コードが実行可能かどうかを示す、ことと、
を含む、付記1に記載の方法。
(付記3)
前記訓練コードから特徴を抽出することは、前記訓練コードからコードスニペット、ソフトウェアドキュメンテーション、コードコメント、又はテストケースログのうち少なくとも1つを抽出することを含む、付記1に記載の方法。
(付記4)
前記ディープニューラルネットワークは、多層パーセプトロン(MLP)ネットワーク、長短期記憶(LSTM)ネットワーク、及び平均確率的勾配降下重みドロップ長短期記憶(AWD LSTM)ネットワークのうち少なくとも1つを含む、付記1に記載の方法。
(付記5)
前記ディープニューラルネットワークにより前記抽出された特徴のためのコードサマリを生成するステップであり、前記コードサマリは、前記抽出された特徴の自然言語記述を含む、ステップ
をさらに含み、
前記抽出された特徴を前記自然言語コードベクトルにマッピングすることは、前記生成されたコードサマリに基づく、付記1に記載の方法。
(付記6)
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較することは、前記自然言語検索ベクトルと前記自然言語コードベクトルとの間のコサイン類似度に基づく、付記1に記載の方法。
(付記7)
前記自然言語検索クエリを前記自然言語検索ベクトルにマッピングすることは、
前記自然言語検索クエリを第1の自然言語検索セクション及び第2の自然言語検索セクションに編成することと、
前記第1の自然言語検索セクションを第1の自然言語検索ベクトルにマッピングすることと、
前記第2の自然言語検索セクションを第2の自然言語検索ベクトルにマッピングすることと、を含み、
前記自然言語検索ベクトルと前記自然言語コードベクトルとを比較することは、
前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、を含み、
前記ソースコードは、さらに、前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと、及び前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することに基づく、
付記1に記載の方法。
(付記8)
実行されることに応答してシステムに動作を実行させる命令を記憶するように構成された1つ以上の非一時的コンピュータ読取可能記憶媒体であって、前記動作は、
訓練コードを取得することと、
前記訓練コードから特徴を抽出することと、
前記抽出された特徴をコードデータセットに記憶することと、
ディープニューラルネットワークにより、前記訓練コードからの前記抽出された特徴を自然言語コードベクトルにマッピングすることと、
ソースコード提案のための自然言語検索クエリを受信することと、
前記ディープニューラルネットワークにより、前記自然言語検索クエリを自然言語検索ベクトルにマッピングすることと、
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記自然言語検索ベクトルを自然言語コードベクトルと比較することに基づいてソースコードを用いて前記自然言語検索クエリに応答することと、
を含む、1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記9)
テストケース特徴を生成することと、前記テストケース特徴を前記コードデータセットに記憶することと、をさらに含み、前記テストケース特徴を生成することは、
前記取得された訓練コードをパースすることと、
前記パースされた訓練コードに基づいて前記パースされた訓練コードのためのテスト実行環境を決定することと、
前記テスト実行環境に基づいて前記パースされた訓練コードの実行を検証することと、
前記パースされた訓練コードのテストケース特徴を生成することであり、前記テストケース特徴は、前記テスト実行環境で前記パースされた訓練コードが実行可能かどうかを示す、ことと、
を含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記10)
前記訓練コードから特徴を抽出することは、前記訓練コードからコードスニペット、ソフトウェアドキュメンテーション、コードコメント、及びテストケースログのうち少なくとも1つを抽出することを含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記11)
前記ディープニューラルネットワークは、多層パーセプトロン(MLP)ネットワーク、長短期記憶(LSTM)ネットワーク、及び平均確率的勾配降下重みドロップ長短期記憶(AWD LSTM)ネットワークのうち少なくとも1つを含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記12)
前記ディープニューラルネットワークにより前記抽出された特徴のためのコードサマリを生成することであり、前記コードサマリは、前記抽出された特徴の自然言語記述を含む、こと
をさらに含み、
前記抽出された特徴を前記自然言語コードベクトルにマッピングすることは、前記生成されたコードサマリに基づく、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記13)
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較することは、前記自然言語検索ベクトルと前記自然言語コードベクトルとの間のコサイン類似度に基づく、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記14)
前記自然言語検索クエリを前記自然言語検索ベクトルにマッピングすることは、
前記自然言語検索クエリを第1の自然言語検索セクション及び第2の自然言語検索セクションに編成することと、
前記第1の自然言語検索セクションを第1の自然言語検索ベクトルにマッピングすることと、
前記第2の自然言語検索セクションを第2の自然言語検索ベクトルにマッピングすることと、を含み、
前記自然言語検索ベクトルと前記自然言語コードベクトルとを比較することは、
前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、を含み、
前記ソースコードは、さらに、前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと、及び前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することに基づく、
付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記15)
システムであって、
1つ以上のプロセッサと、
実行されることに応答して当該システムに動作を実行させる命令を記憶するように構成された1つ以上の非一時的コンピュータ読取可能記憶媒体と、を含み、前記動作は、
訓練コードを取得することと、
前記訓練コードにおける特徴を抽出することと、
前記抽出された特徴をコードデータセットに記憶することと、
ディープニューラルネットワークにより、前記訓練コードにおける前記抽出された特徴を自然言語コードベクトルにマッピングすることと、
ソースコード提案のための自然言語検索クエリを受信することと、
前記ディープニューラルネットワークにより、前記自然言語検索クエリを自然言語検索ベクトルにマッピングすることと、
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記自然言語検索ベクトルを自然言語コードベクトルと比較することに基づいてソースコードを用いて前記自然言語検索クエリに応答することと、
を含む、システム。
(付記16)
テストケース特徴を生成することと、前記テストケース特徴を前記コードデータセットに記憶することと、をさらに含み、前記テストケース特徴を生成することは、
前記取得された訓練コードをパースすることと、
前記パースされた訓練コードに基づいて前記パースされた訓練コードのためのテスト実行環境を決定することと、
前記テスト実行環境に基づいて前記パースされた訓練コードの実行を検証することと、
前記パースされた訓練コードのテストケース特徴を生成することであり、前記テストケース特徴は、前記テスト実行環境で前記パースされた訓練コードが実行可能かどうかを示す、ことと、
を含む、付記15に記載のシステム。
(付記17)
前記訓練コードにおける特徴を抽出することは、前記訓練コードからコードスニペット、ソフトウェアドキュメンテーション、コードコメント、及びテストケースログのうち少なくとも1つを抽出することを含む、付記15に記載のシステム。
(付記18)
前記ディープニューラルネットワークは、多層パーセプトロン(MLP)ネットワーク、長短期記憶(LSTM)ネットワーク、及び平均確率的勾配降下重みドロップ長短期記憶(AWD LSTM)ネットワークのうち少なくとも1つを含む、付記15に記載のシステム。
(付記19)
前記ディープニューラルネットワークにより前記抽出された特徴のためのコードサマリを生成することであり、前記コードサマリは、前記抽出された特徴の自然言語記述を含む、こと
をさらに含み、
前記抽出された特徴を前記自然言語コードベクトルにマッピングすることは、前記生成されたコードサマリに基づく、付記18に記載のシステム。
(付記20)
前記自然言語検索クエリを前記自然言語検索ベクトルにマッピングすることは、
前記自然言語検索クエリを第1の自然言語検索セクション及び第2の自然言語検索セクションに編成することと、
前記第1の自然言語検索セクションを第1の自然言語検索ベクトルにマッピングすることと、
前記第2の自然言語検索セクションを第2の自然言語検索ベクトルにマッピングすることと、を含み、
前記自然言語検索ベクトルと前記自然言語コードベクトルとを比較することは、
前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、を含み、
前記ソースコードは、さらに、前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと、及び前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することに基づく、
付記15に記載のシステム。
Claims (20)
- 訓練コードを取得するステップと、
前記訓練コードから特徴を抽出するステップと、
前記抽出された特徴をコードデータセットに記憶するステップと、
ディープニューラルネットワークにより、前記訓練コードからの前記抽出された特徴を自然言語コードベクトルにマッピングするステップと、
ソースコード提案のための自然言語検索クエリを受信するステップと、
前記ディープニューラルネットワークにより、前記自然言語検索クエリを自然言語検索ベクトルにマッピングするステップと、
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較するステップと、
前記自然言語検索ベクトルを自然言語コードベクトルと比較することに基づいてソースコードを用いて前記自然言語検索クエリに応答するステップと、
を含む方法。 - テストケース特徴を生成するステップと、前記テストケース特徴を前記コードデータセットに記憶するステップと、をさらに含み、前記テストケース特徴を生成することは、
前記取得された訓練コードをパースすることと、
前記パースされた訓練コードに基づいて前記パースされた訓練コードのためのテスト実行環境を決定することと、
前記テスト実行環境に基づいて前記パースされた訓練コードの実行を検証することと、
前記パースされた訓練コードのテストケース特徴を生成することであり、前記テストケース特徴は、前記テスト実行環境で前記パースされた訓練コードが実行可能かどうかを示す、ことと、
を含む、請求項1に記載の方法。 - 前記訓練コードから特徴を抽出することは、前記訓練コードからコードスニペット、ソフトウェアドキュメンテーション、コードコメント、又はテストケースログのうち少なくとも1つを抽出することを含む、請求項1に記載の方法。
- 前記ディープニューラルネットワークは、多層パーセプトロン(MLP)ネットワーク、長短期記憶(LSTM)ネットワーク、及び平均確率的勾配降下重みドロップ長短期記憶(AWD LSTM)ネットワークのうち少なくとも1つを含む、請求項1に記載の方法。
- 前記ディープニューラルネットワークにより前記抽出された特徴のためのコードサマリを生成するステップであり、前記コードサマリは、前記抽出された特徴の自然言語記述を含む、ステップ
をさらに含み、
前記抽出された特徴を前記自然言語コードベクトルにマッピングすることは、前記生成されたコードサマリに基づく、請求項1に記載の方法。 - 前記自然言語検索ベクトルを前記自然言語コードベクトルと比較することは、前記自然言語検索ベクトルと前記自然言語コードベクトルとの間のコサイン類似度に基づく、請求項1に記載の方法。
- 前記自然言語検索クエリを前記自然言語検索ベクトルにマッピングすることは、
前記自然言語検索クエリを第1の自然言語検索セクション及び第2の自然言語検索セクションに編成することと、
前記第1の自然言語検索セクションを第1の自然言語検索ベクトルにマッピングすることと、
前記第2の自然言語検索セクションを第2の自然言語検索ベクトルにマッピングすることと、を含み、
前記自然言語検索ベクトルと前記自然言語コードベクトルとを比較することは、
前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、を含み、
前記ソースコードは、さらに、前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと、及び前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することに基づく、
請求項1に記載の方法。 - システムに動作を実行させるコンピュータプログラムであって、前記動作は、
訓練コードを取得することと、
前記訓練コードから特徴を抽出することと、
前記抽出された特徴をコードデータセットに記憶することと、
ディープニューラルネットワークにより、前記訓練コードからの前記抽出された特徴を自然言語コードベクトルにマッピングすることと、
ソースコード提案のための自然言語検索クエリを受信することと、
前記ディープニューラルネットワークにより、前記自然言語検索クエリを自然言語検索ベクトルにマッピングすることと、
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記自然言語検索ベクトルを自然言語コードベクトルと比較することに基づいてソースコードを用いて前記自然言語検索クエリに応答することと、
を含む、コンピュータプログラム。 - テストケース特徴を生成することと、前記テストケース特徴を前記コードデータセットに記憶することと、をさらに含み、前記テストケース特徴を生成することは、
前記取得された訓練コードをパースすることと、
前記パースされた訓練コードに基づいて前記パースされた訓練コードのためのテスト実行環境を決定することと、
前記テスト実行環境に基づいて前記パースされた訓練コードの実行を検証することと、
前記パースされた訓練コードのテストケース特徴を生成することであり、前記テストケース特徴は、前記テスト実行環境で前記パースされた訓練コードが実行可能かどうかを示す、ことと、
を含む、請求項8に記載のコンピュータプログラム。 - 前記訓練コードから特徴を抽出することは、前記訓練コードからコードスニペット、ソフトウェアドキュメンテーション、コードコメント、及びテストケースログのうち少なくとも1つを抽出することを含む、請求項8に記載のコンピュータプログラム。
- 前記ディープニューラルネットワークは、多層パーセプトロン(MLP)ネットワーク、長短期記憶(LSTM)ネットワーク、及び平均確率的勾配降下重みドロップ長短期記憶(AWD LSTM)ネットワークのうち少なくとも1つを含む、請求項8に記載のコンピュータプログラム。
- 前記ディープニューラルネットワークにより前記抽出された特徴のためのコードサマリを生成することであり、前記コードサマリは、前記抽出された特徴の自然言語記述を含む、こと
をさらに含み、
前記抽出された特徴を前記自然言語コードベクトルにマッピングすることは、前記生成されたコードサマリに基づく、請求項8に記載のコンピュータプログラム。 - 前記自然言語検索ベクトルを前記自然言語コードベクトルと比較することは、前記自然言語検索ベクトルと前記自然言語コードベクトルとの間のコサイン類似度に基づく、請求項8に記載のコンピュータプログラム。
- 前記自然言語検索クエリを前記自然言語検索ベクトルにマッピングすることは、
前記自然言語検索クエリを第1の自然言語検索セクション及び第2の自然言語検索セクションに編成することと、
前記第1の自然言語検索セクションを第1の自然言語検索ベクトルにマッピングすることと、
前記第2の自然言語検索セクションを第2の自然言語検索ベクトルにマッピングすることと、を含み、
前記自然言語検索ベクトルと前記自然言語コードベクトルとを比較することは、
前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、を含み、
前記ソースコードは、さらに、前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと、及び前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することに基づく、
請求項8に記載のコンピュータプログラム。 - システムであって、
1つ以上のプロセッサと、
実行されることに応答して当該システムに動作を実行させる命令を記憶するように構成された1つ以上の非一時的コンピュータ読取可能記憶媒体と、を含み、前記動作は、
訓練コードを取得することと、
前記訓練コードにおける特徴を抽出することと、
前記抽出された特徴をコードデータセットに記憶することと、
ディープニューラルネットワークにより、前記訓練コードにおける前記抽出された特徴を自然言語コードベクトルにマッピングすることと、
ソースコード提案のための自然言語検索クエリを受信することと、
前記ディープニューラルネットワークにより、前記自然言語検索クエリを自然言語検索ベクトルにマッピングすることと、
前記自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記自然言語検索ベクトルを自然言語コードベクトルと比較することに基づいてソースコードを用いて前記自然言語検索クエリに応答することと、
を含む、システム。 - テストケース特徴を生成することと、前記テストケース特徴を前記コードデータセットに記憶することと、をさらに含み、前記テストケース特徴を生成することは、
前記取得された訓練コードをパースすることと、
前記パースされた訓練コードに基づいて前記パースされた訓練コードのためのテスト実行環境を決定することと、
前記テスト実行環境に基づいて前記パースされた訓練コードの実行を検証することと、
前記パースされた訓練コードのテストケース特徴を生成することであり、前記テストケース特徴は、前記テスト実行環境で前記パースされた訓練コードが実行可能かどうかを示す、ことと、
を含む、請求項15に記載のシステム。 - 前記訓練コードにおける特徴を抽出することは、前記訓練コードからコードスニペット、ソフトウェアドキュメンテーション、コードコメント、及びテストケースログのうち少なくとも1つを抽出することを含む、請求項15に記載のシステム。
- 前記ディープニューラルネットワークは、多層パーセプトロン(MLP)ネットワーク、長短期記憶(LSTM)ネットワーク、及び平均確率的勾配降下重みドロップ長短期記憶(AWD LSTM)ネットワークのうち少なくとも1つを含む、請求項15に記載のシステム。
- 前記ディープニューラルネットワークにより前記抽出された特徴のためのコードサマリを生成することであり、前記コードサマリは、前記抽出された特徴の自然言語記述を含む、こと
をさらに含み、
前記抽出された特徴を前記自然言語コードベクトルにマッピングすることは、前記生成されたコードサマリに基づく、請求項18に記載のシステム。 - 前記自然言語検索クエリを前記自然言語検索ベクトルにマッピングすることは、
前記自然言語検索クエリを第1の自然言語検索セクション及び第2の自然言語検索セクションに編成することと、
前記第1の自然言語検索セクションを第1の自然言語検索ベクトルにマッピングすることと、
前記第2の自然言語検索セクションを第2の自然言語検索ベクトルにマッピングすることと、を含み、
前記自然言語検索ベクトルと前記自然言語コードベクトルとを比較することは、
前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、
前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することと、を含み、
前記ソースコードは、さらに、前記第1の自然言語検索ベクトルを前記自然言語コードベクトルと、及び前記第2の自然言語検索ベクトルを前記自然言語コードベクトルと比較することに基づく、
請求項15に記載のシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/085,894 US11651014B2 (en) | 2020-10-30 | 2020-10-30 | Source code retrieval |
US17/085894 | 2020-10-30 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022073981A true JP2022073981A (ja) | 2022-05-17 |
Family
ID=81380014
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021156668A Pending JP2022073981A (ja) | 2020-10-30 | 2021-09-27 | ソースコード取得 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11651014B2 (ja) |
JP (1) | JP2022073981A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102515927B1 (ko) * | 2022-11-25 | 2023-03-30 | 주식회사 무하유 | 인공지능 모델을 이용한 자연어 기반 소스 코드 검색 장치 및 그 방법 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11816456B2 (en) * | 2020-11-16 | 2023-11-14 | Microsoft Technology Licensing, Llc | Notebook for navigating code using machine learning and flow analysis |
US20220188213A1 (en) * | 2020-12-11 | 2022-06-16 | Kyndryl, Inc. | Selecting automation scripts using reinforced learning |
US11782686B2 (en) * | 2021-05-18 | 2023-10-10 | Salesforce.Com, Inc. | Systems and methods for code understanding and generation |
US11797281B2 (en) * | 2021-08-05 | 2023-10-24 | Sap Se | Multi-language source code search engine |
US12019992B2 (en) * | 2021-09-24 | 2024-06-25 | Fujitsu Limited | Code enrichment for training language models relating to computer programming |
US20230195427A1 (en) * | 2021-12-16 | 2023-06-22 | International Business Machines Corporation | Dialogue- and machine learning-facilitated code development |
US20230267066A1 (en) * | 2022-02-24 | 2023-08-24 | International Business Machines Corporation | Software anomaly detection |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013078269A1 (en) * | 2011-11-22 | 2013-05-30 | Solano Labs, Inc. | System of distributed software quality improvement |
US10115055B2 (en) | 2015-05-26 | 2018-10-30 | Booking.Com B.V. | Systems methods circuits and associated computer executable code for deep learning based natural language understanding |
US9766868B2 (en) * | 2016-01-29 | 2017-09-19 | International Business Machines Corporation | Dynamic source code generation |
US10545733B2 (en) | 2018-06-25 | 2020-01-28 | Hcl Technologies Ltd. | Code reusability |
US11068285B2 (en) * | 2019-09-19 | 2021-07-20 | Adobe Inc. | Machine-learning models applied to interaction data for determining interaction goals and facilitating experience-based modifications to interface elements in online environments |
US11176329B2 (en) * | 2020-02-18 | 2021-11-16 | Bank Of America Corporation | Source code compiler using natural language input |
US11715006B2 (en) * | 2020-03-31 | 2023-08-01 | Microsoft Technology Licensing, Llc. | Natural language code search |
US11429352B2 (en) * | 2020-07-01 | 2022-08-30 | International Business Machines Corporation | Building pre-trained contextual embeddings for programming languages using specialized vocabulary |
US11455148B2 (en) * | 2020-07-13 | 2022-09-27 | International Business Machines Corporation | Software programming assistant |
US12028095B2 (en) * | 2020-09-09 | 2024-07-02 | SparkCognition, Inc. | Machine-learning based analysis and response to electromagnetic waveforms |
-
2020
- 2020-10-30 US US17/085,894 patent/US11651014B2/en active Active
-
2021
- 2021-09-27 JP JP2021156668A patent/JP2022073981A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102515927B1 (ko) * | 2022-11-25 | 2023-03-30 | 주식회사 무하유 | 인공지능 모델을 이용한 자연어 기반 소스 코드 검색 장치 및 그 방법 |
Also Published As
Publication number | Publication date |
---|---|
US11651014B2 (en) | 2023-05-16 |
US20220138240A1 (en) | 2022-05-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2022073981A (ja) | ソースコード取得 | |
US9183511B2 (en) | System and method for universal translating from natural language questions to structured queries | |
US10725836B2 (en) | Intent-based organisation of APIs | |
US10769552B2 (en) | Justifying passage machine learning for question and answer systems | |
US9424529B2 (en) | Systems and methods to facilitate local searches via location disambiguation | |
US9621601B2 (en) | User collaboration for answer generation in question and answer system | |
US9460085B2 (en) | Testing and training a question-answering system | |
CN109522465A (zh) | 基于知识图谱的语义搜索方法及装置 | |
US11281864B2 (en) | Dependency graph based natural language processing | |
EP3671526B1 (en) | Dependency graph based natural language processing | |
CN105378731A (zh) | 从被回答问题关联语料库/语料值 | |
US20140351228A1 (en) | Dialog system, redundant message removal method and redundant message removal program | |
RU2591175C1 (ru) | Способ и система для глобальной идентификации в коллекции документов | |
KR20160144384A (ko) | 딥 러닝 모델을 이용한 상황 의존 검색 기법 | |
JP2022024102A (ja) | 検索モデルのトレーニング方法、目標対象の検索方法及びその装置 | |
US11609748B2 (en) | Semantic code search based on augmented programming language corpus | |
JP2020191075A (ja) | Web APIおよび関連エンドポイントの推薦 | |
US20220414463A1 (en) | Automated troubleshooter | |
KR102292040B1 (ko) | 기계 독해 기반 지식 추출을 위한 시스템 및 방법 | |
US20140365494A1 (en) | Search term clustering | |
CN107861753A (zh) | App生成索引、检索方法和***及可读存储介质 | |
Xue et al. | Automatic generation and recommendation for API mashups | |
CN114201607B (zh) | 一种信息处理的方法和装置 | |
CN115658845A (zh) | 一种适用于开源软件供应链的智能问答方法及装置 | |
EP3944127A1 (en) | Dependency graph based natural language processing |