様々な図面における同様の参照番号および参照指示は、同様の要素を示す。
概して、本明細書は、サードパーティクッキーが(例えばブラウザによって)ブロックされ、および/またはユーザプロファイルの収集が様々な理由のために実行不可能である状況においてさえも、ユーザのプライバシーを維持し、データセキュリティを保証しながら、ユーザグループメンバーシップを拡大するためのシステムおよび技術を説明する。概して、コンテンツプラットフォームなどのその他のエンティティ(entity)のコンピューティングシステムにおいてユーザプロファイルを作成し、維持するのではなく、ユーザプロファイルが、ユーザのクライアントデバイスにおいて維持される。グループメンバーシップを拡大するために使用され得る機械学習モデルを生成するために、ユーザのクライアントデバイスは、それらの暗号化されたユーザプロファイルを(例えば、ユーザプロファイルの秘密シェアとして)、その他のデータと一緒に、任意でコンテンツプラットフォームを介して安全なマルチパーティ計算(MPC)クラスタの複数のコンピューティングシステムに送信することができる。例えば、各クライアントデバイスは、ユーザプロファイルの2つ以上の秘密シェアを生成し、それぞれの秘密シェアを各コンピューティングシステムに送信することができる。一部の実装においては、各コンピューティングシステムに送信されるユーザプロファイルデータに重複がないように、各ユーザプロファイル内の情報の異なる下位集合が各コンピューティングシステムに提供される。
MPCクラスタのコンピューティングシステムは、MPC技術を使用して、MPCクラスタのいずれかのコンピューティングシステム(またはユーザ自身ではないその他の関係者)がいずれかの個々のユーザのプロファイルを平文で取得することも防止する方法で、ユーザのプロファイルに基づいてユーザのためのユーザグループを提案するための機械学習モデルを生成し、それによってユーザのプライバシーを保護することができる。機械学習モデルは、重心モデルであることが可能である。この例においては、ユーザグループの重心モデルが、ユーザプロファイルの中心、例えば、ユーザグループのメンバーであるユーザに関するユーザプロファイルの中心(平均)を表し得る。
機械学習モデルが生成された後、機械学習モデルは、各ユーザのプロファイルに基づいて、各ユーザのための1つまたは複数のユーザグループを提案するために使用され得る。例えば、ユーザのクライアントデバイスは、そのユーザのための提案されるユーザグループに関してMPCクラスタに問い合わせるか、またはユーザが特定のユーザグループに追加されるべきかどうかを判定するためにMPCクラスタに問い合わせることができる。MPCクラスタは、ユーザのユーザプロファイルを使用して、ユーザのユーザプロファイルの閾値の距離以内にある重心を有するユーザグループを識別することができる。ユーザのユーザグループメンバーシップは、ユーザにコンテンツを提供するために、プライバシーを保護し、安全な方法で使用され得る。
機械学習モデルを生成し、使用するための例示的なシステム
図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は、複数の異なるパブリッシャ140のリソースおよび/またはアプリケーションと共に提示するためのデジタルコンポーネントを提供するために、デジタルコンポーネントプロバイダ160に代わって、複数のサプライサイドプラットフォームSSPとインタラクションすることができる。概して、DSPは、(例えば、SSPから)デジタルコンポーネントの要求を受信し、要求に基づいて、1つまたは複数のデジタルコンポーネントプロバイダによって作成された1つまたは複数のデジタルコンポーネントに関する選択パラメータを生成(または選択)し、デジタルコンポーネント(例えば、デジタルコンポーネント自体)および選択パラメータに関連するデータをSSPに提供することができる。次いで、SSPは、クライアントデバイス110における提示のためにデジタルコンポーネントを選択し、クライアントデバイス110にデジタルコンポーネントを提示させるデータをクライアントデバイス110に提供することができる。
場合によっては、ユーザによって前に訪問されたおよび/またはインタラクションされたウェブページ、アプリケーションページ、またはその他の電子リソースに関連するデジタルコンポーネントを受け取ることが、ユーザにとって有益である。そのようなデジタルコンポーネントをユーザに配信するために、ユーザは、ユーザが特定のリソースを訪問するか、またはリソースにおいて特定のアクションを実行する(例えば、ウェブページ上に提示された特定のアイテムとインタラクションするか、もしくは仮想カートにアイテムを追加する)ときに、ユーザグループ、例えば、ユーザの関心のグループ(user interest group)、同様のユーザの集団、または同様のユーザデータを含むその他のグループタイプに割り振られ得る。ユーザグループは、デジタルコンポーネントプロバイダ160によって生成され得る。つまり、各デジタルコンポーネントプロバイダ160は、ユーザがデジタルコンポーネントプロバイダ160の電子リソースを訪問するときに、ユーザをそのユーザグループに割り振ることができる。
ユーザのプライバシーを保護するために、ユーザのグループメンバーシップは、デジタルコンポーネントプロバイダ、コンテンツプラットフォーム、またはその他の関係者によってではなく、ユーザのクライアントデバイス110において、例えば、アプリケーション112のうちの1つ、またはクライアントデバイス110のオペレーティングシステムによって維持され得る。具体的な例においては、信頼されたプログラム(例えば、ウェブブラウザまたはオペレーティングシステム)が、ウェブブラウザまたは別のアプリケーションを使用するユーザのユーザグループ識別子のリスト(「ユーザグループリスト」)を維持することができる。ユーザグループリストは、ユーザが追加された各ユーザグループのグループ識別子を含み得る。ユーザグループを作成するデジタルコンポーネントプロバイダ160は、そのユーザグループのユーザグループ識別子を指定することができる。ユーザグループのユーザグループ識別子は、グループを説明する(例えば、ガーデニンググループ)か、またはグループを表すコード(例えば、説明的でない英数字のシーケンス)であることが可能である。ユーザのユーザグループリストは、他者がリストにアクセスすることを防止するために、クライアントデバイス110における安全なストレージに記憶されることが可能であり、および/または記憶されるときに暗号化されることが可能である。
アプリケーション112が、デジタルコンポーネントプロバイダ160に関連するリソースもしくはアプリケーションのコンテンツ、またはウェブサイト142上のウェブページを提示するとき、リソースは、アプリケーション112がユーザグループリストに1つまたは複数のユーザグループ識別子を追加することを要求し得る。それに応じて、アプリケーション112は、ユーザグループリストに1つまたは複数のユーザグループ識別子を追加し、ユーザグループリストを安全に記憶することができる。
コンテンツプラットフォーム150は、ユーザのユーザグループメンバーシップを使用して、ユーザにとって興味のある可能性がある、または別の形でユーザ/ユーザデバイスにとって有益である可能性があるデジタルコンポーネントまたはその他のコンテンツを選択することができる。例えば、そのようなデジタルコンポーネントまたはその他のコンテンツは、ユーザエクスペリエンスを向上させる、ユーザデバイスの実行を改善する、または何らかのその他の形でユーザもしくはユーザデバイスに利益をもたらすデータを含む場合がある。しかし、ユーザのユーザグループリストのユーザグループ識別子は、コンテンツプラットフォーム150がユーザグループ識別子を特定のユーザと相互に関連付けることを防止する方法で提供されることが可能であり、それによって、ユーザグループメンバーシップデータを使用してデジタルコンポーネントを選択するときに、ユーザのプライバシーおよびデータセキュリティを守る。
アプリケーション112は、コンテンツプラットフォーム150またはユーザ自身ではないいずれかのその他のエンティティがユーザのユーザグループメンバーシップを知ることを防止する方法で、ユーザグループメンバーシップに基づいてクライアントデバイス110における提示のためのデジタルコンポーネントを選択するためにコンテンツプラットフォーム150とインタラクションする信頼されたコンピューティングシステムに、ユーザグループリストからのユーザグループ識別子を提供し得る。
場合によっては、既にユーザグループのメンバーであるユーザと同様の興味またはその他の同様のデータを有するユーザを含めるようにユーザグループを拡大することが、ユーザおよびデジタルコンポーネントプロバイダにとって有益である。有益なことに、これは、サードパーティクッキーを使用せずに実現される可能性がある。例えば、第1のユーザが、雪上スキーに興味がある可能性があり、特定のスキー場のユーザグループのメンバーである可能性がある。第2のユーザも、スキーに興味がある可能性があるが、このスキー場のことを知らず、スキー場の会員でない可能性がある。2人のユーザが同様の関心またはデータ、例えば、同様のユーザプロファイルを有する場合、第2のユーザは、スキー場に関連し、第2のユーザまたはそのユーザデバイスにとって興味のあるまたはその他の形で有益である可能性があるコンテンツ、例えば、デジタルコンポーネントを受信するように、スキー場のユーザグループに追加されてよい。言い換えると、ユーザグループは、同様のユーザデータを有するその他のユーザを含むように拡大されてよい。
安全なMPCクラスタ130は、ユーザのプロファイルに基づいてユーザ(またはそのアプリケーション112)にユーザグループを提案するかまたはユーザグループの提案を生成するために使用され得る機械学習モデルを生成する、例えば、訓練することが可能である。安全なMPCクラスタ130は、機械学習モデルを生成するために安全なMPC技術を実行する2つのコンピューティングシステムMPC1およびMPC2を含む。例示的なMPCクラスタ130は2つのコンピューティングシステムを含むが、MPCクラスタ130が2つ以上のコンピューティングシステムを含む限り、より多くのコンピューティングシステムが、MPCプロセスを実行するために使用されることも可能である。例えば、MPCクラスタ130は、3つのコンピューティングシステム、4つのコンピューティングシステム、または別の適切な数のコンピューティングシステムを含み得る。MPCクラスタ130に、より多くのコンピューティングシステムを使用することは、より高いセキュリティおよび耐障害性を提供し得るが、MPCプロセスの複雑さも増大させ得る。
MPCクラスタ130のコンピューティングシステム、例えば、コンピューティングシステムMPC1およびMPC2は、異なるエンティティによって運用され得る。このようにして、各エンティティは、平文の完全なユーザプロファイルにアクセスすることができない可能性がある。平文は、コンピュータによってタグ付けされておらず、特別にフォーマットされておらず、コードで書かれていないテキスト、あるいは鍵もしくはその他の復号デバイスまたはその他の復号プロセスを必要とせずに閲覧または使用され得る形態の、バイナリファイルを含むデータである。例えば、コンピューティングシステムMPC1またはMPC2のうちの一方は、ユーザ、パブリッシャ140、コンテンツプラットフォーム150、およびデジタルコンポーネントプロバイダ160とは異なる信頼された関係者によって運用され得る。例えば、業界団体、政府機関、またはブラウザ開発者が、コンピューティングシステムMPC1およびMPC2の一方を維持し、運用する場合がある。異なる信頼された関係者が各コンピューティングシステムMPC1およびMPC2を運用するように、他方のコンピューティングシステムは、これらのグループのうちの異なる1つによって運用されてよい。好ましくは、異なるコンピューティングシステムMPC1およびMPC2を運用する異なる関係者は、共謀してユーザのプライバシーを危険にさらす動機を持たない。一部の実装において、コンピューティングシステムMPC1およびMPC2は、アーキテクチャ的に分離されており、この明細書において説明される安全なMPCプロセスの実行の外で互いに通信しないように監視される。
一部の実装において、MPCクラスタ130は、各コンテンツプラットフォーム150(例えば、各DSPおよび/もしくは各SSP)ならびに/または各デジタルコンポーネントプロバイダ160のために1つまたは複数の重心モデルを生成する、例えば、訓練する。例えば、コンテンツプラットフォーム150は、MPCクラスタ130に、コンテンツプラットフォーム150によって管理される、またはコンテンツプラットフォームが少なくとも読み取りアクセスをすることができる1つまたは複数のユーザグループの任意の下位集合に関して重心モデルを生成させることができる。例えば、各コンテンツプラットフォーム150は、1つまたは複数のデジタルコンポーネントプロバイダ160のためにデジタルコンポーネントの配信を管理することができる。コンテンツプラットフォーム150は、コンテンツプラットフォーム150がデジタルコンポーネントの配信を管理するデジタルコンポーネントプロバイダ160のうちの1つまたは複数のための重心モデルをMPCクラスタ130が生成することを要求することができる。別の例においては、デジタルコンポーネントプロバイダ160が、MPCクラスタ130に、デジタルコンポーネントプロバイダ160によって作成され、維持されるユーザグループのうちの1つまたは複数のための重心モデルを生成させることができる。重心モデルを生成するための例示的なプロセスは、図4および図6に示され、以下で説明される。
重心モデルは、ユーザをn次元空間に埋め込むことができる。プロファイル空間内のユーザは、n次元ベクトルX = {x1, x2, ... xn}によって表現される。ユーザグループRは、m人のユーザ{X1, X2, ... Xm}を有する。モデル内のユーザグループRの重心は、Centroid(model, R) =
であることが可能である。ユーザX' = {x1', x2', ... xn'}と仮定すると、コンテンツプラットフォーム150またはデジタルコンポーネントプロバイダ160は、|X' - Centroid(model, R)| < dであるようなすべてのユーザグループRを見つけたい可能性があり、式中、dは、例えば、コンテンツプラットフォーム150によって指定される、重心モデルのための閾値の距離を表すパラメータである。
以降の説明を容易にし、簡潔にするために、残りの説明は、概ね、コンテンツプラットフォーム150、例えば、DSPおよびSSPのための重心モデルの生成および使用の観点からのものである。しかし、システムおよび技術は、デジタルコンポーネントプロバイダ160またはその他のエンティティのための重心モデルを生成し、デジタルコンポーネントプロバイダ160またはその他のエンティティに代わって重心モデルに問い合わせるために実行されることも可能である。
コンテンツプラットフォーム150のための重心モデルを生成した後、コンテンツプラットフォーム150は、クライアントデバイス110のユーザが参加するための1つまたは複数のユーザグループを識別するために、1つもしくは複数の重心モデルに問い合わせるか、またはクライアントデバイス110のアプリケーション112に1つもしくは複数の重心モデルに問い合わさせることができる。例えば、コンテンツプラットフォーム150は、ユーザがコンテンツプラットフォーム150のユーザグループのいずれかに参加するべきかどうかを判定するためにアプリケーション112がコンテンツプラットフォームの重心モデルに問い合わせることを要求することができる。概して、MPCクラスタ130は、ユーザのユーザプロファイルがコンテンツプラットフォーム150のユーザグループの重心の閾値の距離以内にあるかどうかを判定することができる。そうである場合、MPCクラスタ130は、アプリケーション112がユーザをユーザプロファイルが重心の閾値の距離以内にあるユーザグループに追加することを要求することができる。ユーザおよび/またはアプリケーション112によって承認された場合、アプリケーション112は、ユーザグループのユーザグループ識別子を、クライアントデバイス110に記憶されたユーザグループリストに追加することができる。
一部の実装において、アプリケーション112は、ユーザが割り振られるユーザグループをユーザが管理することを可能にするユーザインターフェースを提供することができる。例えば、ユーザインターフェースは、ユーザがユーザグループ識別子を削除すること、すべてのまたは特定のリソース145、パブリッシャ140、コンテンツプラットフォーム150、デジタルコンポーネントプロバイダ160、および/またはMPCクラスタ130がユーザグループにユーザを追加することを防止すること(例えば、アプリケーション112によって維持されるユーザグループ識別子のリストにエンティティがユーザグループ識別子を追加することを防止すること)を可能にすることができる。これは、ユーザに、より優れた透明性、選択/同意、および制御を提供する。
本明細書全体の説明に加えて、ユーザは、本明細書において説明されるシステム、プログラム、または特徴がユーザ情報(例えば、ユーザのソーシャルネットワーク、社会的行為、または活動、職業、ユーザの好み、またはユーザの現在位置についての情報)の収集を有効化してもよいかどうかと、いつ有効化してもよいかとの両方、およびユーザがコンテンツまたは通信をサーバから送信されるかどうかについての選択をユーザが行うことを可能にする制御(例えば、ユーザがインタラクションすることができるユーザインターフェース要素)を提供されてよい。さらに、特定のデータが、個人を識別することができる情報が削除されるように、記憶されるかまたは使用される前に1つまたは複数の方法で処理される場合がある。例えば、ユーザのアイデンティティ(identity)が、個人を識別することができる情報がユーザに関して決定され得ないか、または位置情報が取得されるユーザの地理的位置が(都市、郵便番号、もしくは州のレベルまでになど)一般化される可能性があり、したがって、ユーザの特定の位置が決定され得ないように処理される場合がある。したがって、ユーザは、どの情報がユーザについて収集されるか、その情報がどのように使用されるのか、およびどの情報がユーザに提供されるのかを制御することができてよい。
機械学習モデルを生成し、使用するための例示的なプロセス
図2は、重心モデルを生成し、重心モデルを使用してユーザをユーザグループに追加するための例示的なプロセス200のスイムレーン図である。プロセス200の動作は、例えば、クライアントデバイス110、MPCクラスタ130のコンピューティングシステムMPC1およびMPC2、ならびにコンテンツプラットフォーム150によって実施され得る。プロセス200の動作は、非一時的である場合がある1つまたは複数のコンピュータ可読媒体上に記憶された命令として実装されることも可能であり、1つまたは複数のデータ処理装置による命令の実行は、1つまたは複数のデータ処理装置にプロセス200の動作を実行させることが可能である。以下のプロセス200およびその他のプロセスは2つのコンピューティングシステムのMPCクラスタ130の観点で説明されるが、3つ以上のコンピューティングシステムを有するMPCクラスタも、同様のプロセスを実行するために使用され得る。
コンテンツプラットフォーム150は、クライアントデバイス110上で実行されるアプリケーション112がそれらのそれぞれのユーザのためのユーザプロファイルを生成し、ユーザプロファイルの秘密分散された(secret-shared)および/または暗号化されたバージョンをMPCクラスタ130にアップロードすることを要求することによって、その重心モデルのうちの1つまたは複数の生成および/または更新を開始することができる。本明細書の目的のために、ユーザプロファイルの秘密シェアは、秘密シェアが平文ではないので、ユーザプロファイルの暗号化されたバージョンと考えられ得る。生成の際、各アプリケーション112は、ユーザプロファイルのデータを記憶し、コンテンツプラットフォーム150からの要求の受信に応じて、更新されたユーザプロファイルを生成することができる。ユーザプロファイルの内容および機械学習モデルは異なるコンテンツプラットフォーム150に関して異なるため、ユーザのクライアントデバイス110上で実行されるアプリケーション112は、複数のユーザプロファイルのデータを維持し、それぞれが特定のコンテンツプラットフォームに固有である、または特定の重心モデルに固有である複数のユーザプロファイルを生成し得る。
コンテンツプラットフォーム150(またはデジタルコンポーネントプロバイダ160)は、複数の重心モデル、例えば、1つまたは複数のユーザグループの各集合につき1つの重心モデルを有することができるので、コンテンツプラットフォーム150(またはデジタルコンポーネントプロバイダ160)は、アプリケーション112に、複数のユーザグループおよび/または複数の重心モデルのためにユーザプロファイルを生成し、ユーザプロファイルをアップロードするように同時に、例えば、単一の要求によって要求することができる。
クライアントデバイス110上で実行されるアプリケーション112は、クライアントデバイス110のユーザのユーザプロファイルを構築する(202)。ユーザのユーザプロファイルは、電子リソース、例えば、ウェブページまたはアプリケーションのコンテンツに関してユーザによって開始されたイベントおよび/またはユーザによって開始されることが可能であったイベントに関連するデータを含み得る。イベントは、電子リソースの閲覧、デジタルコンポーネントの閲覧、電子リソースもしくはデジタルコンポーネントとのユーザインタラクションもしくはユーザインタラクション(例えば、選択)の欠如、電子リソースとのユーザインタラクション後に生じる(もしくは生じない)コンバージョン、ならびに/またはユーザおよび電子リソースに関連するその他の適切なイベントを含み得る。ユーザプロファイルは時間の経過と共に変化し得るので、構築されたユーザプロファイルは、現在のユーザプロファイルPcurrentと呼ばれ得る。
ユーザのユーザプロファイルは、コンテンツプラットフォーム150、またはコンテンツプラットフォーム150によって所有される選択された重心モデルに固有であることが可能である。例えば、図3を参照して以下でより詳細に説明されるように、各コンテンツプラットフォーム150は、アプリケーション112がそのコンテンツプラットフォーム150に固有のユーザプロファイルを生成または更新することを要求することができる。別の例において、コンテンツプラットフォーム150は、アプリケーションがコンテンツプラットフォーム150の各重心モデルのためのそれぞれのユーザプロファイルを生成または更新することを要求することができる。
ユーザのユーザプロファイルPcurrentは、特徴ベクトルの形態であることが可能である。例えば、ユーザプロファイルPcurrentは、n次元特徴ベクトルであることが可能である。n次元の各々が、特定の特徴に対応することが可能であり、各次元の値は、ユーザの特徴の値であることが可能である。例えば、1つの次元は、特定のデジタルコンポーネントがユーザに提示されたかどうか(またはユーザによってインタラクションされたかどうか)に関するものである場合がある。この例において、その特徴の値は、デジタルコンポーネントがユーザに提示された(もしくはユーザによってインタラクションされた)場合は「1」であり、またはデジタルコンポーネントがユーザに提示されていない(もしくはユーザによってインタラクションされていない)場合は「0」である可能性がある。ユーザのユーザプロファイルを生成するための例示的なプロセスは、図3に示され、以下で説明される。
アプリケーション112は、ユーザのユーザプロファイルPcurrentの秘密シェアを生成する(204)。この例において、アプリケーション112は、MPCクラスタ130の各コンピューティングシステムについて1つずつ、ユーザプロファイルPcurrentの2つの秘密シェア[Pcurrent, 1]および[Pcurrent, 2]を生成する。本明細書の目的のために、秘密シェアは、秘密分散される要素(例えば、値、ベクトルなど)を囲う角括弧[]、例えば、要素「secret share」の秘密シェアに関しては[secret share]を使用して表現される。例えば、アプリケーションは、MPCクラスタ130内のセキュリティを破られたコンピューティングシステムからユーザプロファイルPcurrentの値を保護するために、ユーザプロファイル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に提供する様々な方法が存在する。
コンピューティングシステム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も平文のユーザのプロファイルまたは平文のユーザに提案されるユーザグループ識別子のいずれにもアクセスすることができないような、ユーザが1つまたは複数のユーザグループに追加されるべきかどうかを判定するための安全なMPCプロセスを実行することができる。ユーザのユーザグループを決定するための例示的なプロセスは、図5および図6に示され、以下で説明される。
MPCクラスタ130は、ゼロ個以上のユーザグループ識別子をアプリケーション112に提供する(216)。MPCクラスタ130は、ユーザが追加されるべきである各ユーザグループのユーザグループ識別子を提供することができる。つまり、MPCクラスタ130は、ユーザのユーザプロファイルが閾値の距離以内にある重心を有する各ユーザグループのユーザグループ識別子を提供することができる。ユーザのプライバシーを保護するために、各コンピューティングシステムMPC1およびMPC2は、図5および図6を参照して以下で説明されるように、ユーザグループ識別子の一部またはユーザグループ識別子の秘密シェアを提供する。
アプリケーション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における電子リソースもしくはデジタルコンポーネントとのユーザインタラクション、あるいはデジタルコンポーネントに関するコンバージョン、あるいは提示された電子リソースもしくはデジタルコンポーネントとのユーザインタラクションまたは提示された電子リソースもしくはデジタルコンポーネントに関するコンバージョンの欠如であることが可能である。イベントが発生するとき、コンテンツプラットフォーム150またはデジタルコンポーネントプロバイダ160は、ユーザのユーザプロファイルの生成に使用するために、イベントに関連するデータをアプリケーション112に提供することができる。
アプリケーション112は、各コンテンツプラットフォーム150またはデジタルコンポーネントプロバイダ160のために異なるユーザプロファイルを生成することができる。つまり、ユーザの、特定のコンテンツプラットフォーム150のためのユーザプロファイルは、特定のコンテンツプラットフォーム150から受信されたイベントデータのみを含んでよい。これは、その他のコンテンツプラットフォームのイベントに関連するデータをコンテンツプラットフォームと共有しないことによってユーザのプライバシーを保護する。一部の実装において、アプリケーション112は、コンテンツプラットフォーム150の要求に従って、コンテンツプラットフォーム150によって所有される各重心モデルのために異なるユーザプロファイルを生成してよい。設計目標に基づいて、異なる重心モデルは、異なる訓練データを必要とする場合がある。例えば、ユーザをユーザグループに追加すべきかどうかを判定するために、第1のモデルが使用される場合がある。ユーザがデジタルコンポーネントとインタラクションするかどうかを予測するために、第2のモデルが使用される場合がある。この例において、第2のモデルのためのユーザプロファイルは、第1のモデルのためのユーザプロファイルが有していない追加のデータ、例えば、ユーザがデジタルコンポーネントとインタラクションしたかどうかを含み得る。
コンテンツプラットフォーム150は、イベントデータをプロファイル更新トークンMupdateの形態で送信することができる。プロファイル更新トークンMupdateは、下のTable 1(表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は、イベントデータおよび更新要求を改ざんもしくは漏洩または中間者攻撃から保護するために、ワールドワイドウェブコンソーシアム(W3C)オリジン(origin)ベースのセキュリティモデルおよび/または(ハイパーテキスト転送プロトコルセキュア)HTTPSに頼る。
アプリケーション112は、イベントのデータを記憶する(304)。イベントデータが暗号化されている場合、アプリケーション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は、ストレージサイズを減らすために、データ構造から期限切れの特徴ベクトルを取り除くことができる。Table 2(表2)の有効期限は、Table 1(表1)に示された更新トークンMupdateの有効期限と同じである。
アプリケーション112は、ユーザプロファイルを生成するべきかどうかを判定する(306)。例えば、アプリケーション112は、コンテンツプラットフォーム150からの要求に応じて、特定の重心モデルのためのユーザプロファイルを生成してよい。要求は、ユーザプロファイルを生成し、MPCクラスタ130にユーザプロファイルをアップロードすることを求めるものである場合がある。ユーザプロファイルを生成し、アップロードする要求のセキュリティを保証するために、コンテンツプラットフォーム150は、アプリケーション112に、アップロードトークンMuploadを送信することができる。
アップロードトークンMuploadは、更新トークンMupdateと同様の構造であるが、異なる動作(例えば、「ユーザプロファイルを蓄積する」の代わりに「サーバを更新する」)を有することが可能である。アップロードトークンMuploadはまた、動作遅延のための追加項目を含み得る。動作遅延は、アプリケーション112がより多くのイベントデータ、例えば、より多くの特徴ベクトルを蓄積する間、ユーザプロファイルの秘密シェアの計算およびアップロードを遅らせるようにアプリケーション112に命令することができる。これは、重心モデルが、いくつかの重要なイベント、例えば、ユーザグループへの参加の直前および直後のユーザイベントデータを取り込むことを可能にする。動作遅延は、遅延期間を指定することができる。この例においては、デジタル署名が、コンテンツプラットフォームの秘密鍵を使用して、Table 1(表1)のその他の7つの項目および動作遅延に基づいて生成され得る。コンテンツプラットフォーム150は、送信中のアップロードトークンMuploadを保護するために、アップロードトークンMuploadを、アプリケーションの公開鍵を使用して更新トークンMupdateと同様の方法で、例えば、PubKeyEnc(Mupload, application_public_key)で暗号化することができる。
アプリケーション112は、アップロードトークンMuploadを受信し、アップロードトークンMuploadが暗号化されている場合にはアップロードトークンMuploadを復号し、アップロードトークンMuploadを検証することができる。この検証は、更新トークンMupdateが検証される方法と同様であることが可能である。アプリケーション112は、(i)デジタル署名を生成するために使用されたコンテンツプラットフォーム150の秘密鍵に対応するコンテンツプラットフォーム150の公開鍵を使用してデジタル署名を検証し、(ii)トークン作成のタイムスタンプが古くないこと、例えば、タイムスタンプによって示される時間が、検証が行われている現在の時間の閾値の量の時間内にあることを保証することによってアップロードトークンMuploadを検証することができる。アップロードトークンMuploadが有効である場合、アプリケーション112は、ユーザプロファイルを生成することができる。いずれかの検証が失敗する場合、アプリケーション112は、例えば、ユーザプロファイルを生成しないことによってアップロード要求を無視することができる。
一部の実装において、コンテンツプラットフォーム150は、アップロード要求をプロファイルアップロードトークンMuploadの形態で符号化することなく、ユーザプロファイルをアップロードするようにアプリケーション112に要求することができる。例えば、アプリケーション112内で実行されるコンテンツプラットフォーム150に由来するスクリプトが、アップロード要求をスクリプトAPIを介してアプリケーション112に直接送信してよく、この場合、アプリケーション112は、アップロード要求を改ざんもしくは漏洩または中間者攻撃から保護するために、W3Cオリジンベースのセキュリティモデルおよび/またはHTTPSに頼る。
ユーザプロファイルを生成しないという決定がなされる場合、プロセス300は、動作302に戻り、コンテンツプラットフォーム150からのさらなるイベントデータを待つことができる。ユーザプロファイルを生成するという決定がなされる場合、アプリケーション112は、ユーザプロファイルを生成する(308)。
アプリケーション112は、記憶されたイベントデータ、例えば、Table 2(表2)に示されたデータ構造に記憶されたデータに基づいてユーザプロファイルを生成することができる。アプリケーション112は、要求に含まれるモデル識別子、例えば、アップロードトークンMuploadの項目1のコンテンツプラットフォームのeTLD+1ドメインおよび項目2のモデル識別子に基づいて適切なデータ構造にアクセスすることができる。
アプリケーション112は、まだ期限が切れていない、調査期間(study period)内のデータ構造のn次元特徴ベクトルを集約することによってユーザプロファイルを計算することができる。例えば、ユーザプロファイルは、まだ期限が切れていない、調査期間内のデータ構造のn次元特徴ベクトルの平均であってよい。結果は、プロファイル空間内でユーザを表すn次元特徴ベクトルである。任意で、アプリケーション112は、例えば、L2正規化(L2 normalization)を使用して、n次元特徴ベクトルを単位長に正規化してよい。コンテンツプラットフォーム150は、任意の調査期間を指定してよい。
一部の実装においては、ユーザプロファイルを計算するために減衰率が使用され得る。重心モデルを訓練するためにMPCクラスタ130を使用する多くのコンテンツプラットフォーム150が存在してよく、各コンテンツプラットフォーム150が複数の重心モデルを有してよいので、ユーザの特徴ベクトルデータを記憶することは、かなり大きなデータストレージの要件につながる場合がある。減衰技術を使用することは、機械学習モデルを訓練するためのユーザプロファイルを生成する目的で各クライアントデバイス110に記憶されるデータの量を大幅に削減することができる。
所与の重心モデルに関して、各々がn次元ベクトルであるk個の特徴ベクトル{F1, F2, ... Fk}と、それらの対応する年齢(age)(record_age_in_secondsi)とが存在すると仮定する。アプリケーション112は、以下の関係1を使用してユーザプロファイルを計算することができる。
この関係において、パラメータ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をエポック(epoch)に設定することができる。いつでも新しい特徴ベクトルFxによってユーザプロファイルPを更新するために、アプリケーション112は、以下の関係2を使用することができる。
また、アプリケーション112は、関係2によってユーザプロファイルを更新するときに、ユーザプロファイルの時間を現在の時間(current_time)に更新することができる。アプリケーション112が上記減衰率アルゴリズムによってユーザプロファイルを計算する場合、動作304は省略されることに留意されたい。
アプリケーション112は、ユーザプロファイルの秘密シェアを生成する(310)。アプリケーション112は、擬似ランダム関数を使用して、ユーザプロファイルPcurrent(例えば、n次元ベクトルPcurrent)を秘密シェアに分割することができる。つまり、アプリケーション112は、擬似ランダム関数PRF(Pi)を使用して、ユーザプロファイルPcurrentの2つの秘密シェア{[Pcurrent, 1],[Pcurrent,2]}を生成することができる。厳密な分割は、アプリケーション112によって使用される秘密分散アルゴリズムおよび暗号ライブラリに依存し得る。一部の実装において、アプリケーションは、Shamirの秘密分散方式を使用する。
一部の実装において、アプリケーションは、加算型秘密分散(additive secret sharing)方式を使用し、すなわち、アプリケーション112は、ランダム(または疑似ランダム)なn次元ベクトルnonceを生成する。この例において、アプリケーションは、Pcurrent + nonceである第1の秘密シェアと、Pcurrent - nonceである第2の秘密シェアとを生成することができる。そして、アプリケーション112は、n次元ベクトルnonceを削除することができる。
悪意のあるアプリケーション112がユーザプロファイルの秘密シェアをアップロードするためのアップロードAPIを悪用することを抑止するために、MPCクラスタ130は、トラストトークン(trust token)の発行者が秘密シェアに署名することを要求し得る。ユーザグループ識別子Liによって示されるm個のユーザグループの各々、ならびにMPCクラスタ130内のコンピューティングシステムMPC1およびMPC2の各々に関して、アプリケーション112は、トラストトークンの発行者とのトラストトークン引き換え(redemption)プロセスを開始して、署名済み引き換えレコード(SRR: Signed Redemption Record)を取得することができる。m個のユーザグループは、(i)アップロードトークンMuploadを送信したコンテンツプラットフォーム150(またはデジタルコンポーネントプロバイダ160)によって管理され、(ii)ユーザをメンバーとして含むユーザグループ、例えば、アプリケーション112によって維持されるユーザグループリスト内で識別されるユーザグループであることが可能である。
トラストトークン引き換えプロセスにおいて、アプリケーション112は、アプリケーション112および/または信頼できるとみなされるクライアントデバイス110に基づいて、アプリケーション112に以前に発行されたトラストトークンを引き換えることができる。これは、トラストトークンおよび情報(例えば、コンピューティングシステムMPC1またはMPC2のバインディング(binding)およびeTLD+1)を、トラストトークンを引き換える要求と共にトラストトークンの発行者に送信することを含み得る。トラストトークンの発行者は、アプリケーション112にSRRを提供することによって応答することができる。アプリケーション112は、トラストトークンを各SRRと引き換えることができる。SRRの例示的なフォーマットが、以下のTable 3(表3)に示される。
アプリケーション112は、バインディングとして、モデル識別子、SRRが生成されたユーザプロファイルの秘密シェア、ユーザグループLi、およびアプリケーション112の公開鍵(application_public_key)のメッセージ認証コード(例えば、ハッシュベースメッセージ認証コード(HMAC: hash-based message authentication code))を計算することができる。例えば、バインディングは、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の例示的なフォーマットが、以下のTable 4(表4)に示される。
アプリケーション112は、タイムスタンプおよびデジタル署名を生成することができる。アプリケーション112は、項目4の公開鍵に対応するアプリケーション112の秘密鍵を使用してデジタル署名を生成することができる。これは、ユーザプロファイル更新トークンMprofileupdateの受信者が秘密鍵に対応する公開鍵を使用して署名を検証することを可能にする。
セキュリティを破られたアプリケーション112は、ユーザプロファイル更新トークンMprofileupdateを使用してコンテンツプラットフォーム150の要求に従って動作するのではなく、勝手にユーザプロファイル更新動作を開始する可能性がある。MPCクラスタ130がそのような状況を検出することを可能にするために、アプリケーション112は、任意で、コンテンツプラットフォーム150から受信された更新トークンMupdateをユーザプロファイル更新トークンMprofileupdateに含めることができる。
アプリケーション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を対象とするユーザプロファイルの第1の秘密シェア[Pcurrent, 1]を有するすべてのユーザプロファイル更新トークンが、コンピューティングシステムMPC1の公開鍵によって個々に暗号化されるようにして、単一の要求をコンピューティングシステムMPC2に送信することができる。この単一の要求は、PubKeyEnc(Mprofileupdate_1, MPC1)、PubKeyEnc(Mprofileupdate_2, MPC1)、... PubKeyEnc(Mprofileupdate_m, MPC1)の形態の暗号化された結果の集合を含むことができ、PubKeyEncは、確率的非対称暗号化アルゴリズムを表し、MPC1は、コンピューティングシステムMPC1の非対称公開鍵を表す。
PubKeyEncの確率的性質は、強秘匿性(semantic security)を提供する。強秘匿方式は、暗号化された結果から無視できる程度の情報しか抽出され得ない方式である。コンピューティングシステムMPC1と共謀しなければ、コンピューティングシステムMPC2は暗号化されたトークンのリストからいかなる情報も推測し得ない。コンピューティングシステムMPC2は、トークンのリストを分解し、ユーザプロファイル更新トークンMprofileupdateごとに1要求ずつ、m個の要求をコンピューティングシステムMPC1に送信することができる。コンピューティングシステムMPC2は、連続した要求の間にランダムまたは擬似ランダムな遅延を使用することができる。別の例において、コンピューティングシステムMPC2は、同じアプリケーション112からの要求を相互に関連付けることを防止するために、複数のクライアントデバイス110上で実行される複数のアプリケーション112からの複数の要求をコンピューティングシステムMPC1に一括アップロードすることができる。
アプリケーション112は、コンピューティングシステムMPC2のための第2の秘密シェアをアップロードするために同様の技術を使用することができる。つまり、アプリケーション112は、コンピューティングシステムMPC2を対象とするユーザプロファイルの第2の秘密シェア[Pcurrent, 2]を有するすべてのユーザプロファイル更新トークンがコンピューティングシステムMPC2の公開鍵によって個々に暗号化されるようにして、単一の要求をコンピューティングシステム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は、ユーザプロファイルを更新するそれぞれの受信された要求を検証することができる。暗号化された結果PubKeyEnc(Mprofileupdate_i, MPCj)を有する要求を受信すると、コンピュータシステムに依存して、jが1または2である場合、コンピューティングシステムMPCjは、暗号化された結果を復号して、平文のユーザプロファイル更新トークンMprofileupdate_iを復元する。コンピューティングシステムMPCjは、ユーザプロファイル更新トークンMprofileupdate_iを検証する。そのようにするために、コンピューティングシステムMPCjは、SRRの項目1.4のトラストトークン発行者ドメインから取得された公開鍵を使用して、SRRの項目1.5のデジタル署名(Table 3(表3)参照)を検証する。また、コンピューティングシステムMPCjは、MPCクラスタ130にMprofileupdate_iを送信したアプリケーション112の公開鍵を使用して、ユーザプロファイル更新トークンMprofileupdate_iの項目7のデジタル署名(Table 4(表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)と一致することを検証することもできる。コンピューティングシステムMPCjは、ユーザプロファイル更新トークンMprofileupdate_iの項目5のトークン作成のタイムスタンプが古くないことを、例えば、トークン作成のタイムスタンプが、検証が実行されている現在の時間の閾値の継続時間以内であることを保証することによって検証することもできる。コンピューティングシステムMPCjは、トークン作成のタイムスタンプを使用して、例えば、同じトークン作成のタイムスタンプを有する複数のユーザプロファイル更新トークンに基づいて潜在的な反射攻撃を検出することもできる。これらの検証のいずれかが失敗する場合、コンピューティングシステムMPCjは、要求を無視することができる。
各コンピューティングシステムMPC1およびMPC2は、各重心モデルのためのデータを含むテーブル(またはその他の適切なデータ構造)を維持することができる。例えば、テーブルは、以下のTable 5(表5)の形態であることが可能である。
重心モデルの行は、モデル識別子(model_id)、モデルに含まれるユーザグループのユーザグループ識別子(Li)、重心モデルに関して受信されたユーザプロファイルのすべてのシェアの総和、および重心モデルのためのユーザプロファイルの秘密シェアを送り、その秘密シェアが重心モデルのためのすべてのシェアの総和に含まれる一意のアプリケーション112の数(例えば、一意のクライアントデバイスの数)を含む。すべてのシェアの総和は、ユーザプロファイルのn次元ベクトルに対応するn次元ベクトルである。
コンピューティングシステムMPCjがこれまで受信したことのないモデル/ユーザグループのペア{model_id, Li}が受信されるとき、コンピューティングシステムMPCjは、重心モデルのためのすべてのシェアの総和をゼロベクトルに初期化し、アプリケーションの数をゼロに初期化することができる。特定のモデル/ユーザグループのペアを含む重心モデルのためのユーザプロファイルを更新する有効な要求を処理するために、コンピューティングシステムMPCjは、テーブル内の重心モデル/ユーザグループのペアに関する行を見つけ、重心モデル/ユーザグループのペアのすべてのシェアの総和およびアプリケーションの数を更新することができる。例えば、コンピューティングシステムMPCjは、ユーザプロファイルの受信された秘密シェアを重心モデル/ユーザグループのペアのすべてのシェアの総和に加え、アプリケーションの数を1つインクリメントすることができる。
重心モデルを生成し、使用するための例示的なプロセス
図4は、重心モデルを生成するための例示的なプロセス400を示す流れ図である。プロセス400の動作は、例えば、図1のMPCクラスタ130によって実施され得る。プロセス400の動作は、非一時的である場合がある1つまたは複数のコンピュータ可読媒体上に記憶された命令として実装されることも可能であり、1つまたは複数のデータ処理装置による命令の実行は、1つまたは複数のデータ処理装置にプロセス400の動作を実行させることが可能である。プロセス400は、複数の重心モデルを生成するという観点で説明されるが、単一のユーザグループのための単一の重心モデルを生成するために使用されることも可能である。
各コンピューティングシステムMPC1およびMPC2は、ユーザプロファイルデータのテーブルを取得する(402)。例えば、テーブルは、上のTable 5(表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)の後半を送信することができる。以下で検討される水平区分け(horizontal partitioning)戦略に基づくsum_of_shares1の後半のみの送信。
同様に、コンピューティングシステムMPC2は、コンピューティングシステムMPC1に、アプリケーションの数がサイズの閾値を超える各行のモデル識別子、ユーザグループ識別子、およびアプリケーションの数を送信することができる。さらに、コンピューティングシステムMPC2は、コンピューティングシステムMPC1に、これらの行の各々のシェアの総和のベクトル(sum_of_shares2)の前半を送信することができる。
コンピューティングシステムMPC1は、アプリケーションの数がサイズの閾値を超えるそのテーブルの行を、コンピューティングシステムMPC2から受信された行とマッチングする。例えば、コンピューティングシステムMPC1は、行のモデル識別子および/またはユーザグループ識別子を使用して、同じモデルおよびユーザグループに関するものである対応する行をマッチングすることができる。同様に、コンピューティングシステムMPC2は、アプリケーションの数がサイズの閾値を超えるそのテーブルの行を、コンピューティングシステムMPC1から受信された行とマッチングする。例えば、コンピューティングシステムMPC2は、行のモデル識別子および/またはユーザグループ識別子を使用して、同じモデルおよびユーザグループに関するものである対応する行をマッチングすることができる。コンピューティングシステムMPC1における表形式のこのサイズの閾値の施行および相互通知の例示的な結果が、以下のTable 6(表6)に示される。
同様に、コンピューティングシステムMPC2における表形式のサイズの閾値の施行および相互通知の例示的な結果が、以下のTable 7(表7)に示される。
各行について、理想的な状況では、所与のモード識別子に関して両方が存在する場合、「MPC1からのアプリケーションの数」および「MPC2からのアプリケーションの数」の値は同じであるべきである。処理の遅延が原因で、2つの値は、わずかな差を有する可能性がある。両方の値が存在し、2つの値が大きく異なる場合、または値のうちの一方がサイズの閾値を超えない場合、サイズの閾値を超えない値を提供したコンピューティングシステムは、セキュリティを破られた可能性がある。「MPC1からのアプリケーションの数」および「MPC2からのアプリケーションの数」の値が近さの閾値を満たし(例えば、互いの閾値の差以内である)、両方ともサイズの閾値を超える行に関して、コンピューティングシステムは、その重心を計算することができる。
コンピューティングシステムMPC1およびMPC2は、重心モデルに関する重心を計算する(408)。コンピューティングシステムMPC1は、近さ(例えば、閾値の差以内)およびサイズの閾値を満たす行のユーザグループの重心ベクトルの前半を計算することができる。コンピューティングシステムMPC1は、以下の関係3を使用して、モデル識別子およびユーザグループに関する(例えば、行に関する)重心を計算することができる。
同様に、コンピューティングシステムMPC2は、以下の関係4を使用して、モデル識別子およびユーザグループに関する(例えば、行に関する)重心を計算することができる。
ユーザグループの重心は、概して、プライバシーに影響せず、悪意のあるアプリケーション112、コンテンツプラットフォーム150、またはMPCクラスタ130のコンピューティングシステムMPC1およびMPC2がユーザプロファイルを盗むことを可能にするために容易に操作され得ない。
このプロセスの終わりに、コンピューティングシステムMPC1は、リストサイズの閾値を超えるすべてのリストに関する重心の前半を有する。このプロセスの結果の例が、以下のTable 8(表8)に表形式で示される。コンピューティングシステムMPC2は、各モデル識別子およびユーザグループ識別子に関する重心ベクトルの後半に関して同じデータを有する。ユーザグループのための訓練された重心モデルは、これらのユーザグループの各々の重心の前半を含む第1の重心モデルと、各ユーザグループの重心の後半を含む第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つまたは複数の重心モデルを訓練し、使用することができる。
重心モデルに問い合わせるようにアプリケーションに要求するために、要求者は、クライアントデバイス110に、ダウンロードグループトークンMdownloadを送信することができる。トークンMdownloadは、以下のTable 9(表9)に示され、説明される以下の項目を有することが可能である。
一部の実装において、コンテンツプラットフォーム150は、アプリケーション112の公開鍵を使用してダウンロードグループトークンMdownloadを暗号化することができる。次いで、コンテンツプラットフォーム150は、アプリケーションのAPIを呼び出して、それ自体のまたはSSPのスクリプトを介してユーザグループ識別子を取得することができる。アプリケーション112は、ユーザプロファイル更新トークンMprofileupdateを復号し検証するのと同じ方法で、ダウンロードグループトークンMdownloadを復号し検証することができる。
model_id、ユーザプロファイルP、および閾値の距離dの所与のタプルに関して、アプリケーション112は、|P - Centroid(model_id, Li)| < dであるすべてのユーザグループ識別子Liを取得するべきである。この例において、関数、Centroid(model_id, Li)は、Table 8(表8)のmodel_idおよびLiによって示される行からCentroid列の値を返す。
コンピューティングシステムMPC1またはMPC2のどちらかがユーザプロファイルPを完全な形で知ることを防ぐために、アプリケーション112は、ユーザのユーザプロファイルPを部分に分割する(502)。アプリケーション112は、ユーザプロファイルを、MPCクラスタ130の各コンピューティングシステムのためのそれぞれの部分に分割することができる。この例において、アプリケーション112は、ユーザプロファイルを、2つの部分、コンピューティングシステムMPC1のための第1の部分と、コンピューティングシステムMPC2のための第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は、ユーザのプライバシーをよりしっかりと保護するために、差分プライバシーノイズ(differential privacy noise)を追加することもできる。例えば、アプリケーション112は、例えば、ユーザプロファイルPを部分に分割する前に、1回限りのユーザノイズ(one-time user noise)ΔPをユーザプロファイルPに追加することができる。
P' = P +ΔPとする。アプリケーション112は、P'を2つの半分、P1'およびP2'に分割するために水平区分けを適用する。d' = d + |ΔP|とする。アプリケーション112は、前半P1'をコンピューティングシステムMPC1に送信する(504)。例えば、アプリケーション112は、2つのパラメータ{P1', d'}を有する要求をコンピューティングシステムMPC1に送信することができる。要求は、|P1' - Centroid1(model_id, Li)| < d'であるすべてのユーザグループ識別子Liを取得することを求めるものであることが可能である。
同様に、アプリケーション112は、後半P2'をコンピューティングシステムMPC2に送信する(506)。例えば、アプリケーション112は、2つのパラメータ{P2', d'}を有する要求をコンピューティングシステムMPC2に送信することができる。要求は、|P2' - Centroid1(model_id, Li)| < d'であるすべてのユーザグループ識別子Liを取得することを求めるものであることが可能である。
コンピューティングシステムMPC1は、ユーザプロファイルP'の前半P1'の閾値の距離d'以内に重心を有するユーザグループを決定することができる(508)。コンピューティングシステムMPC1は、各ユーザグループに関して、前半P1'とユーザグループの重心との間の距離、すなわち、|P1' - Centroid1(model_id, Li)|を決定することができる。次いで、アプリケーション112は、どのユーザグループが距離d'未満の距離を有するかを判定することができる。これらのユーザグループのユーザグループ識別子は、U1によって表され得る。
同様に、コンピューティングシステムMPC2は、ユーザプロファイルP'の後半P2'の閾値の距離d'以内に重心を有するユーザグループを決定することができる(510)。コンピューティングシステムMPC2は、各ユーザグループに関して、後半P2'とユーザグループの重心との間の距離、すなわち、|P2' - Centroid2(model_id, Li)|を決定することができる。次いで、アプリケーション112は、どのユーザグループが距離d'未満の距離を有するかを判定することができる。これらのユーザグループのユーザグループ識別子は、U2によって表され得る。
コンピューティングシステムMPC1は、ユーザグループ識別子の集合U1をアプリケーション112に送信する(512)。同様に、コンピューティングシステムMPC2は、ユーザグループ識別子の集合U2をアプリケーション112に送信する(514)。
アプリケーション112は、ユーザのためのユーザグループの集合を計算する(516)。アプリケーション112は、集合U1およびU2を使用して|P - Centroid(model_id, Li)| < dを満たすすべてのユーザグループ識別子Liの集合Uを計算することができる。U⊆(U1 ∪ U2)であるとき、U = {Li}、ただし、|P - Centroid(model_id, Li)| < dおよびLi∈U1 ∪ U2であるので、アプリケーション112は、U1およびU2から集合Uを計算することができる。
前の手法は、ユーザグループの重心がプライバシーに影響せず、ブラウザがMPC1またはMPC2のどちらかに参加すべきユーザグループ、すなわち、U1およびU2の上位集合を漏洩することが許容されると仮定する。より強力なプライバシー保護を要する状況においては、次の方法が使用され得る。図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を含む。問い合わせトークンの例示的なフォーマットが、以下のTable 9(表10)に示される。
アプリケーション112は、ユーザのユーザグループ識別子を取得する要求をコンピューティングシステムMPC2に送信する(610)。要求は、ユーザプロファイルPの第2の秘密シェア[P2]を含み得る。一部の実装において、要求は、問い合わせトークンMquery2を含む。問い合わせトークンの例示的なフォーマットが、以下のTable 9(表10)に示される。
一部の実装において、アプリケーション112は、図6に示されるように、2つの別々の要求を送信することができる。クライアントデバイス110の帯域幅およびバッテリ消費を節約するために、アプリケーション112は、2つの要求(例えば、2つの問い合わせトークンMquery1およびMquery2)を単一の要求へと組み合わせ、単一の要求をコンピューティングシステムMPC1またはMPC2のうちの一方に送信することができる。そのようにするために、アプリケーション112は、他方のコンピューティングシステムMPC1またはMPC2を対象とする問い合わせトークンを暗号化することができる。例えば、アプリケーション112は、コンピューティングシステムMPC2の暗号化公開鍵を使用して、例えば、確率的非対称公開鍵アルゴリズムを使用して、問い合わせトークンMquery2を暗号化することができる。例えば、アプリケーション112は、コンピューティングシステムMPC2の公開鍵を使用して、暗号化の結果PubKeyEnc(Mquery2, MPC2)を生成することができる。次いで、アプリケーション112は、問い合わせトークンMquery1および暗号化の結果PubKeyEnc(Mquery2, MPC2)をコンピューティングシステムMPC1に送信することができる。
コンピューティングシステムMPC1は、図3を参照して上で説明されたようにコンピューティングシステムMPC1が更新トークンMprofileupdateを検証するのと同様の方法で問い合わせトークンMquery1を検証することができる。また、コンピューティングシステムMPC1は、暗号化の結果PubKeyEnc(Mquery2, MPC2)を伴う要求をコンピューティングシステムMPC2に送信することができる。コンピューティングシステムMPC2は、問い合わせトークンMquery2を暗号化するために使用された公開鍵に対応するその秘密鍵を使用して、暗号化の結果を復号することができる。次いで、コンピューティングシステムMPC2は、図3を参照して上で説明されたようにコンピューティングシステムMPC2が更新トークンMprofileupdateを検証するのと同様の方法で問い合わせトークンMquery2を検証することができる。
一部の実装において、各コンピューティングシステムMPC1およびMPC2は、重心モデルに関連する複数のユーザグループの各々に関して、ユーザグループのユーザグループ適格性(user group eligibility) eligible_groupiのそれぞれの秘密シェアを決定することができる。ユーザプロファイルおよびユーザグループに関するユーザグループ適格性eligible_groupiは、重心モデルに基づいて、ユーザのユーザプロファイルがユーザグループの重心の閾値の距離以内にあるかどうかを示す。
この例において、各コンピューティングシステムMPC1およびMPC2は、モデル識別子model_idに関連するすべてのユーザグループLiを調べることができ、1≦i≦Nであり、Nはモデル識別子model_idに関連するユーザグループの数である。各ユーザグループLiに関して、コンピューティングシステムMPC1は、以下の関係5を使用して、ユークリッド距離[di, 1]の2乗の第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であると推定することができる。以下のTable 10(表11)によって、MPCクラスタ130は、その推定が正しかったかどうかをアプリケーション112に知らせることができる。
例えば、gi + hi == 1およびeligible_groupi == 1である場合、アプリケーションは、対応するセルの値が1となるようにeligible_groupiの値を正しく推定した。一方、gi + hi == 2およびeligible_groupi == 1である場合、アプリケーション112は、対応するセルの値が0となるようにeligible_groupiの値を誤って推定した。この場合、アプリケーション112は、eligible_groupiの値を正しく推定し得るように、その推定を反転させることができる。上の表は、(1 - eligible_groupi)×(1 - (gi + hi - 1)2) + eligible_groupi×(gi + hi - 1)2と等価であることが確かめられ得る。
安全なMPCを使用してこの概念を実装するために、アプリケーション112は、(例えば、16バイトまたは別の適切なデータサイズの)2つのランダムな(または疑似ランダムな)シードseed1およびseed2を生成することができる(612)。アプリケーション112は、第1のシードseed1をコンピューティングシステムMPC1に送信することができる(614)。アプリケーション112は、第2のシードseed2をコンピューティングシステムMPC2に送信することができる(616)。
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は、(ユーザがユーザグループLiに追加されるべきかどうかのアプリケーションの推定である)gi + hiの2つの加算型秘密シェア(additive secret share)であり、それらは、それらが秘密シェアであることを示すために[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乗および2つの秘密シェアの間の乗算を含むことに留意されたい。コンピューティングシステムMPC1とMPC2との間の安全なMPCプロセスを使用する2乗および乗算の計算は、2つのコンピューティングシステムMPC1とMPC2との間のリモートプロシージャコール(RPC)の1つのラウンドを必要とし得る。すべてのその他の動作は、各コンピューティングシステムMPC1およびMPC2内でローカルで実行され得る。
具体的には、コンピューティングシステムMPC1およびMPC2の各々は、各ユーザグループLiに関する推定フラグflagiの秘密シェアを計算することができる。ユーザグループに関する推定フラグ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は、アプリケーション112が、ユーザが第i番目のグループに追加されるべきかどうかを正しく推定したことを意味し、値0は、そうでない場合である。したがって、各平文flagiは、1ビットによって表され得る。
重心モデルに関連する各ユーザグループに関して、コンピューティングシステムMPC1は、単一のビット(flagi)を返すことができる。100万個のユーザグループを有する重心モデルに関して、応答サイズは、128キロバイト(KB)となり、これは、要求の必要とされるレイテンシーおよび要求がMPCクラスタ130に送られる頻度に基づいて実用的である。
アプリケーション112は、推定フラグに基づいて、ユーザをユーザグループに追加すべきかどうかを判定する(626)。各ユーザグループに関して、アプリケーションは、flagi == (gi + hi == 1)を計算することができる。演算「==」は、両方の値が等しい場合に真を返す等価演算を表す。計算結果が真である場合、アプリケーション112は、重心モデルに関連する第i番目のユーザグループに参加すべきである。
次いで、アプリケーション112は、MPCクラスタ130に、アプリケーション112が参加すべきユーザグループのユーザグループ識別子を要求することができる。そのようにするために、アプリケーション112は、任意の好適な密なプライベート情報検索(PIR)アルゴリズムおよび実装を用いて、コンピューティングシステムMPC1およびMPC2に対して密なプライベート情報検索(PIR: private information retrieval)を開始することができる。一部の実装は、分散ポイント関数(DPF: Distributed Point Function)に依拠する。そのような実装において、アプリケーション112は、DPFを生成することができる(628)。アプリケーション112が参加すべき第i番目のユーザグループに関して、アプリケーション112は、j = iである場合、gi(j) + hi(j) = 1であり、そうでない場合、gi(j) + hi(j) = 0であるような2つのDPF、giおよびhiを生成することができる。
アプリケーション112は、コンピューティングシステムMPC1に第1の要求を送信することができる(630)。第1の要求は、アプリケーション112が参加すべき各ユーザグループに関するポイント関数(point function)giを含み得る。
アプリケーション112は、コンピューティングシステムMPC2に第2の要求を送信することができる(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が真である場合にのみ、問い合わせ応答においてユーザグループ識別子Liをアプリケーション112に返すことができる。
一部の実装において、重心モデルの訓練および重心モデルの問い合わせは、集約サービス(aggregation service)によって実行され得る。集約サービスは、MPCクラスタ130を含み、クライアントデバイス110ではなく、例えば、コンテンツプラットフォーム150と通信することができる。そのような場合、アプリケーション112がどのユーザグループに参加すべきかを問い合わせるとき、アプリケーション112は、プライバシー上の理由で、MPCクラスタ130に転送するためにユーザのユーザプロファイルをコンテンツプラットフォーム150に送信しない場合がある。1つの選択肢は、アプリケーション112にユーザグループの重心を送信するようにコンテンツプラットフォーム150を構成することである。しかし、これは、多大な帯域幅を消費する可能性がある。
別の選択肢は、コンテンツプラットフォーム150が、ユーザの安全なモバイルID(例えば、FLOC ID)、ファーストパーティクッキーから受信されたファーストパーティクッキーデータ、およびデジタルコンポーネント要求のURLに基づいて、使用のためのユーザグループを推測することである。しかし、これは、上述の技術ほど正確ではない可能性がある。
図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は、重心モデルを生成するとき、重心モデルに対応する各ユーザグループの重心を決定することができる。重心の形態は、使用される暗号技術に基づいて異なることが可能である。例えば、図4を参照して説明されたように、MPCプロセスおよび水平区分けを使用して重心が決定される場合、MPCクラスタ130の各コンピューティングシステムは、重心を生成するために使用されるユーザプロファイルの秘密シェアの総和の一部分、例えば、半分に基づいて決定されるユーザグループの重心を有することが可能である。秘密分散が使用される場合、MPCクラスタ130の各コンピューティングシステムは、ユーザグループの重心の秘密シェアを有することが可能である。
ユーザグループの結果が決定される(708)。ユーザグループの結果は、ユーザを追加すべき1つまたは複数のユーザグループを示す。例えば、ユーザグループの結果は、ユーザのユーザプロファイルの閾値の距離以内にある重心を有するユーザグループを示し得る。
ユーザグループの結果が送信される(710)。例えば、第1のコンピューティングシステムは、そのユーザグループの結果を、クライアントデバイス110上で実行されるアプリケーション112に送信することができる。
第1のコンピューティングシステムは、使用される暗号技術に応じて異なる方法でユーザグループの結果を決定することが可能であり、ユーザグループの結果は、使用される暗号技術に基づいて異なることが可能である。例えば、水平区分けが使用される場合、第1のコンピューティングシステムは、ユーザグループの集合内の各ユーザグループに関して、図5を参照して説明されたように、第1のユーザプロファイルデータに含まれるユーザプロファイルの第1の部分が、第1のコンピューティングシステムによって既に決定されたユーザグループの重心の閾値の距離以内にあるかどうかを判定することができる。この例において、ユーザグループの結果は、重心がユーザのユーザプロファイルの閾値の距離以内にあるユーザグループのユーザグループ識別子を含み得る。それぞれのその他のコンピューティングシステムは、その重心およびユーザプロファイルの受信された部分を使用して同様の処理を実行することができる。各コンピューティングシステムは、重心がユーザのユーザプロファイルの閾値の距離以内にあるユーザグループのユーザグループ識別子を含むユーザグループの結果を提供することができる。次いで、クライアントデバイスのアプリケーションは、図5を参照して説明されたように、各コンピューティングシステムから受信されたユーザグループの結果に基づいて、ユーザを追加すべきユーザグループのリストを決定することができる。
秘密分散が使用される場合、ユーザグループの結果は、図6を参照して説明されたように、ユーザグループの集合内の各ユーザグループに関する推定フラグを含み得る。ユーザグループに関する推定フラグは、アプリケーションが、ユーザがユーザグループに追加されるべきかどうかを正しく推定したかどうかを示す。アプリケーション112は、推定フラグを使用して、例えば、アプリケーション112が、ユーザがユーザグループに追加されるべきであると推定したかどうか、および推定が正しかったかどうかに基づいて、ユーザをユーザグループに追加すべきかどうかを判定することができる。そうである場合、アプリケーション112は、推定フラグに対応するユーザグループ識別子に関してMPCクラスタ130に問い合わせることができる。
図8は、上述の動作を実行するために使用され得る例示的なコンピュータシステム800のブロック図である。システム800は、プロセッサ810、メモリ820、ストレージデバイス830、および入力/出力デバイス840を含む。構成要素810、820、830、および840の各々は、例えば、システムバス850を使用して相互に接続され得る。プロセッサ810は、システム800内で実行するための命令を処理することができる。一部の実装において、プロセッサ810は、シングルスレッドプロセッサである。別の実装において、プロセッサ810は、マルチスレッドプロセッサである。プロセッサ810は、メモリ820またはストレージデバイス830に記憶された命令を処理することができる。
メモリ820は、システム800内で情報を記憶する。1つの実装において、メモリ820は、コンピュータ可読媒体である。一部の実装において、メモリ820は、揮発性メモリユニットである。別の実装において、メモリ820は、不揮発性メモリユニットである。
ストレージデバイス830は、システム800に大容量ストレージを提供することができる。一部の実装において、ストレージデバイス830は、コンピュータ可読媒体である。様々な異なる実装において、ストレージデバイス830は、例えば、ハードディスクデバイス、光ディスクデバイス、複数のコンピューティングデバイスによってネットワークを介して共有されるストレージデバイス(例えば、クラウドストレージデバイス)、または何らかのその他の大容量ストレージデバイスを含み得る。
入力/出力デバイス840は、システム800に入力/出力動作を提供する。一部の実装において、入力/出力デバイス840は、ネットワークインターフェースデバイス、例えば、イーサネットカード、シリアル通信デバイス、例えば、RS-232ポート、および/またはワイヤレスインターフェースデバイス、例えば、802.11カードのうちの1つまたは複数を含み得る。別の実装において、入力/出力デバイスは、入力データを受信し、外部デバイス860、例えば、キーボード、プリンタ、およびディスプレイデバイスに出力データを送信するように構成されたドライバデバイスを含み得る。しかし、モバイルコンピューティングデバイス、モバイル通信デバイス、セットトップボックステレビクライアントデバイスなどのその他の実装も、使用され得る。
例示的な処理システムが図8において説明されたが、本明細書に記載の主題および機能的動作の実装は、本明細書で開示された構造およびそれらの構造的均等物を含む、その他の種類のデジタル電子回路、またはコンピュータソフトウェア、ファームウェア、もしくはハードウェア、またはそれらのうちの1つもしくは複数の組合せで実装され得る。
本明細書に記載の主題および動作の実施形態は、本明細書において開示された構造およびそれらの構造的均等物を含む、デジタル電子回路、またはコンピュータソフトウェア、ファームウェア、もしくはハードウェア、またはそれらのうちの1つもしくは複数の組合せで実装され得る。本明細書に記載の主題の実施形態は、1つまたは複数のコンピュータプログラム、すなわち、データ処理装置による実行のために、またはデータ処理装置の動作を制御するために複数のコンピュータストレージ媒体(または1つのコンピュータストレージ媒体)上に符号化されたコンピュータプログラム命令の1つまたは複数のモジュールとして実装され得る。代替的にまたは追加的に、プログラム命令は、データ処理装置による実行のために好適な受信機装置に送信するために情報を符号化するように生成される人為的に生成される伝播信号、例えば、機械によって生成される電気的信号、光学的信号、または電磁的信号上に符号化され得る。コンピュータストレージ媒体は、コンピュータ可読ストレージデバイス、コンピュータ可読ストレージ基板、ランダムもしくはシリアルアクセスメモリアレイもしくはデバイス、またはそれらのうちの1つもしくは複数の組合せであることが可能であり、あるいはそれらに含まれることが可能である。さらに、コンピュータストレージ媒体は、伝播信号ではないが、人為的に生成された伝播信号に符号化されたコンピュータプログラム命令の送信元または送信先であることが可能である。また、コンピュータストレージ媒体は、1つまたは複数の別個の物理コンポーネントまたは媒体(例えば、複数のCD、ディスク、もしくはその他のストレージデバイス)であるか、またはそれらに含まれることが可能である。
本明細書に記載の動作は、1つもしくは複数のコンピュータ可読ストレージデバイスに記憶されたまたはその他のソースから受信されたデータに対してデータ処理装置によって実行される動作として実装され得る。
用語「データ処理装置」は、例として、上述の1つのプログラミング可能なプロセッサ、1台のコンピュータ、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つまたは複数の特徴は、場合によっては組合せから削除されることが可能であり、特許請求された組合せは、部分的組合せ、または部分的組合せの変形を対象とする可能性がある。
同様に、動作が図中に特定の順序で示されているが、これは、そのような動作が示された特定の順序でもしくは逐次的順序で実行されること、または所望の結果を達成するために示されたすべての動作が実行されることを必要とするものと理解されるべきでない。特定の状況においては、マルチタスクおよび並列処理が有利である場合がある。さらに、上述の実施形態における様々なシステムコンポーネントの分割は、すべての実施形態においてそのような分割を必要とするものと理解されるべきでなく、説明されたプログラムコンポーネントおよびシステムは、概して、単一のソフトウェア製品に一緒に統合されるかまたは複数のソフトウェア製品にパッケージングされることが可能であることを理解されたい。
このように、主題の特定の実施形態が説明された。その他の実施形態は、添付の特許請求の範囲内にある。場合によっては、特許請求の範囲に挙げられたアクションは、異なる順序で実行され、それでも所望の結果を達成することができる。加えて、添付の図面に示されたプロセスは、所望の結果を達成するために、必ずしも示された特定の順序または逐次的順序である必要はない。特定の実装においては、マルチタスクおよび並列処理が有利である場合がある。