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

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

▶ ピンタレスト,インコーポレイテッドの特許一覧

特許7322044レコメンダシステムのための高効率畳み込みネットワーク
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-07-28
(45)【発行日】2023-08-07
(54)【発明の名称】レコメンダシステムのための高効率畳み込みネットワーク
(51)【国際特許分類】
   G06N 3/08 20230101AFI20230731BHJP
   G06F 16/9035 20190101ALI20230731BHJP
【FI】
G06N3/08
G06F16/9035
【請求項の数】 15
(21)【出願番号】P 2020546127
(86)(22)【出願日】2019-03-12
(65)【公表番号】
(43)【公表日】2021-07-15
(86)【国際出願番号】 US2019021932
(87)【国際公開番号】W WO2019178155
(87)【国際公開日】2019-09-19
【審査請求日】2021-12-20
(31)【優先権主張番号】62/642,527
(32)【優先日】2018-03-13
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/101,184
(32)【優先日】2018-08-10
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/178,443
(32)【優先日】2018-11-01
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/273,939
(32)【優先日】2019-02-12
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/273,860
(32)【優先日】2019-02-12
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/273,969
(32)【優先日】2019-02-12
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/273,995
(32)【優先日】2019-02-12
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】512038078
【氏名又は名称】ピンタレスト,インコーポレイテッド
(74)【代理人】
【識別番号】110003018
【氏名又は名称】弁理士法人プロテクトスタンス
(72)【発明者】
【氏名】レスコベック ユーリ
(72)【発明者】
【氏名】エクソンバッチャイ チャンタット
(72)【発明者】
【氏名】チェン カイフェン
(72)【発明者】
【氏名】ヒー ルイニング
(72)【発明者】
【氏名】イン レックス
【審査官】渡辺 順哉
(56)【参考文献】
【文献】特表2013-519138(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 16/9035
(57)【特許請求の範囲】
【請求項1】
コーパスグラフ内のターゲットノードに関するマッチングノードを識別するために、コンピューティングシステムで機械学習モデルを効率的に訓練するコンピュータ実行方法であって、
トリプレットの入力ノードを含む訓練レコードを処理するために、機械学習モデルを初期化することであって、前記トリプレットの入力ノードが、ターゲットノード、対応するマッチングノード、および対応する非マッチングノードを含む、前記初期化すること、
訓練レコードのターゲットノードに関する対応するマッチングノードと対応する非マッチングノードとを区別するための前記機械学習モデルを訓練する訓練データの集合体にアクセスして、前記ターゲットノードの対応する前記マッチングノードを正しく識別することであって、前記訓練データの集合体が複数の訓練レコードを含む、前記識別すること、
前記訓練データの集合体の前記ターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、しきい値レベルの精度が達成されるまで、前記訓練データの集合体を使用して前記機械学習モデルを訓練すること、
ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードの前記ターゲットノードに関する対応する前記マッチングノードと対応する非マッチングノードとを区別する難しさが増すように、前記訓練データの集合体を更新すること、
更新された前記訓練データの集合体の前記ターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、前記しきい値レベルの精度が達成されるまで、更新された前記訓練データの集合体を使用して前記機械学習モデルを訓練すること、ならびに
訓練された前記機械学習モデルから、実行可能な機械学習モデルを生成すること
を含む、前記コンピュータ実行方法。
【請求項2】
前記訓練データの集合体を更新し、更新された前記訓練データの集合体を使用して前記機械学習モデルを訓練するステップが、さらに、
所定の反復回数の間、
ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードの前記ターゲットノードに関する対応する前記マッチングノードと対応する非マッチングノードとを区別する難しさが増すように、前記訓練データの集合体を更新すること、および
更新された前記訓練データの集合体の前記ターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、前記しきい値レベルの精度が達成されるまで、更新された前記訓練データの集合体を使用して前記機械学習モデルを訓練すること
を含む、請求項1に記載のコンピュータ実行方法。
【請求項3】
前記所定の反復回数は、少なくとも2回である、請求項2に記載のコンピュータ実行方法。
【請求項4】
前記訓練データは、最初に、対応するマッチングノードまたは対応する非マッチングノードの少なくとも1つが欠落しているような不完全な訓練レコードを含み、
前記方法は、さらに、各訓練レコードが、ターゲットノードと、対応する非マッチングノードとを含むトリプレットの入力値を含むように、前記訓練データを完成させることを含む、請求項2に記載のコンピュータ実行方法。
【請求項5】
前記訓練データを完成させることが、
前記訓練データの集合体の各訓練レコードに対して、
前記訓練レコードの前記ターゲットノードの関連する近傍にアクセスすること、および
前記関連する近傍のうちの最も関連する近隣ノードを、前記訓練レコードの対応するマッチングノードとして選択すること
を含む、請求項4に記載のコンピュータ実行方法。
【請求項6】
前記訓練データを完成させることが、さらに、
前記訓練データの集合体の各訓練レコードに対して、
前記コーパスグラフからターゲットノードをランダムに、前記訓練レコードの対応する非マッチングノードとして選択することを含む、請求項5に記載のコンピュータ実行方法。
【請求項7】
ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードの前記ターゲットノードに関する対応する前記マッチングノードと対応する非マッチングノードとを区別する難しさが増すように、前記訓練データの集合体を更新することは、
前記訓練データの集合体の各訓練レコードに対して、
前記訓練レコードの前記ターゲットノードの関連する近傍にアクセスすること、および
前記関連する近傍の近隣ノードを、以前の対応する前記マッチングノードよりも前記ターゲットノードと弱く関連している、前記訓練レコードの対応するマッチングノードとして選択すること
を含む、請求項4に記載のコンピュータ実行方法。
【請求項8】
前記訓練データの集合体の各訓練レコードに対して、
前記関連する近傍の近隣ノードを、以前の対応する前記非マッチングノードよりも前記ターゲットノードと強く関連している、前記訓練レコードの対応する非マッチングノードとして選択することをさらに含む、請求項7に記載のコンピュータ実行方法。
【請求項9】
ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードの前記ターゲットノードに関する対応する前記マッチングノードと対応する非マッチングノードとを区別する難しさが増すように、前記訓練データの集合体を更新することは、
前記訓練データの集合体の各訓練レコードに対して、
前記訓練レコードの前記ターゲットノードの関連する近傍にアクセスすること、および
前記関連する近傍の近隣ノードを、以前の対応する前記非マッチングノードよりも前記ターゲットノードと強く関連している、前記訓練レコードの対応する非マッチングノードとして選択すること
をさらに含む、請求項4に記載のコンピュータ実行方法。
【請求項10】
コンピュータ実行可能命令を記録したコンピュータ可読媒体であって、前記媒体から命令を取得する少なくともプロセッサを含むコンピューティングシステムで実行されると、コーパスグラフ内のターゲットノードに関するマッチングノードを識別するために、機械学習モデルを効率的に訓練する方法を実行する、前記コンピュータ可読媒体であって、前記方法が、
トリプレットの入力ノードを含む訓練レコードを処理するために、機械学習モデルを初期化することであって、前記トリプレットの入力ノードが、ターゲットノード、対応するマッチングノード、および対応する非マッチングノードを含む、前記初期化すること、
訓練レコードのターゲットノードに関する対応するマッチングノードと対応する非マッチングノードとを区別するための前記機械学習モデルを訓練する訓練データの集合体にアクセスして、前記ターゲットノードの対応する前記マッチングノードを正しく識別することであって、前記訓練データの集合体が複数の訓練レコードを含む、前記識別すること、
前記訓練データの集合体の前記ターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、しきい値レベルの精度が達成されるまで、前記訓練データの集合体を使用して前記機械学習モデルを訓練すること、
所定の反復回数の間、
ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードの前記ターゲットノードに関する対応する前記マッチングノードと対応する非マッチングノードとを区別する難しさが増すように、前記訓練データの集合体を更新すること、および
更新された前記訓練データの集合体の前記ターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、前記しきい値レベルの精度が達成されるまで、更新された前記訓練データの集合体を使用して前記機械学習モデルを訓練すること、ならびに
訓練された前記機械学習モデルから、実行可能な機械学習モデルを生成することを含む、前記コンピュータ可読媒体。
【請求項11】
前記訓練データは、最初に、対応するマッチングノードまたは対応する非マッチングノードの少なくとも1つが欠落しているような不完全な訓練レコードを含み、
前記方法は、さらに、各訓練レコードが、ターゲットノードと、対応するマッチングノードと、対応する非マッチングノードとを含むトリプレットの入力値を含むように、前記訓練データを完成させることを含む、請求項10に記載のコンピュータ可読媒体。
【請求項12】
前記訓練データを完成させることが、訓練レコードごとに、
前記訓練データの集合体の各訓練レコードに対して、
前記訓練レコードの前記ターゲットノードの関連する近傍にアクセスすること、および
前記関連する近傍のうちの最も関連する近隣ノードを、前記訓練レコードの対応するマッチングノードとして選択すること
を含む、請求項11に記載のコンピュータ可読媒体。
【請求項13】
コーパスグラフ内のノード間の関連性を識別するために、機械学習モデルを効率的に訓練するように構成されたコンピュータシステムであって、前記コンピュータシステムは、プロセッサとメモリとを備えており、前記プロセッサは、前記コーパスグラフ内の前記ノード間の関連性を識別するために、追加構成要素の一部として、または前記追加構成要素と組み合わせて前記メモリに格納された命令を実行する、前記コンピュータシステムであって、前記追加構成要素は、
アイテムのコーパスグラフを格納するデータストアと、
前記コンピュータシステムで実行の際に、ターゲットノードの関連する近傍を識別する、実行可能な関連近傍識別構成要素と、
実行可能モデル訓練構成要素であって、前記コンピュータシステムで実行の際に、
トリプレットの入力ノードを含む訓練レコードを処理するために、機械学習モデルを初期化することであって、前記トリプレットの入力ノードが、ターゲットノード、対応するマッチングノード、および対応する非マッチングノードを含む、前記初期化すること、
訓練レコードのターゲットノードに関する対応するマッチングノードと対応する非マッチングノードとを区別するための前記機械学習モデルを訓練する訓練データの集合体にアクセスして、前記ターゲットノードの対応する前記マッチングノードを正しく識別することであって、前記訓練データの集合体が複数の訓練レコードを含む、前記識別すること、
前記訓練データの集合体の前記ターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、しきい値レベルの精度が達成されるまで、前記訓練データの集合体を使用して前記機械学習モデルを訓練すること、
所定の反復回数の間、
ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードの前記ターゲットノードに関する対応する前記マッチングノードと対応する非マッチングノードとを区別する難しさが増すように、前記訓練データの集合体を更新すること、および
更新された前記訓練データの集合体の前記ターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、前記しきい値レベルの精度が達成されるまで、更新された前記訓練データの集合体を使用して前記機械学習モデルを訓練すること、ならびに
訓練された前記機械学習モデルから、実行可能な機械学習モデルを生成することを行う、
前記実行可能モデル訓練構成要素と
を備える、前記コンピュータシステム。
【請求項14】
前記コンピュータシステムは、ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードの前記ターゲットノードに関する対応する前記マッチングノードと対応する非マッチングノードとを区別する難しさが増すように、前記訓練データの集合体を更新する際に、さらに、
前記訓練データの集合体の各訓練レコードに対して、
前記訓練レコードの前記ターゲットノードの関連する近傍にアクセスすること、および
前記関連する近傍の近隣ノードを、以前の対応する前記マッチングノードよりも前記ターゲットノードと弱く関連している、前記訓練レコードの対応するマッチングノードとして選択することを行う、請求項13に記載のコンピュータシステム
【請求項15】
前記コンピュータシステムは、さらに、
前記訓練データの集合体の各訓練レコードに対して、
前記関連する近傍の近隣ノードを、以前の対応する前記非マッチングノードよりも前記ターゲットノードと強く関連している、前記訓練レコードの対応する非マッチングノードとして選択する、請求項14に記載のコンピュータシステム。
【発明の詳細な説明】
【背景技術】
【0001】
レコメンダシステムは、一般に、オンラインの、ネットワークアクセス可能なシステムまたはサービスであって、ユーザインタラクションおよびユーザクエリに応答して、ユーザ/個人に対してコンテンツのレコメンデーションを作成するものである。一般的に言って、レコメンドされるコンテンツは、オンラインサービスへのユーザクエリの主題に、類似している、関連している、および/または相補的であると見なされる。例えば、ピンタレスト(登録商標)というオンラインサービスでは、そのユーザは、コンテンツをユーザの「ピンボード」に「ピン」することができる。コンテンツをボードにピンすることは、通常はユーザインタラクションと見なされ、「クエリ」とも見なされる。このクエリに応答して、ピンタレストレコメンダシステムは、対象とするピンボードのユーザのピンまたはコンテンツに、類似している、関連している、および/または相補的であり、推定上、好ましいと見なされる更なるピン/コンテンツをユーザに提案する。
【0002】
多くの場合、コンテンツのレコメンデーションを作成するために、レコメンダシステムは、アイテムおよびデータの大規模なコーパスの多数の分析を実行して、アイテムのコーパス内の他のどのようなコンテンツが、その特定のアイテムクエリに対して、そのコンピュータユーザにとって、類似している、相補的である、関連している、および/または好ましい可能性があるかを判定する。これらの分析は、ディープニューラルネットワークによって行われ、および/または実施されることが増えている。たいてい、これらの分析は、サービスで認知されているコンテンツの埋め込みベクトル(特徴ベクトルともいう)または他のアイテムに基づいて行われる。各埋め込みベクトルは、コンテンツの対応するアイテムの様々な態様を表す。一般的に言って、「クエリ」の埋め込みベクトルを、既知コンテンツの他のアイテムの埋め込みベクトルと比較することにより、レコメンダサービスは、類似したコンテンツ、および/または相補的なコンテンツを提供することができる。
【0003】
既知のコンテンツの集合体が大きくなる場合には、アイテムの大規模なコーパスの埋め込みベクトルの要素を、クエリアイテムの埋め込みベクトルと単純に比較することは実際的ではない。たとえば、ピンタレストのコンテンツのコーパスには、数十億のピンが含まれており、ピンの間には数百億もの接続がある。クエリアイテムの埋め込みベクトルを、その他の数十億ものコンテンツのアイテムの埋め込みベクトルと比較することは、到底、実行不可能である。しかも、(何十億というアイテムのコーパスから、いかにして関連性の高いコンテンツをレコメンドすべきかという)スケールの問題は、何億人ものユーザが、コンテンツのアイテムを投稿し、またはピンしており、コーパスグラフ内のコンテンツのアイテム間の関係を毎日、および/または毎時ごとに確立している場合と同じように、アイテムのコーパスが絶えず進化し、成長しているときには、さらに悪化する。
【0004】
レコメンダシステムのフロントエンドでは、類似アイテム、相補的アイテム、および/または関連アイテムを正確に識別できるようにディープニューラルネットワークを訓練する(これは、当業者に十分理解されるように、機械学習モデルの特定の構成/実施の状態にある)には、かなりの時間と労力とがかかる。この場合の訓練とは、機械学習モデル/ディープニューラルネットワークに訓練データを与え、1つ以上の入力値が与えられると、正しい結果を予測できるような目標を実現することを意味する。
【0005】
開示された主題の上記の態様と、付随する利点の多くとは、以下の図面と併せて以下の説明を参照することによって一層理解されるため、より容易に十分理解されるようになる。
【図面の簡単な説明】
【0006】
図1】開示された主題に関する説明に使用するためのデータの例示的なコーパスグラフを示す絵図である。
図2】クエリノードの関連する近傍の埋め込み値を含む、クエリノードの集約埋め込みベクトルを生成するのに適した、開示された主題の態様による、例示的なルーチンを示す流れ図である。
図3】開示された主題の態様による、ターゲットノードの関連する近傍を識別するのに適した例示的なルーチンを示す流れ図である。
図4A】開示された主題の態様による、図1のコーパスグラフの例示的なサブグラフを示し、サブグラフが、コーパスグラフのノードの関連する近傍に対応する絵図である。
図4B】開示された主題の態様による、図1のコーパスグラフの例示的なサブグラフを示し、サブグラフが、コーパスグラフのノードの関連する近傍に対応する絵図である。
図4C】開示された主題の態様による、図1のコーパスグラフの例示的なサブグラフを示し、サブグラフが、コーパスグラフのノードの関連する近傍に対応する絵図である。
図4D】開示された主題の態様による、図1のコーパスグラフの例示的なサブグラフを示し、サブグラフが、コーパスグラフのノードの関連する近傍に対応する絵図である。
図4E】開示された主題の態様による、図1のコーパスグラフの例示的なサブグラフを示し、サブグラフが、コーパスグラフのノードの関連する近傍に対応する絵図である。
図4F】開示された主題の態様による、図1のコーパスグラフの例示的なサブグラフを示し、サブグラフが、コーパスグラフのノードの関連する近傍に対応する絵図である。
図5】開示された主題の態様による、ターゲットノードの近傍埋め込み情報に近傍埋め込みベクトルを集約するための例示的なルーチンを示す流れ図である。
図6】開示された主題の態様による、各再帰レベルの集約埋め込みベクトルの生成プロセスを示す絵図である。
図7】開示された主題の態様による、ターゲットノードの集約埋め込みベクトルの例示的な生成を示す絵図である。
図8】開示された主題の態様による、埋め込みベクトルを生成するのに適した深層学習/機械学習モデルの要素を示す絵図である。
図9】開示された主題の態様による、ますます難しくなる訓練データを利用して機械学習モデルを訓練するのに適した例示的なルーチンを示す流れ図である。
図10】開示された主題の態様による、機械学習モデルを訓練するのに適した例示的なルーチンを示す流れ図である。
図11】本明細書に開示されたルーチンに関して記述される、ターゲットノードの集約埋め込みベクトルを判定するための命令で符号化された例示的なコンピュータ可読媒体を示すブロック図である。
図12】開示された主題の態様によるコンテンツレコメンダシステムを実施するために好適に構成された例示的なコンピューティングシステム(またはコンピューティングデバイス)を示すブロック図である。
図13】クエリの受信にコンテンツのレコメンデーションを伴って応答するための例示的なレコメンダルーチンを示す流れ図である。
図14】開示された主題の態様を実施するのに適した例示的なネットワーク環境を示すブロック図である。
図15】開示された主題の態様による、プロデューサとコンシューマとの間に分布している例示的な論理処理を示すブロック図である。
図16】開示された主題の態様による、近傍データ/埋め込みベクトルキューを介した、プロデューサの集団とコンシューマの集団との間の例示的な交換を示すブロック図である。
図17】開示された主題の態様による、コーパスグラフ内の複数のノードの集約埋め込みベクトルを生成するための実行可能なMapReduceフレームワークの構成および実行を示す流れ図である。
【発明を実施するための形態】
【0007】
開示された主題の態様によれば、関連する近傍の要素とノード畳み込みとを組み合わせて、グラフのノードの拡張埋め込みベクトルを生成する、データ効率の良い、グラフベースの畳み込みネットワーク(GCN)システムが開示される。より具体的には、集約埋め込みベクトルと呼ばれるこれらの拡張埋め込みベクトルは、ターゲットノードの(埋め込みベクトル形式の)埋め込み情報を、サブグラフ/関連する近傍埋め込み情報と組み合わせて、コーパスグラフのノードの集約埋め込みベクトルを形成する。これらの集約埋め込みベクトルは、コーパスグラフ内の所与のノードの関連する特徴についての更なる洞察を与え、それによって、クエリに応答してユーザにレコメンドするための、グラフ内の関連するノードの識別性が向上する。
【0008】
分かりやすくする目的で、明確にするために、「例示的」という用語は、本明細書で使用するとき、あるものの例証または実例として機能するものと解釈されなければならず、そのようなものの理想的または主要な例証として解釈されてはならない。文体的に、単語または用語の後に「(複数可)」が続く場合、その意味は、用語/アイテムの具体例が1つあるかどうか、もしくは用語/アイテムの具体例が1つ以上あるかどうかに応じて、その単語または用語の単数形または複数形を示すものと解釈すべきである。たとえば、「ユーザ(複数可)」という用語は、1人以上のユーザと解釈されなくてはならない。さらに、複数のアイテムに関して「および/または」の組み合わせを使用することは、一方または両方のアイテムを指すものとされるべきである。
【0009】
埋め込み(または埋め込み情報)、埋め込みベクトル、近傍埋め込みベクトル、および集約埋め込みベクトルという用語に言及する。分かりやすく、はっきりさせるために、「埋め込み」または埋め込み値は、コンテンツのアイテムのある特定の態様に対応しており、この態様を記述している。一般に、限定されるものではないが、埋め込み情報(コンテンツのアイテムの埋め込み値のセット)は、好適に構成されたディープニューラルネットワークによるコンテンツのアイテムの畳み込みの結果として判定される。一般に、コンテンツのアイテムへの埋め込み情報は、ディープニューラルネットワークによって埋め込みベクトルの形式で出力される。
【0010】
コンテンツのアイテムの埋め込み情報の生成に関しては、コンテンツのアイテムに対応する埋め込みベクトルは、コンテンツのアイテムと、そのコンテンツのアイテムに関連付けられ得るメタデータとの両方から生成される。メタデータは、限定ではなく実例として、コンテンツタイプ(例えば、画像、オーディオ、ビデオ、データタイプなど)およびテキストコンテンツ(例えば、アイテムの説明、タイトル、ユニフォームリソース識別データなど)に関する情報を含み得る。
【0011】
埋め込みベクトルは、埋め込みデータの集まりであり、特徴ベクトルと呼ばれることもある。埋め込みベクトルは、コンテンツの対応するアイテムの複数の態様を表す、埋め込み(各埋め込みは、処理および分析を容易にするために、通常は数値で表される)のn次元ベクトルである。上記の通り、一般に、ただしこれに限定されないが、コンテンツのアイテムの埋め込みベクトルは、機械学習モデルであるディープニューラルネットワークによる畳み込みによって判定される。示唆されるように、埋め込みベクトル(コーパスグラフ内のコンテンツのクエリアイテムと他のアイテムとの両方)は、関連するコンテンツ/関係性があるコンテンツを識別するために使用される。当業者に理解されるように、これらの埋め込みベクトルに関連する埋め込みベクトル空間は、しばしば特徴空間と呼ばれる。さらに、開示された主題の態様によれば、埋め込み空間の次元を低減させるために、コンテンツのアイテムに対する埋め込みベクトルを生成する際に、いくつかの次元縮退手法を使用してもよい。
【0012】
コンテンツアイテム、およびそれに対応するメタデータから導出される埋め込みベクトルとは対照的に、近傍埋め込みベクトルは、ターゲットアイテムの関連する近傍にあるコンテンツアイテムの埋め込みベクトルから導出される埋め込みベクトルの特徴の組み合わせまたは集約のことを指す。アイテム自体の埋め込みベクトルと近傍埋め込みベクトルとの組み合わせ/集約は、コンテンツアイテムの集約埋め込みベクトルと呼ばれる。開示された主題の実施形態によれば、限定ではなく例示のために、集約埋め込みベクトルは、2048個の浮動小数点値を含み得、これらの「浮動小数」のうち1224個は、ターゲットノードの埋め込みベクトル用に予約され、1224個の浮動小数は、ターゲットノードの近傍埋め込みベクトル用に予約される。
【0013】
本明細書で使用される「関連する近傍」という用語に関しては、関連する近傍とは、コーパスグラフ内のノードのサブグラフであって、その要素(ノード)が、コーパスグラフ内の他のノードとは対照的に、ターゲットノードに最も関連しているとされるノードのサブグラフであると解釈すべきである。コーパスグラフ内の各ノードは、それ自体の関連する近傍を持つことになり、典型的には、ただし限定されないが、第1の所与のノードの関連する近傍が、第2の所与のノードの関連する近傍に特有のものであるようになる。
【0014】
分かりやすく、はっきりさせるために、「クエリ」という用語は、1つ以上のレコメンデーションがそれに対して作成され得るコンテンツのアイテムを指す。この関連で、ユーザは、コンテンツのアイテムをオンラインシステムに提出することに関して、追加情報を積極的に求めている場合もあれば、またはそうではない場合もある。たとえば、ユーザのクエリは、コンピュータユーザが、要求を直接的に開始することなく、コンテンツのアイテムとインタラクトすることに応答して開始されてもよい。
【0015】
容易に認められるように、多くのオンラインシステムは、ユーザが提供したコンテンツ、および/またはユーザが作成したコンテンツを大量に保持しており、この多数のコンテンツは、多くの場合、コンテンツのグラフ(コーパスグラフとも呼ばれる)として編成され、グラフノードはコンテンツのアイテムに対応し、グラフノード間のエッジはコンテンツのアイテム間の関係を表す。これらのコンテンツのグラフは、(ソーシャルネットワーキングサービスによって維持され得る)ユーザ/人々の関係、人とトピックとの間の関心グラフ、データの集まりなどを表すことができる。人気のあるオンラインサービスでは、これらのグラフデータの集合体が非常に大きく複雑になることがよくある。上記の通り、ピンタレスト(登録商標)では、何百万ものユーザによって生成された、数十億というボード上にまとめ上げられた、数十億のピンを含むコンテンツ/データのグラフを維持している。容易に認められるように、このコンテンツ/データのコーパスは、コーパスグラフと呼ばれ、非常に複雑で相互に関連するものになる。
【0016】
ピンタレスト(登録商標)に関しては、一般に、ユーザからのコンテンツを維持する多くのソーシャルネットワーキングサービスに適用可能であり、ユーザは、多くの場合、関連したコンテンツを編成し、コーパスグラフ中の関係接続は、これらの密接な関係を反映している。したがって、コーパスグラフの中には、内部凝集力の高い領域が多く存在する。開示された主題の目的上、これらの領域は、コーパスグラフ内の近傍と呼ばれる。コーパスグラフ内の各コンテンツアイテムは、両方のアイテムがそれぞれ他方の関連する近傍にある場合でも、第1のアイテムの関連する近傍が、第2のアイテムの関連する近傍と同じく合致する場合もあれば、または合致しない場合もあるように、固有の関連する近傍を有することになる。
【0017】
上記の通り、深層学習ニューラルネットワーク(すなわち、グラフ畳み込みネットワークまたはGCN)は、コーパスグラフのさまざまなアイテムに対して埋め込みベクトルを生成するために、コーパスグラフ全体に依拠せざるを得ない。これらの埋め込みベクトルは、「リクエスト」に関して、類似したコンテンツ、および/または関連したコンテンツを識別するのに使用される。ただし、データポイントおよび関係の数が増えるにつれて、コーパスグラフ全体の埋め込みベクトルの処理および再処理にますます多くの時間がかかるようになり、膨大な処理帯域幅を必要とする。コーパスグラフの埋め込みベクトルを最新の状態に保ち、何十億もの埋め込みベクトルの中から関連したコンテンツを検索することは、不可能ではないにしても、実用的ではないと考えられている。
【0018】
開示された主題の態様によれば、コーパスグラフ内のターゲットノードの関連する近傍を選択することにより、ターゲットノードの埋め込みだけでなく、関連する近傍の埋め込みも反映した埋め込みベクトル、すなわち、集約埋め込みベクトルを、コーパスグラフ全体の処理/畳み込みを行わずに判定することができる。当然ながら、レコメンダシステムでは、コンテンツのアイテムの埋め込みと、コンテンツのアイテムに対する関連する近傍の集約された埋め込みとの両方を活用することで、コンテンツをユーザにレコメンドする際にレコメンダシステムによって使用され得る関連したコンテンツおよび/または関連するコンテンツの識別性を強化することにつながる。
【0019】
コーパスグラフ内のノードの集約埋め込みベクトルの生成を説明するために、図を参照する。図1は、開示された主題に関する説明および例証に使用するための例示的なコーパスグラフ100を示す絵図である。コーパスグラフ100は、グラフ100内に円として示された様々なノード(各ノードがコーパスグラフのコンテンツのアイテムに対応する)と、ノード間の関係を示すノード間の接続またはエッジとを含む。限定ではなく実例として、これらの関係は、コンテンツアイテムのコレクションにおける共起、第1のコンテンツアイテムの第2のコンテンツアイテムへの参照などに対応し得る。説明および例証のために、コーパスグラフ100内の様々なノードには、ノードA~Zを含むラベルが付けられている。
【0020】
数百億の相互接続を有する数十億のコンテンツのアイテムを含む実際のコーパスグラフとは対照的に、コーパスグラフ100は非常に単純である。しかしながら、コーパスグラフ100は、開示された主題の態様に従って、所与のノードの集約埋め込みベクトルを計算するための関連する近傍の選択範囲を例示することを含むので、開示された主題の態様を説明するのに適している。
【0021】
さらに、図2を参照する。図2は、クエリノードの関連する近傍の埋め込み値を含む、クエリノードの集約埋め込みベクトルを生成するのに適した、開示された主題の態様による、例示的なルーチン200を示す流れ図である。例示の目的で、コーパスグラフ100のノードJが「ターゲットノード」または「クエリノード」として識別されること、特に、ノードJの集約埋め込みベクトルを生成することに関して参照が行われる。
【0022】
ルーチン200に関しては、このルーチンは、再帰的ルーチン、すなわち、その完全な機能を実行するために必要に応じてそのルーチン自体を「呼び出す」ルーチンとして記述されている。ルーチン200に関しては、開示された主題の態様によれば、ルーチン200は、「入力レベル」および「最大スタッキングレベル」に依拠して、行われる再帰的反復の回数を制限する。開示された主題の態様によれば、この最大スタッキングレベルは、ターゲットノードの集約埋め込みベクトルの近傍部分を生成する際に使用され得る近傍レベルの数に相当する。開示された主題の様々な実施形態では、使用される近傍レベルの数は、有利には2または3に設定される。最大スタッキングレベルは、実際には2に設定され得、これは、関連する近傍が、(関連する近隣を識別するためのランダムウォーク中に発生したカウントによって判定され、その関連する近隣がコーパスグラフ内の直近の近隣であるかどうかによらない)ターゲットノードの最も重要で関連性がある近隣のみを使用して、ターゲットノードに対する近傍埋め込みを形成することを意味する。しかし、最大スタッキングレベルが2というのは、あまりにも限定的で、関連性のある情報を見逃してしまうと考えられている。対照的に、最大スタッキングレベル5を使用することもできるが、経験的なデータによれば、第5のレベルの近傍情報は非常に発散するので、近傍埋め込み値の範囲内で、あるとしても限定的な影響を与えるようになることが示唆されている。最大スタッキングレベルが3と4の場合には、同様に良好な結果が得られるようであるが、効率性の面からは、スタッキングレベル(すなわち、最大スタッキングレベル)を3に制限することが示唆され得る。
【0023】
ルーチン200に関しては、ルーチン200への最初の呼び出しの一環として、初期入力レベルに0が与えられる。さらに、ターゲットノードは、また、再帰的ルーチン200への入力パラメータである。次いで当業者に理解されるように、ルーチン200への最初の呼び出しは、集約埋め込みベクトルAEVtnが求められるターゲットノードの両方を識別し、入力レベルを0に設定する(これが最初の呼び出しであることを示す)。
【0024】
ブロック202で開始すると、コーパスグラフ100内のターゲットノード(例えば、ノードJ)がアクセスされる。ブロック204では、ターゲットノードに対応する埋め込みベクトルEVtnが生成される。開示された主題の態様によれば、この埋め込みベクトルは、ターゲットノード自体と、ターゲットノードに関連付けられ得る任意のメタデータとから生成される。たとえば、ノードJ(ターゲットノード)が画像であるとすれば、画像のディープニューラルネットワークの畳み込みに基づいて、さらにノードJに関連付けられ得る任意のメタデータに基づいて、埋め込みベクトルEVJが生成される。ディープニューラルネットワークを介してコンテンツのアイテムを畳み込み、それによって埋め込みベクトルを生成する方法については、図8に関連して以下に詳しく記載されている。
【0025】
決定ブロック206では、入力レベルが最大スタッキングレベルに達しているかどうか判定が行われる。このチェックは、ターゲットノードの集約埋め込みベクトルに収集され含められる近傍情報の量、特に、ターゲットノードの関連する近傍を識別する際に考慮される近隣の距離に関して制限する働きをする。実際に、再帰呼び出しのたびに、入力レベルを最大スタッキングレベルまで1ずつ増加させた。決定ブロック206において、入力レベルが(近傍埋め込み情報のスタッキングレベル数に達したことを示す)最大スタッキングレベル以上である場合、ルーチン200はブロック222に進む。近傍埋め込み情報のスタッキングの限界に達したので、ブロック222では、このターゲットノードについての追加の近傍埋め込み情報は生成されない。したがって、ブロック222において、カレントターゲットノードの埋め込みベクトルEVtnが、近傍埋め込み情報のNULL値表示と連結され、ブロック220において、結果として得られた連結が、カレント入力レベルでのこのカレントターゲットノードの集約埋め込みベクトルAEVtnとして返される。その後、ルーチン200は終了する。
【0026】
決定ブロック206に関して、入力レベルが(近傍埋め込み情報のスタッキングレベル数にまだ達していないことを示す)最大スタッキングレベル未満である場合、ルーチン200はブロック208に進む。ブロック208では、入力されたターゲットノードの関連する近傍が識別される。コーパスグラフ100などのコーパスグラフでは、関連する近傍は、少なくとも1つの関係/エッジを介してターゲットノードに直接的または間接的に接続されたノードであって、ターゲットノードに対して最大の関係および/または影響を有するノードをコーパスグラフ内に含む。コレクション内で頻繁にターゲットノードと共起する隣接ノードは、コレクション内で共起する頻度が低いノードに比べて、ターゲットノードにより関連性があり、ターゲットノードとの関係性が高いとされる。一般的に言えば、ターゲットノードとの関係性(例えば、共起の頻度、参照の頻度、特徴の類似性など)の強い隣接ノードが、ターゲットノードの関連する近傍と見なされる。カレントターゲットノードの関連する近傍を判定することは、図3のルーチン300に関して記載されており、ターゲットノードの関連する近傍を識別するために、ランダムウォークと呼ばれる新規のデータ処理に依拠する。
【0027】
開示された主題の態様によれば、「ランダムウォーク」は、コーパスグラフに記録された、あるノードから別のノードへの参照の頻度に依拠することにより、ターゲットノードの関連する近隣を識別する。このランダムウォークは、関連する近隣を識別する際に、ターゲットノードの関連する近傍の距離/範囲を制限し、さまざまなエッジの頻度/強度に依拠するような仕方で、エッジ/関係のトラバーサルのランダムな選択を利用して、コーパスグラフのサブグラフを識別し、その場合、サブグラフがターゲットノードの関連する近傍に相当する。このようにして、コーパスグラフの所与のサブグラフ内で、より強い関係を持つノードが、所与のノードの関連する近傍として識別される。
【0028】
図3に移ると、図3は、コーパスグラフ内のターゲットノードの関連する近傍を識別するためのランダムウォークの態様を実施するのに適した例示的なルーチン300であって、開示された主題の態様による例示的なルーチン300を示す流れ図である。ルーチン200と同様に、ターゲットノードはルーチン300への入力パラメータである。
【0029】
ブロック302では、コーパスグラフ100内のターゲットノードが識別される。ブロック304では、「カレントノード」と呼ばれる、ルーチン300で使用するためのテンポラリ変数が、入力されたターゲットノードで初期化される。説明のために、ターゲットノードがコーパスグラフ100のノードJであると仮定する。
【0030】
ブロック306では、カレントノードから始まる反復ループが開始される。この反復内のさまざまなステップは、ターゲットノードにとって重要で関連性があるノードを識別するために実行される。ターゲットノードにとって重要な近傍ノードが識別されるようにするには、重要で関連性があるノードの正確な表示を生成するために、十分な数の反復が選択されなければならない。多くの実行可能な反復回数があるが、一実施形態では、10000回の反復が効率的にかつオンデマンドで実行され得る。
【0031】
ブロック308では、ランダムウォークの最初のデータ処理として、カレントノードをターゲットノードに戻すかどうか判定が行われる。カレントノードをターゲットノードに戻すことで、「次の」カレントノードの選択がターゲットノードから極端に離れて分岐しないようにする。開示された主題の態様によれば、ターゲットノードに戻す判定は、ランダムな判定である。例えば、一実施形態では、3つの選択肢のうちの1つのランダムな選択が行われ、その場合、3つの選択肢のうちの1つがカレントノードをターゲットノードに戻すリセットを生じさせ、一方、他の2つの選択肢はリセットを生じさせない。もちろん、ターゲットノードの識別された近傍の所望の幅および深さに応じて、リセットするための他の多くの比率(たとえば、4のうち1、5のうち2、7のうち2など)を使用することができる。ブロック308でのこのランダムな選択に関して、ランダムな判定がカレントノードをターゲットノードに戻すことである場合、ブロック310では、カレントノードがターゲットノードに戻るようにリセットされる。あるいは(リセットしないで)、ルーチン300はブロック308から直接ブロック312に進む。
【0032】
ブロック312において、カレントノードを参照して、カレントノードと他の接続されたノードとの様々な接続の中から、接続の選択が行われる。この選択は、カレントノードとその他のノードとの接続の中からのランダムな選択として行われ、カレントノードと別のノードとの接続の頻度を考慮して行われる。例えば、図1のコーパスグラフ100を参照すると、ノードFはノードDおよびHの両方に接続されている。任意のノード間の頻度を考慮せずに、ノードFから次のカレントノードをランダムに選択すると、ノードDまたはノードHのいずれかを選択する確率は50%になる。また一方、ノードFとノードDとの関係の頻度が、ノードFとノードHとの関係の頻度の3倍であるとすれば、ノードFからノードDが選択される確率は75%になる。ブロック312の次の/新しいカレントノードをランダムに選択する一環として、選択されたノードは新しいカレントノードになる。
【0033】
ブロック314では、新しいカレントノードが、カレントノードの「訪問済みリスト」に既に存在するかどうか判定が行われる。この訪問済みリストは、カレントノードに対するランダムウォークの一環として訪問されたノードを追跡し、さらに、このランダムウォーク中にリスト内の各ノードが訪問された回数を追跡し、および/または表示するものである。したがって、ブロック314で、新しいカレントノードが訪問済みリストにおいてまだ識別されていないと判定された場合、ブロック316で、カレントノード(たとえば、ノードI)が、訪問済みリストに追加され、ゼロ(以前の訪問なし)に初期化される。
【0034】
ブロック318では、この新しいカレントノードに対する訪問済みリスト中の訪問カウントがインクリメントされ、ランダムウォークの一環として新しい訪問を指示する。ブロック320では、上記の反復のステップを完了した後に、実行すべき反復がさらにある場合、ルーチン300は、次の反復のためにブロック306に戻る。実行すべき追加の反復がない場合、ルーチン300はブロック322に進む。
【0035】
ブロック322において、訪問リストが検査されて、どのノードがターゲットノードに最も関連しているかを、様々な訪問カウントに応じて判定する。このターゲットノードの関連する近傍の選択は、例えば(限定ではなく実例として)、訪問カウントが最も多い上位n個のノード(例えば、最も頻繁に訪問される上位200個のノード)、訪問カウントが最も多い上位nパーセントのノード(たとえば、訪問された上位10パーセントのノード)、閾値訪問回数を持つ上位n個のノード(たとえば、少なくとも20回訪問されたノード)、すべての訪問の少なくとも閾値パーセンテージを集合的に占める上位n個のノード(たとえば、訪問の少なくとも15%を集合的に構成する上位訪問済みノード)など、様々なノードにおける訪問回数に基づく幾つもの基準に従って行うことができる。多くの場合、訪問されたノードの総数は、閾値の数および/またはパーセンテージを判定する際の要因となり得る。
【0036】
図4A図4Fは、開示された主題の態様による、図1のコーパスグラフの例示的なサブグラフを示し、各サブグラフが、コーパスグラフのターゲットノードの関連する近傍を表す絵図である。これらのサブグラフ(サブグラフ400~410を含む)のそれぞれにおいて、それぞれのサブグラフの影付きノードはターゲットノードを表し、影なしノードはランダムウォークプロセスによって判定された近隣ノードを表す。図4A図4Fを参照すると、サブグラフ400は、RN(J)={G,H,I,L,P}と表記されるノードG、H、I、L、およびPの集合を構成するものとして、ターゲットノードJの関連する近傍を例示する。以下のリストは、ルーチン300のランダムウォークプロセスによって判定され得る、コーパスグラフ内の様々なノードの例示的な関連する近傍を示す。
【0037】
RN(J)={G,H,I,L,P}、
RN(G)={E,J,Q,S}、
RN(H)={D,F,I}、
RN(I)={D,F,H,J,L}、
RN(L)={H,I,J,N,P,U}、および
RN(P)={A,B,L,U}
【0038】
開示された主題の態様によれば、図4A図4Fに示すように、ノードJなどのターゲットノードの関連する近傍ノードは、ターゲットノードに直接接続されなくてもいい。例えば、サブグラフ406のノードD、F、およびJは、ターゲットノードIに間接的にのみ接続されながらも、ターゲットノードIの関連する近傍に含まれている。近傍埋め込み情報のための近傍ノードの処理の際に、ルーチン300のこの部分では、ターゲットノードと近傍ノードとの間のリンク距離は影響しない。
【0039】
ターゲットノードの関連する近傍のノードを識別した後、ルーチン300は終了する。
【0040】
再びルーチン200に戻り、カレントターゲットノードの関連する近傍を識別した後、ブロック210において、カレントターゲットノードの関連する近傍から近傍埋め込み情報を生成する目的で、反復ループが開始される。この反復プロセスは、カレントターゲットノードの関連する近傍のノードのそれぞれのために繰り返し適用される。ターゲットノードJに対しての例を参照すると、反復ループは、ノードG、H、I、L、およびPの集合のために繰り返し適用される。
【0041】
ブロック212では、近傍ノードを反復することの一環として、この同じルーチン200への再帰呼び出しは、ターゲットノードが現在反復中の近隣ノードであり、インクリメント/増加された入力レベルで行われる。上記の例を続けると、ルーチン200は、入力レベルが1のターゲットノードGに対して呼び出され得る。
【0042】
近隣ノードの集約埋め込みベクトルを判定した後、ブロック214で、処理すべき追加の隣接ノードがある場合、ルーチン200は、追加の処理/反復のためにブロック210に戻る。あるいは、すべての近隣ノードが処理されると、つまり、カレントターゲットノードの近隣ノードのそれぞれの集約埋め込みベクトルが生成されたことを意味し、ルーチン200はブロック216に進む。
【0043】
ブロック216では、近隣ノードの集約埋め込みベクトルが集められ、近傍埋め込み情報に結合される。図5を参照すると、図5は、ターゲットノードの近隣の近傍埋め込みベクトルを近傍埋め込み情報に集約するための、開示された主題の態様による、例示的なルーチン500を示す流れ図である。
【0044】
ブロック502で開始すると、反復ループが開始されて、ターゲットノードの近隣のそれぞれのために繰り返される。上記の例に関しては、ターゲットノードがノードJであるとすれば、これは、ルーチン500が、ノードG、H、I、L、およびPのそれぞれのために繰り返し適用されることを意味する。ブロック504で、(ルーチン200の反復によって判定される)現在反復中の近隣ノードの集約埋め込みベクトルがアクセスされる。ブロック506では、反復は、近傍ノードの集約埋め込みベクトルにさらにアクセスするためにブロック502に戻るか、または近傍ノードの集約埋め込みベクトルがアクセスされた後、ブロック508に戻る。
【0045】
ブロック508で、近傍ノードのそれぞれに対して重要度値が決定される。重要度値は、ターゲットノードの関連する近傍内の特定のノードが、この関連する近傍内の他のノードよりもターゲットノードとの関係性または適合性が強いことを反映している。このステップ(ブロック508)は、この重要度を取得するために使用される。開示された主題の態様によれば、ノードの重要度値は、ターゲットノードに対応する(ルーチン300に関して上記で説明した)訪問リストに載っている様々な近傍ノードの訪問カウントに応じて決定され、関連する近傍の識別時に決定される。
【0046】
ブロック510において、開示された主題の一実施形態によれば、近傍ノードの合計された訪問カウントは、それらがまとめて合計で100になるように、ノード間で比例的にスケール変更され、または正規化される。次に、これらの比例スケールは、近傍埋め込み情報を生成する際に適用され、ここで、近傍埋め込み情報の埋め込み/特徴ごとに、ノードのスケール変更された値に応じて、ノードの埋め込みのランダムな選択の確率を決定して、さまざまな近傍ノードの埋め込みベクトルの中からランダムな選択が行われる。たとえば、上記のように、近傍ノードにノードG、H、I、L、およびPが含まれていると仮定する。また、これらのノードの訪問カウントが、それぞれ、20、10、15、35、および20であると仮定する。この例で分かるように、ノードLは、他のノードよりもターゲットノードJに関連性が高いと見なされるだろう。この例では、これらのカウントを合計すると100になるため、これらのカウントを100にスケール変更することは簡単である。したがって、近傍埋め込み情報の各埋め込みに関して、所与の近傍ノードから埋め込みを選択する確率は、ノードGに対しては20%、ノードHに対しては10%、ノードIに対しては15%、ノードLに対しては35%、ノードPに対しては20%に相当する。
【0047】
代替の実施形態では、様々な近傍ノードの重要度に応じて、近傍ノードからの近傍埋め込み情報の値を集約することは、同じ態様/特徴を対象とするそれらの埋め込み値を識別すること、およびその態様/特徴のための結果として生じる値を選択することを含む。さまざまな実施形態では、競合が生じる場合、現在の近隣の値がその近隣の近隣よりも影響力が大きいと仮定して、埋込みベクトルの態様/特徴が、ネットワーク埋め込み情報にわたって選択される。埋め込みベクトルからの態様/特徴の値がない場合は、ネットワーク埋め込み情報からの値を使用してもよい。
【0048】
さらに別の実施形態では、近傍埋め込み情報のさまざまな要素に、対応する近傍ノードの重要度値が乗算される。その後、平均(ここでは加重平均)が各要素の近傍ノード間で決定される。
【0049】
ブロック512では、さまざまな近傍ノードのノード重要度に従って、近傍埋め込み情報の埋め込み値が選択されて集約される。一例として上記で説明したように、近傍埋め込み情報の各埋め込みに関して、所与の近傍ノードから埋め込みを選択する確率は、ノードのスケール変更された値に相当する。その後、ブロック514において、カレントターゲットノードについての集約された近傍埋め込み情報が返され、ルーチン500は終了する。
【0050】
図2のルーチン200に戻ると、カレントターゲットノードについての近傍埋め込み情報を生成した後、ブロック218で、カレントターゲットノードの埋め込みベクトルと、カレントターゲットノードについての近傍埋め込み情報とが連結され、ターゲットノードの集約埋め込みベクトルを形成する。ブロック220では、ターゲットノードの集約埋め込みベクトルが返される。その後、ルーチン200は終了する。
【0051】
ルーチン200の再帰的性質に関して、当業者が理解するように、再帰呼び出しはコーディングの目的に有利であり得るが、再帰呼び出しは、機能性の範囲から逸脱することなく、非再帰的な様式で実装されてもよい。したがって、ルーチン200は再帰的ルーチンとして記述されているが、これは例示的なものであり、開示された主題を限定するものではない。
【0052】
ルーチン200に記載された再帰的プロセスに関して、当業者は、再帰呼び出しの性質と同様に、各レベルで同様のプロセスが実行されることを理解するであろう。このプロセスには、ターゲットノードの畳み込みによる埋め込みベクトルの生成、ターゲットノードの近隣の埋め込みベクトルの集約による近傍埋め込み情報の生成、およびこの両方の連結によるターゲットノードの集約埋め込みベクトルの形成が含まれる。図6は、各再帰レベルに対して実行され、開示された主題の態様による、集約埋め込みベクトル612の生成プロセス600を示す絵図である。
【0053】
このプロセス600は、ターゲットノード604へのアクセスと、ターゲットノードの畳み込み608とを含む。さらに、図5のルーチン500に関して先に述べたように、集約埋め込みベクトル622~626などの、ターゲットノードの近隣の集約埋め込みベクトルは、近傍埋め込み情報に結合/集約(606)される。次に、埋め込みベクトルと近傍埋め込み情報とは、ターゲットノードの集約埋め込みベクトル612に連結(610)される。
【0054】
上記の通り、このプロセス600は、特に、ターゲットノードの近隣の集約埋め込みベクトルを生成することに関して、再帰的なプロセスである。さらに、上記のように、再帰的性質は、最大スタッキングレベル(すなわち、複数のレベルからの近傍埋め込み情報の積み重ね)と呼ばれる、ある所定の固定レベルに制限されている。これによって、局部的な近傍を識別し、これらの近傍がターゲットノードに与える影響を識別することが可能となる。
【0055】
図7は、開示された主題の態様による、コーパスグラフ100のターゲットノードであるノードJの集約埋め込みベクトル702の例示的な生成700を示す絵図である。図に示すように、生成プロセスは、集約埋め込みベクトル702を生成するためのノードJに関するプロセス600の適用を含む。図に示すように、ノードJの近隣の組み合わせ/集約606への入力には、ノードG、H、I、L、およびPの集約埋め込みベクトルが含まれる。
【0056】
図に示すように、ノードJの近隣のそれぞれが同様に処理されて、集約埋め込みベクトルを生成する。それぞれには、畳み込まれた埋め込みベクトルと近傍埋め込み情報との連結に加えて、ノードの畳み込みが含まれる。ターゲットノードJの処理との違いは、ノードJの近隣の埋め込みベクトルを処理する際に、入力レベルが他の近隣まで到達せず、各再帰的プロセスにおいて毎回制限されるという事実である。図に示すように、ノードGの集約埋め込みベクトルを処理する際に、ノードE、J、Q、およびSを含むノードGの近隣の埋め込みベクトルも処理される。しかし、入力レベルはノードE処理時に達せられるので、ノードEの近隣は、ノードEの埋め込みベクトル706には織り込まれていない。また、例示の目的で、最終レベルのノードの処理708は簡略化され、ノードの畳み込みのみを示し、NULL近傍埋め込み情報の集約を示さない。また、増加した各レベルの集約埋め込みベクトルは、より少ない近傍埋め込み情報に基づくものであるため、図7の様々なレベルの集約埋め込みベクトルは、若干異なる形状で示されている。より具体的には、(ターゲットノードJの)レベル0の集約埋め込みベクトルを八角形で示し、(例えば、ノードGの)レベル1の集約埋め込みベクトルを六角形で示し、(例えば、ノードEの)レベル2の集約埋め込みベクトルを五角形で示す。
【0057】
当然ながら、コーパスグラフが数十億のノードを含む場合、コーパスグラフ内の各ノードの集約埋め込みベクトルの処理には、かなりの処理帯域幅と処理時間とが必要とされ得る。実際、大規模なコーパスグラフにおけるノードの、こうした集約埋め込みベクトルの生成は、オフラインおよび/またはバッチ方式で行うことができるが、それでも相当な処理リソースと時間とを必要とする。そのような状況では、多くのIT専門家が、コンピュータシステムのアレイを利用してベクトルの処理/生成を行うために、ApacheのHadoopなど、MapReduceの実装に目を向けることを当業者は理解するであろう。
【0058】
当業者が理解するように、MapReduceは、クラスタ上で並列分散アルゴリズムを用いてビッグデータセットの処理および生成を行うためのプログラミングモデルおよび関連実装である。MapReduceの実装は、「マッパー」と「リデューサ」とを含む。マッパーは、所与の入力値に対して出力を生成するアルゴリズムに相当する。リデューサは、マッパーおよび/または他のリデューサの出力値を集約するアルゴリズムである。「MapReduce」は、分散サーバをマーシャリングすること、さまざまなタスクを並行して実行すること、システムのさまざまな部分間のすべての通信とデータ転送とを管理すること、およびリダンダンシとフォールトトレランスとを提供することにより、処理を統制する。
【0059】
開示された主題に関して、また図6および図7に関しては、畳み込み608などの畳み込み演算は、所与の入力、すなわちターゲットノードを取り込み、その入力をさまざまな演算で変換し、出力値、すなわちターゲットノードの埋め込みベクトルを生成するという点でマッパーと見なされる。その一方、集約606は、他のマッパーおよび/またはリデューサの出力を受け入れるリデューサの一例である。ブロック600は、ターゲットノードの畳み込みを、集約606から得られるネットワーク埋め込み情報と組み合わせて、集約埋め込みベクトル612を生成するための組み合わせ610を示しているが、この区別は、例示目的のための論理的な区別であった。ただし、開示された主題の様々な実施形態では、集約606および組み合わせ610は、集約埋め込みベクトル612を生成するための単一のリデューサ演算に含まれる。
【0060】
コーパスグラフ内のノードの結果(たとえば、集約埋め込みベクトル)を生成することへの一般的なアプローチは、すべてのノードを反復し、各ノードに対して、集約埋め込みベクトルを生成することである。さまざまな入力は、コーパスグラフ内の所与のターゲットノードについて、ターゲットノードの埋め込みベクトル、ターゲットノードの近傍埋め込み情報を判定し、終段のリデューサの一環として、2つの値を集約埋め込みベクトルにまとめるMapReduceインプリメンテーションに送られる。このアプローチは、所望の結果を達成する一方で、処理帯域幅の面で著しく非効率的であり、処理の際の非効率性のために多大な時間を必要とする可能性がある。図7図700について説明するために、この単純な図では、ノードJがマッパー/畳み込みへの入力として4回現れることを考慮されたい。当然ながら、ノードJの埋め込みベクトルを、要求されるたびに計算することは、かなりの非効率となる。
【0061】
開示された主題の態様によれば、コーパスグラフのノードは、MapReduceインプリメンテーションによって集約埋め込みベクトルを生成するために、コーパスグラフにわたって2回の「パス」を行うだけでよいように、独特の方法で処理される。この新規のアプローチにおいては、各ターゲットノードを完全に処理する(つまり、その集約埋め込みベクトルを生成する)のではなく、コーパスグラフ内の各ノードに対して埋め込みベクトルが(畳み込みマッパーを介して)生成される。最初のパス/ステップでは、生成された埋め込みベクトルは、少なくとも一時的に、対応するターゲットノードと共に格納される。次のパスでは、ターゲットノードが利用可能であるとき、ターゲットノードのうちのそれぞれのノードの関連する近傍がアクセスされ、対応する集約埋め込みベクトルに(集約マッパーを介して)集約される。実際に、図6および図7では、近傍埋め込み情報を判定する際に使用されるスタッキングのレベルに応じて、1つ以上の中間パスを提案しているが、これらは論理的なステップであり、単一の集約リデューサが、中間の集約(すなわち、第1のレベルの集約埋め込みベクトル)を含む、埋め込みベクトルの集約および組み合わせを行うことができる。
【0062】
開示された主題の更なる実施形態によれば、コーパスグラフのノードの関連する近傍がまだ生成されていない場合、第1の実施形態では、コーパスグラフのノードの集約埋め込みベクトルを生成するようにMapReduceフレームワークを構成することに加えて、コーパスグラフのノードを反復し、各ノードについて、ノードの関連する近傍を判定して、その関連する近傍をノードに関連付けるために、プロセスが実行され得る。あるいは、MapReduceフレームワークのマッパー関数を、ノードの埋め込みベクトルを生成するとともに、各ノードの関連する近傍を生成するように、追加として構成してもよい。さらには、追加のマッパー関数をフレームワークに追加し、この追加のマッパー関数を、コーパスグラフのノードを反復し、各ノードに対して、コーパスグラフ内のノードの関連する近傍を生成して、その関連する近傍をノードに関連付けるように構成してもよい。
【0063】
図17を参照すると、図17は、コーパスグラフ内の複数のノードのうちのそれぞれのノードの集約埋め込みベクトルを効率的に生成するのに適した例示的なルーチン1700を示す流れ図である。ブロック1702で開始すると、コーパスグラフ(コーパスグラフ100など)がアクセスされる。
【0064】
ブロック1704において、実行可能な様々な呼び出しが行われて、処理すべき様々なノードのうちのそれぞれのノードの関連する近傍を生成し、および/または判定する。開示された主題の態様によれば、任意の所与のノードの関連する近傍を生成することは、図3のルーチン300に関して上に述べた通りである。もちろん、多くの場合、所与のノードの関連する近傍が既に判定されて、キャッシュされていることがあり、その場合、そのノードの近傍は単にキャッシュされる。一実施形態では、ノードは、複数の処理コア、例えば、128個の処理コアを有する1つ以上のコンピュータによってバッチ方式で処理される。
【0065】
ブロック1706では、MapReduceフレームワークは、実行時にコーパスグラフのさまざまなノードの埋め込みベクトルを生成する1つ以上のマッパー関数で構成される。これらの埋め込みベクトルは、それらの関連する近傍にではなく、ノード自体に基づいている。
【0066】
ブロック1708では、実行可能なMapReduceフレームワークは、実行時に、マッパー関数の生成されたデータを(埋め込みベクトルの生成の際に)集約して、コーパスグラフ内の対応する複数ノードの複数の集約埋め込みベクトルを生成する1つ以上のリデューサ関数で構成される。
【0067】
MapReduceフレームワークが適切に構成されていると、例示的なルーチン1700によって、コーパスグラフへのアクセスがMapReduceフレームワークに提供され、さらにMapReduceフレームワークが実行される。当然ながら、当業者が理解するように、その場合、この実行は、コーパスグラフのノードの集約埋め込みベクトルを生成するために、協調構成要素の指示の下で、コーパスグラフのさまざまなノードのために繰り返される。
【0068】
実例および一例として、開示された主題の態様によれば、ブロック1704に関しては、コーパスグラフのノードに対して、以下の表1などの情報テーブルが生成され得る。
【表1】
表1-ノードおよび関連する近隣データ
【0069】
ブロック1706に関しては、MapReduceフレームワークは、1つ以上のマッパー関数で構成されている。一例では、マッパー関数は、所与のノード(またはそれを構成する要素)を取り込み、ノードの埋め込みベクトルを生成するように作用し、以下の表2に示すように、キー(ノード)および値(埋め込みベクトル)を持つデータの表を生成する。
【表2】
【0070】
MapReduceフレームワーク内の別のマッパー関数(または一連のマッパー関数)は、例えば表1に示すように、ノード/関連する近隣データを、1つ以上のリデュース関数によって容易に処理できるデータに取り込むように構成される。この関連で、ノードをその関連する近傍に関連付けるデータセットは、以下の表3に示すように、ノード、近隣ノード、および近隣ノードの埋め込みベクトルを有するデータセットにマッピングされている。
【表3】
表3-マッパー関数の結果:ノード/近隣/埋め込みベクトルデータ
【0071】
処理を完了するために、これら(および場合によっては、利用されているMapReduceフレームワークに応じて必要となり得る他のテーブル)を用いて、MapReduceフレームワークの1つ以上のリデューサ関数、または一連のリデューサ関数は、以下の表4に示すように、コーパスグラフ内のノードのうちのそれぞれのノードの集約埋め込みベクトルに情報を集約するように構成されている。
【表4】

表4-リデューサ関数(複数可)の結果:ノード/集約埋め込みベクトルデータ
【0072】
理解されるように、これらのMapReduce関数は、マッパーおよびリデューサの両方とも、上記のごとく図5図6、および図7で概説されているように、コーパスグラフ内のノードのうちのそれぞれのノードの集約埋め込みベクトルの生成を効率的に実行するように構成されている。
【0073】
ブロック1710で、MapReduceフレームワークを構成した後、コーパスグラフのノードが、それらの関連する近傍とともに、MapReduceフレームワークに渡され、フレームワークが実行されて、コーパスグラフのノードの集約埋め込みベクトルが生成される。その後、ルーチン1700は終了する。
【0074】
上記のように、開示された主題の様々な態様によれば、コンテンツアイテムの埋め込みベクトルは、畳み込みプロセスから生成され得る。一般に、限定されるものではないが、畳み込みプロセスは、訓練されたディープニューラルネットワークによって実行される。図8は、開示された主題の態様による、1つ以上のコンテンツアイテムおよび対応するメタデータ(コンテンツアイテム802など)の、1つ以上の埋め込みベクトル(埋め込みベクトル820など)を生成するのに適した深層学習ネットワーク800(深層学習モデルとも呼ばれる)の要素を示す絵図である。
【0075】
当業者は理解するであろうが、ディープニューラルネットワーク800は、入力層804および出力層816を含む複数の実行層、ならびに1つ以上の隠れ層を含む。実例として、実行可能モデル800は、隠れ層806および818を含む、m個の隠れ層を含む。入力層804は、モデル800が、対応する結果(例えば、埋め込みベクトル820)を生成する入力データ(例えば、コンテンツアイテム802およびそのメタデータ)を受け入れる。
【0076】
入力層804は、入力データ(この場合、コンテンツアイテム802と、コンテンツアイテムに関連付けられ得る任意のメタデータ)を受け入れ、1つ以上の所定のアルゴリズムおよび/またはヒューリスティックに従って、入力データから、1つ以上の態様、特徴、および/またはファセットに対する複数の値を生成する。これらの値(図示していないが、入力層804から第1の隠れ層806の別々の処理ノードまで延びる、エッジ814などの個々のエッジによって暗に示される)は、第1の層の出力であり、実行可能モデル800の第1の隠れ層にある処理ノード810および812などの処理ノードに、入力データとして分配される。
【0077】
一般に、限定されるものではないが、入力層804から、第1の隠れ層の第1の処理ノード(隠れ層806のノード810など)に渡される入力データの値/ファセットは、その同じ隠れ層の第2の処理ノード(隠れ層806のノード812など)に渡される値/ファセットとは異なる。
【0078】
各隠れ層は、複数の処理ノードを含む。限定ではなく実例として、隠れ層806は、n個の処理ノードN1~Nnを含む。第1の隠れ層806の処理ノードは、一般に、限定されるものではないが、入力層からの単一の入力を有するが、次の隠れ層の処理ノードは、一般に、前の入力層の、1つ以上の処理ノードからの入力値を有する。実行可能モデル800に示すように、各隠れ層(第1の隠れ層806を除く)は、「上位」隠れ層(例えば、層806)の処理ノードから「下位」隠れ層に進むエッジによって指し示されるように、先行する隠れ層の処理ノードのそれぞれからの入力データ/入力信号を受け入れる。
【0079】
各処理ノードは、(処理ノードが、単一のアイテムの入力データを受け取るか、複数のアイテムの入力データを受け取るかにかかわらず)受け取る入力データに対する1つ以上の「畳み込み」または「計算」を実施して、単一の出力を生成する。これらの畳み込み/計算は、(限定ではなく実例として)集約、クラスタリング、変換、組み合わせ、選択および/またはフィルタ、数学的操作、線形回帰および多変数回帰、統計的判定および統計的予測など、出力データを生成するための幾つもの関数を含み得る。さらに、入力データの個々のアイテムは、任意の処理ノードの全体的な計算において、入力データの所与のアイテムが、多かれ少なかれ役割を果たすように重み付けされてもよい。入力データのアイテムは、畳み込みで無視されるように重み付けされてもよい。ハイパーパラメータ(前の入力レベルの処理ノードの外部にあるソースから入力されるデータ/値)は、また、隠れ層の全部または一部の処理ノードで利用されてもよい。
【0080】
当業者には理解されるように、機械学習の興味深い態様の1つは、機械学習モデルの様々なレベルが自己学習であることであり、つまり、フィードバックが与えられると、より良い結果を得るために、様々な層のノードの重み、パラメータ、および処理に修正が加えられることを意味している。したがって、機械学習プロセスの訓練段階で最初に設定されたさまざまな処理ノードの計算を別にすれば、隠れ層の特定の処理ノードが利用できる正確な計算に関して、人が特定の洞察または知識を持つことはほとんどない。代わりに、機械学習プロセスの訓練プロセスの間に、機械学習プロセスは、受け取る入力値に対してより望ましい/優れた結果を生み出すために、各計算をどのように修正するかについて、独自の判定を行う。
【0081】
最終の隠れた入力層、例えば層818において、処理ノードは、それらの出力データを出力層816に供給する。出力層816は、モデルの出力値を生成するために、入力データの様々なアイテムのあらゆる集約、計算、正規化、および/または解釈を実行する。図示の例では、出力層816は、コンテンツアイテム802および対応するメタデータのための埋め込みベクトル820を生成する。開示された主題の一実施形態によれば、コンテンツアイテムの埋め込みベクトルを生成するために、出力層816は、最終の隠れ層818からの出力データの各アイテムを、埋め込みベクトルの次元として集約する。
【0082】
機械学習モデルの訓練に関して、開示された主題の態様によれば、ターゲットノードの関連する近傍に関する情報を利用して、ますます難しくなる訓練データを生成することによって、結果として得られる訓練済みモデルの精度の更なる向上とともに、機械学習モデルを訓練する時間の効率を高める(反復を減らす)ことができる。
【0083】
図9は、開示された主題の態様による、ますます難しくなる訓練データを利用して機械学習モデルを訓練するのに適した例示的なルーチン900を示す流れ図である。ブロック902で開始すると、機械学習モデルの訓練では典型的であるが、機械学習モデルは、様々な畳み込みルーチン、集約ルーチン、変換ルーチン、ハイパーパラメータなどで初期化される。
【0084】
ブロック904では、機械学習モデルを訓練するための訓練データにアクセスされる。当業者が理解するように、機械学習モデルは、訓練データを使用して訓練される。この訓練データは、一般的には、処理用のレコードを含むようにキュレート(または編成)され、実際の結果/正しい結果を示すように編成される。開示された主題の態様によれば、レコードは、ターゲットノード、(ターゲットノードにマッチさせる)マッチングノード、および非マッチングノードを含むトリプレットである。処理中に、機械学習モデルに提示されるマッチングノードと非マッチングノードとの順序はランダム化されており、機械学習モデルのタスクは、マッチングノードと非マッチングノードとの間で、どちらをターゲットノードにマッチさせるかを選択することである。機械学習モデルの出力結果は、その後、機械学習モデルがマッチングノードを正しく識別したかどうかに関して、訓練レコードの情報と比較され得る。
【0085】
関連する近傍に関する情報を活用するには、この訓練データは不完全な場合がある。この点で、不完全な訓練データとは、機械学習モデルによる処理が完了するために、追加情報を必要とする訓練レコードを意味するものと理解すべきである。適宜に、ブロック906において、(訓練データが不完全ということが起こる場合の)任意選択のステップが、訓練データを完全なものにするために実行される。
【0086】
開示された主題のある実施形態によれば、不完全な訓練データは、訓練レコードのセットを含み、各レコードが、コーパスグラフ内からのターゲットノードのみを含んでもよい。この実施形態では、ノードの関連する近傍を識別するために、ターゲットノードに対してランダムウォークが実施される。関連する近傍が識別されると、ターゲットノードとの(訪問カウントによって判定される)適合性が最も高い関連する近傍内の近隣ノードが特定され、マッチングノードとしてレコード内に含められる。さらに、コーパスグラフ内のランダムノードが識別され、または選択され、非マッチングノードとして訓練レコードに含められる。コーパスグラフが、例えば、何十億もの相互接続されたノードであり、十分に大きい場合、ランダムに非マッチングノードとしてノードを選択すると、特に識別されたマッチングノードと比較して、ターゲットノードにマッチしないノードを識別する可能性が高くなる。
【0087】
開示された主題の代替実施形態によれば、不完全な訓練データは、各レコードがターゲットノードとマッチングノードの両方を含む訓練レコードのセットを含んでもよい。訓練レコードは、コーパスグラフからランダムに選択されたノードを、訓練レコードのそれぞれに対して、非マッチングノードとして追加することで完成する。当然ながら、ある実施形態では、訓練データは完全であってもよい。
【0088】
この初期の完全な訓練データに関して、対応するターゲットノードのマッチングノードとして最も関連する近隣ノードを選択するか、またはターゲットノードとマッチングノードとの間にキュレートされたマッチングを有し、さらにランダムノードを非マッチングノードとして選択する目的は、比較的容易に処理できる初期の訓練データのセットを提供することである。この比較的簡単な訓練データにより、機械学習モデルの訓練期間が比較的短くなり、精度しきい値を比較的高く保つことができるため、精度が向上する。
【0089】
ブロック908において、当業者が理解するように、訓練データは、確率的に訓練セットと検証セットとに編成される。このうち、訓練データは、(上記のように)機械学習モデルの訓練に使用され、検証セットは、モデルが、訓練セットでの訓練において、精度のしきい値レベルであるとされるレベルに達したときに、機械学習モデルの精度を判定するために使用される。
【0090】
ブロック910で、機械学習モデルは、初期訓練データに従って訓練される。機械学習モデルの訓練については、図10に関連してより詳細に説明する。実際に、図10を参照すると、この図は、開示された主題の態様による、機械学習モデルを訓練するのに適した例示的なルーチン1000を示す流れ図である。
【0091】
ブロック1002で、反復ループが開始されて、訓練データの訓練セットのために繰り返される。ブロック1004で、機械学習モデルは、現在反復中の訓練レコードを処理する。当業者が理解するように、訓練レコードの処理は、図8に関連して一般的に上に述べたように、そこで情報が処理される機械学習訓練モデルに情報を提供することを含む。提案されているように、処理は、機械学習モデルが、マッチングノード/非マッチングノードの提供される順序に基づいて結果を学習しないように、マッチングノードと非マッチングノードとの順序をランダム化することを含んでもよい。
【0092】
訓練レコードの処理に関して、特にターゲットノードを対応するマッチングノードにマッチさせることに関して、一実施形態では、この「マッチング」は、3つのノードの埋め込みベクトルに従って実行されてもよい。より具体的には、機械学習モデルは、ターゲットノードの埋め込みベクトルのさまざまな要素を、マッチングノードおよび非マッチングノードの埋め込みベクトルの対応する要素と照合して、どちらがマッチングノードであるかを判定する。開示された主題の態様によれば、マッチングは、埋め込みベクトルのコサイン類似度に従って判定される。この関連で、Qをターゲットノードの集約埋め込みベクトル、Mをマッチングノードの集約埋め込みベクトル、NMを非マッチングノードの集約埋め込みベクトルとする。「マッチ」は、QとMのコサイン類似度が、QとNMのコサイン類似度に、あるスカラーマージンdを加えた値よりも大きい場合に検出され、cos(Q,M)>cos(Q,NM)+dと表記される。
【0093】
当業者には理解されるであろうが、機械学習モデルは、埋め込みベクトルのどの要素を比較するか、どの要素がマッチングにおいて最も重要であるか(すなわち、様々な要素に関連付けられた重み)、比較に基づいて、何がマッチングを示すか(すなわち、コサイン類似度関数)、比較に基づいて、ターゲットノードとマッチングノードとの間、およびターゲットノードと非マッチングノードとの間のマッチングの尤度が何であるかなどを「学習」する。
【0094】
ブロック1006では、現在反復中の訓練レコードの処理結果が追跡され、これは、実際の結果に対する訓練レコード内のアイテムに応じて(機械学習モデルによる)予測結果を記録することを含む。この追跡は、集計されると、機械学習モデルの訓練の結果を検証し、および/または機械学習モデルの訓練についての更新情報を提供するのに使用することができる。
【0095】
さらに、ブロック1006において、訓練セットの一部として処理すべき追加の訓練レコードがある場合、ルーチン1000は、次の訓練レコードを処理するためにブロック1002に戻る。あるいは、全ての訓練レコードが処理された場合、ルーチン1000はブロック1008に進む。
【0096】
ブロック1008では、機械学習モデルが完全に訓練されたかどうか判定されるよう実際の結果に応じて、機械学習モデルの(モデルの現在の訓練状態を反映する)結果が評価される。この評価/判定の結果、(現在訓練中の)機械学習モデルの総合的な精度を示すスコアが得られる。このスコアを用いて、決定ブロック1010では、十分なレベルの精度が機械学習モデルによって達成されたかどうか(すなわち、スコアが許容可能なしきい値レベルを満たすか、またはそれを超えるか)の判定が行われる。
【0097】
機械学習モデルの現在の精度が許容可能なしきい値を満たさない場合、ルーチン1000はブロック1012に進む。ブロック1012では、(実際の結果に応じて)追跡された結果が、機械学習モデルの態様を更新するか、または訓練するのに使用される。これらの更新は、さまざまな処理層への変更、および/またはさまざまな層で使用されるさまざまなハイパーパラメータへの変更を含んでもよい。追跡された結果に応じて機械学習モデルを更新した後、次いでルーチン1000は、次に、訓練セットの反復がリセット/再初期化され、訓練レコードが再び機械学習モデルによって処理されるようにするブロック1002に戻る。
【0098】
決定ブロック1010を参照すると、上記の結果が許容可能なしきい値レベルを満たしていると判定された場合、ルーチン1000はブロック1014に進む。ブロック1014で、反復ループが開始されて、検証セット内の検証レコードのために繰り返される。この検証レコードの反復は、ここで、機械学習モデルが訓練セットの訓練レコードの中のパターンを単に学習しただけでなく、実際に満足できる/許容可能なレベルの精度が達成されたことを検証するためのものである。当業者が理解するように、機械学習モデルは、訓練されている過程では、訓練セット上で許容可能な結果(精度のしきい値レベル)を生成するが、検証セットでその許容可能なレベルを達成できない結果となるのは珍しいことではない。
【0099】
ブロック1016において、検証セットの現在反復中の検証レコードは、機械学習モデルによって処理され、この処理は、マッチングノード/非マッチングノードの入力順序をランダム化することを含んでもよい。ブロック1018では、処理の結果が追跡され、処理すべき追加の検証要素がある場合、ルーチン1000はブロック1014に戻る。あるいは、処理すべき追加の検証レコードがない場合、ルーチンはブロック1020に進む。
【0100】
ブロック1020では、機械学習モデルが完全に訓練されたかどうか判定されるよう実際の既知の結果に応じて、機械学習モデルによる検証セットの(モデルの現在の訓練状態を反映する)処理結果が評価される。この評価/判定の結果、(現在訓練中の)機械学習モデルの総合的な精度を示すスコアが得られる。このスコアを用いて、決定ブロック1022では、十分なレベルの精度が機械学習モデルによって達成されたかどうか(すなわち、スコアが許容可能なしきい値レベルを満たすか、またはそれを超えるか)の判定が行われる。
【0101】
決定ブロック1022において、精度しきい値が満たされない場合、ルーチン1000はブロック1024に進む。ブロック1024では、(実際の結果に応じて)追跡された結果が、機械学習モデルの態様を更新するか、または機械学習モデルを訓練するのに使用される。上記のように、これらの更新は、さまざまな処理層への変更、および/またはさまざまな層で使用されるさまざまなハイパーパラメータへの変更を含んでもよい。検証セットの追跡された結果に応じて機械学習モデルを更新した後、次いでルーチン1000は、ブロック1002に戻って、訓練セットを始めとして全プロセスを開始し、その場合、訓練セットの反復がリセット/再初期化され、訓練レコードが再び機械学習モデルによって処理されるようにし、続いて検証セットも同様に処理される。
【0102】
再び決定ブロック1022を参照すると、検証セットの結果が許容範囲内であるか、または許容範囲を超えると判定された場合、機械学習モデルを許容可能なレベルの精度まで十分に訓練したので、ルーチン1000は終了する。
【0103】
再び図9に戻ると、ブロック910において、初期訓練データに基づいて機械学習モデルを訓練した後、ルーチン900はブロック912に進む。
【0104】
上記の通り、開示された主題の態様は、ますます難しくなる訓練データのセットに基づいて機械学習モデルを訓練することを含む。ブロック912で、反復ループが開始されて、訓練し、訓練データの難易度を上げることの繰り返しが実行される。一実施形態では、この反復は(2)回実行されるが、任意数の反復を使用してもよい。さらに、増加した難しい訓練データのセットを生成するという後続の説明は、訓練データの初期セットとの関連で行われるが、各難易度では、新たに生成された訓練データのセットを利用できる。
【0105】
現在の反復に伴い、ルーチン900はブロック914に進む。ブロック914で、訓練データは、難易度の高いレベルに更新される。ランダムウォークを含む(初期訓練データに基づく)訓練データの難易度を上げるために使用できるいくつかの戦略がある。それぞれにおいて、ターゲットノードの関連する近傍を識別するために、ターゲットノードに対してランダムウォークが実行される。このランダムウォークは、近傍ノードの選択がターゲットノードからさらに延びることができるように(すなわち、リセットする判定の可能性が低下するように)、含むべきあるしきい値量を下回る訪問カウントを有する近傍ノードを含み、および/または近傍に含めることができる近隣ノードの数を切り捨てないように、変更されてもよい。この拡張された関連する近傍の有無にかかわらず、1つのオプション/戦略は、関連する近傍にアクセスし、非マッチングノードを、ターゲットノードからそれほど遠くない関連する近傍からのノードで置き換えることである。この距離は、連続する反復のたびに、非マッチングノードが、更新されていない非マッチングノードよりもターゲットノードに近くなる(訪問カウントが高くなる)ような、実施された反復の数の関数である。別のオプションは、マッチングノードを、ターゲットノードにあまり近くない関連する近傍からのノードで置き換えることである。ここで、「あまり近くない」は、訪問カウントの関数である。この点で、更新されたマッチングノードは、置換するマッチングノードよりもターゲットノードから離れている(訪問カウントが少ない)。さらに別のオプションまたは戦略は、マッチングノードおよび非マッチングノードの両方を置き換えることである。これらのいずれも、マッチングノードは、非マッチングノードに比べると、ターゲットノードまで遠くない(訪問カウントが少ない)という制限がある。
【0106】
訓練データを更新した後、ブロック916で、更新された訓練データは確率的にセット、すなわち訓練セットと検証セットとに分割される。その後、ブロック918で、機械学習モデルは、図10のルーチン1000に関して上に述べたように、更新された訓練データに基づいて、さらに訓練される。一旦、更新された訓練データで機械学習モデルが訓練されると、ブロック920でルーチンを実行するための追加の反復がある場合、ルーチン900はブロック912に戻り、ますます難しくなる訓練データで機械学習モデルの訓練の反復ループを継続する。あるいは、所定の反復が実行された場合、ルーチン900はブロック922に進む。
【0107】
ブロック922では、現在訓練されている機械学習モデルの実行可能な最適化されたバージョンが生成される。その後、ルーチン900は終了する。
【0108】
上記のルーチン200、300、500、900、1000、および1700、ならびにルーチン1300および1500を含む、本明細書に記載されまたは示唆されている他のルーチンおよび/またはプロセスに関して、これらのルーチン/プロセスは離散的なステップに関して表現されているが、これらのステップは本質的に論理的であると見なすべきであり、所与の実施態様の任意の特定の実際の実行ステップ、および/または離散的な実行ステップに対応している場合もあれば、対応していない場合もある。また、これらのステップがさまざまなルーチンおよびプロセスにおいて提示される順序は、別段の指定がない限り、ステップが実行され得る唯一または最良の順序として解釈されるべきではない。さらに、場合によっては、これらのステップのいくつかを組み合わせ、および/または省略してもよい。ルーチンの最適化を行ってもよい。当業者は、ステップの論理的提示が、論理的命令/ステップが符号化されるいかなる特定の開発言語またはコーディング言語にも関係なく、特許請求された主題の態様を実施するのに十分に有益であることを認識するであろう。さらに、これらのルーチンのいくつかは再帰的ルーチンの関連で明示されているが、当業者であれば、そのような再帰的ルーチンが、関数または結果を実際に修正することなく、非再帰呼び出しとして容易に実装できることを理解するであろう。したがって、特定の機能性を実装するためのプログラミングおよび/または実装技術および実装ツールの特定の使用は、開示された主題を限定するものと解釈されるべきではない。
【0109】
もちろん、これらのルーチンおよび/またはプロセスは、開示された主題の様々な新規の特徴を含むが、他のステップ(記載されていない)もまた、これらのルーチンに記載された主題の実行に含まれ、実行されてもよく、そのうちのいくつかは上に提案されている。当業者は、これらのルーチンの論理的ステップが、共に組み合わされてもよいし、または複数のステップで構成されてもよいことを理解するであろう。上に述べたルーチンのステップは、並行して、または連続して実行されてもよい。多くの場合、さまざまなルーチンの機能性は、以下の図11に関して説明するコンピューティングデバイスなど、コンピューティングデバイスの1つ以上のプロセッサで実行されるソフトウェア(例えば、アプリケーション、システムサービス、ライブラリなど)に具現化されるが、これに限定されるものではない。さらに、さまざまな実施形態では、さまざまなルーチンのすべてまたは一部が、システムオンチップ(SoC)、コーデック、特別に設計されたプロセッサおよびまたは論理回路などを含むが、これらに限定されない、実行可能なハードウェアモジュール内に具現化されてもよい。
【0110】
上記で提案したように、これらのルーチンおよび/またはプロセスは、一般に、ルーチン、関数、ループ構造、セレクタおよびスイッチ(if-then文およびif-then-else文、割り当て、算術計算、ならびに実行時に、ルーチン/プロセスに従って動作するようにコンピューティングデバイスを構成する同類のものなど)を構成する実行可能なコードブロックおよび/またはモジュール内に具現化されている。また一方、各ルーチンの実行可能ステートメントでの正確な実装は、プログラミング言語、コンパイラ、ターゲットプロセッサ、オペレーティング環境、およびリンク操作またはバインディング操作など、さまざまな実装構成および決定に基づいている。当業者は、これらのルーチンで識別された論理的ステップが任意の数の方法で実装され得、したがって、上記の論理的記述が同様の結果を達成するのに十分に可能であることを容易に理解するであろう。
【0111】
開示された主題の多くの新規な態様は、アプリケーション(コンピュータプログラムとも呼ばれる)、アプリ(小さな、一般的に単一または狭い目的のアプリケーション)、および/または方法内で具現化されるルーチンで表現されるが、これらの態様はまた、製品であるコンピュータ可読記憶媒体とも呼ばれるコンピュータ可読媒体によって記憶されるコンピュータ実行可能命令として具現化されてもよい。当業者が認識するように、コンピュータ可読媒体は、後の検索および/または実行のために、コンピュータ実行可能命令およびデータをホストし、格納し、および/または再現することができる。コンピュータ可読ストレージデバイスにホストまたは格納されているコンピュータ実行可能命令がコンピューティングデバイスのプロセッサによって実行されるとき、その実行は、様々な図示されたルーチンおよび/またはプロセスに関して上に述べたステップ、方法、およびルーチンを含む様々なステップ、方法、および/または機能性を実行するように、実行中のコンピューティングデバイスにもたらされ、構成され、および/または適合される。コンピュータ可読媒体の例としては、ブルーレイディスク、デジタルビデオディスク(DVD)、コンパクトディスク(CD)、光ディスクカートリッジなどの光学記憶媒体、ハードディスクドライブ、フロッピーディスク、磁気テープなどを含む磁気記憶媒体、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、メモリカード、サムドライブなどのメモリ記憶装置、クラウドストレージ(すなわち、オンラインストレージサービス)などが含まれるが、これらに限定されない。コンピュータ可読媒体は、搬送波および/または伝搬信号を含む様々な伝送手段および伝送媒体を介して、1つ以上のプロセッサによって実行すべきコンピュータ実行可能命令およびデータを複製し、および/またはコンピューティングデバイスに送達させることができるが、本開示の目的のために、コンピュータ可読媒体は、搬送波および/または伝搬信号を明示的に除外する。
【0112】
コンピュータ可読媒体に関して、図11は、上記に開示されたルーチンおよびプロセスに関して記述される、ターゲットノードの集約埋め込みベクトルを判定するための命令で符号化された例示的なコンピュータ可読媒体を示すブロック図である。より具体的には、インプリメンテーション1100は、コンピュータ可読媒体1108(例えば、CD-R、DVD-R、またはハードディスクドライブのプラッタ)を含み、このコンピュータ可読媒体1108上にコンピュータ可読データ1106が符号化されている。このコンピュータ可読データ1106は、本明細書に記載されている原理の1つ以上に従って動作するように構成された1組のコンピュータ命令1104を含む。そのような一実施形態1102では、プロセッサ実行可能命令1104は、たとえば、例示的なルーチン200、300、および500のうちの少なくとも一部などの方法を実行するように構成されてもよい。別のそのような実施形態では、プロセッサ実行可能命令1104は、以下で説明するように、図12のコンピューティングデバイス1200の例示的な実行可能構成要素の少なくとも一部などのコンピューティングデバイス上に、システムを実装するように構成され得る。本明細書に提示された技法に従って動作するように構成された、そのようなコンピュータ可読媒体の多くは、当業者によって考案され得る。
【0113】
次に図12を参照すると、図12は、開示された主題の態様によるコンテンツレコメンダシステムを実施するために好適に構成された例示的なコンピューティングシステム1200(またはコンピューティングデバイス)を示すブロック図である。コンピューティングシステム1200は、一般に、CPU1202などの1つ以上の中央処理ユニット(またはCPU)を含み、さらに、少なくとも1つのメモリ1204を含む。CPU1202およびメモリ1204、ならびにコンピューティングシステムの他の構成要素は、システムバス1210を介して相互接続されている。
【0114】
当業者には理解されるように、メモリ1204は、一般に(常にではないが)揮発性メモリ1206および不揮発性メモリ1208の両方を含む。揮発性メモリ1206は、メモリに電力が供給されている限り、情報を保持しまたは格納する。対照的に、不揮発性メモリ1208は、電源が利用できない場合でも情報を格納(または持続)することができる。一般的に言えば、RAMおよびCPUキャッシュメモリは揮発性メモリ1206の例であるのに対して、ROM、ソリッドステートメモリデバイス、メモリ記憶装置、および/またはメモリカードは、不揮発性メモリ1208の例である。
【0115】
当業者にはさらに理解されるであろうが、CPU1202は、コンテンツ収集のための有望なデジタルコンテンツアイテムをレコメンドするという様々な機能を実行する際に、メモリ1204から、図11のコンピュータ可読媒体1108などのコンピュータ可読媒体から、および/または他の実行可能な構成要素から読み出した命令を実行する。CPU1202は、当技術分野で周知のシングルプロセッサ、マルチプロセッサ、シングルコアユニット、およびマルチコアユニットなどの数々の利用可能なプロセッサで構成され得る。
【0116】
さらに、図示されたコンピューティングシステム1200は、一般に、図14のネットワーク1408などのコンピュータネットワークを介して、このコンピューティングシステムを他のデバイス、コンピュータ、および/またはサービスと相互接続するためのネットワーク通信インタフェース1212をも含む。ネットワーク通信インタフェース1212は、ネットワークインタフェースカードまたはNICと呼ばれることもあり、物理的/有形(例えば、有線、光ファイバなど)の接続、WiFiもしくはBluetoooth通信プロトコルなどの無線接続、NFC、またはそれらの組み合わせを介して、1つ以上の通信プロトコルを使用してネットワーク上で通信を行う。当業者であれば容易に理解されるように、ネットワーク通信構成要素1212などのネットワーク通信インタフェースは、典型的には、伝送媒体(すなわち、ネットワーク)を介してデジタル信号および/またはアナログ信号の送信および受信を行うハードウェアおよび/またはファームウェアの構成要素(および実行可能なソフトウェア構成要素を含むか、または構成することもできる)で構成されている。
【0117】
また、図示されたコンピューティングシステム1200は、グラフィック処理ユニット(GPU)1214も含む。当業者が理解するであろうように、GPUは、メモリを迅速に操作し、変更するように設計された特殊な処理回路である。当初は、大量のメモリを操作し処理する能力があるため、ディスプレイに出力すべきフレームバッファ内の画像の作成を高速化するように設計されており、GPUは、図8に関して上に述べたように、大量のデータを操作する機械学習モデル/ニューラルネットワークの畳み込みプロセスに有利に適用されている。実際、GPU1214などの1つ以上のGPUは、機械学習技法を実施する際に必須の処理構成要素と見なされる。また、様々な実施形態によれば、GPUは、コンピューティングシステムに含まれ、コンピューティングシステム1200のGPU1214などの、機械学習モデルの畳み込みを処理するために利用可能であることが多いが、複数のGPUもまた、オンラインGPUサービスまたはファームとして配備されることが多く、機械学習処理は、図14の例示的なネットワーク環境1400に関して記載されているように、有利には、ニューラルネットワークの様々な層/畳み込みを実施することを対象とする。
【0118】
コンピューティングシステム1200は、実行可能なコンテンツレコメンダ構成要素1220をさらに含む。コンピューティングシステム1200上での実行において、コンテンツレコメンダ構成要素1220は、以下のルーチン1300に関して説明されたのと同様の方法で動作する。実際、コンテンツレコメンダ構成要素1220は、ネットワーク1408などのネットワークを介してユーザからのクエリを受信し、コーパスグラフ100内のコンテンツアイテム(または密接にマッチするコンテンツアイテム)を識別し、ユーザ向けの潜在的なレコメンデーションを識別し、潜在的なレコメンデーションのうちの少なくとも1つをユーザに提供する。
【0119】
また、コンピューティングシステム1200には、実行可能な埋め込みベクトル生成器1224も含まれる。コンピューティングシステム1200上での実行の際に、埋め込みベクトル生成器1224は、様々なルーチン200、300、および500に関して先に述べたように、コーパスグラフ100内の1つ以上のノードの集約埋め込みベクトルを生成するように構成されている。埋め込みベクトル生成器1224は、所与のターゲットノードの集約埋め込みベクトルを生成する過程で、コーパスグラフ内のノードの様々な埋め込みベクトルを畳み込みまたは生成するように動作する1つ以上の実行可能な畳み込みモジュール1228を含む。同様に、埋め込みベクトル生成器1224は、図5のルーチン500に関して上で説明し記載したように、1つ以上の実行可能な集約モジュール1230を含む。
【0120】
上記のように、複数の処理層を含む機械学習モデルは、CPU1202などの中央処理ユニット(CPU)ではなく、GPU1214などのGPUによって最適に実行される。実際、GPUは大量のメモリを操作し、CPUよりも高速かつ大規模に浮動小数点演算を行うように特別に設計されている。これは、画像など、データが豊富なコンテンツのアイテムを含む大きなデータセットを処理する場合に重要である。実際、GPUの能力により、機械学習モデルは、線形代数方程式を解き、統計解析、回帰などを、特にCPU上での同じ作業と比較した場合に、効率的かつ迅速に行うことを可能にする。一方、GPUは、浮動小数点演算の処理と大量のメモリの操作とに優れているが、CPUは、1つ以上のGPUが処理すべき情報および/またはデータを識別することを、効果的かつ効率的に対象とし得る。
【0121】
開示された主題の態様によれば、例示的なコンピューティングシステム1200は、実行可能な協調モジュール1232をさらに含む。この協調モジュール1232は、CPU1202などのプロセッサと、GPU1214などのGPUとの間で、集約埋め込みベクトルの生成のタスクを効率的かつ有利に分割するように動作する。実際、開示された主題の態様によれば、協調モジュール1232は、ターゲットノードの関連する近傍を識別するようなタスクを、CPU1202などの1つ以上のCPUに指示し、機械学習に対応するタスクは、GPU1214などの1つ以上のGPUに向けられる。
【0122】
開示された主題の態様によれば、協調モジュール1232は、関連近傍識別器1226の活動を、CPU1202などの1つ以上のCPUで働かせるように指示し、畳み込みモジュール1228および集約モジュール1230の活動を、GPU1214などの1つ以上のGPUに向ける。協調モジュール1232は、さらに、1つ以上のCPU上で実行される関連近傍識別器1226によって、ターゲットノードの関連する近傍の情報(関連する近傍のノードに対応する情報を含む)を識別し、マーシャリングし、編成し、その情報を1つ以上のGPU上で実行される畳み込みモジュール1228および集約モジュール1230に提供するという、両者の間の調整を行う。協調モジュールは、CPU1202とは独立して実行される実行可能モジュールであってもよく、様々な実施形態では、協調モジュール1232は、CPU1202によって、またはCPU1202と連携して実行するために実装されてもよい。
【0123】
また、例示的なコンピューティングシステム1200には、実行可能モデル訓練構成要素1234および訓練データの集合体1236も示される。ルーチン900および1000に関して上記に提案したように、開示された主題の態様によれば、モデル訓練器1234は、訓練データが、訓練データの初期セットの後の各レベルで、機械学習モデルが処理することがより難しい反復プロセスを使用して、ディープニューラルネットワーク/機械学習モデルを効率的かつ正確に訓練するように構成されている。より具体的には、訓練の後続の反復のたびに、マッチングノードと非マッチングとを区別することが難しくなるように、訓練データの難易度が上げられる。開示された主題の態様によれば、モデル訓練器1234は、訓練データ1236(訓練レコードで構成され、各レコードがターゲットノード、対応するマッチングノード、および対応する非マッチングノードを含む)内のターゲットノードの関連する近傍を利用して、訓練データの難易度を更新する。有利には、この構造化アプローチを用いて機械学習モデルをトレーニングすること、すなわち、ますます難しくなるトレーニングデータを使用して機械学習モデルを繰り返しトレーニングすることにより、完全にトレーニングされた機械学習モデルの精度が大幅に向上し、機械学習モデルが完全にトレーニングされるまでの速度が大幅に低減される。
【0124】
図13を参照すると、図13は、開示された主題の様々な態様による、ユーザからのクエリに応答するためのレコメンダシステムの例示的なルーチン1300を示す流れ図である。ブロック1302で始まり、図14のレコメンダシステム1410などのレコメンダシステムが、ユーザからクエリを受け取る。上記の通り、クエリという用語は、コンテンツの1つ以上のレコメンデーションが行われることになるユーザからのコンテンツを指す。「クエリ」は、コンテンツアイテムとのインタラクションからコンピュータユーザによって生成されることもあり、必ずしも別途のコンテンツを要求するという直接的な意図によって生成されるとは限らない。
【0125】
ブロック1304で、レコメンダシステムは、コーパスグラフ100などのコーパスグラフにおいて、受信したコンテンツアイテムまたは類似のコンテンツアイテムを識別する。コンテンツアイテムまたは類似のコンテンツアイテムを識別する際に、ブロック1304で、受信したコンテンツアイテムとコーパスグラフ内のアイテムとのマッチングを容易にするために、受信したコンテンツアイテムに対して埋め込みベクトルが生成されてもよい。コーパスグラフ内で類似のコンテンツアイテムを見つける場合には、さまざまな手法を用いてマッチングを行う。一実施形態では、局所性鋭敏型ハッシュ(LSH)技法が使用されて、類似および/またはマッチするコンテンツを識別する。コーパスグラフ内の1つ以上の同様のコンテンツアイテム/ノードの位置を特定するK平均クラスタリングなど、他のマッチング手法を使用することもできる。
【0126】
ブロック1306では、コーパスグラフ内のコンテンツアイテム、またはコーパスグラフ内のニアマッチのいずれかを特定した後、コーパスグラフのアイテムの集約埋め込みベクトルの評価が、ニアマッチを見つけるために使用され、再び、当技術分野で知られているクラスタリングおよびマッチング手法を使用する。
【0127】
ブロック1308では、ニアマッチのセットから、少なくとも1つの潜在的なニアマッチが、ユーザへのレコメンデーションとしてユーザに提供される。その後、ルーチン1300は終了する。
【0128】
図14を参照すると、図14は、開示された主題の態様を実施するのに適した例示的なネットワーク環境1400を示すブロック図である。特に、このネットワーク環境は、コンピューティングデバイス1402~1406などのコンピューティングデバイスを介して操作して、ネットワーク1408越しに、レコメンダサービス1410などの他のオンラインサービスに接続する1人以上のコンピュータユーザを含む。当業者には理解されるように、ユーザコンピュータは、限定ではなく実例として、タブレットコンピュータ(タブレットコンピュータ1404など)、ラップトップコンピュータ、デスクトップコンピュータ(デスクトップコンピュータ1406など)、スマートフォン(スマートフォン1402など)などの様々なコンピューティングデバイスのいずれかを含んでもよい。
【0129】
ユーザコンピュータ1402~1406は、ネットワーク1408などの1つ以上のネットワークを介して他のコンピュータおよび/またはデバイスと通信する。当業者には理解されるように、ネットワーク1408は、コンピューティングデバイスおよびネットワーク対応プロセスおよび/またはサービスが、通信および/またはデータ交換を行うことができる通信ネットワークである。実例として、ネットワーク1408などのコンピュータネットワークは、ローカルエリアネットワークもしくはLAN、ワイドエリアネットワークもしくはWAN、またはその両方の組み合わせのいずれかを含んでもよい。開示された主題の様々な実施形態によれば、ネットワーク1408にはインターネットが含まれ得る。当業者は理解するように、インターネットは、世界中のデバイス(コンピュータを含む)をリンクさせるために定義されたプロトコル群を使用する相互接続されたコンピュータネットワークのグローバルシステムである。さらに、インターネットは、様々な範囲と規模のプライベートネットワーク、公共ネットワーク、学術ネットワーク、ビジネスネットワーク、および政府ネットワークで構成されるネットワークのネットワークであり、多岐にわたる電子、無線、および光ネットワーキング技術によってリンクされている。開示された主題の態様によれば、ユーザコンピューティングデバイス1402~1406を含むパーソナルコンピューティングデバイスは、有線接続、無線接続、光接続、またはこれらの任意の組み合わせを経由して、ネットワーク1408と通信することができる。
【0130】
また、例示的なネットワーク環境1400には、ネットワークコンピューティングシステム上のオンラインレコメンダサービス1410も含まれる。上記のように、オンラインレコメンダサービス1410は、ネットワーク1408を介してコンピュータユーザからクエリを受信し、それに応答して、クエリアイテムに関連するコンテンツの1つ以上のレコメンデーションをユーザに提供するように構成される。
【0131】
例示的なネットワーク環境1400に示すように、開示された主題の態様によれば、レコメンダサービス1410は、GPU1414および1416などの1つ以上のGPUを含むクラウドベースのGPUクラスタ1412など、ローカル、密結合、および/またはリモートのクラウドベースのGPUクラスタを利用してもよい。上記のように、開示された主題の態様によれば、ノードデータと関連する近傍情報との集約埋め込みベクトルへの畳み込みを指示することは、有利には1つ以上のGPU上で実行されてもよく、一方、ターゲットノードの関連する近傍ノードを識別し、データをマーシャリングして編成すれば、1つ以上のCPUで有利に実行することができる。上記で示唆したように、GPUクラスタ1412は、レコメンダサービス1410によって実行され、維持され得る。あるいは、例示的なネットワーク環境1400に示すように、GPUクラスタ1412は、レコメンダサービス1410にアクセス可能なオンラインサービスとして実行されてもよい。
【0132】
GPUクラスタ1412による処理、および他の多くのプロセスに関して、これらのプロセスの動作は、オフラインのバッチモードで行われることが多いことを理解されたい。実際に、GPUクラスタ(例えば、MapReduce機能を実行するように構成されている)を介したアイテムの処理は、オンデマンド方式でユーザ要求にマッチしたまたは類似のコンテンツを識別するために、レコメンダサービス1410によって使用され得る前処理されたコンテンツのデータセットを生成するために、オフライン方式で行われる。
【0133】
1つ以上のCPUと1つ以上のGPUとの間のデューティの割り当てに関して、図15を参照する。図15は、開示された主題の態様による、協調構成要素1232、少なくとも1つのCPU1504、および少なくとも1つのGPU1506の間に分散された例示的な論理処理1500を示すブロック図である。図15に示すように、協調構成要素1232、およびCPU1504などの1つ以上のCPUの作業は、プロデューサ側がターゲットノードについての情報(関連する近傍データ)を生成し、コンシューマ側(1つ以上のGPU)がそのデータを消費し、それによってターゲットノードの集約された近傍埋め込みベクトルを生成する、プロデューサ/コンシューマ関係のプロデューサ側と見なされる。
【0134】
図15の例示的なプロセスでは、協調構成要素1232は、埋め込みベクトルが要求されたターゲットノート1502に関する情報を受け取る。それに応じて、開示された主題の態様に従って、協調構成要素は、1つ以上のGPU(GPU1506および/または図12のGPU1214など)による処理のためのデータを生成する1つ以上のCPU(CPU1502および/または図12のCPU1202など)にタスクを適切に割り当てる。どちらの場合も、CPU1504またはGPU1506は、協調構成要素1232が動作しているコンピューティングデバイスの一部であり得る。代替的には、CPU1504および/またはGPU1506のいずれかは、他の協調システムの一部であってもよく、および/またはネットワーク1408上のサービスとして利用可能な1つ以上のCPUクラスタまたはGPUクラスタの一部であってもよい。
【0135】
CPU(プロデューサ)とGPU(コンシューマ)の間でタスクを割り当てることの一環として、協調構成要素1232は、ステップ1510で、ターゲットノードおよびターゲットノードに関連付けられた任意のデータを識別/アクセスする。これには、ターゲットノード/コンテンツアイテム、およびターゲットノードに関連付けられたメタデータへのアクセスが含まれ得る。ステップ1512において、協調構成要素は、ターゲットノードの集約埋め込みベクトルを(共同で)処理する際に、CPU1504および/またはGPU1506によって使用されるターゲットノードデータ(ステップ1510でアクセスしたターゲットノードに関する編成されたデータ)を生成する。
【0136】
ターゲットノードのデータを生成して、次いで協調構成要素1232は、ステップ1514および1516を含む、CPUによる処理を開始する。ステップ1514で、CPU1504は、ターゲットノードの関連する近傍を識別する。上記のように、図3のルーチン300は、ターゲットノードの関連する近傍を識別する際のさまざまなステップを明記している。理解されるように、ターゲットノードの関連する近傍を識別することは、図4A図4Fに関して上記で論じたように、様々な隣接ノードの関連する近傍を識別することも含む。次に、ステップ1516で、近傍データは、GPU1506による処理のために整理される。
【0137】
開示された主題の態様によれば、CPU1504によって生成され整理された関連する近傍データは、協調構成要素1232に論理的に戻される。それに応じて、ステップ1520において、協調構成要素は、GPU1506への提出のために近傍データ1518を処理する。開示された主題の態様によれば、この処理は、ターゲットノードの近隣の数を所定の数に固定することを含む(同様に、近隣ノードの近隣の数を、その同じ所定の数に固定することも含む)。これは、GPU1506による処理のために、固定された近傍データを設定することをさらに含む。
【0138】
特定のターゲットノードの近隣の数を固定すると、ターゲットノードの集約埋め込みベクトルを生成する際の畳み込みプロセス、すなわちGPUによって実行されるコンシューマ側の処理が容易になり、効率的な仕方で動作する。より具体的には、GPUの利点は、大量のデータ、特に大量の浮動小数点データを操作する際に実現されるので、各ノードに対して何個の近傍情報を処理しなければならないかを識別するための近傍情報の処理は、GPU上で実行される場合には、実質的な非効率性を招くことになる。代わりに、協調構成要素1232(典型的にはCPU上で動作する(関連する近傍を識別するCPU1504であるか否かにはかかわらない))が近傍データを処理して、固定サイズのデータセットにデータを配置する。たとえば、再び図4A図4Fを参照すると、ターゲットノードがノードJであると仮定すると、関連する近傍データは以下の情報になる。
【0139】
RN(J)={G,H,I,L,P}、
RN(G)={E,J,Q,S}、
RN(H)={D,F,I}、
RN(I)={D,F,H,J,L}、
RN(L)={H,I,J,N,P,U}、および
RN(P)={A,B,L,U}
【0140】
図に示すように、関連する隣接ノードのサイズ(すなわち、「関連する近隣」の数)は同じではなく、たとえば、ターゲットノードJが4つの関連する近隣を有し、ノードHが3つの関連する近隣を有し、ノードLが6つの関連する近隣を有する。これらの関連する近隣は、必ずしもコーパスグラフでの直接の近隣ではなく、上記のランダムウォークによって判定される対応するターゲットノードの関連する近隣であることを理解されたい。
【0141】
協調クラスタは、処理をGPU1506(またはGPUクラスタ)にオフロードするのではなく、各ノードの近隣の数を固定数Tに切り捨てる。実例として、一実施形態では、この固定数Tは50に設定される。代替実施形態では、数Tは100に設定される。ノードにT個の近隣がある場合、変更は必要ない。ただし、識別された近隣が多すぎるノードの場合、(GPU1506による処理のために)その数はTに切り捨てられる。(切り捨てられる)ノードの間の選択は、ランダムウォーク選択時に行われた近隣への訪問回数によって判定されるノードへの近隣の重要度に応じて行われてもよい。近隣が少なすぎる場合には、一実施形態ではNULL近隣が含まれ、ノードの近隣の数を固定量Tまでパディングする。代替実施形態では、利用可能なノードの数が渡され、それにより、固定数Tよりも少ない場合に、GPUは、実際の近隣ノード情報のみが処理されるように、渡されたデータを処理することができる。理想的には、固定量Tは、パディングがまれにしか発生しない可能性が最も高くなるように選択される。一旦、データが、固定セットのデータに処理されると、GPU1506に渡される。
【0142】
ステップ1522では、図5のルーチン500に関して上記で説明したように、ターゲットノードのデータとともに、近傍データの畳み込みが実行される。これらの畳み込みは、(上記で示唆されたように)ターゲットノードおよび近傍ノードの埋め込みベクトル、ならびに集約埋め込みベクトルを含む。これらの埋め込みベクトルを生成する際の畳み込みは、機械学習のディープニューラルネットワーク(図8のニューラルネットワーク800など)によって実行されて、ターゲットノード1502の集約埋め込みベクトル1524を生成する。近傍データは、固定サイズのレコード(およびこれらのレコードの固定数)で構成されるため、この処理はGPU1506の強度に着目して行われる。集約埋め込みベクトルを生成した後、ステップ1526で、集約埋め込みベクトル1524が呼び出し元/要求元に返される。
【0143】
CPU1504(またはCPUのクラスタ)による処理と、GPU1506(またはGPUのクラスタ)による処理とは、互いに同期的に、または非同期的のいずれかで行われ得ることが理解されるべきである。非同期動作に関して、当業者が理解するように、協調構成要素1232は、CPUに割り当てられたタスクおよび/またはGPUに割り当てられたタスクの完了のために一時停止することなく、複数のターゲットノードの処理を開始してよい。概念的には、これらの要素の、協調構成要素1232、CPU1504、およびGPU1506は、メッセージに応答し、その結果を呼び出し元に返す独立したオブジェクトとして動作し得る。実際、協調構成要素は、GPU1506による完了時に、集約埋め込みベクトルをターゲットノードに関連付けるように動作する。非同期的に、協調構成要素1232は、コーパスグラフ内の複数のターゲットノードの集約埋め込みベクトルに対する要求に関して、CPU1504とGPU1506との間の調整を実行してもよい。このようにして、CPU1504が、所与のターゲットノードの関連する近傍データの識別を完了すると、対応するメッセージが協調構成要素1232に返される。それに応答して、協調構成要素は、GPU1506による追加の処理を引き起こして、所与のターゲットノードの集約埋め込みベクトルを生成する。同様に、非同期的に、GPU1506が、対応するターゲットノードの集約埋め込みベクトルの生成を(近傍データに従って)完了させると、協調構成要素に通知される。
【0144】
構成要素の非同期実行、特に「プロデューサ」CPUと「コンシューマ」GPUとの間の非同期実行をさらに説明するために、次に図16を参照する。図16は、開示された主題の態様による、近傍データ/埋め込みベクトルキューを介した、プロデューサとコンシューマとの分類間の例示的な交換を示すブロック図である。図15に関して上記で示したように、CPU1602~1608(プロデューサ1600とされる)などの1つ以上のCPUは、1つ以上の協調構成要素1232とともに動作して、近傍データを生成する。非同期式に、近傍データが生成されると、そのデータは、1つ以上のCPUと、GPU1622~1626などの1つ以上の「コンシューマ」GPUとの両方にアクセス可能なデータ/埋め込みベクトルキュー1610内に配置される。実際、協調構成要素1232からデータを受信したことに応答して、CPU1602などのCPUは、ノードの近傍データを準備し、準備された近傍データを、データ/埋め込みベクトルキュー1610内の空きスロット、例えば、データスロット1612に配置する。非同期エンティティ間のキューの操作は、ここでは説明しない既知のプロセスである。コンシューマ側では、プロセスがデータ/埋め込みベクトルキュー1610の新しいエントリを監視し、新しいエントリを検出すると、コンシューマ1620の間の利用可能なGPUに近傍データを割り当てる。例えば、データスロット1612内に近傍データがあるという指示を受信すると、その近傍データを処理するためにGPU1622が割り当てられ得る。
【0145】
その部分では、GPUが近傍データの処理を完了すると、結果として生じる埋め込みベクトルが、対応する埋め込みベクトルスロット内に配置される。上記の例の続きでは、GPU1622が近傍データの処理を完了した後、結果として得られた集約埋め込みベクトルは、対応する埋め込みベクトルスロット1614内に配置される。この時点で、GPU1622は、追加の近傍データを処理するために、再び自由に割り当てられる。
【0146】
プロデューサ側で、対応する埋め込みベクトルが生成され、その対応する埋め込みベクトルスロットに配置されたことが検出されると、CPU(典型的には、データ/埋め込みベクトルキュー1610または協調モジュール1232に近傍データを追加したものであるが、これに限定されるものではない)は、コンシューマGPUによって生成された集約埋め込みベクトルにアクセスし、埋め込みベクトルをソースノードに関連付ける。上記の例の続きでは、コンシューマGPU1622は、集約埋め込みベクトルを埋め込みベクトルスロット1614に戻し、非同期的に、CPU1602は、埋め込みベクトルが生成されたことを識別し、埋め込みベクトルスロットから埋め込みベクトルを取り出し、埋め込みベクトルをソースノードに関連付ける。図16からさらに分かるように、プロデューサCPU1606は、所与のトークンについての近傍データを「プロデュース」し、その情報をデータスロットに配置している。それに応じて、コンシューマGPU1626は、所与のトークンについての近傍データを処理しているが、集約埋め込みベクトルを生成し、生成されたベクトルを埋め込みベクトルスロット1616内に配置するタスクをまだ完了していない。
【0147】
図に示すように、データ/埋め込みベクトルキュー1610などの1つ以上のデータ/埋め込みベクトルキューに関して動作する、プロデューサ1600としての複数のプロデューサCPU(およびプロデューサ協調モジュール)と、コンシューマ1620としての複数のGPUとが存在してもよい。このようにして、各側(プロデューサおよびコンシューマ)は非同期的に動作することができ、各側の個々の要素が、ノード/アイテムのコーパスを持つノード/コンテンツアイテムの集約埋め込みベクトルの生成に対するブロックとして動作することなく、最大容量で動作することを可能にする。
【0148】
データがキューに送信されると、CPUは作業を継続することができる。それらのCPUは単にキューの「次の」スロットを選び、対応する埋め込みベクトルを非同期で監視する。
【0149】
本明細書に開示される実施態様は、限定ではなく実例として、コーパスグラフのターゲットノードの集約埋め込みベクトルを判定するためのコンピュータ実行方法を含み得る。より具体的には、ターゲットノードの集約埋め込みベクトルは、コーパスグラフ内のターゲットノードの近傍に応じて判定される。本方法は、ターゲットノードの埋め込みベクトルを判定すること、およびターゲットノードの近傍埋め込み情報をさらに判定することを含む。様々な実施形態では、近傍埋め込み情報は、コーパスグラフ内のターゲットノードの近傍についての埋め込み情報を含む。さらに、集約埋め込みベクトルがターゲットノードに対して生成され、この集約埋め込みベクトルは、ターゲットノードの近傍埋め込み情報と集約されたターゲットノードの埋め込みベクトル、および/または連結されたターゲットノードの埋め込みベクトルを含む。その後、集約埋め込みベクトルは、ターゲットノードに関連付けられる。
【0150】
任意選択で、本方法は、コンピュータユーザからクエリを受信すること、および受信したクエリがコーパスグラフのターゲットノードに対応することを判定することを含む。複数の潜在的レコメンデーションノードが、クエリに応じてユーザ向けのレコメンデーションであると判定され、複数の潜在的レコメンデーションノードが、ターゲットノードの集約埋め込みベクトルに従って、コーパスグラフから識別される。複数の潜在的レコメンデーションノードの少なくとも1つは、クエリに応答して、ユーザへのレコメンドされたノードとしてユーザに提供される。任意選択で、ターゲットノードの関連する近傍が、コーパスグラフ内で識別される。さらに、ターゲットノードの近傍埋め込み情報を判定することは、コーパスグラフ内の関連する近傍内のノードから近傍埋め込み情報を判定することを含む。任意選択で、コーパスグラフ内のターゲットノードの関連する近傍を識別することは、ターゲットノードからカレントノードとして始めて、さまざまな演算を繰り返し実行することを含み、これらの演算は、カレントノードから、カレントノードに接続されている別のノードへのトラバーサルをランダムに選択すること、カレントノードを別のノードに設定すること、および別のノードに関連付けられている訪問カウントをインクリメントすることを含む。任意選択で、より詳細には、コーパスグラフ内のターゲットノードの関連する近傍を識別することは、カレントノードから、カレントノードに接続された別のノードへのトラバースをランダムに選択することに加えて、カレントノードをターゲットノードにリセットするかどうかをランダムに判定すること、およびそうするためランダムに判定した時点で、カレントノードをターゲットノードにリセットすることをさらに含む。任意選択で、所定数の反復が、ターゲットノードの適合性近傍を判定する際に行われる。任意選択で、ターゲットノードの関連する近傍のノードは、最高の訪問カウントに関連付けられた、コーパスグラフのノードに従って判定される。任意選択で、ターゲットノードの近隣埋め込み情報を生成することは、ターゲットノードの近傍の近隣ノードからの集約埋め込みベクトルに従って、ターゲットノードの近傍埋め込み情報を生成することを含む。任意選択で、ターゲットノードの近隣ノードのそれぞれからの集約埋め込みベクトルは、ターゲットノードの直近の近隣ノードの近隣ノードの近傍埋め込み情報を含む。任意選択で、直近の近隣ノードの集約埋め込みベクトルは、ターゲットノードの直近の近隣ノードの直近の近隣ノードのそれぞれの集約埋め込みベクトルの集約を含む。任意選択で、ターゲットノードの直近の近隣ノードの直近の近隣ノードのそれぞれの埋め込みベクトルは、ターゲットノードへの関連する近傍の判定からの訪問カウントに応じて、ターゲットノードの直近の近隣ノードの他の直近の近隣ノードの埋め込みベクトルと集約して重み付けされる。
【0151】
本明細書に開示された実施態様は、限定ではなく実例として、コンピュータ実行可能命令を記録したコンピュータ可読媒体であって、媒体から命令を取得する少なくともプロセッサを含むコンピューティングシステム上で実行されると、コーパスグラフ内のターゲットノードの近傍に従って、コーパスグラフのターゲットノードの集約埋め込みベクトルを判定する方法を実行するコンピュータ実行可能命令を記録したコンピュータ可読媒体を含み得る。この方法は、コーパスグラフ内のターゲットノードに対するノードの関連する近傍を識別することを含む。本方法はさらに、ターゲットノードの埋め込みベクトルを判定すること、およびターゲットノードの近傍埋め込み情報を判定することを含み、近傍埋め込み情報は、コーパスグラフ内の関連する近傍内のノードからの埋め込み情報を含む。本方法は、さらに、ターゲットノードの集約埋め込みベクトルを生成することを含み、この集約埋め込みベクトルは、ターゲットノードの近傍埋め込み情報と連結されたターゲットノードの埋め込みベクトルを含む。集約埋め込みベクトルは、その後、ターゲットノードに関連付けられる。
【0152】
任意選択で、コーパスグラフ内のターゲットノードに対するノードの関連する近傍を識別することは、ターゲットノードからカレントノードとして始めて、所定の繰り返し回数だけ繰り返すこと、カレントノードから、カレントノードに接続されている別のノードへのトラバーサルをランダムに選択すること、カレントノードを別のノードに設定すること、および別のノードに関連付けられている訪問カウントをインクリメントすることを含む。繰り返されるプロセスに基づいて、ターゲットノードの関連する近傍のノードは、最高の訪問カウントに関連付けられた、コーパスグラフのノードに従って判定される。任意選択で、コーパスグラフ内のターゲットノードに対するノードの関連する近傍を識別することは、カレントノードをターゲットノードにリセットするかどうかをランダムに判定すること、およびそうするためにランダムに判定した時点で、カレントノードをターゲットノードにリセットすることをさらに含む。任意選択で、ターゲットノードの近隣埋め込み情報を生成することは、ターゲットノードの関連する近傍の近隣ノードからの集約埋め込みベクトルに従って、ターゲットノードの近傍埋め込み情報を生成することを含む。任意選択で、ターゲットノードの直近の近隣ノードのそれぞれの集約埋め込みベクトルは、ターゲットノードの近隣ノードの近隣ノードの近隣埋め込み情報を含む。任意選択で、近隣ノードの近傍埋め込み情報は、ターゲットノードの近隣ノードの近隣ノードのそれぞれの近傍埋め込み情報を含む。任意選択で、ターゲットノードの近隣ノードの近隣ノードのそれぞれの集約埋め込みベクトルは、ターゲットノードへの関連する近傍の判定からの訪問カウントに応じて、ターゲットノードの近隣ノードの他の近隣ノードの埋め込みベクトルと集約して重み付けされる。
【0153】
本明細書に開示された実施態様は、限定ではなく実例として、ユーザクエリに応答して、レコメンドされたコンテンツを提供するためのレコメンダシステムとして構成されたコンピュータシステムを含み得る。コンピュータシステムはプロセッサおよびメモリを含み、ここで、プロセッサは、ユーザのクエリに、レコメンドされたコンテンツを提供する際に、ユーザのクエリに応答するために、追加構成要素の一部として、または追加構成要素と組み合わせて、メモリに格納された命令を実行する。第1の追加構成要素は、コンテンツレコメンダ構成要素を含む。コンピュータシステム上での実行において、コンテンツレコメンダ構成要素は、ネットワークを介してユーザからクエリを受信し、クエリはコンテンツのアイテムを含む。コンテンツレコメンダ構成要素は、レコメンダシステムによって維持されているコーパスグラフの中から、クエリに対応するコンテンツのアイテムを識別する。コンテンツレコメンダ構成要素は、コーパスグラフ内の対応するコンテンツのアイテムに関連付けられた集約埋め込みベクトルに従って、ユーザに対する潜在的なコンテンツのレコメンデーションセットを判定する。コンテンツレコメンダ構成要素は、潜在的なコンテンツレコメンデーションのセットから少なくとも1つのコンテンツレコメンデーションを選択し、少なくとも1つのコンテンツレコメンデーションをユーザに提供する。第2の追加構成要素は、埋め込みベクトル生成器を含む。コンピュータシステム上での実行において、埋め込みベクトル生成器は、コーパスグラフ内の対応するコンテンツのアイテムの関連する近傍を判定する。さらに、埋め込みベクトル生成器は、コーパスグラフ内の対応するコンテンツのアイテムの集約埋め込みベクトルを生成する。この集約埋め込みベクトルは、対応するコンテンツのアイテムの埋め込みベクトルと、対応するコンテンツのアイテムのネットワーク埋め込みベクトルとを含む。
【0154】
任意選択で、埋め込みベクトル生成器は、コーパスグラフ内の対応するコンテンツのアイテムの関連する近傍内の近隣ノードからの集約埋め込みベクトルに従って、コーパスグラフ内の対応するコンテンツのアイテムの近傍埋め込みベクトルを生成する。
【0155】
本明細書に開示される実施態様は、限定ではなく実例として、コーパスグラフのターゲットノードの集約埋め込みベクトルを判定するためのコンピュータ実行方法を含み得る。本方法は、コーパスグラフのターゲットノードにアクセスすること、およびターゲットノードに関連する集約埋め込みベクトルを判定することを含む。集約埋め込みベクトルを判定することは、中央処理ユニット(CPU)による実行を通じて、コーパスグラフ内のターゲットノードの関連する近傍を少なくとも判定することを含む。さらに、集約埋め込みベクトルを判定することは、グラフィック処理ユニット(GPU)による実行を通じて、ターゲットノードの関連する近傍に応じて、ターゲットノードの集約埋め込みベクトルを生成することを含む。集約埋め込みベクトルは、ターゲットノードの関連する近傍から判定されたターゲットノードの近傍埋め込み情報と連結されたターゲットノードの埋め込みベクトルを含む。集約埋め込みベクトルを判定することに加えて、本方法は、集約埋め込みベクトルをターゲットノードに関連付けることを含む。
【0156】
任意選択で、コーパスグラフのターゲットノードの集約埋め込みベクトルを判定する本方法は、さらに、コンピュータユーザからクエリを受信すること、クエリがコーパスグラフのターゲットノードに対応することを判定すること、および複数の潜在的なレコメンデーションノードを、クエリを考慮したユーザに対するレコメンデーションとして判定することを含む。複数の潜在的なレコメンデーションノードは、ターゲットノードの集約埋め込みベクトルに従ってコーパスグラフから識別される。その後、複数の潜在的レコメンデーションノードの少なくとも1つは、クエリに応答して、ユーザへのレコメンドされたノードとしてユーザに提供される。任意選択で、コーパスグラフのターゲットノードの集約埋め込みベクトルを判定する本方法は、さらに、ターゲットノードの関連する近傍データを、ターゲットノードの関連する近傍の固定数のレコードに処理することを含む。さらに、ターゲットノードの関連する近傍に応じて、ターゲットノードの集約埋め込みベクトルを生成することは、ターゲットノードの関連する近傍の固定数のレコードに応じて、ターゲットノードの集約埋込みベクトルを生成することを含む。任意選択で、コーパスグラフのターゲットノードの集約埋め込みベクトルを判定する本方法は、ターゲットノードの関連する近傍データ内の各ノードの近隣の数を、所定の固定数に固定することをさらに含む。さらに、ターゲットノードの関連する近傍データを固定数のレコードに処理することは、ターゲットノードの関連する近傍データ内の各ノードの近傍数を固定した後、各ノードが対応するレコードを有するように、ターゲットノードの関連する近傍データを処理することを含む。任意選択で、固定数のレコードの各レコードは、固定サイズのレコードである。任意選択で、ターゲットノードの関連する近傍データを、ターゲットノードの関連する近傍の固定数のレコードに処理することは、固定数の近隣ノードに対する固定数の近隣よりも多くの近隣ノードを有する近傍データ内のノードの近隣ノードを切り捨てることを含む。任意選択で、ターゲットノードの関連する近傍データを、ターゲットノードの関連する近傍の固定数のレコードに処理することは、さらに、固定数の近隣ノードよりも少ない近隣データのノードを、固定数の近隣ノードに至るまで、NULL近隣ノードでパディングすることを含む。任意選択で、各レコードは、少なくとも近傍データのノードの情報、そのノードの近隣ノードの情報、およびノードのヌル近隣ノードの数の表示に対応する。任意選択で、中央処理ユニットによる実行を通じてコーパスグラフ内のターゲットノードの関連する近傍を判定することは、グラフィック処理ユニットによる実行を通じて、ターゲットノードの関連する近傍に応じて、ターゲットノードの集約埋め込みベクトルを生成することと非同期で実行される。任意選択で、ターゲットノードの関連する近傍データを、ターゲットノードの関連する近傍の固定数のレコードに処理することは、中央処理ユニット(CPU)によって実行される。任意選択で、グラフィック処理ユニットは、グラフィック処理ユニット(GPU)のクラスタの1つである。任意選択で、グラフィック処理ユニット(GPU)のクラスタは、中央処理ユニットに対するグラフィック処理ユニットのリモートクラスタである。
【0157】
本明細書に開示された実施態様は、限定ではなく実例として、コンピュータ実行可能命令を記録したコンピュータ可読媒体であって、媒体から命令を取得する少なくともプロセッサを含むコンピューティングシステム上で実行されると、コーパスグラフのターゲットノードの集約埋め込みベクトルを判定する方法を実行するコンピュータ実行可能命令を記録したコンピュータ可読媒体を含み得る。本方法は、コーパスグラフのターゲットノードにアクセスすること、およびターゲットノードに関連する集約埋め込みベクトルを判定することを含む。ターゲットノードに関連する集約埋め込みベクトルを判定するステップは、中央処理ユニット(CPU)による実行を通じて、コーパスグラフ内のターゲットノードの関連する近傍を判定することを含み、さらに、グラフィック処理ユニット(GPU)による実行を通じて、ターゲットノードの関連する近傍に応じて、ターゲットノードの集約埋め込みベクトルを生成することを含む。さらに、集約埋め込みベクトルは、ターゲットノードの関連する近傍から判定されたターゲットノードの近傍埋め込み情報と連結されたターゲットノードの埋め込みベクトルを含む。本方法は、集約埋め込みベクトルをターゲットノードに関連付けることをさらに含む。
【0158】
任意選択で、コンピュータ可読媒体上で命令を実行することによって実行される本方法は、ターゲットノードの関連する近傍データを、ターゲットノードの関連する近傍の固定数のレコードに処理することをさらに含む。さらに、ターゲットノードの関連する近傍に応じて、ターゲットノードの集約埋め込みベクトルを生成することは、ターゲットノードの関連する近傍の固定数のレコードに応じて、ターゲットノードの集約埋込みベクトルを生成することを含む。任意選択で、本方法は、ターゲットノードの関連する近傍データ内の各ノードの近隣の数を、所定の固定数に固定することをさらに含む。さらに、ターゲットノードの関連する近傍データを固定数のレコードに処理することは、ターゲットノードの関連する近傍データ内の各ノードの近傍数を固定した後、各ノードが対応するレコードを有するように、ターゲットノードの関連する近傍データを処理することを含む。任意選択で、ターゲットノードの関連する近傍データを、ターゲットノードの関連する近傍の固定数のレコードに処理する際に、本方法は、さらに、固定数の近隣よりも多い近隣ノードを有する近傍データ内のノードの近隣ノードを、固定数の近隣ノードに合わせて切り捨てること、および固定数の近隣ノードよりも少ない近隣ノードを有する近隣データのノードを、固定数の近隣ノードに至るまで、NULL近隣ノードでパディングすることを含む。任意選択で、中央処理ユニットによる実行を通じてコーパスグラフ内のターゲットノードの関連する近傍を判定することは、グラフィック処理ユニットによる実行を通じて、ターゲットノードの関連する近傍に応じて、ターゲットノードの集約埋め込みベクトルを生成することと非同期で実行される。任意選択で、グラフィック処理ユニット(GPU)は、グラフィック処理ユニットのクラスタの1つであり、グラフィック処理ユニットのクラスタは、中央処理ユニットに対してリモートである。
【0159】
本明細書に開示された実施態様は、限定ではなく実例として、ユーザクエリに応答して、レコメンドされたコンテンツを提供するためのレコメンダシステムとして構成されたコンピュータシステムを含み得る。本コンピュータシステムはプロセッサおよびメモリを含み、ここで、プロセッサは、ユーザのクエリに応答するために、追加構成要素の一部として、または追加構成要素と組み合わせて、メモリに格納された命令を実行する。これらの追加構成要素は、コンテンツレコメンダ構成要素を含む。コンテンツレコメンダ構成要素は、本コンピュータシステム上での実行中に、ネットワークを介してユーザからクエリを受信し、クエリにはコンテンツのアイテムが含まれる。さらに、コンテンツレコメンダ構成要素は、本コンピュータシステム上で実行中に、レコメンダシステムによって維持されているコーパスグラフ内のクエリに対応するコンテンツのアイテムを識別する。コンテンツレコメンダ構成要素は、コーパスグラフ内の対応するコンテンツのアイテムに関連付けられた集約埋め込みベクトルに従って、ユーザに対する潜在的なコンテンツのレコメンデーションセットをさらに判定する。さらに、コンテンツレコメンダ構成要素は、潜在的なコンテンツレコメンデーションのセットから少なくとも1つのコンテンツレコメンデーションを選択し、少なくとも1つのコンテンツレコメンデーションをユーザに提供する。追加構成要素は、埋め込みベクトル生成器も含む。本コンピュータシステム上での実行において、埋め込みベクトル生成器は、コーパスグラフのターゲットノードにアクセスし、ターゲットノードに関連する集約埋め込みベクトルを判定する。ターゲットノードに関連する集約埋め込みベクトルを判定することは、少なくとも、中央処理ユニット(CPU)による実行を通じて、コーパスグラフ内のターゲットノードの関連する近傍を判定すること、およびグラフィック処理ユニット(GPU)による実行を通じて、ターゲットノードの関連する近傍に応じて、ターゲットノードの集約埋め込みベクトルを生成することを含む。集約埋め込みベクトルは、ターゲットノードの関連する近傍から判定されたターゲットノードの近傍埋め込み情報と連結されたターゲットノードの埋め込みベクトルを含む。
【0160】
任意選択で、本コンピュータシステム上で実行中の埋め込みベクトル生成器は、ターゲットノードの関連する近傍データを、ターゲットノードの関連する近傍の固定数のレコードに処理する。ターゲットノードの集約埋め込みベクトルは、ターゲットノードの関連する近傍に応じて生成され、ターゲットノードの関連する近傍の固定数のレコードに応じて、ターゲットノードの集約埋め込みベクトルを生成することを含む。さらに、埋め込みベクトル生成器は、ターゲットノードの関連する近傍データ内の各ノードの近隣の数を所定の固定数に固定する。ターゲットノードの関連する近傍データは、ターゲットノードの関連する近傍データ内の各ノードの近傍数を固定した後、各ノードが対応するレコードを有するように、ターゲットノードの関連する近傍データを処理することを含む、固定数のレコードに処理される。
【0161】
本明細書に開示される実施態様は、限定ではなく実例として、コーパスグラフのノードの集約埋め込みベクトルを効率的に生成するためのコンピュータ実行方法を含み得る。本方法は、複数のノードを含むコーパスグラフにアクセスすること、およびコーパスグラフの複数のノードを処理するための実行可能なMapReduceフレームワークを構成することを含む。実行可能なMapReduceフレームワークを構成することは、コーパスグラフの複数のノード上で実行する1つ以上の実行可能なマッパー関数を使用して、実行可能なMapReduceフレームワークを構成することを含む。これは、コーパスグラフの複数のノードのそれぞれについて、マッパー関数が、コーパスグラフの現在処理されているノードの対応する埋め込みベクトルを生成し、生成された埋め込みベクトルをコーパスグラフの現在処理されているノードに関連付ける。実行可能なMapReduceフレームワークは、コーパスグラフの複数のノードのそれぞれに対して、コーパスグラフの複数のノードで実行される1つ以上の実行可能なリデューサ関数でさらに構成される。リデューサ関数は、現在処理されているノードの対応する埋め込みベクトルにアクセスし、現在処理されているノードのコーパスグラフ内のノードの関連する近傍にアクセスするように構成されている。さらに、リデューサ関数は、現在処理されているノードの関連する近傍からのノードの埋め込みベクトルを近傍埋め込み情報に結合する。さらに、リデューサ関数は、現在処理されているノードの埋め込みベクトルを、現在処理されているノードの関連する近傍からの近傍埋め込み情報と組み合わせて、現在処理されているノードの集約埋め込みベクトルを形成する。さらに、リデューサ関数は、集約埋め込みベクトルをコーパスグラフ内で現在処理されているノードに関連付ける。引き続き、リデューサ関数は、集約埋め込みベクトルをコーパスグラフ内で現在処理されているノードに関連付ける。この方法は、実行可能なMapReduceフレームワークにコーパスグラフを提供して処理することをさらに含む。
【0162】
任意選択で、本方法はさらに、コーパスグラフの複数のノードのそれぞれについて、コーパスグラフの現在反復中のノードの関連する近傍を判定すること、および現在反復中のノードに関連して、コーパスグラフの現在反復されているノードの関連する近傍を識別する情報を格納することを含む。任意選択で、実行可能なMapReduceフレームワークを構成することは、コーパスグラフの複数のノード上で実行するための第2の実行可能なマッパー関数を使用して、実行可能なMapReduceフレームワークを構成することをさらに含む。第2の実行可能なマッパー関数は、コーパスグラフの複数のノードのそれぞれについて、第2の実行可能なマッパー関数が、コーパスグラフの現在反復されているノードの関連する近傍を判定し、現在反復されているノードに関連して、コーパスグラフの現在反復されているノードの関連する近傍を識別する情報を格納するように構成される。任意選択で、実行可能なMapReduceフレームワークを構成することは、コーパスグラフの複数のノード上で実行するための第2の実行可能なマッパー関数を使用して、実行可能なMapReduceフレームワークを構成することをさらに含む。さらに、複数のノードで実行するように第2の実行可能なマッパー関数を構成することは、コーパスグラフの現在反復されているノードの関連する近傍を判定すること、および現在反復されているノードに関連して、コーパスグラフの現在反復されているノードの関連する近傍を識別する情報を格納することを含む。任意選択で、実行可能なマッパー関数は、コーパスグラフの複数のノードのそれぞれについて、マッパー関数が、コーパスグラフの現在反復されているノードの関連する近傍をさらに判定し、現在反復されているノードに関連して、コーパスグラフの現在反復されているノードの関連する近傍を識別する情報を格納するようにさらに構成される。任意選択で、コーパスグラフの現在反復されているノードの関連する近傍を判定することは、ランダムウォークプロセスに従ってコーパスグラフの現在反復されているノードの関連する近傍を判定することを含む。任意選択で、現在処理されているノードの関連する近傍からのノードの埋め込みベクトルを近傍埋め込み情報に組み合わせることは、関連する近傍のスタッキングレベルに従って、現在反復されているノードの関連する近傍のノードの関連する近傍ノードの埋め込みベクトルを組み合わせることを含む。任意選択で、現在処理されているノードの関連する近傍からのノードの埋め込みベクトルを近傍埋め込み情報に組み合わせることは、現在処理されているノードに対する関連する近傍のノードの重要度に従って、現在処理されているノードの関連する近傍からのノードの埋め込みベクトルを近傍埋め込み情報に結合することを含む。
【0163】
本明細書に開示された実施態様は、限定ではなく実例として、コンピュータ実行可能命令を記録したコンピュータ可読媒体であって、媒体から命令を取得する少なくともプロセッサを含むコンピューティングシステム上で実行されると、コーパスグラフのノードの集約埋め込みベクトルを効率的に生成する方法を実行するコンピュータ実行可能命令を記録したコンピュータ可読媒体を含み得る。本方法は、複数のノードを含むコーパスグラフにアクセスすることを含む。実行可能なMapReduceフレームワークは、コーパスグラフの複数のノードを処理するように構成されている。実行可能なMapReduceフレームワークを構成することは、コーパスグラフの複数のノード上で実行する実行可能なマッパー関数を使用して、実行可能なMapReduceフレームワークを構成することを含む。これに関して、コーパスグラフの複数のノードのそれぞれについて、マッパー関数が、コーパスグラフの現在処理されているノードの対応する埋め込みベクトルを生成し、生成された埋め込みベクトルをコーパスグラフの現在処理されているノードに関連付けるように構成されている。さらに、コーパスグラフの複数のノードのそれぞれについて、リデューサ関数は、現在処理されているノードの対応する埋め込みベクトルにアクセスし、現在処理されているノードのコーパスグラフ内のノードの関連する近傍にアクセスし、現在処理されているノードの関連する近傍からのノードの埋め込みベクトルを近傍の埋め込み情報に組み合わせ、現在処理されているノードの埋め込みベクトルを、現在処理されているノードの関連する近傍からの近傍埋め込み情報とさらに組み合わせて、現在処理されているノードの集約埋め込みベクトルを形成し、集約埋め込みベクトルを、コーパスグラフで現在処理されているノードに関連付けるように構成されている。その後、本方法は、コーパスグラフを実行可能なMapReduceフレームワークに提供して処理する。
【0164】
任意選択で、本方法はさらに、コーパスグラフの複数のノードのそれぞれについて、コーパスグラフの現在反復中のノードの関連する近傍を判定すること、および現在反復中のノードに関連して、コーパスグラフの現在反復されているノードの関連する近傍を識別する情報を格納することを含む。任意選択で、実行可能なMapReduceフレームワークを構成することは、コーパスグラフの複数のノード上で実行するための第2の実行可能なマッパー関数を使用して、実行可能なMapReduceフレームワークを構成することをさらに含む。第2の実行可能なマッパー関数を使用してMapReduceフレームワークを構成した結果、コーパスグラフの複数のノードのそれぞれについて、第2の実行可能なマッパー関数が、コーパスグラフの現在反復されているノードの関連する近傍を判定し、現在反復されているノードに関連して、コーパスグラフの現在反復されているノードの関連する近傍を識別する情報を格納する。任意選択で、実行可能なマッパー関数は、コーパスグラフの複数のノードのそれぞれについて、マッパー関数が、コーパスグラフの現在反復されているノードの関連する近傍をさらに判定し、現在反復されているノードに関連して、コーパスグラフの現在反復されているノードの関連する近傍を識別する情報を格納するようにさらに構成される。任意選択で、コーパスグラフの現在反復されているノードの関連する近傍を判定することは、ランダムウォークプロセスに従ってコーパスグラフの現在反復されているノードの関連する近傍を判定することを含む。任意選択で、現在処理されているノードの関連する近傍からのノードの埋め込みベクトルを近傍埋め込み情報に組み合わせることは、関連する近傍のスタッキングレベルに従って、現在反復されているノードの関連する近傍のノードの関連する近傍ノードの埋め込みベクトルを組み合わせることを含む。任意選択で、現在処理されているノードの関連する近傍からのノードの埋め込みベクトルを近傍埋め込み情報に組み合わせることは、現在処理されているノードに対する関連する近傍のノードの重要度に従って、現在処理されているノードの関連する近傍からのノードの埋め込みベクトルを近傍埋め込み情報に結合することを含む。
【0165】
本明細書に開示される実施態様は、限定ではなく実例として、コーパスグラフの複数のノードの集約埋め込みベクトルを効率的に生成するように構成されたコンピュータシステムを含み得る。本コンピュータシステムは、プロセッサおよびメモリを含み、プロセッサは、集約埋め込みベクトルを生成するための追加構成要素の一部として、または追加構成要素とともに、メモリに格納された命令を実行する。これらの追加の実行可能な構成要素は、例示的に、複数のノードを含むコーパスグラフを格納するデータストア、および実行可能な埋め込みベクトル生成構成要素を含む。埋め込みベクトル生成構成要素は、コンピュータシステムで実行中に、コーパスグラフにアクセスし、コーパスグラフの複数のノードを処理するための実行可能なMapReduceフレームワークを構成する。コーパスグラフの複数のノードを処理するためのMapReduceフレームワークの構成には、コーパスグラフの複数のノードで実行する実行可能なマッパー関数を含む実行可能なMapReduceフレームワークを構成すること、およびコーパスグラフの複数のノードで実行する実行可能なリデューサ関数を使用して、実行可能なMapReduceフレームワークを構成することの両方が含まれる。実行可能なMapReduceフレームワークを実行可能なマッパー関数で構成することに関して、コーパスグラフの複数のノードのそれぞれについて、マッパー関数が、コーパスグラフの現在処理されているノードの対応する埋め込みベクトルを生成し、生成された埋め込みベクトルをコーパスグラフの現在処理されているノードに関連付ける。さらに、実行可能なMapReduceフレームワークを実行可能なリデューサ関数で構成する際に、コーパスグラフの複数のノードのそれぞれについて、リデューサ関数は、現在処理されているノードの対応する埋め込みベクトルにアクセスし、現在処理されているノードのコーパスグラフ内のノードの関連する近傍にさらにアクセスするように構成されている。追加的に、リデューサ関数は、さらに、現在処理されているノードの関連する近傍からのノードの埋め込みベクトルを近傍埋め込み情報に組み合わせるように構成され、現在処理されているノードの埋め込みベクトルを、現在処理されているノードの関連する近傍からの近傍埋め込み情報と組み合わせて、現在処理されているノードの集約埋め込みベクトルを形成するように構成されている。さらにまた、リデューサ関数は、集約埋め込みベクトルをコーパスグラフで現在処理されているノードに関連付けるようにさらに構成されている。埋め込みベクトル生成構成要素は、コーパスグラフを、実行可能なMapReduceフレームワークに提供して処理するようにさらに構成されている。
【0166】
任意選択で、追加の実行可能な構成要素としては、関連近傍識別構成要素がある。実行時に、コーパスグラフの複数のノードのそれぞれについて、関連近傍識別構成要素は、コーパスグラフの現在反復されているノードの関連する近傍を判定し、現在反復されているノードに関連して、コーパスグラフの現在反復されているノードの関連する近傍を識別する情報を格納する。任意選択で、実行可能なMapReduceフレームワークを構成することは、コーパスグラフの複数のノード上で実行するための第2の実行可能なマッパー関数を使用して、実行可能なMapReduceフレームワークを構成することをさらに含む。第2の実行可能なマッパー関数は、コーパスグラフの複数のノードのそれぞれについて、コーパスグラフの現在反復されているノードの関連する近傍を判定するように構成されており、現在反復されているノードに関連して、コーパスグラフの現在反復されているノードの関連する近傍を識別する情報を格納するように構成されている。任意選択で、実行可能なマッパー関数は、さらに、コーパスグラフの複数のノードのそれぞれについて、コーパスグラフの現在反復されているノードの関連する近傍を判定するように構成されており、現在反復されているノードに関連して、コーパスグラフの現在反復されているノードの関連する近傍を識別する情報を格納するように構成されている。任意選択で、コーパスグラフの現在反復されているノードの関連する近傍を判定することは、ランダムウォークプロセスに従ってコーパスグラフの現在反復されているノードの関連する近傍を判定することを含む。任意選択で、現在処理されているノードの関連する近傍からのノードの埋め込みベクトルを近傍埋め込み情報に組み合わせることは、関連する近傍のスタッキングレベルに従って、現在反復されているノードの関連する近傍のノードの関連する近傍ノードの埋め込みベクトルを組み合わせることを含む。
【0167】
本明細書に開示される実施態様は、限定ではなく実例として、コーパスグラフのターゲットノードの関連する近傍を判定するためのコンピュータ実行方法を含み得る。実行中、本方法は、コーパスグラフのターゲットノードにアクセスすること、および所定数の反復のそれぞれについて、複数の近隣ノードからコーパスグラフ内のカレントノードへの近隣ノードの接続をランダムに選択することを含む。さらに、本方法は、ターゲットノードの訪問リスト内の選択された近隣ノードに対応するカウントをインクリメントすることを含み、インクリメントされたカウントは、選択された近隣ノードへのランダムなトラバーサルを示し、選択された近隣ノードをカレントノードとしてさらに設定する。本方法は、さらに、訪問リストにリストされた近隣ノードの対応する訪問カウントに従って、訪問リストにリストされた近隣ノードのノードのサブセットを識別すること、およびノードのサブセットを、ターゲットノードの関連する近傍の近隣ノードとして提供することを含む。
【0168】
任意選択で、本方法は、さらに、所定の反復回数のそれぞれについて、コーパスグラフ内のカレントノードへの複数の近隣ノードからの近隣ノードの接続をランダムに選択する前に、ターゲットノードにリセットするかどうかをランダムに判定すること、およびターゲットノードにリセットすることをランダムに判定した後に、ターゲットノードをカレントノードとしてリセットすることを含む。任意選択で、訪問リストにリストされた近隣ノードの対応する訪問カウントに従って、訪問リストにリストされた近隣ノードのノードのサブセットを識別することは、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することを含む。任意選択で、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することは、最高の訪問カウントを有する訪問リストにリストされた所定の数のノードを識別することを含む。任意選択で、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することは、最高の訪問カウントを有する訪問リストにリストされた所定の割合のノードを識別することを含む。任意選択で、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することは、訪問カウントが所定のしきい値を満たすかまたは超える訪問リストにリストされたノードを識別することを含む。任意選択で、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することは、最高の訪問カウントを有し、集合的にすべての訪問の所定のしきい値パーセンテージを表す、訪問リストにリストされたノードを識別することを含む。任意選択で、本方法は、ターゲットノードの関連する近傍の近隣ノードに従って、近傍埋め込み情報を集約すること、および本方法の実行に応答して、ターゲットノードの関連する近傍の近隣ノードとしてノードのサブセットを提供し、近傍埋め込む情報を集約することをさらに含む。
【0169】
本明細書に開示された実施態様は、限定ではなく実例として、コンピュータ実行可能命令を記録したコンピュータ可読媒体であって、媒体から命令を取得する少なくともプロセッサを含むコンピューティングシステム上で実行されると、コーパスグラフのターゲットノードの関連する近傍を判定する方法を実行するコンピュータ実行可能命令を記録したコンピュータ可読媒体を含み得る。本方法は、コーパスグラフのターゲットノードにアクセスすることを含む。所定数の反復のそれぞれについて、最初はカレントノードとしてターゲットノードから開始して、本方法はさらに、コーパスグラフ内の複数の近隣ノードからカレントノードへの近隣ノードの接続をランダムに選択すること、およびターゲットノードの訪問リスト内の選択された近隣ノードに対応するカウントをインクリメントすることであって、インクリメントされたカウントは、選択された近隣ノードへのランダムなトラバーサルを示す、インクリメントすること、選択された近隣ノードをカレントノードとして設定すること、を含む。さらに、本方法は、訪問リストにリストされた近隣ノードの対応する訪問カウントに従って、訪問リストにリストされた近隣ノードのノードのサブセットを識別することを含む。近傍埋め込み情報は、ターゲットノードの関連する近傍の近隣ノードに従って集約される。その後、ノードのサブセットは、本方法の実行に応答して、ターゲットノードの関連する近傍の近隣ノードおよび集約された近傍埋め込み情報として提供される。
【0170】
任意選択で、コンピュータ可読媒体から取り出されたコンピュータ実行可能命令の実行を通じて実行される本方法は、さらに、所定の反復回数のそれぞれについて、コーパスグラフ内のカレントノードへの複数の近隣ノードからの近隣ノードの接続をランダムに選択する前に、ターゲットノードにリセットするかどうかをランダムに判定すること、およびターゲットノードにリセットすることをランダムに判定した後に、ターゲットノードをカレントノードとしてリセットすることを含む。任意選択で、訪問リストにリストされた近隣ノードの対応する訪問カウントに従って、訪問リストにリストされた近隣ノードのノードのサブセットを識別することは、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することを含む。任意選択で、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することは、最高の訪問カウントを有する訪問リストにリストされた所定の数のノードを識別することを含む。任意選択で、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することは、最高の訪問カウントを有する訪問リストにリストされた所定の割合のノードを識別することを含む。任意選択で、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することは、訪問カウントが所定のしきい値を満たすかまたは超える訪問リストにリストされたノードを識別することを含む。任意選択で、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することは、最高の訪問カウントを有し、集合的にすべての訪問の所定のしきい値パーセンテージを表す、訪問リストにリストされたノードを識別することを含む。
【0171】
本明細書に開示された実施態様は、限定ではなく実例として、コーパスグラフのターゲットノードの関連する近傍を判定するように構成されたコンピュータシステムを含み得る。本コンピュータシステムは、プロセッサおよびメモリを備え、プロセッサは、追加構成要素の一部としてまたは追加構成要素と共にメモリに格納された命令を実行して、ターゲットノードの関連する近傍を判定する。これらの追加構成要素には、アイテムのコーパスグラフを格納するデータストアと、実行可能な関連近傍構成要素とがある。コンピュータシステム上での実行において、実行可能な関連近傍構成要素は、コーパスグラフのターゲットノードにアクセスし、所定数の反復のそれぞれについて、最初にカレントノードとしてのターゲットノードから開始して、コーパスグラフ内の複数の近隣ノードからカレントノードへの近隣ノードの接続をランダムに選択するように構成されている。反復の一部として、実行可能な関連近傍構成要素はさらに、ターゲットノードの訪問リスト内の選択された近隣ノードに対応するカウントをインクリメントするように構成されている。インクリメントされたカウントは、選択された近隣ノードへのランダムなトラバーサルを示す。反復の追加部分として、実行可能な関連近傍構成要素は、選択された近隣ノードをカレントノードとして設定し、または確立するようにさらに構成される。実行可能な関連近傍構成要素は、さらに、訪問リストにリストされた近隣ノードの対応する訪問カウントに従って、訪問リストにリストされた近隣ノードのノードのサブセットを識別するように構成されており、ノードのサブセットを、ターゲットノードの関連する近傍の近隣ノードとして提供するように構成されている。
【0172】
任意選択で、実行可能な関連近傍構成要素は、さらに、所定の反復回数のそれぞれについて、コーパスグラフ内のカレントノードへの複数の近隣ノードからの近隣ノードの接続をランダムに選択する前に、ターゲットノードにリセットするかどうかをランダムに判定すること、およびターゲットノードにリセットすることをランダムに判定した後に、ターゲットノードをカレントノードとしてリセットすることを行うように構成されている。任意選択で、訪問リストにリストされた近隣ノードの対応する訪問カウントに従って、訪問リストにリストされた近隣ノードのノードのサブセットを識別することは、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することを含む。任意選択で、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することは、最高の訪問カウントを有する訪問リストにリストされた所定の数のノードを識別することを含む。任意選択で、最高の訪問カウントを有する訪問リストにリストされた近隣ノードを識別することは、最高の訪問カウントを有する訪問リストにリストされた所定の割合のノードを識別することを含む。
【0173】
本明細書に開示された実施態様は、限定ではなく実例として、複数のノードを含むコーパスグラフ内のターゲットノードの近傍埋め込み情報を判定するためのコンピュータ実行方法を含み得る。本方法は、コーパスグラフのターゲットノードにアクセスすること、およびコーパスグラフ内のターゲットノードの関連する近傍を判定することを含む。関連する近傍には、ターゲットノードに関連するとされたコーパスグラフの複数のノードが含まれる。さらに、関連する近傍の複数のノードのそれぞれは、ターゲットノードに対する相対的な重要度を示す重要度値に関連付けられている。本方法は、さらに、ターゲットノードの近傍埋め込み情報を生成することを含む。近傍埋め込み情報は、複数の要素を含み、各要素が、関連する近傍の複数のノードのうちのノードの埋め込みに対応する。さらにまた、ターゲットノードの近傍埋め込み情報は、関連する近傍の複数のノードの関連する重要度値の関数として生成される。
【0174】
任意選択で、ターゲットノードの近傍埋め込み情報を生成することは、近傍埋め込み情報の各要素について、関連する近傍の複数のノードのうちのノードを選択すること、および選択されたノードの埋め込みベクトルの対応する要素を近傍埋め込み情報の現在の要素として選択することを含む。任意選択で、本方法は、複数の埋め込みベクトルに関連付けられた重要度値を正規化することをさらに含む。また、関連する近傍の複数のノードのうちのノードを選択することは、複数のノードの正規化された重要度値に従って、関連する近傍の複数のノードのうちのノードをランダムに選択することを含む。任意選択で、コーパスグラフ内のターゲットノードの関連する近傍を判定することは、関連付けられた最高の重要度値を有するコーパスグラフの所定数までのノードを選択することを含む。任意選択で、最高の関連付けられた重要度値を有するコーパスグラフの所定数までのノードを選択することは、最高の関連付けられた重要度値を有し、所定のしきい値よりも大きいコーパスグラフの所定数までのノードを選択することを含む。任意選択で、本方法は、さらに、近傍埋め込み情報をターゲットノードの埋め込み値と組み合わせて、ターゲットノードの集約埋め込み値を形成することを含む。任意選択で、ターゲットノードの関連する近傍の複数のノードのそれぞれに関連付けられた重要度値は、コーパスグラフ内のノードのランダムトラバーサル中のターゲットノードから複数のノードへの訪問カウントに従って判定される。
【0175】
本明細書に開示された実施態様は、限定ではなく実例として、コンピュータ実行可能命令を記録したコンピュータ可読媒体であって、媒体から命令を取得する少なくともプロセッサを含むコンピューティングシステム上で実行されると、複数のノードを含むコーパスグラフにおけるターゲットノードの近傍埋め込み情報を判定する方法を実行するコンピュータ実行可能命令を記録したコンピュータ可読媒体を含み得る。本方法は、コーパスグラフのターゲットノードにアクセスすること、およびコーパスグラフ内のターゲットノードの関連する近傍を判定することを含む。関連する近傍は、ターゲットノードに関連するとされたコーパスグラフの複数のノードを含み、関連する近傍の複数のノードのそれぞれは、ターゲットノードに対する相対的重要度を示す重要度値に関連付けられている。本方法は、さらに、ターゲットノードの近傍埋め込み情報を生成することを含む。近傍埋め込み情報は、複数の要素を含み、各要素が、関連する近傍の複数のノードのうちのノードの埋め込みに対応する。さらに、ターゲットノードの近傍埋め込み情報は、関連する近傍の複数のノードの関連する重要度値の関数として生成される。
【0176】
任意選択で、ターゲットノードの近傍埋め込み情報を生成することは、近傍埋め込み情報の各要素について、関連する近傍の複数のノードのうちのノードを選択すること、および選択されたノードの埋め込みベクトルの対応する要素を近傍埋め込み情報の現在の要素として選択することを含む。任意選択で、本方法は、複数の埋め込みベクトルに関連付けられた重要度値を正規化することをさらに含む。また、関連する近傍の複数のノードのうちのノードを選択することは、複数のノードの正規化された重要度値に従って、関連する近傍の複数のノードのうちのノードをランダムに選択することを含む。任意選択で、コーパスグラフ内のターゲットノードの関連する近傍を判定することは、関連付けられた最高の重要度値を有するコーパスグラフの所定数までのノードを選択することを含む。任意選択で、最高の関連付けられた重要度値を有するコーパスグラフの所定数までのノードを選択することは、最高の関連付けられた重要度値を有し、所定のしきい値よりも大きいコーパスグラフの所定数までのノードを選択することを含む。任意選択で、本方法は、さらに、近傍埋め込み情報をターゲットノードの埋め込み値と組み合わせて、ターゲットノードの集約埋め込み値を形成することを含む。任意選択で、ターゲットノードの関連する近傍の複数のノードのそれぞれに関連付けられた重要度値は、コーパスグラフ内のノードのランダムトラバーサル中のターゲットノードから複数のノードへの訪問カウントに従って判定される。
【0177】
本明細書で開示された実施態様は、限定ではなく実例として、コーパスグラフ内のターゲットノードの近傍埋め込み情報を判定するように構成されたコンピュータシステムを含み得る。本コンピュータシステムは、プロセッサおよびメモリを含み、プロセッサは、メモリに格納された命令を、追加構成要素の一部として、または追加構成要素とともに実行して、近傍埋め込み情報を生成する。これらの追加構成要素には、アイテムのコーパスグラフを格納するデータストアと、実行可能な関連近傍構成要素とがある。本コンピュータシステムでの実行において、関連近傍構成要素は、コーパスグラフ内のターゲットノードの関連する近傍を判定するように構成されている。関連する近傍には、ターゲットノードに関連するとされたコーパスグラフの複数のノードが含まれる。さらに、関連する近傍の複数のノードのそれぞれは、ターゲットノードに対する相対的な重要度を示す重要度値に関連付けられている。関連近傍構成要素は、さらに、ターゲットノードの近傍埋め込み情報を生成するように構成されている。この近傍埋め込み情報は、複数の要素を含み、各要素が、関連する近傍の複数のノードのうちのノードの埋め込みに対応する。さらに、ターゲットノードの近傍埋め込み情報は、関連する近傍の複数のノードの関連する重要度値の関数として生成される。
【0178】
任意選択で、ターゲットノードの関連近傍構成要素の近傍埋め込み情報を生成する際に、関連近傍構成要素は、さらに、近傍埋め込み情報の要素ごとに、関連する近傍の複数のノードのうちのノードを選択し、選択されたノードの埋め込みベクトルの対応する要素を、近傍埋め込み情報の現在の要素として選択するように構成される。任意選択で、関連近傍構成要素は、複数の埋め込みベクトルに関連付けられた重要度値を正規化するようにさらに構成されている。また、関連する近傍の複数のノードのうちのノードを選択する際に、関連近傍構成要素は、複数のノードの正規化された重要度値に従って、関連する近傍の複数のノードのうちのノードをランダムに選択する。任意選択で、コーパスグラフ内のターゲットノードの関連する近傍を判定する際に、関連近傍構成要素は、関連付けられた最高の重要度値を有するコーパスグラフの所定数までのノードを選択する。任意選択で、最高の関連付けられた重要度値を有するコーパスグラフの所定数までのノードを選択する際に、関連近傍構成要素は、関連付けられた最高の重要度値を有し、所定のしきい値より大きいコーパスグラフの所定数までのノードを選択する。任意選択で、関連近傍構成要素は、さらに、近傍埋め込み情報をターゲットノードの埋め込み値と組み合わせて、ターゲットノードの集約された埋め込み値を形成するように構成されている。
【0179】
本明細書で開示された実施態様は、限定ではなく実例として、コーパスグラフ内のターゲットノードに関するマッチングノードを識別するために、機械学習モデルを効率的にトレーニングするコンピュータ実行方法を含み得る。本方法は、トリプレットの入力ノードを含むトレーニングレコードを処理するために、機械学習モデルを初期化することを含む。この入力ノードのトリプレットには、ターゲットノード、対応するマッチングノード、および対応する非マッチングノードが含まれる。本方法はさらに、機械学習モデルを訓練するための訓練データの集合体にアクセスすることを含む。実際、機械学習モデルは、トレーニングレコードのターゲットノードに関する対応するマッチングノードと対応する非マッチングノードとを区別するようにトレーニングされ、ターゲットノードの対応するマッチングノードを正しく識別する。さらに、訓練データの集合体は、複数の訓練レコードを含む。本方法は、訓練データの集合体を使用して、機械学習モデルを訓練することをさらに含む。機械学習モデルは、トレーニングデータの集合体のターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、しきい値レベルの精度が達成されるまで、トレーニングデータに基づいてトレーニングされる。本方法は、さらに、対応するマッチングノードと対応する非マッチングノードとを区別する難しさが増すように、トレーニングデータの集合体を更新することを含む。本方法の一部として、機械学習モデルは、更新されたトレーニングデータの集合体のターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、しきい値レベルの精度が達成されるまで、更新されたトレーニングデータの集合体を使用してさらにトレーニングする。さらにまた、本方法は、訓練された機械学習モデルから、実行可能な機械学習モデルを生成することを含む。
【0180】
任意選択で、所定の反復回数の間、訓練データの集合体を更新し、更新された訓練データの集合体を使用して機械学習モデルを訓練するステップは、さらに、ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードのターゲットノードに関する対応するマッチングノードと対応する非マッチングノードとを区別する難しさが増すように、訓練データの集合体を更新すること、および更新された訓練データの集合体のターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、しきい値レベルの精度が達成されるまで、更新された訓練データの集合体を使用して機械学習モデルを訓練することを含む。任意選択で、所定の反復回数は、少なくとも2回である。任意選択で、訓練データは、最初に、対応するマッチングノードまたは対応する非マッチングノードの少なくとも1つが欠落しているような不完全な訓練レコードを含む。さらに、本方法は、各訓練レコードが、ターゲットノードと、対応する非マッチングノードとを含むトリプレットの入力値を含むように、訓練データを完成させることを含む。任意選択で、訓練データを完成させることが、訓練データの集合体の各訓練レコードに対して、訓練レコードのターゲットノードの関連する近傍にアクセスすること、および関連する近傍のうちの最も関連する近隣ノードを、訓練レコードの対応するマッチングノードとして選択するステップを含む。任意選択で、訓練データを完成させるステップが、さらに、訓練データの集合体の各訓練レコードに対して、コーパスグラフからターゲットノードをランダムに、訓練レコードの対応する非マッチングノードとして選択することを含む。任意選択で、ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードのターゲットノードに関する対応するマッチングノードと対応する非マッチングノードとを区別する難しさが増すように、訓練データの集合体を更新するステップは、訓練データの集合体の各訓練レコードに対して、訓練レコードのターゲットノードの関連する近傍にアクセスすること、および関連する近傍の近隣ノードを、以前の対応するマッチングノードよりもターゲットノードと弱く関連している、訓練レコードの対応するマッチングノードとして選択することを含む。任意選択で、本方法は、訓練データの集合体の各訓練レコードに対して、関連する近傍の近隣ノードを、以前の対応する非マッチングノードよりもターゲットノードと強く関連している、訓練レコードの対応する非マッチングノードとして選択することをさらに含む。任意選択で、ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードのターゲットノードに関する対応するマッチングノードと対応する非マッチングノードとを区別する難しさが増すように、訓練データの集合体を更新することは、訓練データの集合体の各訓練レコードに対して、訓練レコードのターゲットノードの関連する近傍にアクセスすること、および関連する近傍の近隣ノードを、以前の対応する非マッチングノードよりもターゲットノードと強く関連している、訓練レコードの対応する非マッチングノードとして選択することをさらに含む。
【0181】
本明細書に開示された実施態様は、限定ではなく実例として、コンピュータ実行可能命令を記録したコンピュータ可読媒体であって、媒体から命令を取得する少なくともプロセッサを含むコンピューティングシステム上で実行されると、コーパスグラフ内のターゲットノードに関するマッチングノードを識別するために、機械学習モデルを効率的に訓練する方法を実行するコンピュータ実行可能命令を記録したコンピュータ可読媒体を含み得る。本方法は、トレーニングレコードを処理するために機械学習モデルを初期化することを含み、トレーニングレコードは、トリプレットの入力ノードを含む。入力ノードの各トリプレットは、ターゲットノード、対応するマッチングノード、および対応する非マッチングノードを含む。本方法はさらに、機械学習モデルを訓練するための訓練データの集合体にアクセスすることを含む。トレーニングデータの集合体は、ターゲットノードの対応するマッチングノードを正しく識別するために、トレーニングレコードのターゲットノードの対応するマッチングノードと対応する非マッチングノードとを区別するトレーニングに利用される。さらに、訓練データの集合体は、複数の訓練レコードを含む。本方法は、さらに、訓練データの集合体のターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、しきい値レベルの精度が達成されるまで、訓練データの集合体を使用して機械学習モデルを訓練することを含む。本方法は、所定の反復回数の間、ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードのターゲットノードに関する対応するマッチングノードと対応する非マッチングノードとを区別する難しさが増すように、訓練データの集合体を更新することを含み、さらに、更新された訓練データの集合体のターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、しきい値レベルの精度が達成されるまで、更新された訓練データの集合体を使用して機械学習モデルを訓練することを含む。その後、本方法は、訓練された機械学習モデルから実行可能な機械学習モデルを生成することを含む。
【0182】
任意選択で、訓練データは、最初に、対応するマッチングノードまたは対応する非マッチングノードの少なくとも1つが欠落しているような不完全な訓練レコードを含む。このうち、本方法は、さらに、各訓練レコードが、ターゲットノードと、対応するマッチングノードと、対応する非マッチングノードとを含むトリプレットの入力値を含むように、訓練データを完成させることを含む。任意選択で、訓練データを完成させることが、訓練データの集合体の各訓練レコードに対して、訓練レコードのターゲットノードの関連する近傍にアクセスすること、および関連する近傍のうちの最も関連する近隣ノードを、訓練レコードの対応するマッチングノードとして選択することを含む。任意選択で、訓練データを完成させることが、さらに、訓練データの集合体の各訓練レコードに対して、コーパスグラフからターゲットノードをランダムに、訓練レコードの対応する非マッチングノードとして選択することを含む。任意選択で、ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードのターゲットノードに関する対応するマッチングノードと対応する非マッチングノードとを区別する難しさが増すように、訓練データの集合体を更新するステップは、訓練データの集合体の各訓練レコードに対して、訓練レコードのターゲットノードの関連する近傍にアクセスすること、および関連する近傍の近隣ノードを、以前の対応するマッチングノードよりもターゲットノードと弱く関連している、訓練レコードの対応するマッチングノードとして選択することを含む。任意選択で、本方法は、訓練データの集合体の各訓練レコードに対して、関連する近傍の近隣ノードを、以前の対応する非マッチングノードよりもターゲットノードと強く関連している、訓練レコードの対応する非マッチングノードとして選択することをさらに含む。任意選択で、ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードのターゲットノードに関する対応するマッチングノードと対応する非マッチングノードとを区別する難しさが増すように、訓練データの集合体を更新するステップは、訓練データの集合体の各訓練レコードに対して、訓練レコードのターゲットノードの関連する近傍にアクセスすること、および関連する近傍の近隣ノードを、以前の対応する非マッチングノードよりもターゲットノードと強く関連している、訓練レコードの対応する非マッチングノードとして、選択することをさらに含む。任意選択で、所定の反復回数は、少なくとも2回である。
【0183】
本明細書に開示される実施態様は、限定ではなく実例として、コーパスグラフ内のノード間の関連性を識別するために、機械学習モデルを効率的にトレーニングするように構成されたコンピュータシステムを含み得る。コンピュータシステムは、プロセッサおよびメモリを含み、プロセッサは、コーパスグラフ内のノード間の関連性を識別するために、追加構成要素の一部として、またはそれとともに、メモリに格納された命令を実行する。これらの追加構成要素は、アイテムのコーパスグラフを格納するデータストア、コンピュータシステムでの実行時にターゲットノードの関連する近傍を識別する実行可能な関連近傍識別構成要素、および実行可能モデル訓練構成要素を含む。コンピュータシステムでの実行では、実行可能モデル訓練構成要素は、機械学習モデルを初期化して、トリプレットの入力ノードを含むトレーニングレコードを処理するように構成されている。各入力ノードのトリプレットには、ターゲットノード、対応するマッチングノード、および対応する非マッチングノードが含まれる。モデル訓練構成要素は、機械学習モデルを訓練するための訓練データの集合体にアクセスして、訓練レコードのターゲットノードに対する対応するマッチングノードと対応する非マッチングノードとを区別し、ターゲットノードに対する対応するマッチングノードを正しく識別するようにさらに構成されている。また、訓練データの集合体は、複数の訓練レコードを含む。モデル訓練構成要素は、さらに、所定反の反復回数の間、ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードのターゲットノードに関する対応するマッチングノードと対応する非マッチングノードとを区別する難しさが増すように、訓練データの集合体を更新する。さらにまた、モデル訓練構成要素は、更新された訓練データの集合体のターゲットノードのそれぞれに関する対応するマッチングノードを正しく識別することに関して、しきい値レベルの精度が達成されるまで、更新された訓練データの集合体を使用して機械学習モデルを訓練する。さらに、モデル訓練構成要素は、訓練された機械学習モデルから実行可能な機械学習モデルを生成するように構成されている。
【0184】
任意選択で、ターゲットノードの対応するマッチングノードを正しく識別するために、訓練レコードのターゲットノードに関する対応するマッチングノードと対応する非マッチングノードとを区別する難しさが増すように、訓練データの集合体を更新する際に、訓練データの集合体の各訓練レコードに対して、モデル訓練構成要素がさらに、訓練レコードのターゲットノードの関連する近傍にアクセスすること、および関連する近傍の近隣ノードを、以前の対応するマッチングノードよりもターゲットノードと弱く関連している、訓練レコードの対応するマッチングノードとして選択することを行う。任意選択で、かつ、訓練データ集合体の各訓練レコードについて、モデル訓練構成要素は、訓練レコードの対応する非マッチングノードとして、以前の対応する非マッチングノードよりもターゲットノードとの関連性が高い、関連する近傍の近隣ノードを選択する。
【0185】
開示された主題の様々な新規の態様を説明してきたが、これらの態様は例示的であり、限定として解釈されるべきではないことを理解されたい。開示された主題の範囲から逸脱することなく、様々な態様の変形および変更を行うことができる。
図1
図2
図3
図4A
図4B
図4C
図4D
図4E
図4F
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17