様々な図面における同じ参照記号は、同様の要素を示す。
一般に、本文書は、サードパーティのクッキーが(たとえば、ブラウザによって)ブロックされ、および/またはユーザプロファイルの収集が別様に実現不可能である状況でも、ユーザのプライバシーを保護し、データセキュリティを確保しながら、ユーザグループのメンバーシップを拡大するように機械学習モデルを訓練して使用するための、システムおよび技法を説明する。一般に、コンテンツプラットフォームなどの他のエンティティのコンピューティングシステムにおいてユーザプロファイルを作成して維持するのではなく、ユーザプロファイルはユーザのクライアントデバイスにおいて維持される。機械学習モデルを訓練するために、ユーザのクライアントデバイスは、他のデータとともに、それらの暗号化されたユーザプロファイル(たとえば、ユーザプロファイルの秘密シェアとして)を、任意選択でコンテンツプラットフォームを介して、セキュアマルチパーティ計算(MPC)クラスタの複数のコンピューティングシステムに送信することができる。たとえば、各クライアントデバイスは、ユーザプロファイルの2つ以上のシェア、たとえば、秘密シェアを生成し、それぞれの秘密シェアを各コンピューティングシステムに送信することができる。いくつかの実装形態では、各ユーザプロファイルの中の情報の異なるサブセットは、各コンピューティングシステムに送信されるユーザプロファイルデータに重複がないように、各コンピューティングシステムに提供される。
MPCクラスタのコンピューティングシステムは、MPCクラスタ(またはユーザ自身ではない他の関係者)のコンピューティングシステムがユーザのプロファイルを平文で取得するのを防ぎ、それによりユーザのプライバシーを守るような方法で、ユーザのプロファイルに基づいてユーザに対するユーザグループを提案するための機械学習モデルを訓練するために、MPC技法を使用することができる。プレーンテキストとも呼ばれ得る平文は、鍵もしくは他の復号デバイス、または他の復号プロセスを必要とせずに閲覧または使用することができる形式の、計算的にタグ付けされていない、特別にフォーマットされていない、もしくは暗号で書かれていないテキスト、またはバイナリファイルを含むデータである。機械学習モデルは、重心モデルおよび/またはk最近傍(k-NN)モデルであり得る。重心モデルでは、ユーザグループのための重心モデルは、ユーザグループのメンバーであるユーザのユーザプロファイルの重心(たとえば、平均)などの、ユーザプロファイルの重心を表すことができる。k-NNモデルでは、モデルは、類似するユーザが同じまたは類似するユーザグループに分類され得るように、類似するユーザが近くに存在すると仮定する。
機械学習モデルが訓練された後、ユーザのプロファイルに基づいて各ユーザに対する1つまたは複数のユーザグループを提案するために、機械学習モデルが使用され得る。たとえば、ユーザのクライアントデバイスは、そのユーザに対する提案されるユーザグループについてMPCクラスタにクエリし、またはユーザが特定のユーザグループに追加されるべきであるかどうかを決定することができる。重心モデルを展開する実装形態では、MPCクラスタは、ユーザのユーザプロファイルを使用して、ユーザのユーザプロファイルから閾値の距離内に重心を有するユーザグループを特定することができる。k-NNモデルを使用する実装形態では、ユーザグループを特定するために、二項分類、回帰(たとえば、算術平均または二乗平方根を使用して)、および/またはマルチクラス分類などの、様々な推測技法が使用され得る。ユーザのユーザグループメンバーシップが、プライバシー保護、およびコンテンツ(たとえば、デジタルコンテンツ)をユーザに提供するためのセキュアな方法において使用され得る。
MPCクラスタは、ユーザグループのための性能尺度に基づいて、ユーザのためのユーザグループを選択することができる。たとえば、MPCクラスタは、性能閾値を満足する(たとえば、満たすまたは超える)ユーザインタラクション率(たとえば、クリックスルーレート(CTR))またはコンバージョン率を有するユーザグループを選択することができる。ユーザグループのための性能尺度は、ユーザグループに対応する1つまたは複数のデジタルコンポーネントの性能、たとえば、ユーザがユーザグループのメンバーであることに基づいてユーザに分配されるデジタルコンポーネントの性能を反映することができる。
機械学習モデルを生成して使用するための例示的なシステム
図1は、セキュアMPCクラスタ130が機械学習モデルを訓練し、ユーザグループを拡大するために機械学習モデルが使用される環境100のブロック図である。例示的な環境100は、ローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、インターネット、モバイルネットワーク、またはそれらの組合せなどの、データ通信ネットワーク105を含む。ネットワーク105は、クライアントデバイス110、セキュアMPCクラスタ130、発行者140、ウェブサイト142、およびコンテンツプラットフォーム150を接続する。例示的な環境100は、多くの異なるクライアントデバイス110、セキュアMPCクラスタ130、発行者140、ウェブサイト142、およびコンテンツプラットフォーム150を含み得る。
クライアントデバイス110は、ネットワーク105を介して通信することが可能な電子デバイスである。例示的なクライアントデバイス110は、パーソナルコンピュータ、モバイル通信デバイス、たとえば、スマートフォン、およびネットワーク105を介してデータを送信し、受信することができる他のデバイスを含む。クライアントデバイスはまた、マイクロフォンを介してオーディオ入力を受け入れ、スピーカを介してオーディオ出力を出力するデジタルアシスタントデバイスも含み得る。デジタルアシスタントは、オーディオ入力を受け入れるためにマイクロフォンを起動する「ホットワード」または「ホットフレーズ」を検出すると、聴取モードになり得る(たとえば、オーディオ入力を受け入れる準備ができている)。デジタルアシスタントデバイスはまた、画像をキャプチャし、情報を視覚的に提示するためのカメラおよび/またはディスプレイも含み得る。デジタルアシスタントは、ウェアラブルデバイス(たとえば、腕時計または眼鏡)、スマートフォン、スピーカデバイス、タブレットデバイス、または別のハードウェアデバイスを含む、異なる形態のハードウェアデバイスで実装され得る。クライアントデバイスはまた、デジタルメディアデバイス、たとえば、テレビジョン、ゲームコンソール、または仮想現実システムにビデオをストリーミングするために、テレビジョンまたは他のディスプレイへと差し込まれるストリーミングデバイスを含み得る。
クライアントデバイス110は通常、ネットワーク105を介してデータを送信すること、および受信することを円滑にするために、ウェブブラウザおよび/またはネイティブアプリケーションなどのアプリケーション112を含む。ネイティブアプリケーションは、特定のプラットフォームまたは特定のデバイス(たとえば、特定のオペレーティングシステムを有するモバイルデバイス)のために開発されたアプリケーションである。発行者140は、ネイティブアプリケーションを開発し、クライアントデバイス110に提供する、たとえばダウンロード可能にすることができる。ウェブブラウザは、たとえば、クライアントデバイス110のユーザが、ウェブブラウザのアドレスバーにリソース145のリソースアドレスを入力したこと、またはリソースアドレスを参照するリンクを選択したことに応答して、発行者140のウェブサイト142をホストするウェブサーバからのリソース145を要求することができる。同様に、ネイティブアプリケーションは、発行者のリモートサーバからのアプリケーションコンテンツを要求することができる。
いくつかのリソース、アプリケーションページ、または他のアプリケーションコンテンツは、デジタルコンポーネントにリソース145またはアプリケーションページを提示するためのデジタルコンポーネントスロットを含み得る。本明細書全体にわたって使用されるように、「デジタルコンポーネント」という語句は、デジタルコンテンツまたはデジタル情報の別個の単位(たとえば、ビデオクリップ、オーディオクリップ、マルチメディアクリップ、画像、テキスト、またはコンテンツの別の単位)を指す。デジタルコンポーネントは、単一のファイルとして、またはファイルの集合体として物理メモリデバイスに電子的に記憶されてもよく、デジタルコンポーネントは、ビデオファイル、オーディオファイル、マルチメディアファイル、画像ファイル、またはテキストファイルの形態をとり、広告情報を含んでもよく、したがって、広告は、デジタルコンポーネントの一種である。たとえば、デジタルコンポーネントは、アプリケーション112によって提示されるウェブページまたは他のリソースのコンテンツを補足することが意図されるコンテンツであってもよい。より具体的には、デジタルコンポーネントは、リソースコンテンツに関連するデジタルコンテンツを含み得る(たとえば、デジタルコンポーネントは、ウェブページコンテンツと同じトピック、または関連するトピックに関連し得る)。したがって、デジタルコンポーネントの提供は、ウェブページまたはアプリケーションコンテンツを補足し、一般に強化することができる。
アプリケーション112が、1つまたは複数のデジタルコンポーネントスロットを含むリソース(またはアプリケーションコンテンツ)をロードすると、アプリケーション112は、各スロットのデジタルコンポーネントを要求することができる。いくつかの実装形態では、デジタルコンポーネントスロットは、アプリケーション112に、デジタルコンポーネントを選択しクライアントデバイス110のユーザへの提示のためにデジタルコンポーネントをアプリケーション112に提供するデジタルコンポーネント配信システムからデジタルコンポーネントを要求させるコード(たとえば、スクリプト)を含み得る。
コンテンツプラットフォーム150は、供給側プラットフォーム(SSP)および需要側プラットフォーム(DSP)を含み得る。一般に、コンテンツプラットフォーム150は、発行者140およびデジタルコンポーネント提供者160の代わりに、デジタルコンポーネントの選択と分散を管理する。
一部の発行者140は、SSPを使用して、そのリソースおよび/またはアプリケーションのデジタルコンポーネントスロットのためのデジタルコンポーネントを取得するプロセスを管理する。SSPは、リソースおよび/またはアプリケーションのためのデジタルコンポーネントを取得するプロセスを自動化するハードウェアおよび/またはソフトウェアにおいて実装される技術プラットフォームである。各発行者140は、対応するSSPまたは複数のSSPを有し得る。一部の発行者140は、同じSSPを使用することがある。
デジタルコンポーネント提供者160は、発行者のリソースおよびアプリケーションのデジタルコンポーネントスロットに提示されるデジタルコンポーネントを作成(または別様に発行)することができる。デジタルコンポーネント提供者160は、DSPを使用して、デジタルコンポーネントスロットにおいて提示するためにそのデジタルコンポーネントのプロビジョニングを管理することができる。DSPは、リソースおよび/またはアプリケーションを用いて提示するためのデジタルコンポーネントを配信するプロセスを自動化するハードウェアおよび/またはソフトウェアにおいて実装される技術プラットフォームである。DSPは、デジタルコンポーネント提供者160に代わって複数の供給側プラットフォーム(SSP)と対話して、複数の異なる発行者140のリソースおよび/またはアプリケーションを用いて提示するためのデジタルコンポーネントを提供することができる。一般に、DSPは、デジタルコンポーネントに対する要求を(たとえば、SSPから)受信し、要求に基づいて1つまたは複数のデジタルコンポーネント提供者によって作成された1つまたは複数のデジタルコンポーネントに対する選択パラメータを生成(または選択)し、デジタルコンポーネントに関するデータ(たとえば、デジタルコンポーネント自体)および選択パラメータをSSPに提供することができる。次いで、SSPは、クライアントデバイス110での提示のためのデジタルコンポーネントを選択し、クライアントデバイス110にデジタルコンポーネントを提示させるデータをクライアントデバイス110に提供することができる。
いくつかの場合、ウェブページ、アプリケーションページ、または、以前にユーザが訪問した、および/もしくはユーザと対話した他の電子リソースに関連する、デジタルコンポーネントをユーザが受信することが有益である。そのようなデジタルコンポーネントをユーザに分配するために、ユーザは、ユーザが特定のリソースを訪問するとき、またはリソースにおいて特定の行為を実行するとき、たとえば、(a)特定のアイテムのリンクをクリックする、(b)たとえばアイテムを仮想カートに追加し、もしくはアイテムを購入することによって、特定のアイテムに対するコンバージョンを完了する、および/または(c)あらかじめ設定された長さの時間より長く特定のアイテムを見るなど、ウェブページに提示される特定のアイテムと対話するとき、ユーザグループ、たとえばユーザ関心グループ、類似するユーザのコホート、または類似するユーザデータを伴う他のグループタイプに割り当てられ得る。モデルは、対話に応答してユーザのためのユーザグループを生成または特定するものとして説明されるが、他の実装形態では、モデルは、ユーザが何らかの対話を実行するが、後続の対話を欠いていること、たとえば、デジタルコンポーネントを見るがクリックしない、構成要素をクリックするがコンバージョンを行わないことなどに応答し、それに基づいて、ユーザグループを生成または特定することができる。そのような分配を行うために、モデルはまず、ユーザによる特定のタイプの対話を示すそのようなデータ(すなわち、信号)について訓練される。ユーザが特定の対話を実行するが後続の対話を欠いている(たとえば、ユーザがデジタルコンポーネントを表示されるがそれをクリックしない、またはユーザがデジタルコンポーネントをクリックするがコンバージョンを行わない)場合に、信号に基づいてモデルを訓練することは、そのような信号を考慮しないモデルより有利であり得ることがあり、それは、モデルのより正確な訓練ならびにそれらの訓練されたモデルの後続の展開を可能にできるからである。
ユーザグループは、デジタルコンポーネント提供者160またはコンテンツプラットフォーム150、または発行者140によって生成され得る。すなわち、各デジタルコンポーネント提供者160は、ユーザがデジタルコンポーネント提供者160の電子リソースを訪れるとき、ユーザを自分のユーザグループに割り当てることができる。別の例では、コンテンツプラットフォーム150は、デジタルコンポーネント提供者160のためのユーザグループを作成することができる。別の例では、発行者140は、発行者のウェブサイトを訪れるユーザのためのユーザグループを作成することができる。
ユーザのプライバシーを保護するために、ユーザのグループメンバーシップは、デジタルコンポーネント提供者、コンテンツプラットフォーム、または他の関係者によってではなく、たとえばアプリケーション112のうちの1つ、またはクライアントデバイス110のオペレーティングシステムによって、ユーザのクライアントデバイス110において維持され得る。特定の例では、信頼されるプログラム(たとえば、ウェブブラウザ)またはオペレーティングシステムは、ウェブブラウザまたは別のアプリケーションを使用して、ユーザのためのユーザグループ識別子のリスト(「ユーザグループリスト」)を維持することができる。ユーザグループリストは、ユーザが追加された各ユーザグループのためのグループ識別子を含み得る。ユーザグループを作成するデジタルコンポーネント提供者160は、それらのユーザグループのためのユーザグループ識別子を指定することができる。ユーザグループのためのユーザグループ識別子は、グループを記述するもの(たとえば、ガーデニンググループ)またはグループを表すコード(たとえば、記述的ではない英数字シーケンス)であり得る。ユーザのためのユーザグループリストは、クライアントデバイス110のセキュアなストレージに記憶されてもよく、および/または、他者がグループにアクセスするのを防ぐために、記憶されるときに暗号化されてもよい。
アプリケーション112がデジタルコンポーネント提供者160に関するリソースもしくはアプリケーションコンテンツを提示するとき、またはウェブサイト142上のウェブページを提示するとき、リソースは、1つまたは複数のユーザグループ識別子をユーザグループリストに追加するようにアプリケーション112に要求することができる。それに応答して、アプリケーション112は、1つまたは複数のユーザグループ識別子をユーザグループリストに追加し、ユーザグループリストをセキュアに記憶することができる。
コンテンツプラットフォーム150は、ユーザのユーザグループメンバーシップを使用して、ユーザの関心の対象であり得るデジタルコンポーネントもしくは他のコンテンツを選択することができ、または、別の方法でユーザ/ユーザデバイスにとって有益であることがある。たとえば、そのようなデジタルコンポーネントまたは他のコンテンツは、ユーザ体験を改善する、ユーザデバイスの動作を改善する、または何らかの他の方法でユーザもしくはユーザデバイスに利益をもたらす、データを含み得る。しかしながら、ユーザのユーザグループリストのユーザグループ識別子は、コンテンツプラットフォーム150がユーザグループ識別子を特定のユーザと相関付けること、または別様に平文でユーザグループ識別子にアクセスすることを防ぐような方法で提供されてもよく、それにより、デジタルコンポーネントを選択するためにユーザグループメンバーシップデータを使用するときにユーザプライバシーを保護する。
アプリケーション112は、コンテンツプラットフォーム150またはユーザ自身ではない任意の他のエンティティがユーザの完全なユーザグループメンバーシップを知るのを防ぐような方法で、ユーザグループメンバーシップに基づいてクライアントデバイス110において提示するためのデジタルコンポーネントを選択するために、コンテンツプラットフォーム150と対話する信頼されるコンピューティングシステムにユーザグループリストからのユーザグループ識別子を提供することができる。
いくつかの場合、すでにユーザグループのメンバーであるユーザとして、類似する関心または他の類似するデータを有するユーザを含めるように、ユーザグループを拡大することが、ユーザおよびデジタルコンポーネント提供者にとって有益である。有用なことに、これは、サードパーティのクッキーの使用なしで達成され得る。たとえば、第1のユーザは雪山でのスキーに関心があることがあり、特定のスキーリゾートのためのユーザグループのメンバーであることがある。第2のユーザもスキーに関心があることがあるが、このスキーリゾートを知らず、スキーリゾートのメンバーではないことがある。これらの2人のユーザが類似する関心またはデータ、たとえば類似するユーザプロファイルを有する場合、スキーリゾートに関連し、第2のユーザまたはそのユーザデバイスの関心の対象であり得る、もしくは別様にそれらに有益であり得るコンテンツ、たとえばデジタルコンポーネントを第2のユーザが受信するように、第2のユーザがスキーリゾートのためのユーザグループに追加され得る。言い換えると、ユーザグループは、類似するユーザデータを有する他のユーザを含むように拡大され得る。
セキュアMPCクラスタ130は、ユーザのプロファイルに基づいて、ユーザグループをユーザ(またはユーザのアプリケーション112)に提案する、またはその提案を生成するために使用され得る、機械学習モデルを訓練することができる。セキュアMPCクラスタ130は、機械学習モデルを訓練するためにセキュアMPC技法を実行する、2つのコンピューティングシステムMPC1およびMPC2を含む。例示的なMPCクラスタ130は2つのコンピューティングシステムを含むが、MPCクラスタ130が1つより多くのコンピューティングシステムを含む限り、MPCプロセスを実行するためにより多くのコンピューティングシステムを使用することもできる。たとえば、MPCクラスタ130は、3つのコンピューティングシステム、4つのコンピューティングシステム、または別の適切な数のコンピューティングシステムを含み得る。MPCクラスタ130の中のより多くのコンピューティングシステムを使用することは、さらなるセキュリティおよび誤り耐性をもたらすことができるが、MPCプロセスの複雑さも向上させることがある。
MPCクラスタ130内のコンピューティングシステムMPC1およびMPC2は、異なるエンティティによって運用され得る。このようにすると、各エンティティは、平文の完全なユーザプロファイルにアクセスすることができない。たとえば、コンピューティングシステムMPC1またはMPC2のうちの1つは、ユーザ、発行者140、コンテンツプラットフォーム150、およびデジタルコンポーネント提供者160とは異なる信頼される関係者により運用され得る。たとえば、業界団体、政府団体、またはブラウザ開発者が、コンピューティングシステムMPC1およびMPC2のうちの1つを維持して運用し得る。他のコンピューティングシステムは、これらのグループのうちのある異なるグループにより運用されることがあるので、異なる信頼される関係者が各コンピューティングシステムMPC1およびMPC2を運用する。好ましくは、異なるコンピューティングシステムMPC1およびMPC2を運用する異なる関係者には、共謀してユーザのプライバシーを脅かすような動機がない。いくつかの実装形態では、コンピューティングシステムMPC1およびMPC2は、アーキテクチャが分離されており、本文書において説明されるセキュアMPCプロセスを実行すること以外に互いに通信しないように監視される。
いくつかの実装形態では、MPCクラスタ130は、各コンテンツプラットフォーム150(たとえば、各DSPおよび/または各SSP)のために、および/または各デジタルコンポーネント提供者160のために、1つまたは複数の機械学習モデル(たとえば、重心モデルおよび/またはk-NNモデル)を訓練する。たとえば、コンテンツプラットフォーム150は、コンテンツプラットフォーム150によって管理される、またはコンテンツプラットフォームが少なくとも読取りアクセス権を有する、1つまたは複数のユーザグループの任意のサブセットのために、MPCクラスタ130に機械学習モデル(たとえば、重心モデルまたはk-NNモデル)を訓練させることができる。たとえば、各コンテンツプラットフォーム150は、1つまたは複数のデジタルコンポーネント提供者160のためのデジタルコンポーネントの配信を管理することができる。コンテンツプラットフォーム150は、コンテンツプラットフォーム150がデジタルコンポーネントの分配を管理する対象であるデジタルコンポーネント提供者160の1つまたは複数のための機械学習モデル(たとえば、重心モデルまたはk-NNモデル)を訓練するようにMPCクラスタ130に要求することができる。一般に、デジタルコンポーネント提供者160は、デジタルコンポーネント提供者160によって作成され維持されるユーザグループの1つまたは複数のための重心モデルおよび/またはk-NNモデルをMPCクラスタ130に訓練させることができる。各コンテンツプラットフォームは、異なる機械学習モデルを実装してもよく、これはそれぞれの固有のモデル識別子によって一意に特定され得る。重心モデルおよびk-NNモデルを訓練するための例示的なプロセスが、以下でさらにより詳しく説明される。
重心モデルを展開する実装形態では、重心モデルはn次元空間へとユーザを埋め込むことができる。プロファイル空間の中のユーザは、n次元ベクトルX={x1,x2,...xn}によって表される。ユーザグループRはm人のユーザ{X1,X2,...Xm}を有する。モデルの中のユーザグループRの重心は、
であり得る。ユーザX'={x1',x2',...xn'}であり、コンテンツプラットフォーム150またはデジタルコンポーネント提供者160が|X'-Centroid(model,R)|<dとなるようなすべてのユーザグループRを見つけることを望む可能性があり、dが、たとえばコンテンツプラットフォーム150によって指定される、重心モデルのための閾値距離を表すパラメータであると仮定する。後続の説明を簡単にするために、および簡潔さのために、重心モデルに関する残りの説明は大半が、コンテンツプラットフォーム150のための重心モデル、たとえばDSPおよびSSPを訓練して展開することに関するものである。しかしながら、デジタルコンポーネント提供者160、発行者140、または他のエンティティのための重心モデルを生成し、デジタルコンポーネント提供者160または他のエンティティの代わりに重心モデルにクエリするための、システムおよび技法も実行され得る。
コンテンツプラットフォーム150のために機械学習モデル(たとえば、重心またはk-NNモデル)を訓練した後、コンテンツプラットフォーム150は、クライアントデバイス110のユーザのための1つまたは複数のユーザグループを特定するように機械学習モデルにクエリすることができ、または、そのことをクライアントデバイス110のアプリケーション112に行わせることができる。
より具体的には、重心モデルを使用する実装形態では、コンテンツプラットフォーム150は、ユーザがコンテンツプラットフォーム150のユーザグループのいずれかに加入すべきであるかどうかを決定するように、コンテンツプラットフォーム150の重心モデルにクエリすることができ、またはクエリするようにアプリケーション112に要求することができる。一般に、MPCクラスタ130は、ユーザのユーザプロファイルがコンテンツプラットフォーム150のユーザグループの重心から閾値の距離以内にあるかどうかを決定することができる。ある場合、MPCクラスタ130は、ユーザプロファイルが重心から閾値の距離以内にあるユーザグループにユーザを追加するように、アプリケーション112に要求することができる。いくつかの実装形態では、モデルは、性能尺度、たとえばインタラクション率またはコンバージョン率に基づいてクエリされてもよく、ユーザは、性能尺度がそれぞれの閾値を満たす場合、特定のユーザグループに追加され得る。
k-NNモデルを使用するいくつかの実装形態では、コンテンツプラットフォーム150は、閾値の数「k」個の、ユーザに最も近いユーザプロファイルが特定のユーザグループのメンバーであるかどうかを決定するように、k-NNモデルにクエリすることができ、またはクエリするようにアプリケーション112に要求することができる。そうである場合、コンテンツプラットフォーム150はユーザをそのユーザグループに追加し得る。ユーザグループがユーザのために特定される場合、コンテンツプラットフォーム150またはMPCクラスタ130は、ユーザをユーザグループに追加するようにアプリケーション112に要求することができる。
いくつかの実装形態では、機械学習モデルは、追加または代替として、閾値の性能尺度に基づいてクエリされ得る。クエリの際に、MPCクラスタ130は、ユーザのユーザプロファイルに最も近いk個のユーザプロファイルを特定することができる。k人のユーザの少なくとも1人をメンバーとして含む各ユーザグループに対して、MPCクラスタ130は、対話またはコンバージョン、および対話とコンバージョンの欠如に基づいて、ユーザグループの1つまたは複数のデジタルコンポーネントに関して、ユーザについてのグループの性能尺度を計算することができる。MPCクラスタ130は、計算された性能尺度を閾値と比較することができる。閾値を満たす性能尺度を有するあらゆるユーザグループについて、MPCクラスタ130は、ユーザがそのユーザグループに追加されるように要求することができる。閾値を満たさない性能尺度を有するユーザグループについて、MPCクラスタ130は、ユーザがユーザグループに追加されることを要求しなくてもよい。
いくつかの実装形態では、MPCクラスタ130は、個々のユーザではなくユーザグループに基づいて機械学習モデルを訓練する。たとえば、k-NNモデルは、個々のユーザではなくユーザグループに基づいて訓練され得る。そのような例では、性能尺度は、k-NNモデルの中の各ユーザグループのために計算され得る。k-NNモデルは次いで、閾値の性能尺度を使用してクエリされ得る。この例では、MPCクラスタ130は、ユーザのユーザプロファイルに最も近い集約されたユーザプロファイル(たとえば、グループの重心に基づく)を有するk個のユーザグループを特定することができる。閾値を満たす性能尺度を有するあらゆるユーザグループについて、MPCクラスタ130は、そのユーザグループにユーザが追加されるように要求することができる。閾値を満たさない性能尺度を有するユーザグループについて、MPCクラスタ130は、ユーザがユーザグループに追加されることを要求しなくてもよい。
ユーザおよび/またはアプリケーション112によって承認される場合、アプリケーション112は、クライアントデバイス110に記憶されているユーザグループリストにユーザグループのためのユーザグループ識別子を追加することができる。
いくつかの実装形態では、アプリケーション112は、ユーザが割り当てられるユーザグループをユーザが管理することを可能にするユーザインターフェースを提供することができる。たとえば、ユーザインターフェースは、ユーザが、ユーザグループ識別子を削除すること、すべてのまたは特定のリソース145、発行者140、コンテンツプラットフォーム150、デジタルコンポーネント提供者160、および/またはMPCクラスタ130がユーザをユーザグループに追加するのを防ぐこと(たとえば、アプリケーション112によって維持されるユーザグループ識別子のリストにエンティティがユーザグループ識別子を追加するのを防ぐこと)を可能にできる。これは、さらなる透明性およびユーザの制御権をもたらす。
本文書全体の説明に付け加えると、ユーザは、本明細書において説明されるシステム、プログラム、または特徴がユーザ情報(たとえば、ユーザのソーシャルネットワーク、社会的な行為もしくは活動、職業、ユーザの選好、またはユーザの現在地についての情報)の収集を許可し得るかどうか、およびいつ許可し得るかの両方について、ならびにユーザがサーバからコンテンツまたは通信を送信されるかどうかについての選択を、ユーザが行うことを可能にする、制御手段(たとえば、ユーザが閲覧、クリック、またはコンバージョンによって対話することができるユーザインターフェース要素)を与えられてもよい。加えて、いくつかのデータは、個人を識別できる情報が除去されるように、記憶または使用される前に1つまたは複数の方法で扱われ得る。たとえば、ユーザの識別情報は、個人を識別できる情報がユーザについて決定できないように扱われてもよく、またはユーザの地理的位置は、ユーザの具体的な位置を決定できないように、位置情報が取得される場合に(都市、ZIPコード、もしくは州のレベルなどに)一般化されてもよい。したがって、ユーザは、ユーザについてのどの情報が収集されるか、その情報がどのように使用されるか、およびどの情報がユーザに提供されるかを制御することができる。
重心モデルを生成して使用するための例示的なプロセス
図2は、重心モデルを生成し、重心モデルを使用してユーザをユーザグループに追加するための、例示的なプロセス200のスイムレーン図である。プロセス200の動作は、たとえば、クライアントデバイス110、MPCクラスタ130のコンピューティングシステムMPC1およびMPC2、ならびにコンテンツプラットフォーム150によって実施され得る。プロセス200の動作は、非一時的であり得る1つまたは複数のコンピュータ可読媒体上に記憶された命令として実装されてもよく、1つまたは複数のデータ処理装置による命令の実行は、1つまたは複数のデータ処理装置にプロセス200の動作を実行させ得る。プロセス200および以下の他のプロセスは、2つのコンピューティングシステムMPCクラスタ130に関して説明されるが、2つより多くのコンピューティングシステムを有するMPCクラスタも、同様のプロセスを実行するために使用され得る。
この例示的なプロセスでは、ユーザをユーザグループに追加するために重心モデルが使用される。ユーザグループの重心の計算はまた、個々のユーザプロファイルではなくユーザグループに基づく他の機械学習モデル、たとえばk-NNモデルのための前処理段階としても使用され得る。たとえば、k-NNモデルの中の各ユーザグループは、ユーザグループの重心によって提示され得る。
コンテンツプラットフォーム150は、クライアントデバイス110上で実行されるアプリケーション112に対して、それらのそれぞれのユーザのユーザプロファイルを生成し、ユーザプロファイルの秘密分散されたおよび/または暗号化されたバージョンをMPCクラスタ130にアップロードするように要求することによって、重心モデルの1つまたは複数の生成および/または更新を開始することができる。本文書では、ユーザプロファイルの秘密シェアは、秘密シェアが平文ではないので、ユーザプロファイルの暗号化されたバージョンであると見なされ得る。一般に、各アプリケーション112は、ユーザプロファイルのためのデータを記憶し、コンテンツプラットフォーム150から要求を受信したことに応答して、更新されたユーザプロファイルを生成することができる。ユーザプロファイルの内容および機械学習モデルは異なるコンテンツプラットフォーム150に対しては異なるので、ユーザのクライアントデバイス110上で実行されるアプリケーション112は、複数のユーザプロファイルのためのデータを維持し、特定のコンテンツプラットフォームに各々固有である、または特定の重心モデルに固有である複数のユーザプロファイルを生成することができる。
コンテンツプラットフォーム150(またはデジタルコンポーネント提供者160)は、たとえば1つまたは複数のユーザグループの各セットに対して1つの、複数の重心モデルを有し得るので、コンテンツプラットフォーム150(またはデジタルコンポーネント提供者160)は、アプリケーション112に対して、ユーザプロファイルを生成し、複数のユーザグループおよび/または複数の重心モデルのためのユーザプロファイルを同時に、たとえば単一の要求でアップロードするように、要求することができる。
クライアントデバイス110上で実行されるアプリケーション112は、クライアントデバイス110のユーザのためのユーザプロファイルを形成する(202)。ユーザのためのユーザプロファイルは、電子リソース、たとえばウェブページまたはアプリケーションコンテンツに関してユーザによって開始されるイベント、および/または、ユーザによって開始された可能性のあるイベントに関するデータを含み得る。それらのイベントは、電子リソースの閲覧、デジタルコンポーネントの閲覧、ユーザ対話(たとえば、電子リソースおよび/またはデジタルコンポーネントに対する、ユーザによる閲覧、クリック、もしくはコンバージョンの1つまたは複数)、または電子リソースもしくはデジタルコンポーネントとのユーザ対話の欠如(たとえば、電子リソースおよび/もしくはデジタルコンポーネントに対するユーザによる閲覧、クリック、またはコンバージョンの欠如)、電子リソースとのユーザ対話の後で起こる(または起こらない)コンバージョン、および/または、ユーザと電子リソースに関する他の適切なイベントを含み得る。ユーザプロファイルは時間とともに変化し得るので、構築されたユーザプロファイルは現在のユーザプロファイルPcurrentと呼ばれ得る。
ユーザのためのユーザプロファイルは、コンテンツプラットフォーム150に固有であってもよく、またはコンテンツプラットフォーム150によって所有される選択された重心モデルであってもよい。たとえば、図3を参照して以下でより詳しく説明されるように、各コンテンツプラットフォーム150は、そのコンテンツプラットフォーム150に固有のユーザプロファイルを生成または更新するようにアプリケーション112に要求することができる。別の例では、コンテンツプラットフォーム150は、コンテンツプラットフォーム150の各重心モデルのためにそれぞれのユーザプロファイルを生成または更新するようにアプリケーションに要求することができる。
ユーザのためのユーザプロファイルPcurrentは、特徴ベクトルの形式であり得る。たとえば、ユーザプロファイルPcurrentは、n次元の特徴ベクトルであり得る。n次元の各々は特定の特徴に対応してもよく、各次元の値はユーザのための特徴の値であってもよい。たとえば、ある次元は、特定のデジタルコンポーネントがユーザに提示された(またはユーザにより操作された)かどうかのためのものであり得る。この例では、その特徴の値は、デジタルコンポーネントがユーザに提示された(またはユーザにより操作された)場合は「1」であってもよく、または、デジタルコンポーネントがユーザに提示されていない(またはユーザにより操作されていない)場合は「0」であってもよい。ユーザのためのユーザプロファイルを生成するための例示的なプロセスが、図3に示され、以下で説明される。
アプリケーション112は、ユーザのためのユーザプロファイルPcurrentの秘密シェアを生成する(204)。この例では、アプリケーション112は、MPCクラスタ130の各コンピューティングシステムに対して1つずつ、ユーザプロファイルPcurrentの2つの秘密シェア[Pcurrent,1]および[Pcurrent,2]を生成する。本文書では、秘密シェアは、要素「secret share」の秘密シェアについて、分散される秘密である要素(たとえば、値、ベクトルなど)の周りに括弧[]を使用して、たとえば[secret share]のように表現される。たとえば、アプリケーションは、ユーザプロファイルPcurrentを秘密シェアへと分割して、MPCクラスタ130の中の危殆化されたコンピューティングシステムからユーザプロファイルPcurrentの値を保護することができる。各秘密シェア自体は、それ自体ユーザプロファイルについて何も明らかにしないランダム値であり得ることに留意されたい。ユーザプロファイルを得るには、両方の秘密シェアが組み合わせられる必要がある。MPCクラスタ130が、機械学習モデルの訓練に参加するより多くのコンピューティングシステムを含む場合、アプリケーション112は、各コンピューティングシステムに対して1つずつ、より多くの秘密シェアを生成する。ユーザプロファイルを構築し、ユーザプロファイルの秘密シェアを生成するための例示的なプロセスが、図3に示され、以下で説明される。
アプリケーション112は、ユーザプロファイルPcurrentの第1の秘密シェア[Pcurrent,1]をコンピューティングシステムMPC1に提供する(206)。アプリケーション112はまた、ユーザプロファイルの第2の秘密シェア[Pcurrent,2]をコンピューティングシステムMPC2に提供する(208)。図3に関して以下で説明されるように、ユーザプライバシーとデータのセキュリティが保護されるように、ユーザプロファイルPcurrentの2つの秘密シェア[Pcurrent,1]および[Pcurrent,2]をMPCクラスタ130に提供するための様々な方法がある。
モデルがユーザによるデジタルコンポーネントのコンバージョンに基づいて訓練されることが望まれるいくつかの実装形態では、コンバージョンの発生がしばしばインプレッションまたはクリックから長い時間後に起こり得ることが考慮されてもよく、その場合、帯域幅、ストレージ、およびコンテンツプラットフォーム150による処理を最適化するために、他のタスクの実行にMPCクラスタ130を利用可能なままにするのが有利であり得る。そのような実装形態では、動作206および208は、別の代替的なプロセスによって置き換えられてもよく、代替的なプロセスにおいて、(i)アプリケーション112が、ユーザプロファイルとラベルの暗号化されたシェアをファーストパーティのクッキーとともに需要側プラットフォーム(DSP)に送信し、DSPは、一部の実装形態ではコンテンツプラットフォーム150の一部であり、他の実装形態ではコンテンツプラットフォーム150とは別個であることがあり、(ii)DSPが次いで、ファーストパーティのクッキーを使用して、ユーザプロファイルとラベルの暗号化されたシェアをコンバージョンに固有であり得る対話データ(たとえば、30日などのあらかじめ設定された期間内にコンバージョンが発生したかどうか)にマッピングし(すなわち、それと関連付け)、(iii)DSPが次いで、このマッピングをコンピューティングシステムMPC1またはMPC2に送信して、機械学習モデルを訓練する。この説明はコンバージョンという対話に注目しているが、このアーキテクチャおよび機能は、任意の他の対話(たとえば、インプレッションまたはクリック)、または対話の任意の組合せ(たとえば、インプレッション、クリック、および/またはコンバージョン)に拡張され得る。
コンピューティングシステムMPC1およびMPC2は、重心モデルを生成する(210)。コンピューティングシステムMPC1およびMPC2は、ユーザプロファイルをアップロードするようにクライアントデバイス110に要求したコンテンツプラットフォーム150またはデジタルコンポーネント提供者160の複数のユーザグループのために、重心モデルを生成することができる。新しい機械学習モデルがユーザプロファイルに基づいて生成されるたびに、データは訓練セッションと呼ばれ得る。コンピューティングシステムMPC1およびMPC2は、複数のクライアントデバイスから受信されるユーザプロファイルの秘密シェアに基づいて重心モデルを生成することができる。たとえば、コンピューティングシステムMPC1およびMPC2は、MPC技法を使用して、ユーザプロファイルの秘密シェアに基づいて重心モデルを生成することができる。一般に、ユーザグループのための重心モデルを生成することは、ユーザグループのメンバーであるユーザのユーザプロファイルの重心を計算することを含む。重心モデルを生成するための例示的なプロセスが、図4および図6において示され、以下で説明される。
MPCクラスタ130によって生成され維持される各重心モデルは、対応する固有の識別子を有し得る。これは、アプリケーション112が、モデル識別子を使用して重心モデルをクエリすることを可能にする。たとえば、重心モデルを生成する要求は、重心モデルのモデル識別子を含んでもよく、これは所有者(たとえば、コンテンツプラットフォーム150またはデジタルコンポーネント提供者160)によって割り当てられ得る。所有者は次いで、モデル識別子を使用して、重心モデルに対応するユーザグループにユーザを追加するかどうかを決定するように重心モデルにクエリせよとアプリケーション112に要求することができる。
アプリケーション112は、ユーザグループ更新要求をMPCクラスタ130に出す(212)。ユーザグループ更新要求は、ユーザの現在のユーザプロファイルPcurrentを含み得る。いくつかの実装形態では、アプリケーション112は、完全なユーザプロファイルPcurrentを各コンピューティングシステムMPC1およびMPC2に送信することができる。他の実装形態では、ユーザプライバシーを保護するために、アプリケーション112は、ユーザプロファイルPcurrentのそれぞれの部分または秘密シェアを各コンピューティングシステムMPC1およびMPC2に送信することができる。
ユーザグループ更新要求は、ユーザが重心モデルに対応するユーザグループに追加されるべきであるかどうかを決定するようにクエリされることになる1つまたは複数の重心モデルの各々のためのモデル識別子も含み得る。いくつかの実装形態では、アプリケーション112は、各重心モデルのために別々のユーザグループ更新要求を送信する。この例では、各ユーザグループ要求は、1つの重心モデルのモデル識別子を含む。
各ユーザグループ更新要求はまた、クエリのために、閾値の距離、たとえば最大の距離を含み得る。ユーザのユーザプロファイルがユーザグループに対する重心から閾値の距離以内にある場合、MPCクラスタ130は、ユーザを対応するユーザグループに追加するようにアプリケーション112に要求することができる。ユーザグループ更新要求を送信するための例示的なデータフォーマットおよび技法は、図5を参照して説明される。
MPCクラスタ130は、ユーザが1つまたは複数のユーザグループに追加されるべきであるかどうかを決定する(214)。一般に、これは、ユーザのユーザプロファイルが1つまたは複数のユーザグループの各々に対する重心から閾値の距離以内にあるかどうかを決定することを含み得る。コンピューティングシステムMPC1およびMPC2は、コンピューティングシステムMPC1とMPC2のどちらも、ユーザのプロファイルのいずれにも平文でアクセスできないように、またはユーザについて提案されるユーザグループ識別子に平文でアクセスできないように、セキュアMPCプロセスを実行して、ユーザが1つまたは複数のユーザグループに追加されるべきであるかどうかを決定することができる。ユーザのためのユーザグループを決定するための例示的なプロセスは、図5および図6に示され、以下で説明される。
MPCクラスタ130は、0個以上のユーザグループ識別子をアプリケーション112に提供する(216)。MPCクラスタ130は、ユーザが追加されるべき各ユーザグループのユーザグループ識別子を提供することができる。すなわち、MPCクラスタ130は、その重心からユーザのユーザプロファイルが閾値の距離以内にある各ユーザグループのユーザグループ識別子を提供することができる。ユーザプライバシーを保護するために、図5および図6を参照して以下で説明されるように、各コンピューティングシステムMPC1およびMPC2は、ユーザグループ識別子の一部またはユーザグループ識別子の秘密シェアを提供する。
アプリケーション112は、ユーザのためのユーザグループリストを更新する(218)。たとえば、アプリケーション112は、その重心から閾値の距離以内にユーザプロファイルがある各ユーザグループにユーザを追加することができる。すなわち、アプリケーション112は、MPCクラスタ130から受信された各ユーザグループ識別子を、ユーザのクライアントデバイス110において維持されているユーザグループリストに追加することができる。いくつかの実装形態では、アプリケーション112は、ユーザを各ユーザグループに追加するための許可をユーザに対して促すことができる。
アプリケーション112は、コンテンツに対する要求を送信する(220)。たとえば、アプリケーション112は、デジタルコンポーネントスロットを有する電子リソースをロードしたことに応答して、デジタルコンポーネントに対する要求をコンテンツプラットフォーム150に送信することができる。いくつかの実装形態では、要求は、ユーザをメンバーとして含むユーザグループの1つまたは複数のユーザグループ識別子を含み得る。たとえば、アプリケーション112は、ユーザグループリストから1つまたは複数のユーザグループ識別子を取得し、要求とともにユーザグループ識別子を提供することができる。いくつかの実装形態では、コンテンツプラットフォームが、ユーザグループ識別子を、ユーザ、アプリケーション112、および/または要求の受信元のクライアントデバイス112と関連付けることが可能になるのを防ぐための、技法が使用され得る。
コンテンツプラットフォーム150は、コンテンツをアプリケーション112に送信する(222)。たとえば、コンテンツプラットフォーム150は、ユーザグループ識別子に基づいてデジタルコンポーネントを選択し、デジタルコンポーネントをアプリケーション112に提供することができる。いくつかの実装形態では、コンテンツプラットフォーム150は、アプリケーション112またはデバイスオペレーティングシステムと連携して、アプリケーション112またはユーザデバイス110の外部にユーザグループ識別子を漏洩することなく、ユーザグループ識別子に基づいてデジタルコンポーネントを選択する。
アプリケーション112は、受信されたコンテンツを表示し、または別様に実装する(224)。たとえば、アプリケーション112は、電子リソースのデジタルコンポーネントスロットにおいて受信されたデジタルコンポーネントを表示することができる。
重心モデルのためのユーザプロファイルを生成するための例示的なプロセス
図3は、ユーザプロファイルを生成して、ユーザプロファイルをMPCクラスタに送信するための、例示的なプロセス300を示す流れ図である。プロセス300の動作は、たとえば、図1のクライアントデバイス110によって、たとえば、クライアントデバイス110上で実行されるアプリケーション112またはクライアントデバイス110のオペレーティングシステムによって実施され得る。プロセス300の動作はまた、非一時的であり得る1つまたは複数のコンピュータ可読媒体に記憶されている命令として実施されてもよく、1つまたは複数のデータ処理装置による命令の実行は、1つまたは複数のデータ処理装置にプロセス300の動作を実行させることができる。
ユーザのクライアントデバイス110上で実行されるアプリケーション112は、イベントのためのデータを受信する(302)。イベントは、たとえば、クライアントデバイス110における電子リソースの提示、クライアントデバイス110におけるデジタルコンポーネントの提示、クライアントデバイス110における電子リソースもしくはデジタルコンポーネントとのユーザ対話、またはデジタルコンポーネントの変換、または、提示される電子リソースもしくはデジタルコンポーネントとのユーザ対話もしくは変換の欠如であり得る。ユーザによるユーザ対話のいくつかの例は、(a)特定のアイテムのリンクをクリックすること、(b)たとえばアイテムを仮想カートに追加する、またはアイテムを購入することによって、特定のアイテムに対するコンバージョンを完了すること、(c)ある設定された長さの時間より長く特定のアイテムを見ることのうちの1つまたは複数などの、ウェブページに提示される特定のアイテムとの対話であり得る。特定のユーザ対話の欠如のいくつかの例は、ユーザが一部の対話を実行するが後続の対話を欠いていること、たとえば、ユーザがデジタルコンポーネントを見るがクリックしないこと、デジタルコンポーネントをクリックするがコンバージョンを行わないこと(たとえば、クリックして決済ウェブページに進むがアイテムを購入しないこと)などであり得る。コンバージョンは、異なる実装形態では異なるように定義され得る。たとえば、いくつかの実装形態では、コンバージョンは、ユーザが決済ページに進むことであり得る。ある実装形態では、コンバージョンは、ユーザがアイテムを購入しようとすることであり得る。他の実装形態では、コンバージョンは、ユーザがアイテムを購入することであり得る。イベントが発生すると、コンテンツプラットフォーム150またはデジタルコンポーネント提供者160は、ユーザのユーザプロファイルを生成する際に使用するために、イベントに関するデータをアプリケーション112に提供することができる。
アプリケーション112は、各コンテンツプラットフォーム150またはデジタルコンポーネント提供者160のために異なるユーザプロファイルを生成することができる。すなわち、ユーザの、および特定のコンテンツプラットフォーム150のためのユーザプロファイルは、特定のコンテンツプラットフォーム150から受信されたイベントデータのみを含み得る。このことは、他のコンテンツプラットフォームのイベントに関連するデータをコンテンツプラットフォームと共有しないことによって、ユーザのプライバシーを守る。いくつかの実装形態では、アプリケーション112は、コンテンツプラットフォーム150の要求ごとに、コンテンツプラットフォーム150によって所有される各重心モデルのために異なるユーザプロファイルを生成し得る。設計目標に基づいて、異なる重心モデルは異なる訓練データを必要とし得る。たとえば、ユーザをユーザグループに追加するかどうかを決定するために、第1のモデルが使用され得る。ユーザがデジタルコンポーネントと対話する(たとえば閲覧、クリックする、および/またはコンバージョンを行う)かどうかを予測するために、第2のモデルが使用され得る。この例では、第2のモデルのためのユーザプロファイルは、第1のモデルのためのユーザプロファイルが有しない追加のデータ、たとえばユーザがデジタルコンポーネントと対話したかどうかを含み得る。
コンテンツプラットフォーム150は、プロファイル更新トークンMupdateの形式でイベントデータを送信することができる。プロファイル更新トークンMupdateは、以下のTable1(表1)において示され説明される以下の項目を有する。
モデル識別子は、ユーザグループの推測を訓練するために、またはそれを行うためにユーザプロプロファイルが使用される、重心モデルを特定する。プロファイル記録は、イベントに固有のデータ、たとえば、イベントのタイプ、電子リソースもしくはデジタルコンポーネント、イベントが発生した時間、および/または、コンテンツプラットフォーム150(またはデジタルコンポーネント提供者160)が重心モデルを訓練してユーザグループの推測を行う際に使用することを望む他の適切なイベントデータを含む、n次元特徴ベクトルである。この動作は、アプリケーション112に、プロファイル記録に基づいてユーザプロファイルを更新するように命令する。デジタル署名は、コンテンツプラットフォーム150の秘密鍵を使用して、7つの項目に基づいて生成される。
いくつかの実装形態では、送信の間に更新トークンMupdateを保護するために、コンテンツプラットフォーム150は、更新トークンMupdateをアプリケーション112に送信する前に更新トークンMupdateを暗号化する。たとえば、コンテンツプラットフォーム150は、アプリケーションの公開鍵、たとえばPubKeyEnc(Mupdate, application_public_key)を使用して、更新トークンMupdateを暗号化することができる。
いくつかの実装形態では、コンテンツプラットフォーム150は、プロファイル更新トークンMupdateの形式でイベントデータまたは更新要求を符号化することなく、イベントデータをアプリケーション112に送信することができる。たとえば、アプリケーション112の内部で実行されるコンテンツプラットフォーム150に由来するスクリプトは、スクリプトAPIを介してイベントデータおよび更新要求をアプリケーション112に直接送信することができ、アプリケーション112は、World Wide Web Consortium (W3C)オリジンベースのセキュリティモデルおよび/または(Hypertext Transfer Protocol Secure)HTTPSに依拠して、改竄もしくは漏洩、または中間者攻撃から、イベントデータおよび更新要求を保護する。
アプリケーション112は、イベントのためのデータを記憶する(304)。イベントデータが暗号化される場合、アプリケーション112は、イベントデータを暗号化するために使用される公開鍵に対応する秘密鍵を使用して、イベントデータを復号することができる。イベントデータが更新トークンMupdateの形式で送信される場合、アプリケーション112は、イベントデータを記憶する前に更新トークンMupdateを検証することができる。アプリケーション112は、(i)デジタル署名を生成するために使用されたコンテンツプラットフォーム150の秘密鍵に対応するコンテンツプラットフォーム150の公開鍵を使用してデジタル署名を検証し、(ii)トークン作成タイムスタンプが古くないこと、たとえば、タイムスタンプによって示される時間が、検証が行われる現在の時間から閾値の長さの時間以内にあることを確実にすることによって、更新トークンMupdateを検証することができる。更新トークンMupdateが有効である場合、アプリケーション112は、たとえばn次元のプロファイル記録を記憶することによって、イベントデータを記憶することができる。いずれの検証も失敗する場合、アプリケーション112は、たとえば、イベントデータを記憶しないことによって、更新要求を無視し得る。
各重心モデルに対して、たとえば各々の固有のモデル識別子に対して、アプリケーション112は、そのモデルのためのイベントデータを記憶することができる。たとえば、アプリケーション112は、各々の一意なモデル識別子に対して、n次元の特徴ベクトル(たとえば、更新トークンのプロファイル記録)のセットを含むデータ構造を維持し、各特徴ベクトルに対して、期限切れ時間を維持することができる。モデル識別子のための例示的なデータ構造が、以下のTable2(表2)に示されている。
有効な更新トークンMupdateを受信すると、アプリケーション112は、特徴ベクトルおよび更新トークンMupdateの期限切れ時間をデータ構造に追加することによって、更新トークンMupdateに含まれるモデル識別子のためのデータ構造を更新することができる。定期的に、アプリケーション112は、データ構造から期限切れの特徴ベクトルを排除し、記憶サイズを減らすことができる。Table2(表2)の期限切れ時間は、Table1(表1)に示される更新トークンMupdateにおける期限切れ時間と同じである。
アプリケーション112は、ユーザプロファイルを生成するかどうかを決定する(306)。たとえば、アプリケーション112は、コンテンツプラットフォーム150からの要求に応答して、特定の重心モデルのためのユーザプロファイルを生成し得る。この要求は、ユーザプロファイルを生成し、ユーザプロファイルをMPCクラスタ130にアップロードするためのものであり得る。ユーザプロファイルを生成してアップロードする要求のセキュリティを確保するために、コンテンツプラットフォーム150は、アップロードトークンMuploadをアプリケーション112に送信することができる。
アップロードトークンMuploadは、更新トークンMupdateと同様の構造を有し得るが、動作が異なり得る(たとえば、「ユーザプロファイルを蓄積する」ではなく「サーバを更新する」)。アップロードトークンMuploadはまた、動作遅延のための追加の項目を含み得る。動作遅延は、アプリケーション112がさらなるイベントデータ、たとえばさらなる特徴ベクトルを蓄積する間、ユーザプロファイルの秘密シェアの計算とアップロードを遅らせるようにアプリケーション112に命令することができる。これにより、何らかの重要なイベント、たとえばユーザグループへの加入の直前および直後のユーザイベントデータを、重心モデルが獲得することが可能になる。動作遅延は、遅延期間を指定することができる。この例では、デジタル署名は、コンテンツプラットフォームの秘密鍵を使用して、Table1(表1)の他の7つの項目および動作遅延に基づいて生成され得る。コンテンツプラットフォーム150は、送信の間にアップロードトークンMuploadを保護するために、アプリケーションの公開鍵を使用して、更新トークンMupdateと同様の方式でアップロードトークンMuploadを暗号化することができ、たとえば、PubKeyEnc(Mupload,application_public_key)である。
アプリケーション112は、アップロードトークンMuploadを受信し、アップロードトークンMuploadが暗号化されている場合はそれを復号し、アップロードトークンMuploadを検証することができる。この検証は、更新トークンMupdateが検証される方法と似ていてもよい。アプリケーション112は、(i)デジタル署名を生成するために使用されたコンテンツプラットフォーム150の秘密鍵に対応するコンテンツプラットフォーム150の公開鍵を使用してデジタル署名を検証し、(ii)トークン作成タイムスタンプが古くないこと、たとえば、タイムスタンプによって示される時間が、検証が行われる現在の時間から閾値の長さの時間以内にあることを確実にすることによって、アップロードトークンMuploadを検証することができる。アップロードトークンMuploadが有効である場合、アプリケーション112はユーザプロファイルを生成することができる。いずれの検証も失敗する場合、アプリケーション112は、たとえばユーザプロファイルを生成しないことによって、アップロード要求を無視することができる。
いくつかの実装形態では、コンテンツプラットフォーム150は、プロファイルアプロードトークンMuploadの形式でアップロード要求を符号化することなく、ユーザプロファイルをアップロードするようにアプリケーション112に要求することができる。たとえば、アプリケーション112の内部で実行されるコンテンツプラットフォーム150に由来するスクリプトは、スクリプトAPIを介してアップロード要求をアプリケーション112に直接送信することができ、アプリケーション112は、W3Cオリジンベースのセキュリティモデルおよび/またはHTTPSに依拠して、改竄もしくは漏洩、または中間者攻撃から、アップロード要求を保護する。
ユーザプロファイルを生成しないという決定が行われる場合、プロセス302は動作302に戻り、コンテンツプラットフォーム150からの追加のイベントデータを待機する。ユーザプロファイルを生成するという決定が行われる場合、アプリケーション112はユーザプロファイルを生成する(308)。
アプリケーション112は、記憶されているイベントデータ、たとえば、Table2(表2)に示されるデータ構造に記憶されているデータに基づいて、ユーザプロファイルを生成することができる。アプリケーション112は、要求に含まれるモデル識別子、たとえば、アップロードトークンMuploadの項目1のコンテンツプラットフォームeTLD+1ドメインおよび項目2のモデル識別子に基づいて、適切なデータ構造にアクセスすることができる。
アプリケーション112は、まだ期限切れになっていない学習期間におけるデータ構造の中のn次元特徴ベクトルを集約することによって、ユーザプロファイルを計算することができる。たとえば、ユーザプロファイルは、まだ期限切れになっていない学習期間におけるデータ構造の中のn次元特徴ベクトルの平均であり得る。結果は、プロファイル空間においてユーザを表すn次元特徴ベクトルである。任意選択で、アプリケーション112は、たとえばL2正規化を使用して、n次元特徴ベクトルを単位長に正規化してもよい。コンテンツプラットフォーム150は、任意選択の学習期間を指定してもよい。
いくつかの実装形態では、ユーザプロファイルを計算するために、減衰率が使用され得る。重心モデルを訓練するためにMPCクラスタ130を使用する多くのコンテンツプラットフォーム150がある可能性があり、各コンテンツプラットフォーム150が複数の重心モデルを有する可能性があるので、ユーザ特徴ベクトルデータを記憶すると、データストレージの要件が非常に大きくなることがある。減衰技法を使用すると、機械学習モデルを訓練するためのユーザプロファイルを生成する目的で各クライアントデバイス110に記憶されるデータの量を大きく減らすことができる。
所与の重心モデルに対して、k個の特徴ベクトル{F1,F2,...Fk}があり、その各々がn次元ベクトルおよびその対応する古さ(record_age_in_secondsi)であると仮定する。アプリケーション112は、以下の関係1を使用してユーザプロファイルを計算することができる。
関係1:
この関係において、パラメータrecord_age_in_secondsiは、クライアントデバイス110にプロファイル記録が記憶されている秒単位の時間の長さであり、パラメータdecay_rate_in_secondsは、秒単位のプロファイル記録の減衰率(たとえば、更新トークンMupdateの項目6において受信される)である。このようにすると、より新しい特徴ベクトルはより重みが大きくなる。これはまた、一定のストレージ容量のもとで、アプリケーション112が特徴ベクトルを記憶するのを避け、プロファイル記録のみを記憶することを可能にする。アプリケーション112は、各モデル識別子に対して複数の個々の特徴ベクトルを記憶するのではなく、各モデル識別子のためのn次元ベクトルPおよびタイムスタンプuser_profile_timeを記憶するだけでよい。
この関係において、パラメータrecord_age_in_secondsiは、プロファイル記録がクライアントデバイス110に記憶されている秒単位の時間の長さであり、パラメータdecay_rate_in_secondsは、秒単位のプロファイル記録の減衰率(たとえば、更新トークンMupdateの項目6において受信される)である。このようにして、より新しい特徴ベクトルがより大きな重みを与えられる。これはまた、アプリケーション112が特徴ベクトルを記憶するのを避け、一定の記憶容量を用いてプロファイル記録のみを記憶することを可能にする。アプリケーション112は、各モデル識別子に対して複数の個々の特徴ベクトルを記憶するのではなく、各モデル識別子に対してn次元ベクトルPおよびタイムスタンプuser_profile_timeを記憶するだけでよい。
n次元ベクトルのユーザプロファイルPおよびタイムスタンプを初期化するために、アプリケーションは、各次元の値が0であるようなn次元のベクトルにベクトルPを設定し、user_profile_timeをエポックに設定することができる。任意の時間において新しい特徴ベクトルFxを用いてユーザプロファイルPを更新するために、アプリケーション112は以下の関係2を使用することができる。
関係2:
アプリケーション112はまた、関係2を用いてユーザプロファイルを更新するとき、ユーザプロファイル時間を現在の時間(current_time)に更新することができる。アプリケーション112が上記の減衰率アルゴリズムを用いてユーザプロファイルを計算する場合、動作304は省略されることに留意されたい。
アプリケーション112は、ユーザプロファイルの秘密シェアを生成する(310)。アプリケーション112は、疑似ランダム関数を使用して、ユーザプロファイルPcurrent(たとえば、n次元ベクトルPcurrent)を秘密シェアへと分割することができる。すなわち、アプリケーション112は、疑似ランダム関数PRF(Pi)を使用して、ユーザプロファイルPcurrentの2つの秘密シェア{[Pcurrent,1],[Pcurrent,2]}を生成することができる。厳密な分割は、アプリケーション112によって使用される秘密シェアアルゴリズムおよび暗号ライブラリに依存し得る。いくつかの実装形態では、アプリケーションはShamirの秘密分散方式を使用する。
いくつかの実装形態では、アプリケーションは、加算秘密分散方式を使用し、すなわち、アプリケーション112は、ランダム(または疑似ランダム)n次元ベクトルnonceを生成する。この例では、アプリケーションは、Pcurrent+nonceである第1の秘密シェアおよびPcurrent-nonceである第2の秘密シェアを生成することができる。アプリケーション112は次いで、n次元ベクトルnonceを削除することができる。
悪意のあるアプリケーション112がユーザプロファイルの秘密シェアをアップロードするためにアップロードAPIを悪用するのを阻止するために、MPCクラスタ130は、秘密シェアに署名するように信用トークン発行者に要求することができる。ユーザグループ識別子Liによって表記される、m個のユーザグループの各々、ならびにMPCクラスタ130の中のコンピューティングシステムMPC1およびMPC2の各々に対して、アプリケーション112は、署名換金記録(SRR)を取得するために信用トークン発行者との信用トークン換金プロセスを開始することができる。m個のユーザグループは、(i)アップロードトークンMuploadを送信したコンテンツプラットフォーム150(またはデジタルコンポーネント提供者160)によって管理され、(ii)ユーザをメンバーとして含む、ユーザグループ、たとえば、アプリケーション112によって維持されるユーザグループリストにおいて特定されるユーザグループであり得る。
信用トークン換金プロセスにおいて、アプリケーション112は、アプリケーション112および/またはクライアントデバイス110が信用されると見なされることに基づいて、アプリケーション112に以前に出された信用トークンを換金することができる。これは、信用トークンおよび情報(たとえば、コンピューティングシステムMPC1またはMPC2の結合とeTLD+1)を、信用トークンを換金する要求とともに信用トークン発行者に送信することを含み得る。信用トークン発行者は、SRRをアプリケーション112に提供することによって応答することができる。アプリケーション112は、各SRRのために信用トークンを換金することができる。SRRの例示的なフォーマットが、以下のTable3(表3)に示される。
アプリケーション112は、結合として、モデル識別子のメッセージ認証コード(たとえば、ハッシュベースメッセージ認証コード(HMAC))、SRRが生成されたユーザプロファイルの秘密シェア、ユーザグループLi、およびアプリケーション112の公開鍵(application_public_key)を計算することができる。たとえば、結合は、HMAC(model_id,share,Li,application_public_key)と表され得る。所与のユーザプロファイルおよび所与の重心モデルに対して、アプリケーション112は、ユーザプロファイルPcurrentの各秘密シェアに対して1回ずつ、したがって、各コンピューティングシステムMPC1およびMPC2に対して1回ずつ、このコードを2回計算することができる。たとえば、コンピューティングシステムMPC1に対するSRRのためのパラメータ「share」は[Pcurrent,1]であってもよく、コンピューティングシステムMPC2に対するSRRのためのパラメータ「share」は[Pcurrent,2]であってもよい。
信用トークン発行者は、タイムスタンプおよびデジタル署名を生成することができる。信用トークン発行者は、信用トークン発行者の秘密鍵を使用してデジタル署名を生成することができる。これは、SRRの受信者が、秘密鍵に対応する公開鍵を使用して署名を検証することを可能にする。
ユーザグループ識別子Liによって表記されるm個のユーザグループの各々、ならびにMPCクラスタ130の中のコンピューティングシステムMPC1およびMPC2の各々に対して、アプリケーション112は次いで、MPCクラスタ130への送信のためにユーザプロファイル更新トークンMprofileupdateを作成することができる。ユーザプロファイル更新トークンMprofileupdateの例示的なフォーマットが、以下のTable4(表4)に示される。
アプリケーション112は、タイムスタンプおよびデジタル署名を生成することができる。アプリケーション112は、項目4における公開鍵に対応するアプリケーション112の公開鍵を使用して、デジタル署名を生成することができる。これは、ユーザプロファイル更新トークンMprofileupdateの受信者が、秘密鍵に対応する公開鍵を使用して署名を検証することを可能にする。
危殆化されたアプリケーション112は、ユーザプロファイル更新トークンMprofileupdateを使用してコンテンツプラットフォーム150の要求ごとに行動する代わりに、ユーザプロファイル更新動作を自分で開始してもよい。そのような状況をMPCクラスタ130が検出するのを可能にするために、アプリケーション112は任意選択で、ユーザプロファイル更新トークンMprofileupdateにおいてコンテンツプラットフォーム150から受信される更新トークンMupdateを含み得る。
アプリケーション112は、ユーザのユーザプロファイルを使用してMPCクラスタ130におけるモデルのためのユーザプロファイルを更新する要求を送信する(312)。各要求は、ユーザプロファイルの秘密シェアを含み得る。たとえば、アプリケーション112は、ユーザプロファイルPcurrentの第1の秘密シェア[Pcurrent,1]を有するユーザプロファイル更新トークンMprofileupdateをコンピューティングシステムMPC1に送信し、ユーザプロファイルPcurrentの第2の秘密シェア[Pcurrent,2]を有するユーザプロファイル更新トークンMprofileupdateをコンピューティングシステムMPC2に送信することができる。アプリケーション112は、ユーザプロファイル更新トークンが作成された各モデル識別子に対してこの動作を実行することができる。
このプロセスでは、MPCクラスタ130の中の2つのコンピューティングシステムMPC1およびMPC2の各々に対して、アプリケーション112は、m個のユーザグループの各々に対して1つずつ、ユーザプロファイルを更新するm個の要求を送信する。MPCクラスタ130の中の危殆化されたコンピューティングシステムは、それらのm個の要求を相関付けることが可能であることがある。そのような攻撃は、危殆化されたコンピューティングシステムが、アプリケーション112(およびそのユーザ)が複数のユーザグループおよびそれらのグループの識別子に属し得ることを知るのを可能にすることがある。
このリスクを軽減するために、MPCクラスタ130を活用することができる。コンピューティングシステムMPC1に秘密シェアをアップロードするために、アプリケーション112は、コンピューティングシステムMPC1の公開鍵を用いて個別に暗号化されたコンピューティングシステムMPC1用のユーザプロファイルの第1の秘密シェア[Pcurrent,1]を伴うすべてのユーザプロファイル更新トークンとともに、単一の要求をコンピューティングシステムMPC2に送信することができる。この単一の要求は、PubKeyEnc(Mprofileupdate_1,MPC1)、PubKeyEnc(Mprofileupdate_2,MPC1)、...PubKeyEnc(Mprofileupdate_m,MPC1)の形式で暗号化された結果のセットを含むことができ、PubKeyEncは確率非対称暗号化アルゴリズムを表し、MPC1はコンピューティングシステムMPC1の非対称公開鍵を表す。
PubKeyEncの確率的な性質は、セマンティックセキュリティをもたらす。セマンティックセキュア方式は、無視できる情報しか暗号化された結果から抽出できない方式である。コンピューティングシステムMPC1との共謀がなければ、コンピューティングシステムMPC2は、暗号化されたトークンのリストからどのような情報も推測することができない。コンピューティングシステムMPC2は、トークンのリストを破壊し、ユーザプロファイル更新トークンMprofileupdateごとに1つずつ、m個の要求をコンピューティングシステムMPC1に送信することができる。コンピューティングシステムMPC2は、連続する要求間でランダムなまたは疑似ランダムな遅延を使用することができる。別の例では、コンピューティングシステムMPC2は、同じアプリケーション112からの要求を相関付けるのを防ぐために、複数のクライアントデバイス110上で実行される複数のアプリケーション112からの複数の要求をコンピューティングシステムMPC1にバッチアップロードすることができる。
アプリケーション112は、同様の技法を使用して、コンピューティングシステムMPC2のための第2の秘密シェアをアップロードすることができる。すなわち、アプリケーション112は、コンピューティングシステムMPC2の公開鍵を用いて個別に暗号化されたコンピューティングシステムMPC2用のユーザプロファイルの第2の秘密シェア[Pcurrent,2]を伴うすべてのユーザプロファイル更新トークンとともに、単一の要求をコンピューティングシステムMPC1に送信することができる。この単一の要求は、PubKeyEnc(Mprofileupdate_1,MPC2)、PubKeyEnc(Mprofileupdate_2,MPC2)、...PubKeyEnc(Mprofileupdate_m,MPC2)の形式で暗号化された結果のセットを含むことができ、MPC2はコンピューティングシステムMPC2の非対称公開鍵を表す。コンピューティングシステムMPC1は、トークンのリストを破壊し、たとえば上で説明されたような遅延またはバッチアップロードを使用して、ユーザプロファイル更新トークンMprofileupdateごとに1つずつ、m個の要求をコンピューティングシステムMPC2に送信することができる。コンピューティングシステムMPC1およびMPC2によって受信され得る多数の要求を考慮すると、コンピューティングシステムMPC1またはMPC2のいずれかが、これらの技法を使用して個別のクライアントデバイス110とトークンを相関付けることは、不可能ではないとしても困難である。
コンピューティングシステムMPC1およびMPC2は、ユーザプロファイルを更新する各々の受信された要求を検証することができる。jがコンピューティングシステムに応じて1または2であるものとして、暗号化された結果PubKeyEnc(Mprofileupdate_i,MPCj)を有する要求を受信すると、コンピューティングシステムMPCjは、ユーザプロファイル更新トークンMprofileupdate_iを平文で復元するために、暗号化された結果を復号する。コンピューティングシステムMPCjは、ユーザプロファイル更新トークンMprofileupdate_iの妥当性を確認する。そうするために、コンピューティングシステムMPCjは、SRRの項目1.4における信用トークン発行者ドメインからフェッチされた公開鍵を使用して、SRRの項目1.5におけるデジタル署名(Table3(表3)参照)を検証する。コンピューティングシステムMPCjは、MPCクラスタ130にMprofileupdate_iを送信したアプリケーション112の公開鍵を使用して、ユーザプロファイル更新トークンMprofileupdate_iの項目7におけるデジタル署名(Table4(表4)参照)も検証することができる。
コンピューティングシステムMPCjはまた、たとえば、検証が実行されている現在の時間から閾値の長さの時間内にタイムスタンプがあることを確実にすることによって、SRRの項目1.3の署名タイムスタンプを古さについて検証することができる。コンピューティングシステムMPCjはまた、SRRの項目1.2における発行者起源が現在のコンピューティングシステムMPCjの識別情報と一致することを検証することができる。コンピューティングシステムMPCjはまた、SRRの項目1.1における結合の値が、ユーザプロファイル更新トークンMprofileupdate_iにおいて項目1~4から計算されたHMAC(model_id,share,Li,application_public_key)と一致することを検証することができる。コンピューティングシステムMPCはまた、たとえば、検証が実行されている現在の時間から閾値の長さの時間内にトークン作成タイムスタンプがあることを確実にすることによって、ユーザプロファイル更新トークンMprofileupdate_iの項目5におけるトークン作成タイムスタンプが古くないことを検証することができる。コンピューティングシステムMPCjはまた、たとえば、同じトークン作成タイムスタンプを有する複数のユーザプロファイル更新トークンに基づいて、潜在的な反射攻撃を検出するためにトークン作成タイムスタンプを使用することができる。これらの検証のいずれもが失敗する場合、コンピューティングシステムMPCjは要求を無視することができる。
各コンピューティングシステムMPC1およびMPC2は、各重心モデルのためのデータを含むテーブル(または、他の適切なデータ構造)を維持することができる。たとえば、テーブルは以下のTable5(表5)の形式であり得る。
重心モデルの行は、モデル識別子(model_id)、モデルに含まれるユーザグループのユーザグループ識別子(Li)、重心モデルのために受信されるユーザプロファイルのすべてのシェアの合計、および、重心モデルのためのユーザプロファイルの秘密シェアを出し、重心モデルのためのすべてのシェアの合計にその秘密シェアが含まれるような、ユニークアプリケーション112の数(たとえば、ユニーククライアントデバイスの数)を含む。すべてのシェアの合計は、ユーザプロファイルのn次元ベクトルに対応するn次元ベクトルである。
コンピューティングシステムMPCjが以前に決して受信しなかったモデル/ユーザグループのペア{model_id,Li}が受信されると、コンピューティングシステムMPCjは、重心モデルのためのすべてのシェアの合計を0ベクトルに初期化し、アプリケーションの数を0に初期化することができる。特定のモデル/ユーザグループのペアを含む重心モデルのためのユーザプロファイルを更新する有効な要求を処理するために、コンピューティングシステムMPCjは、テーブルの中の重心モデル/ユーザグループのペアのための行を見つけ、重心モデル/ユーザグループのペアのためにすべてのシェアの合計およびアプリケーションの数を更新することができる。たとえば、コンピューティングシステムMPCjは、ユーザプロファイルの受信された秘密シェアを重心モデル/ユーザグループのペアのためのすべてのシェアの合計に追加し、アプリケーションの数を1だけインクリメントすることができる。
重心モデルを生成して使用するための例示的なプロセス
図4は、重心モデルを生成するための例示的なプロセス400を示す流れ図である。プロセス400の動作は、たとえば図1のMPCクラスタ130によって実施され得る。プロセス400の動作は、非一時的であり得る1つまたは複数のコンピュータ可読媒体に記憶される命令として実施されてもよく、1つまたは複数のデータ処理装置による命令の実行は、1つまたは複数のデータ処理装置にプロセス400の動作を実行させることができる。プロセス400は複数の重心モデルを生成することに関して説明されるが、プロセス400はまた、単一のユーザグループのために単一の重心モデルを生成するために使用されてもよい。上で説明されたように、重心を計算するためのプロセスはまた、個々のユーザプロファイルではなくユーザグループに基づくk-NNまたは他の機械学習モデルのための前処理段階において使用されてもよい。
各コンピューティングシステムMPC1およびMPC2は、ユーザプロファイルデータのテーブルを取得する(402)。たとえば、テーブルは、上のTable5(表5)の形式であり得る。コンピューティングシステムMPC1は、各モデル識別子およびユーザグループのペアに対して、モデル識別子およびユーザグループIDによって、重心モデル識別子に含まれるユーザグループのためのアプリケーション112から受信される第1の秘密シェア[Pcurrent,1]の合計を含む、テーブルを取得することができる。同様に、コンピューティングシステムMPC2は、各モデル識別子およびユーザグループのペアに対して、モデル識別子およびユーザグループIDによって、重心モデル識別子に含まれるユーザグループのためのアプリケーション112から受信される第2の秘密シェア[Pcurrent,2]の合計を含む、テーブルを取得することができる。
各コンピューティングシステムMPC1およびMPC2は、各モデル識別子に対してユーザグループサイズ閾値を課す(404)。たとえば、各コンピューティングシステムMPC1およびMPC2は、そのテーブルの各行にサイズ閾値を課すことができる。ユーザグループサイズ閾値を課すために、各コンピューティングシステムMPC1およびMPC2は、あるモデル識別子のためのアプリケーションの数があらかじめ定められたサイズ閾値を超えるかどうかを決定することができる。
コンピューティングシステムMPC1およびMPC2は、サイズ閾値を満たすテーブルの行(たとえば、各モデル識別子/ユーザグループIDのペアのための情報)を互いに通知する(406)。たとえば、コンピューティングシステムMPC1は、コンピューティングシステムMPC2に、モデル識別子、ユーザグループ識別子、およびアプリケーションの数がサイズ閾値を超えるような各行のアプリケーションの数を送信することができる。加えて、コンピューティングシステムMPC1は、コンピューティングシステムMPC2に、これらの行の各々に対するシェア合計ベクトル(sum_of_shares1)の第2の半分を送信することができる。水平区分戦略に基づくsum_of_shares1の第2の半分のみの送信が、以下で論じられる。
同様に、コンピューティングシステムMPC2は、コンピューティングシステムMPC1に、モデル識別子、ユーザグループ識別子、およびアプリケーションの数がサイズ閾値を超えるような各行のアプリケーションの数を送信することができる。加えて、コンピューティングシステムMPC2は、コンピューティングシステムMPC1に、これらの行の各々に対するシェア合計ベクトル(sum_of_shares2)の第1の半分を送信することができる。
コンピューティングシステムMPC1は、アプリケーションの数がサイズ閾値を超えるようなそのテーブルの行を、コンピューティングシステムMPC2から受信された行と照合する。たとえば、コンピューティングシステムMPC1は、行のモデル識別子および/またはユーザグループ識別子を使用して、同じモデルおよびユーザグループのためのものである対応する行を照合することができる。同様に、コンピューティングシステムMPC2は、アプリケーションの数がサイズ閾値を超えるようなそのテーブルの行を、コンピューティングシステムMPC1から受信された行と照合する。たとえば、コンピューティングシステムMPC2は、行のモデル識別子および/またはユーザグループ識別子を使用して、同じモデルおよびユーザグループのためのものである対応する行を照合することができる。コンピューティングシステムMPC1における表形式でのこのサイズ閾値の適用およびクロス通知の例示的な結果が、以下のTable6(表6)に示される。
同様に、コンピューティングシステムMPC2における表形式でのサイズ閾値の適用およびクロス通知の例示的な結果が、以下のTable7(表7)に示される。
各行に対して、理想的な状況では、「MPC1からのアプリケーションの数」および「MPC2からのアプリケーションの数」の値は、両方が所与のモード識別子に対して存在する場合、同じであるはずである。処理の遅延により、2つの値にはわずかな差があることがある。両方の値が存在し、2つの値が大きく異なる場合、または、値の1つがサイズ閾値を超えない場合、サイズ閾値を超えない値を提供したコンピューティングシステムは、危殆化されている可能性がある。「MPC1からのアプリケーションの数」と「MPC2からのアプリケーションの数」の値が近接閾値を満たし(たとえば、互いの差が閾値以内であり)両方がサイズ閾値を超えるような行に対して、コンピューティングシステムはその重心を計算することができる。
コンピューティングシステムMPC1およびMPC2は、重心モデルのための重心を計算する(408)。コンピューティングシステムMPC1は、近接性(たとえば、差が閾値以内であること)およびサイズ閾値を満たす、行の中のユーザグループの重心ベクトルの第1の半分を計算することができる。コンピューティングシステムMPC1は、以下の関係3を使用して、(たとえば、ある行のための)モデル識別子およびユーザグループの重心を計算することができる。
関係3:
同様に、コンピューティングシステムMPC2は、以下の関係4を使用して、(たとえば、ある行のための)モデル識別子およびユーザグループの重心を計算することができる。
ユーザグループの重心は、一般にプライバシー上取扱いに注意を要するものではなく、悪意のあるアプリケーション112、コンテンツプラットフォーム150、またはMPCクラスタ130のコンピューティングシステムMPC1およびMPC2がユーザプロファイルを盗むことを可能にするように容易に操作できるものではない。
このプロセスの終わりにおいて、コンピューティングシステムMPC1は、リストサイズ閾値を超えるすべてのリストに対する重心の第1の半分を有する。このプロセスの結果の例が、以下のTable8(表8)に表形式で示される。コンピューティングシステムMPC2は、各モデル識別子およびユーザグループ識別子に対する重心ベクトルの第2の半分について同じデータを有する。ユーザグループのための訓練された重心モデルは、これらのユーザグループの各々のための重心の第1の半分を含む第1の重心モデル、および各ユーザグループのための重心の第2の半分を含む第2の重心モデルを含み得る。
図5は、重心モデルを使用してユーザをユーザグループに追加するための例示的なプロセス500を示すスイムレーン図である。プロセス500の動作は、たとえば、図1のMPCクラスタ130およびクライアントデバイス110、たとえばクライアントデバイス110上で実行されるアプリケーション112によって実施され得る。プロセス500の動作はまた、非一時的であり得る1つまたは複数のコンピュータ可読媒体に記憶される命令として実施されてもよく、1つまたは複数のデータ処理装置による命令の実行は、1つまたは複数のデータ処理装置にプロセス500の動作を実行させることができる。
クライアントデバイス110上で実行されるアプリケーション112は、コンテンツプラットフォーム150またはデジタルコンポーネント提供者160からの要求に応答して、ユーザの提案されるユーザグループについてMPCクラスタ130にクエリすることができる。たとえば、この要求は、要求者のために生成され要求者により所有される重心モデルを使用して、要求者により所有されるユーザグループにユーザが追加されるべきであるかどうかを決定せよというものであり得る。たとえば、コンテンツプラットフォーム150は多くのユーザグループを管理することができ、MPCクラスタ130は、ユーザがそれらのユーザグループに追加されるべきであるかどうかを決定するように、ユーザグループのための1つまたは複数の重心モデルを訓練して使用することができる。
重心モデルにクエリするようにアプリケーションに要求するために、要求者は、ダウンロードグループトークンMdownloadをクライアントデバイス110に送信することができる。トークンMdownloadは、以下のTable9(表9)において示され説明される以下の項目を有し得る。
いくつかの実装形態では、コンテンツプラットフォーム150は、アプリケーション112の公開鍵を使用して、ダウンロードグループトークンMdownloadを暗号化することができる。コンテンツプラットフォーム150は次いで、自身のまたはSSPのスクリプトを介してユーザグループ識別子をフェッチするために、アプリケーションのAPIを呼び出すことができる。アプリケーション112は、ユーザプロファイル更新トークンMprofileupdateを復号して妥当性を確認するのと同じ方法で、ダウンロードグループトークンMdownloadを復号して妥当性を確認することができる。
model_id、ユーザプロファイルP、および閾値距離dの所与のタプルに対して、アプリケーション112は、|P-Centroid(model_id,Li)|<dであるすべてのユーザグループ識別子Liをフェッチすべきである。この例では、関数Centroid(model_id,Li)は、Table8(表8)のmodel_idおよびLiでマークされる行から、重心の列の値を返す。
コンピューティングシステムMPC1またはMPC2のいずれもがユーザプロファイルPを完全に知るのを防ぐために、アプリケーション112はユーザのユーザプロファイルPを複数の部分へと分割する(502)。アプリケーション112は、MPCクラスタ130の各コンピューティングシステムのためのそれぞれの部分へとユーザプロファイルを分けることができる。この例では、アプリケーション112は、コンピューティングシステムMPC1のための第1の部分およびコンピューティングシステムMPC2のための第2の部分という、2つの部分へユーザプロファイルを分割することができる。ユーザプロファイルPがn次元ベクトルであり、ユーザプロファイルP={p1,p2,...pn}であると仮定すると、2つの半分P1およびP2は、P1={p1,p2,...,pn/2}およびP2={pn/2+1,...,pn}である。コンピューティングシステムMPC1およびMPC2は、それに従ってユーザグループのそれらの重心を計算することができ、すなわち、Centroid(model_id,Li)はCentroid1(model_id,Li)およびCentroid2(model_id,Li)になる。
いくつかの実装形態では、アプリケーション112は、ユーザプライバシーをより保護するために、差分プライバシーノイズを追加することもできる。たとえば、アプリケーション112は、たとえばユーザプロファイルPを複数の部分へと分割する前に、ワンタイムユーザノイズΔPをユーザプロファイルPに追加することができる。
P'=P+ΔPであるとする。アプリケーション112は、水平区分を適用して、P'を2つの半分P1'およびP2'へと分ける。d'=d+|ΔP|とする。アプリケーション112は、第1の半分P1'をコンピューティングシステムMPC1に送信する(504)。たとえば、アプリケーション112は、2つのパラメータをもつ要求{P1',d'}をコンピューティングシステムMPC1に送信することができる。この要求は、|P1'-Centroid1(model_id,Li)|<d'であるすべてのユーザグループ識別子Liをフェッチすることであり得る。
同様に、アプリケーション112は、第2の半分P2'をコンピューティングシステムMPC2に送信する(506)。たとえば、アプリケーション112は、2つのパラメータ{P2',d'}を伴う要求をコンピューティングシステムMPC2に送信することができる。要求は、|P2'-Centroid1(model_id,Li)|<d'であるすべてのユーザグループ識別子Liをフェッチすることであり得る。
モデルがユーザによるデジタルコンポーネントのコンバージョンに基づいて訓練されることが望まれるいくつかの実装形態では、コンバージョンの発生がしばしばインプレッションまたはクリックから長い時間後に起こり得ることが考慮されてもよく、その場合、帯域幅、ストレージ、およびコンテンツプラットフォーム150による処理を最適化するために、他のタスクの実行にMPCクラスタ130を利用可能なままにするのが有利であり得る。そのような実装形態では、動作504および508は、代替的なプロセスによって置き換えられてもよく、代替的なプロセスにおいて、(i)アプリケーション112が、ユーザプロファイルとラベルの暗号化されたシェアをファーストパーティのクッキーとともに需要側プラットフォーム(DSP)に送信し、DSPは、一部の実装形態ではコンテンツプラットフォーム150の一部であり、他の実装形態ではコンテンツプラットフォーム150とは別個であることがあり、(ii)DSPが次いで、ファーストパーティのクッキーを使用して、ユーザプロファイルとラベルの暗号化されたシェアをコンバージョンに固有であり得る対話データ(たとえば、30日などのあらかじめ設定された期間内にコンバージョンが発生したかどうか)にマッピングし(すなわち、それと関連付け)、(iii)DSPが次いで、このマッピングをコンピューティングシステムMPC1またはMPC2に送信して、機械学習モデルを訓練する。この説明はコンバージョンという対話に注目しているが、このアーキテクチャおよび機能は、任意の他の対話(たとえば、インプレッションまたはクリック)、または対話の任意の組合せ(たとえば、インプレッション、クリック、および/またはコンバージョン)に拡張され得る。
コンピューティングシステムMPC1は、ユーザプロファイルP'の第1の半分P1'から閾値の距離d'以内に重心を有するユーザグループを決定することができる(508)。コンピューティングシステムMPC1は、各ユーザグループに対して、第1の半分P1'とユーザグループの重心との間の距離、すなわち、|P1'-Centroid1(model_id,Li)|を決定することができる。アプリケーション112は次いで、距離d'未満である距離をどのユーザグループが有するかを決定することができる。これらのユーザグループのユーザグループ識別子は、U1によって表され得る。
同様に、コンピューティングシステムMPC2は、ユーザプロファイルP'の第2の半分P2'から閾値の距離d'以内に重心を有するユーザグループを決定することができる(510)。コンピューティングシステムMPC2は、各ユーザグループに対して、第2の半分P2'とユーザグループの重心との間の距離、すなわち、|P2'-Centroid2(model_id,Li)|を決定することができる。アプリケーション112は次いで、距離d'未満である距離をどのユーザグループが有するかを決定することができる。これらのユーザグループのユーザグループ識別子は、U2によって表され得る。
コンピューティングシステムMPC1は、ユーザグループ識別子の集合U1をアプリケーション110に送信する(512)。同様に、コンピューティングシステムMPC2は、ユーザグループ識別子の集合U2をアプリケーション110に送信する(514)。
アプリケーション112は、集合U1およびU2を使用して、|P-Centroid(model_id,Li)|<dを満たすすべてのユーザグループ識別子Liの集合Uを計算することができる。U⊆(U1∪U2)であるので、アプリケーション112はU1およびU2から集合Uを計算することができ、それは、U={Li}であり、|P-Centroid(model_id,Li)|<dかつLi∈U1∪U2であるからである。
上記の手法は、ユーザグループの重心はプライバシー上取扱いに注意を要するものではなく、ブラウザが入るべきであるユーザグループの上位集合、すなわちU1U1およびU2U2を、MPC1とMPC2のいずれかに漏洩することは許容可能であると仮定している。より強いプライバシー保護が必要な状況では、以下の手法を使用することができる。図6は、より強力なプライバシー保護とともに、重心モデルを生成し、重心モデルを使用して重心モデルに対応するユーザグループにユーザを追加するための例示的なプロセス600を示す、スイムレーン図である。プロセス600の動作は、たとえば、図1のMPCクラスタ130およびクライアントデバイス110によって、たとえばクライアントデバイス110上で実行されるアプリケーション112によって実施され得る。プロセス600の動作は、非一時的であり得る1つまたは複数のコンピュータ可読媒体に記憶される命令として実施されてもよく、1つまたは複数のデータ処理装置による命令の実行は、1つまたは複数のデータ処理装置にプロセス600の動作を実行させることができる。
MPCクラスタ130は、1つまたは複数のユーザグループのための重心モデルを訓練することができる。この例では、重心モデルはユーザプロファイルの秘密シェアを使用してクエリされる。したがって、各コンピューティングシステムMPC1およびMPC2は、訓練セットのユーザプロファイルの秘密シェア、たとえばクライアントデバイス110によってアップロードされるユーザプロファイルの秘密シェアを使用して、ユーザグループの重心のそれぞれの秘密シェアを決定することができる。
各ユーザグループに対して、コンピューティングシステムMPC1は、ユーザグループの重心の第1の秘密シェアを計算する(602)。モデル識別子model_idによって特定される重心モデルのための、およびユーザグループ識別子Liによって特定されるユーザグループのための重心は、sum_of_profile(model_id,Li)として表され得る。ユーザグループLiのメンバーであるすべてのユーザプロファイルPiに対して、第1の秘密シェア[sum_of_profilemodel_id,i,1]=Σ[Pj,1]である。すなわち、ユーザグループLiのための重心の第1の秘密シェアは、ユーザグループLiの中のユーザプロファイルPiの第1の秘密シェアの合計を表す。
各ユーザグループに対して、コンピューティングシステムMPC2は、ユーザグループの重心の第2の秘密シェアを計算する(604)。モデル識別子model_idによって識別される重心モデルのための、およびユーザグループ識別子Liによって識別されるユーザグループのための重心は、sum_of_profile(model_id,Li)として表され得る。ユーザグループLiのメンバーであるすべてのユーザプロファイルPiに対して、第2の秘密シェア[sum_of_profilemodel_id,i,2]=Σ[Pj,2]である。すなわち、ユーザグループLiのための重心の第2の秘密シェアは、ユーザグループLiの中のユーザプロファイルPiの第2の秘密シェアの合計を表す。
重心モデルは、各ユーザグループのための重心の第1のシェア、および各ユーザグループの重心の第2のシェアを含み得る。各重心の第1のシェアは、コンピューティングシステムMPC1において機密性が維持されてもよく、各重心の第2のシェアは、コンピューティングシステムMPC2において機密性が維持されてもよい。
クライアントデバイス110上で実行されるアプリケーション112は、ユーザのユーザプロファイルを秘密シェアへと分ける(606)。たとえば、アプリケーション112は、コンピューティングシステムMPC1のためのユーザプロファイルPの第1の秘密シェア[P1]およびコンピューティングシステムMPC2のためのユーザプロファイルPの第2の秘密シェア[P2]を計算することができる。厳密な分割は、アプリケーション112により使用される秘密分散アルゴリズムおよび暗号ライブラリに依存し得る。いくつかの実装形態では、アプリケーションは、Shamirの秘密分散方式を使用する。
アプリケーション112は、ユーザのユーザグループ識別子をフェッチする要求をコンピューティングシステムMPC1に送信する(608)。この要求は、ユーザプロファイルPの第1の秘密シェア[P1]を含み得る。いくつかの実装形態では、この要求はクエリトークンMquery1を含む。クエリトークンの例示的なフォーマットは、以下のTable9(表10)に示される。
アプリケーション112は、ユーザのユーザグループ識別子をフェッチする要求をコンピューティングシステムMPC2に送信する(610)。この要求は、ユーザプロファイルPの第2の秘密シェア[P2]を含み得る。いくつかの実装形態では、この要求はクエリトークンMquery2を含む。クエリトークンの例示的なフォーマットは、以下のTable9(表10)に示される。
いくつかの実装形態では、図6に示されるように、アプリケーション112は2つの別々の要求を送信することができる。クライアントデバイス110の帯域幅および電池消費を節約するために、アプリケーション112は、2つの要求(たとえば、2つのクエリトークンMquery1およびMquery2)を単一の要求へと組み合わせて、単一の要求をコンピューティングシステムMPC1またはMPC2の1つに送信することができる。そうするために、アプリケーション112は、他のコンピューティングシステムMPC1またはMPC2に向けられたクエリトークンを暗号化することができる。たとえば、アプリケーション112は、コンピューティングシステムMPC2の暗号公開鍵を使用して、たとえば確率非対称公開鍵アルゴリズムを使用して、クエリトークンMquery2を暗号化することができる。たとえば、アプリケーション112は、コンピューティングシステムMPC2の公開鍵を使用して暗号化結果PubKeyEnc(Mquery2,MPC2)を生成することができる。アプリケーション112は次いで、クエリトークンMquery1および暗号化結果PubKeyEnc(Mquery2,MPC2)をコンピューティングシステムMPC1に送信することができる。
図3を参照して上で説明されたように、コンピューティングシステムMPC1は、コンピューティングシステムMPC1が更新トークンMprofileupdateの妥当性を確認するのと同様の方式で、クエリトークンMquery1の妥当性を確認することができる。コンピューティングシステムMPC1はまた、暗号化結果PubKeyEnc(Mquery2,MPC2)とともに要求をコンピューティングシステムMPC2に送信することができる。コンピューティングシステムMPC2は、クエリトークンMquery2を暗号化するために使用される公開鍵に対応する秘密鍵を使用して、暗号化結果を復号することができる。図3を参照して上で説明されたように、コンピューティングシステムMPC2は次いで、コンピューティングシステムMPC2が更新トークンMprofileupdateの妥当性を確認するのと同様の方式で、クエリトークンMquery2の妥当性を確認することができる。
いくつかの実装形態では、各コンピューティングシステムMPC1およびMPC2は、重心モデルと関連付けられる複数のユーザグループの各々について、ユーザグループに対するユーザグループ適格性のそれぞれの秘密シェアeligible_groupiを決定することができる。ユーザプロファイルおよびユーザグループに対するユーザグループ適格性eligible_groupiは、重心モデルに基づいて、ユーザのユーザプロファイルがユーザグループの重心から閾値の距離以内にあるかどうかを示す。
この例では、各コンピューティングシステムMPC1およびMPC2は、モデル識別子model_idと関連付けられるすべてのユーザグループLiを探すことができ、1≦i≦Nであり、Nはモデル識別子model_idと関連付けられるユーザグループの数である。各ユーザグループLiに対して、コンピューティングシステムMPC1は、以下の関係5を使用して、幾何学的距離[di,1]の二乗の第1の秘密シェアを計算することができる。
関係5:[di,1]=Σ([P1]×num_apps_groupi-[sum_of_profile_model_idi,1])2
関係5において、パラメータnum_apps_groupiは、ユーザグループLiの重心を生成するためにユーザプロファイルが使用された、ユーザグループの中のアプリケーションの数(たとえば、ユニークユーザの数)を表す。コンピューティングシステムMPC1は次いで、以下の関係6を使用して、ユーザプロファイルおよびユーザグループに対するユーザグループ適格性eligible_groupiの第1の秘密シェア[eligible_groupi,1]を計算することができる。
関係6:[eligible_groupi,1]=[di,1]<(num_apps_groupi×d)2
すなわち、コンピューティングシステムMPC1は、幾何学的距離の第1の秘密シェアが閾値距離より短いかどうかを計算することができる。コンピューティングシステムMPC2は、以下の関係7および8を使用して同様の方式で、ユーザプロファイルおよびユーザグループに対するユーザグループ適格性eligible_groupiの第2の秘密シェア[eligible_groupi,2]を計算することができる。
関係7:[di,2]=Σ([P2]×num_apps_groupi-[sum_of_profile_model_idi,2])2
関係8:[eligible_groupi,2]=[di,2]<(num_apps_groupi×d)2
各コンピューティングシステムMPC1およびMPC2は、ユーザグループ適格性のそれぞれの秘密シェアをアプリケーション112に送信することができる。アプリケーション112は次いで、ユーザをユーザグループに追加するかどうかを決定するために、秘密シェアを組み合わせることができる。応答サイズはモデルの中のユーザグループの数に比例するので、応答サイズは、重心モデルと関連付けられる多数のユーザグループを有するコンテンツプラットフォームに対しては大きくてもよい。しかしながら、ユーザをユーザグループに追加するかどうかを決定するためのこの技法は、ユーザグループの数が少ないか、または帯域幅消費が問題ではないときに使用することができる。このプロセス600の残りの動作は、ユーザグループの数が多い可能性があるときに使用され得るこの技法を上回る改善をもたらし、応答サイズを大きく減らす。
概念的には、ユーザプロファイルおよびユーザグループに対するユーザグループ適格性eligible_groupiについて、アプリケーション112は、その各々が等しい確率で0または1のいずれかの値を有する、2つの数giおよびhiをランダムにまたは疑似ランダムに生成することができる。この例では、giおよびhiの合計は、25%の確率で0、50%の確率で1、または25%の確率で2である。
アプリケーション112は、ユーザグループ適格性eligible_groupiの値を(gi+hi)==1と推定することができる。以下のTable10(表11)を介して、MPCクラスタ130は、その推定が正しかったかどうかをアプリケーション112に知らせることができる。
たとえば、gi+hi==1であり、eligible_groupi=1である場合、アプリケーションは、対応するセルの値が1となるようにeligible_groupiの値を正しく推定した。一方、gi+hi==2であり、eligible_groupi==1である場合、アプリケーション112は、eligible_groupiの値を誤って推定したので、対応するセルの値は0である。この場合、アプリケーション112は、アプリケーション112がeligible_groupiの値を正しく推定できるように、その推定を反転させることができる。上のテーブルが、
(1- eligible_groupi)×(1-(gi+hi-1)2)+eligible_groupi×(gi+hi-1)2
と等価であることを検証することができる。
セキュアMPCを使用してこの概念を実装するために、アプリケーション112は、2つのランダム(または疑似ランダム)シード(たとえば、16バイトまたは別の適切なデータサイズの)seed1およびseed2を生成することができる(612)。アプリケーション112は、第1のシードseed1をコンピューティングシステムMPC1に送信することができる。アプリケーション112は、第2のシードseed2をコンピューティングシステムMPC2に送信することができる。
MPCクラスタ130は、疑似ランダム関数(PRF)およびシードを使用して数giおよびhiを生成することができ、それらはランダムまたは疑似ランダムであり得る。PRFは、50%の確率で0または1のいずれかの値を生成する関数であり得る。たとえば、PRFは、PRF(seed,i)→{0,1}となるようなものであり得る。コンピューティングシステムMPC1は、PRFおよびseed1(たとえば、PRF(seed1,i))を使用してgiを生成することができ、コンピューティングシステムMPC2は、PRFおよびseed2(たとえば、PRF(seed2,i))を使用してhiを生成することができる。数giおよびhiは、gi+hiの2つの加算秘密シェア(これはユーザがユーザグループLiに追加されるべきであるかどうかのアプリケーションによる推定である)であり、それらは、それらが秘密シェアであることを示すために[gi]および[hi]として表され得る。
平文で
(1-eligible_groupi)×(1-(gi+hi-1)2)+eligible_groupi×(gi+hi-1)2
を計算する代わりに、MPCクラスタ130は、秘密シェアで
(1-[eligible_groupi])×(1-([gi+hi]-1)2)+[eligible_groupi]×([gi+hi]-1)2
を計算する。この式において、これは秘密シェアの二乗と2つの秘密シェア間の乗算を含むことに留意されたい。コンピューティングシステムMPC1とMPC2との間のセキュアMPCプロセスを使用した二乗と乗算の計算は、2つのコンピューティングシステムMPC1とMPC2との間のリモートプロシージャコール(RPC)の1ラウンドを必要とし得る。すべての他の動作が、各コンピューティングシステムMPC1およびMPC2内でローカルに実行され得る。
具体的には、コンピューティングシステムMPC1およびMPC2の各々は、各ユーザグループLiのための推定フラグflagiの第2のシェアを計算することができる。ユーザグループのための推定フラグflagiは、ユーザがユーザグループに正しく追加されるべきであるかどうかをアプリケーション112が正しく推定したかどうかを示す。
コンピューティングシステムMPC1は、各ユーザグループLiのための推定フラグflagiの第1の秘密シェア[flagi,1]を計算する(618)。コンピューティングシステムMPC1は、以下の関係9を使用して、各ユーザグループLiのための推定フラグflagiの第1の秘密シェア[flagi,1]を計算することができる。
関係9:[flagi,1]=(1-[eligible_groupi,1])×(1-([gi]-1)2)+[eligible_groupi,1]×([gi]-1)2
コンピューティングシステムMPC2は、各ユーザグループLiのための推定フラグflagiの第2の秘密シェア[flagi,2]を計算する(620)。コンピューティングシステムMPC2は、以下の関係10を使用して、各ユーザグループLiのための推定フラグflagiの第2の秘密シェア[flagi,2]を計算することができる。
関係10:[flagi,2]=(1-[eligible_groupi,2])×(1-([hi]-1)2)+[eligible_groupi,2]×([hi]-1)2
コンピューティングシステムMPC1およびMPC2は、各ユーザグループLiのための推定フラグflagiを再構築する(622)。コンピューティングシステムMPC1およびMPC2は、2つのコンピューティングシステムMPC1とMPC2の間の1つのRPCを使用して、2つの秘密シェア[flagi,1]に基づいて、各ユーザグループLiのための推定フラグflagiを再構築することができる。ユーザグループLiのための推定フラグflagiの値が1である場合、アプリケーションは、ユーザがユーザグループLiに追加されるべきであるかどうかを正しく推定した。コンピューティングシステムMPC1もMPC2も、アプリケーション112が実際に何を推定したかを知らないので、ユーザグループLiのための推定フラグflagiの値を知っていることは、コンピューティングシステムMPC1またはMPC2にどのような情報も漏洩しない。
コンピューティングシステムMPC1は、各ユーザグループLiのための推定フラグflagiをアプリケーション112に送信する(624)。たとえば、コンピューティングシステムMPC1は、ユーザグループのための{flag1,flag2,...}をアプリケーション112に送信することができる。平文flagiは、0または1のいずれかの値を有し、これはすなわち、正しく推定されたか誤って推定されたかを示す。すなわち、1という値は、ユーザが第iのグループに追加されるべきであるかどうかをアプリケーション112が正しく推定したことを意味し、0という値は正しく推定しなかったことを意味する。したがって、各平文flagiは、1ビットによって表され得る。
重心モデルと関連付けられる各ユーザグループに対して、コンピューティングシステムMPC1は単一のビット(flagi)を返すことができる。100万個のユーザグループを伴う重心モデルでは、応答サイズは128キロバイト(KB)であり、これは、現実的には、要求の必要とされるレイテンシおよび要求がMPCクラスタ130に出される頻度に基づく。
アプリケーション112は、推定フラグに基づいて、ユーザをユーザグループに追加すべきかどうかを決定する(626)。各ユーザグループに対して、アプリケーションは、flagi==(gi+hi==1)を計算することができる。演算「==」は、両方の値が等しい場合に真を返す等値演算を表す。計算の結果が真である場合、アプリケーション112は、重心モデルと関連付けられる第iのユーザグループに加入すべきである。
アプリケーション112は次いで、アプリケーション112がMPCクラスタ130から加入すべきユーザグループのユーザグループ識別子を要求することができる。そうするために、アプリケーション112は、任意の適切な高密度個人情報検索(PIR)のアルゴリズムおよび実装形態を用いて、高密度個人情報検索(PIR)をコンピューティングシステムMPC1およびMPC2に対して開始することができる。いくつかの実装形態は、分散点関数(DPF)に依存する。アプリケーション112が加入すべき第iのユーザグループに対して、アプリケーション112は、j= iである場合はgi(j)+hi(j)=1であり、それ以外の場合はgi(j)+hi(j)=0であるように、2つのDPF giおよびhiを生成することができる。
アプリケーション112は、第1の要求をコンピューティングシステムMPC1に送信することができる(630)。第1の要求は、アプリケーション112が加入すべき各ユーザグループのための点関数giを含み得る。
アプリケーション112は、第2の要求をコンピューティングシステムMPC2に送信することができる(632)。第2の要求は、アプリケーション112が加入すべき各ユーザグループのための点関数hiを含み得る。
各点関数giに対して、コンピューティングシステムMPC1は、ユーザグループ識別子結果の第1の秘密シェアを計算してアプリケーション112に返す(634)。アプリケーション112は、以下の関係11を使用して、ユーザグループ識別子結果の第1の秘密シェアを計算することができる。
関係11:resulti,1=Σjgi(j)×group_idj
各点関数hiに対して、コンピューティングシステムMPC2は、ユーザグループ識別子結果の第2の秘密シェアを計算してアプリケーション112に返す(636)。アプリケーション112は、以下の関係12を使用して、ユーザグループ識別子結果の第2の秘密シェアを計算することができる。
関係12: resulti,2=Σjhi(j)×group_idj
アプリケーション112は、ユーザを1つまたは複数のユーザグループに追加することができる(638)。アプリケーション112は、ユーザグループのための第1のシェアresulti,1および第2のシェアresulti,2を使用してユーザが加入すべき各ユーザグループのためのユーザグループ識別子を再構築することができる。たとえば、アプリケーション112は、2つの秘密シェアが加算秘密シェアである場合、ユーザグループのためのユーザグループ識別子を取得するために、2つの秘密シェアの合計を計算することができる。アプリケーション112は次いで、ユーザグループ識別子をユーザグループリストに追加することができる。
図6のこのプロセス600において、MPCクラスタ130の中のいずれのコンピューティングシステムも、ユーザグループの重心を平文で知らず、いずれのコンピューティングシステムも、アプリケーションクエリパラメータ、すなわちユーザプロファイルを知らず、いずれのコンピューティングシステムも、ユーザが加入するユーザグループを知らず、したがってユーザプライバシーを守る。
プライバシー要件が緩和されている状況では、たとえば、コンピューティングシステムMPC1およびMPC2は平文でクエリ結果を知ることができ、コンピューティングシステムMPC1およびMPC2は、2つの秘密シェアからユーザグループ適格性eligible_groupiの結果を再構築し、対応するeligible_groupiが真である場合、クエリ応答においてアプリケーション112にユーザグループ識別子Liを返すだけでよい。
いくつかの実装形態では、重心モデルの訓練および重心モデルのクエリは、集約サービスによって実行され得る。集約サービスは、MPCクラスタ130を含み、たとえばクライアントデバイス110ではなく、コンテンツプラットフォーム150と通信することができる。そのような場合、アプリケーション112がどのユーザグループに加入すべきかをクエリするとき、アプリケーション112は、プライバシーの理由で、MPCクラスタ130への転送のためにユーザのユーザプロファイルをコンテンツプラットフォーム150に送信しなくてもよい。1つの選択肢は、ユーザグループの重心をアプリケーション112に送信するようにコンテンツプラットフォーム150を構成することである。しかしながら、これは大量の帯域幅を消費し得る。
別の選択肢は、ユーザのためのセキュアモバイルID(たとえば、FLOC ID)、ファーストパーティのクッキーから受信されるファーストパーティクッキーデータ、およびデジタルコンポーネント要求のURLに基づいて、使用するユーザグループをコンテンツプラットフォーム150が推測することである。しかしながら、これは上で説明された技法ほど正確ではないことがある。
図7は、ユーザのユーザプロファイルデータおよび重心モデルに基づいて、ユーザグループ結果(すなわち、アプリケーション112が1つまたは複数のユーザグループに加入すべきかどうか)を決定するための例示的なプロセス700を示す流れ図である。プロセス700の動作は、たとえば、MPCクラスタ130によって実施され得る。プロセス700の動作はまた、非一時的であり得る1つまたは複数のコンピュータ可読媒体に記憶されている命令として実施されてもよく、1つまたは複数のデータ処理装置による命令の実行は、1つまたは複数のデータ処理装置にプロセス700の動作を実行させることができる。
ユーザグループ識別子に対する第1の要求が受信される(702)。MPCクラスタ130の第1のコンピューティングシステム、たとえばMPC1は、クライアントデバイス110上で実行されるアプリケーション112から第1の要求を受信することができる。アプリケーション112は、MPCクラスタ130の各々の他のコンピューティングシステム、たとえばMPC2にそれぞれの第2の要求を送信することができる。要求は、ユーザが追加されるべきユーザグループ、たとえば、ユーザのユーザプロファイルがユーザグループの重心から閾値の距離以内にある各ユーザグループのユーザグループ識別子に対するものであり得る。
一般に、各要求は、ユーザのユーザプロファイルのためのユーザプロファイルデータを含み得る。第1の要求は第1のユーザプロファイルデータを含んでもよく、各々の第2のコンピューティングシステムに送信される各々の第2の要求はそれぞれの第2のユーザプロファイルデータを含んでもよい。ユーザプロファイルデータは、使用される暗号学的な技法に基づいて変化し得る。
たとえば、図4を参照して説明されたように、MPCプロセスおよび水平区分を使用して重心が決定される場合、各要求のユーザプロファイルデータは、ユーザのユーザプロファイルのそれぞれの部分を含み得る。MPCクラスタ130の各コンピューティングシステムが重心の秘密シェアを有する場合、各要求のユーザプロファイルデータは、ユーザのユーザプロファイルのそれぞれの秘密シェアを含み得る。いずれの場合でも、ユーザプロファイルデータは、重心モデルのモデル識別子および閾値距離も含み得る。
モデル識別子に対応するユーザグループのセットが特定される(704)。たとえば、コンテンツプラットフォーム150またはデジタルコンポーネント提供者160は、MPCクラスタ130にユーザグループのセットのための重心モデルを生成させることができる。MPCクラスタ130の中の各コンピューティングシステムは、たとえばモデル識別子を各ユーザグループ識別子とつなげることによって、重心モデルに対応するユーザグループのためのユーザグループ識別子を特定するデータを記憶することができる。第1のコンピューティングシステムは、記憶されているデータに基づいてユーザグループのセットを特定することができる。各ユーザグループ識別子およびモデル識別子は、重心モデルとユーザグループ識別子のペアと呼ばれ得る。
ユーザグループのセットの中の各ユーザグループに対して、ユーザグループの重心が特定される(706)。MPCクラスタ130が重心モデルを生成するとき、MPCクラスタ130は、重心モデルに対応する各ユーザグループの重心を決定することができる。重心の形式は、使用される暗号学的な技法に基づいて変化し得る。たとえば、図4を参照して説明されたように、MPCプロセスおよび水平区分を使用して重心が決定される場合、MPCクラスタ130の各コンピューティングシステムは、重心を生成するために使用されるユーザプロファイルの秘密シェアの合計の一部、たとえば半分に基づいて決定される、ユーザグループの重心を有し得る。秘密分散が使用される場合、MPCクラスタ130の各コンピューティングシステムは、ユーザグループの重心の秘密シェアを有し得る。
ユーザグループ結果が決定される(708)。ユーザグループ結果は、ユーザを追加すべき1つまたは複数のユーザグループを示すものである。たとえば、ユーザグループ結果は、ユーザのユーザプロファイルから閾値の距離以内にある重心を有するユーザグループを示すものであり得る。
ユーザグループ結果が送信される(710)。たとえば、第1のコンピューティングシステムは、クライアントデバイス110上で実行されるアプリケーション112にそのユーザグループ結果を送信することができる。
第1のコンピューティングシステムは、使用される暗号学的な技法に応じて異なる方法でユーザグループ結果を決定することができ、ユーザグループ結果は使用される暗号学的な技法に基づいて変化することができる。たとえば、水平区分が使用される場合、図5を参照して説明されたように、第1のコンピューティングシステムは、ユーザグループのセットの中の各ユーザグループに対して、第1のユーザプロファイルデータに含まれるユーザプロファイルの第1の部分が第1のコンピューティングシステムによって以前に決定されたユーザグループの重心から閾値の距離以内にあるかどうかを決定することができる。この例では、ユーザグループ結果は、重心がユーザのユーザプロファイルから閾値の距離以内にあるユーザグループのユーザグループ識別子を含み得る。各々の他のコンピューティングシステムは、その重心およびユーザプロファイルの受信された部分を使用して、同様のプロセスを実行することができる。各コンピューティングシステムは、重心がユーザのユーザプロファイルから閾値の距離以内にあるユーザグループのユーザグループ識別子を含む、ユーザグループ結果を提供することができる。クライアントデバイスのアプリケーションは次いで、図5を参照して説明されたように、各コンピューティングシステムから受信されたユーザグループ結果に基づいて、ユーザを追加すべきユーザグループのリストを決定することができる。
秘密分散が使用される場合、ユーザグループ結果は、図6を参照して説明されたように、ユーザグループのセットの中の各ユーザグループのための推定フラグを含み得る。ユーザグループのための推定フラグは、ユーザがユーザグループに追加されるべきであるかどうかをアプリケーションが正しく推定したかどうかを示す。アプリケーション112は、推定フラグを使用して、たとえば、ユーザがユーザグループに追加されるべきであるかどうかをアプリケーション112が推定したかどうか、および推定が正しかったかどうかに基づいて、ユーザをユーザグループに追加すべきかどうかを決定することができる。そうである場合、アプリケーション112は次いで、推定フラグに対応するユーザグループ識別子についてMPCクラスタ130にクエリすることができる。
k-NNモデルを生成して使用するための例示的なプロセス
図8は、機械学習モデルを訓練し、機械学習モデルを使用してユーザをユーザグループに追加するための、例示的なプロセス800のスイムレーン図である。プロセス800の動作は、たとえば、クライアントデバイス110、MPCクラスタ130のコンピューティングシステムMPC1およびMPC2、ならびにコンテンツプラットフォーム150によって実施され得る。プロセス800の動作は、非一時的であり得る1つまたは複数のコンピュータ可読媒体に記憶される命令として実施されてもよく、1つまたは複数のデータ処理装置による命令の実行は、1つまたは複数のデータ処理装置にプロセス800の動作を実行させることができる。プロセス800および以下の他のプロセスは、2つのコンピューティングシステムMPCクラスタ130に関して説明されるが、2つより多くのコンピューティングシステムを有するMPCクラスタも、同様のプロセスを実行するために使用され得る。
機械学習モデルは、ユーザのユーザプロファイル間またはユーザグループのためのユーザプロファイル間の距離を表すk-NNモデルであり得る。k-NNモデルがユーザグループのためのユーザプロファイル間の距離を表すとき、各ユーザグループは、ユーザグループの重心を使用してモデルにおいて表され得る。
コンテンツプラットフォーム150は、それぞれのユーザのためのユーザプロファイルを生成してユーザプロファイルの秘密分散および/または暗号化されたバージョンをMPCクラスタ130にアップロードするように、クライアントデバイス110上で実行されるアプリケーション112に要求することによって、その機械学習モデルのうちの1つの訓練および/または更新を開始することができる。この文書では、秘密シェアが平文ではないので、ユーザプロファイルの秘密シェアはユーザプロファイルの暗号化されたバージョンであると考えられ得る。一般に、各アプリケーション112は、ユーザプロファイルのためのデータを記憶し、コンテンツプラットフォーム150から要求を受信したことに応答して、更新されたユーザプロファイルを生成することができる。ユーザプロファイルの内容と機械学習モデルは、異なるコンテンツプラットフォーム150に対して異なるので、ユーザのクライアントデバイス110上で実行されるアプリケーション112は、複数のユーザプロファイルのためのデータを維持し、特定のコンテンツプラットフォームに各々特有である複数のユーザプロファイルを生成することができる。
クライアントデバイス110上で実行されるアプリケーション112は、クライアントデバイス110のユーザのユーザプロファイルを構築する(802)。ユーザのユーザプロファイルは、ユーザによって開始されたイベント、および/または電子リソース、たとえばウェブページもしくはアプリケーションコンテンツに関してユーザによって開始された可能性のあるイベントに関する、データを含み得る。イベントは、電子リソースの閲覧、デジタルコンポーネントの閲覧、電子リソースもしくはデジタルコンポーネントとのユーザ対話(たとえば、その選択)、もしくはユーザ対話の欠如、電子リソースとのユーザ対話の後に起こるコンバージョン、および/または、ユーザと電子リソースに関する他の適切なイベントを含み得る。ユーザによるユーザ対話のいくつかの例は、(a)特定のアイテムのリンクをクリックすること、(b)たとえばアイテムを仮想カートに追加する、またはアイテムを購入することによって、特定のアイテムに対するコンバージョンを完了すること、(c)ある設定された長さの時間より長く特定のアイテムを見ることのうちの1つまたは複数などの、ウェブページに提示される特定のアイテムとの対話であり得る。特定のユーザ対話の欠如のいくつかの例は、ユーザが一部の対話を実行するが後続の対話を欠いていること、たとえば、ユーザがデジタルコンポーネントを見るが、クリックしないこと、デジタルコンポーネントをクリックするがコンバージョンを行わないこと(たとえば、クリックして決済ウェブページに進むがアイテムを購入しないこと)などであり得る。コンバージョンは、異なる実装形態では異なるように定義され得る。たとえば、いくつかの実装形態では、コンバージョンは、ユーザが決済ページに進むことであり得る。ある実装形態では、コンバージョンは、ユーザがアイテムを購入しようとすることであり得る。他の実装形態では、コンバージョンは、ユーザがアイテムを購入することであり得る。
ユーザのユーザプロファイルは、コンテンツプラットフォーム150に固有であってもよく、またはコンテンツプラットフォーム150により所有される選択された機械学習モデルであってもよい。たとえば、図9を参照して以下でより詳しく説明されるように、各コンテンツプラットフォーム150は、そのコンテンツプラットフォーム150に固有のユーザプロファイルを生成または更新するようにアプリケーション112に要求することができる。
ユーザのユーザプロファイルは、特徴ベクトルの形式であり得る。たとえば、ユーザプロファイルは、n次元特徴ベクトルであり得る。n次元の各々は特定の特徴に対応することができ、各次元の値はユーザの特徴の値であり得る。たとえば、ある次元は、特定のデジタルコンポーネントがユーザに提示された(またはユーザと対話した)かどうかについてのものであり得る。この例では、その特徴の値は、デジタルコンポーネントがユーザに提示された(またはユーザと対話した)場合は「1」であってもよく、またはデジタルコンポーネントがユーザに提示されなかった(またはユーザと対話しなかった)場合は「0」であってもよい。ユーザのユーザプロファイルを生成するための例示的なプロセスが、図9に示され、以下で説明される。
いくつかの実装形態では、コンテンツプラットフォーム150は、コンテクスチュアル信号、特定のデジタルコンポーネントに関連する信号、または、アプリケーション112が認識していない可能性のあるユーザに関連する信号、もしくはユーザの位置における現在の天気などのアプリケーション112がアクセスできない可能性のあるユーザに関連する信号などの、追加の信号に基づいて、機械学習モデルを訓練することを望み得る。たとえば、コンテンツプラットフォーム150は、特定のデジタルコンポーネントが特定の文脈においてユーザに提示される場合に、ユーザがそのデジタルコンポーネントと対話するかどうかを予測するように、機械学習モデルを訓練することを望むことがある。この例では、コンテクスチュアル信号は、ユーザへのデジタルコンポーネントの各提示に対して、その時間におけるクライアントデバイス110の地理的位置(ユーザにより許可されている場合)、デジタルコンポーネントがそれを用いて提示される電子リソースの内容を記述する信号、および、デジタルコンポーネントを記述する信号、たとえば、デジタルコンポーネントの内容、デジタルコンポーネントのタイプ、電子リソース上のどこでデジタルコンポーネントが提示されるかなどを含み得る。別の例では、ある次元は、ユーザに提示されるデジタルコンポーネントがある特定のタイプであるかどうかのためのものであり得る。この例では、値は、旅行に対しては1、料理に対しては2、映画に対しては3などであり得る。以後の説明を簡単にするために、Piは、i番目のユーザプロファイルと関連付けられるユーザプロファイルと追加の信号(たとえば、コンテクスチュアル信号および/またはデジタルコンポーネントレベル信号)の両方を表す。
アプリケーション112は、ユーザのためのユーザプロファイルPiのシェアを生成する(804)。この例では、アプリケーション112は、ユーザプロファイルPiの2つのシェアを、MPCクラスタ130の各コンピューティングシステムに対して1つずつ生成する。各シェア自体は、それ自体はユーザプロファイルについて何も明らかにしないランダムな変数であり得ることに留意されたい。ユーザプロファイルを得るには、両方のシェアを組み合わせる必要がある。MPCクラスタ130が、機械学習モデルの訓練に参加するより多くのコンピューティングシステムを含む場合、アプリケーション112は、より多くのシェアを、各コンピューティングシステムに対して1つずつ生成する。いくつかの実装形態では、ユーザのプライバシーを保護するために、アプリケーション112は、疑似ランダム関数を使用して、ユーザプロファイルPiを複数のシェアへと分割することができる。すなわち、アプリケーション112は、疑似ランダム関数PRF(Pi)を使用して2つのシェア{[Pi,1],[Pi,2]}を生成することができる。厳密な分割は、アプリケーション112により使用される秘密分散アルゴリズムおよび暗号ライブラリに依存し得る。
いくつかの実装形態では、アプリケーション112は、1つまたは複数のラベルをMPCクラスタ130にも提供することができる。ラベルはあるアーキテクチャの機械学習モデル(たとえば、k-NN)の訓練においては使用されないことがあるが、モデル訓練プロセスを制御するハイパーパラメータ(たとえば、kの値)を精密に調整するために、または訓練される機械学習モデルの品質を評価するために、または予測を行う、すなわちユーザのためのユーザグループを提案するかどうかを決定するために、ラベルが使用され得る。ラベルは、たとえば、ユーザのための、コンテンツプラットフォーム150がアクセス権を有するユーザグループ識別子のうちの1つまたは複数を含み得る。すなわち、ラベルは、コンテンツプラットフォーム150によって管理される、またはコンテンツプラットフォーム150が読取りのアクセス権を有するユーザグループのユーザグループ識別子を含み得る。いくつかの実装形態では、単一のラベルは、ユーザのための複数のユーザグループ識別子を含む。いくつかの実装形態では、ユーザのためのラベルは、ヘテロジニアスであってもよく、メンバーとしてユーザを含むすべてのユーザグループと、追加の情報、たとえば、ユーザが所与のデジタルコンポーネントと対話した(たとえば、閲覧した、クリックした、および/またはコンバージョンを行った)かどうかとを含んでもよい。これにより、別のユーザが所与のデジタルコンポーネントと対話するかどうかを予測するためにk-NNモデルを使用することが可能になる。各ユーザプロファイルのためのラベルは、ユーザプロファイルに対応するユーザのためのユーザグループメンバーシップを示し得る。
ユーザプロファイルのためのラベルは、入力に対応するユーザが追加される、または追加されるべきであるユーザグループを予測するものである。たとえば、入力ユーザプロファイルに対するk個の最近傍ユーザプロファイルに対応するラベルは、たとえばユーザプロファイル間の類似性に基づいて、入力ユーザプロファイルに対応するユーザが入る、または入るべきであるユーザグループを予測するものである。これらの予測ラベルは、ユーザにユーザグループを提案するために、または、ラベルに対応するユーザグループにユーザを追加するようにアプリケーションに要求するために使用され得る。
ラベルが含まれる場合、アプリケーション112は、各labeliをシェア、たとえば[labeli,1]および[labeli,2]に分割することもできる。このようにして、コンピューティングシステムMPC1とMPC2との共謀がなければ、コンピューティングシステムMPC1もMPC2も、[Pi,1]もしくは[Pi,2]からPiを再構築できず、または[labeli,1]もしくは[labeli,2]からlabeliを再構築できない。
アプリケーション112は、ユーザプロファイルPiのシェア[Pi,1]もしくは[Pi,2]、および/または、各ラベルlabeliのシェア[labeli,1]もしくは[labeli,2]を暗号化する(806)。いくつかの実装形態では、アプリケーション112は、ユーザプロファイルPiの第1のシェア[Pi,1]とラベルlabeliの第1のシェア[labeli,1]の合成メッセージを生成し、コンピューティングシステムMPC1の暗号鍵を使用して合成メッセージを暗号化する。同様に、アプリケーション112は、ユーザプロファイルPiの第2のシェア[Pi,2]とラベルlabeliの第2のシェア[labeli,2]の合成メッセージを生成し、コンピューティングシステムMPC2の暗号鍵を使用して合成メッセージを暗号化する。これらの関数は、PubKeyEncrypt([Pi,1] || [labeli,1], MPC1)およびPubKeyEncrypt([Pi,2] || [labeli,2], MPC2)と表すことができ、PubKeyEncryptは、MPC1またはMPC2の対応する公開鍵を使用した公開鍵暗号化アルゴリズムを表す。記号「||」は、複数の単純なメッセージから複雑なメッセージを合成するための可逆的な方法、たとえば、JavaScript Object Notation(JSON)、Concise Binary Object Representation(CBOR)、またはプロトコルバッファを表す。
アプリケーション112は、暗号化されたシェアをコンテンツプラットフォーム150に提供する(808)。たとえば、アプリケーション112は、ユーザプロファイルおよびラベルの暗号化されたシェアをコンテンツプラットフォーム150に送信することができる。各シェアはコンピューティングシステムMPC1またはMPC2の暗号鍵を使用して暗号化されるので、コンテンツプラットフォーム150はユーザのユーザプロファイルまたはラベルにアクセスすることができない。
コンテンツプラットフォーム150は、複数のクライアントデバイスからユーザプロファイルのシェアおよびラベルのシェアを受信することができる。コンテンツプラットフォーム150は、コンピューティングシステムMPC1およびMPC2にユーザプロファイルのシェアをアップロードすることによって、機械学習モデルの訓練を開始することができる。ラベルは訓練プロセスにおいて使用されないことがあるが、コンテンツプラットフォーム150は、モデル品質を評価するとき、またはモデルに後でクエリするときに使用するために、コンピューティングシステムMPC1およびMPC2にラベルのシェアをアップロードすることができる。
コンテンツプラットフォーム150は、各クライアントデバイス110から受信された第1の暗号化されたシェア(たとえば、PubKeyEncrypt([Pi,1] || [labeli,1], MPC1))をコンピューティングシステムMPC1にアップロードする(810)。同様に、コンテンツプラットフォーム150は、第2の暗号化されたシェア(たとえば、PubKeyEncrypt([Pi,2] || [labeli,2], MPC2))をコンピューティングシステムMPC2にアップロードする(812)。両方のアップロードが、バッチであってもよく、機械学習モデルを訓練するための特定の期間に受信されたユーザプロファイルおよびラベルの暗号化されたシェアを含んでもよい。
いくつかの実装形態では、コンテンツプラットフォーム150が第1の暗号化されたシェアをコンピューティングシステムMPC1にアップロードする順序は、コンテンツプラットフォーム150が第2の暗号化されたシェアをコンピューティングシステムMPC2にアップロードする順序と一致しなければならない。これにより、コンピューティングシステムMPC1およびMPC2が、同じ秘密の2つのシェア、たとえば同じユーザプロファイルの2つのシェアを適切に照合することが可能になる。
いくつかの実装形態では、コンテンツプラットフォーム150は、照合を容易にするために、同じ疑似ランダムにまたは逐次生成された識別子を、同じ秘密のシェアに明確に割り当ててもよい。一部のMPC技法は入力または中間結果のランダムなシャッフルを利用し得るが、本文書において説明されるMPC技法は、そのようなランダムなシャッフルを含まないことがあり、代わりに照合のためにアップロード順序を利用することがある。
いくつかの実装形態では、動作808、810、および812は、アプリケーション112が[Pi,1] || [labeli,1]をMPC1に、および[Pi,2] || [labeli,2]をMPC2に直接アップロードする代替のプロセスにより置き換えられ得る。この代替のプロセスは、動作808、810、および812をサポートするためのコンテンツプラットフォーム150のインフラストラクチャコストを減らし、MPC1およびMPC2において機械学習モデルの訓練または更新を開始するためのレイテンシを減らすことができる。
モデルがユーザによるデジタルコンポーネントのコンバージョンに基づいて訓練されることが望まれるいくつかの実装形態では、コンバージョンの発生がしばしばインプレッションまたはクリックから長い時間後に起こり得ることが考慮されてもよく、その場合、帯域幅、ストレージ、およびコンテンツプラットフォーム150による処理を最適化するために、他のタスクの実行にコンテンツプラットフォーム150を利用可能なままにするのが有利であり得る。そのような実装形態では、動作808、810、および812は、別の代替的なプロセスによって置き換えられてもよく、その代替的なプロセスにおいて、(i)アプリケーション112が、ユーザプロファイルとラベルの暗号化されたシェアをファーストパーティのクッキーとともに需要側プラットフォーム(DSP)に送信し、DSPは、一部の実装形態ではコンテンツプラットフォーム150の一部であり、他の実装形態ではコンテンツプラットフォーム150とは別個であることがあり、(ii)DSPが次いで、ファーストパーティのクッキーを使用して、ユーザプロファイルとラベルの暗号化されたシェアをコンバージョンに固有であり得る対話データ(たとえば、30日などのあらかじめ設定された期間内にコンバージョンが発生したかどうか)にマッピングし(すなわち、それと関連付け)、(iii)DSPが次いで、このマッピングをコンピューティングシステムMPC1またはMPC2に送信して、機械学習モデルを訓練する。動作808、810、および812に関して説明されたようなコンテンツプラットフォーム150の他の機能は、これらの実装形態ではDSPによって実行され得る。この説明はコンバージョンという対話に注目しているが、このアーキテクチャおよび機能は、任意の他の対話(たとえば、インプレッションまたはクリック)、または対話の任意の組合せ(たとえば、インプレッション、クリック、および/またはコンバージョン)に拡張され得る。
コンピューティングシステムMPC1およびMPC2は、機械学習モデルを生成する(814)。ユーザプロファイルデータに基づいて新しい機械学習モデルが生成される各々の時間は、訓練セッションと呼ばれ得る。コンピューティングシステムMPC1およびMPC2は、クライアントデバイス110から受信されたユーザプロファイルの暗号化されたシェアに基づいて、機械学習モデルを訓練することができる。たとえば、コンピューティングシステムMPC1およびMPC2は、MPC技法を使用して、ユーザプロファイルのシェアに基づいてk-NNモデルを訓練することができる。
暗号計算、およびしたがって、モデル訓練と推測の両方の間にユーザのプライバシーとデータを保護するためにコンピューティングシステムMPC1およびMPC2に課される計算負荷を最小限にするために、または少なくとも減らすために、MPCクラスタ130は、ランダム投影技法、たとえばSimHashを使用して、2つのユーザプロファイルPiとPjの類似性を高速に、セキュアに、および確率的に定量化することができる。2つのユーザプロファイルPiとPjの類似性は、2つのユーザプロファイルPiとPjを表す2ビットベクトル間のハミング距離を決定することによって決定されてもよく、このハミング距離は、高い確率で2つのユーザプロファイル間のコサイン距離に比例する。
概念的に、各訓練セッションに対して、m個のランダム投影超平面U={U1, U2, ..., Um}が生成され得る。ランダム投影超平面は、ランダム投影平面とも呼ばれ得る。計算システムMPC1とMPC2との間の多段階計算の1つの目的は、k-NNモデルの訓練において使用される各ユーザプロファイルPiに対して長さmのビットベクトルBiを作成することである。このビットベクトルBiにおいて、各ビットBi,jは、投影平面Ujのうちの1つとユーザプロファイルPiのドット積の符号を表し、すなわち、すべてのj∈[1,m]に対してBi,j=sign(Uj・Pi)であり、ここで・は等しい長さの2つのベクトルのドット積を表記する。すなわち、各ビットは、ユーザプロファイルPiが平面Ujのどちらの側に位置しているかを表す。1というビット値は正の符号を表し、0というビット値は負の符号を表す。
多段階の計算の各々の最後において、2つのコンピューティングシステムMPC1とMPC2の各々は、平文の各ユーザプロファイルのためのビットベクトル、各ユーザプロファイルのシェア、および各ユーザプロファイルのためのラベルのシェアを含む中間結果を生成する。たとえば、計算システムMPC1に対する中間結果は、以下のTable 11(表12)に示されるデータであり得る。計算システムMPC2は、類似しているが各ユーザプロファイルおよび各ラベルのシェアが異なっている、中間結果を有する。追加のプライバシー保護をもたらすために、MPCクラスタ130の中の2つのサーバの各々は、m次元のビットベクトルの半分しか平文で得ることができず、たとえば、コンピューティングシステムMPC1が、すべてのm次元ビットベクトルの第1のm/2次元を得て、コンピューティングシステムMPC2が、すべてのm次元ビットベクトルの第2のm/2次元を得る。
単位長i≠jの2つの任意のユーザプロファイルベクトルPiおよびPjが与えられると、ランダム投影mの回数が十分に多いと仮定すると、2つのユーザプロファイルベクトルPiおよびPjに対するビットベクトルBiとBjの間のハミング距離は、高い確率でユーザプロファイルベクトルPiとPjの間のコサイン距離に比例することが示されている。
上で示された中間結果に基づいて、および、ビットベクトルBiは平文であるので、各コンピューティングシステムMPC1およびMPC2は、たとえば訓練によって、k-NNアルゴリズムを使用してそれぞれのk-NNモデルを独立に作成することができる。コンピューティングシステムMPC1およびMPC2は、同じまたは異なるk-NNアルゴリズムを使用することができる。k-NNモデルを訓練するための例示的なプロセスが、図10に示され、以下で説明される。k-NNモデルが訓練されると、アプリケーション112は、ユーザをユーザグループに追加するかどうかを決定するために、k-NNモデルにクエリすることができる。
アプリケーション112は、推測要求をMPCクラスタ130に出す(816)。この例では、アプリケーション112は、推測要求をコンピューティングシステムMPC1に送信する。他の例では、アプリケーション112は、推測要求をコンピューティングシステムMPC2に送信することができる。アプリケーション112は、推測要求を出せというコンテンツプラットフォーム150からの要求に応答して、推測要求を出すことができる。たとえば、コンテンツプラットフォーム150は、クライアントデバイス110のユーザが特定のユーザグループに追加されるべきであるかどうかを決定するためにk-NNモデルにクエリするように、アプリケーション112に要求することができる。この要求は、ユーザがユーザグループに追加されるべきであるかどうかを推測するための推測要求と呼ばれ得る。
推測要求を開始するために、コンテンツプラットフォーム150は、アプリケーション112に、推測要求トークンMinferを送信することができる。推測要求トークンMinferは、特定のドメインによって所有される特定の機械学習モデルをクエリすることをアプリケーション112が認められていることを、MPCクラスタ130の中のサーバが確認することを可能にする。モデルアクセス制御が任意選択である場合、推測要求トークンMinferは任意選択である。推測要求トークンMinferは、以下のTable 12(表13)において示され説明される以下の項目を有し得る。
この例では、推測要求トークンMinferは、7つの項目と、コンテンツプラットフォーム150の秘密鍵を使用して7つの項目に基づいて生成されるデジタル署名とを含む。eTLD+1は、有効なトップレベルドメイン(eTLD)に、パブリックサフィックスよりも1つ多いレベルを加えたものである。例示的なeTLD+1は、「example.com」であり、「.com」は、トップレベルドメインである。
特定のユーザに対する推測を要求するために、コンテンツプラットフォーム150は、推測要求トークンMinferを生成し、ユーザのクライアントデバイス110上で実行されるアプリケーション112にトークンを送信することができる。いくつかの実装形態では、コンテンツプラットフォーム150は、アプリケーション112だけがアプリケーション112の公開鍵に対応する機密の秘密鍵を使用して推測要求トークンMinferを復号できるように、その公開鍵を使用して推測要求トークンMinferを暗号化する。すなわち、コンテンツプラットフォームは、PubKeyEnc(Minfer, application_public_key)をアプリケーション112に送信することができる。
アプリケーション112は、推測要求トークンMinferを復号して検証することができる。アプリケーション112は、その秘密鍵を使用して、暗号化された推測要求トークンMinferを復号することができる。アプリケーション112は、(i)デジタル署名を生成するために使用されたコンテンツプラットフォーム150の秘密鍵に対応するコンテンツプラットフォーム150の公開鍵を使用してデジタル署名を検証し、(ii)トークン作成タイムスタンプが古くないこと、たとえば、タイムスタンプによって示される時間が、検証が行われる現在の時間から閾値の長さの時間以内にあることを確実にすることによって、推測要求トークンMinferを検証することができる。推測要求トークンMinferが有効である場合、アプリケーション112はMPCクラスタ130にクエリすることができる。
概念的に、推測要求は、機械学習モデルのモデル識別子、現在のユーザプロファイルPi、k(フェッチすべき最近傍の数)、任意選択で追加の信号(たとえば、コンテクスチュアル信号またはデジタルコンポーネント信号)、集約関数、および集約関数パラメータを含み得る。しかしながら、コンピューティングシステムMPC1またはMPC2のいずれかに平文形式でユーザプロファイルPiを漏洩するのを防ぎ、それによりユーザのプライバシーを守るために、アプリケーション112は、ユーザプロファイルPiを、MPC1およびMPC2のための2つのシェア[Pi,1]および[Pi,2]へとそれぞれ分割することができる。アプリケーション112は次いで、クエリのために、たとえばランダムにまたは疑似ランダムに、2つのコンピューティングシステムMPC1またはMPC2のうちの1つを選択することができる。アプリケーション112がコンピューティングシステムMPC1を選択する場合、アプリケーション112は、第1のシェア[Pi,1]および第2のシェアの暗号化されたバージョン、たとえばPubKeyEncrypt([Pi,2], MPC2)とともに、単一の要求をコンピューティングシステムMPC1に送信することができる。この例では、アプリケーション112は、コンピューティングシステムMPC1が[Pi,2]にアクセスするのを防ぐために、コンピューティングシステムMPC2の公開鍵を使用して第2のシェア[Pi,2]を暗号化し、これは、コンピューティングシステムMPC1が[Pi,1]および[Pi,2]からユーザプロファイルPiを再構築することを可能にする。
以下でより詳しく説明されるように、コンピューティングシステムMPC1およびMPC2は連携して、ユーザプロファイルPiに対するk個の最近傍を計算する。計算システムMPC1およびMPC2は次いで、いくつかの可能な機械学習技法(たとえば、二項分類、多クラス分類、回帰など)のうちの1つを使用して、k個の最近傍ユーザプロファイルに基づいて、ユーザグループにユーザを追加するかどうかを決定することができる。たとえば、集約関数は機械学習技法(たとえば、二項、多クラス、回帰)を特定することができ、集約関数パラメータは集約関数に基づき得る。
いくつかの実装形態では、集約関数パラメータは、コンテンツプラットフォーム150がユーザのためのk-NNモデルをクエリしているユーザグループのユーザグループ識別子を含み得る。たとえば、コンテンツプラットフォーム150は、ハイキングに関連しておりユーザグループ識別子「ハイキング」を有するユーザグループにユーザを追加するかどうかを知るのを望むことがある。この例では、集約関数パラメータは、「ハイキング」というユーザグループ識別子を含み得る。一般に、コンピューティングシステムMPC1およびMPC2は、ユーザグループのメンバーであるk個の最近傍の数に基づいて、たとえばそれらのラベルに基づいて、ユーザグループにユーザを追加するかどうかを決定することができる。
MPCクラスタ130は、推測結果をアプリケーション112に提供する(818)。この例では、クエリを受信したコンピューティングシステムMPC1は、推測結果をアプリケーション112に送信する。推測結果は、アプリケーション112がユーザを0個以上のユーザグループに追加すべきかどうかを示すことができる。たとえば、ユーザグループ結果は、ユーザグループのユーザグループ識別子を指定することができる。しかしながら、この例では、コンピューティングシステムMPC1は、ユーザグループを知るであろう。これを防ぐために、コンピューティングシステムMPC1は推測結果のシェアを計算することができ、コンピューティングシステムMPC2は同じ推測結果の別のシェアを計算することができる。コンピューティングシステムMPC2は、コンピューティングシステムMPC1にそのシェアの暗号化されたバージョンを提供することができ、シェアはアプリケーション112の公開鍵を使用して暗号化される。コンピューティングシステムMPC1は、推測結果のシェアおよびユーザグループ結果のコンピューティングシステムMPC2のシェアの暗号化されたバージョンを、アプリケーション112に提供することができる。アプリケーション112は、コンピューティングシステムMPC2のシェアを復号し、2つのシェアから推測結果を計算することができる。ユーザをユーザグループに追加するかどうかを決定するためにk-NNモデルにクエリするための例示的なプロセスが、図11に示され、以下で説明される。いくつかの実装形態では、コンピューティングシステムMPC2の結果をコンピューティングシステムMPC1が改竄するのを防ぐために、コンピューティングシステムMPC2は、アプリケーション112の公開鍵を使用してその結果を暗号化する前または後のいずれかに、結果にデジタル署名する。アプリケーション112は、MPC2の公開鍵を使用して、コンピューティングシステムMPC2のデジタル署名を検証する。
アプリケーション112は、ユーザのためのユーザグループリストを更新する(820)。たとえば、推測結果が、ユーザを特定のユーザグループに追加すべきであるというものである場合、アプリケーション112はユーザをユーザグループに追加することができる。いくつかの実装形態では、アプリケーション112は、ユーザをユーザグループに追加するための許可をユーザにプロンプトで求めることができる。
アプリケーション112は、コンテンツに対する要求を送信する(822)。たとえば、アプリケーション112は、デジタルコンポーネントスロットを有する電子リソースをロードしたことに応答して、デジタルコンポーネントに対する要求をコンテンツプラットフォーム150に送信することができる。いくつかの実装形態では、要求は、ユーザをメンバーとして含むユーザグループの1つまたは複数のユーザグループ識別子を含み得る。たとえば、アプリケーション112は、ユーザグループリストから1つまたは複数のユーザグループ識別子を取得し、要求とともにユーザグループ識別子を提供することができる。いくつかの実装形態では、コンテンツプラットフォームがユーザグループ識別子をユーザ、アプリケーション112、および/または要求を送信したクライアントデバイス112と関連付けることが可能になるのを防ぐための、技法が使用され得る。
コンテンツプラットフォーム150は、アプリケーション112にコンテンツを送信する(824)。たとえば、コンテンツプラットフォーム150は、ユーザグループ識別子に基づいてデジタルコンポーネントを選択し、デジタルコンポーネントをアプリケーション112に提供することができる。いくつかの実装形態では、コンテンツプラットフォーム150は、アプリケーション112と連携して、アプリケーション112からユーザグループ識別子が漏洩することなく、ユーザグループ識別子に基づいてデジタルコンポーネントを選択する。
アプリケーション112は、受信されたコンテンツを表示し、または別様に実装する(826)。たとえば、アプリケーション112は、電子リソースのデジタルコンポーネントスロットにおいて受信されたデジタルコンポーネントを表示することができる。
k-NNモデルを使用してユーザプロファイルを生成するための例示的なプロセス
図9は、ユーザプロファイルを生成し、ユーザプロファイルのシェアをMPCクラスタに送信するための、例示的なプロセス900を示す流れ図である。プロセス900の動作は、たとえば図1のクライアントデバイス110によって、たとえばクライアントデバイス110上で実行されるアプリケーション112によって実施され得る。プロセス900の動作は、非一時的であり得る1つまたは複数のコンピュータ可読媒体上に記憶された命令として実装されてもよく、1つまたは複数のデータ処理装置による命令の実行は、1つまたは複数のデータ処理装置にプロセス900の動作を実行させ得る。
ユーザのクライアントデバイス110上で実行されるアプリケーション112は、イベントのためのデータを受信する(902)。イベントは、たとえば、クライアントデバイス110における電子リソースの提示、クライアントデバイス110におけるデジタルコンポーネントの提示、クライアントデバイス110における電子リソースもしくはデジタルコンポーネントとのユーザ対話、またはデジタルコンポーネントに対するコンバージョン、または、提示される電子リソースもしくはデジタルコンポーネントとのユーザ対話もしくはそれに対するコンバージョンの欠如であり得る。ユーザによるユーザ対話のいくつかの例は、(a)特定のアイテムのリンクをクリックすること、(b)たとえばアイテムを仮想カートに追加する、またはアイテムを購入することによって、特定のアイテムに対するコンバージョンを完了すること、(c)ある設定された長さの時間より長く特定のアイテムを見ることのうちの1つまたは複数などの、ウェブページに提示される特定のアイテムとの対話であり得る。特定のユーザ対話の欠如のいくつかの例は、ユーザが一部の対話を実行するが後続の対話を欠いていること、たとえば、ユーザがデジタルコンポーネントを見るが、クリックしないこと、デジタルコンポーネントをクリックするがコンバージョンを行わない(たとえば、クリックして決済ウェブページに進むがアイテムを購入しないこと)などであり得る。コンバージョンは、異なる実装形態では異なるように定義され得る。たとえば、いくつかの実装形態では、コンバージョンは、ユーザが決済ページに進むことであり得る。ある実装形態では、コンバージョンは、ユーザがアイテムを購入しようとすることであり得る。他の実装形態では、コンバージョンは、ユーザがアイテムを購入することであり得る。イベントが発生すると、コンテンツプラットフォーム150は、ユーザのユーザプロファイルを生成する際に使用するために、イベントに関するデータをアプリケーション112に提供することができる。
アプリケーション112は、各コンテンツプラットフォーム150に対する異なるユーザプロファイルを生成することができる。すなわち、特定のコンテンツプラットフォーム150のための、ユーザのユーザプロファイルは、その特定のコンテンツプラットフォーム150から受信されたイベントデータのみを含み得る。これは、他のコンテンツプラットフォームのイベントに関するデータをコンテンツプラットフォームと共有しないことによって、ユーザプライバシーを守る。いくつかの実装形態では、アプリケーション112は、コンテンツプラットフォーム150の要求ごとに、コンテンツプラットフォーム150によって所有される各機械学習モデルに対する異なるユーザプロファイルを生成し得る。設計目標に基づいて、異なる機械学習モデルは異なる訓練データを必要とし得る。たとえば、ユーザをユーザグループに追加するかどうかを決定するために、第1のモデルが使用され得る。ユーザがデジタルコンポーネントと対話するかどうかを予測するために、第2のモデルが使用され得る。この例では、第2のモデルのためのユーザプロファイルは、第1のモデルのためのユーザプロファイルが有しない追加のデータ、たとえばユーザがデジタルコンポーネントと対話したかどうかを含み得る。
コンテンツプラットフォーム150は、プロファイル更新トークンMupdateの形式でイベントデータを送信することができる。プロファイル更新トークンMupdateは、上記のTable 1(表1)において示され説明される以下の項目を有する。
モデル識別子は、その訓練のためにユーザプロファイルが使用される、またはユーザグループ推測を行うために使用される、機械学習モデル、たとえばk-NNモデルを特定する。プロファイル記録は、イベントに固有のデータ、たとえばイベントのタイプ、電子リソースもしくはデジタルコンポーネント、イベントが発生した時間、および/または、機械学習モデルを訓練する際およびユーザグループ推測を行う際にコンテンツプラットフォーム150が使用することを望む、他の適切なインベントデータを含む、n次元特徴ベクトルである。デジタル署名は、コンテンツプラットフォーム150の秘密鍵を使用して7つの項目に基づいて生成される。
いくつかの実装形態では、送信の間に更新トークンMupdateを保護するために、コンテンツプラットフォーム150は、更新トークンMupdateをアプリケーション112に送信する前に更新トークンMupdateを暗号化する。たとえば、コンテンツプラットフォーム150は、アプリケーションの公開鍵、たとえばPubKeyEnc(Mupdate,application_public_key)を使用して、更新トークンMupdateを暗号化することができる。
いくつかの実装形態では、コンテンツプラットフォーム150は、プロファイル更新トークンMupdateの形式でイベントデータまたは更新要求を符号化することなく、イベントデータをアプリケーション112に送信することができる。たとえば、アプリケーション112の内側で実行されるコンテンツプラットフォーム150に由来するスクリプトは、スクリプトAPIを介してイベントデータおよび更新要求をアプリケーション112に直接送信することができ、アプリケーション112は、W3Cに由来するセキュリティモデルおよび/またはHTTPSに依拠して、改竄または漏洩からイベントデータおよび更新要求を保護する。
アプリケーション112は、イベントのためのデータを記憶する(904)。イベントデータが暗号化される場合、アプリケーション112は、イベントデータを暗号化するために使用される公開鍵に対応する秘密鍵を使用して、イベントデータを復号することができる。イベントデータが更新トークンMupdateの形式で送信される場合、アプリケーション112は、イベントデータを記憶する前に更新トークンMupdateを検証することができる。アプリケーション112は、(i)デジタル署名を生成するために使用されたコンテンツプラットフォーム150の秘密鍵に対応するコンテンツプラットフォーム150の公開鍵を使用してデジタル署名を検証し、(ii)トークン作成タイムスタンプが古くないこと、たとえば、タイムスタンプによって示される時間が、検証が行われている現在の時間から閾値の長さの時間内にあることを確実にすることによって、更新トークンMupdateを検証することができる。更新トークンMupdateが有効である場合、アプリケーション112は、たとえばn次元プロファイル記録を記憶することによって、イベントデータを記憶することができる。いずれの検証も失敗する場合、アプリケーション112は、たとえばイベントデータを記憶しないことによって、更新要求を無視し得る。
各機械学習モデルに対して、たとえば各々の一意なモデル識別子に対して、アプリケーション112は、そのモデルのためのイベントデータを記憶することができる。たとえば、アプリケーション112は、各々の一意なモデル識別子に対して、n次元特徴ベクトルのセットを含むデータ構造(たとえば、更新トークンのプロファイル記録)を維持し、各特徴ベクトルに対して、期限切れ時間を維持することができる。モデル識別子の例示的なデータ構造が上記のTable 2(表2)に示される。
有効な更新トークンMupdateを受信すると、アプリケーション112は、特徴ベクトルおよび更新トークンMupdateの期限切れ時間をデータ構造に追加することによって、更新トークンMupdateに含まれるモデル識別子のデータ構造を更新することができる。定期的に、アプリケーション112は、データ構造から期限切れの特徴ベクトルを除去して、記憶サイズを減らすことができる。
アプリケーション112は、ユーザプロファイルを生成するかどうかを決定する(906)。たとえば、アプリケーション112は、コンテンツプラットフォーム150からの要求に応答して、特定の機械学習モデルのためのユーザプロファイルを生成し得る。この要求は、ユーザプロファイルを生成し、ユーザプロファイルのシェアをコンテンツプラットフォーム150に返すことであり得る。いくつかの実装形態では、アプリケーション112は、たとえば生成されたユーザプロファイルをコンテンツプラットフォーム150に送信するのではなく、それらをMPCクラスタ130に直接アップロードし得る。ユーザプロファイルのシェアを生成して返すための要求のセキュリティを確保するために、コンテンツプラットフォーム150は、アップロードトークンMuploadをアプリケーション112に送信することができる。
アップロードトークンMuploadは、更新トークンMupdateと類似しているが異なる動作を伴う(たとえば、「ユーザプロファイルを蓄積する」の代わりに「サーバを更新する」)構造を有し得る。アップロードトークンMuploadは、動作遅延のための追加の項目も含み得る。動作遅延は、アプリケーション112がより多くのイベントデータ、たとえばより多くの特徴ベクトルを蓄積する間、ユーザプロファイルのシェアの計算とアップロードを遅らせるように、アプリケーション112に指示することができる。これにより、機械学習モデルは、何らかの重要なイベント、たとえばユーザグループへの加入の前および後で直ちにユーザイベントデータを獲得することが可能になる。動作遅延は遅延期間を指定することができる。この例では、デジタル署名が、コンテンツプラットフォームの秘密鍵を使用して、Table 1(表1)の他の7つの項目および動作遅延に基づいて生成され得る。コンテンツプラットフォーム150は、送信の間にアップロードトークンMuploadを保護するためにアプリケーションの公開鍵を使用して、更新トークンMupdateと同様の方式で、たとえばPubKeyEnc(Mupload, application_public_key)により、アップロードトークンMuploadを暗号化することができる。
アプリケーション112は、アップロードトークンMuploadを受信し、暗号化されている場合はアップロードトークンMuploadを復号し、アップロードトークンMuploadを検証することができる。この検証は、更新トークンMupdateが検証される方法と同様であり得る。アプリケーション112は、(i)デジタル署名を生成するために使用されたコンテンツプラットフォーム150の秘密鍵に対応するコンテンツプラットフォーム150の公開鍵を使用してデジタル署名を検証し、(ii)トークン作成タイムスタンプが古くないこと、たとえば、タイムスタンプによって示される時間が、検証が行われている現在の時間から閾値の長さの時間内にあることを確実にすることによって、アップロードトークンMuploadを検証することができる。アップロードトークンMuploadが有効である場合、アプリケーション112は、ユーザプロファイルを生成することができる。いずれの検証も失敗する場合、アプリケーション112は、たとえばユーザプロファイルを生成しないことによって、アップロード要求を無視し得る。
いくつかの実装形態では、コンテンツプラットフォーム150は、プロファイルアップロードトークンMuploadの形式でアップロード要求を符号化することなく、ユーザプロファイルをアップロードするようにアプリケーション112に要求することができる。たとえば、アプリケーション112の内側で実行されるコンテンツプラットフォーム150に由来するスクリプトは、スクリプトAPIを介してアップロード要求をアプリケーション112に直接送信することができ、アプリケーション112は、W3Cに由来するセキュリティモデルおよび/またはHTTPSに依拠して、改竄または漏洩からアップロード要求を保護する。
ユーザプロファイルを生成しないという決定が行われる場合、プロセス900は、動作902に戻り、コンテンツプラットフォーム150からの追加のイベントデータを待機することができる。ユーザプロファイルを生成するという決定が行われる場合、アプリケーション112はユーザプロファイルを生成する(908)。
アプリケーション112は、記憶されているイベントデータ、たとえばTable 2(表2)に示されるデータ構造に記憶されているデータに基づいて、ユーザプロファイルを生成することができる。アプリケーション112は、要求に含まれるモデル識別子、たとえば、アップロードトークンMuploadの項目1のコンテンツプラットフォームeTLD+1ドメインおよび項目2のモデル識別子に基づいて、適切なデータ構造にアクセスすることができる。
アプリケーション112は、まだ期限切れになっていないデータ構造の中のn次元特徴ベクトルを調査期間に集約することによって、ユーザプロファイルを計算することができる。たとえば、ユーザプロファイルは、まだ期限切れになっていない調査期間におけるデータ構造の中のn次元特徴ベクトルの平均であり得る。この結果は、プロファイル空間におけるユーザを表すn次元特徴ベクトルである。任意選択で、アプリケーション112は、たとえばL2正規化を使用して、n次元特徴ベクトルを単位長に正規化し得る。コンテンツプラットフォーム150は、任意選択の調査期間を指定し得る。
いくつかの実装形態では、減衰率は、ユーザプロファイルを計算するために使用され得る。機械学習モデルを訓練するためにMPCクラスタ130を使用する多数のコンテンツプラットフォーム150があることがあり、各コンテンツプラットフォーム150は複数の機械学習モデルを有することがあるので、ユーザ特徴ベクトルデータを記憶することは、かなりのデータストレージ要件をもたらし得る。減衰技法を使用することで、機械学習モデルを訓練するためにユーザプロファイルを生成する目的で各クライアントデバイス110に記憶されるデータの量をかなり減らすことができる。
所与の機械学習モデルに対して、k個の特徴ベクトル{F1,F2,...Fk}があり、その各々がn次元ベクトルおよび対応する古さ(record_age_in_secondsi)であると仮定する。アプリケーション112は、以下の関係13を使用してユーザプロファイルを計算することができる。
関係13:
この関係において、パラメータrecord_age_in_secondsiは、プロファイル記録がクライアントデバイス110に記憶されている秒単位の時間の長さであり、パラメータdecay_rate_in_secondsは、秒単位のプロファイル記録の減衰率(たとえば、更新トークンMupdateの項目6において受信される)である。このようにすると、より新しい特徴ベクトルはより重みが大きくなる。これはまた、一定のストレージ容量のもとで、アプリケーション112が特徴ベクトルを記憶するのを避け、プロファイル記録のみを記憶することを可能にする。アプリケーション112は、各モデル識別子に対して複数の個々の特徴ベクトルを記憶するのではなく、各モデル識別子のためのn次元ベクトルPおよびタイムスタンプuser_profile_timeを記憶するだけでよい。
n次元ベクトルユーザプロファイルPおよびタイムスタンプを初期化するために、アプリケーションは、ベクトルPを、各次元の値が0であるようなn次元のベクトルに設定し、user_profile_timeをエポックに設定することができる。任意の時間において新しい特徴ベクトルFxを用いてユーザプロファイルPを更新するために、アプリケーション112は以下の関係14を使用することができる。
関係14:
アプリケーション112はまた、関係14を用いてユーザプロファイルを更新するとき、ユーザプロファイル時間を現在の時間(current_time)に更新することができる。アプリケーション112が上記の減衰率アルゴリズムを用いてユーザプロファイルを計算する場合、動作904は省略されることに留意されたい。
アプリケーション112は、ユーザプロファイルのシェアを生成する(910)。アプリケーション112は、疑似ランダム関数を使用して、ユーザプロファイルPi(たとえば、n次元ベクトルP)をシェアへと分割することができる。すなわち、アプリケーション112は、疑似ランダム関数PRF(Pi)を使用して、ユーザプロファイルPiの2つのシェア{[Pi,1],[Pi,2]}を生成することができる。厳密な分割は、アプリケーション112により使用される秘密分散アルゴリズムおよび暗号ライブラリに依存し得る。いくつかの実装形態では、アプリケーションは、Shamirの秘密分散方式を使用する。1つまたは複数のラベルのシェアが提供されている場合、アプリケーション112はラベルのシェアも生成することができる。
アプリケーション112は、ユーザプロファイルPiのシェア{[Pi,1],[Pi,2]}を暗号化する(912)。たとえば、上で説明されたように、アプリケーション112は、ユーザプロファイルおよびラベルのシェアを含む合成メッセージを生成し、合成メッセージを暗号化して暗号化結果PubKeyEncrypt([Pi,1] || [labeli,1], MPC1)およびPubKeyEncrypt([Pi,2] || [labeli,2], MPC2)を取得することができる。MPCクラスタ130の暗号鍵を使用してシェアを暗号化することは、コンテンツプラットフォーム150が平文のユーザプロファイルにアクセスできるようになるのを防ぐ。アプリケーション112は、暗号化されたシェアをコンテンツプラットフォームに送信する(914)。アプリケーション112が秘密シェアをコンピューティングシステムMPC1およびMPC2に直接送信する場合、動作914は省略されることに留意されたい。
k-NNモデルを生成して使用するための例示的なプロセス
図10は、機械学習モデルを生成するための例示的なプロセス1000を示す流れ図である。プロセス1000の動作は、たとえば、図1のMPCクラスタ130によって実施され得る。プロセス1000の動作は、非一時的であり得る1つまたは複数のコンピュータ可読媒体上に記憶された命令として実装されてもよく、1つまたは複数のデータ処理装置による命令の実行は、1つまたは複数のデータ処理装置にプロセス1000の動作を実行させ得る。
MPCクラスタ130は、ユーザプロファイルのシェアを取得する(1002)。コンテンツプラットフォーム150は、ユーザプロファイルのシェアをMPCクラスタ130に送信することによって機械学習モデルを訓練するようにMPCクラスタ130に要求することができる。コンテンツプラットフォーム150は、所与の期間にわたって機械学習モデルのためにクライアントデバイス110から受信される暗号化されたシェアにアクセスし、それらのシェアをMPCクラスタ130にアップロードすることができる。
たとえば、コンテンツプラットフォーム150は、各ユーザプロファイルPiに対する、ユーザプロファイルの暗号化された第1のシェアおよびそのラベルの暗号化された第1のシェア(たとえば、PubKeyEncrypt([Pi,1] || [labeli,1]))を、コンピューティングシステムMPC1に送信することができる。同様に、コンテンツプラットフォーム150は、各ユーザプロファイルPiに対する、ユーザプロファイルの暗号化された第2のシェアおよびそのラベルの暗号化された第2のシェア(たとえば、PubKeyEncrypt([Pi,2] || [labeli,2])を、コンピューティングシステムMPC2に送信することができる。
アプリケーション112がユーザプロファイルの秘密シェアをMPCクラスタ130に直接送信するいくつかの実装形態では、コンテンツプラットフォーム150は、訓練要求をMPCクラスタ130に送信することによって機械学習モデルを訓練するようにMPCクラスタ130に要求することができる。
コンピューティングシステムMPC1およびMPC2は、ランダム投影平面を作成する(1004)。コンピューティングシステムMPC1およびMPC2は、m個のランダム投影平面U={U1,U2,...,Um}を連携して作成することができる。これらのランダム投影平面は、2つのコンピューティングシステムMPC1とMPC2の間の秘密シェアのままであるべきである。いくつかの実装形態では、コンピューティングシステムMPC1およびMPC2は、ランダム投影平面を作成し、Diffie-Hellman鍵交換技法を使用してそれらの秘密を維持する。
以下でより詳しく説明されるように、コンピューティングシステムMPC1およびMPC2は、各ユーザプロファイルのそれらのシェアを各ランダム投影平面に投影し、各ランダム投影平面に対して、ユーザプロファイルのシェアがランダム投影平面の一方の側にあるかどうかを決定する。各コンピューティングシステムMPC1およびMPC2は、各ランダム投影の結果に基づいて、ユーザプロファイルの秘密シェアから秘密シェアの中のビットベクトルを形成することができる。ユーザのためのビットベクトルの部分的な知識、たとえば、ユーザプロファイルPiが投影平面Ukの一方の側にあるかどうかは、コンピューティングシステムMPC1またはMPC2のいずれかが、Piの分布についての何らかの知識を獲得することを可能にし、これは、ユーザプロファイルPiが単位長を有するという以前の知識に付加するものである。コンピューティングシステムMPC1およびMPC2がこの情報へのアクセスを得るのを防ぐために(たとえば、これがユーザプライバシーおよび/もしくはデータセキュリティのために要求される、または好ましい実装形態では)、いくつかの実装形態では、ランダム投影平面は秘密シェアの中にあるので、コンピューティングシステムMPC1もMPC2も、平文でランダム投影平面にアクセスすることができない。他の実装形態では、任意選択の動作1006~1008において説明されたように、ランダムビット反転パターンが、秘密シェアアルゴリズムを使用してランダム投影結果にわたって適用され得る。
秘密シェアを介してビットをどのように反転させるかを示すために、同じ確率で値が0または1のいずれかである2つの秘密xおよびyがあると仮定する。等値演算[x]==[y]は、y==0である場合xのビットを反転させ、y==1である場合xのビットを保つ。この例では、演算は50%の確率でビットxをランダムに反転させる。この演算は、2つのコンピューティングシステムMPC1とMPC2の間のリモートプロシージャコール(RPC)を必要とすることがあり、ラウンドの回数はデータサイズおよび選択される秘密シェアアルゴリズムに依存する。
各コンピューティングシステムMPC1およびMPC2は、秘密m次元ベクトルを作成する(1006)。コンピューティングシステムMPC1は、秘密m次元ベクトル{S1,S2,...,Sm}を作成することができ、各要素Siは等しい確率で0または1のいずれかの値を有する。コンピューティングシステムMPC1は、m次元ベクトルを2つのシェア、すなわち第1のシェア{[S1,1],[S2,1],...[Sm,1]}および第2のシェア{[S1,2],[S2,2],...[Sm,2]}へと分割する。コンピューティングシステムMPC1は、第1のシェアを秘密に保ち、第2のシェアをコンピューティングシステムMPC2に提供することができる。コンピューティングシステムMPC1は次いで、m次元ベクトル{S1,S2,...,Sm}を廃棄することができる。
コンピューティングシステムMPC2は、秘密m次元ベクトル{T1,T2,...,Tm}を作成することができ、各要素Tiは0または1のいずれかの値を有する。コンピューティングシステムMPC2は、m次元ベクトルを2つのシェア、すなわち第1のシェア{[T1,1],[T2,1],...[Tm,1]}および第2のシェア{[T1,2],[T2,2],...[Tm,2]}へと分割する。コンピューティングシステムMPC2は、第1のシェアを秘密に保ち、第2のシェアをコンピューティングシステムMPC1に提供することができる。コンピューティングシステムMPC2は次いで、m次元ベクトル{T1,T2,...,Tm}を廃棄することができる。
2つのコンピューティングシステムMPC1およびMPC2は、セキュアMPC技法を使用してビット反転パターンのシェアを計算する(1008)。コンピューティングシステムMPC1およびMPC2は、コンピューティングシステムMPC1とMPC2との間で複数のラウンドトリップを伴うセキュアシェアMPC等値テストを使用して、ビット反転パターンのシェアを計算することができる。ビット反転パターンは、上で説明された演算[x]==[y]に基づき得る。すなわち、ビット反転パターンは{S1==T1,S2==T2,...Sm==Tm}であり得る。各STi=(Si==Ti)とする。各STiは、0または1のいずれかの値を有する。MPC演算が完了した後、コンピューティングシステムMPC1は、ビット反転パターンの第1のシェア{[ST1,1],[ST2,1],...[STm,1]}を有し、コンピューティングシステムMPC2は、ビット反転パターンの第2のシェア{[ST1,2],[ST2,2],...[STm,2]}を有する。各STiのシェアは、2つのコンピューティングシステムMPC1およびMPC2のいずれか1つに見えない方法で、2つのコンピューティングシステムMPC1およびMPC2がビットベクトルの中のビットを反転させることを可能にする。
各コンピューティングシステムMPC1およびMPC2は、各ユーザプロファイルのシェアを各ランダム投影平面に投影する(1010)。すなわち、コンピューティングシステムMPC1がシェアを受信した各ユーザプロファイルに対して、コンピューティングシステムMPC1は、シェア[Pi,1]を各投影平面Ujに投影することができる。ユーザプロファイルの各シェアに対して、および各ランダム投影平面Ujに対してこの演算を実行すると、z×m次元の行列Rが生じ、zは利用可能なユーザプロファイルの数であり、mはランダム投影平面の数である。行列Rの中の各要素Ri,jは、投影平面Ujとシェア[Pi,1]とのドット積を計算することによって決定することができ、たとえば、Ri,j=Uj・[Pi,1]である。演算・は、等しい長さの2つのベクトルのドット積を示す。
ビット反転が使用される場合、コンピューティングシステムMPC1は、コンピューティングシステムMPC1とMPC2との間で秘密分散されるビット反転パターンを使用して、行列の中の要素Ri,jのうちの1つまたは複数の値を修正することができる。行列Rの中の各要素Ri,jに対して、コンピューティングシステムMPC1は、要素Ri,jの値として、[STj,1]==sign(Ri,j)を計算することができる。したがって、要素Ri,jの符号は、ビット反転パターンの中のビット[STj,1]の中の対応するビットが0という値を有する場合、反転される。この計算は、コンピューティングシステムMPC2への複数のRPCを必要とし得る。
同様に、コンピューティングシステムMPC2がシェアを受信した各ユーザプロファイルに対して、コンピューティングシステムMPC2は、シェア[Pi,2]を各投影平面Ujに投影することができる。ユーザプロファイルの各シェアに対して、および各ランダム投影平面Ujに対してこの演算を実行すると、z×m次元の行列R'が生じ、zは利用可能なユーザプロファイルの数であり、mはランダム投影平面の数である。行列R'の中の各要素Ri,j'は、投影平面Ujとシェア[Pi,2]とのドット積を計算することによって決定することができ、たとえば、Ri,j'=Uj・[Pi,2]である。演算・は、等しい長さの2つのベクトルのドット積を示す。
ビット反転が使用される場合、コンピューティングシステムMPC2は、コンピューティングシステムMPC1とMPC2との間で秘密分散されるビット反転パターンを使用して、行列の中の要素Ri,j'のうちの1つまたは複数の値を修正することができる。行列Rの中の各要素Ri,j'に対して、コンピューティングシステムMPC2は、要素Ri,j'の値として、[STj,2]==sign(Ri,j')を計算することができる。したがって、要素Ri,j'の符号は、ビット反転パターンの中のビットSTjの中の対応するビットが0という値を有する場合、反転される。この計算は、コンピューティングシステムMPC1への複数のRPCを必要とし得る。
コンピューティングシステムMPC1およびMPC2は、ビットベクトルを再構築する(1012)。コンピューティングシステムMPC1およびMPC2は、厳密に同じサイズを有する行列RおよびR'に基づいて、ユーザプロファイルのためのビットベクトルを再構築することができる。たとえば、コンピューティングシステムMPC1は、行列Rの列の一部分を送信することができ、コンピューティングシステムMPC2は、MPC1に行列R'の列の残りの部分を送信することができる。特定の例では、コンピューティングシステムMPC1は、コンピューティングシステムMPC2に行列Rの列の第1の半分を送信することができ、コンピューティングシステムMPC2は、MPC1に行列R'の列の第2の半分を送信することができる。この例では、列が、水平方向の再構築のために使用され、ユーザのプライバシーを保護するために好まれるが、垂直方向の再構築のための他の例では、行が使用され得る。
この例では、コンピューティングシステムMPC2は、行列R'の列の第1の半分を、コンピューティングシステムMPC1から受信された行列Rの列の第1の半分と組み合わせて、ビットベクトルの第1の半分(すなわち、m/2次元)を平文で再構築することができる。同様に、コンピューティングシステムMPC1は、行列Rの列の第2の半分を、コンピューティングシステムMPC2から受信された行列R'の列の第2の半分と組み合わせて、ビットベクトルの第2の半分(すなわち、m/2次元)を平文で再構築することができる。概念的には、コンピューティングシステムMPC1およびMPC2は今や、2つの行列RおよびR'の中の対応するシェアを組み合わせて、ビット行列Bを平文で再構築した。このビット行列Bは、機械学習モデルのためにコンテンツプラットフォーム150からそれについてのシェアが受信された各ユーザプロファイルに対する、(各投影平面へと投影された)投影結果のビットベクトルを含む。MPCクラスタ130の中の2つのサーバの各々1つは、ビット行列Bの半分を平文で所有する。
しかしながら、ビット反転が使用される場合、コンピューティングシステムMPC1およびMPC2は、機械学習モデルのために固定されたランダムパターンの中の行列RおよびR'の要素の反転されたビットを有する。このランダムビット反転パターンは、2つのコンピューティングシステムMPC1およびMPC2のいずれかには見えないので、コンピューティングシステムMPC1もMPC2も、投影結果のビットベクトルから元のユーザプロファイルを推測することができない。この暗号設計はさらに、MPC1またはMPC2が、ビットベクトルを水平方向に区分することによって元のユーザプロファイルを推測するのを防ぎ、すなわち、コンピューティングシステムMPC1が投影結果のビットベクトルの第2の半分を平文で保持し、コンピューティングシステムMPC2が投影結果のビットベクトルの第1の半分を平文で保持する。
コンピューティングシステムMPC1およびMPC2は、機械学習モデルを生成する(1014)。コンピューティングシステムMPC1は、ビットベクトルの第2の半分を使用してk-NNモデルを生成することができる。同様に、コンピューティングシステムMPC2は、ビットベクトルの第1の半分を使用してk-NNモデルを生成することができる。行列のビット反転および水平区分を使用したモデルの生成により、多層防御原理が適用されて、モデルを生成するために使用されるユーザプロファイルの秘密を保護する。
一般に、各k-NNモデルは、ユーザのセットのユーザプロファイル間のコサイン類似性(または距離)を表す。コンピューティングシステムMPC1によって生成されるk-NNモデルは、ビットベクトルの第2の半分間の類似性を表し、コンピューティングシステムMPC2によって生成されるk-NNモデルは、ビットベクトルの第1の半分間の類似性を表す。たとえば、各k-NNモデルは、ビットベクトルのその半分間のコサイン類似性を定義することができる。
コンピューティングシステムMPC1およびMPC2によって生成される2つのk-NNモデルはk-NNモデルと呼ばれることがあり、これは上で説明されたような一意なモデル識別子を有する。コンピューティングシステムMPC1およびMPC2は、それらのモデルと、モデルを生成するために使用される各ユーザプロファイルに対するラベルのシェアとを記憶することができる。コンテンツプラットフォーム150は次いで、ユーザのためのユーザグループについて推測を行うようにモデルにクエリすることができる。
k-NNモデルを使用してユーザグループを推測するための例示的なプロセス
図11は、機械学習モデルを使用してユーザをユーザグループに追加するための例示的なプロセス1100を示す流れ図である。プロセス1100の動作は、たとえば図1のMPCクラスタ130およびクライアントデバイス110、たとえばクライアントデバイス110上で実行されるアプリケーション112によって実施され得る。プロセス1100の動作は、非一時的であり得る1つまたは複数のコンピュータ可読媒体上に記憶された命令として実装されてもよく、1つまたは複数のデータ処理装置による命令の実行は、1つまたは複数のデータ処理装置にプロセス1100の動作を実行させ得る。
MPCクラスタ130は、所与のユーザプロファイルに対する推測要求を受信する(1102)。ユーザのクライアントデバイス110上で実行されるアプリケーション112は、たとえばコンテンツプラットフォーム150からの要求に応答して、推測要求をMPCクラスタ130に送信することができる。たとえば、コンテンツプラットフォーム150は、推測要求をMPCクラスタ130に出すようにアプリケーション112に要求するために、アップロードトークンMinferをアプリケーション112に送信することができる。推測要求は、ユーザが任意の数のユーザグループに追加されるべきであるかどうかをクエリするためのものであり得る。
推測要求トークンMinferは、ユーザの所与のユーザプロファイルのシェア、機械学習モデル(たとえば、k-NNモデル)のモデル識別子および推測のために使用されるべき所有者ドメイン、推測のために使用されるべき所与のユーザプロファイルの最近傍の数k、追加の信号(たとえば、コンテクスチュアル信号またはデジタルコンポーネント信号)、推測のために使用されるべき集約関数および推測のために使用されるべき任意の集約関数パラメータ、ならびに、所有者ドメイン機密秘密鍵を使用して所有者ドメインにより作成される上記の情報すべてにわたる署名を含み得る。
上で説明されたように、コンピューティングシステムMPC1またはMPC2のいずれかに平文形式で所与のユーザプロファイルPiを漏洩するのを防ぎ、それによりユーザのプライバシーを守るために、アプリケーション112は、所与のユーザプロファイルPiを、MPC1およびMPC2のための2つのシェア[Pi,1]および[Pi,2]へとそれぞれ分割することができる。アプリケーション112は次いで、所与のユーザプロファイルの第1のシェア[Pi,1]および第2のシェアの暗号化されたバージョン、たとえば所与のユーザプロファイルのPubKeyEncrypt([Pi,2],MPC2)とともに、コンピューティングシステムMPC1に単一の推測要求を送信することができる。MPCクラスタ130が推測要求を認証できるように、推測要求は推測要求トークンMinferも含み得る。第1のシェアおよび暗号化された第2のシェアを含む推測要求を送信することによって、アプリケーション112によって送信される進行中の要求の数が減り、クライアントデバイス110において計算および電池の節約をもたらす。
他の実装形態では、アプリケーション112は、所与のユーザプロファイルの第1のシェア[Pi,1]をコンピューティングシステムMPC1に送信し、所与のユーザプロファイルの第2のシェア[Pi,2]をコンピューティングシステムMPC2に送信することができる。コンピューティングシステムMPC1を通ることなく、所与のユーザプロファイルの第2のシェア[Pi,2]をコンピューティングシステムMPC2に送信することによって、コンピューティングシステムMPC1が所与のユーザプロファイルの第2のシェア[Pi,2]にアクセスするのを防ぐために、第2のシェアが暗号化される必要はない。
各コンピューティングシステムMPC1およびMPC2は、秘密分散表現で、所与のユーザプロファイルに対するk個の最近傍を特定する(1104)。コンピューティングシステムMPC1は、所与のユーザプロファイルの第1のシェア[Pi,1]を使用して、所与のユーザプロファイルのビットベクトルの半分を計算することができる。ビットベクトルを生成するために、コンピューティングシステムMPC1は、図10のプロセス1000の動作1010および1012を使用することができる。すなわち、コンピューティングシステムMPC1は、k-NNモデルのために生成されたランダム投影ベクトルを使用して、所与のユーザプロファイルのシェア[Pi,1]を投影し、所与のユーザプロファイルのためのビットベクトルの秘密シェアを作成することができる。k-NNモデルを生成するためにビット反転が使用された場合、コンピューティングシステムMPC1は次いで、k-NNモデルを生成するために使用されたビット反転パターンの第1のシェア{[ST1,1],[ST2,1],...[STm,1]}を使用して、所与のユーザプロファイルのためのビットベクトルの秘密シェアの要素を修正することができる。
同様に、コンピューティングシステムMPC1は、所与のユーザプロファイルの暗号化された第2のシェアPubKeyEncrypt([Pi,2],MPC2)を、コンピューティングシステムMPC2に提供することができる。コンピューティングシステムMPC2は、その秘密鍵を使用して所与のユーザプロファイルの第2のシェア[Pi,2]を復号し、所与のユーザプロファイルの第2のシェア[Pi,2]を使用して所与のユーザプロファイルのためのビットベクトルの半分を計算することができる。すなわち、コンピューティングシステムMPC2は、k-NNモデルのために生成されたランダム投影ベクトルを使用して、所与のユーザプロファイルのシェア[Pi,2]を投影し、所与のユーザプロファイルのためのビットベクトルを作成することができる。k-NNモデルを生成するためにビット反転が使用された場合、コンピューティングシステムMPC2は次いで、k-NNモデルを生成するために使用されたビット反転パターンの第2のシェア{[ST1,2],[ST2,2],...[STm,2]}を使用して、所与のユーザプロファイルのためのビットベクトルの要素を修正することができる。コンピューティングシステムMPC1およびMPC2は次いで、図10の動作1012において説明されたように、水平方向の区分を用いてビットベクトルを再構築する。再構築の完了の後、コンピューティングシステムMPC1は、所与のユーザプロファイルのためのビットベクトル全体の第1の半分を有し、コンピューティングシステムMPC2は、所与のユーザプロファイルのためのビットベクトル全体の第2の半分を有する。
各コンピューティングシステムMPC1およびMPC2は、所与のユーザプロファイルのためのビットベクトルのその半分およびそのk-NNモデルを使用して、k'個の最近傍ユーザプロファイルを特定し、k'=a×kであり、aは実際の生産データおよび統計分析に基づいて経験的に決定される。たとえば、a=3または別の適切な数である。コンピューティングシステムMPC1は、ビットベクトル全体の第1の半分と、k-NNモデルの各ユーザプロファイルに対するビットベクトルとの間のハミング距離を計算することができる。コンピューティングシステムMPC1は次いで、計算されたハミング距離に基づいて、k'個の最近傍、たとえば最低のハミング距離を有するk'個のユーザプロファイルを特定する。言い換えると、コンピューティングシステムMPC1は、所与のユーザプロファイルのシェアおよび複数のユーザプロファイルを使用して訓練されるk最近傍モデルに基づいて、最近傍ユーザプロファイルのセットを特定する。表形式の例示的な結果が、以下のTable 13(表14)に示される。
Table 13(表14)において、各行は、特定の最近傍ユーザプロファイルのためのものであり、そのユーザプロファイルと、コンピューティングシステムMPC1によって計算される所与のユーザプロファイルとの間のハミング距離を含む。特定の最近傍ユーザプロファイルのための行はまた、そのユーザプロファイルの第1のシェアと、そのユーザプロファイルと関連付けられるラベルの第1のシェアとを含む。
同様に、コンピューティングシステムMPC2は、ビットベクトル全体の第2の半分と、k-NNモデルの各ユーザプロファイルに対するビットベクトルとの間のハミング距離を計算することができる。コンピューティングシステムMPC2は次いで、計算されたハミング距離に基づいて、k'個の最近傍、たとえば最低のハミング距離を有するk'個のユーザプロファイルを特定する。表形式の例示的な結果が、以下のTable 14(表15)に示される。
Table 14(表15)において、各行は、特定の最近傍ユーザプロファイルのためのものであり、そのユーザプロファイルと、コンピューティングシステムMPC2によって計算される所与のユーザプロファイルとの間のハミング距離を含む。特定の最近傍ユーザプロファイルのための行はまた、そのユーザプロファイルの第2のシェアと、そのユーザプロファイルと関連付けられるラベルの第2のシェアとを含む。
コンピューティングシステムMPC1およびMPC2は、行識別子(行ID)とハミング距離のペアのリストを互いに交換することができる。その後、各コンピューティングシステムMPC1およびMPC2は、同じアルゴリズムおよび入力データを用いてk個の最近傍を独立に選択することができる。たとえば、コンピューティングシステムMPC1は、コンピューティングシステムMPC1とMPC2の両方からの部分的なクエリ結果に共通の行識別子を見つけることができる。共通の行識別子の中の各iに対して、コンピューティングシステムMPC1は、2つの部分的なハミング距離から合成ハミング距離diを計算し、たとえばdi=di,1+di,2である。コンピューティングシステムMPC1は次いで、合成ハミング距離diに基づいて共通の行識別子を並べて、k個の最近傍を選択することができる。k個の最近傍のための行識別子は、ID={id1,...idk}と表され得る。aが十分大きい場合、上記のアルゴリズムにおいて決定されるk個の最近傍が、高い確率で真のk個の最近傍であることを証明することができる。しかしながら、より大きなaの値は、高い計算コストにつながる。
ユーザをユーザグループに追加するかどうかの決定が行われる(1106)。この決定は、k個の最近傍プロファイルおよびそれらの関連するラベルに基づいて行われ得る。この決定はまた、使用される集約関数およびその集約関数のための任意の集約パラメータに基づく。集約関数は、たとえば二項分類、回帰(たとえば、算術平均または二乗平均平方根を使用した)、多クラス分類、および加重k-NNを含み得る。以下でより詳しく説明されるように、ユーザをユーザグループに追加するかどうかを決定する各々の方法は、MPCクラスタ130とクライアント110上で実行されるアプリケーション112との間の異なる対話を含み得る。
ユーザをユーザグループに追加しないという決定が行われる場合、アプリケーション112は、ユーザをユーザグループに追加しなくてもよい(1108)。ユーザをユーザグループに追加するという決定が行われる場合、アプリケーション112は、たとえばユーザグループのユーザグループ識別子を含むようにクライアントデバイス110に記憶されているユーザグループリストを更新することによって、ユーザをユーザグループに追加することができる(1110)。
k-NNモデルを使用する例示的な二項分類推測技法
二項分類では、推測要求は、集約関数パラメータとして、threshold、Ltrue、およびLfalseを含み得る。ラベル値はブーリアン型、すなわち真または偽のいずれかである。thresholdパラメータは、k個の最近傍プロファイルの閾値の百分率を表すことができ、ユーザがユーザグループLtrueに追加されるには、この閾値の百分率のk個の最近傍プロファイルが真の値というラベルを有しなければならない。それ以外の場合、ユーザはユーザグループLfalseに追加される。あるアプローチでは、MPCクラスタ130は、真というラベル値を有する最近傍ユーザプロファイルの数がthresholdとkの積より大きい場合、ユーザをユーザグループLtrueに(それ以外の場合はLfalseに)追加するようにアプリケーション112に指示してもよい。しかしながら、コンピューティングシステムMPC1は、推測結果、たとえばユーザが入るべきユーザグループを知る。
ユーザのプライバシーを守るために、推測要求は、平文の閾値、コンピューティングシステムMPC1のための第1のシェア[Ltrue,1]および[Lfalse,1]、ならびにコンピューティングシステムMPC2のための暗号化された第2のシェアPubKeyEncrypt([Ltrue,2] || [Lfalse,2] || application_public_key, MPC2)を含み得る。この例では、アプリケーション112は、記号||により表記されるように、[Ltrue,2]、[Lfalse,2]、およびアプリケーション112の公開鍵から合成メッセージを生成し、コンピューティングシステムMPC2の公開鍵を使用してこの合成メッセージを暗号化することができる。コンピューティングシステムMPC1からアプリケーション112への推測応答は、コンピューティングシステムMPC1によって決定される推測結果の第1のシェア[Lresult,1]およびコンピューティングシステムMPC2によって決定される推測結果の第2のシェア[Lresult,2]を含み得る。
第2のシェアがコンピューティングシステムMPC1によりアクセスされること、したがって、コンピューティングシステムMPC1が推測結果を平文で取得するのを可能にすることを防ぐために、コンピューティングシステムMPC2は、推測結果の第2のシェア[Lresult,2]の暗号化された(および任意選択でデジタル署名された)バージョン、たとえばPubKeySign(PubKeyEncrypt([Lresult,2], application_public_key), MPC2)を、アプリケーション112に送信される推測応答に含めるためにコンピューティングシステムMPC1に送信することができる。この例では、アプリケーション112は、デジタル署名を生成するために使用されるコンピューティングシステムMPC2の秘密鍵に対応するコンピューティングシステムMPC2の公開鍵を使用してデジタル署名を検証し、推測結果の第2のシェア[Lresult,2]を暗号化するために使用される公開鍵(application_public_key)に対応するアプリケーション112の秘密鍵を使用して推測結果の第2のシェア[Lresult,2]を復号することができる。
アプリケーション112は次いで、第1のシェア[Lresult,1]および第2のシェア[Lresult,2]から推測結果Lresultを再構築することができる。デジタル署名を使用することで、アプリケーション112は、たとえばコンピューティングシステムMPC1による、コンピューティングシステムMPC2からの結果の偽造を検出することが可能になる。望まれるセキュリティのレベル、どの関係者がMPCクラスタ130のコンピューティングシステムを運用するか、および想定されるセキュリティモデルによっては、デジタル署名は必要とされないことがある。
コンピューティングシステムMPC1およびMPC2は、MPC技法を使用して、二項分類結果のシェア[Lresult,1]および[Lresult,2]を決定することができる。二項分類において、ユーザプロファイルのためのlabel1の値は、0(偽)または1(真)のいずれかである。選択されたk個の最近傍が識別子{id1,...idk}によって識別されると仮定すると、コンピューティングシステムMPC1およびMPC2は、k個の最近傍ユーザプロファイルのためのラベルの合計(sum_of_labels)を計算することができ、合計は以下の関係15により表される。
関係15: sum_of_labels =Σi∈{id1,…idk}labeli
合計を得るために、コンピューティングシステムMPC1は、ID(すなわち、{id1,...idk})をコンピューティングシステムMPC2に送信する。コンピューティングシステムMPC2は、k-匿名性を確保するために、IDの中の行識別子の数が閾値より大きいことを検証することができる。コンピューティングシステムMPC2は次いで、以下の関係16を使用してラベルの合計の第2のシェア[sum_of_labels2]を計算することができる。
関係16: [sum_of_labels2] =Σi∈{id1,…idk}[labeli,2]
コンピューティングシステムMPC1はまた、以下の関係17を使用してラベルの合計の第1のシェア[sum_of_labels1]を計算することができる。
関係17: [sum_of_labels1] =Σi∈{id1,…idk}[labeli,1]
ラベルの合計sum_of_labelsが、コンピューティングシステムMPC1およびMPC2が可能な限り知るべきではない機密情報である場合、コンピューティングシステムMPC1は、ラベルの合計の第1のシェア[sum_of_labels1]が閾値未満であるかどうか、たとえば[below_threshold1] = [sum_of_labels1] < threshold×kであるかどうかを計算することができる。同様に、コンピューティングシステムMPC2は、ラベルの合計の第2のシェア[sum_of_labels2]が閾値未満であるかどうか、たとえば[below_threshold2] = [sum_of_labels2] < threshold×kであるかどうかを計算することができる。コンピューティングシステムMPC1は、[below_threshold1]×[Lfalse, 1]+(1-[below_threshold1])×[Ltrue, 1]によって推測結果[Lresult,1]を計算することに進むことができる。同様に、コンピューティングシステムMPC2は、[below_threshold2]×[Lfalse, 2]+(1-[below_threshold2])×[Ltrue, 2]によって[Lresult,2]を計算することができる。
ラベルの合計sum_of_labelsが機密情報ではない場合、コンピューティングシステムMPC1およびMPC2は、[sum_of_labels1]および[sum_of_labels2]からsum_of_labelsを再構築することができる。コンピューティングシステムMPC1およびMPC2は次いで、パラメータbelow_thresholdをsum_of_labels<threshold×kに、たとえば、閾値未満である場合には1という値に、または閾値未満ではない場合には0という値に設定することができる。
パラメータbelow_thresholdを計算した後、コンピューティングシステムMPC1およびMPC2は、推測結果Lresultを決定することに進むことができる。たとえば、コンピューティングシステムMPC2は、below_thresholdの値に従って、[Lresult,2]を[Ltrue,2]または[Lfalse,2]のいずれかに設定することができる。たとえば、コンピューティングシステムMPC2は、ラベルの合計が閾値未満ではない場合は[Lresult,2]を[Ltrue,2]に設定し、ラベルの合計が閾値未満である場合は[Lfalse,2]に設定することができる。コンピューティングシステムMPC2は次いで、推測結果の暗号化された第2のシェア(PubKeyEncrypt([Lresult,2], application_public_key))またはこの結果のデジタル署名されたバージョンをコンピューティングシステムMPC1に返すことができる。
同様に、コンピューティングシステムMPC1は、below_thresholdの値に従って、[Lresult,1]を[Ltrue,1]または[Lfalse,1]のいずれかに設定することができる。たとえば、コンピューティングシステムMPC1は、ラベルの合計が閾値未満ではない場合は[Lresult,1]を[Ltrue,1]に設定し、ラベルの合計が閾値未満である場合は[Lfalse,1]に設定することができる。コンピューティングシステムMPC1は、推測結果の第1のシェア[Lresult,1]および推測結果の暗号化された第2のシェア[Lresult,2]を、推測応答としてアプリケーション112に送信することができる。上で説明されたように、アプリケーション112は次いで、2つのシェアに基づいて推測結果を計算することができる。
k-NNモデルを使用する例示的な多クラス分類推測技法
多クラス分類では、各ユーザプロファイルと関連付けられるラベルはカテゴリ特徴量であり得る。コンテンツプラットフォーム150は、あらゆるあり得るカテゴリ値を対応するユーザグループ識別子と対応付けるルックアップテーブルを指定することができる。ルックアップテーブルは、推測要求に含まれる集約関数パラメータのうちの1つであり得る。
見つかったk個の最近傍の中で、MPCクラスタ130は最頻のラベル値を見つける。MPCクラスタ130は次いで、ルックアップテーブルにおいて、最頻ラベル値に対応するユーザグループ識別子を見つけ、たとえばユーザグループ識別子をクライアントデバイス110に記憶されているユーザグループリストに追加することによって、ユーザグループ識別子に対応するユーザグループにユーザを追加するようにアプリケーション112に要求することができる。
二項分類と同様に、コンピューティングシステムMPC1およびMPC2から推測結果Lresultを隠すのが好ましいことがある。そうするために、アプリケーション112またはコンテンツプラットフォーム150は、カテゴリ値を推測結果Lresultのそれぞれのシェアに各々対応付ける2つのルックアップテーブルを作成することができる。たとえば、アプリケーションは、カテゴリ値を第1のシェア[Lresult1]に対応付ける第1のルックアップテーブルと、カテゴリ値を第2のシェア[Lresult2]に対応付ける第2のルックアップテーブルとを作成することができる。アプリケーションからコンピューティングシステムMPC1への推測要求は、コンピューティングシステムMPC1のための平文の第1のルックアップテーブルと、コンピューティングシステムMPC2のための第2のルックアップテーブルの暗号化されたバージョンとを含み得る。第2のルックアップテーブルは、コンピューティングシステムMPC2の公開鍵を使用して暗号化され得る。たとえば、第2のルックアップテーブルおよびアプリケーションの公開鍵を含む合成メッセージは、コンピューティングシステムMPC2の公開鍵、たとえばPubKeyEncrypt(lookuptable2 || application_public_key, MPC2)を使用して暗号化され得る。
コンピューティングシステムMPC1によって送信される推測応答は、コンピューティングシステムMPC1によって生成される推測結果の第1のシェア[Lresult1]を含み得る。二項分類と同様に、第2のシェアがコンピューティングシステムMPC1によりアクセスされること、したがって、コンピューティングシステムMPC1が推測結果を平文で取得するのを可能にすることを防ぐために、コンピューティングシステムMPC2は、推測結果の第2のシェア[Lresult,2]の暗号化された(および任意選択でデジタル署名された)バージョン、たとえばPubKeySign(PubKeyEncrypt([Lresult,2], application_public_key), MPC2)を、アプリケーション112に送信される推測結果に含めるためにコンピューティングシステムMPC1に送信することができる。アプリケーション112は、[Lresult1]および[Lresult2]から推測結果Lresultを再構築することができる。
多クラス分類問題に対して、w個の有効なラベル{l1,l2,...lw}があると仮定する。多クラス分類において推測結果Lresultのシェア[Lresult1]および[Lresult2]を決定するために、コンピューティングシステムMPC1はID(すなわち、{id1,...idk})をコンピューティングシステムMPC2に送信する。コンピューティングシステムMPC2は、k-匿名性を確保するために、IDの中の行識別子の数が閾値より大きいことを検証することができる。一般に、k-NNの中のkは、k-匿名性におけるkよりはるかに大きくてもよい。コンピューティングシステムMPC2は次いで、以下の関係18を使用して定義されるj番目のラベル[lj,2]の第2の頻度シェア[frequencyj,2]を計算することができる。
関係18:
同様に、コンピューティングシステムMPC1は、以下の関係19を使用して定義されるj番目のラベル[lj,1]の第1の頻度シェア[frequencyj,1]を計算する。
関係19:
k個の最近傍内のラベルの頻度(frequencyi)が取扱いに注意を要するものではないと仮定すると、コンピューティングシステムMPC1およびMPC2は、そのラベルのための2つのシェア[frequencyi,1]および[frequencyi,2]からfrequencyiを再構築することができる。コンピューティングシステムMPC1およびMPC2は次いで、インデックスパラメータ(index)を決定することができ、ここでfrequencyindexが最大の値を有し、たとえばindex=argmaxi(frequencyi)である。
コンピューティングシステムMPC2は次いで、ルックアップテーブルにおいて、最高の頻度を有するラベルに対応するシェア[Lresult,2]を探し、PubKeyEncrypt([Lresult,2], application_public_key)をコンピューティングシステムMPC1に返すことができる。コンピューティングシステムMPC1は同様に、ルックアップテーブルにおいて、最高の頻度を有するラベルに対応するシェア[Lresult,1]を探すことができる。コンピューティングシステムMPC1は次いで、2つのシェア(たとえば、[Lresult,1]およびPubKeyEncrypt([Lresult,2], application_public_key))を含む推測応答を、アプリケーション112に送信することができる。上で説明されたように、コンピューティングシステムMPC2の応答をコンピューティングシステムMPC1が偽装するのを防ぐために、第2のシェアがデジタル署名され得る。アプリケーション112は次いで、上で説明されたように、2つのシェアに基づいて推測結果を計算し、推測結果によって特定されるユーザグループにユーザを追加することができる。
例示的な回帰推測技法
回帰では、各ユーザプロファイルPと関連付けられるラベルは数値でなければならない。コンテンツプラットフォーム150は、閾値の順序付けられたリスト、たとえば(-∞< t0< t1<…< tn<∞)、およびユーザグループ識別子のリスト、たとえば{L0,L1,...Ln,Ln+1}を指定することができる。加えて、コンテンツプラットフォーム150は、集約関数、たとえば算術平均または二乗平均平方根を指定することができる。
見つかったk個の最近傍の中で、MPCクラスタ130は、ラベル値の平均(result)を計算し、そしてresultを使用して対応付けを探し、推測結果Lresultを見つける。たとえば、MPCクラスタ130は、以下の関係20を使用して、ラベル値の平均に基づいてラベルを特定することができる。
関係20:
result≦t0である場合、Lresult←L0
result>tnである場合、Lresult←Ln+1
tx<result≦tx+1である場合、Lresult←Lx+1
すなわち、resultが閾値t0以下である場合、推測結果LresultはL0である。resultが閾値tnより大きい場合、推測結果LresultはLn+1である。そうではなく、resultが閾値txより大きく、閾値tx+1以下である場合、推測結果LresultはLx+1である。コンピューティングシステムMPC1は次いで、たとえば、推測結果Lresultを含む推測応答をアプリケーション112に送信することによって、推測結果Lresultに対応するユーザグループにユーザを追加するようにアプリケーション112に要求する。
上で説明された他の分類技法と同様に、推測結果Lresultは、コンピューティングシステムMPC1およびMPC2から隠され得る。そうするために、アプリケーション112からの推測要求は、コンピューティングシステムMPC1のためのラベルの第1のシェア[Li,1]およびコンピューティングシステムMPC2のためのラベルの暗号化された第2のシェア[Li,2](たとえば、PubKeyEncrypt(L0,2 || … || Ln+1,2 || application_public_key, MPC2))を含み得る。
コンピューティングシステムMPC1によって送信される推測結果は、コンピューティングシステムMPC1によって生成される推測結果の第1のシェア[Lresult1]を含み得る。二項分類と同様に、第2のシェアがコンピューティングシステムMPC1によりアクセスされること、したがって、コンピューティングシステムMPC1が推測結果を平文で取得するのを可能にすることを防ぐために、コンピューティングシステムMPC2は、推測結果の第2のシェア[Lresult,2]の暗号化された(および任意選択でデジタル署名された)バージョン、たとえばPubKeySign(PubKeyEncrypt([Lresult,2], application_public_key), MPC2)を、アプリケーション112に送信される推測結果に含めるためにコンピューティングシステムMPC1に送信することができる。アプリケーション112は、[Lresult,1]および[Lresult,2]から推測結果Lresultを再構築することができる。
集約関数が算術平均であるとき、コンピューティングシステムMPC1およびMPC2は、二項分類と同様に、ラベルの合計sum_of_labelsを計算する。ラベルの合計が取扱いに注意を要するものではない場合、コンピューティングシステムMPC1およびMPC2は、2つのシェア[sum_of_lables1]および[sum_of_labels2]を計算し、そして2つのシェアに基づいてsum_of_labelsを再構築することができる。コンピューティングシステムMPC1およびMPC2は次いで、最近傍ラベルの量、たとえばkでラベルの合計を割ることによって、ラベルの平均を計算することができる。
コンピューティングシステムMPC1は次いで、関係20を使用してその平均を閾値と比較し、平均に対応するラベルを特定し、第1のシェア[Lresult,1]を特定されたラベルに設定することができる。同様に、コンピューティングシステムMPC2は、関係20を使用してその平均を閾値と比較し、平均に対応するラベルを特定し、第2のシェア[Lresult,2]を特定されたラベルに設定することができる。コンピューティングシステムMPC2は、アプリケーション112の公開鍵、たとえばPubKeyEncrypt([Lresult,2], application_public_key)を使用して第2のシェア[Lresult,2]を暗号化し、暗号化された第2のシェアをコンピューティングシステムMPC1に送信することができる。コンピューティングシステムMPC1は、第1のシェアおよび暗号化された第2のシェア(これは任意選択で上で説明されたようにデジタル署名され得る)をアプリケーション112に提供することができる。アプリケーション112は次いで、ラベル(たとえば、ユーザグループ識別子)Lresultによって特定されるユーザグループにユーザを追加することができる。
ラベルの合計が取扱いに注意を要するものである場合、コンピューティングシステムMPC1およびMPC2は、sum_of_labelsを平文で構築することが可能ではないことがある。代わりに、コンピューティングシステムMPC1は、すべてのi∈[0,n]に対してマスク[maski,1]=[sum_of_labels1]>ti×kを計算することができる。この計算は、コンピューティングシステムMPC1とMPC2との間の複数のラウンドトリップを必要とし得る。次に、コンピューティングシステムMPC1は、
を計算することができ、コンピューティングシステムMPC2は、
を計算することができる。この演算における等値テストは、コンピューティングシステムMPC1とMPC2との間の複数のラウンドトリップを必要とし得る。
加えて、コンピューティングシステムMPC1は、
を計算することができ、コンピューティングシステムMPC2は、
を計算することができる。MPCクラスタ130は次いで、すべてのi∈[0,n]に対してacci==1である場合にのみLiを返し、use_default==1である場合Ln+1を返す。この条件は、以下の関係21により表され得る。
関係21:
対応する暗号学的な実装形態は、以下の関係22および23により表され得る。
関係22:
関係23:
これらの計算は、コンピューティングシステムMPC1とMPC2との間のどのようなラウンドトリップ計算も必要としない。コンピューティングシステムMPC1は、結果の2つのシェア(たとえば、[Lresult,1]および[Lresult,2])をアプリケーション112に提供することができ、上で説明されたように、第2のシェアは暗号化され、任意選択でデジタル署名される。このようにして、アプリケーション112は、即刻のまたは最後の結果についてコンピューティングシステムMPC1またはMPC2が何も知ることなく、推測結果Lresultを決定することができる。
二乗平均平方根では、コンピューティングシステムMPC1は、ID(すなわち、{id1,...idk})をコンピューティングシステムMPC2に送信する。コンピューティングシステムMPC2は、k-匿名性を確保するために、IDの中の行識別子の数が閾値より大きいことを検証することができる。コンピューティングシステムMPC2は、以下の関係24を使用してsum_of_square_labelsパラメータ(たとえば、ラベル値の二乗の合計)の第2のシェアを計算することができる。
関係24:
同様に、コンピューティングシステムMPC1は、以下の関係25を使用してsum_of_square_labelsパラメータの第1のシェアを計算することができる。
関係25:
sum_of_square_labelsパラメータが取扱いに注意を要するものではないと仮定すると、コンピューティングシステムMPC1およびMPC2は、2つのシェア[sum_of_square_labels1]および[sum_of_square_labels2]からsum_of_square_labelsパラメータを再構築することができる。コンピューティングシステムMPC1およびMPC2は、最近傍ラベルの量、たとえばkでsum_of_squares_labelsを割り、次いで平方根を計算することによって、ラベルの二乗平均平方根を計算することができる。
平均が算術平均を介して計算されるか、または二乗平均平方根を介して計算されるかにかかわらず、コンピューティングシステムMPC1は次いで、関係20を使用して平均を閾値と比較して、平均に対応するラベルを特定し、第1のシェア[Lresult,1]を特定されたラベルに設定することができる。同様に、コンピューティングシステムMPC2は、関係20を使用してその平均を閾値と比較し、平均に対応するラベルを特定し、第2のシェア[Lresult,2]を特定されたラベルに設定することができる。コンピューティングシステムMPC2は、アプリケーション112の公開鍵、たとえばPubKeyEncrypt([Lresult,2], application_public_key)を使用して第2のシェア[Lresult,2]を暗号化し、暗号化された第2のシェアをコンピューティングシステムMPC1に送信することができる。コンピューティングシステムMPC1は、推測結果として、第1のシェアおよび暗号化された第2のシェア(これは任意選択で上で説明されたようにデジタル署名され得る)をアプリケーション112に提供することができる。アプリケーション112は次いで、Lresultのラベル(たとえば、ユーザグループ識別子)によって特定されるユーザグループにユーザを追加することができる。sum_of_square_labelsパラメータが取扱いに注意を要するものである場合、コンピューティングシステムMPC1およびMPC2は、算術平均の例において使用されるものと同様の暗号プロトコルを実行して、推測結果のシェアを計算することができる。
分類および回帰問題の結果を推測するための上記の技法において、すべてのk個の最近傍は、最終的な推測結果に対して等しい影響、たとえば等しい重みを有する。多くの分類および回帰問題では、k個の近傍の各々が、近傍とクエリパラメータPiとの間のハミング距離が増大すると単調減少する重みを割り当てられる場合、モデル品質は改善され得る。この性質を伴う一般的なカーネル関数は、Epanechnikov(放物線)カーネル関数である。ハミング距離と重みの両方が、平文で計算され得る。
k-NNモデルにおける近傍の定義の修正
いくつかの実装形態では、k最近傍は、上で論じられたように、高次元空間において、クエリを行うアプリケーション(たとえば、ブラウザ)のユーザに最も類似しているk人のユーザを指す。しかしながら、k-NNモデルを訓練または展開するためのアルゴリズムは、近傍がどのように定義されるかということと無関係であり得る。したがって、いくつかの追加の実装形態では、近傍という用語はユーザのグループを指すことがあり、このとき、高次元空間の中の点はユーザではなくユーザグループである。この例では、各ユーザグループはその重心によって表され得る。
そのようなユーザグループに基づくk-NNモデルは、有利なことに、高次元空間において異なる点をユーザが形成するようなk-NNモデルより複雑ではないことがあり、それは、ユーザグループの数はユーザの数よりはるかに少ないことが多いからである。たとえば、コンテンツプラットフォームには、数十億人のユーザがいることがあるが、数百万個のユーザグループしかないことがある。そのような場合、各近傍がユーザではなくユーザグループとして定義されるk-NNモデルを訓練することで、モデルを1000倍縮小することができる。有利なことに、そのようなモデルの縮小により、データ(ここでは、ユーザグループ、および異なる要素間のマッピングなどの関連するデータ)を記憶するために必要なデータストレージ要件がより低くなり、ユーザをユーザグループに追加するかどうかを決定するために必要な処理がより高速になり得る。
高次元空間の中の各点がそれぞれのユーザグループであるようなk-NNモデルを実装するために、高次元空間の中の点は次のように確立される。2つのコンピューティングシステムMPC1およびMPC2は、各ユーザグループを評価して、各ユーザグループの中のユーザの数を決定する。リストの中のユーザの数があらかじめ設定された閾値未満である場合、そのリストは高次元空間の中の点であると見なされない。このことは、高次元空間の中の点が、あらかじめ設定された数より多くのユーザ(たとえば、100人のユーザ、1000人のユーザ、または任意の他の閾値の数のユーザ)を伴うリストだけによって占有されることを、立証することの助けになり得る。これは、ユーザグループが特定のユーザを標的としないことを確実にすることによって、ユーザのプライバシーを守ることができる。
リストが確立されると、2つのコンピューティングシステムMPC1およびMPC2は、ユーザグループの中のユーザの数に基づいて、各ユーザグループの重心を決定することができる。重心は、上で述べられたように、平均として定義され得るが、ユーザグループの中のすべてのユーザについて計算され得る。上で述べられたような平均は、グループの中のユーザのためのユーザプロファイルのすべての合計を、グループの中のユーザの数で割るという計算を伴う。この平均を求めて重心を決定するために、2つのコンピューティングシステムMPC1およびMPC2は、ユーザのクライアントデバイスから受信されるような、各ユーザプロファイルの秘密シェアを有し得る。たとえば、各クライアントデバイスは、ユーザプロファイルの2つ以上の秘密シェアを生成し、重心が決定される前にそれぞれの秘密シェアを各コンピューティングシステムに送信することができる。いくつかの実装形態では、各コンピューティングシステムに送信されるユーザプロファイルデータに重複がないように、各ユーザプロファイルの中の情報の異なるサブセットが各コンピューティングシステムに提供される。重心を決定するための平均の計算は、MPCクラスタ130とクライアントデバイス110との間でデータのやり取りを必要とすることがあり、そのような具体的なデータのやり取りは、実装されている具体的な秘密分散アルゴリズムに基づいて変化することがある。重心は、上で説明されたように計算され得る(たとえば、図1の議論を参照されたい)。
各ユーザグループのそのような重心は、高次元空間の中の点を形成する。クエリを行う各アプリケーションに対して、k最近傍は、その高次元空間内のk個の点(k個のユーザグループを表す)によって表される。各近傍がそれぞれのユーザグループである。図8~図11に関して上で述べられた他のモデリングの態様と技法が、そのようなk-NNモデルを訓練して展開するために使用されてもよく、違いは、近傍を表す、高次元空間の中の各点が、ここではユーザグループであるということである。
コンピューティングシステムMPC1およびMPC2は、多クラス分類などのいくつかのあり得る機械学習技法のうちの1つを使用して、k最近傍ユーザプロファイルに基づいて、ユーザをユーザグループのうちのあるグループに追加するかどうかを決定することができる。高次元空間の中の点がユーザを表すような、上記の実装形態において使用される、回帰および二項分類を含むさらなる機械学習技法とは異なり、各ユーザグループが高次元空間の中の点を形成するような実装形態のための機械学習技法は、回帰または二項分類を含まないことがある。
ユーザへの対話ベースの重みの追加
デジタルコンポーネント提供者160に対して、すべてのユーザによる対話(たとえば、閲覧、クリック、および/またはコンバージョン)は等しい値を有しないことがあり、一部のユーザによる対話が、他のユーザによる同じ対話より重要であることがある。たとえば、より購買能力が高いように見える(たとえば、住宅価格の高い郵便番号の地域に住んでいること、過去のあらかじめ設定された長さの期間内により多く消費していることなどにより)ユーザによる特定の対話(たとえば、閲覧、クリック、またはコンバージョン)は、より購買能力が低いように見える別のユーザによるその特定の対話より重要であることがある。
高次元空間の中の各点がそれぞれのユーザグループであるようなモデルでは、対話に基づくこの重要性の変動は、より高価な製品を宣伝するデジタルコンポーネントと対話するユーザにはより高い対話ベースの重みを割り振り、より安価な製品を宣伝するデジタルコンポーネントと対話するユーザにはより低い対話ベースの重みを割り振ることによって、モデルが訓練される間の重心の計算において考慮される。いくつかの実装形態では、重みは、他のビジネス上の目的に基づいて決定される。重心計算は、すべてのユーザの平均であるものとして上で説明された。しかしながら、ここでは、重心はすべてのユーザの加重平均として計算される。加重平均は、重み付けられた値の合計を重みの合計で割ったものである。
高次元空間の中の各点がユーザであるようなモデルでは、対話に基づく重要性は、モデルが訓練された後で、モデルが予測のために使用されるときに考慮される。このモデルでは、対話の重要性の変動を考慮するタイミング(すなわち予測の間、これはモデルの訓練の後である)は、使用されるアルゴリズムにより、高次元空間の中の各点がユーザであるようなモデルについてのタイミング(すなわち、重心の計算の後)と異なる。高次元空間の中の各点がユーザであるようなこのモデルでは、特定のクラスまたはユーザグループをユーザが割り当てられるという予測をモデルが行うように、モデルは上で説明されたように実装される。対話に基づく重要性は2つの方法で考慮されてもよく、それらは、個別に、または組合せでのいずれかで実装されてもよい。
第1の方法では、ユーザは、あらかじめ設定された量より少ない最近傍が、割り当てられたユーザグループの一部である場合、その割り当てられたユーザグループから除外され得る。たとえば、10個の最近傍のうちの3個以下の近傍しかユーザグループの一部ではない場合、そのユーザはその割り当てられたグループから除外される。
第2の方法では、各ユーザは、そのユーザによる対話に基づく重みを割り当てられ(たとえば、高価な製品を宣伝するデジタルコンポーネントとの対話にはより大きい重み、安価な製品を宣伝するデジタルコンポーネントとの対話にはより小さい重み)、重みと、そのユーザグループの一部であるあらかじめ設定された最近傍の量との数学的な積が閾値未満である場合、ユーザは割り当てられたグループから除外される。たとえば、閾値が4であり、ユーザの2つだけの近傍が、割り当てられたグループの一部であり(上で説明された第1の方法では、これにより割り当てられたグループからユーザが除外される)、ユーザに割り当てられた重みが3である場合、ユーザは、この第2の方法では、割り当てられたグループから除外されず、それは、重みと、そのユーザグループの一部であるあらかじめ設定された最近傍の量との数学的な積、すなわち3×2で計算される6が、4という閾値を超えるからである。
ユーザに割り当てられる重みは、コンテンツプラットフォーム150の一部であり得る、需要側プラットフォーム(DSP)によって特定され得る。いくつかの実装形態では、重みは、ユーザが(たとえば、インプレッション、クリック、および/またはコンバージョンによって)対話するデジタルコンポーネントにより宣伝される製品の購入価格として、その製品を宣伝するデジタルコンポーネントとユーザが対話したことに応答して定義され、または考慮され得る。少数の実装形態では、重みは、そのような製品について得られることになる利益として定義され、または考慮されてもよい。いくつかの実装形態では、重みは、フリークエンシーの尺度に基づいて定義されてもよく(たとえば、重みは、あらかじめ設定された値より高い価格の製品がユーザにより購入される回数として定義される)、および/またはリーセンシーの尺度に基づいて定義されてもよい(たとえば、重みは、過去のあらかじめ設定された長さの期間内に製品が購入された回数として定義される)。DSPは、任意の他の方式で重みを定義してもよい。
DSPは、アプリケーション(たとえば、ブラウザ)の内部で実行されるスクリプトに重みを提供することによって、前処理または後処理計算を含む、モデリング計算のためにユーザの重みをMPCクラスタ130に提供し得る。スクリプトは、それがユーザのユーザプロファイルをMPCクラスタ130にアップロードするとき、重みをMPCクラスタ130に提供するように構成され、提供する。スクリプトは、アーキテクチャにより課されるセキュリティ要件に応じて、秘密シェアまたは平文のいずれかで重みを送信することができる。たとえば、重みは多数の追加のデータを伴わない単純な数であるので、いくつかの実装形態では、重みを平文で送信してもセキュリティは損なわれないことがある。他の実装形態では、重みはまた、プライバシーをさらに向上させるために、秘密シェアで転送されてもよい。
図12は、ユーザを1つまたは複数のそれぞれのユーザグループを効果的に分類するために、k-NNモデルを訓練して展開するための例示的なプロセスを示す流れ図である。k-NNモデルは、個々のユーザのユーザプロファイルまたはユーザグループの重心を使用して訓練され得る。
k-NNモデルを訓練する前に、訓練データはMPCクラスタ130によって前処理され得る。たとえば、k-NNモデルがユーザグループに基づく場合、MPCクラスタ130は、各ユーザグループの重心を計算することができる。加えて、MPCクラスタ130は、各ユーザグループのための1つまたは複数の性能尺度を計算することができる。上で説明されたように、性能尺度は、インタラクション率およびコンバージョン率を含み得る。重みが使用されるとき、MPCクラスタ130は、上で説明されたように、重みを使用して性能尺度を計算することができる。
ユーザグループのユーザインタラクション率を計算するために、MPCクラスタ130は、ユーザグループの中のユーザに対して、モデルが訓練される1つまたは複数のデジタルコンポーネントがユーザグループの中のユーザに表示された総回数、およびユーザグループの中のユーザによるデジタルコンポーネントとのユーザ対話の総数を決定することができる。MPCクラスタ130は、ユーザ対話の総数をユーザグループの中のユーザにデジタルコンポーネントが表示された総回数で割った商を、ユーザインタラクション率として決定することができる。
ユーザグループのコンバージョン率を計算するために、MPCクラスタ130は、ユーザグループのユーザによって行われるコンバージョンの総数を決定することができる。MPCクラスタ130は、コンバージョンの総数をユーザグループの中のユーザにデジタルコンポーネントが表示された総回数で割った商を、コンバージョン率として決定することができる。
MPCクラスタ130の第1のMPCシステムは、クライアントデバイス110上のアプリケーション112から、アプリケーション112のユーザの所与のユーザプロファイルの第1のシェアおよび性能閾値を備える推測要求を受信することができる(1202)。MPCクラスタ130の1つまたは複数の第2のMPCシステムは各々、所与のユーザプロファイルの対応する第2のシェアを受信することができる。
各推測要求は、ユーザプロファイルのシェア、推測要求のために使用されるべき機械学習モデルの識別子、機械学習モデルを使用して特定すべき最近傍の数k、および推測において使用するための閾値性能尺度を含み得る。いくつかの実装形態では、推測要求は、モデルの所有者のドメイン(たとえば、所有者のためのeTLD+1)および推測要求の内容の残りのデジタル署名も含み得る。デジタル署名を使用することは、要求が適切なクライアントデバイス110から受信されていることと、要求が生成された後で推測要求の内容が修正されていないこととを確実にする。
第1のMPCシステムは、訓練された機械学習モデルをMPCクラスタ130内の1つまたは複数の第2のMPCシステムと連携して使用してセキュアMPCプロセスを実行することによって、ユーザプロファイルに対するk最近傍のセットを特定することができる(1202)。MPCクラスタ130は、図11を参照して説明されたのと同様の方式で、推測要求に含まれるkの値を使用して、最近傍のセットを特定することができる。
第1のMPCシステム130は、最近傍のセットから、性能閾値を満たす性能尺度を有する1つまたは複数の最近傍を選択することができる(1204)。これは、クエリに含まれる性能尺度に基づいて、およびk-NNモデルがどのように訓練されるかに基づいて変化し得る。
k-NNモデルが個々のユーザのユーザプロファイルではなくユーザグループを使用して訓練される場合、第1のMPCシステムは、最近傍のセットにおいて、性能閾値を満たす性能尺度を有する各ユーザグループを特定することができる。すなわち、第1のMPCシステムは、性能尺度が閾値の性能尺度を満たす、または超えるかどうかを決定するために、k個のユーザグループの各々の性能尺度を閾値の性能尺度と比較することができる。
k-NNモデルがユーザグループではなくユーザプロファイルを使用して訓練される場合、第1のMPCシステムは、k個のユーザプロファイルの少なくとも1つをメンバーとして含むユーザグループを特定することができる。たとえば、kの値が3であり、ユーザA、B、およびCが推測要求のユーザプロファイルに対する最近傍であるとする。ユーザAがグループ1および2のメンバーであり、ユーザBがグループ2のメンバーであり、ユーザCがグループ3、4、および5のメンバーである場合、これらのグループの各々はk個の最近傍の少なくとも1つのメンバーを含むので、この例のユーザグループは1、2、3、4、および5である。
各グループに対して、第1のMPCシステムは、グループの中のユーザプロファイルに対する集約性能尺度を計算する。閾値の性能尺度がユーザインタラクション率である場合、第1のMPCシステムは、ユーザプロファイルのためのデジタルコンポーネントのユーザインタラクション率を、たとえば、グループの中のユーザに対するユーザ対話の数をグループの中のユーザにデジタルコンポーネントが表示された総回数で割ることによって計算することができる。閾値の性能尺度がコンバージョン率である場合、第1のMPCシステムは、グループの中のユーザについてのデジタルコンポーネントのコンバージョン率を、たとえば、グループの中の対応するユーザに対するコンバージョンの回数をグループの中のユーザにデジタルコンポーネントが表示された総回数で割ることによって計算することができる。性能尺度を計算した後、第1のMPCシステムは、計算された性能尺度を閾値の性能尺度と比較することができる。第1のMPCシステムは次いで、閾値の性能尺度を満たす、または超える性能尺度をどのグループが有するかを決定することができる。各々の第2のMPCシステムは、同じプロセスを実行して、閾値の性能尺度を満たすユーザグループを特定することができる。
第1のMPCシステムは、1つまたは複数の最近傍を表すデータをアプリケーション112に送信することができる(1206)。たとえば、第1のMPCシステムは、閾値の性能尺度を満たす、または超える性能尺度を有する各ユーザグループを表すデータを送信することができる。同様に、各々の第2のMPCシステムは、閾値の性能尺度を満たす、または超える性能尺度を有する各ユーザグループを表すデータを送信することができる。
ユーザプロファイルは、アプリケーション112によって生成され得る。ユーザプロファイルは、アプリケーション112のユーザとアプリケーション112にレンダリングされるデジタルコンテンツとの間の対話を示すデータを含み得る。対話は、コンバージョンおよびコンバージョンの欠如を含み得る。
機械学習モデルは、最近傍モデルであり得る。最近傍モデルの最近傍は、対応するユーザグループと関連付けられるそれぞれの重心によって表される。第1のMPCシステムは、対応するユーザグループの各ユーザに重みを割り振り、それぞれの重心を計算することができる。重みはユーザによる対話に基づき得る。各ユーザグループの重心は、ユーザグループのメンバーであるユーザのユーザプロファイルの平均によって表される、ユーザプロファイルの中心であってもよい。
機械学習モデルは、重心モデルまたは最近傍モデルの1つまたは複数であり得る。たとえば、k-NNは、ユーザグループまたはリストへのユーザの分類のために使用されてもよく、重心モデルは、ユーザグループ手法のためにデータを前処理するために使用されてもよい。
各最近傍の性能尺度は、最近傍に対応する1つまたは複数のデジタルコンポーネントとのユーザインタラクション率または最近傍に対応する1つまたは複数デジタルコンポーネントのコンバージョン率の少なくとも1つを含み得る。
機械学習モデルは、k最近傍モデルを含み得る。いくつかの実装形態では、k最近傍モデルの中の各近傍は、ユーザのユーザプロファイルを表すことができる。いくつかの実装形態では、k最近傍モデルの中の各近傍は、複数のユーザのためのユーザグループを表すことができる。
図13は、上で説明された動作を実行するために使用され得る例示的なコンピュータシステム1300のブロック図である。システム1300は、プロセッサ1310、メモリ1320、記憶デバイス1330、および入出力デバイス1340を含む。構成要素1310、1320、1330、および1340の各々は、たとえば、システムバス1350を使用して、相互接続され得る。プロセッサ1310は、システム1300内で実行するための命令を処理することが可能である。いくつかの実装形態では、プロセッサ1310は、シングルスレッドプロセッサである。別の実装形態では、プロセッサ1310は、マルチスレッドプロセッサである。プロセッサ1310は、メモリ1320または記憶デバイス1330に記憶された命令を処理することが可能である。
メモリ1320は、システム1300内に情報を記憶する。一実装形態では、メモリ1320は、コンピュータ可読媒体である。いくつかの実装形態では、メモリ1320は、揮発性メモリユニットである。別の実装形態では、メモリ1320は、不揮発性メモリユニットである。
記憶デバイス1330は、システム1300に大容量記憶を提供することが可能である。いくつかの実装形態では、記憶デバイス1330は、コンピュータ可読媒体である。様々な異なる実装形態では、記憶デバイス1330は、たとえば、ハードディスクデバイス、光ディスクデバイス、複数のコンピューティングデバイス(たとえば、クラウド記憶デバイス)によってネットワーク上で共有される記憶デバイス、または何らかの他の大容量記憶デバイスを含み得る。
入出力デバイス1340は、システム1300のための入出力動作を提供する。いくつかの実装形態では、入出力デバイス1340は、ネットワークインターフェースデバイス、たとえば、Ethernetカード、シリアル通信デバイス、たとえば、RS-232ポート、および/またはワイヤレスインターフェースデバイス、たとえば、802.11カードのうちの1つまたは複数を含み得る。別の実装形態では、入出力デバイスは、入力データを受信し、出力データを外部デバイス1360、たとえば、キーボード、プリンタ、およびディスプレイデバイスに送信するように構成されたドライバデバイスを含み得る。しかしながら、モバイルコンピューティングデバイス、モバイル通信デバイス、セットトップボックステレビクライアントデバイスなどの、他の実装形態も使用され得る。
例示的な処理システムが図13で説明されているが、本明細書において説明される主題の実装形態および機能的動作は、他のタイプのデジタル電子回路において、または本明細書において開示される構造およびその構造的均等物を含むコンピュータソフトウェア、ファームウェア、もしくはハードウェアにおいて、またはそれらのうちの1つもしくは複数の組合せにおいて実装され得る。
主題の実装形態および本明細書において説明される動作は、デジタル電子回路で、または本明細書において開示される構造およびその構造的均等物を含むコンピュータソフトウェア、ファームウェア、もしくはハードウェアで、またはそれらのうちの1つもしくは複数の組合せで実装され得る。本明細書において説明される主題の実装形態は、1つまたは複数のコンピュータプログラム、すなわち、データ処理装置による実行のために、またはデータ処理装置の動作を制御するために、(1つまたは複数の)コンピュータ記憶媒体上で符号化された、コンピュータプログラム命令の1つまたは複数のモジュールとして実装され得る。代替または追加として、プログラム命令は、データ処理装置による実行のために、適切な受信機装置への送信のために情報を符号化するために生成された、人工的に生成された伝搬信号、たとえば、機械で生成された電気信号、光信号、または電磁信号上で符号化され得る。コンピュータ記憶媒体は、コンピュータ可読記憶デバイス、コンピュータ可読記憶基板、ランダムもしくはシリアルアクセスメモリアレイもしくはデバイス、またはそれらのうちの1つもしくは複数の組合せであり得るか、またはそれらに含まれ得る。さらに、コンピュータ記憶媒体は伝搬信号ではないが、コンピュータ記憶媒体は、人工的に生成された伝搬信号において符号化されたコンピュータプログラム命令のソースまたは宛先であり得る。コンピュータ記憶媒体はまた、1つまたは複数の別個の物理構成要素または媒体(たとえば、複数のCD、ディスク、または他の記憶デバイス)であり得るか、またはそれらに含まれ得る。
本明細書において説明される動作は、1つまたは複数のコンピュータ可読記憶デバイス上に記憶されたまたは他のソースから受信されたデータに対してデータ処理装置によって実行される動作として実装され得る。
「データ処理装置」という用語は、例として、プログラム可能プロセッサ、コンピュータ、システムオンチップ、または上記の複数のもの、もしくは組合せを含む、データを処理するための、あらゆる種類の装置、デバイス、および機械を包含する。装置は、専用論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)を含み得る。装置は、ハードウェアに加えて、当該のコンピュータプログラムのための実行環境を作成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォームランタイム環境、仮想マシン、またはそれらのうちの1つまたは複数の組合せを構成するコードも含み得る。装置および実行環境は、ウェブサービス、分布コンピューティングインフラストラクチャおよびグリッドコンピューティングインフラストラクチャなどの様々な異なるコンピューティングモデルインフラストラクチャを実現することができる。
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、またはコードとしても知られている)は、コンパイル型言語またはインタプリタ型言語、宣言型言語または手続き型言語を含む任意の形態のプログラミング言語で書かれてもよく、スタンドアロンプログラムとして、またはモジュールとして、構成要素、サブルーチン、オブジェクト、もしくはコンピューティング環境において使用するのに適した他のユニットを含む任意の形態で展開されてもよい。コンピュータプログラムは、ファイルシステムにおけるファイルに対応し得るが、そうである必要はない。プログラムは、他のプログラムもしくはデータ(たとえば、マークアップ言語文書に記憶された1つもしくは複数のスクリプト)を保持するファイルの一部分に、当該のプログラム専用の単一のファイルに、または複数の協調ファイル(たとえば、1つもしくは複数のモジュール、サブプログラム、またはコードの部分を記憶するファイル)に記憶され得る。コンピュータプログラムは、1つのコンピュータ上で実行されるか、または、1つのサイトに配置されるかもしくは複数のサイトにわたって分散され、通信ネットワークによって相互接続される複数のコンピュータ上で実行されるように展開され得る。
本明細書において説明されたプロセスおよび論理フローは、入力データ上で動作し、出力を生成することによって活動を実行するために、1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラマブルプロセッサによって実行され得る。プロセスおよび論理フローが、専用論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)によっても実行されてもよく、装置が、それらとしても実装されてもよい。
コンピュータプログラムの実行に適したプロセッサは、例として、汎用マイクロプロセッサと専用マイクロプロセッサの両方を含む。一般に、プロセッサは、読取り専用メモリもしくはランダムアクセスメモリまたは両方から命令およびデータを受信する。コンピュータの必須要素は、命令に従って活動を実施するためのプロセッサ、ならびに命令およびデータを記憶するための1つまたは複数のメモリデバイスである。一般に、コンピュータは、データを記憶するための1つまたは複数の大容量記憶デバイス、たとえば、磁気ディスク、光磁気ディスク、または光ディスクも含むか、あるいは、それらからデータを受信することもしくはそれらにデータを転送することまたはその両方を行うために動作可能に結合される。しかしながら、コンピュータはそのようなデバイスを有する必要はない。さらに、コンピュータは、ほんの数例を挙げると、別のデバイス、たとえば、携帯電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、またはポータブル記憶デバイス(たとえば、ユニバーサルシリアルバス(USB)フラッシュドライブ)に埋め込まれ得る。コンピュータプログラム命令およびデータを記憶するのに適したデバイスは、例として、半導体メモリデバイス、たとえば、EPROM、EEPROM、およびフラッシュメモリデバイス、磁気ディスク、たとえば、内部ハードディスクまたはリムーバブルディスク、光磁気ディスク、ならびにCD-ROMディスクおよびDVD-ROMディスクを含む、すべての形態の不揮発性メモリ、媒体およびメモリデバイスを含む。プロセッサおよびメモリは、専用論理回路によって補完され得るか、または専用論理回路に組み込まれ得る。
ユーザとの対話を提供するために、本明細書において説明される主題の実装形態は、ユーザに情報を表示するための、たとえばCRT(陰極線管)またはLCD(液晶ディスプレイ)モニタなどのディスプレイデバイス、ならびに、キーボード、および、ユーザがコンピュータに入力を提供することができる、たとえば、マウスまたはトラックボールなどのポインティングデバイスを有するコンピュータ上で実装され得る。他の種類のデバイスも、ユーザとの対話を提供するために使用され得る。たとえば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックであってもよく、ユーザからの入力は、音響入力、音声入力、または触覚入力を含む任意の形態で受け取られてもよい。加えて、コンピュータは、ユーザによって使用されるデバイスに文書を送信し、それから文書を受信することによって、たとえば、アプリケーションから受信された要求に応答して、ユーザのクライアントデバイス上のアプリケーション(たとえば、ブラウザ)にウェブページを送信することによって、ユーザと対話することができる。
本明細書において説明される主題の実装形態は、バックエンド構成要素、たとえば、データサーバを含む、またはミドルウェア構成要素、たとえば、アプリケーションサーバを含む、またはフロントエンド構成要素、たとえば、それを通じてユーザが本明細書において説明される主題の一実装形態と対話することができるグラフィカルユーザインターフェースもしくはウェブブラウザを有するクライアントコンピュータを含む、または1つもしくは複数のそのようなバックエンド構成要素、ミドルウェア構成要素、もしくはフロントエンド構成要素の任意の組合せを含む、コンピューティングシステムにおいて実装され得る。システムの構成要素は、デジタルデータ通信の任意の形態の媒体、たとえば、通信ネットワークによって相互接続され得る。通信ネットワークの例は、ローカルエリアネットワーク(「LAN」)およびワイドエリアネットワーク(「WAN」)、インターネットワーク(たとえば、インターネット)、ならびにピアツーピアネットワーク(たとえば、アドホックピアツーピアネットワーク)を含む。
コンピューティングシステムは、クライアントおよびサーバを含み得る。クライアントとサーバとは、一般に、互いに離れており、典型的には、通信ネットワークを通して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行され、互いにクライアントサーバ関係を有するコンピュータプログラムによって生じる。いくつかの実装形態では、サーバは、(たとえば、クライアントデバイスと対話するユーザにデータを表示し、そのユーザからユーザ入力を受信する目的で)データ(たとえば、HTMLページ)をクライアントデバイスに送信する。クライアントデバイスにおいて生成されたデータ(たとえば、ユーザ対話の結果)は、サーバにおいてクライアントデバイスから受信され得る。
本明細書は多くの特定の実装形態の詳細を含んでいるが、これらは任意の革新の範囲または特許請求され得るものの範囲に対する限定として解釈されるべきではなく、むしろ特定の革新の特定の実装形態に特有の特徴の説明として解釈されるべきである。別個の実装形態の文脈において本明細書で説明されるいくつかの特徴はまた、単一の実装形態において組み合わせて実装され得る。逆に、単一の実装形態の文脈において説明される様々な特徴はまた、複数の実装形態において別々にまたは任意の適切な部分組合せで実装され得る。さらに、特徴はいくつかの組合せにおいて働くものとして上で説明され、そのようなものとして最初に特許請求されることさえあるが、特許請求される組合せからの1つまたは複数の特徴は、場合によっては、その組合せから削除されてもよく、特許請求される組合せは、副組合せまたは副組合せの変形を対象としてもよい。
同様に、動作は、特定の順序で図面に示されるが、これは、望ましい結果を達成するために、そのような動作が図示された特定の順序でもしくは順番に行われること、または例示したすべての動作が行われることを必要とするものと理解されるべきではない。いくつかの状況では、マルチタスキングおよび並列処理が有利であり得る。さらに、上で説明された実装形態における様々なシステム構成要素の分離は、すべての実装形態においてそのような分離を必要とするものとして理解されるべきではなく、説明されたプログラム構成要素およびシステムは一般に、単一のソフトウェア製品に一緒に組み込まれてもよく、または複数のソフトウェア製品にパッケージ化されてもよいことを理解されたい。
このようにして、主題の特定の実装形態が説明されてきた。他の実装形態は、以下の特許請求の範囲の範囲内にある。場合によっては、特許請求の範囲に列挙される活動は、異なる順序で行われ、それでも望ましい結果を達成し得る。加えて、添付の図面に示されるプロセスは、所望の結果を達成するために、必ずしも示された特定の順序または順番を必要としない。いくつかの実装形態では、マルチタスキングおよび並列処理が有利であり得る。