【文献】
Han Zhang, et al,Discriminative Feature Learning for Video Semantic Segmentation,Published in: 2014 International Conference on Virtual Reality and Visualization,米国,IEEE,2014年 8月30日,321 - 326,URL,https://ieeexplore.ieee.org/document/7281085
【文献】
Jonathan Long,Fully Convolutional Networks for Semantic Segmentation,2015 IEEE Conference on Computer Vision and Pattern Recognition,IEEE,2015年 6月 7日,3431 - 3440,URL,https://ieeexplore.ieee.org/document/7298965
(58)【調査した分野】(Int.Cl.,DB名)
畳み込みニューラル・ネットワークを使用して前記ビデオ・フレームのセットを処理して、1以上の信号を出力する工程であって、前記畳み込みニューラル・ネットワークは、(i)二次元畳み込み層のセットと、(ii)三次元畳み込み層のセットと、を含む、工程は、
前記コンピューティング・システムが、前記ビデオ・フレームのセットの表現を前記二次元畳み込み層のセットに入力して、第1の信号のセットを出力する工程であって、前記二次元畳み込み層は、少なくとも1つの二次元畳み込み動作をビデオ・コンテンツの前記表現に適用するように訓練されている、工程と、
前記コンピューティング・システムが、前記第1の信号のセットの少なくとも一部を前記三次元畳み込み層のセットに入力して、第2の信号のセットを出力する工程であって、前記三次元畳み込み層は、少なくとも1つの三次元畳み込み動作を前記第1の信号のセットに適用するように訓練されている、工程と、をさらに備える、請求項1に記載のコンピュータに実装される方法。
前記少なくとも1つの二次元畳み込み動作は、1以上の二次元フィルタに少なくとも基づいて、前記ビデオ・コンテンツの前記表現を畳み込み、前記二次元畳み込み動作は、前記ビデオ・コンテンツの前記表現の信号サイズを縮小させる、請求項7に記載のコンピュータに実装される方法。
前記少なくとも1つの三次元畳み込み動作は、1以上の三次元フィルタに少なくとも基づいて、前記第1の信号のセットを畳み込み、前記三次元畳み込み動作は、前記ビデオ・コンテンツの前記表現の信号サイズを縮小させる、請求項7に記載のコンピュータに実装される方法。
畳み込みニューラル・ネットワークを使用して前記ビデオ・フレームのセットを処理して、1以上の信号を出力する工程であって、前記畳み込みニューラル・ネットワークは、(i)二次元畳み込み層のセットと、(ii)三次元畳み込み層のセットと、を含む、工程は、
前記コンピューティング・システムが、前記ビデオ・フレームのセットの表現を前記二次元畳み込み層のセットに入力して、第1の信号のセットを出力する工程であって、前記二次元畳み込み層は、少なくとも1つの二次元畳み込み動作をビデオ・コンテンツの前記表現に適用するように訓練されている、工程と、
前記コンピューティング・システムが、前記第1の信号のセットの少なくとも一部を前記三次元畳み込み層のセットに入力して、第2の信号のセットを出力する工程であって、前記三次元畳み込み層は、少なくとも1つの三次元畳み込み動作を前記第1の信号のセットに適用するように訓練されている、工程と、をさらに備える、請求項21〜24のいずれか一項に記載のコンピュータに実装される方法。
前記少なくとも1つの二次元畳み込み動作は、1以上の二次元フィルタに少なくとも基づいて、前記ビデオ・コンテンツの前記表現を畳み込み、前記二次元畳み込み動作は、前記ビデオ・コンテンツの前記表現の信号サイズを縮小させる、請求項25に記載のコンピュータに実装される方法。
前記少なくとも1つの三次元畳み込み動作は、1以上の三次元フィルタに少なくとも基づいて、前記第1の信号のセットを畳み込み、前記三次元畳み込み動作は、前記ビデオ・コンテンツの前記表現の信号サイズを縮小させる、請求項25または26に記載のコンピュータに実装される方法。
【発明を実施するための形態】
【0004】
本開示の様々な実施形態は、第1の解像度のビデオ・フレームのセットを得るように構成されたシステム、方法、および非一時的なコンピュータ可読媒体を含み得る。畳み込みニューラル・ネットワークを使用してビデオ・フレームのセットを処理して、1以上の信号を出力する。畳み込みニューラル・ネットワークは、(i)二次元畳み込み層のセットと、(ii)三次元畳み込み層のセットと、を含み、該処理によって、ビデオ・フレームのセットを第2の解像度に低下させる。畳み込みニューラル・ネットワークの三次元逆畳み込み層のセットを使用して1以上の信号を処理する。畳み込みニューラル・ネットワークから、ビデオ・フレームのセットに対応する1以上の出力を得る。
【0005】
一実施形態では、システム、方法、および非一時的なコンピュータ可読媒体は、ビデオ・フレームのセット内の1以上のボクセルに対する1以上のそれぞれの特徴記述子を得るように構成され、各特徴記述子は、認識されたシーン、オブジェクト、またはアクションを参照する。
【0006】
一実施形態では、システム、方法、および非一時的なコンピュータ可読媒体は、ビデオ・フレームのセット内の1以上のボクセルに対するそれぞれのオプティカル・フローを得るように構成され、ボクセルに対するオプティカル・フローは、少なくとも、ボクセルの予想された方向と大きさとを記述する。
【0007】
一実施形態では、システム、方法、および非一時的なコンピュータ可読媒体は、ビデオ・フレームのセット内の1以上のボクセルに対するそれぞれの奥行きの測定値を得るように構成される。
【0008】
一実施形態では、システム、方法、および非一時的なコンピュータ可読媒体は、三次元畳み込み層のセットにより生成された信号の少なくとも一部を、三次元逆畳み込み層のセットに入力するように構成され、三次元逆畳み込み層は、少なくとも1つの三次元逆畳み込み動作を信号の一部に適用するように訓練されている。
【0009】
一実施形態では、少なくとも1つの三次元逆畳み込み動作は、1以上の三次元フィルタに少なくとも基づいて、信号の一部の逆畳み込みを行い、三次元逆畳み込み動作は、ビデオ・コンテンツの表現の信号サイズを増大させる。
【0010】
一実施形態では、システム、方法、および非一時的なコンピュータ可読媒体は、ビデオ・フレームのセットの表現を二次元畳み込み層のセットに入力して、第1の信号のセットを出力するように構成され、二次元畳み込み層は、少なくとも1つの二次元畳み込み動作をビデオ・コンテンツの表現に適用するように訓練されている。また、システム、方法、および非一時的なコンピュータ可読媒体は、第1の信号のセットの少なくとも一部を三次元畳み込み層のセットに入力して、第2の信号のセットを出力するように構成され、三次元畳み込み層は、少なくとも1つの三次元畳み込み動作を第1の信号のセットに適用するように訓練されている。
【0011】
一実施形態では、少なくとも1つの二次元畳み込み動作は、1以上の二次元フィルタに少なくとも基づいて、ビデオ・コンテンツの表現を畳み込み、二次元畳み込み動作は、ビデオ・コンテンツの表現の信号サイズを縮小させる。
【0012】
一実施形態では、少なくとも1つの三次元畳み込み動作は、1以上の三次元フィルタに少なくとも基づいて、第1の信号のセットを畳み込み、三次元畳み込み動作は、ビデオ・コンテンツの表現の信号サイズを縮小させる。
【0013】
一実施形態では、ビデオ・フレームのセットは、3つ以上のビデオ・フレームを含む。
開示された技術の多くの他の特徴、用途、実施形態、および/または変形例は、添付の図面および以下の詳細な説明から明らかとなることを理解されたい。開示技術の原理から逸脱することなく、本明細書に記載の構造、システム、非一時的なコンピュータ可読媒体、および方法の追加の実装および/または代替の実装を採用できる。
【0014】
本発明に係る実施形態は、具体的には、方法、記憶媒体、システムおよびコンピュータ・プログラム製品へ向けられる添付の特許請求の範囲において開示され、1つの請求項のカテゴリ、例えば、方法において記載される任意の特徴は、別の請求項のカテゴリ、例えば、システムにおいても特許請求され得る。添付の特許請求の範囲における従属関係または参照は、形式的な理由のために選ばれているにすぎない。しかしながら、添付の特許請求の範囲において選ばれた従属関係に関わらず、請求項の任意の組み合わせおよびその特徴が開示され、特許請求され得るように、(特に、多数従属形式で)任意の先行請求項への意図的な参照に由来する任意の主題も、特許請求され得る。特許請求され得る主題は、添付の特許請求の範囲において述べられる特徴の組み合わせだけでなく、特許請求の範囲における特徴の任意の他の組み合わせも備え、特許請求の範囲において記載される各特徴は、特許請求の範囲における任意の他の特徴と、または他の特徴の組み合わせと、組み合わせられ得る。さらに、本明細書において説明または図示される実施形態および特徴のうちの任意のものは、別個の請求項において特許請求されてもよく、および/または、本明細書において説明もしくは図示される任意の実施形態もしくは特徴との任意の組み合わせにおいて特許請求されてもよく、または添付の特許請求の範囲の特徴のうちの任意のものとの組み合わせにおいて特許請求されてもよい。
【0015】
図面は、開示される技術の様々な技術を例示の目的のために図示するものにすぎず、図面は、同様の要素を識別するために同様の参照符号を使用する。当業者は、本明細書において説明される開示される技術の原理から逸脱することなく、図面に例示される構造および方法の代替的実施形態が採用され得ることを、下記の議論から容易に認識するであろう。
【0016】
畳み込みニューラル・ネットワークを使用したコンテンツ処理
人々は、多種多様な目的のためにコンピューティング・デバイスまたはコンピューティング・システムを使用する。コンピューティング・デバイスは、様々な種類の機能を提供することができる。ユーザは、コンピューティング・デバイスを活用して、情報を生み出し、情報にアクセスし、かつ、情報を共有することができる。いくつかの場合において、コンピューティング・デバイスは、ビデオなどのメディア・コンテンツを撮像または記録できるカメラを備えるか、またはこれらに対応することができる。ビデオは、一般的には、様々なシーン、アイテム、主題、または他のオブジェクトを撮像または表現できるフレームのセットを備えることができる。連続的にまたは別の方法で撮影されたフレームのセットはまた、様々な動き、アクション、または経時的な外観の他の変化を撮像できる。
【0017】
セマンティック・セグメンテーション(例えば、シーン、オブジェクト、動き等を認識することなどの特徴認識)、オプティカル・フロー、および奥行き認識などの様々な目的のためにビデオ・コンテンツを処理することに対する従来のアプローチは、非効率であり、および/または信頼できないものである場合がある。1つの例では、従来の畳み込みニューラル・ネットワークは、ビデオ・フレームのセット内の特徴を確実に認識することができない場合がある。さらに、ビデオ・コンテンツのサイズまたは解像度は、畳み込みニューラル・ネットワーク内の様々な層のそれぞれにより処理されると、典型的には、低下し、その結果、かかる信頼性が損なわれる原因となる。いくつかの例を挙げると、従来のアプローチはまた、畳み込みニューラル・ネットワークが、特徴認識、オプティカル・フロー、奥行き認識などの特定のタスクを正確に実行することができるように、畳み込みニューラル・ネットワークの様々な構成が必要な場合があるという意味で限定的である場合がある。したがって、かかる従来のアプローチは、ビデオ・コンテンツの準最適処理を提供することができるが、これらの問題およびコンピュータ技術において発生する他の問題に対処するには効率的ではない場合がある。
【0018】
コンピュータ技術に根付く改良型のアプローチにより、コンピュータ技術の領域において具体的に発生する従来のアプローチに関連する上記および他の欠点が克服される。様々な実施形態では、二次元畳み込み層のセットと、三次元畳み込み層のセットと、三次元逆畳み込み層のセットと、を有する、畳み込みニューラル・ネットワークを訓練および利用して、例えば、特徴認識、オプティカル・フロー、および/または奥行き認識を含む様々なタイプのタスクを実行することができる。いくつかの実施形態では、畳み込みニューラル・ネットワークを訓練して、ビデオ・フレームのセット内の任意のボクセルに関して、特徴記述子の対応するセット、オプティカル・フロー(例えば、ボクセルの予想された方向と大きさ)、および/または奥行き認識を予想することができる。かかる実施形態では、ビデオ・フレームのセットは、二次元畳み込み層により処理されて、第1の信号のセットを出力することができる。第1の信号のこのセットは、三次元畳み込み層により処理されて、第2の信号のセットを出力することができる。第2の信号のセットは、二次元および三次元畳み込み層により処理されることに起因して低減する場合があるビデオ・コンテンツのサイズまたは解像度をアップスケールするために訓練される、三次元逆畳み込み層により処理されることができる。アップスケールされた信号は、畳み込みニューラル・ネットワークのソフトマックス層に入力されて、1つまたは複数の出力を生成することができる。出力は、畳み込みニューラル・ネットワークの訓練およびソフトマックス層が利用する損失関数に応じて変動し得る。例えば、出力は、ビデオ・フレームのセット内のボクセル、ビデオ・フレームのセット内のボクセルに対するそれぞれのオプティカル・フロー、またはビデオ・フレームのセット内のボクセルに対して認識されたそれぞれの奥行きに対応する認識されたシーン、オブジェクト、または動きを示す1つもしくは複数の特徴記述子であってもよい。
【0019】
図1は、本開示の一実施形態による、1つまたは複数の畳み込みニューラル・ネットワーク(CNN)を使用してビデオ・コンテンツを解析するように構成された例示的なコンテンツ解析モジュール102を備える、例示的なシステム100を示す。
図1の例に示すように、例示的なコンテンツ解析モジュール102は、コンテンツ・モジュール104と、畳み込みニューラル・ネットワーク・モジュール106と、を含み得る。場合によっては、例示的なシステム100は、少なくとも1つのデータ・ストア108を備え得る。本図および本明細書における全ての図に示される構成要素(例えば、モジュール、要素など)は、単なる例示にすぎず、他の実装は、追加の、より少ない、統合された、または異なる構成要素を含むことができる。関連する詳細を不明瞭にしないように、一部の構成要素を図示しない場合がある。
【0020】
いくつかの実施形態では、ソフトウェア、ハードウェア、またはこれらの任意の組み合わせとして、コンテンツ解析モジュール102を、部分的にまたは全体的に実装することができる。概して、本明細書で考察されるようなモジュールは、ソフトウェア、ハードウェア、またはこれらの任意の組み合わせと関連付けることができる。いくつかの実装において、モジュールの1つまたは複数の機能、タスク、および/または動作を、ソフトウェア・ルーチン、ソフトウェア・プロセス、ハードウェア、および/またはこれらの任意の組み合わせによって実行または行うことができる。いくつかの場合において、コンテンツ解析モジュール102は、ユーザ・コンピューティング・デバイスまたはクライアント・コンピューティング・デバイス上などの1つまたは複数のコンピューティング・デバイスまたはシステム上で実行するソフトウェアとして、部分的にまたは全体的に実装することができる。1つの例では、コンテンツ解析モジュール102またはこの少なくとも一部は、
図7のユーザ・デバイス710などのユーザ・コンピューティング・デバイスまたはクライアント・コンピューティング・システム上で稼動するアプリケーション(例えば、app)、プログラム、またはアプレットなどとして実装するか、またはこれらの中に実装することができる。別の例では、コンテンツ解析モジュール102またはその少なくとも一部は、ネットワーク・サーバまたはクラウド・サーバなどの1つまたは複数のサーバを含む1つまたは複数のコンピューティング・デバイスまたはコンピューティング・システムを使用して実装することができる。場合によっては、コンテンツ解析モジュール102は、
図7のソーシャル・ネットワーキング・システム730などのソーシャル・ネットワーキング・システム(またはソーシャル・ネットワーキング・サービス)内で部分的にまたは全体的に実装されるか、これと連結して部分的にまたは全体的に動作するように構成することができる。
【0021】
コンテンツ解析モジュール102は、例示的なシステム100に示すように、少なくとも1つのデータ・ストア108と通信および/または動作するように構成され得る。少なくとも1つのデータ・ストア108は、多様なタイプのデータを記憶および維持するように構成され得る。いくつかの実装において、少なくとも1つのデータ・ストア108は、ソーシャル・ネットワーキング・システム(例えば、
図7のソーシャル・ネットワーキング・システム730)に関連付けられている情報を記憶することができる。ソーシャル・ネットワーキング・システムに関連付けられている情報としては、ユーザ、ソーシャルつながり、ソーシャル対話、位置、ジオフェンス・エリア、地図、場所、イベント、ページ、グループ、投稿、通信、コンテンツ、フィード、アカウント設定、プライバシー設定、ソーシャル・グラフについてのデータ、および多様な他のタイプのデータが挙げられる。いくつかの実装において、少なくとも1つのデータ・ストア108は、ユーザ識別子、ユーザ情報、プロフィール情報、ユーザ指定の設定、ユーザによって生成または投稿されたコンテンツ、および多様な他のタイプのユーザ・データなどの、ユーザに関連付けられている情報を記憶することができる。いくつかの実施形態では、少なくとも1つのデータ・ストア108は、コンテンツ解析モジュール104により得ることができるビデオ・コンテンツを含むメディア・コンテンツを記憶することができる。場合によっては、少なくとも1つのデータ・ストア108はまた、1つまたは複数の畳み込みニューラル・ネットワークを訓練するためのトレーニング・データを記憶することができる。1つの例では、トレーニング・データは、例えば、ビデオ・コンテンツに関する任意のラベル、タグ、属性、プロパティ、および/または説明とともにビデオ・コンテンツを含んでもよい。かかるトレーニング・データを使用して、例えば、フレームのセットに対して、セマンティック・セグメンテーションを行う(例えば、特徴記述子を予想する)ための畳み込みニューラル・ネットワークを訓練することができる。別の例では、トレーニング・データは、フレームのセットに対応するピクセルまたはボクセルのそれぞれの方向および大きさなどのフレームのセットのオプティカル・フローを予想するための畳み込みニューラル・ネットワークを訓練するために使用できる1つまたは複数のグラウンド・トゥルース・オプティカル・フロー・データ・セットを含むことができる。別の例では、トレーニング・データは、フレームのセットに対する奥行きを予想するための畳み込みニューラル・ネットワークを訓練するために使用できる1つまたは複数のグラウンド・トゥルース・奥行き認識データ・セットを含むことができる。多くの変形例が可能であることを理解されたい。
【0022】
コンテンツ・モジュール104は、解析すべきビデオ・コンテンツを取得および/または受信するように構成することができる。ビデオ・コンテンツは、例えば、画像もしくはビデオ・フレームのセット、またはビデオ・ファイルであってもよい。様々な実施形態では、ビデオ・コンテンツは、ソーシャル・ネットワーキング・システムのユーザおよび/またはコンテンツ・プロバイダにより提供され(例えば、アップロードされ)得る。いくつかの実施形態では、かかるビデオ・コンテンツは、データ・ストア108に記憶されてもよく、コンテンツ・モジュール104は、データ・ストア108からビデオ・コンテンツを得るように構成されてもよい。
【0023】
畳み込みニューラル・ネットワーク・モジュール106は、コンテンツ・モジュール104により提供されたビデオ・コンテンツなどのビデオ・コンテンツを解析するように構成され得る。様々な実施形態では、畳み込みニューラル・ネットワーク・モジュール106は、各々が様々なタスクを行うように構成された1つまたは複数の畳み込みニューラル・ネットワークを使用してビデオ・コンテンツを評価できる。かかるタスクは、ビデオ・コンテンツに対応する、各ボクセル(つまり、時間のピクセル)、または少なくともボクセルの一部に対して、いくつか例を挙げれば、それぞれのセマンティック・セグメンテーション(例えば、ビデオ特徴記述子)、オプティカル・フロー(例えば、動きの方向および/もしくは方向の大きさ)、ならびに/または奥行き認識を予想する工程を伴い得る。例えば、ビデオ・フレームのセットは、森に駐輪された自転車の上をジャンプする猫を撮像してもよい。ここで、畳み込みニューラル・ネットワーク・モジュール106は、畳み込みニューラル・ネットワークを訓練および利用して、ビデオ・フレームのセット内のボクセルを、意味論的にセグメント分割してもよい。ボクセルを意味論的にセグメント分割する場合、畳み込みニューラル・ネットワーク・モジュール106は、かかる概念がビデオ・フレームのセットに存在するそれぞれの確率とともに、ビデオ・フレームのセットにおいて特定された概念に対応する特徴記述子のセットを決定してもよい。この例では、畳み込みニューラル・ネットワーク・モジュール106は、いくつかの例を挙げると、ビデオ・フレームのセット内の第1のボクセルが森のシーンの一部を表すのは、84%の確率であり、ビデオ・フレームのセット内の第2のボクセルが猫のオブジェクトの一部を表すのは、96%の確率であり、ビデオ・フレームのセット内の第3のボクセルが自転車のオブジェクトの一部を表すのは、88%の確率であると決定してもよい。上記のように、いくつかの実施形態では、畳み込みニューラル・ネットワーク・モジュール106は、ビデオ・フレームのセット内のボクセル毎に、かかる予測を決定することができる。畳み込みニューラル・ネットワーク・モジュール106に関するさらに詳しい説明は、
図2を参照して以下で行う。
【0024】
図2は、本開示の一実施形態による、ビデオ・コンテンツを解析するように構成された例示的な畳み込みニューラル・ネットワーク・モジュール202を示す。いくつかの実施形態では、
図1の畳み込みニューラル・ネットワーク・モジュール106は、例示的な畳み込みニューラル・ネットワーク・モジュール202として実装されてもよい。
図2に示すように、例示的な畳み込みニューラル・ネットワーク・モジュール202は、トレーニング・モジュール204と、二次元畳み込みモジュール206と、三次元畳み込みモジュール208と、三次元逆畳み込みモジュール210と、を含み得る。
【0025】
様々な実施形態では、畳み込みニューラル・ネットワーク・モジュール202は、各々が特定のタスクを行うように訓練された1つまたは複数の畳み込みニューラル・ネットワークを使用してビデオ・コンテンツを評価できる。かかるタスクは、ビデオ・コンテンツに対応する、各ボクセル、または少なくともボクセルの一部に対する、例えば、それぞれのセマンティック・セグメンテーション、オプティカル・フロー、および/または奥行き認識を予想する工程を伴い得る。いくつかの実施形態では、畳み込みニューラル・ネットワークは、1つまたは複数の二次元畳み込み層と、1つまたは複数の三次元畳み込み層と、1つまたは複数の三次元逆畳み込み層と、1つまたは複数のプーリング層と、を含んでもよい。
【0026】
トレーニング・モジュール204を使用して、二次元畳み込みモジュール206により利用できる1つまたは複数の二次元畳み込み層と、三次元畳み込みモジュール208により利用できる1つまたは複数の三次元畳み込み層と、三次元逆畳み込みモジュール210により利用できる1つまたは複数の三次元逆畳み込み層と、を訓練することにより、畳み込みニューラル・ネットワークを訓練することができる。例えば、トレーニング・モジュール204を使用して、特定のタイプの出力または予想を提供するように畳み込みニューラル・ネットワークを訓練することができる。様々な実施形態では、出力は、ビデオ・コンテンツ内の1つまたは複数のボクセルに対応する予測であってもよい。ボクセルのために提供される予測は、畳み込みニューラル・ネットワークの訓練に応じて異なってもよい。トレーニング・モジュール204は、畳み込みニューラル・ネットワークを訓練して、例えば、データ・ストア(例えば、
図1のデータ・ストア108)から得ることができるグラウンド・トゥルース・トレーニング・データを使用して、特定のタスク(例えば、セマンティック・セグメンテーション、オプティカル・フロー、および/またはボクセルに対する奥行き認識)を実行することができる。いくつかの実施形態では、畳み込みニューラル・ネットワークを訓練して、セマンティック・セグメンテーションを予想する場合、トレーニング・モジュール204は、少なくともシーン、オブジェクト、および/またはアクションを特定するために(例えば、ソーシャル・タグ、記述式タグ、ハッシュタグなどを使用して)標識されたビデオ・コンテンツを含むトレーニング・データを利用することができる。いくつかの実施形態では、畳み込みニューラル・ネットワークを訓練して、オプティカル・フローを予測する場合、トレーニング・モジュール204は、様々なビデオ・コンテンツに対するグラウンド・トゥルース・オプティカル・フローの出力(例えば、ボクセル毎の方向および大きさ)を含むトレーニング・データを利用できる。いくつかの実施形態では、畳み込みニューラル・ネットワークを訓練して、奥行き認識を予想する場合、トレーニング・モジュール204は、様々なビデオ・コンテンツに対するグラウンド・トゥルース奥行きの出力を含むトレーニング・データを利用できる。
【0027】
様々な層(例えば、二次元畳み込み層、三次元畳み込み層、および/または二次元逆畳み込み層)の訓練を実行するために、トレーニング・モジュール204は、畳み込みニューラル・ネットワークによって、トレーニング・データ・セットのうちの任意のものを処理できる。畳み込みニューラル・ネットワークは、トレーニング・データに対する対応する出力のセットを生成することができる。これらの出力を、トレーニング・データに含まれるグラウンド・トゥルースの出力に対して比較して、畳み込みニューラル・ネットワークによって生成された出力の任意の不確かさを測定できる。様々な実施形態では、かかる不確かさは、畳み込みニューラル・ネットワークによって、バックプロパゲーションを実行することにより低下させることができる。バックプロパゲーションの間、トレーニング・モジュール204は、不確かさを最小限にするために、畳み込みニューラル・ネットワーク内の様々な層に関連付けられている1つまたは複数のフィルタの1つまたは複数の重み値を調整できる。多数の訓練の繰り返しを経て、バックプロパゲーションを実行することにより、最良の、または別の形で好適な重み値を、畳み込みニューラル・ネットワークのフィルタに対して決定することができる。場合によっては、フィルタに対する各重み値は、フィルタのピクセル値(例えば、RGB値、16進コードなど)に対応できる。
【0028】
上記のように、畳み込みニューラル・ネットワーク・モジュール202は、特定のタスクを実行するように訓練されてきた畳み込みニューラル・ネットワークを使用してビデオ・コンテンツを処理できる。例えば、ビデオ・コンテンツは、推定処理において畳み込みニューラル・ネットワークにより、フォワード・プロパゲートされて、1つまたは複数の出力を発生させることができる。いくつかの実施形態では、畳み込みニューラル・ネットワークを訓練して、ビデオ・コンテンツ内のボクセル毎の特徴記述子を出力する。特徴記述子は、事前に定義された概念(例えば、シーン、オブジェクト、アクションなど)のリストにおける概念毎のそれぞれの信頼性の確率を提供することができる。概念に対する信頼性の確率は、概念がビデオ・コンテンツにおいて認識されるかどうかに関する蓋然性を示すことができる。いくつかの実施形態では、畳み込みニューラル・ネットワークを訓練して、ビデオ・コンテンツにおけるボクセル毎のオプティカル・フロー(例えば、方向および大きさ)を出力する。いくつかの実施形態では、畳み込みニューラル・ネットワークを訓練して、ビデオ・コンテンツにおけるボクセル毎の奥行きを出力する。ビデオ・コンテンツを処理する場合、1つまたは複数の二次元畳み込み層を使用して、少なくとも1つの二次元畳み込み動作をビデオ・コンテンツに適用するように、二次元畳み込みモジュール206を構成することができる。二次元畳み込み動作は、少なくとも1つの二次元フィルタを利用して、ビデオ・コンテンツの表現を畳み込むことができ、その結果、ビデオ・コンテンツの表現の信号サイズが縮小され得る。各二次元畳み込み層は、それぞれの二次元畳み込み動作をその受信された入力信号に適用することができ、フォワード・プロパゲーションの間に以降の層に入力され得る対応する出力信号を発生させることができる。いくつかの実施形態では、二次元畳み込み層から出力された信号は、1つまたは複数の三次元畳み込み層に入力される。
【0029】
1つまたは複数の三次元畳み込み層を使用して、少なくとも1つの三次元畳み込み動作をビデオ・コンテンツに適用するように、三次元畳み込みモジュール208を構成することができる。三次元畳み込み動作は、少なくとも1つの三次元フィルタを利用して、ビデオ・コンテンツの表現を畳み込むことができ、その結果、ビデオ・コンテンツの表現の信号サイズが縮小され得る。各三次元畳み込み層は、それぞれの三次元畳み込み動作をその受信された入力信号に適用することができ、フォワード・プロパゲーションの間に以降の層に入力され得る対応する出力信号を発生させることができる。いくつかの実施形態では、三次元畳み込み層から出力された信号は、1つまたは複数の三次元逆畳み込み層に入力される。
【0030】
1つまたは複数の三次元逆畳み込み層を使用して、少なくとも1つの三次元逆畳み込み動作をビデオ・コンテンツに適用するように、三次元逆畳み込みモジュール210を構成することができる。三次元逆畳み込み動作は、少なくとも1つの三次元フィルタを利用して、ビデオ・コンテンツの表現の逆畳み込みを行うことができる。訓練によって、このフィルタは、ビデオ・コンテンツをアップサンプリングするために必要である適切な重みを学習できる。各三次元逆畳み込み層は、それぞれの三次元逆畳み込み動作をその受信された入力信号に適用することができ、フォワード・プロパゲーションの間に以降の層に入力され得る対応する出力信号を発生させることができる。上記のように、各畳み込み動作により、受信された入力信号に関係して、発生された出力信号のサイズを縮小させることができる。よって、三次元畳み込みモジュール208から受信された出力は、二次元畳み込みモジュール206によって元々受信された入力信号に関係して低下され得る。様々な実施形態では、三次元逆畳み込みモジュール210は、畳み込みニューラル・ネットワーク・モジュール202に対して元々提供された入力信号と一致するように、三次元畳み込みモジュール208により受信された入力信号をアップサンプリングできる。換言すれば、三次元逆畳み込みモジュール210により利用された三次元逆畳み込み層を訓練して、畳み込みニューラル・ネットワーク・モジュール202に元々入力されたビデオ・コンテンツのグラフィカル解像度に一致するように、三次元畳み込みモジュール208により受信された入力信号のグラフィカル解像度(例えば、ピクセルの幅および高さ)を高めることができる。このアップサンプリングは、ビデオ・コンテンツのローカルな構造を評価し、その後、元々提出されたビデオ・コンテンツの解像度に対応するように解像度を高めるために、三次元逆畳み込み層を訓練することにより実行することができる。
【0031】
図3は、本開示の一実施形態による、畳み込みニューラル・ネットワークの例示的な
図300を示す。例示的な
図300は、特定のタスクを実行するように訓練されてきた畳み込みニューラル・ネットワーク302の構造を示す。上記のように、畳み込みニューラル・ネットワーク302を訓練して、ビデオ・コンテンツ内のいくつかのまたは全てのボクセルの特徴記述子、オプティカル・フロー、または奥行きを予想することができる。
図3に示すように、例示的な畳み込みニューラル・ネットワーク302は、二次元畳み込み層310のセットと、三次元畳み込み層320のセットと、三次元逆畳み込み層330のセットと、を含んでもよい。二次元畳み込み層310と、三次元畳み込み層320と、三次元逆畳み込み層330と、に含まれるそれぞれの層の数は、実装に応じて異なってもよい。いくつかの実施形態では、二次元畳み込み層310のセットは、少なくとも5つの二次元畳み込み層を含むことができ、三次元畳み込み層320のセットは、少なくとも3つの三次元畳み込み層を含むことができ、三次元逆畳み込み層330のセットは、少なくとも3つの三次元逆畳み込み層を含むことができる。いくつかの実施形態では、畳み込みニューラル・ネットワーク302は、全結合層340のセットを含むことができる。さらに、いくつかの実施形態では、畳み込みニューラル・ネットワーク302は、ソフトマックス層350を含むことができる。少なくとも各層の一部は、少なくとも別の層の一部と結合することができ、情報は、層を介して送信することができる。
【0032】
場合によっては、畳み込みニューラル・ネットワークを介するフォワード・プロパゲーションの間、ビデオ・コンテンツ360を記述するデータは、二次元畳み込み層310のセット内の第1の二次元畳み込み層に入力されて、出力380を生成することができる。二次元畳み込み層310は、1つまたは複数の二次元畳み込み動作をビデオ・コンテンツ360の表現に適用することができる。各二次元畳み込み動作は、ビデオ・コンテンツ360の表現を畳み込むために少なくとも1つの二次元フィルタを利用できる。二次元畳み込み層310は、二次元畳み込み動作を実行する際、出力信号を生成することができる。これらの出力信号は、フォワード・プロパゲーションの間、畳み込みニューラル・ネットワーク302内の次の層に入力することができる。この例では、出力信号は、三次元畳み込み層320に入力される。三次元畳み込み層320は、1つまたは複数の三次元畳み込み動作を二次元畳み込み層310から受信された入力信号に適用することができる。各三次元畳み込み動作は、入力信号の表現を畳み込むために少なくとも1つの三次元フィルタを利用できる。三次元畳み込み層320は、三次元畳み込み動作を実行する際、出力信号を生成することができる。これらの出力信号は、フォワード・プロパゲーションの間、畳み込みニューラル・ネットワーク302内の次の層に入力することができる。この例では、出力信号は、三次元逆畳み込み層330に入力される。三次元逆畳み込み層330は、1つまたは複数の三次元逆畳み込み動作を、三次元畳み込み層320から受信した入力信号に適用することができる。各三次元逆畳み込み動作は、入力信号の表現の逆畳み込みを行うために少なくとも1つの三次元フィルタを利用できる。三次元逆畳み込み層330は、三次元逆畳み込み動作を実行する際、出力信号を生成することができる。これらの出力信号は、フォワード・プロパゲーションの間、畳み込みニューラル・ネットワーク302内の次の層に入力することができる。いくつかの実施形態では、三次元逆畳み込み層から出力された信号のうちいくつかまたは全ては、全結合層340のセットに入力される。畳み込みニューラル・ネットワーク302からの1つまたは複数の出力380は、全結合層340から出力された信号に基づいて発生させることができる。いくつかの実施形態では、出力380は、ソフトマックス層350により正規化または調整されることができる。
【0033】
上記のように、この出力380は、ビデオ・コンテンツのいくつかのまたは全てのボクセルの特徴記述子、オプティカル・フロー、または奥行きを記述することができる。いくつかの実施形態では、畳み込みニューラル・ネットワーク302に入力されたビデオ・コンテンツ360は、所定の長さのフレーム(例えば、ビデオ・コンテンツの一部に対応する16個のフレーム)のセットである。かかる実施形態では、畳み込みニューラル・ネットワーク302により生成された出力380は、入力されたフレームのセットと長さは同じである。よって、例えば、畳み込みニューラル・ネットワーク302に入力されたフレームのセットの長さが16個のフレームの場合、出力380は、16個のフレームの長さを有する情報(例えば、セマンティック・セグメンテーション、オプティカル・フロー、または奥行き)を提供することができる。いくつかの実施形態では、畳み込みニューラル・ネットワーク302は、追加の平滑化を必要とせず、多数のフレームに亘って滑らかな軌跡を自動的に提供する。例えば、ソフトマックス層350により利用された損失関数は、実行するように畳み込みニューラル・ネットワーク302が訓練されたタスク(例えば、セマンティック・セグメンテーション、オプティカル・フロー、奥行き認識)に応じて異なってもよい。いくつかの実施形態では、出力380の解像度は、入力360の解像度と同じである。
【0034】
図4は、本開示の一実施形態による、畳み込みニューラル・ネットワーク400の別の例示的な図を示す。この例では、畳み込みニューラル・ネットワーク400は、第1のコンポーネント402と、第2のコンポーネント404と、を含む。第1のコンポーネント402は、
図3を参照して説明したように、二次元畳み込み層のセットと、三次元畳み込み層のセットと、を含むことができる。第2のコンポーネント404は、
図3を参照して説明したように、三次元逆畳み込み層のセットを含むことができる。畳み込みニューラル・ネットワーク400の第1のコンポーネント402は、特定のサイズ(つまり、解像度)を有するフレームのセットを、入力として受信することができる。この例では、フレームのセットは、100ピクセルの高さおよび100ピクセルの幅(つまり、100×100ピクセル)を有する。上記のように、フレームのサイズは、畳み込み動作が畳み込みニューラル・ネットワーク400の様々な層により実行される場合、縮小する場合がある。サイズの縮小は、典型的には、プーリング層にて生じ、縮小量は、プーリング・パラメータに応じて変動し得る。この例では、第1の層406および対応するプーリング層を介するフレームのフォワード・プロパゲーション後、フレームのサイズは100×100ピクセルから50×50ピクセルに縮小され得る。同様に、第2の層408および対応するプーリング層を介するフレームのフォワード・プロパゲーション後、フレームのサイズは50×50ピクセルから25×25ピクセルに縮小され得る。次に、第3の層410および対応するプーリング層を介するフレームのフォワード・プロパゲーション後、フレームのサイズは25×25ピクセルから12×12ピクセルに縮小され得る。最後に、第4の層412および対応するプーリング層を介するフレームのフォワード・プロパゲーション後、フレームのサイズは12×12ピクセルから6×6ピクセルに縮小され得る。
【0035】
次に、第2のコンポーネント404を利用して、第1のコンポーネント402からの様々な出力に対して逆畳み込み動作を実行することができ、その結果、(例えば、それぞれの出力のサイズを倍にすることにより)様々な出力をアップサンプリングさせることができる。
図4の例では、畳み込みニューラル・ネットワーク400の第1のコンポーネント402の第5の層414からの出力は、1つまたは複数の逆畳み込み動作を実行して第5の層414からの出力をアップサンプリングする、第1の逆畳み込み層416に入力される。この例では、第1の逆畳み込み層416は、サイズが6×6ピクセルである、第5の層414からの出力を、サイズがそれぞれ12×12ピクセルである64チャンネルにアップサンプリングする。いくつかの実施形態では、第4の層412からの出力は、1つまたは複数の畳み込み動作を行う別の層418に入力されて、サイズがそれぞれ12×12ピクセルである64チャンネルを生成することができる。次に、サイズがそれぞれ12×12ピクセルである64チャンネルである層418からの出力は、サイズがそれぞれ12×12ピクセルである64チャンネルにアップサンプリングされている、第1の逆畳み込み層416からの出力と連結され得る(420)。この例では、連結後、サイズがそれぞれ12×12ピクセルである128チャンネルが存在することになる。サイズがそれぞれ12×12ピクセルである128チャンネルの連結された出力を、1つまたは複数の逆畳み込み動作を実行する第2の逆畳み込み層422に入力して、連結された出力420を、サイズが12×12ピクセルである128チャンネルからサイズが25×25ピクセルである64チャンネルへアップサンプリングできる。
【0036】
いくつかの実施形態では、第3の層410からの出力を、1つまたは複数の畳み込み動作を実行する別の層424に入力して、サイズがそれぞれ25×25ピクセルである64チャンネルを生成することができる。次に、サイズがそれぞれ25×25ピクセルである64チャンネルである、層424からの出力は、サイズがそれぞれ25×25ピクセルである64チャンネルにアップサンプリングされている、第2の逆畳み込み層422からの出力と連結され得る(426)。この例では、連結後、サイズがそれぞれ25×25ピクセルである128チャンネルが存在することになる。サイズがそれぞれ25×25ピクセルである128チャンネルの連結された出力を、1つまたは複数の逆畳み込み動作を実行する第3の逆畳み込み層428に入力して、連結された出力426を、サイズが25×25ピクセルである128チャンネルからサイズが50×50ピクセルである64チャンネルへアップサンプリングできる。
【0037】
いくつかの実施形態では、第2の層408からの出力を、1つまたは複数の畳み込み動作を実行する別の層430に入力して、サイズがそれぞれ50×50ピクセルである64チャンネルを生成することができる。次に、サイズがそれぞれ50×50ピクセルである64チャンネルである、層430からの出力は、サイズがそれぞれ50×50ピクセルである64チャンネルにアップサンプリングされている、第3の逆畳み込み層428からの出力と連結され得る(432)。この例では、連結後、サイズがそれぞれ50×50ピクセルである128チャンネルが存在することになる。サイズがそれぞれ50×50ピクセルである128チャンネルの連結された出力を、1つまたは複数の逆畳み込み動作を実行する第4の逆畳み込み層434に入力して、連結された出力432を、サイズが50×50ピクセルである128チャンネルからサイズが100×100ピクセルである64チャンネルへアップサンプリングできる。サイズが100×100ピクセルであるアップサンプリングされた出力をソフトマックス層436に入力して、正規化できる。上記のように、ソフトマックス層436により利用される損失関数は、実行するように畳み込みニューラル・ネットワーク400が訓練されるタスクに応じて異なってもよい。実装に応じて、かかるタスクは、ビデオ・コンテンツ405に対応する、各ボクセル、またはボクセルの少なくとも一部に対して、いくつか例を挙げれば、それぞれのセマンティック・セグメンテーション(例えば、ビデオ特徴記述子)、オプティカル・フロー(例えば、動きの方向および/もしくは方向の大きさ)、または奥行き認識を予想する工程を伴ってもよい。フィルタ、プーリング動作、および/または畳み込み動作の数は、実装に応じて異なってもよく、指定されてもよい。同様に、フレーム・サイズ、フィルタ・サイズ、プーリング・サイズ、およびストライド値は、実装に応じて異なってもよく、指定されてもよい。さらに、記述子の数は、実装に応じて異なってもよく、指定されてもよい。
【0038】
図5は、本開示の一実施形態による、畳み込みニューラル・ネットワークを使用してビデオ・フレームのセットを処理するための例示的な方法500を示す。別段の記載がない限り、様々な実施形態の範囲内で、類似のもしくは代替の順序で、または並行して実行される、追加の、より少ない、または代替の工程が存在し得ることを理解されたい。ブロック502では、例示的な方法500は、第1の解像度のビデオ・フレームのセットを得ることができる。ブロック504では、例示的な方法500は、畳み込みニューラル・ネットワークを使用してビデオ・フレームのセットを処理して、1つまたは複数の信号を出力することができ、畳み込みニューラル・ネットワークは、(i)二次元畳み込み層のセットと、(ii)三次元畳み込み層のセットと、を含む。処理により、ビデオ・フレームのセットを第2の解像度に低下させることができる。ブロック506では、方法500は、畳み込みニューラル・ネットワークの三次元逆畳み込み層のセットを使用して1つまたは複数の信号を処理できる。ブロック508では、方法500は、畳み込みニューラル・ネットワークから、ビデオ・フレームのセットに対応する1つまたは複数の出力を得ることができる。
【0039】
図6は、本開示の一実施形態による、畳み込みニューラル・ネットワークを使用してビデオ・フレームのセットを処理するための別の例示的な方法600を示す。ここでも、別段の記載がない限り、様々な実施形態の範囲内で、類似のもしくは代替の順序で、または並行して実行される、追加の、より少ない、または代替の工程が存在し得ることを理解されたい。ブロック602では、例示的な方法600は、ビデオ・フレームのセットの表現を二次元畳み込み層のセットに入力して、第1の信号のセットを出力することができる。二次元畳み込み層を訓練して、少なくとも1つの二次元畳み込み動作をビデオ・コンテンツの表現に適用することができる。ブロック604では、方法600は、第1の信号のセットの少なくとも一部を三次元畳み込み層のセットに入力して、第2の信号のセットを出力することができる。三次元畳み込み層を訓練して、少なくとも1つの三次元畳み込み動作を第1の信号のセットに適用することができる。ブロック606では、方法600は、三次元畳み込み層のセットにより生成された信号の少なくとも一部の信号を、三次元逆畳み込み層のセットに入力することができ、三次元逆畳み込み層を訓練して、少なくとも1つの三次元逆畳み込み動作を信号の一部に適用する。ブロック608では、方法600は、三次元畳み込み層のセットにより生成された信号の少なくとも一部を畳み込みニューラル・ネットワークのソフトマックス層に入力して、1つまたは複数の出力を生成することができる。
【0040】
本開示の様々な実施形態に関連する多くの他の使用、用途、および/または変形例が存在し得ることが想到される。例えば、いくつかの場合において、ユーザは、開示された技術を利用するか否かを選択することができる。開示された技術はまた、様々なプライバシー設定および嗜好が維持され、個人情報の漏洩を防止できることを保証することができる。別の例では、本開示の様々な実施形態は、経時的に学習、改善、および/または改良され得る。
【0041】
ソーシャル・ネットワーキング・システム − 例示的な実装
図7は、本開示の実施形態に係る、エンハンスト・ビデオ符号化のための様々な実施形態において利用され得る例示的なシステム700のネットワーク図を例示する。システム700は、1つまたは複数のユーザ・デバイス710と、1つまたは複数の外部システム720と、ソーシャル・ネットワーキング・システム730と、ネットワーク750とを含む。一実施形態において、上述される実施形態に関連して議論されるソーシャル・ネットワーキング・サービス、プロバイダ、および/またはシステムは、ソーシャル・ネットワーキング・システム730として実装され得る。例示の目的のために、
図7によって示される、システム700の実施形態は、単一の外部システム720と、単一のユーザ・デバイス710とを含む。ただし、他の実施形態において、システム700は、より多くのユーザ・デバイス710、および/または、より多くの外部システム720を含んでもよい。特定の実施形態において、ソーシャル・ネットワーキング・システム730は、ソーシャル・ネットワーク・プロバイダによって運営されるのに対して、外部システム720は、異なるエンティティによって運営され得るという点で、ソーシャル・ネットワーキング・システム730とは別個のものである。しかしながら、様々な実施形態において、ソーシャル・ネットワーキング・システム730および外部システム720は、共に動作して、ソーシャル・ネットワーキング・システム730のユーザ(またはメンバー)に対してソーシャル・ネットワーキング・サービスを提供する。この意味において、ソーシャル・ネットワーキング・システム730は、外部システム720などの他のシステムがインターネット上のユーザに対してソーシャル・ネットワーキング・サービスおよび機能を提供するために使用し得るプラットフォームまたはバックボーンを提供する。
【0042】
ユーザ・デバイス710は、ユーザから入力を受け取り、ネットワーク750を通じてデータを送受信することができる1つまたは複数のコンピューティング・デバイスを備える。一実施形態において、ユーザ・デバイス710は、例えば、マイクロソフト・ウィンドウズ(登録商標)と互換性のあるオペレーティング・システム(OS)、Apple OS X、および/またはLinux(登録商標)ディストリビューションを実行する従来のコンピュータ・システムである。別の実施形態において、ユーザ・デバイス710は、スマートフォン、タブレット、携帯情報端末(PDA:personal digital assistant)、携帯電話等などのコンピュータ機能を有するデバイスであってもよい。ユーザ・デバイス710は、ネットワーク750を通じて通信するように構成される。ユーザ・デバイス710は、アプリケーション、例えば、ユーザ・デバイス710のユーザがソーシャル・ネットワーキング・システム730と相互作用することを可能にするブラウザ・アプリケーションを実行することができる。別の実施形態において、ユーザ・デバイス710は、iOSおよびANDROID(登録商標)などの、ユーザ・デバイス710のネイティブ・オペレーティング・システムによって提供されるアプリケーション・プログラミング・インターフェース(API)を通じてソーシャル・ネットワーキング・システム730を相互作用する。ユーザ・デバイス710は、ネットワーク750を通じて外部システム720およびソーシャル・ネットワーキング・システム730と通信するように構成される。ネットワーク750は、有線通信システムおよび/または無線通信システムを使用する、ローカル・エリア・ネットワークおよび/または広域ネットワークの任意の組み合わせを備え得る。
【0043】
1つの実施形態において、ネットワーク750は、標準的な通信技術およびプロトコルを使用する。したがって、ネットワーク750は、イーサネット(登録商標)、702.11、マイクロ波アクセスのための世界的相互運用性(WiMAX:worldwide
interoperability for microwave access)、3G、4G、CDMA、GSM(登録商標)、LTE、デジタル加入者線(DSL:digital subscriber line)等などの技術を使用するリンクを含み得る。同様に、ネットワーク750上で使用されるネットワーキング・プロトコルは、マルチプロトコル・ラベル・スイッチング(MPLS:multiprotocol label switching)、送信制御プロトコル/インターネット・プロトコル(TCP/IP)、ユーザ・データグラム・プロトコル(UDP)、ハイパーテキスト転送プロトコル(HTTP)、簡易メール転送プロトコル(SMTP:simple mail transfer protocol)、ファイル転送プロトコル(FTP)などを含み得る。ネットワーク750上で交換されるデータは、ハイパーテキスト・マークアップ言語(HTML)および拡張マークアップ言語(XML)を含む技術および/またはフォーマットを使用して表現され得る。また、全部または一部のリンクは、セキュア・ソケット・レイヤ(SSL)、トランスポート・レイヤ・セキュリティ(TLS)、およびインターネット・プロトコル・セキュリティ(IPsec)などの従来の暗号化技術を使用して暗号化され得る。
【0044】
1つの実施形態において、ユーザ・デバイス710は、外部システム720から、およびソーシャル・ネットワーキング・システム730から受信されるマークアップ言語文書714を、ブラウザ・アプリケーション712を使用して処理することによって、外部システム720からのコンテンツおよび/またはソーシャル・ネットワーキング・システム730からのコンテンツを表示し得る。マークアップ言語文書714は、コンテンツと、そのコンテンツのフォーマッティングまたは表示方法を記述する1つまたは複数の命令とを識別する。マークアップ言語文書714内に含まれる命令を実行することによって、ブラウザ・アプリケーション712は、マークアップ言語文書714によって記述されたフォーマットまたは表示方法を使用して、識別されたコンテンツを表示する。例えば、マークアップ言語文書714は、外部システム720およびソーシャル・ネットワーキング・システム730から得られたテキストおよび/または画像データを含む複数のフレームを有するウェブ・ページを生成および表示するための命令を含む。様々な実施形態において、マークアップ言語文書714は、拡張マークアップ言語(XML)データ、拡張ハイパーテキスト・マークアップ言語(XHTML)データ、または、他のマークアップ言語データを含むデータ・ファイルを備える。また、マークアップ言語文書714は、外部システム720とユーザ・デバイス710との間のデータ交換を容易にするためのジャバスクリプト・オブジェクト・ノーテーション(JSON:JavaScript(登録商標)Object Notation)データ、パディング付きのJSON(JSONP:JSON with padding)データ、およびジャバスクリプト・データを含み得る。ユーザ・デバイス710上のブラウザ・アプリケーション712は、ジャバスクリプト・コンパイラを使用して、マークアップ言語文書714を復号し得る。
【0045】
マークアップ言語文書714は、FLASH(商標)アプリケーションまたはUnity(商標)アプリケーション、SilverLight(商標)アプリケーション・フレームワーク等などの、アプリケーションまたはアプリケーション・フレームワークも含み、または、これらに対してもリンクし得る。
【0046】
1つの実施形態において、ユーザ・デバイス710は、ユーザ・デバイス710のユーザがソーシャル・ネットワーキング・システム730へログインしたかを示すデータを含む、1つまたは複数のクッキー716も含む。クッキー716は、ソーシャル・ネットワーキング・システム730からユーザ・デバイス710へ通信されるデータの変更を可能にし得る。
【0047】
外部システム720は、1つまたは複数のウェブ・ページ722a、722bを含む、1つまたは複数のウェブ・サーバを含む。1つまたは複数のウェブ・ページ722a、722bは、ネットワーク750を使用して、ユーザ・デバイス710へ通信される。外部システム720は、ソーシャル・ネットワーキング・システム730とは別個である。例えば、外部システム720は、第1のドメインに対して関連付けられるが、ソーシャル・ネットワーキング・システム730は、別個のソーシャル・ネットワーキング・ドメインに対して関連付けられる。外部システム720に含まれるウェブ・ページ722a、722bは、コンテンツを識別し、識別されたコンテンツのフォーマッティングおよび表示方法を特定する命令を含むマークアップ言語文書714を備える。
【0048】
ソーシャル・ネットワーキング・システム730は、複数のユーザを含み、ソーシャル・ネットワークのユーザに対して、ソーシャル・ネットワークの他のユーザと通信および相互作用するための能力を提供する、ソーシャル・ネットワークのための1つまたは複数のコンピューティング・デバイスを含む。いくつかの例において、ソーシャル・ネットワークは、グラフ、すなわち、エッジとノードとを含むデータ構造によって表現され得る。データベース、オブジェクト、クラス、メタ要素、ファイル、または任意の他のデータ構造を含むが、これらに限定されない、他のデータ構造も、ソーシャル・ネットワークを表現するために使用され得る。ソーシャル・ネットワーキング・システム730は、運営者によって運営され、管理され、または制御され得る。ソーシャル・ネットワーキング・システム730の運営者は、ソーシャル・ネットワーキング・システム730内でコンテンツを管理し、政策を規制し、使用法メトリック(usage metrics)を収集するための人間、自動化されたアプリケーション、または一連のアプリケーションであってもよい。任意のタイプの運営者が使用され得る。
【0049】
ユーザは、ソーシャル・ネットワーキング・システム730に加入し、次いで、そのユーザがつなげられることを望む、ソーシャル・ネットワーキング・システム730の任意の数の他のユーザへのつながりを追加し得る。本明細書において、「友達」という用語は、ユーザがソーシャル・ネットワーキング・システム730を通じてつながり、関連、または関係を形成した、ソーシャル・ネットワーキング・システム730の任意の他のユーザを指す。例えば、一実施形態において、ソーシャル・ネットワーキング・システム730内のユーザが、ソーシャル・グラフ内のノードとして表現される場合、「友達」という用語は、2つのユーザ・ノード間に形成され、かつ、2つのユーザ・ノードを直接接続するエッジを指し得る。
【0050】
つながりは、ユーザによって明示的に追加されても、または、ユーザの共通の特性(例えば、同じ教育機関の卒業生であるユーザ)に基づいて、ソーシャル・ネットワーキング・システム730によって自動的に作成されてもよい。例えば、第1のユーザは、友達になりたい特定の他のユーザを具体的に選択する。ソーシャル・ネットワーキング・システム730におけるつながりは、通常は双方向であるが、双方向である必要はなく、そのため、「ユーザ」および「友達」という用語は、枠組みに依存する。ソーシャル・ネットワーキング・システム730のユーザ間のつながりは、通常は、双務的(「二方向」)または「相互的」であるが、つながりは、片務的、または「一方向」であってもよい。例えば、ボブおよびジョーの両者が、ソーシャル・ネットワーキング・システム730のユーザであり、互いにつながっている場合、ボブおよびジョーは、互いのつながりである。他方で、ボブは、ジョーによってソーシャル・ネットワーキング・システム730へ通信されたデータを見るためにジョーとつながることを欲するが、ジョーは、相互的なつながりを形成することを欲しない場合、片務的なつながりが確立され得る。ユーザ間のつながりは、直接的なつながりであり得る。ただし、ソーシャル・ネットワーキング・システム730のいくつかの実施形態は、つながりが、1つまたは複数のつながりのレベルまたは分離度を通じた間接的なものとなることを可能にする。
【0051】
ユーザ間のつながりを確立および維持し、ユーザ間の相互作用を可能にすることに加えて、ソーシャル・ネットワーキング・システム730は、ソーシャル・ネットワーキング・システム730によってサポートされる様々なタイプのアイテムに対してアクションを行うための能力をユーザに対して提供する。こうしたアイテムは、ソーシャル・ネットワーキング・システム730のユーザが所属し得るグループまたはネットワーク(すなわち、人々、エンティティ、および概念のソーシャル・ネットワーク)、ユーザが興味を持ち得るイベントまたはカレンダー入力、ユーザがソーシャル・ネットワーキング・システム730を通じて使用し得るコンピュータベースのアプリケーション、ソーシャル・ネットワーキング・システム730によって提供されるサービスを通じてまたはソーシャル・ネットワーキング・システム730を通じてユーザがアイテムを購入または販売することを可能にする取引、ならびにユーザがソーシャル・ネットワーキング・システム730内外で実行し得る広告との相互作用を含み得る。これらは、ユーザがソーシャル・ネットワーキング・システム730上で作用を与え得るアイテムのわずかな例にすぎず、多くの他の例が可能である。ユーザは、ソーシャル・ネットワーキング・システム730において、または、ソーシャル・ネットワーキング・システム730とは別個の外部システム720もしくはネットワーク750を通じてソーシャル・ネットワーキング・システム730に対して結合される外部システム720において表現されることが可能なありとあらゆるものと相互作用し得る。
【0052】
ソーシャル・ネットワーキング・システム730は、多様なエンティティとリンクすることも可能である。例えば、ソーシャル・ネットワーキング・システム730は、ユーザが互いに相互作用すること、および、API、ウェブ・サービス、または他の通信チャネルを通じて外部システム720または他のエンティティと相互作用することを可能にする。ソーシャル・ネットワーキング・システム730は、複数のエッジによって相互接続された複数のノードを備える「ソーシャル・グラフ」を生成および維持する。ソーシャル・グラフ内の各ノードは、別のノードに対して作用を与え得るエンティティおよび/または別のノードによって作用を与えられ得るエンティティを表現し得る。ソーシャル・グラフは、様々なタイプのノードを含み得る。ノードタイプの例は、ユーザ、非人間エンティティ、コンテンツ・アイテム、ウェブ・ページ、グループ、アクティビティ、メッセージ、概念、およびソーシャル・ネットワーキング・システム730内のオブジェクトによって表現され得る任意の他のものを含む。ソーシャル・グラフ内の2つのノード間のエッジは、ノード関係から、またはノードのうちの一方によって他方に対して実行されたアクションから生じ得る、2つのノード間の特定の種類のつながり、または関連を表現し得る。いくつかの場合において、ノード間のエッジは、重み付けされ得る。エッジの重みは、ノード間のつながりまたは関連の強度などの、そのエッジに対して関連付けられた属性を表現し得る。異なるタイプのエッジが、異なる重みと共に提供され得る。例えば、あるユーザが別のユーザに対して「いいね」を表明する際に作成されるエッジには、ある重みが与えられ得る一方で、ユーザが別のユーザと友達になる際に作成されるエッジには、異なる重みが与えられ得る。
【0053】
例として、第1のユーザが、第2のユーザを友達として識別する場合、第1のユーザを表現するノードと第2のユーザを表現する第2のノードとを接続する、ソーシャル・グラフ内のエッジが生成される。様々なノードが互いに関連し、または相互作用するにつれて、ソーシャル・ネットワーキング・システム730は、様々なノードを接続するエッジを変更して、関係および相互作用を反映する。
【0054】
ソーシャル・ネットワーキング・システム730は、ユーザによるソーシャル・ネットワーキング・システム730との相互作用を高める、ユーザにより生成されたコンテンツも含む。ユーザにより生成されたコンテンツは、ユーザがソーシャル・ネットワーキング・システム730に対して追加し、アップロードし、送信し、または「投稿し」得るあらゆるものを含み得る。例えば、ユーザは、ユーザ・デバイス710からソーシャル・ネットワーキング・システム730への投稿を通信する。投稿は、ステータス・アップデートもしくは他の文字情報などのデータ、位置情報、写真などの画像、ビデオ、リンク、音楽、または、他の同様のデータおよび/もしくはメディアを含み得る。コンテンツも、第三者によってソーシャル・ネットワーキング・システム730に対して追加され得る。コンテンツ「アイテム」は、ソーシャル・ネットワーキング・システム730においてオブジェクトとして表現される。このようにして、ソーシャル・ネットワーキング・システム730のユーザは、様々な通信チャネルを通じて様々なタイプのテキストおよびコンテンツ・アイテムを投稿することによって、互いに通信することを促される。そのような通信は、ユーザ同士の相互作用を増加させ、ユーザがソーシャル・ネットワーキング・システム730と相互作用する頻度を増加させる。
【0055】
ソーシャル・ネットワーキング・システム730は、ウェブ・サーバ732と、API要求サーバ734と、ユーザ・プロファイル・ストア736と、つながりストア738と、動作ロガー740と、アクティビティ・ログ742と、認証サーバ744とを含む。本発明の一実施形態において、ソーシャル・ネットワーキング・システム730は、様々なアプリケーションのための追加的な構成要素、より少ない構成要素、または異なる構成要素を含み得る。ネットワーク・インターフェース、セキュリティ機構、負荷分散装置、フェイルオーバ・サーバ、管理およびネットワーク操作コンソールなどの他の構成要素は、本システムの詳細を曖昧にしないように、図示されていない。
【0056】
ユーザ・プロファイル・ストア736は、ユーザによって申告され、またはソーシャル・ネットワーキング・システム730によって推測された職歴、学歴、趣味または嗜好、住所などの経歴的情報、人口学的情報、および他のタイプの記述的情報を含む、ユーザ・アカウントに関する情報を維持する。この情報は、各ユーザが一意に識別されるように、ユーザ・プロファイル・ストア736内に記憶される。ソーシャル・ネットワーキング・システム730は、異なるユーザ間の1つまたは複数のつながりを記述するデータも、つながりストア738内に記憶する。つながり情報は、同様または共通の職歴、グループ・メンバーシップ、趣味、または学歴を有するユーザを示し得る。また、ソーシャル・ネットワーキング・システム730は、ユーザの他のユーザとの関係をユーザが特定することを可能にする、異なるユーザ間におけるユーザによって定義されたつながりを含む。例えば、ユーザによって定義されたつながりは、友達、同僚、パートナー等などの、ユーザの実生活の関係と並行する、他のユーザとの関係をユーザが生成することを可能にする。ユーザは、予め定義されたタイプのつながりから選択しても、またはユーザ自身のつながりタイプを必要に応じて定義してもよい。非人間エンティティ、バケット、クラスタ・センタ、画像、興味、ページ、外部システム、概念等などの、ソーシャル・ネットワーキング・システム730内の他のノードとのつながりも、つながりストア738内に記憶される。
【0057】
ソーシャル・ネットワーキング・システム730は、ユーザが相互作用し得るオブジェクトに関するデータを維持する。このデータを維持するために、ユーザ・プロファイル・ストア736およびつながりストア738は、ソーシャル・ネットワーキング・システム730によって維持されるオブジェクトの対応するタイプのインスタンスを記憶する。各オブジェクト・タイプは、オブジェクトのタイプに適した情報を記憶するのに適した情報フィールドを有する。例えば、ユーザ・プロファイル・ストア736は、ユーザのアカウントおよびユーザのアカウントに関連した情報を記述するのに適したフィールドを有するデータ構造を含む。特定のタイプの新たなオブジェクトが作成される場合、ソーシャル・ネットワーキング・システム730は、対応するタイプの新たなデータ構造を初期化し、その新たなデータ構造に対して一意のオブジェクト識別子を割り当て、必要に応じて、そのオブジェクトに対してデータを追加することを開始する。これは、例えば、ユーザがソーシャル・ネットワーキング・システム730のユーザになった場合に発生し、ソーシャル・ネットワーキング・システム730は、ユーザ・プロファイル・ストア736内にユーザ・プロファイルの新たなインスタンスを生成し、ユーザ・アカウントに対して一意の識別子を割り当て、ユーザによって提供される情報をユーザ・アカウントのフィールドへ投入し始める。
【0058】
つながりストア738は、他のユーザに対するユーザのつながり、外部システム720に対するつながり、または他のエンティティに対するつながりを記述するのに適したデータ構造を含む。つながりストア738は、つながりタイプもユーザのつながりと関連付け得る。つながりタイプは、ユーザのプライバシー設定と共に使用されて、ユーザに関する情報に対するアクセスを規制し得る。本発明の一実施形態において、ユーザ・プロファイル・ストア736およびつながりストア738は、連合データベースとして実装され得る。
【0059】
つながりストア738、ユーザ・プロファイル・ストア736、およびアクティビティ・ログ742内に記憶されるデータは、ノードを使用して、ノードを接続する様々なオブジェクトおよびエッジを識別して、異なるオブジェクト間の関係を識別するソーシャル・グラフをソーシャル・ネットワーキング・システム730が生成することを可能にする。例えば、第1のユーザが、ソーシャル・ネットワーキング・システム730内で第2のユーザとのつながりを確立する場合、ユーザ・プロファイル・ストア736からの第1のユーザおよび第2のユーザのユーザ・アカウントは、ソーシャル・グラフ内のノードとして動作し得る。つながりストア738によって記憶される、第1のユーザと第2のユーザとの間のつながりは、第1のユーザおよび第2のユーザに対して関連付けられるノード間のエッジである。この例を続けると、第2のユーザは、次いで、第1のユーザに対して、ソーシャル・ネットワーキング・システム730内でメッセージを送信し得る。メッセージを送信するアクションは、第1のユーザおよび第2のユーザを表現する、ソーシャル・グラフ内の2つのノード間の別のエッジであり、メッセージを送信するアクションは、記憶され得る。また、メッセージ自体が、第1のユーザを表現するノードおよび第2のユーザを表現するノードに対して接続される別のノードとして、ソーシャル・グラフにおいて識別され、ソーシャル・グラフに含まれ得る。
【0060】
別の例において、第1のユーザは、ソーシャル・ネットワーキング・システム730によって維持される画像において(または、代替的に、ソーシャル・ネットワーキング・システム730の外部の別のシステムによって維持される画像において)第2のユーザをタグ付けし得る。画像は、それ自体がソーシャル・ネットワーキング・システム730内のノードとして表現され得る。このタグ付けアクションは、ユーザの各々と画像との間にエッジを作成するだけでなく、第1のユーザと第2のユーザとの間のエッジも作成し得る。画像もソーシャル・グラフ内のノードである。また別の例において、ユーザが、イベントへ参加することを確かめる場合、そのユーザおよびそのイベントは、ユーザ・プロファイル・ストア736から取得されるノードであり、そのイベントへの参加は、アクティビティ・ログ742から得られ得るノード間のエッジである。ソーシャル・グラフを生成および維持することによって、ソーシャル・ネットワーキング・システム730は、多くの異なるタイプのオブジェクトを記述するデータ、ならびに、それらのオブジェクト間の相互作用およびつながりを含み、社会的に関連する情報の豊富なソースを提供する。
【0061】
ウェブ・サーバ732は、ソーシャル・ネットワーキング・システム730を、ネットワーク750を通じて、1つもしくは複数のユーザ・デバイス710および/または1つもしくは複数の外部システム720に対してリンクする。ウェブ・サーバ732は、ウェブ・ページ、およびJava(登録商標)、JavaScript、Flash、XMLなどの他のウェブ関連コンテンツを供給する。ウェブ・サーバ732は、メール・サーバを含み、または、ソーシャル・ネットワーキング・システム730と1つもしくは複数のユーザ・デバイス710との間のメッセージを受信およびルーティングするための他のメッセージング機能を含み得る。メッセージは、インスタント・メッセージ、キュー・メッセージ(例えば、電子メール)、テキストおよびSMSメッセージ、または任意の他の適切なメッセージング・フォーマットであり得る。
【0062】
API要求サーバ734は、1つまたは複数の外部システム720およびユーザ・デバイス710が、1つまたは複数のAPI関数を呼び出すことによって、ソーシャル・ネットワーキング・システム730からのアクセス情報を呼び出すことを可能にする。API要求サーバ734は、外部システム720が、APIを呼び出すことによって、ソーシャル・ネットワーキング・システム730に対して情報を送信することも可能にし得る。外部システム720は、1つの実施形態において、ネットワーク750を通じてソーシャル・ネットワーキング・システム730へAPI要求を送信し、API要求サーバ734は、そのAPI要求を受信する。API要求サーバ734は、API要求に対して関連付けられたAPIを呼び出すことによって要求を処理して、適当な応答を生成する。API要求サーバ734は、その適当な応答を、ネットワーク750を通じて外部システム720へ通信する。例えば、API要求に応答して、API要求サーバ734は、外部システム720に対してログインしたユーザのつながりなどの、ユーザに対して関連付けられたデータを収集し、収集されたデータを外部システム720へ通信する。別の実施形態において、ユーザ・デバイス710は、外部システム720と同じ手法で、APIを通じてソーシャル・ネットワーキング・システム730と通信する。
【0063】
アクション・ロガー740は、ソーシャル・ネットワーキング・システム730内での、および/またはソーシャル・ネットワーキング・システム730外でのユーザ・アクションに関する通信をウェブ・サーバ732から受信することが可能である。アクション・ロガー740は、ユーザ・アクションに関する情報をアクティビティ・ログ742へ投入し、ソーシャル・ネットワーキング・システム730の内部で、およびソーシャル・ネットワーキング・システム730の外部で、そのユーザによって行われた様々なアクションをソーシャル・ネットワーキング・システム730が発見することを可能にする。特定のユーザが、ソーシャル・ネットワーキング・システム730上の別のノードに関して行う任意のアクションは、アクティビティ・ログ742内または同様のデータベースもしくは他のデータ・レポジトリ内で維持される情報を通じて、各ユーザのアカウントに対して関連付けられ得る。識別および記憶される、ソーシャル・ネットワーキング・システム730内でユーザによって行われるアクションの例は、例えば、別のユーザに対するつながりを追加すること、別のユーザへメッセージを送信すること、別のユーザからのメッセージを読むこと、別のユーザに対して関連付けられるコンテンツを視聴すること、別のユーザによって投稿されたイベントに参加すること、画像を投稿すること、画像を投稿しようと試行すること、または、別のユーザもしくは別のオブジェクトと相互作用する他のアクションを含み得る。ユーザが、ソーシャル・ネットワーキング・システム730内でアクションを行う場合、そのアクションは、アクティビティ・ログ742内に記録される。一実施形態において、ソーシャル・ネットワーキング・システム730は、アクティビティ・ログ742をエントリのデータベースとして維持する。アクションが、ソーシャル・ネットワーキング・システム730内で行われる場合、そのアクションについてのエントリが、アクティビティ・ログ742に対して追加される。アクティビティ・ログ742は、アクション・ログと称され得る。
【0064】
また、ユーザ・アクションは、ソーシャル・ネットワーキング・システム730とは別個の外部システム720などの、ソーシャル・ネットワーキング・システム730の外部のエンティティ内で発生する概念およびアクションに対して関連付けられ得る。例えば、アクション・ロガー740は、ユーザによる外部システム720との相互作用を記述するデータを、ウェブ・サーバ732から受信し得る。この例において、外部システム720は、ソーシャル・グラフにおける構造化されたアクションおよびオブジェクトに従って、ユーザによる相互作用を報告する。
【0065】
ユーザが外部システム720と相互作用するアクションの他の例は、ユーザが外部システム720もしくは別のエンティティにおいて興味を表現すること、外部システム720もしくは外部システム720内のウェブ・ページ722aと議論するソーシャル・ネットワーキング・システム730に対してユーザがコメントを投稿すること、ユーザがソーシャル・ネットワーキング・システム730に対してユニフォーム・リソース・ロケータ(URL)もしくは外部システム720に対して関連付けられる他の識別子を投稿すること、ユーザが外部システム720に対して関連付けられるイベントへ参加すること、または、外部システム720に関連する、ユーザによる任意の他のアクションを含む。したがって、アクティビティ・ログ742は、ソーシャル・ネットワーキング・システム730のユーザと、ソーシャル・ネットワーキング・システム730とは別個の外部システム720との間の相互作用を記述するアクションを含み得る。
【0066】
認証サーバ744は、ソーシャル・ネットワーキング・システム730のユーザの1つまたは複数のプライバシー設定を強化する。ユーザのプライバシー設定は、ユーザに対して関連付けられる特定の情報がどのように共有され得るかを決定する。プライバシー設定は、ユーザに対して関連付けられる特定の情報の仕様、および情報が共有され得る1つまたは複数のエンティティの仕様を備える。情報が共有され得るエンティティの例は、他のユーザ、アプリケーション、外部システム720、または、その情報に潜在的にアクセスし得る任意のエンティティを含み得る。ユーザによって共有され得る情報は、プロフィール写真などのユーザ・アカウント情報、ユーザに対して関連付けられる電話番号、ユーザのつながり、つながりを追加すること、ユーザ・プロフィール情報を変更することなどのユーザによって行われるアクション等を備える。
【0067】
プライバシー設定仕様は、異なるレベルの粒度で提供され得る。例えば、プライバシー設定は、他のユーザと共有されるべき具体的な情報を識別し得る。プライバシー設定は、職場電話番号、または、プロフィール写真、自宅電話番号、およびステータスを含む個人情報などの関連情報の具体的なセットを識別する。代替的に、プライバシー設定は、ユーザに対して関連付けられる全ての情報に対して適用されてもよい。特定の情報にアクセスすることができるエンティティのセットの仕様も、様々なレベルの粒度で特定され得る。情報が共有され得るエンティティの様々なセットは、例えば、ユーザの全ての友達、友達の全ての友達、全てのアプリケーション、または全ての外部システム720を含み得る。1つの実施形態は、エンティティのセットの仕様がエンティティの一覧表を備えることを可能にする。例えば、ユーザは、一定の情報に対してアクセスすることを許可される外部システム720のリストを提供し得る。別の実施形態は、情報に対してアクセスすることを許可されない例外と共にエンティティのセットを仕様が備えることを可能にする。例えば、ユーザは、全ての外部システム720がユーザの職場情報に対してアクセスすることを許可し得るが、職場情報に対してアクセスすることを許可されない外部システム720のリストを特定し得る。一定の実施形態は、一定の情報に対してアクセスすることを許可されない例外のリストを「ブロック・リスト」と呼ぶ。ユーザによって特定されるブロック・リストに所属する外部システム720は、プライバシー設定において特定される情報に対してアクセスすることをブロックされる。情報の仕様の粒度と、情報が共有されるエンティティの仕様の粒度との様々な組み合わせが可能である。例えば、全ての個人情報は、友達と共有され得るのに対して、全ての職場情報は、友達の友達と共有され得る。
【0068】
認証サーバ744は、ユーザに対して関連付けられる一定の情報がユーザの友達、外部システム720、ならびに/または他のアプリケーションおよびエンティティによってアクセスされ得るかを決定するためのロジックを含む。外部システム720は、ユーザの職場電話番号などの、ユーザのより個人的かつ機密的な情報に対してアクセスするために、認証サーバ744からの認証を必要とし得る。ユーザのプライバシー設定に基づいて、認証サーバ744は、別のユーザ、外部システム720、アプリケーション、または別のエンティティが、ユーザによって行われるアクションに関する情報を含む、ユーザに対して関連付けられる情報に対してアクセスすることを許可されているかを決定する。
【0069】
いくつかの実施形態では、ソーシャル・ネットワーキング・システム730は、コンテンツ解析モジュール746を備えることができる。コンテンツ解析モジュール746は、例えば、
図1のコンテンツ解析モジュール102として実装されてもよい。前述したように、多くの変形例および他の可能性が存在し得ることを理解されたい。コンテンツ解析モジュール746の他の特徴は、コンテンツ解析モジュール102を参照して本明細書で検討される。
【0070】
ハードウェア実装
前述のプロセスおよび特徴は、多種多様なマシンおよびコンピュータ・システム・アーキテクチャによって、ならびに、多種多様なネットワークおよびコンピューティング環境において実装され得る。
図8は、本発明の一実施形態に係る、本明細書において説明される実施形態のうちの1つまたは複数を実装するために使用され得るコンピュータ・システム800の例を例示する。コンピュータ・システム800は、コンピュータ・システム800に対して、本明細書において議論されるプロセスおよび特徴を実行させるための命令のセットを含む。コンピュータ・システム800は、他のマシンへ接続され(例えば、ネットワーク化され)得る。ネットワーク化された配置において、コンピュータ・システム800は、クライアント/サーバ・ネットワーク環境内のサーバ・マシンもしくはクライアント・マシンの資格において動作し、または、ピア・ツー・ピア(もしくは分散)・ネットワーク環境内のピア・マシンとして動作し得る。本発明の一実施形態において、コンピュータ・システム800は、ソーシャル・ネットワーキング・システム830、ユーザ・デバイス710、および外部システム820、または、これらの構成要素であり得る。本発明の一実施形態において、コンピュータ・システム800は、ソーシャル・ネットワーキング・システム830の全部または一部を構成する多くのサーバのうちの1つのサーバであり得る。
【0071】
コンピュータ・システム800は、プロセッサ802と、キャッシュ804と、コンピュータ読取可能な媒体上に記憶され、本明細書において説明されるプロセスおよび特徴へ向けられた、1つまたは複数の実行可能なモジュールおよびドライバとを含む。また、コンピュータ・システム800は、高性能入出力(I/O)バス806と、標準I/Oバス808とを含む。ホスト・ブリッジ810は、プロセッサ802を高性能I/Oバス806に対して結合する一方で、I/Oバス・ブリッジ812は、2つのバス806および808を互いに結合する。システム・メモリ814および1つまたは複数のネットワーク・インターフェース816は、高性能I/Oバス806へ結合される。コンピュータ・システム800は、ビデオ・メモリと、ビデオ・メモリに対して結合される表示デバイスとをさらに含んでもよい(図示せず)。マス・ストレージ818およびI/Oポート820は、標準I/Oバス808へ結合される。コンピュータ・システム800は、標準I/Oバス808に対して結合される、キーボードおよびポインティング・デバイス、表示デバイス、または他の入出力デバイス(図示せず)を随意的に含んでもよい。全体的に、これらの要素は、カリフォルニア州サンタ・クララのインテル・コーポレーション社(Intel Corporation)によって製造されるx86互換性のあるプロセッサ、カリフォルニア州サニーヴェイルのアドバンスト・マイクロ・デバイス社(AMD:Advanced Micro Devices,Inc)によって製造されるx86互換性のあるプロセッサ、および任意の他の適切なプロセッサを含むが、これらに限定されない、広範なカテゴリのコンピュータ・ハードウェア・システムを表現することが意図される。
【0072】
オペレーティング・システムは、ソフトウェア・アプリケーション(図示せず)へのデータの入力およびソフトウェア・アプリケーションからのデータの出力を含む、コンピュータ・システム800の動作を管理および制御する。オペレーティング・システムは、システム上で実行されているソフトウェア・アプリケーションと、システムのハードウェア構成要素との間のインターフェースを提供する。任意の適切なオペレーティング・システム、例えば、LINUXオペレーティング・システム、カリフォルニア州クパチーノのアップル・コンピュータ社(Apple Computer,Inc.)から市販されているアップル・マッキントッシュ・オペレーティング・システム、UNIX(登録商標)オペレーティング・システム、マイクロソフト(登録商標)ウィンドウズ(登録商標)オペレーティング・システム、BSDオペレーティング・システム等などが使用され得る。他の実装も可能である。
【0073】
コンピュータ・システム800の要素は、下記においてより詳細に説明される。具体的には、ネットワーク・インターフェース816は、コンピュータ・システム800と、幅広いネットワークのうちの任意のもの、例えば、イーサネット(例えば、IEEE802.3)・ネットワーク、バックプレーン等などとの間の通信を提供する。マス・ストレージ818は、上記に識別されたそれぞれのコンピューティング・システムによって実装される上述されたプロセスおよび特徴を実行するためのデータおよびプログラミング命令のための永続的なストレージを提供するのに対して、システム・メモリ814(例えば、DRAM)は、プロセッサ802によって実行される場合のデータおよびプログラミング命令のための一時的なストレージを提供する。I/Oポート820は、コンピュータ・システム800へ結合され得る付加的な周辺デバイス間の通信を提供する、1つまたは複数のシリアル通信ポートおよび/またはパラレル通信ポートであり得る。
【0074】
コンピュータ・システム800は、多様なシステム・アーキテクチャを含むことができ、コンピュータ・システム800の様々な構成要素は、再配置されてもよい。例えば、キャッシュ804は、プロセッサ802と共にチップ上に実装されてもよい。代替的に、キャッシュ804およびプロセッサ802は、「プロセッサ・モジュール」としてまとめられて、プロセッサ802が「プロセッサ・コア」と称されてもよい。さらに、本発明の一定の実施形態は、上記構成要素の全部を必要としなくても、または、含まなくてもよい。例えば、標準I/Oバス808へ結合される周辺デバイスは、高性能I/Oバス806へ結合されてもよい。また、いくつかの実施形態において、単一のバスのみが存在して、コンピュータ・システム800の構成要素が、その単一のバスへ結合されてもよい。さらに、コンピュータ・システム800は、付加的なプロセッサ、記憶デバイス、またはメモリなどの付加的な構成要素を含んでもよい。
【0075】
一般に、本明細書において説明されるプロセスおよび特徴は、オペレーティング・システムの一部もしくは特定のアプリケーション、構成要素、プログラム、オブジェクト、モジュール、または「プログラム」と称される一連の命令として実装され得る。例えば、1つまたは複数のプログラムは、本明細書において説明される具体的なプロセスを実行するために使用され得る。プログラムは、典型的には、1つまたは複数のプロセッサによって読み出され、実行される場合に、コンピュータ・システム800に対して、本明細書において説明されるプロセスおよび特徴を実行するための動作を実行させる、1つまたは複数の命令を、コンピュータ・システム800内の様々なメモリおよび記憶デバイスにおいて備える。本明細書において説明されるプロセスおよび特徴は、ソフトウェア、ファームウェア、ハードウェア(例えば、特定用途向け集積回路)、または、これらの任意の組み合わせにおいて実装され得る。
【0076】
1つの実装において、本明細書において説明されるプロセスおよび特徴は、分散コンピューティング環境において個々にまたはまとめて、コンピュータ・システム800によって実行される一連の実行可能なモジュールとして実装される。前述のモジュールは、ハードウェア、コンピュータ読取可能な媒体(もしくはマシン読取可能な媒体)上に記憶される実行可能なモジュール、または、両者の組み合わせによって実現され得る。例えば、モジュールは、プロセッサ802などの、ハードウェア・システム内のプロセッサによって実行されるべき複数の命令または一連の命令を備え得る。まず、一連の命令は、マス・ストレージ818などの記憶デバイス上に記憶され得る。ただし、一連の命令は、任意の適切なコンピュータ読取可能な記憶媒体上に記憶されてもよい。さらに、一連の命令は、局所的に記憶される必要はなく、ネットワーク上のサーバなどの遠隔記憶デバイスからネットワーク・インターフェース816を通じて受信されてもよい。命令は、マス・ストレージ818などの記憶デバイスからシステム・メモリ814内へコピーされ、次いで、プロセッサ802によってアクセスされ、実行される。様々な実施形態において、1つまたは複数のモジュールは、並列処理環境内の複数のサーバなどの、1つまたは複数の位置における、1つまたは複数のプロセッサによって実行され得る。
【0077】
コンピュータ読取可能な媒体の例は、揮発性メモリ・デバイスおよび不揮発性メモリ・デバイスなどの記録可能なタイプの媒体、ソリッド・ステート・メモリ、フロッピー(登録商標)ディスクおよび他の取り外し可能なディスク、ハード・ディスク・ドライブ、磁気媒体、光ディスク(例えば、コンパクト・ディスク読取専用メモリ(CD ROMS)、デジタル多用途ディスク(DVD))、他の同様の非一時的で(もしくは一時的で)、有形の(もしくは無形の)記憶媒体、または、本明細書において説明されるプロセスおよび特徴のうちの任意の1つもしくは複数を実行すべく、コンピュータ・システム800による実行のために一連の命令を記憶し、符号化し、もしくは担持するのに適切な任意のタイプの媒体を含むが、これらに限定されない。
【0078】
説明の目的のために、多くの具体的な詳細が、本説明の完全な理解を提供するために述べられている。しかしながら、こうした具体的な詳細なしに本開示の実施形態が実施され得ることは、当業者には明らかであろう。いくつかの例において、モジュール、構造、プロセス、特徴、およびデバイスは、本説明を曖昧にすることを回避するために、ブロック図の形式で示される。他の例において、機能ブロック図およびフロー図は、データおよび論理フローを表現するために示される。ブロック図およびフロー図の構成要素(例えば、モジュール、ブロック、構造、デバイス、特徴等)は、本明細書において明示的に説明および図示されたような手法以外の手法で、様々に組み合わされ、分離され、除去され、順序を並べ替えられ、置換されてもよい。
【0079】
この明細書における、「1つの実施形態」、「一実施形態」、「他の実施形態」、「一連の実施形態」、「いくつかの実施形態」、「様々な実施形態」等への言及は、実施形態に関連して説明される特定の特徴、設計、構造、または特性が本開示の少なくとも1つの実施形態に含まれることを意味する。本明細書内の様々な部分における「1つの実施形態において」または「一実施形態において」という句の出現は、必ずしも全て同じ実施形態に言及するものとは限らず、別個の実施形態または代替的な実施形態は、他の実施形態と相互排他的ではない。さらに、「実施形態」等への明示的な言及が存在しても存在しなくても、様々な特徴が説明され、様々な特徴は、いくつかの実施形態において様々に組み合わされ、含まれ得るが、他の実施形態においては様々に省略され得る。同様に、いくつかの実施形態にとっては選好事項または要件であり得るが、他の実施形態にとっては選好事項または要件ではない、様々な特徴が説明される。
【0080】
本明細書において使用される文言は、主に、読みやすさと教育的目的のために選択されており、発明の主題の輪郭を描くため、または境界線を描くために選択されたものではない。そのため、本発明の範囲は、この詳細な説明によって限定されるのではなく、むしろ、本明細書に基づく出願について発行される任意の請求項によって限定されることが意図される。したがって、本発明の実施形態の開示は、本発明の範囲の例示とはなるが、限定とはならないことが意図され、本発明の範囲は、下記の特許請求の範囲において述べられる。