IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特開2022-159029ソフトウェアを推薦するための機械学習モデル
<>
  • 特開-ソフトウェアを推薦するための機械学習モデル 図1
  • 特開-ソフトウェアを推薦するための機械学習モデル 図2
  • 特開-ソフトウェアを推薦するための機械学習モデル 図3
  • 特開-ソフトウェアを推薦するための機械学習モデル 図4
  • 特開-ソフトウェアを推薦するための機械学習モデル 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022159029
(43)【公開日】2022-10-17
(54)【発明の名称】ソフトウェアを推薦するための機械学習モデル
(51)【国際特許分類】
   G06F 8/36 20180101AFI20221006BHJP
【FI】
G06F8/36
【審査請求】未請求
【請求項の数】20
【出願形態】OL
(21)【出願番号】P 2022044736
(22)【出願日】2022-03-18
(31)【優先権主張番号】17/221679
(32)【優先日】2021-04-02
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】アーセンオールト・マクス
(72)【発明者】
【氏名】チェン・ウェイ-ペン
(72)【発明者】
【氏名】リィウ・レイ
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AA07
5B376AC00
5B376BC13
5B376BC14
(57)【要約】      (修正有)
【課題】ソフトウェアを推薦するための機械学習モデルを実現するソフトウェア推薦システム、方法及び記憶媒体を提供する。
【解決手段】方法は、一つ又は複数のリポジトリ・ソースから、以前に開発されたソフトウェア・エンティティを表すソフトウェア・アーチファクトを受領することと、ソフトウェア・アーチファクトの知識グラフを構築することと、知識グラフを使用して、ソフトウェア開発目標のために、以前に開発されたソフトウェア・エンティティの一つ又は複数を推奨するためのグラフ・ニューラルネットワーク・モデルを含むことと、を含む。方法は、ソフトウェア開発目標のために使用されるべき、以前に開発されたソフトウェア・エンティティのうちの一つ又は複数を含む推薦を生成することを含んでいてもよい。
【選択図】図5
【特許請求の範囲】
【請求項1】
以前に開発されたソフトウェア・エンティティを表すソフトウェア・アーチファクトを一つまたは複数のリポジトリ・ソースから受領する段階と;
前記ソフトウェア・アーチファクトの知識グラフを構築する段階と;
前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数をソフトウェア開発目標のために推薦するためのグラフ・ニューラルネットワーク・モデルを前記知識グラフを用いてトレーニングする段階とを含む、
方法。
【請求項2】
前記ソフトウェア開発目標のために使用される、前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数を含む推薦を生成する段階をさらに含む、請求項1に記載の方法。
【請求項3】
ユーザー入力を受領する段階であって、前記ユーザー入力が自然言語クエリーを含む、段階と;
前記ユーザー入力を前記自然言語クエリーに基づくマルチモーダル埋め込みに変換する段階と;
前記マルチモーダル埋め込みを含む前記知識グラフに擬似ノードを追加する段階とをさらに含む、
請求項1に記載の方法。
【請求項4】
前記知識グラフにおいてエッジで前記マルチモーダル埋め込みを連結して、前記擬似ノードのためのグラフ埋め込みを生成する段階をさらに含む、請求項3に記載の方法。
【請求項5】
前記知識グラフにおいて前記擬似ノードに類似した一つまたは複数のノードを検索する段階と;
前記ソフトウェア開発目標のために使用される、前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数を含む推薦を生成する段階であって、前記推薦は前記知識グラフにおける前記擬似ノードに類似したノードに基づく、段階とを含む、
請求項4に記載の方法。
【請求項6】
前記ソフトウェア・アーチファクトは:オープンソース・ソフトウェア・パッケージ、Dockerfile、Dockerイメージ、Dockerベース・イメージ、リポジトリ、Docker-composeファイル、およびヘルムチャートのうちの一つまたは複数を含む、請求項1に記載の方法。
【請求項7】
前記知識グラフは:
ソフトウェア・アーチファクトを表すノードと;
前記ソフトウェア・アーチファクトの間の関係を表すエッジとを含む、
請求項1に記載の方法。
【請求項8】
一つまたは複数のプロセッサによって実行されることに応答して、システムに動作を実行させる命令を記憶している一つまたは複数のコンピュータ読み取り可能な記憶媒体であって、前記動作は:
以前に開発されたソフトウェア・エンティティを表すソフトウェア・アーチファクトを一つまたは複数のリポジトリ・ソースから受領する段階と;
前記ソフトウェア・アーチファクトの知識グラフを構築する段階と;
前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数をソフトウェア開発目標のために推薦するためのグラフ・ニューラルネットワーク・モデルを前記知識グラフを用いてトレーニングする段階とを含む、
一つまたは複数のコンピュータ読み取り可能な記憶媒体。
【請求項9】
前記動作が、前記ソフトウェア開発目標のために使用される、前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数を含む推薦を生成する段階をさらに含む、請求項8に記載の一つまたは複数のコンピュータ読み取り可能な記憶媒体。
【請求項10】
前記動作が:
ユーザー入力を受領する段階であって、前記ユーザー入力が自然言語クエリーを含む、段階と;
前記ユーザー入力を前記自然言語クエリーに基づくマルチモーダル埋め込みに変換する段階と;
前記マルチモーダル埋め込みを含む前記知識グラフに擬似ノードを追加する段階とをさらに含む、
請求項8に記載の一つまたは複数のコンピュータ読み取り可能な記憶媒体。
【請求項11】
前記動作が、前記知識グラフにおいてエッジで前記マルチモーダル埋め込みを連結して、前記擬似ノードのためのグラフ埋め込みを生成する段階をさらに含む、請求項10に記載の一つまたは複数のコンピュータ読み取り可能な記憶媒体。
【請求項12】
前記動作が:
前記知識グラフにおいて前記擬似ノードに類似した一つまたは複数のノードを検索する段階と;
前記ソフトウェア開発目標のために使用される、前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数を含む推薦を生成する段階であって、前記推薦は前記知識グラフにおける前記擬似ノードに類似したノードに基づく、段階とを含む、
請求項11に記載の一つまたは複数のコンピュータ読み取り可能な記憶媒体。
【請求項13】
前記ソフトウェア・アーチファクトは:オープンソース・ソフトウェア・パッケージ、Dockerfile、Dockerイメージ、Dockerベース・イメージ、リポジトリ、Docker-composeファイル、およびヘルムチャートのうちの一つまたは複数を含む、請求項8に記載の一つまたは複数のコンピュータ読み取り可能な記憶媒体。
【請求項14】
前記知識グラフは:
ソフトウェア・アーチファクトを表すノードと;
前記ソフトウェア・アーチファクトの間の関係を表すエッジとを含む、
請求項8に記載の方法。
【請求項15】
ユーザー・インターフェースと;
一つまたは複数のプロセッサと;
一つまたは複数のコンピュータ読み取り可能な記憶媒体とを有するソフトウェア推薦システムであって、
前記記憶媒体は、前記一つまたは複数のプロセッサによって実行されることに応答して当該システムに動作を実行させる命令を記憶しており、前記動作は:
以前に開発されたソフトウェア・エンティティを表すソフトウェア・アーチファクトを一つまたは複数のリポジトリ・ソースから受領する段階と;
前記ソフトウェア・アーチファクトの知識グラフを構築する段階と;
前記ユーザー・インターフェースにおいて受領されるユーザー入力に応答して、ソフトウェア開発目標のために使用されるべき、前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数を含む推薦を生成する段階とを含む、
ソフトウェア推薦システム。
【請求項16】
前記ユーザー入力が自然言語クエリーを含む、請求項15に記載のソフトウェア推薦システム。
【請求項17】
前記動作がさらに:
前記ユーザー入力に含まれる自然言語クエリーに基づいて前記ユーザー入力をマルチモーダル埋め込みに変換する段階と;
前記マルチモーダル埋め込みを含む前記知識グラフに擬似ノードを追加する段階と;
前記知識グラフにおいてエッジで前記マルチモーダル埋め込みを連結し、前記擬似ノードのためのグラフ埋め込みを生成する段階とをさらに含む、
請求項15に記載のソフトウェア推薦システム。
【請求項18】
前記動作が:
前記知識グラフにおいて前記擬似ノードに類似した一つまたは複数のノードを検索する段階をさらに含み、
前記推薦の生成は、前記知識グラフにおける前記擬似ノードに類似したノードに基づく、
請求項17に記載のソフトウェア推薦システム。
【請求項19】
前記ソフトウェア・アーチファクトは、オープンソース・ソフトウェア・パッケージ、Dockerfile、Dockerイメージ、Dockerベース・イメージ、リポジトリ、Docker-composeファイル、およびヘルムチャートのうちの一つまたは複数を含む、請求項15に記載のソフトウェア推薦システム。
【請求項20】
前記ユーザー・インターフェースが前記知識グラフを表示するように構成されており、前記知識グラフが:
前記ソフトウェア・アーチファクトを表すノード;
前記ソフトウェア・アーチファクトの間の関係を表すエッジを含む、
請求項15に記載のソフトウェア推薦システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示において議論される実施形態は、ソフトウェアを推奨するための機械学習モデルに関連する。
【背景技術】
【0002】
ソフトウェア開発の過程で、ソフトウェア開発者は、プロジェクトの一部として、以前に開発されたソフトウェアを含めることが多い。以前に開発されたソフトウェアを使用することは、ソフトウェア開発者にすべてのソフトウェアを自分で開発させるよりも、ソフトウェア開発プロセスを促進し、関連するコストを削減することができる。
【0003】
本開示において請求される主題は、何らかの欠点を解決する、または上記のような環境においてのみ動作する実施形態に限定されない。むしろ、この背景は、本開示に記載されるいくつかの実施形態が実施されうる1つの例示的な技術分野を示すためにのみ提供される。
【発明の概要】
【課題を解決するための手段】
【0004】
ある例示的な実施形態では、方法は、一つまたは複数のリポジトリ・ソースから、以前に開発されたソフトウェア・エンティティを表すソフトウェア・アーチファクトを受領することを含むことができる。この方法は、ソフトウェア・アーチファクトの知識グラフを構築することを含みうる。この方法は、知識グラフを使用して、ソフトウェア開発目標のために以前に開発されたソフトウェア・エンティティの一つまたは複数を推奨するためのグラフ・ニューラルネットワーク・モデルを含むことができる。
【0005】
実施形態の目的および利点は、少なくとも特許請求の範囲において特に指摘された要素、特徴、および組み合わせによって実現され、達成される。上述の一般的説明および下記の詳細な説明はいずれも、例として示されており、説明するものであり、特許請求の範囲に記載された本発明を限定するものではない。
【図面の簡単な説明】
【0006】
例示的な実施形態は、添付の図面を使用することにより、さらなる具体性および詳細を伴って記述および説明される。
【0007】
図1】ソフトウェア開発サイクルの一例を示す図である。
【0008】
図2】ソフトウェア開発のためのソフトウェア推薦に関する例示的な環境を示す図である。
【0009】
図3】知識グラフの例を示す図である。
【0010】
図4】例示的なコンピューティングシステムのブロック図を示す。
【0011】
図5】以前に開発されたソフトウェア・エンティティの一つまたは複数を推奨するために、グラフ・ニューラルネットワーク・モデルをトレーニングする例示的な方法のフローチャートである。
【発明を実施するための形態】
【0012】
ソフトウェア開発の過程において、ソフトウェア開発者は、しばしば、そのソフトウェア開発プロジェクトの一部として、以前に開発されたソフトウェア・モジュールまたはソフトウェア・エンティティを含めることがある。以前に開発されたソフトウェア・エンティティをソフトウェア・プロジェクト(開発中のソフトウェア・アプリケーションなど)で使用するために、ソフトウェア開発者は、特定のプロジェクトの要件を満たすソフトウェア・エンティティを識別しようと試みることがある。しかし、特定のソフトウェア開発プロジェクトの要件を満たす機能を有する適切なソフトウェア・エンティティを特定することは困難であり、時間がかかる場合がある。状況によっては、ソフトウェア開発者がすべての利用可能なソフトウェア・エンティティを評価し、それらを互いに比較することが可能でないことがある。
【0013】
オープンソースソフトウェア(OSS)の普及は、ソフトウェア開発における、以前に開発されたソフトウェア・エンティティの使用を増加させ、OSSの使用は、企業ソフトウェア開発においてさえも拡大した。状況によっては、企業や個々の開発者がOSS開発に貢献することもある。なぜなら、集団的な努力がより良い品質のソフトウェアにつながることが多いからであり、また、OSSの上に構築されたエコシステムは、典型的には、ソフトウェアのより多くの採用を誘引するからである。さらに、OSSの使用は、しばしば、開発者が特定のソフトウェア開発プロジェクトのために選択することができる利用可能なソフトウェア・エンティティを拡大する。しかしながら、OSSにおける利用可能なソフトウェア・エンティティの量が増加するにつれて、ソフトウェア開発者が適切なソフトウェア・エンティティを選択することは困難になる可能性がある。
【0014】
本開示において、「ソフトウェア・モジュール」への言及は、計算システムが一つまたは複数のタスクを実行することを可能にするように構成された一つまたは複数のルーチンを含むコードを指すことができる。いくつかの実施形態において、ソフトウェア・プログラムは、複数のソフトウェア・モジュールを含んでいてもよく、各モジュールは、ソフトウェア・プログラムの一つまたは複数の特定のタスクの実行を引き起こすように構成される。「ソフトウェア・エンティティ」への言及は、ソフトウェア・モジュール、ソフトウェア・プログラム、ソフトウェア・リポジトリ、ソフトウェア・パッケージ、ソフトウェア・イメージ、ソフトウェア・ファイル、ソフトウェア・チャート、任意の他の適切なソフトウェア・エンティティ、および/またはそれらの一つまたは複数の組み合わせを含みうる。追加的または代替的に、「ソフトウェア・エンティティ」は、上記のソフトウェア・エンティティのグループを含むことができる。
【0015】
よって、本開示は、ソフトウェア開発プロセスを支援するための実施形態を含む。特に、開示された実施形態は、ソフトウェア開発において使用するソフトウェア・エンティティを推奨する側面を含む。そのような特徴は、どのソフトウェア・エンティティが、関連するソフトウェア・アプリケーションの要件を満たすのに役立ちうるかを識別することによって、開発されたソフトウェアの品質を改善することができる。さらに、そのような特徴は、どのソフトウェア・エンティティが使用されうるかを識別するために使用される時間の量を減少させることによって、ソフトウェア・アプリケーションを開発するために使用される時間の量を減少させることができる。
【0016】
しかしながら、ソフトウェア・エンティティの推奨にはさまざまな課題がある。特に、適切なソフトウェア・エンティティ推薦を提供することは、多面的でありえ、特に、ソフトウェア開発者の環境、開発段階、意図、独自の選好などのさまざまな事情に依存しうる。よって、開示された実施形態は、ソフトウェア・プロジェクトのある種のタスクのためにある種のソフトウェア・エンティティを推奨するためにグラフニューラルネットワーク(GNN)モデルをトレーニングすることに関連する側面を含み、これは、そのような事情に対処するための柔軟性を提供しうる。そのような推薦は、特定のソフトウェア開発者および/または特定のソフトウェア開発プロジェクトに合わせて仕立てられることができる。
【0017】
開示された実施形態は、機械学習モデルであるGNNモデルを含み、これは、ソフトウェア開発において使用するためのソフトウェア・エンティティを推奨するようにトレーニングされうる。GNNモデルは、多層の粒度をもつ知識グラフに埋め込みスキーマを実装することができる。いくつかの実施形態において、ソフトウェア・プロジェクトのコードおよびクエリーが入力として使用されてもよく、ソフトウェア・プロジェクトのソフトウェア開発サイクルにおける諸段階に関連するソフトウェア推薦を含む出力が生成されてもよい。クエリーは、ソフトウェア・エンティティ推薦の要求〔リクエスト〕および/またはソフトウェア・エンティティ推薦のための基準を含みうる。
【0018】
ソフトウェア推薦は、それぞれが特定のタイプの動作を実行するように構成された一つまたは複数のソフトウェア・エンティティを含むことができる。計算は、さまざまなソフトウェア・エンティティの階層的関係をモデル化するマルチレベル知識グラフを介して実行されうる。開示された実施形態は、近傍埋め込みを集約することによってマルチモーダル・グラフ埋め込み(embedding)を生成するアルゴリズムを含んでいてもよい。推薦は、協働的なフィルタリングと連関規則マイニングを含むハイブリッドアプローチからされうる。追加的または代替的に、開示された構成は、ソフトウェア開発者の決定に応答する動的な推薦を可能にしうる。
【0019】
本開示の実施形態は、添付の図面を参照して説明される。
【0020】
図1は、ソフトウェア・アプリケーションのソフトウェア開発サイクル100の一例を示す図である。ソフトウェア開発サイクル100は、要件および計画フェーズ102、設計フェーズ104、開発フェーズ106、テストフェーズ108、および展開フェーズ110を含むことができる。相互接続矢印によって示されるように、フェーズ102~110は、ソフトウェア開発サイクル100を通じて繰り返されてもよい。以下にさらに詳細に説明するように、開示された実施形態は、112で示されるように、ソフトウェア開発サイクル100で使用される既存のソフトウェア・エンティティを推薦することによって、計画フェーズ102、設計フェーズ104、および開発フェーズ106において支援することができる。
【0021】
いくつかの状況では、ソフトウェア開発サイクル100はコンテナ化を含むことができる。コンテナ化は、ソフトウェア・アプリケーションを、対応するライブラリ、フレームワーク、および構成ファイルと共にパッケージングして、ソフトウェア・アプリケーションが種々のコンピューティング環境で効率的に実行されうるようにすることを含む。このようにして、コンテナは、ソフトウェア開発および展開の標準化された単位であってもよく、また、独立したソフトウェア・エンティティとみなされてもよい。コンテナ化は、大きなオーバーヘッドに起因する無駄な計算資源を減らす可能性がある。さらに、コンテナ化は、ソフトウェア開発者が既存のソフトウェア・エンティティを容易に再利用することを可能にしうる。コンテナの一例は、ドッカー(Docker)コンテナである。
【0022】
ソフトウェア開発サイクル100は、要件および計画フェーズ102および/または設計フェーズ104に対応して、開発者が、ソフトウェア開発目標のために使用されるべきソフトウェア・エンティティを選択することを含むことができる。ソフトウェア開発サイクル100は、開発フェーズ106に対応して、開発者が新しいソフトウェア・エンティティを開発したり、あるいは既存のソフトウェア・エンティティをソフトウェア開発目標のために使用されるよう適応させたりすることを含んでいてもよい。開示された実施形態は、要件および計画フェーズ102、設計フェーズ104、および/または開発フェーズ106に対応する適切なソフトウェア・エンティティの選択を支援することができる。
【0023】
特に、ソフトウェア開発サイクル100には、ソフトウェア・エンティティに関する推薦が役に立ちうる種々の状況がありうる。開示された実施形態は、ソフトウェア開発サイクル100を通して推薦を提供する柔軟性を提供することができる。さらに、開示された実施形態は、たとえば、履歴ユーザーデータおよび追加のデータセットを使用して、動的におよび/または逐次反復的に微調整されてもよい。
【0024】
一例では、ユーザーは、特定のソフトウェア・エンティティを要求することができ、および/または、部分的に完了したプロジェクトに対応するコンテキストなしに、目的のユーザー入力(たとえば、クエリー記述)を提供することができる(たとえば、プロジェクトの開始時に)。別の例では、ユーザーは、特定のソフトウェア・エンティティを要求することができ、および/または部分的に完了したプロジェクトに対応する追加的なコンテキストをもつ目標のユーザー入力(たとえば、くエリー記述)を提供することができる。さらに別の例では、ユーザーは、ある種の目的または基準(たとえば、バージョン、オペレーティング・システム、プログラミング言語、ソフトウェア開発サイクルにおけるステージ〔段階〕など)を満たす代替的だが等価な推薦を要求することができる。さらに別の例では、ユーザー入力は、ソフトウェア開発サイクル100において利用されるパッケージを含んでいてもよい。開示された実施形態は、上述の例についての推薦を提供することができる。
【0025】
設計フェーズ104の間の推薦については、ユーザーは、ソフトウェア要件について漠然としたアイデアしかもたなくてもよく、特定のプロジェクトのためにソフトウェア・エンティティが採用されていなくてもよい。そのような状況では、ユーザーは、目的および/または基準を記述するために、たとえば、自然言語、キーワード、アプリケーションのカテゴリーなどを含むユーザー入力を提供することができる。
【0026】
開発フェーズ106の間の推薦については、ソフトウェア開発プロジェクトがソフトウェア開発サイクル100においてさらに進んでいるので、ユーザーは、追加の要件をもつことがある。たとえば、いくつかのソフトウェア・エンティティが、ソフトウェア開発プロジェクトのためにすでに選択されていることがある。追加的または代替的に、ユーザーは、特定の特徴を有するソフトウェア・エンティティを探すことができる。そのような状況では、ユーザーは、たとえば、ソフトウェア開発プロジェクトのためにすでに実装または選択されたソフトウェアコンポーネント(たとえば、ソフトウェア開発サイクル100において利用されるパッケージ)を含むユーザー入力を提供することができる。
【0027】
いくつかの実施形態において、システムは、ユーザー入力に基づいて、ソフトウェア開発プロジェクトのために使用されるソフトウェア・エンティティの推薦を提供することができる。上述のように、ユーザー入力は、ソフトウェア開発サイクル100のフェーズに応じて変化してもよく、その結果、推薦は、ソフトウェア開発サイクル100のフェーズに応じて変化してもよい。生成された推薦については、以下でさらに詳細に考察する。
【0028】
図2は、本開示に記載される少なくとも1つの実施形態に従って構成された、ソフトウェア開発のためのソフトウェア推薦に関する例示的な環境200を示す図である。環境200は、たとえば、ソフトウェア開発サイクル100を支援するために実装されてもよい。特に、環境200は、ソフトウェア開発サイクル100で使用される既存のソフトウェア・エンティティを推薦することによって、計画フェーズ102、設計フェーズ104、および開発フェーズ106を支援することができる。
【0029】
環境200は、知識グラフ・モジュール204を含むことができ、これは、一つまたは複数のリポジトリ・ソースから以前に開発されたソフトウェア・エンティティを表すソフトウェア・アーチファクト202を受け取ることができる。知識グラフ・モジュール204は、ソフトウェア・アーチファクト202に基づいて知識グラフ206を構成することができる。特に、知識グラフ・モジュール204は、一つまたは複数のリポジトリ・ソースから受領されたソフトウェア・アーチファクト202を表すよう、知識グラフ206を構築することができる。たとえば、知識グラフ206は、ソフトウェア・アーチファクト202をノードとして表し、ソフトウェア・アーチファクト202間の関係をエッジとして表すことができる。
【0030】
環境200は、知識グラフ206を使用してGNNモデル210をトレーニングするGNNモジュール208を含んでいてもよい。GNNモデル210は機械学習モデルであってもよい。GNNモデル210は、ソフトウェア開発目標のために、ソフトウェア・アーチファクト202によって表される、以前に開発されたソフトウェア・エンティティの一つまたは複数を推薦するようにトレーニングされてもよい。いくつかの実施形態では、GNNモデル210は、既存のソフトウェア・エンティティの異なるタイプを表す異なるタイプのノードを含み、階層的であってもよい。
【0031】
環境200は、ユーザー入力212(たとえば、ソフトウェア開発者であるユーザーからの入力)を受領する入力埋め込みモジュール214を含んでいてもよい。ユーザーは、ユーザーからの入力を受け取るように構成されたユーザー・インターフェース211を介してユーザー入力212を入力することができる。いくつかの実施形態では、ユーザー入力212は、自然言語クエリーまたは自然言語テキストを含んでいてもよい。ユーザー入力212は、ソフトウェア開発目標において利用されるパッケージを含んでいてもよい。追加的または代替的に、他の適切な入力が実装されてもよい。入力埋め込みモジュール214は、ユーザー入力212を埋め込みに変換してもよい。いくつかの側面において、ユーザー入力212の埋め込みは、他のモダリティ(たとえば、トピック埋め込み、パッケージの埋め込み、および/または他のソフトウェア・モジュールの埋め込み)と組み合わされて、マルチモーダル埋め込みを生成してもよい。特に、入力埋め込みモジュール214は、ユーザー入力212において提供された自然言語クエリーおよび/または他の情報からマルチモーダル埋め込みを生成することができ、これは、連続ベクトル空間において知識グラフ206のエンティティおよび関係を表すことができる。いくつかの構成では、ユーザー・インターフェース211は、知識グラフ206を表示するように構成されてもよく、該知識グラフは、たとえば、ソフトウェア・アーチファクトを表すノードと、ソフトウェア・アーチファクト間の関係を表すエッジとを含んでいてもよい。
【0032】
よって、入力埋め込みモジュール214は、以下にさらに詳細に説明するように、ユーザー入力212から埋め込みを生成することができる。いくつかの構成では、ユーザー入力212を埋め込みに変換することは、擬似ノードを生成すること、および/または擬似ノードを知識グラフ206に追加することを含んでいてもよい。擬似ノードは、要件の記述、キーワード、フィルタリングオプション、採用されたパッケージなどの任意の適切な情報を含んでいてもよい。擬似ノードは、その階層内のさまざまなレベルで知識グラフ206に追加および/または結線されてもよい。よって、擬似ノードは、該擬似ノードと知識グラフ206内の他のノードとの間の関係を表すエッジを含んでいてもよい。
【0033】
ノード識別モジュール216は、入力埋め込みモジュール214から埋め込みおよび/または擬似ノードを受領することができ、GNNモデル210を用いて知識グラフ206内の類似のノードまたは近くのノードを検索することができる。よって、ノード識別モジュール216は、ユーザー入力212クエリーに対応する埋め込みまたは擬似ノードに類似する、知識グラフ206内のノードを識別することができる。GNNモデル210は、知識グラフ206内の擬似ノードのための新しいグラフ埋め込みを生成するためにパラメータを使用してもよい。そのような側面は、以下でさらに詳細に説明される。
【0034】
後処理モジュール218は、ノード識別モジュール216から同様のノードを受け取ることができ、推薦220を生成することができる。後処理モジュール218は、ノード識別モジュール216によって識別される類似のノードに基づいて推薦220を生成することができる。推薦220は、ソフトウェア開発目標(たとえば、ソフトウェア開発サイクル100)のために使用されるソフトウェア・アーチファクト202によって表される、リポジトリ・ソースから、先に開発されたソフトウェア・エンティティの一つまたは複数を含んでいてもよい。いくつかの構成では、フィルタリングは、生成された推薦220に適用することができ、および/または推薦220がユーザーに(たとえば、ユーザー・インターフェース211を介して)呈示されてもよい。
【0035】
図2を引き続き参照して、環境200の種々の側面が、より詳細に説明される。ソフトウェア・アーチファクト202は、さまざまな既存のソフトウェア・エンティティを表しうる。いくつかの構成では、既存のソフトウェア・エンティティはOSSエンティティであってもよいが、記載された構成は、任意の適切なソフトウェア・エンティティに適用可能である。
【0036】
ソフトウェア・アーチファクト202によって表されうるOSSエンティティが、潜在的な既存のソフトウェア・エンティティを例示するための例として記述される。ソフトウェア・アーチファクト202は、一つまたは複数のOSSパッケージまたはOSSライブラリを含むことができ、これらは、他のソフトウェアによって再利用される特定の機能をサポートすることができる。OSSパッケージは、スタンドアローンのオープンソース・ソフトウェア・エンティティであってもよい。いくつかの側面において、OSSパッケージは、一つまたは複数の他のOSSパッケージへの依存性をもつ可能性がある。ソフトウェア・アーチファクト202は、一つまたは複数のDockerfile〔ドッカーファイル〕を含んでいてもよく、該Dockerfileは、イメージをアセンブルするためにユーザーがコマンドライン上で呼び出すことができるコマンドを含むテキスト文書を含んでいてもよい。DockerfileはOSSパッケージをインポートするために使用されることがあり、Dockerベース・イメージを含むことがある。ソフトウェア・アーチファクト202は、一つまたは複数のDockerイメージまたはDockerベース・イメージを含んでいてもよい。Dockerイメージは、Dockerコンテナのインスタンスであってもよい。Dockerイメージは、Dockerfileから構築されてもよく、これは、上述のように、OSSパッケージをインポートすることができ、Dockerベース・イメージを含むことができる。
【0037】
ソフトウェア・アーチファクト202は、一つまたは複数のリポジトリを含むことができ、該リポジトリは、通例、完全なプロジェクトまたはアプリケーションに対応する、任意のスケールのソフトウェア・エンティティの集合を含むことができる。リポジトリは、OSSパッケージ、Dockerイメージ、Docker-composeファイル、および/または他の適切なソフトウェア・エンティティを含むことができる。リポジトリのいくつかの例は、GitHubおよびDockerHubを含むが、任意の適切なリポジトリが実装されうる。ソフトウェア・アーチファクト202は、アプリケーションのサービスのための構成(configuration)ファイルを含んでいてもよい一つまたは複数のDocker-composeファイルを含んでいてもよい。Docker-composeファイルは、マルチコンテナDockerアプリケーションを定義し、実行するために実装されてもよい。Docker-composeファイルは、Dockerイメージの形で複数のコンテナを含んでいてもよい。ソフトウェア・アーチファクト202は、一つまたは複数のHelmチャートを含んでいてもよい。Helmチャートは、クバネティス(Kubernetes)資源の関係したセットを記述するファイルの集合(collection)を含んでいてもよく、ディレクトリ内のファイルの集合として組織化されてもよい。Helmチャートは、他のHelmチャートへの依存性をもつ可能性があり、Dockerイメージを含む可能性がある。
【0038】
既存のソフトウェア・エンティティは、互いにさまざまな関係および相互依存性を有しうる。そのような関係は、知識グラフ206のような知識グラフによって記述されうる。よって、ソフトウェア・アーチファクト202は、既存のソフトウェア・エンティティ間のさまざまな関係を表しうる知識グラフ206によって記述することができる。
【0039】
図3は、知識グラフ300の一例の図である。知識グラフ300は、環境200の知識グラフ206に対応しうるが、他の適切な知識グラフが本明細書に記載される概念に従って実施されうる。図示の知識グラフ300では、さまざまなソフトウェア・エンティティがノードによって表される。エッジは、ノードを相互接続するラインによって表され、ノード間のさまざまな関係を表す。知識グラフ300のノードは、上述の環境200のソフトウェア・アーチファクト202に対応しうる。
【0040】
図示された知識グラフ300は、GithubリポジトリG1-G3およびDockerHubリポジトリDH1などのさまざまなリポジトリを含む。知識グラフ300はまた、OSSパッケージp1-p10、DockerイメージD1-D9、Docker-composeファイルDC1、およびHelmチャートH1-H3を含む。破線で示されるように、知識グラフ300は、異なるタイプに基づいてさまざまなノードをグループ化することができる。よって、知識グラフ300は、OSSパッケージp1-p10、DockerイメージD1-D9、Docker-composeファイルDC1、およびHelmチャートH1-H3のための異なる層を含むことができる。リポジトリG1-G3およびDH1のうちの1つのためのノードは、他のソフトウェア・エンティティに対応する。図示された構成では、リポジトリG1-G3およびDH1は、それら自身のノードによってモデル化される。他の構成では、リポジトリG1-G3およびDH1の関連エンティティは、知識グラフ300内の別個のノードとして分散されてもよい。
【0041】
知識グラフ300のノード間の関係は、エッジによって表される。知識グラフ300は、複数の異なるタイプのエッジ関係を含んでいてもよい。たとえば、Dockerイメージは、該OSSパッケージに接続されることがある(そのDockerfileがそのパッケージをインストールする場合)。OSSパッケージは、他のOSSパッケージに接続されることがある(該他のパッケージに依存する(つまり、コードにおいてインポートされている)場合)。ノード間の他の関係もまた、知識グラフ300で表すことができる。
【0042】
開示された構成では、知識グラフ300のノードは、複数の機能を有してもよい。たとえば、ノードは、それ自身の属性をもって独立して機能することができ、および/またはノードは、他のノードの集合として機能することができる。第1の個別の機能はノードの内容的意味であってもよく、第2のグループ化された機能はコードの組み合わせを学習するための情報であってもよい。他の構成ノード(constituent node)を含まないソフトウェア・エンティティを象徴するノードは、原子ノードと呼ばれる。他の構成ノードを含むソフトウェア・エンティティを象徴するノードは、複合ノードと呼ばれることがある。そのような構成では、複合ノードは、それ自身のプロパティを含みうるが、構成ノードに関連するプロパティも含みうる。そのような依存性が機能的に無関係である場合、ノードは機能的に原子的である可能性がある(たとえば、ユーザーは、その依存性を考慮することなく、パッケージを自分のプロジェクトにインポートできる)。
【0043】
上述のように、知識グラフ(知識グラフ300および/または知識グラフ206のような)を使用して、GNNモデル210のようなGNNモジュールをトレーニングすることができる。特に、GNNモジュール208は、知識グラフ206を使用してGNNモデル210をトレーニングすることができる。よって、図2および図3を参照して、GNNモデル210のトレーニングをより詳細に説明する。
【0044】
いくつかの構成では、GNNモデル210のトレーニングは、(たとえば、GNNモジュール208によって)機械学習グラフ畳み込みアルゴリズムを使用して情報を集約することを含んでいてもよい。特に、機械学習グラフ畳み込みアルゴリズムは、知識グラフ300上の近傍からの情報、たとえば埋め込み情報を集約するために実装されてもよく、その結果、近接していると考えられるエンティティのペアは埋め込み空間において近く埋め込まれる。適切なアルゴリズムの一例は、GraphSAGEアルゴリズムを含みうる。GraphSAGEアルゴリズムは、(両方向の)構成情報を利用して、不十分なまたは欠落している記述埋め込みを補強することができる。近傍からの埋め込み情報を集約するためにGraphSAGEアルゴリズムを使用することは、属性(attribute)のないノードのための埋め込み構築(すなわち、ヌル埋め込み)と同様に、リコール(recall)に関して全体的な埋め込み品質の補強を可能にしうる。
【0045】
いくつかの構成では、GNNモデル210をトレーニングするためにトレーニング・データを使用することができる。トレーニング・データは、ノード埋め込みを生成するために使用できる。一例では、トレーニング・データは、Dockerノードのペアを含むことができる。Dockerノードは、ノードが一つまたは複数のパッケージを共有しているかどうかに依存して±1のラベルを付けられてもよい。追加的または代替的に、使用されうるトレーニング・データは、GNNモデル210を評価するために使用されうる。トレーニング・データは、パッケージの部分的にマスクされたリストを有するDockerノードを含むことができる。トレーニング・データは、GNNモデル210に結線されてもよく、k近傍アルゴリズム(k-nearest neighbor algorithm)を介した協働的フィルタリングが、これらのマスクされたパッケージを予測する試みに適用されてもよい。ひとたび予測が生成されると、それは、GNNモデル210の有効性を決定するために評価されうる。
【0046】
別の例では、トレーニング・データは、Docker-composeノードの対を含むことができる。Docker-composeノードは、ノードが一つまたは複数のDockerイメージを共有しているかどうかに依存して±1のラベルを付けられてもよい。トレーニング・データは、Dockerイメージのマスクされたリストを有するDocker-Composeノードを含むことができる。上述のように、トレーニング・データは、GNNモデル210をトレーニングするために使用され、トレーニング・データは、GNNモデル210に結線されてもよく、k近傍アルゴリズムを介した協働的フィルタリングが、これらのマスクされたパッケージを予測するために適用されてもよい。
【0047】
さらに別の例では、トレーニング・データは、パッケージ・ノードの対を含むことができる。これは、それらのノードがDockerfileに共インポートされる(co-imported)かどうかに依存して±1でラベル付けされる。トレーニング・データは、ペア(q,i)を含んでいてもよい。パッケージqについての埋め込みを与えられると、パッケージは、その最も近い近傍を考慮することによって、iをリコールされる(recalled i)ことができる。ひとたび予測が生成されると、それは、GNNモデル210の有効性を決定するために評価されうる。
【0048】
いくつかの構成では、アルゴリズムは、知識グラフ300のある種のエッジを考慮するまたは考慮しない、いくつかのエッジを他のエッジと異なるように重み付けする、該ノードに依存する諸エッジを通じて異なるランダムウォークを実行する、などするように構成されてもよい。追加的または代替的に、知識グラフ300のグラフ構造は、たとえ知識グラフ300のエッジが等しく処理されても、生成されたグラフ埋め込みに基づいてさまざまな結果を決定することができる。
【0049】
アルゴリズムは、知識グラフ300のどのエンティティまたはノードが互いに近接していると考えられるかを決定するように構成されてもよい。たとえば、リポジトリのペア、Dockerfilesで共インポートされるパッケージのペア、他のパッケージに依存するパッケージ、Docker-Composeファイル内で共インポートされるDockerイメージなどは、互いに近接していると見なされてもよい。追加的または代替的に、近接性は、知識グラフ300において類似および/または近接する対に基づいて定義されてもよい。いくつかの構成では、アルゴリズムは、新たに得られたデータに応答して調整または洗練され、ユーザー入力が与えられれば、埋め込みは、連続的にまたは逐次反復的に生成されうる。
【0050】
いくつかの構成では、GNNモデル210は、肯定的な例として、共インポートされた原子ノードの対(たとえば、Dockerfileにおいてインポートされたパッケージの対)を用いてトレーニングされうる。そのような構成では、擬似ノードは、知識グラフ300内の別のパッケージまたはDockerイメージとして(たとえば、原子ノードとして)作用することができる。
【0051】
他の構成では、GNNモデル210は、肯定的な例として、重複する複合ノードのペア(たとえば、インポートされたパッケージの自分のセットにおいて重複するDockerfileのペア)を用いてトレーニングされうる。そのような構成において、擬似ノードは、あたかもそれがパッケージとイメージの集合をもつリポジトリであるかのように(たとえば、複合ノードとして)作用することができる。
【0052】
アルゴリズムは、知識グラフ300の異なる層にわたって推薦を提供するように構成されてもよい。特に、アルゴリズムは、知識グラフ300の任意の層においてソフトウェア・エンティティを推薦し、他の層の相互接続を、その層における埋め込みのためのコンテキストとして使用するように構成されてもよい。
【0053】
構成によっては、提供される推薦は、原子ノードまたは機能的原子ノードと、対応するソフトウェア・エンティティ推薦のみを含んでいてもよい。よって、推薦は、たとえば、Dockerイメージおよび/またはパッケージを含んでいてもよい。なぜなら、これらのエンティティは原子的または機能的に原子的であるからである。対照的に、複合ノードは推薦において提供されなくてもよい。むしろ、複合ノードは、協働的フィルタリングにおけるそれらの役割と、それらが提供する共起(co-occurrence)情報にとって有意である。いくつかの側面において、機能性および関連性を決定する際にパッケージ依存性が考慮される場合には、パッケージは構成要素を有することもある。
【0054】
いくつかの構成では、アルゴリズムおよび/またはGNNモデル210がトレーニングされた後、擬似ノードが、知識グラフ206および/または知識グラフ300中に作成または結線されてもよい。たとえば、図3において、擬似ノードXが、知識グラフ300中に作成、追加、および/または結線されてもよい。擬似ノードXは、要件の記述、キーワード、フィルタリングオプション、採用されたパッケージなどのような任意の適切な情報を含んでいてもよい。
【0055】
いくつかの構成では、図2のユーザー入力212のようなユーザー入力に基づいて擬似ノードXが生成されてもよい。いくつかの状況では、ユーザー入力212は、ソフトウェア開発プロジェクトの要件または基準の自然言語記述、ソフトウェア開発プロジェクトに関連するキーワード;フィルタリングオプションまたは基準;アプリケーションカテゴリー選択;ソフトウェア・エンティティまたはソフトウェア・エンティティのグループの選択;選択の確認;ソフトウェア開発プロジェクトにおいて利用されるパッケージおよび/または他の適切なユーザー入力を含むことができる。
【0056】
いくつかの側面では、知識グラフ300に擬似ノードXを追加することは、擬似ノードXのための埋め込みを生成することを含んでいてもよい。たとえば、入力埋め込みモジュール214は、ユーザー入力212を受け取ってもよく、ユーザー入力212を埋め込みに変換することができる。一例では、埋め込みは、トランスフォーマーからの双方向エンコーダ表現(Bidirectional Encoder Representations from Transformers、BERT)埋め込みを含んでいてもよい。さらに、擬似ノードXについての埋め込みをもつ(たとえば、該埋め込みを属性として含む)擬似ノードXを表現するために、新しいノードが知識グラフ300に追加されてもよい。
【0057】
擬似ノードXは、パッケージ、Dockerイメージまたは他の適切なアーチファクトのようなアーチファクトと関連付けることができる。擬似ノードXに関連する各アーチファクトについて、擬似ノードXから知識グラフ300内の該アーチファクトのそれぞれのノードに、エッジ接続が追加されうる。たとえば、図3に示されるように、擬似ノードXは、パッケージp2およびp7ならびにDockerイメージD2へのエッジを含む。
【0058】
いくつかの構成では、機械学習グラフ畳み込みアルゴリズムは、擬似ノードXのための埋め込みを生成するために使用されてもよい。適切なアルゴリズムの一例は、GraphSAGEアルゴリズムを含みうる。該アルゴリズムは、前述のように、事前トレーニングされたパラメータを使用して実行されうる。擬似ノードXが該アルゴリズムのための入力として使用されてもよく、該アルゴリズムの出力は、擬似ノードXの埋め込み(たとえば、GraphSAGE埋め込み)であってもよい。
【0059】
いくつかの構成では、GraphSAGEアルゴリズムは、マルチモーダル埋め込みを生成するように実装されてもよい。知識グラフ300のノードから抽出可能な情報に応じて、さまざまなマルチモーダル埋め込みが生成されうる。埋め込みの種類は、子ノード、トピックモデル埋め込み、コード埋め込み、および自然言語埋め込みのワンホット(one-hot)表現、ならびにノードのタイプおよび次数のような補助的な情報を含みうる。
【0060】
上述したように、擬似ノードXは、知識グラフ206中に作成または結線されてもよい。いくつかの側面では、マルチモーダル埋め込みは、連結されうる。結線で組み込まれた(wired-in)擬似ノードXのエッジおよび連結された埋め込みは、GraphSAGEアルゴリズムに入力されてもよい。GraphSAGEアルゴリズムの出力は、新しく追加された擬似ノードXのグラフ埋め込みであってもよい。
【0061】
たとえば、GitHubリポジトリからの情報には、キーワード、トピック、記述、および可読テキストを含んでいてもよい。結果は、記述フィールドから生成される事前トレーニングされたBERT埋め込み(これはたとえば、スタックオーバーフロー・ポスト上でトレーニングされうる)、記述フィールドおよび/またはキーワードから生成される潜在的意味解析トピックベクトル、ノードタイプ(たとえば、パッケージ、Docker、Docker composeなど)、およびノード次数(degree)の対数を用いて生成されうる。これらの埋め込みの連結が、コサイン類似性を使って最も近い近傍埋め込みを識別するために実装されうる予備的な推薦システムにおいて使用されてもよい。いくつかの構成では、GraphSAGEアルゴリズムは、近傍(たとえば、近傍ノード)を決定するためにランダムウォークを用いて実装されてもよい。
【0062】
上述のように、入力埋め込みモジュール214は、ユーザー入力212を埋め込みに変換することができる。図2および図3を引き続き参照して、ユーザー入力212を埋め込みに変換することが、より詳細に説明される。入力埋め込みモジュール214は、自然言語記述(たとえば、ソフトウェア開発プロジェクトのための所望の基準の記述)および/またはソフトウェア開発目標において利用されるパッケージを含むことができるユーザー入力212を受け取ることができる。次いで、入力埋め込みモジュール214は、自然言語記述から埋め込みを生成することができる。入力埋め込みモジュール214は、自然言語記述がトピック・キーワードを含むかどうかを識別するように構成されてもよい。自然言語記述がトピック・キーワードを含むことに応答して、入力埋め込みモジュール214は、トピック・キーワードに基づいてトピック埋め込みを生成することができ、たとえば図3に示されるように、擬似ノードXからトピック複合ノードへの結線(wire-in)リンク(たとえば、エッジ)を追加することができる。
【0063】
トピック埋め込みが生成された後、入力埋め込みモジュール214は、トピック埋め込みが、採用されたソフトウェア・モジュールまたはソフトウェア・モジュールのグループを含むかどうかを決定することができる。トピック埋め込みが、採用されたソフトウェア・モジュールまたはソフトウェア・モジュールのグループを含むことに応答して、入力埋め込みモジュール214は、たとえば図3に示されるように、擬似ノードXからトピック複合ノードに結線リンク(たとえば、エッジ)を追加することができる。
【0064】
ひとたび仮想ノードXからトピック複合ノードへ、知識グラフ300に結線リンク(たとえば、エッジ)が追加されると、入力埋め込みモジュール214は、結線リンク(たとえば、エッジ)と共に埋め込みを連結して、たとえば図3に示されるように、新しく作成された擬似ノードXのためのグラフ埋め込みを生成するように進行してもよい。
【0065】
よって、入力埋め込みモジュール214は、知識グラフ300内でエッジを用いてマルチモーダル埋め込みを連結して、擬似ノードXのためのグラフ埋め込みを生成することができる。特に、入力埋め込みモジュール214は、マルチモーダル埋め込みを連結してもよく、結線で組み込まれた擬似ノードXのエッジおよび連結された埋め込みが、アルゴリズム(たとえば、GraphSAGEアルゴリズム)に入力されてもよい。アルゴリズムの出力は、擬似ノードXのグラフ埋め込みであってもよい。
【0066】
状況によっては、k近傍アルゴリズムが他のノードの記述の非GraphSAGE埋め込みに適用されてもよい。非GraphSAGE埋め込みの例は、BERT埋め込みの連結、トピックモデリング埋め込み、および/または出て行くエッジのワンホット埋め込みを含む。エッジを形成する相手となるパッケージが提供されていない可能性があるため、このような状況ではGraphSAGEは実装されない可能性がある。そのような状況では、知識グラフ300の意味に統合するためにユーザー入力212によって提供されたコンテキストがないため、GraphSAGEステップは実装されなくてもよい。たとえば、ユーザー入力212がターゲットソフトウェアエンティティのみを参照する場合である。上記で説明したように、GraphSAGEは埋め込みの意味にコンテキストを統合するために使われてもよい。よって、この状況では、埋め込みの意味は、上述のGraphSAGEの集約ステップによって形成されたものではなく、生の原子ノードのものでありうる。
【0067】
ユーザー入力212がソフトウェア・エンティティを要求する状況では、埋め込まれたクエリーに最も近い埋め込みが返されてもよい。ユーザー入力212において提供される自然言語記述は、原子ノードと考えられてもよい。ユーザー入力212の非GraphSAGE埋め込みへのk最近接近傍は、機能的原子ノード(たとえば、Dockerベース・イメージまたは特定の関数を有するパッケージ)の非GraphSAGE埋め込みを横断して検索して、返されてもよい。
【0068】
ユーザー入力212がソフトウェア開発目標を高レベルで記述する状況では、ユーザー入力212において提供される自然言語記述は、複合ノードとみなされうる。ユーザー入力212の非GraphSAGE埋め込みへのk最近接近傍は、複合ノード(たとえば、GitHubリポジトリ、Dockerfiles、Docker-Composeファイル、Helmチャートなど)の非GraphSAGE埋め込みを横断し検索して、返されてもよい。協働的フィルタリングは、最も頻繁に使用されるソフトウェア・エンティティを決定するために、最も近い複合ノードで実行されうる。協働的フィルタリングは、最も頻繁に使用される機能的原子ノード(たとえば、ソフトウェア・エンティティのグループ内に存在しうるDockerベース・イメージまたはパッケージ)を返すために使用されうる。
【0069】
記述のGraphSAGE埋め込みは、他のノードのものと比較されうる。一例では、複合ノードは、擬似ノードXの完成したユーザープロジェクトに類似するように再構築されてもよい。ユーザー入力212において提供されるソフトウェア・エンティティは、完了したプロジェクトのフラグメントとして扱われてもよく、完了したプロジェクトは、提供されたソフトウェア・エンティティに基づいて知識グラフ300で再構築されてもよい。別の例では、GraphSAGE埋め込みは、ユーザーの従属パッケージのそれぞれのルックアップテーブルを介して評価されうる。従属パッケージは、たとえば、それらが現れる従属パッケージまたはリポジトリからの集約された情報を含んでいてもよい。
【0070】
上述のように、後処理モジュール218は、ノード識別モジュール216から同様のノードを受け取り、推薦220を生成することができる。一例では、ユーザー入力212は、特定のオペレーティング・システムと互換性のあるソフトウェア・エンティティを識別するための要求を含むことができる。そのような状況では、推薦220は、いかなる特定のオペレーティング・システム、プログラミング言語、ソフトウェア開発サイクル、およびバージョン情報にも関係ない、抽象化されたスーパー・ノードを含んでいてもよい。ソフトウェア・エンティティについての推薦のためのすべての代替オプションは、ユーザーが閲覧および/またはフィルタリングするために、このノードにおいて凝縮されてもよい。知識グラフ206内のポインタは、ソフトウェア・エンティティについての推薦を説明するために使用されてもよい。これらのポインタは、知識グラフ206を通じて含まれ、別のバージョン、オペレーティング・システム、プログラミング言語、ソフトウェア開発ステージなどでのソフトウェア・エンティティの等価なバージョンの間のハイウェイを形成することができる。いくつかの構成では、ソフトウェア・エンティティの代替バージョンのリコールを許容するために、推薦は、単一のスーパー・ノードに折りたたむことができる。たとえば、推薦220は、「NumPy」に対応するが、ユーザーが提供したフィルタリング情報(たとえば、自然言語で提供され、バージョンまたは他の互換性要件を指定する)を考慮した、スーパー・ノードを含んでいてもよい。よって、推薦220は、スーパー・ノード内にNumPyの最良一致バージョンを含むことができる。
【0071】
開示された実施形態において、ユーザーは、(ユーザー入力212を介して)ソフトウェア・エンティティまたはソフトウェア・エンティティのグループ(たとえば、ソフトウェアパッケージ)を選択することができる。追加的または代替的に、ユーザーは、提案されたパッケージの中から、ソフトウェア・エンティティを追加または除去することを選択することができる。ユーザーがソフトウェア・エンティティのグループを追加/除去すると、知識グラフ300内の擬似ノードXの関連付けが変化することがある(たとえば、擬似ノードXの結線が変化する)。異なる結線は、アルゴリズム(たとえば、GraphSAGEアルゴリズム)のランダムウォークによって訪れられる近傍の異なるセットにつながる。その結果、よりコンテキストを与えられた埋め込みと、さらには改善された推薦220が得られる。よって、ユーザーがユーザー入力212を追加すると、知識グラフ300の結線が変化し、結果として、異なるGraphSAGE埋め込み、よって、異なる推薦が得られる。いくつかの構成では、ユーザーは、逐次反復的に、推薦に基づいてユーザー入力を提供し、異なる推薦を生成してもよい。よって、ユーザー入力212および推薦220プロセスは、逐次反復的または循環的であってもよい。さらに、このプロセスはこのため適応的であってもよく、ソフトウェア開発プロセスが進行するにつれて、推薦が適応されうる。
【0072】
いくつかの構成では、GNNモデル210のために使用される関連した要素のリストを生成するために、マイニングされた連関規則が使用されてもよい。マイニングされた連関規則は、"P→Q"の形の規則を含んでいてもよい。規則は、連関規則マイニングを介して得ることができる。一例では、Aprioriアルゴリズムを使用して、規則を識別することができる。ユーザーがユーザー入力212に一つまたは複数の現在のアプリケーション要素(たとえば、NumPy、mongoなど)を提供する場合、現在のアプリケーション要素は、マイニングされた連関規則のいずれかの前提条件(単数または複数)と一致するかどうかを決定するために評価されうる。現在のアプリケーション要素がマイニングされた連関規則に一致するかどうかに基づいて、事後条件が推薦されてもよい。いくつかの構成では、前記推薦について、リフトやサポートのようなメトリックから、信頼値が決定されてもよい。
【0073】
上述したように、協働的フィルタリングは、最も頻繁に使用されるソフトウェア・エンティティを決定するために、最も近い複合ノードで実行されてもよく、協働的フィルタリングは、最も頻繁に使用される機能的原子ノードを返すために使用されてもよい。協働的フィルタリングは、ユーザー‐アイテムの協働的フィルタリング(user-item collaborative-filtering)を含んでいてもよい。ここで、ユーザー対ユーザーの類似度メトリックがコサイン類似度である。複合ノード(たとえば、リポジトリ、Docker-composeファイル、Dockerfile、Helmチャートなど)は、ユーザーに対応し、機能的原子ノード(たとえば、Dockerイメージ、パッケージ)は、アイテムに対応する。k近傍複合ノード(ユーザー)から、構成要素の原子ノード(アイテム)を推薦するために、任意の適切な協働的フィルタリングアルゴリズムが実装されてもよい。いくつかの構成では、上述の推薦手順から得られたスコアの加重平均を得ることによって、マージステップが実行されうる。この重みは、試験中、別のハイパーパラメータとして扱われてもよい。
【0074】
いくつかの構成では、推薦220は、ソフトウェア開発プロジェクトの欠落している要素の識別情報を含んでいてもよい。たとえば、推薦220は、ユーザーのソフトウェア開発プロジェクトから欠落している可能性のあるソフトウェア・モジュールを含んでいてもよい。そのような構成では、ソフトウェア開発プロジェクトから欠落していると決定されたソフトウェア・モジュールを含む推薦220を生成するために、上述の推薦手順が実装されてもよい。
【0075】
一例では、部分的に完成されたGitHubリポジトリを評価して、ソフトウェア・プロジェクトがソフトウェア開発サイクル100内のどこにあるかを決定することができる。推薦220においてユーザーに推薦されるソフトウェア・エンティティは、ソフトウェア開発サイクル100の段階に応じて変化しうる。ソフトウェア・プロジェクトが展開のための準備がほぼできたことに対応して、推薦220は、パッケージ(たとえば、PyTorch)のような高粒度のソフトウェア・エンティティを含まなくてもよい。その代わりに、推薦220は、マルチコンテナ・アーキテクチャーまたは他のコンテナを含んでいてもよい。
【0076】
ソフトウェア開発サイクル100内の段階の推定は、いくつかの異なる方法で行うことができる。一例では、ソフトウェア開発サイクル100内のユーザーの段階を推定するために、経験則による推論が実施されてもよい。そのような構成では、ソフトウェア開発プロジェクトのために使用される平均的な数のDockerイメージ(average numbers of Docker images)に関する統計を収集することができる。次いで、ソフトウェア開発サイクル100の段階は、ある種のエンティティが存在しないことに基づいて推測されうる。たとえば、ユーザーがDockerイメージを持っていない場合、ユーザーは開発段階にある可能性が高い。追加的または代替的に、この決定は、ユーザー対話から動的に学ばれてもよい。
【0077】
別の例では、ソフトウェア開発サイクル100内の段階を推定するために、機械学習されたマルチクラス分類が実装されてもよい。そのような構成では、部分的に完成したプロジェクト・リポジトリの集合が構築され、取得され、属している段階によってラベルを付けされうる。次に、リアルタイム使用中にソフトウェア開発サイクル100の段階を推定するために、マルチクラス分類器アルゴリズム(たとえば、マルチクラス・サポートベクターマシン)がトレーニングされてもよい。
【0078】
さらに別の例では、ソフトウェア開発サイクル100内の段階を推定するために、ユーザー提供されるソフトウェア開発段階の分類が実装されてもよい。そのような構成では、ユーザーは、自分が従事しているソフトウェア開発サイクル100の段階を入力することができる。ユーザー入力に依存して、状況規則(situational rules)が実装されてもよく、いくつかの構成においては、ユーザー入力は、状況規則を含んでいてもよい。
【0079】
いくつかの構成では、後処理モジュール218によって作成された推薦220は、たとえば、Aprioriアルゴリズムを介して実行されうる連関規則マイニング(Association Rule Mining、ARM)で補強されてもよい。いくつかの構成では、複合ノード内の原子ノードの共通の共起が、推薦スコアのためにマイニングされてもよい。これらの推薦スコアは、調整可能な線形重み付けまたは他の適切な重み付け基準を介して、他のスコアと組み合わされてもよい。知識グラフ300内のノードの階層的性質のため、連関規則マイニングは、複数の度合いの分解能で実行されうる。特に、連関規則マイニングは、機能的原子ノード(たとえば、Dockerイメージ、OSSパッケージなど)および複合ノード(たとえば、Dockerfile、リポジトリ、Docker-composeファイルなど)に対して実行されうる。
【0080】
状況によっては、ユーザーが推薦を提供するための出発点として機能するパッケージを提供しない場合がある。提供されたパッケージがなければ、擬似ノードは知識グラフ300に結線で組み込むことができず、よって、GraphSAGE埋め込みが生成できない。そのような構成では、代わりにプレGraphSAGE埋め込み(pre-GraphSAGE embedding)が実装されてもよい。プレGraphSAGE埋め込みは、たとえば、ユーザー入力212のBERT埋め込みであってもよい。いくつかの構成では、ユーザー入力212からのキーワードが使用されてもよい。各可能なキーワードについて、属性としてそのキーワードをもつすべてのノードを接続するトピック・ノードが生成されてもよい。ユーザー入力212がキーワードを含む場合には、擬似ノードは知識グラフ300に結線で組み込まれ、GraphSAGE埋め込みがキーワードに基づいて生成されうる。
【0081】
上述のように、アルゴリズム(GraphSAGEアルゴリズムのような)は、知識グラフ300のどのエンティティまたはノードが互いに近接していると考えられるかを決定するように構成されてもよい。いくつかの構成では、GNNモデル210のトレーニングは、類似の埋め込みまたはノードの例、および/または異種の埋め込みまたはノードの例を提供することを含んでいてもよい。しかしながら、知識グラフ300が複合ノードと原子ノードとの間の関係を含む場合には、GNNモデル210のトレーニングはより複雑になりうる。そのような構成では、GNNモデル210のトレーニングは、構成要素の重複セットを有する複合ノードを同様として分類することを含んでいてもよい。次いで、GraphSAGEアルゴリズム擬似ノード再構築は、複合ノードであってもよい。そのような構成では、k最近接近傍が同様の分子ノード(molecular node)として返されてもよい。さらに、この構成は、いくつかのスケール度合いで実施することができる。次の協働的フィルタリングは、それらの最も頻繁に使用されるソフトウェア・エンティティを決定するために適用されうる。GNNモデル210は、一緒に共構成要素(co-constituent)となる傾向のある機能的原子ノードが類似しているとみなされるようにトレーニングされてもよい。次いで、GraphSAGEアルゴリズムは、擬似ノードを原子ノードとして再構築することができ、k近傍アルゴリズムは、類似の原子ノードを返すことができる。
【0082】
上記でさらに詳細に説明したように、開示された実施形態は、機械学習に基づいて、一つまたは複数のソフトウェアエンティティ(たとえば、ユーザー)を推薦する構成を含む。いくつかの実施形態では、ユーザー・インターフェース211は、ソフトウェア開発サイクル100の種々の段階の間にユーザー入力212を受け取るよう、対話的かつ進行的であってもよい。ユーザーからのユーザー入力212は、トレーニングされたGNNモデル210に複数のタイプの推薦(たとえば、推薦220)を問い合わせるよう、知識グラフ300内の新しいノードを動的に生成するために使用される。
【0083】
いくつかの構成では、ユーザー入力212は、擬似ノードXの埋め込みに変換されうる高レベルの抽象的な記述(たとえば、自然言語記述)を含んでいてもよい。次いで、擬似ノードXのK最近接近傍が、知識グラフ300において識別される。次に、ソフトウェア開発プロジェクトで使用される一つまたは複数のソフトウェア・エンティティに関する推薦220を生成するよう、協働的フィルタリングが適用されてもよい。
【0084】
ユーザーがソフトウェア・エンティティの一つまたは複数のグループを採用した状況では、擬似ノードXは、ソフトウェア・エンティティ(またはグループ)のうちの採用されたものへの結線リンクで作成されてもよい。擬似ノードXの埋め込みは、GNNモデル210を使用して計算されてもよく、擬似ノードXのK最近接近傍は、知識グラフ300において識別されてもよい。ソフトウェア開発プロジェクトにおいて使用される一つまたは複数のソフトウェア・エンティティに関する推薦220を生成するために、関連付けられる規則マイニング(associated rule mining)および協働的フィルタリングが適用されてもよい。そのような構成では、ユーザーは、マルチモーダル入力を形成する一つまたは複数のタイプのユーザー入力212を提供することができ、それが推薦220を生成するために使用される。GNNモデル210は、そのグラフニューラルネットワークを作成するために階層グラフ構造(たとえば、知識グラフ300)を含んでいてもよい。ユーザーの要件の範囲に依存し、推薦220は、リポジトリ、パッケージライブラリ、Dockerfiles、Docker-composeファイル、Helmチャート等のような、任意の適切なレベルのソフトウェア要素を含みうる。いくつかの構成では、GraphSAGEアルゴリズムは、GNNモデル210を不均一なタイプのアーチファクト上でトレーニングするために使用されうる。
【0085】
本開示の範囲から逸脱することなく、図2および図3の構成に修正、追加、または省略を行うことができる。たとえば、環境200は、本開示において図示され説明されたものよりも多くの、または少ない要素を含んでいてもよい。
【0086】
さらに、環境200に関して記載された種々のモジュールは、コンピューティング装置が対応するモジュールに関して記載される一つまたは複数の動作を実行することを可能にするように構成されたコードおよびルーチンを含んでいてもよい。追加的または代替的に、一つまたは複数のモジュールは、プロセッサ、マイクロプロセッサ(たとえば、一つまたは複数の動作を実行する、または該実行を制御するため)、フィールドプログラマブルゲートアレイ(FPGA)、または特定用途向け集積回路(ASIC)を含むハードウェアを使用して実装されてもよい。いくつかの他の例では、一つまたは複数のモジュールは、ハードウェアとソフトウェアの組み合わせを使用して実装されてもよい。本開示において、特定のモジュールによって実行されると記載された動作は、該特定のモジュールが対応するシステムに実行するよう指令しうる動作を含む。
【0087】
さらに、いくつかの実施形態では、記述されたモジュールの2つ以上のうちの一つまたは複数のルーチン、一つまたは複数の命令、またはコードの少なくとも一部は、それらが同一の要素とみなされうるか、またはモジュールの2つ以上の一部とみなされうる共通のセクションをもちうるように組み合わされうる。よって、説明および図2におけるモジュールの描写は、実行される動作の説明を容易にすることを意図したものであり、限定的な実装または構成として提供されるものではない。
【0088】
図4は、本開示の少なくとも1つの実施形態による、例示的な計算システム400のブロック図を示す。計算システム400は、知識グラフ・モジュール、GNNモジュール、入力埋め込みモジュール、ノード識別モジュール、および/または後処理モジュール(たとえば、図2の知識グラフ・モジュール204、GNNモジュール208、入力埋め込みモジュール214、ノード識別モジュール216、および/または後処理モジュール218)に関連する一つまたは複数の動作を実装または指令するように構成されてもよい。計算システム400は、プロセッサ450、メモリ452、およびデータ記憶装置454を含んでいてもよい。プロセッサ450、メモリ452、およびデータ記憶装置454は、通信的に結合されてもよい。
【0089】
一般に、プロセッサ450は、種々のコンピュータハードウェアまたはソフトウェア・モジュールを含む任意の適切な特殊目的または汎用コンピュータ、計算エンティティ、または処理装置を含むことができ、任意の適用可能なコンピュータ読み取り可能記憶媒体に記憶された命令を実行するように構成することができる。たとえば、プロセッサ450は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラム命令を解釈および/または実行するおよび/またはデータを処理するように構成された任意の他のデジタルまたはアナログ回路を含んでいてもよい。図4においては単一のプロセッサとして示されているが、プロセッサ450は、個別にまたは集合的に、本開示に記載された任意の数の動作を実行するまたは該実行を指令するように構成された任意の数のプロセッサを含んでいてもよい。さらに、一つまたは複数のプロセッサが、一つまたは複数の異なる電子装置、たとえば、異なるサーバー上に存在してもよい。
【0090】
いくつかの実施形態では、プロセッサ450は、メモリ452、データ記憶装置454、またはメモリ452およびデータ記憶装置454に記憶された命令を解釈および/または実行する、および/またはデータを処理するように構成されてもよい。いくつかの実施形態では、プロセッサ450は、データ記憶装置454からプログラム命令を取り出し、該プログラム命令をメモリ452にロードしてもよい。プログラム命令がメモリ452にロードされた後、プロセッサ450は、プログラム命令を実行することができる。
【0091】
たとえば、いくつかの実施形態では、上述のモジュール(たとえば、図2の知識グラフ・モジュール204、GNNモジュール208、入力埋め込みモジュール214、ノード識別モジュールおよび/または後処理モジュール218)のうちの一つまたは複数は、プログラム命令としてデータ記憶454に含まれてもよい。プロセッサ450は、データ記憶装置454から対応するモジュールのプログラム命令を取り出してもよく、メモリ452内に対応するモジュールのプログラム命令をロードしてもよい。対応するモジュールのプログラム命令がメモリ452にロードされた後、プロセッサ450は、計算システムが命令によって指令されるように対応するモジュールに関連する動作を実行できるように、プログラム命令を実行することができる。
【0092】
メモリ452およびデータ記憶装置454は、コンピュータ実行可能な命令またはデータ構造を担持または記憶するためのコンピュータ読み取り可能な記憶媒体を含んでいてもよい。そのようなコンピュータ読み取り可能記憶媒体は、プロセッサ450のような汎用または専用コンピュータによってアクセスされうる任意の利用可能な媒体を含んでいてもよい。たとえば、限定するものではないが、そのようなコンピュータ読み取り可能記憶媒体は、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、電気的に消去可能なプログラマブル読み出し専用メモリ(EEPROM)、コンパクトディスク記憶装置(CD-ROM)もしくは他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶装置、フラッシュメモリ装置(たとえば、固体メモリ装置)、またはコンピュータ実行可能命令またはデータ構造の形態で特定のプログラムコードを担持または記憶するために使用されてもよく、汎用または特殊目的のコンピュータによってアクセスされうる任意の他の記憶媒体を含む、有形または非一時的コンピュータ読み取り可能記憶媒体を含んでいてもよい。上記の組み合わせもまた、コンピュータ読み取り可能な記憶媒体の範囲内に含まれうる。コンピュータ実行可能命令は、たとえば、プロセッサ450にある種の動作または動作群を実行させるように構成された命令およびデータを含んでいてもよい。
【0093】
本開示の範囲から逸脱することなく、計算システム400に修正、追加、または省略を行うことができる。たとえば、いくつかの実施形態では、計算システム400は、明示的に図示または説明されない可能性のある任意の数の他の構成要素を含んでいてもよい。
【0094】
図5は、例示的方法500のフローチャートである。いくつかの側面では、本方法500は、ソフトウェア開発目標のために、以前に開発されたソフトウェア・エンティティの一つまたは複数を推薦するために、グラフ・ニューラルネットワーク・モデルをトレーニングするように実装されてもよい。追加的または代替的に、本方法500は、ソフトウェア開発において使用するためのソフトウェアまたはソフトウェア・エンティティを推薦するために実装されてもよい。方法500は、任意の適切なシステム、装置、またはデバイスによって実行されうる。たとえば、図2の知識グラフ・モジュール204、GNNモジュール208、入力埋め込みモジュール214、ノード識別モジュールおよび/または後処理モジュール218、または図4の計算システム400のうちの一つまたは複数は(たとえば一つまたは複数のモジュールによって指令されて)方法500に関連する一つまたは複数の動作を実行してもよい。離散的なブロックで示されているが、方法500の一つまたは複数のブロックに関連するステップおよび動作は、特定の実装に依存して、追加のブロックに分割されてもよく、より少ないブロックに結合されてもよく、または除去されてもよい。
【0095】
方法500は、ソフトウェア・アーチファクトが受領されうるブロック502で開始されうる。いくつかの側面では、ソフトウェア・アーチファクトは、一つまたは複数のリポジトリ・ソースからの以前に開発されたソフトウェア・エンティティを表していてもよい。ソフトウェア・アーチファクトは、オープンソース・ソフトウェア・パッケージ、ドッカーファイル(Dockerfile)、Dockerイメージ、Dockerベース・イメージ、リポジトリ、Docker-composeファイル、およびヘルムチャートの一つまたは複数を含みうる。
【0096】
ブロック504では、ソフトウェア・アーチファクトの知識グラフが構築されうる。いくつかの側面では、知識グラフは、ソフトウェア・アーチファクトを表すノードと、ソフトウェア・アーチファクト間の関係を表すエッジとを含んでいてもよい。
【0097】
ブロック506では、グラフ・ニューラルネットワーク・モデルがトレーニングされうる。いくつかの側面では、グラフ・ニューラルネットワーク・モデルは、知識グラフを使用してトレーニングされうる。グラフ・ニューラルネットワーク・モデルは、ソフトウェア開発目標のために、以前に開発されたソフトウェア・エンティティの一つまたは複数を推薦するようにトレーニングされてもよい。
【0098】
ブロック507では、ユーザー入力が受領されてもよい。ユーザー入力は、たとえば、ユーザー・インターフェースを介して入力されてもよい。ユーザー入力は、自然言語クエリーを含んでいてもよい。ブロック508では、ユーザー入力は、自然言語クエリーに基づいて埋め込みに変換されてもよい。いくつかの側面では、ユーザー入力の埋め込みは、他のモダリティ(たとえば、パッケージの埋め込みおよび/または他のソフトウェア・モジュールの埋め込み)と組み合わされて、マルチモーダル埋め込みを生成してもよい。よって、いくつかの構成では、ユーザー入力は、マルチモーダル埋め込みに変換されうる。
【0099】
ブロック510では、擬似ノードが知識グラフに追加されてもよい。擬似ノードは、マルチモーダル埋め込みを含んでいてもよい。
【0100】
ブロック512において、マルチモーダル埋め込みは、知識グラフにおいてエッジで連結されて、擬似ノードのためのグラフ埋め込みを生成してもよい。ブロック514において、知識グラフは、知識グラフ内の擬似ノードに類似する一つまたは複数のノードを識別するために探索されうる。
【0101】
ブロック516において、推薦が生成されうる。推薦は、ソフトウェア開発目標のために使用される、以前に開発されたソフトウェア・エンティティの一つまたは複数を含んでいてもよい。推薦は、知識グラフにおける擬似ノードに類似したノードに基づいてもよい。
【0102】
本開示の範囲から逸脱することなく、方法500に修正、追加、または省略がなされてもよい。たとえば、方法500の動作は、異なる順序で実施されてもよい。追加的または代替的に、2つ以上の動作が同時に実行されてもよい。さらに、概説された操作およびアクションは、例として提供されているだけであり、開示された実施形態の本質を損なうことなく、いくつかの動作およびアクションは、任意的であってもよく、より少ない動作およびアクションに結合されてもよく、または追加の動作およびアクションに展開されてもよい。
【0103】
上述のように、本開示に記載される実施形態は、以下により詳細に議論されるように、種々のコンピュータハードウェアまたはソフトウェア・モジュールを含む、特殊目的または汎用コンピュータ(たとえば、図4のプロセッサ450)の使用を含んでいてもよい。さらに、上述のように、本開示に記載の実施形態は、コンピュータ実行可能な命令またはデータ構造を担持または記憶するためのコンピュータ読み取り可能な媒体(たとえば、図4のメモリ452またはデータ記憶装置454)を使用して実施されてもよい。
【0104】
本開示において使用されるところでは、用語「モジュール」または「コンポーネント」は、該モジュールまたはコンポーネントのアクションを実行するように構成された特定のハードウェア実装、または計算システムの汎用ハードウェア(たとえば、コンピュータ読み取り可能媒体、処理装置など)に記憶および/または実行されうるソフトウェアオブジェクトおよび/またはソフトウェアルーチンを指すことができる。いくつかの実施形態において、本開示に記載される異なるコンポーネント、モジュール、エンジン、およびサービスは、計算システム上で(たとえば、別個のスレッドとして)実行されるオブジェクトまたはプロセスとして実装されてもよい。本開示に記載されるシステムおよび方法のいくつかは、一般に、(汎用ハードウェアに記憶および/または実行される)ソフトウェアで実施されるものとして記載されるが、特定のハードウェア実施形態またはソフトウェアと特定のハードウェア実装との組み合わせも可能であり、考えられている。この説明において、「計算エンティティ」は、本開示において前に定義された任意の計算システム、または計算システム上で動作する任意のモジュールまたは小モジュールの組み合わせであってもよい。
【0105】
本開示において、特に、添付された特許請求の範囲(たとえば、添付された特許請求の範囲の本文)において使用される用語は、一般に、「開放的」な用語として意図されている(たとえば、「含む」という用語は、「含むが、これに限定されない」と解釈されるべきであり、「有する」という用語は、「少なくとも…を有する」と解釈されるべきであり、「含む」という用語は、「含むが、これに限定されない」と解釈されるべきであるなど)。
【0106】
さらに、導入されるクレーム記載の特定の数が意図されている場合、そのような意図はクレームに明示的に記載され、そのような記載がない場合、そのような意図は存在しない。たとえば、理解を助けるために、以下の添付の特許請求の範囲は、クレーム記載を導入するために、「少なくとも1つ」および「一つまたは複数」という導入句の使用を含むことがある。しかし、そのような句の使用は、不定冠詞「a」または「an」によるクレーム記載の導入が、そのような導入されたクレーム記載を含む特定のクレームを、そのような記載を1つのみ含む実施形態に限定することを意味すると解釈すべきではない。これは、同じクレームが導入句「一つまたは複数」または「少なくとも1つ」と「a」または「an」とを含む場合であってもそうである(たとえば、「a」および/または「an」は、「少なくとも1つ」または「一つまたは複数」を意味すると解釈されるべきである)。同じことはクレーム記載を導入するために使用される定冠詞の使用についても成り立つ。
【0107】
さらに、導入されたクレーム記載の特定の数が明示的に記載されている場合であっても、当該技術分野の当業者であれば、そのような記載は、少なくともその記載された数を意味するものと解釈されるべきであることを認識するであろう(たとえば、他の修飾語を伴わない「2つの記載」というだけの記載は、少なくとも2つの記載または2つ以上の記載を意味する)。さらに、「A、B、C等の少なくとも一つ」または「A、B、C等の一つ以上」と類似の慣用表現が用いられている場合には、一般に、そのような構文は、Aのみ、Bのみ、Cのみ、AとB、AとC、BとC、またはA、B、C等を含むことが意図される。
【0108】
さらに、明細書、特許請求の範囲、または図面のいずれかに記載されているかを問わず、2つ以上の代替的な用語を提示するどの離接的な語句も、それらの用語の1つ、それらの用語のいずれか、または両方の用語を含む可能性を考えていると理解されるべきである。たとえば、句「AまたはB」は、「A」または「B」または「AおよびB」の可能性を含むと理解されるべきである。
【0109】
本開示に記載されたすべての例および条件付き言辞は、本開示および発明者によって当該技術分野を進歩させるために寄与される概念を理解する際に読者を助けるための教育的目的のために意図されており、そのように具体的に記載された例および条件に限定されるものではないと解釈されるべきである。本開示の実施形態を詳細に説明したが、本開示の精神および範囲から逸脱することなく、さまざまな変更、置換、および変更をここに行うことができる。
【0110】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
以前に開発されたソフトウェア・エンティティを表すソフトウェア・アーチファクトを一つまたは複数のリポジトリ・ソースから受領する段階と;
前記ソフトウェア・アーチファクトの知識グラフを構築する段階と;
前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数をソフトウェア開発目標のために推薦するためのグラフ・ニューラルネットワーク・モデルを前記知識グラフを用いてトレーニングする段階とを含む、
方法。
(付記2)
前記ソフトウェア開発目標のために使用される、前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数を含む推薦を生成する段階をさらに含む、付記1に記載の方法。
(付記3)
ユーザー入力を受領する段階であって、前記ユーザー入力が自然言語クエリーを含む、段階と;
前記ユーザー入力を前記自然言語クエリーに基づくマルチモーダル埋め込みに変換する段階と;
前記マルチモーダル埋め込みを含む前記知識グラフに擬似ノードを追加する段階とをさらに含む、
付記1に記載の方法。
(付記4)
前記知識グラフにおいてエッジで前記マルチモーダル埋め込みを連結して、前記擬似ノードのためのグラフ埋め込みを生成する段階をさらに含む、付記3に記載の方法。
(付記5)
前記知識グラフにおいて前記擬似ノードに類似した一つまたは複数のノードを検索する段階と;
前記ソフトウェア開発目標のために使用される、前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数を含む推薦を生成する段階であって、前記推薦は前記知識グラフにおける前記擬似ノードに類似したノードに基づく、段階とを含む、
付記4に記載の方法。
(付記6)
前記ソフトウェア・アーチファクトは:オープンソース・ソフトウェア・パッケージ、Dockerfile、Dockerイメージ、Dockerベース・イメージ、リポジトリ、Docker-composeファイル、およびヘルムチャートのうちの一つまたは複数を含む、付記1に記載の方法。
(付記7)
前記知識グラフは:
ソフトウェア・アーチファクトを表すノードと;
前記ソフトウェア・アーチファクトの間の関係を表すエッジとを含む、
付記1に記載の方法。
(付記8)
一つまたは複数のプロセッサによって実行されることに応答して、システムに動作を実行させる命令を記憶している一つまたは複数のコンピュータ読み取り可能な記憶媒体であって、前記動作は:
以前に開発されたソフトウェア・エンティティを表すソフトウェア・アーチファクトを一つまたは複数のリポジトリ・ソースから受領する段階と;
前記ソフトウェア・アーチファクトの知識グラフを構築する段階と;
前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数をソフトウェア開発目標のために推薦するためのグラフ・ニューラルネットワーク・モデルを前記知識グラフを用いてトレーニングする段階とを含む、
一つまたは複数のコンピュータ読み取り可能な記憶媒体。
(付記9)
前記動作が、前記ソフトウェア開発目標のために使用される、前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数を含む推薦を生成する段階をさらに含む、付記8に記載の一つまたは複数のコンピュータ読み取り可能な記憶媒体。
(付記10)
前記動作が:
ユーザー入力を受領する段階であって、前記ユーザー入力が自然言語クエリーを含む、段階と;
前記ユーザー入力を前記自然言語クエリーに基づくマルチモーダル埋め込みに変換する段階と;
前記マルチモーダル埋め込みを含む前記知識グラフに擬似ノードを追加する段階とをさらに含む、
付記8に記載の一つまたは複数のコンピュータ読み取り可能な記憶媒体。
(付記11)
前記動作が、前記知識グラフにおいてエッジで前記マルチモーダル埋め込みを連結して、前記擬似ノードのためのグラフ埋め込みを生成する段階をさらに含む、付記10に記載の一つまたは複数のコンピュータ読み取り可能な記憶媒体。
(付記12)
前記動作が:
前記知識グラフにおいて前記擬似ノードに類似した一つまたは複数のノードを検索する段階と;
前記ソフトウェア開発目標のために使用される、前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数を含む推薦を生成する段階であって、前記推薦は前記知識グラフにおける前記擬似ノードに類似したノードに基づく、段階とを含む、
付記11に記載の一つまたは複数のコンピュータ読み取り可能な記憶媒体。
(付記13)
前記ソフトウェア・アーチファクトは:オープンソース・ソフトウェア・パッケージ、Dockerfile、Dockerイメージ、Dockerベース・イメージ、リポジトリ、Docker-composeファイル、およびヘルムチャートのうちの一つまたは複数を含む、付記8に記載の一つまたは複数のコンピュータ読み取り可能な記憶媒体。
(付記14)
前記知識グラフは:
ソフトウェア・アーチファクトを表すノードと;
前記ソフトウェア・アーチファクトの間の関係を表すエッジとを含む、
付記8に記載の方法。
(付記15)
ユーザー・インターフェースと;
一つまたは複数のプロセッサと;
一つまたは複数のコンピュータ読み取り可能な記憶媒体とを有するソフトウェア推薦システムであって、
前記記憶媒体は、前記一つまたは複数のプロセッサによって実行されることに応答して当該システムに動作を実行させる命令を記憶しており、前記動作は:
以前に開発されたソフトウェア・エンティティを表すソフトウェア・アーチファクトを一つまたは複数のリポジトリ・ソースから受領する段階と;
前記ソフトウェア・アーチファクトの知識グラフを構築する段階と;
前記ユーザー・インターフェースにおいて受領されるユーザー入力に応答して、ソフトウェア開発目標のために使用されるべき、前記以前に開発されたソフトウェア・エンティティのうちの一つまたは複数を含む推薦を生成する段階とを含む、
ソフトウェア推薦システム。
(付記16)
前記ユーザー入力が自然言語クエリーを含む、付記15に記載のソフトウェア推薦システム。
(付記17)
前記動作がさらに:
前記ユーザー入力に含まれる自然言語クエリーに基づいて前記ユーザー入力をマルチモーダル埋め込みに変換する段階と;
前記マルチモーダル埋め込みを含む前記知識グラフに擬似ノードを追加する段階と;
前記知識グラフにおいてエッジで前記マルチモーダル埋め込みを連結し、前記擬似ノードのためのグラフ埋め込みを生成する段階とをさらに含む、
付記15に記載のソフトウェア推薦システム。
(付記18)
前記動作が:
前記知識グラフにおいて前記擬似ノードに類似した一つまたは複数のノードを検索する段階をさらに含み、
前記推薦の生成は、前記知識グラフにおける前記擬似ノードに類似したノードに基づく、
付記17に記載のソフトウェア推薦システム。
(付記19)
前記ソフトウェア・アーチファクトは、オープンソース・ソフトウェア・パッケージ、Dockerfile、Dockerイメージ、Dockerベース・イメージ、リポジトリ、Docker-composeファイル、およびヘルムチャートのうちの一つまたは複数を含む、付記15に記載のソフトウェア推薦システム。
(付記20)
前記ユーザー・インターフェースが前記知識グラフを表示するように構成されており、前記知識グラフが:
前記ソフトウェア・アーチファクトを表すノード;
前記ソフトウェア・アーチファクトの間の関係を表すエッジを含む、
付記15に記載のソフトウェア推薦システム。
【符号の説明】
【0111】
102 要件/計画
104 設計
106 開発
108 試験
110 展開

202 ソフトウェア・アーチファクト
204 知識グラフ・モジュール
206 知識グラフ
208 GNNモジュール
210 GNNモデル
211 ユーザー・インターフェース
212 ユーザー入力
214 入力埋め込みモジュール
216 ノード識別モジュール
218 後処理モジュール
220 推薦

400 計算システム
450 プロセッサ
452 メモリ
454 データ記憶

502 ソフトウェア・アーチファクトを受領
504 ソフトウェア・アーチファクトの知識グラフを構築
506 グラフ・ニューラルネットワーク・モデルをトレーニング
507 ユーザー入力を受領
508 ユーザー入力を埋め込みに変換
510 擬似ノードを知識グラフに追加
512 マルチモーダル埋め込みを連結
514 擬似ノードと同様のノードを探索
516 推薦を生成
図1
図2
図3
図4
図5