(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-23
(54)【発明の名称】自然言語コード検索のシステム及び方法
(51)【国際特許分類】
G06F 16/2452 20190101AFI20241016BHJP
【FI】
G06F16/2452
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024520799
(86)(22)【出願日】2022-10-03
(85)【翻訳文提出日】2024-04-04
(86)【国際出願番号】 US2022077458
(87)【国際公開番号】W WO2023060034
(87)【国際公開日】2023-04-13
(32)【優先日】2021-10-05
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2022-01-28
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100229448
【氏名又は名称】中槇 利明
(72)【発明者】
【氏名】ゴトメア,アクヒレシュ ディーパク
(72)【発明者】
【氏名】リ,ジュンナン
(72)【発明者】
【氏名】ホイ,チュ ホン
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175HA04
(57)【要約】
実施形態は、自然言語クエリを、そのクエリを意味的に表すプログラミング言語のコードスニペットに変換することを対象とする。本実施形態は、エンコーダネットワークと分類器ネットワークとを含むカスケード型ニューラルネットワークを含む。エンコーダネットワークは、分類器ネットワークよりも高速であるが、精度は低い。エンコーダネットワークは、対照学習フレームワークを使用して、コードスニペットの大きなセットからコード候補を識別するように訓練される。分類器ネットワークは、バイナリ分類器を使用して、コード候補からクエリを意味的に表すコードスニペットを識別するように訓練される。
【特許請求の範囲】
【請求項1】
自然言語クエリをプログラミング言語のコードスニペットに変換するための方法であって、
エンコーダネットワークにおいて、複数のコードスニペットからコードスニペットインデックスを生成することと、
前記コードスニペットインデックス及び前記エンコーダネットワークを使用して、前記自然言語クエリに対する複数のコード候補を生成することと、
前記自然言語クエリ及び前記複数のコード候補から、前記自然言語クエリと前記複数のコード候補からのコード候補とを含むペアを生成することと、
前記エンコーダネットワークに順次続く分類器ネットワーク及び前記ペアを使用して、前記自然言語クエリに対する前記プログラミング言語の前記コードスニペットを決定することであって、前記コードスニペットは、前記自然言語クエリの意味表現である、ことと、を含む、方法。
【請求項2】
対照損失関数で前記コード候補を決定するように前記エンコーダネットワークを訓練することをさらに含む、請求項1に記載の方法。
【請求項3】
クロスエントロピー目的関数を使用して、前記ペアから前記コードスニペットを決定するように前記分類器ネットワークを訓練することをさらに含む、請求項1又は2に記載の方法。
【請求項4】
前記エンコーダネットワークは、前記分類器ネットワークよりも1桁高速であり、1桁不正確である、請求項1又は2に記載の方法。
【請求項5】
前記エンコーダネットワークは、前記分類器ネットワークとは異なる損失関数で訓練される、請求項1又は2に記載の方法。
【請求項6】
前記エンコーダネットワークは、前記分類器ネットワークとニューラルネットワーク構造の一部分を共有する、請求項1又は2に記載の方法。
【請求項7】
前記複数のコード候補を生成することは、
前記自然言語クエリから符号化を生成することと、
前記コードスニペットインデックスを使用して、前記自然言語クエリの前記符号化から距離関数によって決定される距離内にある前記複数のコード候補の符号化を決定することと、を含む、請求項1又は2に記載の方法。
【請求項8】
前記コードスニペットを決定することは、
各ペアのコード候補が自然言語クエリの前記意味表現であるという信頼度スコアを決定することと、
前記ペアの信頼度スコアをランク付けすることと、
前記自然言語クエリの前記意味表現である前記コードスニペットとして、最も高い信頼度スコアに対応するペアのコード候補を選択することと、を含む、請求項1又は2に記載の方法。
【請求項9】
自然言語クエリをプログラミング言語のコードスニペットに変換するためのシステムであって、
カスケード型ニューラルネットワークを記憶するように構成されたメモリと、
前記メモリに結合されたプロセッサと、を含み、前記プロセッサは、前記カスケード型ニューラルネットワークに、
前記カスケード型ニューラルネットワークのエンコーダネットワークにおいて、複数のコードスニペットからコードスニペットインデックスを生成することと、
前記コードスニペットインデックス及び前記エンコーダネットワークを使用して、前記自然言語クエリに対する複数のコード候補を生成することと、
前記自然言語クエリ及び前記複数のコード候補から、前記自然言語クエリと前記複数のコード候補からのコード候補とを含むペアを生成することと、
前記カスケード型ニューラルネットワークの分類器ネットワーク及び前記ペアを使用して、前記自然言語クエリに対する前記プログラミング言語の前記コードスニペットを決定することであって、前記コードスニペットは、前記自然言語クエリの意味表現である、ことと、を行わせるための命令を実行するように構成されている、システム。
【請求項10】
前記プロセッサは、
対照損失関数で前記コード候補を決定するように前記エンコーダネットワークを訓練することと、
クロスエントロピー目的関数を使用して前記ペアから前記コードスニペットを決定するように前記分類器ネットワークを訓練することと、を行うようにさらに構成されている、請求項9に記載のシステム。
【請求項11】
前記エンコーダネットワークは、前記分類器ネットワークよりも1桁高速であり、1桁不正確である、請求項9又は10に記載のシステム。
【請求項12】
前記エンコーダネットワークは、前記分類器ネットワークとニューラルネットワーク構造の一部分を共有する、請求項9又は10に記載のシステム。
【請求項13】
前記コード候補を生成するために、前記プロセッサは、
前記自然言語クエリから符号化を生成することと、
前記コードスニペットインデックスを使用して、前記自然言語クエリの前記符号化から距離関数によって決定される距離内にある前記複数のコード候補の符号化を決定することと、を行うようにさらに構成されている、請求項9又は10に記載のシステム。
【請求項14】
前記コードスニペットを決定するために、前記プロセッサは、
各ペアのコード候補が前記自然言語クエリの意味表現であるという信頼度スコアを決定することと、
前記ペアの信頼度スコアをランク付けすることと、
前記自然言語クエリの前記意味表現である前記コードスニペットとして、最も高い信頼度スコアに対応するペアのコード候補を選択することと、を行うようにさらに構成されている、請求項9又は10に記載のシステム。
【請求項15】
命令が記憶された非一時的なコンピュータ可読媒体であって、前記命令は、プロセッサによって実行されるときに、自然言語クエリをプログラミング言語のコードスニペットに変換するための動作を前記プロセッサに実行させ、前記動作は、
エンコーダネットワークにおいて、複数のコードスニペットからコードスニペットインデックスを生成することと、
前記コードスニペットインデックス及び前記エンコーダネットワークを使用して、前記自然言語クエリに対する複数のコード候補を生成することと、
前記自然言語クエリ及び前記複数のコード候補から、前記自然言語クエリと前記複数のコード候補からのコード候補とを含むペアを生成することと、
分類器ネットワーク及び前記ペアを使用して、前記自然言語クエリに対する前記プログラミング言語の前記コードスニペットを決定することであって、前記コードスニペットは、前記自然言語クエリの意味表現である、ことと、を含む、非一時的なコンピュータ可読媒体。
【請求項16】
前記動作は、
対照損失関数で前記コード候補を決定するように前記エンコーダネットワークを訓練することと、
クロスエントロピー目的関数を使用して、前記ペアから前記コードスニペットを決定するように前記分類器ネットワークを訓練することと、をさらに含む、請求項15に記載の非一時的なコンピュータ可読媒体。
【請求項17】
前記エンコーダネットワークは、前記分類器ネットワークよりも1桁高速であり、1桁不正確である、請求項15又は16に記載の非一時的なコンピュータ可読媒体。
【請求項18】
前記エンコーダネットワークは、前記分類器ネットワークとニューラルネットワーク構造の一部分を共有する、請求項15又は16に記載の非一時的なコンピュータ可読媒体。
【請求項19】
前記コード候補を生成することは、
前記自然言語クエリから符号化を生成することと、
前記コードスニペットインデックスを使用して、前記自然言語クエリの前記符号化から距離関数によって決定される距離内にある前記複数のコード候補の符号化を決定することと、をさらに含む、請求項15又は16に記載の非一時的なコンピュータ可読媒体。
【請求項20】
前記コードスニペットを決定することは、
各ペアのコード候補が前記自然言語クエリの意味表現であるという信頼度スコアを決定することと、
前記ペアの信頼スコアをランク付けすることと、
前記自然言語クエリの前記意味表現である前記コードスニペットとして、最も高い信頼度スコアに対応するペアのコード候補を選択することと、をさらに含む、請求項15又は16に記載の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
この出願は、2021年10月5日に出願された米国仮特許出願第63/252,393号及び2022年1月28日に出願された米国非仮特許出願第17/587,984号に対する優先権を主張し、これらは、それらの全体が参照により本明細書に組み込まれる。
【0002】
本実施形態は、一般に、機械学習システム及び自然言語処理(NLP)に関し、より具体的には、自然言語を使用してコードスニペットを検索することに関する。
【背景技術】
【0003】
人工知能(AI)モデルは多様なアプリケーションに広く使用されている。いくつかのAIモデルは、自然言語入力に応答してプログラミング言語でコードスニペットを検索及び/又は生成するために使用されることがある。例えば、自然言語入力は、「filter the sales records that occurred at the zip code 94070」などの機能を記述してもよく、AIモデルは、この機能を実装するコードセグメント(例えば、Python、C#など)を生成又は検索してもよい。既存のコード生成システムは、自然言語検索の速度を向上させること、又は自然言語検索の精度を向上させることのいずれかに焦点を当ててきた。しかし、これらの既存の自然言語検索方法は、検索の効率と網羅性との間のトレードオフに大きく悩まされている。
【図面の簡単な説明】
【0004】
【
図1】いくつかの実施形態による、コード生成器を実装するコンピューティングデバイスの簡略図である。
【0005】
【
図2】いくつかの実施形態による、コード生成器の簡略図である。
【0006】
【
図3】いくつかの実施形態による、コード生成器を訓練するための方法の簡略図である。
【0007】
【
図4】いくつかの実施形態による、自然言語クエリと意味的に等価なコードスニペットを決定するための方法の簡略図である。
【0008】
図では、同じ符号を有する要素は、同じ又は同様の機能を有する。
【発明を実施するための形態】
【0009】
自然言語クエリは、例えば、ウェブ検索、データベース検索、法律検索などの様々な分野における検索を改善するために使用されている。また、自然言語クエリを使用して、コードスニペットの大きなセットを検索することにも関心が寄せられている。大きなコードリポジトリを有する組織は、コードを介したインデックス付けと検索から利益を得、適切に機能することがわかっているコードを再利用してもよい。コード及びコードスニペットの自然言語検索に対する最近のいくつかのアプローチでは、自然言語とソースコードシーケンスのペアを活用して、コードスニペットのサンプルを検索するようにテキストからコードへの検索モデルを訓練する。
【0010】
モデルを訓練する1つのアプローチは、対照学習フレームワークを使用することを含む。モデルは、高速エンコーダとも呼ばれる高速エンコーダニューラルネットワークであってもよい。対照学習フレームワークでは、意味的に一致する自然言語とプログラム言語シーケンスのペアは一緒にプルされるが、意味的に一致しないペアは離れるようにプッシュされる。高速エンコーダネットワークは、対照学習を使用してもよい。高速エンコーダネットワークは、セマンティクスマッチングの精度を犠牲にして多数の候補コードスニペットを検索することを含むシナリオに対して効率的であってもよい。
【0011】
モデルを訓練する別のアプローチは、バイナリ分類器を使用する。このタイプのモデルは、自然言語及びプログラミング言語シーケンスを入力として受信し、自然言語及びプログラミング言語シーケンスが意味的に一致するかどうかを予測する、訓練されたバイナリ分類器を使用する。バイナリ分類器を使用するモデルは、低速分類器と見なされてもよい。低速分類器は、より正確ではあるが、モデルが自然言語シーケンスに対してコードスニペットを分析するのに要する時間量に起因して、多数の候補コードスニペットを検索するときには、実行不可能になる。言い換えれば、対照学習フレームワークを使用して訓練されたモデルは、少なくとも10倍高速であるが、バイナリ分類器を使用するモデルよりも少なくとも10倍以上精度が低いことがある。
【0012】
多数のコードスニペットの自然言語検索を改善するために、実施形態は、高速エンコーダモデルと正確な分類器モデルの両方を含むカスケード型ニューラルネットワークモデルを目的とする。カスケード型ニューラルネットワークモデルは、コードスニペットの大きなセットの自然言語検索効率を向上させる。具体的には、カスケード型ニューラルネットワークモデルは、高速エンコーダネットワークと低速分類器ネットワークを組み合わせたハイブリッドアプローチである。最初に、エンコーダネットワークは、自然言語クエリに基づいて、コードスニペットのセットから上位K個のコード候補を決定する。第2に、上位K個のコード候補は、各コード候補を自然言語クエリとペアにし、各ペアに対して信頼度スコアを生成する低速分類器ネットワークを通過する。最も高い信頼度スコアを有するコードスニペットは、自然言語クエリと意味的に一致するコードスニペットであり得る。
【0013】
数Kは、エンコーダネットワークが生成し得るコード候補の数を識別する閾値を示してもよい。K閾値は、好ましくは、コードスニペットのセットのサイズよりもはるかに小さい。K閾値が小さすぎる場合、正しいコードスニペットを見落とす可能性が高くなり、K閾値が大きすぎる場合、第2段階の低速分類器を効率的に実行することが実行不可能であってもよい。
【0014】
いくつかの実施形態では、高速エンコーダネットワーク及び低速分類器ネットワークを記憶するためのメモリオーバヘッドは、ネットワークの重みを共有するか、又は部分的に共有することによって最小化されてもよい。例えば、高速エンコーダネットワークと低速分類器ネットワークの両方で使用されるようにトランスフォーマエンコーダを訓練することによって、高速エンコーダ及び低速分類器のトランスフォーマエンコーダが共有されてもよい。
【0015】
本明細書で使用される場合、「ネットワーク」という用語は、任意の人工知能ネットワーク又はシステム、ニューラルネットワーク又はシステム、及び/又はそこで実装されるか、又はそれと共に実装される任意の訓練又は学習モデルを含む任意のハードウェア又はソフトウェアベースのフレームワークを含んでもよい。
【0016】
本明細書で使用される場合、「モジュール」という用語は、1つ以上の機能を実行するハードウェア又はソフトウェアベースのフレームワークを含んでもよい。いくつかの実施形態では、モジュールは、1つ以上のニューラルネットワーク上で実装されてもよい。
【0017】
図1は、本明細書に記載されるいくつかの実施形態による、コード生成器を実装するコンピューティングデバイスの簡略図である。
図1に示すように、コンピューティングデバイス100は、メモリ120に結合されたプロセッサ110を含む。コンピューティングデバイス100の動作は、プロセッサ110によって制御される。また、コンピューティングデバイス100は、1つのプロセッサ110のみを有して示されているが、プロセッサ110は、コンピューティングデバイス100内の1つ以上の中央処理ユニット、マルチコアプロセッサ、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路、グラフィック処理ユニット(GPU)などを代表するものであり得ると理解される。コンピューティングデバイス100は、スタンドアロンのサブシステムとして、コンピューティングデバイスに追加されたボードとして、及び/又は仮想マシンとして実装されてもよい。
【0018】
メモリ120は、コンピューティングデバイス100によって実行されるソフトウェア及び/又はコンピューティングデバイス100の動作中に使用される1つ以上のデータ構造を記憶するために使用されてもよい。メモリ120は、1つ以上のタイプの機械可読媒体を含んでもよい。機械可読媒体のいくつかの一般的な形態は、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、任意の他の磁気媒体、CD-ROM、任意の他の光学媒体、パンチカード、紙テープ、穴のパターンを有する任意の他の物理媒体、RAM、PROM、EPROM、FLASH-EPROM、任意の他のメモリチップ又はカートリッジ、及び/又はプロセッサ又はコンピュータが読むように適応される任意の他の媒体を含んでもよい。
【0019】
プロセッサ110及び/又はメモリ120は、任意の好適な物理的配置に配置されてもよい。いくつかの実施形態では、プロセッサ110及び/又はメモリ120は、同じボード、同じパッケージ(例えば、システムインパッケージ)、同じチップ(例えば、システムオンチップ)などに実装されてもよい。いくつかの実施形態では、プロセッサ110及び/又はメモリ120は、分散、仮想化、及び/又はコンテナ化されたコンピューティングリソースと複数のプロセッサとを含んでもよい。そのような実施形態とマッチングして、プロセッサ110及び/又はメモリ120は、1つ以上のデータセンター及び/又はクラウドコンピューティング施設に位置してもよい。
【0020】
いくつかの例では、メモリ120は、1つ以上のプロセッサ(例えば、プロセッサ110)によって動作するときに、1つ以上のプロセッサに本明細書にさらに詳細に記載される方法を実行させ得る実行可能コードを含む非一時的な有形機械可読媒体を含んでもよい。例えば、図示のように、メモリ120は、システム及びモデルを実装及び/又はエミュレートするため、及び/又は本明細書にさらに記載される任意の方法を実装するために使用され得るコード生成器130などの自然言語(NL)処理モジュールのための命令を含む。いくつかの例では、コード生成器130は、データインターフェース115を介して、例えば、自然言語テキスト、クエリ、又はコンピュータコードなどの入力140を受信してもよい。データインターフェース115は、ユーザから入力140を受信するユーザインターフェース、又はメモリ120若しくはデータベースのような別のメモリ記憶装置に記憶された入力140を受信又は取り出す通信インターフェースのいずれかであってもよい。コード生成器130は、自然言語テキスト又はクエリと意味的に等価なプログラム可能言語(PL)シーケンス、コード、又はコードスニペットなどの出力150を生成してもよい。いくつかの実施形態では、符号発生器130は、エンコーダネットワーク132の出力が部分的に分類器ネットワーク134に入力され得るように、エンコーダネットワーク132及び分類器ネットワーク134を含むカスケード型ニューラルネットワークを含んでもよい。
【0021】
図2は、いくつかの実施形態による、コード生成器の簡略
図200である。
図2に例示されるように、コード生成器130は、エンコーダネットワーク132と分類器ネットワーク134とを含む。コード生成器130は、自然言語クエリ又はテキストの自然言語クエリ202を受信する。自然言語クエリ202は、
図1で議論された入力140であってもよい。自然言語クエリ202は、コード生成器130がコードスニペットなどのプログラミング言語シーケンスに変換し得る「filter the sales records that occurred at the zip code 94070」など、人間が書いたテキスト又は話したテキストであってもよい。コード生成器130は、自然言語クエリ202をエンコーダネットワーク132を通過させる。エンコーダネットワーク132は、K個のコード候補204A~204Kを生成してもよい。コード候補204A~204Kは、自然言語クエリ202を意味的に表現する、及び/又は自然言語クエリ128と意味的に一致するプログラミング言語のコードスニペットであってもよい。分類器ネットワーク134は、自然言語クエリ202からコード候補204A~204Kのペアを受信してもよい。ペアの各ペアは、候補204A~204Kのうちの1つ及び自然言語クエリ202を含んでもよい。分類器ネットワーク134は、自然言語クエリ202の意味表現であるコードスニペット206を生成してもよい。
【0022】
いくつかの実施形態では、エンコーダネットワーク132は、有意に高速、例えば、少なくとも10倍以上、分類器ネットワーク134よりも大きい。実際、エンコーダネットワーク132の速度により、エンコーダネットワーク132は、利用可能なコードスニペットの大きなセットからコード候補204 A~204Kを迅速に決定してもよい。一方、分類器ネットワーク134は、エンコーダネットワーク132よりも低速であるが、自然言語クエリ202と意味的に一致するコードスニペットを識別する際に、有意により正確に、例えば、少なくとも10倍以上正確に識別する。
図2に示すように、分類器ネットワーク134は、コード候補204A~204Kと自然言語クエリ202のペアを受信し、自然言語クエリ202の意味表現であるコードスニペット206を識別する。エンコーダネットワーク132と分類器ネットワーク134とを含むハイブリッドアプローチを使用することによって、コード発生器130は、自然言語クエリ202の意味表現であるコードスニペット206を決定するための速度と精度を改善する。
【0023】
いくつかの実施形態では、エンコーダネットワーク132は、BERT(bidirectional encoder representations from transformers)又はBERTネットワークの変形であってもよいか、又は含んでもよい。BERTネットワーク又はBERTネットワークの変形は、テキスト入力からコードスニペットを取り出すために、多様なプログラミング言語のプログラミング言語シーケンスで事前に訓練されてもよい。例示的な事前に訓練されたBERTネットワークは、GraphCodeBERT又はCodeBERTである。例示的なプログラミング言語は、Ruby、JavaScript、Go、Python、Java、C、C++、C#、Phpなどであってもよい。訓練段階の間、コード候補204を認識するために、エンコーダネットワーク132は、さらに、バイモーダルデータセットを使用して、対照学習フレームワークで訓練されてもよい。バイモーダルデータセットでは、意味が一致する自然言語クエリとプログラミング言語シーケンスの表現の正のペアが一緒にプルされる。一方、ランダムにペアになった自然言語クエリとプログラミング言語シーケンスである負のペアの表現は、離されるようにプッシュされる。infoNCE損失関数のような対照損失関数は、エンコーダネットワーク132を訓練するために使用されてもよく、以下に複製される。
【数1】
式中、f
θ(x
i)は、自然言語入力x
iの密な表現であり、y
iは、対応する意味的に等価なプログラミング言語シーケンスであり、Nは、バイモーダルデータセットにおける訓練例の数であり、σは、温度ハイパーパラメータであり、Bは、現在の訓練ミニバッチを示す。エンコーダネットワーク132は、対照損失関数が最小化されるまで訓練されてもよい。
【0024】
訓練されると、エンコーダネットワーク132は、コードスニペット208として示される候補コードスニペットのセット
【数2】
を受信してもよい。コードスニペット208は、様々な自然言語クエリに対応し得る潜在的コードスニペット、コードスニペットのユニバース、利用可能なコードスニペットなどを含んでもよい。コードスニペット208は、コードスニペットインデックス210として示されるインデックス
【数3】
に符号化されてもよい。コードスニペットインデックス210は、コードスニペット208内の各コードスニペットの符号化のインデックスであってもよい。エンコーダネットワーク132は、例えば、コード生成器130がコードスニペット206を決定する自然言語クエリ202を受信する前に、コードスニペットのセットをオフラインで符号化してもよい。コードスニペットインデックス210は、エンコーダネットワーク132内、又は
図1に記載されるメモリ120内のどこかに記憶されてもよい。
【0025】
いくつかの実施形態では、コードスニペットインデックス210を生成した後に、エンコーダネットワーク132は、自然クエリx
i(自然言語クエリ202)を受信し、f
θ(x
i)を計算し、コードスニペットインデックス210をクエリし、コードスニペットインデックス210内の最近傍(複数可)に対応するC(コードスニペット208)からコードスニペットを返してもよい。近傍(複数可)は、例えば、コサイン類似性関数である類似性関数によって決定される距離メトリックを使用して計算されてもよい。次いで、自然語クエリx
iに対してコードスニペットのセットC(コードスニペット208)から正しいコードスニペットに割り当てられたランクr
iを使用して、MRR(mean reciprocal ranking)メトリック
【数4】
が計算されてもよい。MRRメトリックから、MRRに含まれるランク、又はMRR内のランクから特定の距離を有するコード候補204が決定されてもよい。いくつかの実施形態では、コード候補204の数は、エンコーダネットワーク132に上位K個の候補、例えば、コード候補204A~204Kを識別させる閾値であり得るハイパーパラメータKによって管理されてもよい。
【0026】
いくつかの実施形態では、分類器ネットワーク134も、BERT(bidirectional encoder representations from transformers)又はBERTネットワークの変形であってもよいか、又は含んでもよい。BERTネットワーク又はBERTネットワークの変形は、テキスト入力からコードスニペットを取り出すために、プログラミング言語シーケンスで事前に訓練されてもよい。例示的な事前に訓練されたBERTネットワークは、GraphCodeBERT又はCodeBERTであってもよく、例示的なプログラミング言語は、Ruby、JavaScript、Go、Python、Java、C、C++、C#、Phpなどであってもよい。
【0027】
分類器ネットワーク134は、(202として示す)自然言語クエリxi及びプログラミング言語シーケンスyj(コード候補204A~204Kのうちの1つ又は別のコードシーケンス)を入力として受信し、自然言語入力xi及びコードシーケンスを一緒に符号化し、バイナリ分類を実行してもよい。バイナリ分類は、自然言語入力xi及びコードシーケンスyjが意味的に一致するかどうかを予測してもよい。いくつかの実施形態では、分類器ネットワーク134は、自然言語入力xi及びコードシーケンスyjの連結、[xi;yj]などを受信してもよい。
【0028】
分類器ネットワーク134は、訓練バッチを使用してバイナリ分類について訓練されてもよい。訓練バッチは、各ペアが自然言語クエリとコードスニペットとを含むペアを含んでもよい。訓練バッチは、バイモーダルデータセットについてのバッチであってもよく、正のペアは、自然言語クエリとコードスニペットとの間の意味的一致を示し、負のペアは、意味的不一致を示す。自然言語クエリと意味的にプログラムされた言語シーケンスを含むペアのセット
【数5】
が与えられると、この訓練スキームに対するクロスエントロピー目的関数は、以下のようであってもよい。
【数6】
式中、p
θ(x
i,y
j)は、分類器によって予測されるように、自然言語シーケンスx
iがプログラミング言語シーケンスy
jと意味的に一致する確率を表す。分類器ネットワーク134は、相互エントロピー目的関数が最小化されるまで訓練されてもよい。
【0029】
正のペアの訓練ミニバッチ
【数7】
から、負のペアの訓練バッチが生成されてもよい。例えば、ミニバッチ中のプログラム言語シーケンスからプログラム言語シーケンス
【数8】
をランダムに選択し、選択されたシーケンスをx
iとペアにすることによって、負のペアが生成されてもよい。分類器ネットワーク134がトランスフォーマエンコーダベースの分類器を含むときに、セルフアテンション層における自然言語トークンとプログラミング言語トークンとの間の相互作用は、分類器ネットワーク134の精度を向上させるのに役立ち得る。
【0030】
訓練されると、分類器ネットワーク134は、自然言語クエリ202及びコード候補204からコードスニペット206を決定してもよい。例えば、推論中に、分類器ネットワーク134は、複数のペアを入力として受信することができ、各ペアは、候補コードスニペットのセット
【数9】
(コード候補204A~204K)からの自然言語シーケンスx
i(例えば、自然言語クエリ202)とコードスニペットy
j(コード候補204A~204Kのうちの1つ)を含む。分類器ネットワーク134は、各ペアについて信頼度スコアを生成し、その信頼度スコアに従って、コード候補204A~204K内の各コード候補をランク付けしてもよい。信頼度スコアは、例えば、0~1までの尺度を有する確率であってもよく、1に近い値は、一致の確率が高いことを示し、0に近い値は、不一致の確率が高いことを示す。最も高いスコアを有するペアに対応するコードスニペットy
j(コード候補204A~204K中のコード候補)は、自然言語シーケンスx
i(自然言語クエリ202)との意味的一致であってもよい。
【0031】
上述のように、本明細書で論じられるコード生成器130は、エンコーダネットワーク132及び分類器ネットワーク134などのネットワークのカスケードを含み、高速エンコーダネットワーク132の速度と分類器ネットワーク134の精度とを2段階プロセスで組み合わせる。第1の段階では、エンコーダネットワーク132は、自然言語クエリ202を受信し、コードスニペットのセットC(コードスニペット208)からコード候補204A~204Kを生成する。エンコーダネットワーク132は、自然言語クエリ202の符号化を決定し、距離関数を使用して、符号化をコードスニペット208のコードスニペットインデックス210と一致させてもよい。いくつかの実施形態では、エンコーダネットワーク132は、K個のコード候補204A~204Kを決定してもよく、Kは、ハイパーパラメータであり得る設定可能な候補閾値である。典型的には、K個の候補は、自然言語クエリ202の符号化に対してコードスニペットインデックス210内で最も近い距離を有する上位候補である。
【0032】
第2の段階では、コード候補204が自然言語クエリ202とペアにされる。例示的なペアは、202~204A、202~204B、...、202~204Kであってもよい。分類器ネットワーク134は、ペア202-204A、202-204B、...、202-204Kを受信する。ペア202-204A、202-204B、...、202-204Kの各ペアに対して、分類器ネットワーク134は、自然言語クエリ202が、バイナリ分類器を使用して、コード候補204A~204Kの対応するものと意味的に一致するという信頼度スコアを返す。ペア202-204A、202-204B、...、202-204Kに関連付けられた信頼度スコアに基づいて、分類器ネットワーク134は、自然言語クエリ202と意味的に一致するコードスニペット206を選択する。いくつかの例では、コードスニペット206は、最も高い信頼度スコアを有するペアに対応してもよい。
【0033】
上述したように、エンコーダネットワーク132は、計算的には高速であるが、自然言語クエリと意味的に一致するコードスニペットを決定する際には、分類器ネットワーク134よりも精度が低い。K<<|C|であるスキームにおいて、エンコーダネットワーク132とともに分類器ネットワーク134を順次追加することは、わずかな計算オーバーヘッドを追加してもよい。分類器ネットワーク134がコード候補204A~204Kを洗練する第2の段階は、Kの値が、エンコーダネットワーク118の再呼び出しが適度に高くなるようにセットされる場合、取り出し性能を向上させる。いくつかの実施形態において、Kは、ハイパーパラメータであってもよい。非常に低いKをセットすることは、分類器ネットワーク134に渡されるコード候補204のセット内のコードスニペット206を見落とす可能性が高くなる。一方、高いKをセットすると、分類器ネットワーク134による取り出しに対してスキームが実行不可能になる。しかし、Kを10のような値にセットすることは、Kが100以上にセットされたときにはわずかな向上しか得られない従来のコード生成システムに比べて、取り出し性能において有意な利得をすでに提供している。
【0034】
いくつかの実施形態では、エンコーダネットワーク132及び分類器ネットワーク134は、ニューラルネットワーク構造の一部分を共有してもよい。例えば、エンコーダネットワーク132及び分類器ネットワーク134は、BERTネットワーク内のトランスフォーマエンコーダ内の層の重みを共有してもよい。ニューラルネットワーク構造を共有することにより、エンコーダネットワーク132及び分類器ネットワーク134によって生じるメモリオーバヘッドが最小化される。
エンコーダネットワーク132及び分類器ネットワーク134によるニューラルネットワーク構造の共有、例えば、トランスフォーマ層は、式(1)に示されるinfoNCE
【数10】
及び式(2)に示されるバイナリクロスエントロピー
【数11】
の共同目標を用いてトランスフォーマエンコーダを訓練することによって達成されてもよい。この共有された変形におけるパラメータの数は、トランスフォーマ層が共有されないときのほぼ半分であるが、推論中の計算コストは、同様か、又は同じであってもよい。
【0035】
共有された実施形態では、分類器ネットワーク134は、ペア202-204A、202-204B、...、202-204Kに対する信頼度スコアを決定する追加の分類層又はヘッドを有してもよい。分類器ネットワーク134は、トランスフォーマエンコーダの上に分類ヘッドを含むことになる。さらに、共有されたニューラルネットワーク構造は、3つの入力、自然言語クエリ202、候補コードスニペットのセットC(コードスニペット208)、及びペア202-204A、202-204B、...、202-204Kを受信してもよい。共有された実施形態では、ネットワークの共有された層を介して2つのパスが行われ、自然言語クエリ202は、第1のパス中の入力であり、ペア202-204A、202-204B、...、202-204Kは、第2のパス中に入力される。
【0036】
図3いくつかの実施形態による、コード生成器を訓練するための方法300の簡略図である。方法300のプロセス302~304のうちの1つ以上は、少なくとも部分的に、1つ以上のプロセッサによって実行されるときに、1つ以上のプロセッサにプロセス302~304のうちの1つ以上を実行させ得る非一時的な有形機械可読媒体に記憶された実行可能コードの形態で実装されてもよい。
【0037】
プロセス302において、エンコーダネットワークが訓練される。例えば、事前訓練されたBERTネットワークであり得るエンコーダネットワーク132は、自然言語シーケンスと意味的に一致するコードスニペットを識別するために、対照学習フレームワークでさらに訓練されてもよい。エンコーダネットワーク132を訓練するために使用される対照損失関数は、infoNCE損失関数などの対照損失関数であってもよい。訓練は、負のペアと正のペアのバッチを含んでもよく、各ペアは、自然言語シーケンスとプログラミング言語シーケンスとを含む。訓練は、infoNCE損失関数が最小化されるまで反復的に継続してもよい。
【0038】
プロセス304において、分類器ネットワークが訓練される。例えば、事前に訓練されたBERTネットワークであり得る分類器ネットワーク134は、コードスニペットが自然言語シーケンスに一致する確率スコアを決定するために、バイナリ分類で訓練されてもよい。クロスエントロピー目的関数は、分類器ネットワーク134を訓練するために使用されてもよい。訓練は、負のペアと正のペアのバッチを含んでもよく、各ペアは、自然言語シーケンスとプログラミング言語シーケンスとを含む。訓練は、クロスエントロピー目的関数が最小化されるまで反復的に継続してもよい。
【0039】
図4は、いくつかの実施形態による、自然言語クエリと意味的に等価なコードスニペットを生成するための方法400の簡略図である。方法400のプロセス402~408のうちの1つ以上は、少なくとも部分的に、1つ以上のプロセッサによって実行されるときに、1つ以上のプロセッサにプロセス402~408のうちの1つ以上を実行させ得る非一時的な有形機械可読媒体に記憶された実行可能コードの形態で実装されてもよい。
【0040】
プロセス402において、コードスニペットインデックスが生成される。例えば、エンコーダネットワーク132は、多数の自然言語クエリと意味的に対応し得るコードスニペット208を受信する。エンコーダネットワーク132は、コードスニペット208を符号化し、符号化されたコードスニペットに対応するコードスニペットインデックス210を生成する。プロセス402は、エンコーダネットワーク132が訓練された後で、かつ、エンコーダネットワーク132が自然言語クエリ202を処理する前に、発生してもよい。
【0041】
プロセス404において、自然言語クエリに対するコード候補が生成される。例えば、エンコーダネットワーク132は、自然言語クエリ202を受信し、自然言語クエリ202に対する符号化を生成してもよい。エンコーダネットワーク132は、自然言語クエリ202の符号化をコードスニペット208の符号化に一致させるためにコードスニペットインデックス210を使用して、自然言語クエリ202と意味的に一致し得るコード候補204A~204Kを識別してもよい。上述のように、コード候補204A~204Kの数は、ハイパーパラメータであり得る数Kを使用してセットされてもよい。
【0042】
プロセス406において、自然言語クエリとコード候補とを含むペアが生成される。例えば、コード生成器130は、ペア202-204A、202-204B、...、202-204Kを生成してもよく、各ペアは、自然言語クエリ202と、コード候補204A~204Kのうちの1つとを含む。
【0043】
プロセス408において、コードスニペットが決定される。例えば、分類器ネットワーク104は、ペア202-204A、202-204B、...、202-204Kを受信し、各ペアに対する信頼度スコアを決定してもよい。最も高い信頼度スコアを有するペアは、自然言語クエリ202と意味的に一致するコードスニペット206であってもよい。
【0044】
コンピューティングデバイス100のようなコンピューティングデバイスのいくつかの例は、1つ以上のプロセッサ(例えば、プロセッサ110)によって動作するときに、1つ以上のプロセッサに方法300~400のプロセスを実行させ得る実行可能コードを含む非一時的な有形機械可読媒体を含んでもよい。方法300~400のプロセスを含み得る機械可読媒体のいくつかの一般的な形態は、例えば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、任意の他の磁気媒体、CD-ROM、任意の他の光学媒体、パンチカード、紙テープ、穴のパターンを有する任意の他の物理媒体、RAM、PROM、EPROM、FLASH-EPROM、任意の他のメモリチップ又はカートリッジ、及び/又はプロセッサ又はコンピュータが読むように適合される任意の他の媒体である。
【0045】
発明の態様、実施形態、実装、又はアプリケーションを例示するこの説明及び添付の図面は、限定的なものと解釈されるべきではない。様々な機械的、組成的、構造的、電気的、及び動作上の変更は、この説明及び特許請求の範囲の精神及び範囲から逸脱することなく行われてもよい。いくつかの例では、本開示の実施形態を不明瞭にしないために、周知の回路、構造、又は技法が詳細に示されていないか、又は記載されていない。2つ以上の図の類似の数字は、同じ又は同様の要素を表す。
【0046】
この説明では、本開示と矛盾しないいくつかの実施形態を記載する特定の詳細が明記されている。実施形態の完全な理解を提供するために、多数の詳細が明記されている。いくつかの実施形態は、これらの特定の詳細の一部又は全部がなくても実施され得ると当業者に明らかであろう。本明細書に開示される特定の実施形態は、例示的であるが、限定的ではないことを意味する。当業者は、本明細書に具体的に記載されていないが、本開示の範囲及び精神内にある他の要素を認識してもよい。追加的に、不必要な繰り返しを回避するために、1つの実施形態に関連して示され、記載される1つ以上の特徴は、他の方法で具体的に記載されないか、又は1つ以上の特徴が一実施形態を非機能的にする場合を除いて、他の実施形態に組み込まれてもよい。
【0047】
例示的な実施形態が示され記載されたが、広範囲の修正、変更及び置換が、前述の開示において企図され、いくつかの例では、実施形態のいくつかの特徴を、他の特徴の対応する使用なしに採用してもよい。当業者であれば、多くの変形、代替、及び修正を認識するであろう。したがって、本発明の範囲は、以下の特許請求の範囲によってのみ限定されるべきであり、特許請求の範囲は、本明細書に開示された実施形態の範囲と一致する方式で広く解釈されることが適切である。
【国際調査報告】