以下に、本願に係る情報処理装置、情報処理方法及び情報処理プログラムを実施するための形態(以下、「実施形態」と呼ぶ)について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る情報処理装置、情報処理方法及び情報処理プログラムが限定されるものではない。1つまたは複数の実施形態の詳細は、以下の説明および図面に記載される。また、複数の実施形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。また、以下の1つまたは複数の実施形態において同一の部位には同一の符号を付し、重複する説明は省略する。
〔1.情報検索システムの構成〕
まず、図1を参照して、実施形態に係る情報検索システムの構成について説明する。
図1は、実施形態に係る情報検索システムの構成例を示す図である。図1に示すように、実施形態に係る情報検索システム1は、ユーザ装置10と、情報処理装置100と、情報提供装置200とを含む。
情報検索システム1において、ユーザ装置10、情報処理装置100および情報提供装置200は、それぞれネットワークNと有線又は無線により接続される。ネットワークNは、例えば、インターネット網等のネットワーク網である。図1中では図示していないが、情報検索システム1は、複数台のユーザ装置10や、複数台の情報処理装置100や、複数台の情報提供装置200を含んでもよい。
ユーザ装置10は、ユーザによって使用される情報処理装置である。ユーザ装置10は、情報提供装置200に、各種情報を要求したり、情報提供装置200から、各種情報を受信したりすることができる。ユーザ装置10は、スマートフォン、デスクトップ型PC(Personal Computer)、ノート型PC、タブレット型PC等のクライアント装置を含む、任意のタイプの情報処理装置であってもよい。
情報提供装置200は、ユーザに情報を提供する情報処理装置である。ユーザ装置10からの各種情報の要求に応じて、情報提供装置200は、各種情報についての検索を、情報処理装置100に要求することができる。また、情報提供装置200は、情報処理装置100からの検索結果に応じて、ユーザ装置10に、各種情報を提供することができる。情報提供装置200は、サーバを含む、任意のタイプの情報処理装置であってもよい。
情報処理装置100は、情報検索のための処理を実行する情報処理装置である。例えば、情報処理装置100は、検索に使用されるインデックスを生成することができる。また、情報処理装置100は、生成されたインデックスを使用した検索処理を実行することができる。情報処理装置100は、サーバを含む、任意のタイプの情報処理装置であってもよい。情報処理装置100は、ネットワークNを介して、有線又は無線によりユーザ装置10、および情報提供装置200と通信を行う。複数台の情報処理装置100が、ウェブサーバ、アプリケーションサーバ、データベースサーバ等の各種サーバの機能をそれぞれ提供してもよい。
例示の目的のために、情報提供装置200が、ファッション画像検索アプリケーション(以下「ファッション画像検索アプリ」という。)を介して、類似ファッション検索サービスを、ユーザに提供すると仮定する。この例では、ユーザは、ユーザ装置10(例えば、スマートフォン)にインストールされたファッション画像検索アプリ内のコンテンツから、オンラインショッピングのファッション商品を、「見た目の特徴」で検索することができる。例えば、ユーザが花柄浴衣を検索したい場合に、ユーザは、商品画像、撮影画像(例えば、ユーザによって撮られた写真)、イラスト、漫画のページ等の、花柄浴衣を描写した画像で、ユーザがイメージする浴衣を検索することができる。
上記の特定の例示においては、情報提供装置200が花柄浴衣を描写した画像をユーザ装置10から受信した場合に、情報提供装置200は、画像の内容を表す画像特徴量(例えば、高次元ベクトルデータなど)を、画像から抽出する。そして、情報提供装置200は、抽出された画像特徴量を、情報処理装置100に、検索クエリとして送信する。検索クエリを受信することに応じて、情報処理装置100は、ファッション商品がファッション商品の画像の画像特徴量に関連付けられたファッション商品検索用のインデックスを、検索する。そして、情報処理装置100は、類似ファッションについての検索結果を、情報提供装置200に提供する。情報提供装置200は、提供された検索結果に応じて、画像に描写された花柄浴衣と見た目が似ているファッション商品を、ユーザに提示することができる。
実施形態に係る情報処理装置100は、上述したような類似画像検索を含む様々な情報検索に利用可能なインデックスとして、グラフを生成することができる。より具体的には、情報処理装置100は、グラフ型の検索インデックスとして、近傍グラフ(Neighbor Graph)を生成することができる。近傍グラフの生成は、図2を参照して以下で詳述される。
〔2.グラフ生成処理〕
次に、図2を参照して、例示的な実施形態に係るグラフ生成処理について説明する。
図2は、グラフを生成するグラフ生成処理の一例を示す図である。図2の例では、近傍グラフを生成するグラフ生成処理が、図1を参照して上述した情報検索システム1の情報処理装置100によって行われる。
〔2−1.例示的な実施形態の概要〕
グラフ型のインデックスを使用した検索では、グラフ内のノードは、検索対象のオブジェクトに対応し、近傍ノードにエッジによって接続される。しかしながら、クエリが受け付けられた場合に、ノードが検索されるべきノードの近傍に存在しないために、検索されるべきノードが、検索されない場合がある。そこで、例示的な実施形態に係る情報処理装置100は、検索されにくいノードが検索されやすくなるように、仮想ノードをグラフに追加する。これにより、情報処理装置100は、新たな探索経路を生成することができ、それによって、グラフの検索精度を向上させることができる。
〔2−2.例示的な実施形態の序論〕
図2の例では、図1の情報検索システム1の情報提供装置200は、情報処理装置100に、検索対象のデータを登録する。例えば、情報提供装置200は、静止画像、動画像(ビデオ)、音声、文書(ドキュメント)等の検索対象のデータから、特徴量を抽出する。そして、情報提供装置200は、抽出された特徴量を、ベクトルデータで表現される「オブジェクト」として、情報処理装置100に登録する。例えば、オブジェクトは、データのIDに関連付けられ、情報処理装置100内の記憶領域に格納される。また、情報提供装置200は、図1の情報検索システム1のユーザ装置10から検索要求を受信することに応じて、ベクトルで表現される「クエリオブジェクト」を、情報処理装置100に、クエリとして送信する。図1を参照して上述した特定の例示においては、登録されたオブジェクトが、ファッション商品の画像の画像特徴量であり、クエリオブジェクトが、花柄浴衣を描写した画像の画像特徴量である。
図2の例では、情報処理装置100は、情報提供装置200からクエリオブジェクトを受信することに応じて、登録されたオブジェクトのうちクエリオブジェクトに最も近いオブジェクトを探索する。オブジェクトと他のオブジェクトとの間の距離は、距離関数として表現される。距離関数の例は、ユークリッド距離や、コサイン類似度を含む。一般的には、オブジェクトと他のオブジェクトとの間の距離が小さい場合に、オブジェクトと他のオブジェクトとの間の類似性が高い。
ところで、オブジェクトが単純に線形探索によって探索される場合には、計算量は、オブジェクトの数および次元数に比例する。したがって、次元数が大きく、かつオブジェクトの数が多い場合には、線形探索は、膨大な時間を要することがある。図1を参照して上述した特定の例示においては、オンラインショッピングのファッション商品の数が「108(ミリオンスケール)」程度であり、かつファッション商品の画像の画像特徴量の次元数が「103」程度であることが考えられる。例えば、探索アルゴリズムが「108」個の「103」次元のベクトルと、「103次元」のベクトルのクエリベクトルとの間の距離を比較することによって、クエリオブジェクトに最も近いオブジェクトを選択するものである場合には、計算量の増大が、問題となり得る。
上述したような計算量の増大に対処するために、従来、近似最近傍探索(Approximate Nearest Neighbor Search)が提案されている。近似最近傍探索は、データセットから、与えられたデータに類似するデータを「近似的」に検索するために利用される。近似最近傍探索の手法の例は、グラフ型インデックス、ツリー型インデックス(例えば、Vantage Point Tree)、ハッシュを使用した手法(例えば、Locality Sensitive Hashing)、量子化を使用した手法(例えば、Product Quantization)等を含む。
グラフ型インデックスの検索精度は、一般的に、上述の近似最近傍探索の手法の中で、高い傾向を示す。グラフ型インデックスの手法では、近傍グラフ(「以下「グラフ」という。」)が、グラフ型のインデックスとして生成される。例えば、図2の例では、グラフを生成することによって、クエリオブジェクトに最も近いオブジェクトを近似的に探索することが可能である。図2の例では、オブジェクトから生成されたグラフは、オブジェクトを、「ノード」として有する。また、グラフは、ノードを接続する「エッジ」を有する。グラフ内のノードは、ベクトル空間内のオブジェクトに対応する。
上述のように、検索対象のデータに関連付けられているオブジェクトは、この検索対象のデータの特徴量を、ベクトルデータとして表現することができる。一方、クエリオブジェクトは、探索対象のデータの特徴量を、ベクトルデータとして表現することができる。したがって、オブジェクトのベクトル空間中のノードは、検索対象のデータに対応する。一方、オブジェクトのベクトル空間中のクエリオブジェクトは、探索対象のデータに対応する。図1を参照して上述した特定の例示においては、オブジェクトやノードが、検索対象となるファッション商品(すなわち、検索対象のデータの一例)に対応し、クエリオブジェクトが、花柄浴衣を描写した画像であるクエリ画像(すなわち、探索対象のデータの一例)に対応する。
グラフでは、ノードは、このノードの近傍の複数のノードである複数の近傍ノード(Neighboring Node)に接続される。クエリオブジェクトが受け付けられた場合に、クエリオブジェクトに対する近傍ノードが、グラフ内のノードを巡ることによって、探索される。
グラフの探索の例に関しては、例えば、はじめに、探索起点ノード(「以下「探索起点」という。」)が、選択される。探索起点は、大雑把にクエリオブジェクトの近くにあるノードである。探索起点は、例えば、図3を参照して後述するツリー情報記憶部123に記憶されたツリー型インデックスを使用することによって、選択され得る。探索起点は、任意のノードであってもよい。ツリー型インデックスを用いずに、任意のノードが、探索起点として選択されてもよい。次いで、探索点が、探索起点から、探索起点のノードにエッジによって接続されたノードのうちクエリオブジェクトに最も近いノードに移動する。このように、探索点は、クエリオブジェクトの方向に、貪欲に(Greedily)移動する。クエリオブジェクトに対する近傍ノードは、このような移動を繰り返すことによって、探索される。
しかしながら、グラフの構造は、一般的に、登録されたオブジェクトのデータセットに依存する。したがって、検索されにくいノードが、データセットによっては生成される場合がある。例えば、ノードが検索されるべきノードの近傍に存在しない場合に、検索されるべきノードが、検索されない場合がある。このように、グラフ内で孤立したノードは、検索漏れを引き起こす可能性がある。
上記の貪欲な探索(Greedy Search)に関連する例では、検索されるべきノードの近傍ノードがないことにより、探索点が、検索されるべきノードであるクエリオブジェクトの近傍ノードとは異なる、局所的な近傍ノード(Local Neighboring Node)に陥る場合がある。図1を参照して上述した特定の例示においては、例えば、様々な絵柄の複数の浴衣(例えば、動物柄)にそれぞれ対応する複数のノードが花柄浴衣に対応するノードの近傍に存在しない場合に、探索点が、正しい方向に移動しない場合がある。このような場合、局所的な近傍ノード(例えば、花柄袴や花柄振袖に対応するノード)が、花柄浴衣に対応するオブジェクトとして検索される可能性がある。
そこで、例示的な実施形態では、情報処理装置100は、グラフの検索精度を向上させるために、以下に説明されるグラフ生成処理を実行する。
〔2−3.情報処理装置の処理フロー〕
以下では、図2を参照して、例示的な実施形態に係る情報処理装置100の処理フローについて説明する。
例示的な実施形態では、グラフ生成処理は、1)生成済みグラフからの処理対象となるノードの選択、2)生成済みグラフへの仮想ノードの追加および3)仮想ノードへのエッジの付与の3つの段階を含む。第1、第2および第3の段階は、グラフの始状態、中間状態および終状態にそれぞれ対応する。図2の例では、新たなグラフG2が、生成済みグラフであるグラフG1から、中間状態グラフISG1を通して生成される。図2に示された「白矢印」は、グラフ生成処理が次の段階に移行することを示す。
〔2−3−1.処理対象のノードの選択〕
第1の段階では、情報処理装置100は、生成済みグラフから処理対象となるノードを選択するノード選択処理を行う。処理対象となるノードは、後述する「仮想ノード追加処理」の対象となるノードである。以下では、「ノード選択処理」の様々な実装形態について説明する。
はじめに、情報処理装置100は、生成済みグラフを取得する。取得された生成済みグラフは、「図3の生成部135」を参照して後述する各種公知のグラフ生成アルゴリズムを使用して生成されたグラフであってもよい。例えば、生成済みグラフは、ANNG(Approximate k-Nearest Neighbor Graph)インデックスの生成アルゴリズムを使用して生成されたグラフであってもよい。
上述のANNGインデックスの生成アルゴリズムでは、オブジェクトが、ANNGに徐々に追加される。そして、追加されたオブジェクトに対する近傍ノードが、部分的に生成されたANNGを使用して検索される。検索された近傍ノードは、追加されたオブジェクトに対応するノードに、エッジによって接続される。部分的に生成されたANNGを使用したノードの検索を実行することによって、少ない計算量でANNGを生成することが可能である。ノードがこのノードの近傍の他のノードにエッジによって接続されるように、ANNGは、生成される。ANNG等のグラフデータを使用したノード検索処理(例えば、k最近傍検索)は、図7を参照して以下で詳述される。
生成済みグラフは、複数のオブジェクトにそれぞれ対応する複数のノードを含む。生成済みグラフに含まれるノードは、このノードの近傍の複数のノードに、複数のエッジによってそれぞれ接続されている。生成済みグラフ内のエッジは、有効エッジであってもよいし、無向エッジであってもよい。有効エッジには2つの種類がある。1番目の種類の有効エッジは、出力エッジであり、2番目の種類の有効エッジは、入力エッジである。あるノードに付与された「出力エッジ」は、このノードから他のノードへ移動することが可能なエッジである。例えば、探索点は、あるノードの出力エッジをこのノードから他のノードへたどることができる。一方、あるノードに付与された「入力エッジ」は、他のノードからこのノードへ移動することが可能なエッジである。例えば、探索点は、あるノードの出力エッジを他のノードからこのノードへたどることができる。
あるノードの出力エッジがこのノードから特定のノードへ移動することが可能なエッジである場合に、このノードは、特定のノードを近傍ノードとして参照するノードである。すなわち、あるノードの出力エッジは、どのノードがこのノードの近傍ノードであるかを示している。
なお、上述の無向エッジは、双方向エッジとも呼ばれ、出力エッジおよび入力エッジの2本の有効エッジと見なされ得る。したがって、ノードに有効エッジを付与することは、ノードに無向エッジを付与することを包含し得る。出力エッジおよび入力エッジの数は、「図3の生成部135」を参照して後述する各種公知のグラフ生成アルゴリズムを使用して調整されていてもよい。例えば、生成済みグラフは、ONNG(Optimized Nearest Neighbor Graph)インデックスの生成アルゴリズムを使用して生成されたグラフであってもよい。この場合、出力エッジおよび入力エッジの数は、検索精度や検索時間に基づいて調整されていてもよい。
図2の例では、情報処理装置100は、情報処理装置100内の記憶領域から、生成済みグラフであるグラフG1を取得する。図2の例に示されるように、グラフG1は、ノードN1、ノードN2、ノードN3、ノードN4、ノードN5、ノードN6およびノードN7を含む。また、グラフG1は、ノードN1、ノードN2、ノードN3、ノードN4、ノードN5、ノードN6およびノードN7以外のノードも含む。ノードN1は、ノードN2、ノードN3、ノードN4、ノードN5、ノードN6およびノードN7に、複数のエッジによってそれぞれ接続されている。
図2の例では、ノードは、「丸」として示されている。一方、エッジは、「線」として示されている。なお、線で示されているエッジは、有効エッジであってもよいし、無向エッジであってもよい。ノードに付与されたエッジは、出力エッジおよび入力エッジのいずれかまたは両方であってもよい。
次いで、情報処理装置100は、取得された生成済みグラフ内のノードから、処理対象のノードを選択する。
例示的な実施形態では、情報処理装置100は、生成済みグラフ内のノードのうち検索されにくいノードを、処理対象のノードとして選択する。検索されにくいノードは、他のどのノードからも離れているノードである。例えば、検索されにくいノードは、他のどのノードからも孤立しているノードである。オブジェクトのベクトル空間が高次元である場合に、ベクトル空間は、あるノードが他のどのノードからも孤立している状況を発生させることがある。
図2の例では、情報処理装置100は、処理対象のノードとして、ノードN1を選択する。図2の例に示されるように、ノードN1は、グラフG1の中に「ポツン」とあるノード(すなわち、グラフG1の中で孤立しているノード)である。
一例では、情報処理装置100は、短いエッジに接続されていないノードを、処理対象のノードとして選択する。なぜなら、ノードが短いエッジに接続されていない場合に、このノードは、このノードの近くに他のノードがない孤立したノードである可能性が高いからである。例えば、ノードに付与されたエッジのうち最短のエッジの長さが閾値を満たす場合に、情報処理装置100は、このノードを、処理対象のノードとして選択しない。一方、ノードに付与されたエッジのうち最短のエッジの長さが閾値を満たさない場合に、情報処理装置100は、このノードを、処理対象のノードとして選択する。
別の例では、情報処理装置100は、生成済みグラフ内のノードの全ての対の間の距離を算出する。あるノードと少なくとも1つの他のノードとの間の距離が処理対象のノードの選択に関する所定の条件を満たす場合に、情報処理装置100は、このノードを、処理対象のノードとして選択する。処理対象のノードの選択に関する所定の条件は、例えば、「あるノードと少なくとも1つの他のノードとの間の距離のうち最短の距離が、閾値を満たさない」という条件であってもよい(すなわち、あるノードが、他のどのノードからも離れている)。
さらに別の例では、情報処理装置100は、検索精度の評価のためのテストセットを使用することによって、検索結果から漏れたノードを特定する。例えば、テストセットは、インスタンスであるクエリベクトルと、クエリベクトルに関連付けられたラベルとを含む。ラベルは、クエリベクトルによって検索されるべきノードを示す。例えば、情報処理装置100は、生成済みグラフを使用してクエリベクトルに対する近傍ノードをランダムに検索する。そして、情報処理装置100は、クエリベクトルによって検索されなかったノードを特定する。情報処理装置100は、検索結果から実際に漏れたノードを、処理対象のノードとして選択する。情報処理装置100は、生成済みグラフのノードから、テストセットを生成してもよい。例えば、情報処理装置100は、生成済みグラフのノードのうちの任意の2つ以上のノードを選択し、選択された任意の2つ以上のノードの中間点を、クエリベクトルとして算出してもよい。この場合、ラベルによって示されるノードは、選択された任意の2つ以上のノードのうちの少なくとも1つであってもよい。情報処理装置100は、任意の2つ以上のノードを選択するのではなく、1つのノードの最近傍ノードから、複数の最近傍ノードを選択し、選択された最近傍ノードの中間点を、クエリベクトルとして算出してもよい。この場合、ラベルによって示されるノードは、この1つのノードであってもよい。
〔2−3−2.仮想ノードの追加〕
第2の段階では、情報処理装置100は、生成済みグラフに仮想ノードを追加する仮想ノード追加処理を行う。処理対象ノードの選択の後に、情報処理装置100は、処理対象のノード(すなわち、検索結果から漏れる傾向があるノード)が検索されやすくなるように、生成済みグラフに仮想ノードを追加する。
情報処理装置100は、新たなオブジェクト(例えば、ベクトルデータ)を仮想ノードとして生成することによって、生成済みグラフに仮想ノードを追加することができる。したがって、仮想ノードを追加することは、ベクトルデータで表現される新たなオブジェクトを生成することを包含し得る。いくつかの実装形態では、情報処理装置100は、生成済みグラフに仮想ノードを追加することによって、中間状態グラフを生成する。「中間状態グラフ」という用語は、実ノードに対応するオブジェクトと、仮想ノードに対応する新たなオブジェクトとを含むデータセットを包含し得る。例えば、仮想ノードを追加することは、仮想ノードに対応する新たなオブジェクトを含む新たなデータセットを生成することを包含し得る。また、仮想ノードを追加することは、仮想ノードに対応する新たなオブジェクトを、データセットに追加することを包含する。
情報処理装置100は、仮想ノードをグラフに追加することによって、検索漏れを防止することができ、それによって、グラフの検索精度を向上させることができる。以下では、「仮想ノードの追加」の様々な実装形態について説明する。
仮想ノードは、登録された検索対象のデータに関連付けられて「いない」ノードである。仮想ノードは、通常のノードの場合と同様に、探索経路を形成する。ただし、検索するオブジェクトが登録された検索対象のデータに関連付けられているノードに対応する場合に、仮想ノードに対応する新たなオブジェクトは、検索対象のオブジェクトとならない。この場合、仮想ノードは、検索結果として返されないノードである。
オブジェクトはノードに対応するため、「オブジェクト」および「ノード」は、本明細書では、同義的に使用され得る。ただし、「仮想ノード」に対応する新たなオブジェクトは、検索対象のオブジェクトに対応する場合もしない場合もある。後述されるように、仮想ノードに対する近傍ノードが仮想ノードにエッジを付与するために検索される場合に、仮想ノードに対応する新たなオブジェクトは、検索対象のオブジェクトである。なぜなら、仮想ノードに対する近傍ノードが、他の仮想ノードであってもよいからである。この場合、仮想ノードは、検索結果に含まれ得る。一方、登録された検索対象のデータに関連付けられているノードが検索される場合に、「仮想ノード」に対応する新たなオブジェクトは、検索対象のオブジェクトではない。この場合、仮想ノードは、検索結果に含まれない。登録された検索対象のデータに関連付けられているノードと、仮想ノードとを区別するために、本明細書では、登録された検索対象のデータに関連付けられているノードは、「実ノード」と呼ばれる場合がある。
手短に言えば、オブジェクトは、実ノードおよび仮想ノードのいずれか対応する。例えば、近傍ノードが仮想ノードにエッジを付与するために検索される場合に、検索するオブジェクト(すなわち、グラフ探索において検索対象となるオブジェクト)は、実ノードおよび仮想ノードのいずれかに対応する。言い換えると、仮想ノードに対応するオブジェクトがインデックス化される場合に、検索するオブジェクトは、仮想ノードに対応する場合がある。しかしながら、例えば、図1を参照して上述した特定の例示においては、「検索するオブジェクト」は検索対象となるファッション商品に対応するオブジェクトであるため、検索するオブジェクトは、仮想ノードに対応しない。
情報処理装置100が仮想ノードを追加する場合に、情報処理装置100は、実ノード(すなわち、登録された検索対象のデータに関連付けられているノード)と仮想ノード(すなわち、登録された検索対象のデータに関連付けられて「いない」ノード)とを区別するために、追加される仮想ノードに、フラグを付与する。例えば、情報処理装置100は、実ノードフラグ「0」を、仮想ノードに付与する。情報処理装置100は、実ノードフラグ「1」を、実ノードに付与してもよい。
実ノードフラグが仮想ノードに付与されているため、情報処理装置100は、仮想ノードが検索結果に含まれないように、仮想ノードを含むグラフをたどることができる。後述されるように、情報処理装置100は、各種公知の検索アルゴリズム(例えば、k最近傍検索)を使用して、クエリオブジェクトに対する近傍ノードを検索することができる。情報処理装置100が仮想ノードを含むグラフを探索する場合に、情報処理装置100は、ノードに付与された実ノードフラグに基づいて、ノードが実ノードであるかを判定することができる。ノードが仮想ノードである場合に、情報処理装置100は、検索結果からこのノードを除外することができる。仮想ノードを有するグラフデータを使用した実ノード検索処理は、図8を参照して以下で詳述される。
実施形態に係る情報処理装置100は、「処理対象のノードと他のノードとの間の距離」に基づいて、仮想ノードを追加することができる。例えば、情報処理装置100は、処理対象のノードと、処理対象のノードに対する近傍ノードとの間の距離に基づいて、処理対象のノードの周りに仮想ノードを追加することができる。
例示的な実施形態では、情報処理装置100は、「処理対象のノードに付与されたエッジの長さ」に基づいて、仮想ノードを追加する。例えば、情報処理装置100は、選択された処理対象のノードごとに、処理対象のノードに付与されたエッジの長さに応じた数のオブジェクトを、仮想ノードとして生成する。生成された仮想ノードは、処理対象のノードに付与されたエッジ上に等間隔に配置されてもよい。あるいは、生成された仮想ノードは、処理対象のノードに寄せて配置されてもよい。図2の例では、処理対象のノードに付与されたエッジが長いほど、エッジ上に配置される仮想ノードの数は多い。
一例では、情報処理装置100は、処理対象のノードに付与されたエッジの長さが仮想ノードの追加に関する所定の条件を満たすかを判定する。例えば、仮想ノードの追加に関する所定の条件は、「エッジの長さが第1の閾値を超える」という第1の条件、「エッジの長さが第1の閾値より大きい第2の閾値を超える」という第2の条件等の条件であってもよい。情報処理装置100が処理対象のノードに付与されたエッジの長さが仮想ノードの追加に関する所定の条件を満たすと判定した場合に、情報処理装置100は、仮想ノードを追加する。例えば、情報処理装置100がエッジの長さが第1の条件を満たすと判定した場合に、情報処理装置100は、1個の仮想ノードを追加してもよい。情報処理装置100がエッジの長さが第2の条件を満たすと判定した場合に、情報処理装置100は、2個の仮想ノードを追加してもよい。情報処理装置100は、「仮想ノードの付与前のエッジの長さ」を「仮想ノードの付与後のエッジの最大長」で除算した値を、仮想ノードの個数として算出してもよい。
図2の例では、情報処理装置100は、仮想ノードVN1、仮想ノードVN2、仮想ノードVN3、仮想ノードVN4、仮想ノードVN5および仮想ノードVN6を、グラフG1に追加する。このようにして、情報処理装置100は、グラフG1から中間状態グラフISG1を生成する。
情報処理装置100は、生成済みグラフ内の2つのノード間の距離の分布に基づいて、追加される仮想ノードの数を決定してもよい。例えば、情報処理装置100は、生成済みグラフ内のノードの全ての対の間の距離を算出することによって、グラフ内のノードの距離分布を生成してもよい。そして、情報処理装置100は、生成されたノードの距離分布に基づいて、追加される仮想ノードの数を決定してもよい。例えば、情報処理装置100は、任意の2つノード間の平均距離を基準として使用することによって、追加される仮想ノードの数を決定してもよい。図2の例では、例えば、情報処理装置100は、処理対象のノードと他のノードとの間の距離が平均距離を上回る場合に、値「2」を、追加される仮想ノードの数として決定してもよい。また、情報処理装置100は、処理対象のノードと他のノードとの間の距離が平均距離を下回る場合に、値「1」を、追加される仮想ノードの数として決定してもよい。情報処理装置100は、「仮想ノードの付与前のエッジの長さ」を「平均距離」で除算した値を、仮想ノードの個数として算出してもよい。
〔2−3−3.エッジの付与〕
第3の段階では、情報処理装置100は、仮想ノードにエッジを付与するエッジ付与処理を行う。仮想ノードの追加の後に、情報処理装置100は、仮想ノードに対する近傍ノードと、この仮想ノードとをエッジによって接続することによって、新たなグラフを生成する。実ノードの場合と同様に、情報処理装置100は、各種公知のグラフ生成アルゴリズム(例えば、上述のANNGインデックスの生成アルゴリズム)を使用することによって、仮想ノードに対する近傍ノードと、この仮想ノードとをエッジによって接続することができる。これにより、情報処理装置100は、中間状態グラフから新たなグラフを生成することができる。
ANNGインデックスの生成アルゴリズムに関しては、情報処理装置100は、仮想ノードに対応する新たなオブジェクトを、探索対象のオブジェクトとして生成済みグラフに徐々に追加する。言い換えると、情報処理装置100は、生成済みグラフに、仮想ノードを逐次登録する。例えば、情報処理装置100は、処理対象の仮想ノードに対応する新たなオブジェクトを、データベースから取得する。そして、情報処理装置100は、部分的に生成されたANNGを使用したノードの検索を実行することによって、仮想ノードに対する近傍ノードを検索する。これにより、情報処理装置100は、検索された近傍ノードと、仮想ノードとをエッジによって接続することができる。上述のように、部分的に生成されたANNGを使用したノードの検索(例えば、k最近傍検索)は、図7を参照して以下で詳述される。なお、情報処理装置100は、仮想ノードが配置された元のエッジを削除してもよい。
図2の例では、情報処理装置100は、仮想ノードVN1、仮想ノードVN2、仮想ノードVN3、仮想ノードVN4、仮想ノードVN5および仮想ノードVN6に、エッジを付与する。このようにして、情報処理装置100は、中間状態グラフISG1からグラフG2を生成する。
〔2−4.例示的な実施形態の効果〕
上述のように、例示的な実施形態に係る情報処理装置100は、生成済みグラフ内のノードのうち検索されにくいノードを、処理対象のノードとして選択する。そして、情報処理装置100は、処理対象のノードが検索されやすくなるように、生成済みグラフに仮想ノードを追加する。これにより、情報処理装置100は、検索されにくいノードへの経路が発見される可能性を高めることができ、それによって、グラフの検索精度を向上させることができる。
以下、このようなグラフ生成処理を実現する情報処理装置100について詳細に説明する。
〔3.情報処理装置の構成〕
次に、図3を参照して、実施形態に係る情報処理装置100の構成例について説明する。図3は、実施形態に係る情報処理装置100の構成例を示す図である。図3に示すように、情報処理装置100は、通信部110と、記憶部120と、制御部130とを有する。なお、情報処理装置100は、情報処理装置100を利用する管理者等から各種操作を受け付ける入力部(例えば、キーボードやマウス等)や、各種情報を表示するための表示部(液晶ディスプレイ等)を有してもよい。
(通信部110)
通信部110は、例えば、NIC(Network Interface Card)等によって実現される。通信部110は、ネットワーク網と有線又は無線により接続され、ネットワーク網を介して、ユーザ装置10および情報提供装置200との間で情報の送受信を行う。
(記憶部120)
記憶部120は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。図3に示すように、記憶部120は、オブジェクト情報記憶部121と、グラフ情報記憶部122と、ツリー情報記憶部123と、パラメータ情報記憶部124とを有する。
図2を参照して上述したグラフ生成を可能にするために、記憶部120内の所定の記憶領域は、大容量のメモリとして実装され得る。加えてまたはあるいは、記憶部120内の所定の記憶領域は、SSD(Solid State Drive)として実装されてもよい。いくつかの実装形態では、オブジェクト(すなわち、オブジェクトデータ)が、このような所定の記憶領域(例えば、大量のメモリ)上に配置され得る。
(オブジェクト情報記憶部121)
図4は、実施形態に係るオブジェクト情報記憶部121の一例を示す図である。実施形態に係るオブジェクト情報記憶部121は、オブジェクトに関する各種情報を記憶する。例えば、オブジェクト情報記憶部121は、データセットごとにオブジェクトIDやベクトルデータを記憶する。図4に示すオブジェクト情報記憶部121には、「データセットID」、「オブジェクトID」、「ベクトルデータ」といった項目が含まれる。
「データセットID」は、データセットを識別するための識別情報を示す。「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。また、「ベクトルデータ」は、オブジェクトIDにより識別されるオブジェクトに対応するベクトルデータを示す。すなわち、図4の例では、オブジェクトを識別するオブジェクトIDに対して、オブジェクトに対応するベクトルデータが対応付けられて登録されている。
図4の例では、データセットID「DS1」により識別されるデータセット(データセットDS1)には、オブジェクトID「OB1」、「OB2」等により識別される複数のオブジェクト(対象)が含まれることを示す。オブジェクトID「OB1」により識別されるオブジェクト(オブジェクトOB1)は、「10,24,51,2...」の多次元のベクトル情報が対応付けられることを示す。また、オブジェクトID「OB2」により識別されるオブジェクト(オブジェクトOB2)は、「32,1,120,31...」の多次元のベクトル情報が対応付けられることを示す。
なお、オブジェクト情報記憶部121は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
オブジェクト情報記憶部121は、仮想ノードに対応するオブジェクトに関する各種情報を記憶することができる。この場合、オブジェクトは、実ノードフラグに関連付けられていてもよい。実ノードに対応するオブジェクトは、実ノードフラグ「1」に関連付けられていてもよい。仮想ノードに対応するオブジェクトは、実ノードフラグ「0」に関連付けられていてもよい。オブジェクト情報記憶部121は、実ノードに対応するオブジェクトと、仮想ノードに対応する新たなオブジェクトとを含むデータセットを記憶することができる。オブジェクト情報記憶部121は、後述する生成部135によって生成されたこのようなデータセットを、中間状態グラフとして記憶することができる。
(グラフ情報記憶部122)
図5は、実施形態に係るグラフ情報記憶部122の一例を示す図である。実施形態に係るグラフ情報記憶部122は、グラフに関する各種情報を記憶する。例えば、グラフ情報記憶部122は、検索処理等の情報処理に用いられるグラフ情報を記憶する。図5の例では、グラフ情報記憶部122は、近傍グラフデータを記憶する。図5に示すグラフ情報記憶部122は、「ノードID」、「オブジェクトID」、「エッジ情報」、および「実ノードフラグ」といった項目を有する。また、「エッジ情報」には、「エッジID」や「参照先」といった情報が含まれる。
「ノードID」は、グラフデータにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。
また、「エッジ情報」は、対応するノードに接続されるエッジに関する情報を示す。図5の例では、「エッジ情報」は、対応するノードに連結される無向エッジ(双方向エッジ)に関する情報を示す。また、「エッジID」は、ノード間を連結するエッジを識別するための識別情報を示す。また、「参照先」は、エッジにより連結された参照先(ノード)を示す情報を示す。すなわち、図5の例では、ノードを識別するノードIDに対して、そのノードに対応するオブジェクト(対象)を識別する情報やそのノードからのエッジが連結される参照先(ノード)が対応付けられて登録されている。
図5の例では、ノードID「N1」により識別されるノード(ノードN1)は、オブジェクトID「OB1」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN1からは、エッジID「E1」により識別されるエッジ(エッジE1)が、ノードID「N2」により識別されるノード(ノードN2)に連結されることを示す。すなわち、図5の例では、グラフ情報におけるノードN1からはエッジE1によりノードN2へ辿ることができることを示す。また、ノードN1からは、エッジID「E2」により識別されるエッジ(エッジE2)が、ノードID「N53」により識別されるノード(ノードN53)に連結されることを示す。すなわち、図5の例では、グラフ情報におけるノードN1からはエッジE2によりノードN53へ辿ることができることを示す。
また、図5の例では、ノードID「N2」により識別されるノード(ノードN2)は、オブジェクトID「OB2」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN2からは、エッジID「E1」により識別されるエッジ(エッジE1)が、ノードID「N1」により識別されるノード(ノードN1)に連結されることを示す。すなわち、図5の例では、グラフ情報におけるノードN2からはエッジE1によりノードN1へ辿ることができることを示す。
また、「実ノードフラグ」は、対応するノードが実ノードであるかを示す。図5の例では、ノードID「N1」により識別されるノード(ノードN1)は、実ノードである。一方、ノードID「VN1」により識別されるノード(ノードVN1)は、実ノードでない。すなわち、ノードID「VN1」により識別されるノード(ノードVN1)は、仮想ノードである。
なお、グラフ情報記憶部122は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、グラフ情報記憶部122は、各ノード(ベクトル)間を連結するエッジの長さが記憶されてもよい。すなわち、グラフ情報記憶部122は、各ノード(ベクトル)間の距離を示す情報が記憶されてもよい。グラフ情報記憶部122には、無向エッジにより連結されたグラフ情報に限らず、種々のグラフ情報が記憶されてもよい。グラフ情報記憶部122には、有向エッジにより連結されたグラフ情報が記憶されてもよい。
(ツリー情報記憶部123)
実施形態に係るツリー情報記憶部123は、ツリー型インデックス等のツリーに関する各種情報を記憶する。ツリー情報記憶部123は、VPツリー(Vantage Point Tree)等のツリー構造のツリー情報を記憶する。例えば、ツリー情報記憶部123には、「ルート階層」、「第1階層」、「第2階層」、「第3階層」等といった項目が含まれる。なお、「第1階層」〜「第3階層」に限らず、ツリーの階層数に応じて、「第4階層」、「第5階層」、「第6階層」等が含まれてもよい。
「ルート階層」は、ツリーを用いた起点ノードの決定の開始点となるルート(最上位)の階層を示す。「第1階層」は、ツリーの第1階層に属するノード(節点またはグラフ情報中のベクトル)を識別(特定)する情報が格納される。「第1階層」に格納されるノードは、ツリーの根(ルート)に直接結ばれる階層に対応するノードとなる。
「第2階層」は、ツリーの第2階層に属するノード(節点またはグラフ情報中のベクトル)を識別(特定)する情報が格納される。「第2階層」に格納されるノードは、第1階層のノードに結ばれる直下の階層に対応するノードとなる。「第3階層」は、ツリーの第3階層に属するノード(節点またはグラフ情報中のベクトル)を識別(特定)する情報が格納される。「第3階層」に格納されるノードは、第2階層のノードに結ばれる直下の階層に対応するノードとなる。
なお、ツリー情報記憶部123は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(パラメータ情報記憶部124)
実施形態に係るパラメータ情報記憶部124は、グラフのパラメータに関する各種情報を記憶する。例えば、パラメータ情報記憶部124は、グラフの生成に使用されるパラメータに関するパラメータ情報を記憶する。パラメータ情報は、グラフの生成に使用される所定の条件(例えば、各種閾値)を示すことができる。パラメータ情報記憶部124は、グラフの検索に使用されるパラメータに関するパラメータ情報を記憶してもよい。例えば、パラメータ情報記憶部124は、図7および図8を参照して後述する所定数ksを記憶してもよい。
(制御部130)
制御部130は、コントローラ(controller)であり、例えば、CPU(Central Processing Unit)、MPU(Micro Processing Unit)等のプロセッサによって、情報処理装置100内部の記憶装置に記憶されている各種プログラム(情報処理プログラムの一例に相当)がRAM等を作業領域として実行されることにより実現される。また、制御部130は、コントローラ(controller)であり、例えば、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)、GPGPU(General Purpose Graphic Processing Unit)等の集積回路により実現されてもよい。
制御部130は、図3に示すように、受信部131と、取得部132と、選択部133と、判定部134と、生成部135と、提供部136とを有し、以下に説明する情報処理の機能や作用を実現又は実行する。また、制御部130は、図2を参照して上述したグラフ生成処理を実現することができる。なお、制御部130の内部構成は、図3に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。例えば、生成部135は、生成部135以外の部に関して後述する情報処理の全部または一部を行ってもよい。
(受信部131)
受信部131は、情報検索のための処理を実行するのに使用される各種情報を受信することができる。例えば、受信部131は、オブジェクト情報、グラフ情報、ツリー情報およびパラメータ情報等の情報を、所定の情報処理装置(例えば、情報処理装置100に関係するエンティティ(例えば、特定のインターネット企業)の装置)から受信することができる。受信部131は、オブジェクト情報記憶部121に、受信されたオブジェクト情報を格納してもよい。また、受信部131は、受信されたグラフ情報(例えば、生成済みグラフのグラフ情報)を、グラフ情報記憶部122に格納してもよい。また、受信部131は、ツリー情報記憶部123に、受信されたツリー情報を格納してもよい。また、受信部131は、パラメータ情報記憶部124に、受信されたパラメータ情報を格納してもよい。
少なくとも1つの実施形態では、受信部131は、「検索に使用されるインデックスを生成するのに使用される情報」を受信することができる。検索に使用されるインデックスを生成するのに使用される情報は、例えば、オブジェクト情報、グラフ情報、パラメータ情報等である。
一例では、受信部131は、検索対象のデータの登録を、情報提供装置200から受信する。例えば、特徴量(例えば、上述のベクトルデータ)が、静止画像、動画像(ビデオ)、音声、文書(ドキュメント)等の検索対象のデータから、抽出される。抽出された特徴量は、検索対象のデータのID(例えば、上述のオブジェクトID)に関連付けられている。複数の検索対象のデータにそれぞれ対応する複数のIDが、上述のデータセットIDに関連付けられていてもよい。受信部131は、抽出された特徴量を、情報提供装置200から受信する。そして、受信部131は、受信された特徴量を、ベクトルで表現される「オブジェクト」として、オブジェクト情報記憶部121に格納する。例えば、検索対象のデータのID(例えば、上述のオブジェクトID)に関連付けられたオブジェクト(例えば、ベクトルデータ)が、オブジェクト情報記憶部121に格納される。このようにして、検索対象のデータが、情報処理装置100に登録される。図1を参照して上述した特定の例示においては、オブジェクトとして登録された特徴量が、オンラインショッピングのファッション商品の画像特徴量である。
少なくとも1つの実施形態では、受信部131は、「生成されたインデックスを使用した検索処理を実行するのに使用される情報」を受信することができる。生成されたインデックスを使用した検索処理を実行するのに使用される情報は、例えば、ツリー情報、パラメータ情報等である。
少なくとも1つの実施形態では、受信部131は、「検索クエリを含む検索要求」を受信することができる。
一例では、検索要求に含まれる検索クエリは、ベクトルで表現される「クエリオブジェクト」である。図1を参照して上述した特定の例示においては、クエリオブジェクトが、花柄浴衣の画像の画像特徴量である。
(取得部132)
取得部132は、情報検索のための処理を実行するのに使用される各種情報を取得することができる。取得部132は、記憶部120から各種情報を取得することができる。例えば、取得部132は、ノードに対応するオブジェクトを含むデータセット等のオブジェクト情報を、オブジェクト情報記憶部121から取得することができる。また、例えば、取得部132は、生成済みグラフ等のグラフ情報記憶部122から取得することができる。また、例えば、取得部132は、ツリー型インデックス等のツリー情報を、ツリー情報記憶部123から取得することができる。また、例えば、取得部132は、グラフの生成に使用されるパラメータ等のパラメータ情報を、パラメータ情報記憶部124から取得することができる。
取得部132は、複数の検索対象の各々に対応する複数のノードと、ノード間を連結するエッジとを含む第1グラフを取得することができる。
一例では、取得部132は、生成済みグラフを取得する。取得された生成済みグラフは、各種公知のグラフ生成アルゴリズムを使用して生成されたグラフであってもよい。図2を参照して上述したように、例えば、取得部132は、グラフ情報記憶部122から、生成済みグラフであるグラフG1を取得する。
(選択部133)
選択部133は、仮想ノード追加処理の処理対象となるノードを選択することができる。選択部133は、取得部132によって取得された生成済みグラフから処理対象となるノードを選択することができる。
選択部133は、検索対象に対応付けられてないノードである仮想ノードの追加処理の対象となる対象ノードを、複数のノードから選択することができる。例えば、選択部133は、連結されたエッジのうち長さが最も短い最短エッジの長さが所定値よりも大きいノードを対象ノードとして選択することができる。
一例では、選択部133は、生成済みグラフから処理対象となるノードを選択するノード選択処理を行うことができる。選択部133は、取得部132によって取得された生成済みグラフ内のノードから、処理対象のノードを選択する。
図2を参照して上述したように、例えば、選択部133は、生成済みグラフ内のノードのうち検索されにくいノードを、処理対象のノードとして選択する。検索されにくいノードは、他のどのノードからも離れているノードである。例えば、検索されにくいノードは、他のどのノードからも孤立しているノードである。オブジェクトのベクトル空間が高次元である場合に、ベクトル空間は、あるノードが他のどのノードからも孤立している状況を発生させることがある。
一例では、選択部133は、短いエッジに接続されていないノードを、処理対象のノードとして選択する。なぜなら、ノードが短いエッジに接続されていない場合に、このノードは、このノードの近くに他のノードがない孤立したノードである可能性が高いからである。例えば、ノードに付与されたエッジのうち最短のエッジの長さが閾値を満たす場合に、選択部133は、このノードを、処理対象のノードとして選択しない。一方、ノードに付与されたエッジのうち最短のエッジの長さが閾値を満たさない場合に、選択部133は、このノードを、処理対象のノードとして選択する。
別の例では、選択部133は、生成済みグラフ内のノードの全ての対の間の距離を算出する。あるノードと少なくとも1つの他のノードとの間の距離が処理対象のノードの選択に関する所定の条件を満たす場合に、選択部133は、このノードを、処理対象のノードとして選択する。処理対象のノードの選択に関する所定の条件は、例えば、「あるノードと少なくとも1つの他のノードとの間の距離のうち最短の距離が、閾値を満たさない」という条件であってもよい(すなわち、あるノードが、他のどのノードからも離れている)。
さらに別の例では、選択部133は、検索精度の評価のためのテストセットを使用することによって、検索結果から漏れたノードを特定する。例えば、テストセットは、インスタンスであるクエリベクトルと、クエリベクトルに関連付けられたラベルとを含む。ラベルは、クエリベクトルによって検索されるべきノードを示す。例えば、選択部133は、生成済みグラフを使用してクエリベクトルに対する近傍ノードをランダムに検索する。そして、選択部133は、クエリベクトルによって検索されなかったノードを特定する。選択部133は、検索結果から実際に漏れたノードを、処理対象のノードとして選択する。選択部133は、生成済みグラフのノードから、テストセットを生成してもよい。例えば、選択部133は、生成済みグラフのノードのうちの任意の2つ以上のノードを選択し、選択された任意の2つ以上のノードの中間点を、クエリベクトルとして算出してもよい。この場合、ラベルによって示されるノードは、選択された任意の2つ以上のノードのうちの少なくとも1つであってもよい。選択部133は、任意の2つ以上のノードを選択するのではなく、1つのノードの最近傍ノードから、複数の最近傍ノードを選択し、選択された最近傍ノードの中間点を、クエリベクトルとして算出してもよい。この場合、ラベルによって示されるノードは、この1つのノードであってもよい。
なお、上述の例示的な実施形態では、情報処理装置100は、生成済みグラフ内のノードのうち検索されにくいノードを、処理対象のノードとしているが、これに限定されるものではない。選択部133は、グラフ内のノードの全てのノードを、処理対象のノードとして選択してもよい。この場合、情報処理装置100の生成部135は、グラフ内のノードの全てのノードについて、仮想ノード追加処理を行う。
(判定部134)
判定部134は、取得部132によって取得されたグラフ内のノードやエッジが仮想ノードの追加に関する条件を満たすかを判定することができる。
判定部134は、第1グラフに含まれる複数のノードであって、複数の検索対象の各々に対応する複数のノードのうちの少なくとも2つのノードが第1の所定の条件を満たすか、または、第1グラフに含まれるノード間を連結するエッジが第2の所定の条件を満たすかを判定することができる。
図2を参照して上述したように、例えば、判定部134は、処理対象のノードに付与されたエッジの長さが仮想ノードの追加に関する所定の条件を満たすかを判定する。例えば、仮想ノードの追加に関する所定の条件は、「エッジの長さが第1の閾値を超える」という第1の条件、「エッジの長さが第1の閾値より大きい第2の閾値を超える」という第2の条件等の条件であってもよい。
(生成部135)
生成部135は、検索に使用されるインデックスを生成することができる。図1および図2を参照して上述したように、生成部135は、類似画像検索を含む様々な情報検索に利用可能なインデックスとして、グラフ(すなわち、近傍グラフ)を生成することができる。例えば、生成部135は、グラフ型の検索インデックスとして、近傍グラフを生成することができる。
少なくとも1つの実施形態では、生成部135は、複数の検索対象の各々に対応する複数のノードが含まれる第1グラフにおける複数のノードの配置態様に基づいて、検索対象に対応付けられていないノードである仮想ノードを第1グラフに追加することにより、この仮想ノードを含む第2グラフを生成する。
少なくとも1つの実施形態では、生成部135は、第1グラフに含まれる複数のノードであって、複数の検索対象の各々に対応する複数のノードのうちの少なくとも2つのノードが第1の所定の条件を満たす、または、第1グラフに含まれるノード間を連結するエッジが第2の所定の条件を満たす場合に、検索対象に対応付けられていないノードである仮想ノードを第1グラフに追加することにより、この仮想ノードを含む第2グラフを生成する。
少なくとも1つの実施形態では、生成部135は、仮想ノードの追加処理の対象となる対象ノードと他のノードとが所定の条件を満たす場合、仮想ノードを追加することにより、仮想ノードを含む第2グラフを生成する。例えば、生成部135は、対象ノードと他のノードを連結するエッジが所定の条件を満たす場合、仮想ノードを追加することにより、第2グラフを生成する。例えば、生成部135は、第1グラフにおける対象ノードと他のノードとの間に仮想ノードを追加することにより、第2グラフを生成する。また、例えば、生成部135は、対象ノードと他のノードを連結するエッジの長さが所定の閾値以上である場合、対象ノードと他のノードとの間に仮想ノードを追加することにより、第2グラフを生成する。
少なくとも1つの実施形態では、生成部135は、連結されたエッジのうち長さが最も短い最短エッジの長さが所定値よりも大きいノードを対象ノードとして、第2グラフを生成する。
少なくとも1つの実施形態では、生成部135は、対象ノードと他のノードとの間に複数の仮想ノードを追加することにより、第2グラフを生成する。例えば、生成部135は、対象ノードと他のノードとを連結するエッジの長さに応じた数の仮想ノードを追加することにより、第2グラフを生成する。また、例えば、生成部135は、対象ノードと他のノードとを連結するエッジの長さが長い程、多い数の複数の仮想ノードを追加することにより、第2グラフを生成する。
少なくとも1つの実施形態では、生成部135は、対象ノードと他のノードを連結するエッジを削除することにより、第2グラフを生成する。
少なくとも1つの実施形態では、生成部135は、対象ノードと他のノードを連結するエッジ上に仮想ノードを追加することにより、第2グラフを生成する。例えば、生成部135は、対象ノードと他のノードを連結するエッジの中点に仮想ノードを追加することにより、第2グラフを生成する。
少なくとも1つの実施形態では、生成部135は、第2グラフに含まれるノードのうち、仮想ノードの近傍に位置するノードである近傍ノードと、仮想ノードとを連結するエッジを第2グラフに追加する。
図2を参照して上述したように、生成部135は、取得部132によって取得された生成済みグラフに仮想ノードを追加する仮想ノード追加処理を行うことができる。処理対象ノードの選択の後に、生成部135は、処理対象のノード(すなわち、検索結果から漏れる傾向があるノード)が検索されやすくなるように、生成済みグラフに仮想ノードを追加することができる。
生成部135は、新たなオブジェクト(例えば、ベクトルデータ)を仮想ノードとして生成することによって、生成済みグラフに仮想ノードを追加することができる。したがって、仮想ノードを追加することは、ベクトルデータで表現される新たなオブジェクトを生成することを包含し得る。いくつかの実装形態では、生成部135は、生成済みグラフに仮想ノードを追加することによって、中間状態グラフを生成することができる。生成部135は、仮想ノードをグラフに追加することによって、検索漏れを防止することができ、それによって、グラフの検索精度を向上させることができる。
生成部135が仮想ノードを追加する場合に、生成部135は、実ノード(すなわち、登録された検索対象のデータに関連付けられているノード)と仮想ノード(すなわち、登録された検索対象のデータに関連付けられて「いない」ノード)とを区別するために、追加される仮想ノードに、フラグを付与する。例えば、生成部135は、実ノードフラグ「0」を、仮想ノードに付与する。生成部135は、実ノードフラグ「1」を、実ノードに付与してもよい。
いくつかの実施形態では、生成部135は、「処理対象のノードと他のノードとの間の距離」に基づいて、仮想ノードを追加することができる。例えば、生成部135は、処理対象のノードと、処理対象のノードに対する近傍ノードとの間の距離に基づいて、処理対象のノードの周りに仮想ノードを追加することができる。
図2を参照して上述したように、例えば、生成部135は、「処理対象のノードに付与されたエッジの長さ」に基づいて、仮想ノードを追加する。例えば、生成部135は、選択部133によって選択された処理対象のノードごとに、処理対象のノードに付与されたエッジの長さに応じた数のオブジェクトを、仮想ノードとして生成する。生成された仮想ノードは、処理対象のノードに付与されたエッジ上に等間隔に配置されてもよい。あるいは、生成された仮想ノードは、処理対象のノードに寄せて配置されてもよい。処理対象のノードに付与されたエッジが長いほど、エッジ上に配置される仮想ノードの数は多くてもよい。
図2を参照して上述したように、例えば、判定部134が処理対象のノードに付与されたエッジの長さが仮想ノードの追加に関する所定の条件を満たすと判定した場合に、生成部135は、仮想ノードを追加する。例えば、判定部134がエッジの長さが第1の条件を満たすと判定した場合に、生成部135は、1個の仮想ノードを追加してもよい。判定部134がエッジの長さが第2の条件を満たすと判定した場合に、生成部135は、2個の仮想ノードを追加してもよい。生成部135は、「仮想ノードの付与前のエッジの長さ」を「仮想ノードの付与後のエッジの最大長」で除算した値を、仮想ノードの個数として算出してもよい。
生成部135は、生成済みグラフ内の2つのノード間の距離の分布に基づいて、追加される仮想ノードの数を決定してもよい。例えば、生成部135は、生成済みグラフ内のノードの全ての対の間の距離を算出することによって、グラフ内のノードの距離分布を生成してもよい。そして、生成部135は、生成されたノードの距離分布に基づいて、追加される仮想ノードの数を決定してもよい。例えば、生成部135は、任意の2つノード間の平均距離を基準として使用することによって、追加される仮想ノードの数を決定してもよい。図2を参照して上述したように、例えば、生成部135は、処理対象のノードと他のノードとの間の距離が平均距離を上回る場合に、値「2」を、追加される仮想ノードの数として決定してもよい。また、生成部135は、処理対象のノードと他のノードとの間の距離が平均距離を下回る場合に、値「1」を、追加される仮想ノードの数として決定してもよい。生成部135は、「仮想ノードの付与前のエッジの長さ」を「平均距離」で除算した値を、仮想ノードの個数として算出してもよい。
図2を参照して上述したように、生成部135は、仮想ノードにエッジを付与するエッジ付与処理を行うことができる。仮想ノードの追加の後に、生成部135は、仮想ノードに対する近傍ノードと、この仮想ノードとをエッジによって接続することによって、新たなグラフを生成することができる。実ノードの場合と同様に、生成部135は、各種公知のグラフ生成アルゴリズム(例えば、上述のANNGインデックスの生成アルゴリズム)を使用することによって、仮想ノードに対する近傍ノードと、この仮想ノードとをエッジによって接続することができる。これにより、生成部135は、中間状態グラフから新たなグラフを生成することができる。
ANNGインデックスの生成アルゴリズムに関しては、一例では、生成部135は、仮想ノードに対応する新たなオブジェクトを、探索対象のオブジェクトとして生成済みグラフに徐々に追加する。言い換えると、生成部135は、生成済みグラフに、仮想ノードを逐次登録する。例えば、生成部135は、処理対象の仮想ノードに対応する新たなオブジェクトを、データベースから取得する。そして、生成部135は、部分的に生成されたANNGを使用したノードの検索を実行することによって、仮想ノードに対する近傍ノードを検索する。これにより、生成部135は、検索された近傍ノードと、仮想ノードとをエッジによって接続することができる。なお、生成部135は、仮想ノードが配置された元のエッジを削除してもよい。
生成部135は、各種公知のグラフ生成アルゴリズム(すなわち、インデックスを構築するためのアルゴリズム)を使用することによって、ベクトルデータを含むデータセットからグラフを生成することができる。各種公知のグラフ生成アルゴリズムは、例えば、ANNGインデックスの生成アルゴリズムや、ONNGインデックスの生成アルゴリズム等である(例えば、M. Iwasaki and D. Miyazaki,“Optimization of Indexing Based on k-Nearest Neighbor Graph for Proximity”,arXiv:cs.DB/1810.07355を参照)。なお、「グラフ生成アルゴリズム使用することによって、ベクトルデータを含むデータセットから、グラフを生成すること」は、「与えられたベクトルデータのインデックスを生成すること」を包含する。
いくつかの実装形態では、生成部135は、上述したような各種公知のグラフ生成アルゴリズムを使用することによって、ベクトルデータを含むデータセットから、仮想ノードを有さないグラフを生成することができる。この場合、ベクトルデータは、登録されたオブジェクトである。仮想ノードを有さないグラフの一例は、図2を参照して上述したグラフG1である。
いくつかの実装形態では、生成部135は、各種公知のグラフ生成アルゴリズムを使用することによって、ベクトルデータを含むデータセットから、仮想ノードを有するグラフを生成することができる。この場合、ベクトルデータは、検索対象となるオブジェクトであってもよいし、仮想ノードであってもよい。すなわち、ベクトルデータが検索対象となるオブジェクトであるかにかかわらず、生成部135は、与えられたベクトルデータのグラフのインデックスを生成することができる。言い換えると、生成部135は、実ノードと仮想ノードとを区別することなく、ベクトルデータを、ベクトル空間にノードとして追加したり、追加されたノードにエッジを付与したりすることができる。このように、生成部135は、各種公知のグラフ生成アルゴリズムを使用することによって、オブジェクトの空間中の仮想ノードに、エッジを付与することができる。
エッジの付与に関しては、検索対象となるオブジェクトおよび仮想ノードを含むデータセットが与えられている場合に、例えば、生成部135は、データセットに含まれるベクトルデータを、実ノードまたは仮想ノードとして、ベクトル空間にランダムに1つずつ追加することができる。また、生成部135は、グラフの生成の途中におけるインデックスを使用することによって、k最近傍検索を実行することができる。例えば、生成部135は、検索されたk個の近傍ノードと、追加されたノードとを、エッジによって接続することができる。生成部135は、k最近傍検索およびエッジの付与の一連の処理ステップを繰り返すことによって、グラフ(例えば、上述のANNGインデックス)を生成することができる。
ノードに追加に関しては、生成部135は、生成済みグラフのインデックス(すなわち、生成済みインデックス)を使用することによって、k最近傍検索を実行してもよい。そして、生成部135は、検索されたk個の近傍ノードと、追加された仮想ノードとを、エッジによって接続してもよい。あるいは、生成部135は、生成済みグラフのインデックスを使用しなくてもよい。この場合、生成部135は、データセットに含まれるベクトルデータを、実ノードまたは仮想ノードとして、ノードのないベクトル空間に、ランダムに1つずつ追加してもよい。そして、生成部135は、新たなグラフの生成の途中におけるインデックスを使用することによって、k最近傍検索を実行してもよい。
いくつかの実装形態では、生成部135は、追加される仮想ノードであるベクトルデータを、オブジェクト情報記憶部121に格納してもよい。例えば、生成部135は、追加される仮想ノードを、オブジェクト情報記憶部121に、新たなオブジェクトとして格納してもよい。すなわち、生成部135は、登録されたオブジェクトに対応しない仮想ノードを、新たなオブジェクトとして登録してもよい。
生成部135は、グラフ情報記憶部122から、生成済みグラフ(すなわち、生成済みインデックス)を取得してもよい。さらに、生成部135は、追加される仮想ノードであるベクトルデータを、オブジェクト情報記憶部121から、オブジェクトとして取得してもよい。そして、生成部135は、取得されたオブジェクトを、生成済みグラフのベクトル空間にランダムに1つずつ追加してもよい。上述のように、生成部135は、グラフの生成の途中におけるインデックスを使用することによって、k最近傍検索を実行することができる。この場合、生成部135は、検索されたk個の近傍ノードと、オブジェクトとを、エッジによって接続することができる。このようにして、生成部135は、図2を参照して上述したグラフG2を生成することができる。したがって、仮想ノードが生成済みグラフのインデックスに新たなベクトルデータとして追加された場合に、生成部135は、各種公知のグラフ生成アルゴリズムを使用することによって、仮想ノードを含む新たなグラフのインデックスを生成することができる。
いくつかの実装形態では、生成部135は、入出力エッジ数を調整するのに使用される調整パラメータに基づいて、グラフ内のノードに付与されたエッジを調整してもよい。例えば、生成部135は、グラフ情報記憶部122から、生成済みグラフ(すなわち、生成済みインデックス)を取得する。また、生成部135は、パラメータ情報記憶部124から、調整パラメータを取得する。そして、生成部135は、取得された調整パラメータに基づいて、入力エッジ数および出力エッジ数が調整されたグラフ(例えば、上述のONNGインデックス)を生成することができる。
(提供部136)
提供部136は、生成部135によって生成されたインデックスを使用した検索処理を実行することができる。また、提供部136は、検索結果を他の装置に提供することができる。例えば、各種情報の検索要求を情報提供装置200から受信することに応じて、提供部136は、生成部135によって生成されたグラフを使用して各種情報を検索することができる。そして、提供部136は、情報提供装置200に検索結果を提供することができる。
図1を参照して上述した特定の例示においては、提供部136は、情報提供装置200から受信された検索クエリに応じて、オンラインショッピングのファッション商品が画像特徴量によって表されるファッション商品検索用のインデックスを検索する。この例では、各種情報は、「クエリ画像中に映る花柄浴衣に類似する浴衣」の商品情報である。検索結果は、例えば、「クエリ画像中に映る花柄浴衣に類似する浴衣」に関連付けられた商品IDである。
一例では、提供部136は、情報提供装置200からクエリオブジェクトを受信することに応じて、登録されたオブジェクトのうちクエリオブジェクトに最も近いオブジェクトを探索する。オブジェクトと他のオブジェクトとの間の距離は、距離関数として表現される。距離関数の例は、L1距離、ユークリッド距離(すなわち、L2距離)、コサイン類似度、角度(すなわち、コサイン類似度の逆三角関数)を含む。図2を参照して上述したように、一般的には、オブジェクトと他のオブジェクトとの間の距離が小さい場合に、オブジェクトと他のオブジェクトとの間の類似性が高い。
上記の距離関数は、ユークリッド距離やコサイン類似度以外の様々なメトリックであってもよい。メトリックは、どのようにベクトルデータと他のベクトルデータとの距離を算出するかを定義する。ベクトルデータがバイナリデータである場合に、距離関数は、ハミング距離等のメトリックであってもよい。
一例では、提供部136は、生成部135によって生成されたグラフを使用することによって、クエリオブジェクトに最も近いオブジェクトを近似的に探索することができる。例えば、クエリオブジェクトが受信部131によって受け付けられた場合に、提供部136は、グラフ内のノードを巡ることによって、クエリオブジェクトに対する近傍ノードを探索する。
グラフの探索の例に関しては、はじめに、提供部136は、探索起点を選択することができる。提供部136は、ツリー情報記憶部123に記憶されたツリー型インデックスを使用することによって、探索起点を選択することができる。なお、探索起点は、任意のノードであってもよい。提供部136は、ツリー型インデックスを用いずに、任意のノードを、探索起点として選択してもよい。次いで、提供部136は、探索起点から、探索起点のノードにエッジによって接続されたノードのうちクエリオブジェクトに最も近いノードに、探索点を移動させることができる。このように、提供部136は、クエリオブジェクトの方向に、探索点を貪欲に移動させることができる。提供部136は、このような移動を繰り返すことによって、クエリオブジェクトに対する近傍ノードを探索することができる。
実ノードフラグが仮想ノードに付与されているため、提供部136は、仮想ノードが検索結果に含まれないように、仮想ノードを含むグラフをたどることができる。提供部136は、各種公知の検索アルゴリズム(例えば、k最近傍検索)を使用して、クエリオブジェクトに対する近傍ノードを検索することができる。提供部136が仮想ノードを含むグラフを探索する場合に、提供部136は、ノードに付与された実ノードフラグに基づいて、ノードが実ノードであるかを判定することができる。ノードが仮想ノードである場合に、提供部136は、検索結果からこのノードを除外することができる。
提供部136は、各種公知の検索アルゴリズム(例えば、k最近傍検索)を使用して、グラフを探索することができる。提供部136は、グラフ情報記憶部122から、グラフ(すなわち、インデックス)を取得することができる。提供部136が仮想ノードを有するグラフを探索する場合に、提供部136は、ノードに付与された実ノードフラグに基づいて、ノードが実ノードであるかを判定する。ノードが仮想ノードである場合に、提供部136は、検索結果からこのノードを除外する。仮想ノードを有するグラフデータを使用した検索処理は、図8を参照して以下で詳述される。
〔4.グラフ生成処理のフロー〕
次に、図6を参照して、実施形態に係る情報処理装置100(例えば、生成部135)によるグラフ生成処理の手順について説明する。
図6は、実施形態に係る情報処理装置100によって実行される、グラフを生成するための処理手順を示すフローチャートである。
図6に示すように、はじめに、情報処理装置100の取得部132は、複数の検索対象の各々に対応する複数のノードと、ノード間を連結するエッジとを含む第1グラフを取得する(ステップS101)。
次いで、情報処理装置100の選択部133は、検索対象に対応付けられてないノードである仮想ノードの追加処理の対象となる対象ノードを、複数のノードから選択する(ステップS102)。例えば、選択部133は、連結されたエッジのうち長さが最も短い最短エッジの長さが所定値よりも大きいノードを対象ノードとして選択することができる。
次いで、情報処理装置100の判定部134は、選択部133によって選択された対象ノードと他のノードとが所定の条件を満たすかを判定する(ステップS103)。一例として、所定の条件は、「対象ノードを他のノードに接続するエッジの長さが閾値を超える」という条件であってもよい。別の例として、所定の条件は、「対象ノードと他のノードとの間の距離が閾値を超える」という条件であってもよい。
判定部134が選択部133によって選択された対象ノードと他のノードとの間の距離が所定の条件を満たすと判定した場合に(ステップS103:Yes)、情報処理装置100の生成部135は、検索対象に対応付けられていないノードである仮想ノードを第1グラフに追加することにより、この仮想ノードを含む第2グラフを生成する(ステップS104)。判定部134が選択部134によって選択された対象ノードと他のノードとの間の距離が所定の条件を満たさないと判定した場合に(ステップS103:No)、生成部135は、検索対象に対応付けられていないノードである仮想ノードを第1グラフに追加しない(ステップS105)。
なお、情報処理装置100は、選択された全ての対象ノードに対して、ステップS103の処理を実行することができる。例えば、ステップS102において情報処理装置100が複数の対象ノードを選択した場合に、ステップS103の処理が全ての対象ノードに対して実行されるまで、情報処理装置100は、対象ノードごとに、ステップS103の処理を繰り返すことができ、そして、対象ノードごとに、ステップS104またはステップS105の処理を繰り返すことができる。このように、情報処理装置100は、対象ノードごとに追加された仮想ノードを含む新たなグラフを生成するように、ステップS103の処理を繰り返すことができる。
いくつかの実装形態では、情報処理装置100は、任意の時点でステップS102およびS103の処理を繰り返すことができる。例えば、ステップS102において情報処理装置100が1つの対象ノードを選択した場合に、情報処理装置100は、この1つの対象ノードに対して、ステップS103の処理を実行することができる。ステップS103の処理がこの1つの対象ノードに対して実行された後に、情報処理装置100は、この1つの対象ノード以外の対象ノードを新たに選択することができ、そして、新たに選択された対象ノードに対して、ステップS103の処理を実行することができる。
〔5.ノード検索処理のフロー〕
次に、図7を参照して、実施形態に係る情報処理装置100(例えば、生成部135)によるノード検索処理の手順について説明する。
図7は、実施形態に係る情報処理装置100によって実行される、グラフを使用してノードを検索するための処理手順を示すフローチャートである。より具体的には、図7は、グラフデータを用いたノード検索処理の一例を示すフローチャートである。以下でいうオブジェクトは、ノードと読み替えてもよい。なお、情報処理装置100によるグラフデータを用いたノードの検索は下記に限らず、種々の手順により行われてもよい。
ここでは、近傍集合N(G,y)は、ノードyに付与されているエッジにより関連付けられている近傍のオブジェクトの集合である。例えば、近傍集合N(G,y)は、ノードyとの間にエッジが連結されたオブジェクト(ノード)の集合である。また、グラフのノード間が有向エッジで連結される場合、近傍集合N(G,y)は、ノードyからの出力エッジが連結されたオブジェクト(ノード)の集合である。「G」は、所定のグラフデータ(例えば、グラフG1、グラフG2)であってもよい。例えば、情報処理装置100は、k近傍検索処理を実行する。
例えば、情報処理装置100は、超球の半径rを∞(無限大)に設定し(ステップS201)、既存のオブジェクト集合から集合Sを抽出する(ステップS202)。例えば、情報処理装置100は、起点ノードとして決定(選択)されたオブジェクト(ノード)を集合Sとして抽出してもよい。また、例えば、超球とは、検索範囲を示す仮想的な球である。なお、ステップS202において抽出された集合Sに含まれるオブジェクト(ノード)は、検索結果(抽出候補)の集合Rの初期集合にも含められる。また、ステップS202において抽出された集合Sに含まれるオブジェクト(ノード)は、集合Cに含められてもよい。集合Cは、重複検索を回避するために便宜上設けられるものであり、処理開始時には空集合に設定されてもよい。
次に、情報処理装置100は、集合Sに含まれるオブジェクトの中で、検索クエリオブジェクトをyとするとオブジェクトyとの距離が最も短いオブジェクトを抽出し、オブジェクトsとする(ステップS203)。図2および図3を参照して上述したように、例えば、検索クエリオブジェクトは、追加された仮想ノードに対応するオブジェクトである。次に、情報処理装置100は、オブジェクトsを集合Sから除外する(ステップS204)。
次に、情報処理装置100は、オブジェクトsとオブジェクトyとの距離d(s,y)がr(1+ε)を超えるか否かを判定する(ステップS205)。ここで、εは拡張要素であり、r(1+ε)は、探索範囲(この範囲内のノードのみを探索する。検索範囲よりも大きくすることで精度を高めることができる)の半径を示す値である。オブジェクトsとオブジェクトyとの距離d(s,y)がr(1+ε)を超える場合(ステップS205:Yes)、情報処理装置100は、集合Rをオブジェクトyの近傍集合として出力し(ステップS206)、処理を終了する。図2および図3を参照して上述したように、例えば、近傍集合は、仮想ノードに対する近傍ノードの集合である。
オブジェクトsと検索クエリオブジェクトyとの距離d(s,y)がr(1+ε)を超えない場合(ステップS205:No)、情報処理装置100は、オブジェクトsの近傍集合N(G,s)の要素であるオブジェクトの中から集合Cに含まれないオブジェクトを、所定の基準に基づいて一つ選択し、選択したオブジェクトuを、集合Cに格納する(ステップS207)。
次に、情報処理装置100は、オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下であるか否かを判定する(ステップS208)。オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下である場合(ステップS208:Yes)、情報処理装置100は、オブジェクトuを集合Sに追加する(ステップS209)。また、オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下ではない場合(ステップS208:No)、情報処理装置100は、ステップS210の判定(処理)を行う。
次に、情報処理装置100は、オブジェクトuとオブジェクトyとの距離d(u,y)がr以下であるか否かを判定する(ステップS210)。オブジェクトuとオブジェクトyとの距離d(u,y)がrを超える場合、情報処理装置100は、ステップS217の判定(処理)を行う。また、オブジェクトuとオブジェクトyとの距離d(u,y)がr以下ではない場合(ステップS210:No)、情報処理装置100は、ステップS216の判定(処理)を行う。
オブジェクトuとオブジェクトyとの距離d(u,y)がr以下である場合(ステップS210:Yes)、情報処理装置100は、オブジェクトuを集合Rに追加する(ステップS211)。そして、情報処理装置100は、集合Rに含まれるオブジェクト数がksを超えるか否かを判定する(ステップS212)。所定数ksは、任意に定められる自然数である。例えば、ksは、検索における抽出数を示し、「3」や「20」や「100」等の任意の値であってもよい。集合Rに含まれるオブジェクト数がksを超えない場合(ステップS212:No)、情報処理装置100は、ステップS214の判定(処理)を行う。
集合Rに含まれるオブジェクト数がksを超える場合(ステップS212:Yes)、情報処理装置100は、集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長い(遠い)オブジェクトを、集合Rから除外する(ステップS213)。
次に、情報処理装置100は、集合Rに含まれるオブジェクト数がksと一致するか否かを判定する(ステップS214)。集合Rに含まれるオブジェクト数がksと一致しない場合(ステップS214:No)、情報処理装置100は、ステップS216の判定(処理)を行う。また、集合Rに含まれるオブジェクト数がksと一致する場合(ステップS214:Yes)、情報処理装置100は、集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長い(遠い)オブジェクトと、オブジェクトyとの距離を、新たなrに設定する(ステップS215)。
そして、情報処理装置100は、オブジェクトsの近傍集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択したか否かを判定する(ステップS216)。オブジェクトsの近傍集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択していない場合(ステップS216:No)、情報処理装置100は、ステップS207に戻って処理を繰り返す。なお、情報処理装置100は、オブジェクトsの近傍集合N(G,s)の要素であるオブジェクトから全てを選択する場合に限らず、所定の閾値を設定し、その閾値に対応する個数までオブジェクトを選択してもよい。
オブジェクトsの近傍集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択した場合(ステップS216:Yes)、情報処理装置100は、集合Sが空集合であるか否かを判定する(ステップS217)。集合Sが空集合でない場合(ステップS218:No)、情報処理装置100は、ステップS203に戻って処理を繰り返す。また、集合Sが空集合である場合(ステップS217:Yes)、情報処理装置100は、集合Rを出力し、処理を終了する(ステップS218)。例えば、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクト(ノード)を対象ノード(入力オブジェクトy)に対応する近傍ノードとして選択してもよい。例えば、情報処理装置100は、集合Rに含まれるオブジェクト(ノード)を検索クエリ(入力オブジェクトy)に対応する検索結果として、検索を行ったユーザ装置10等へ提供してもよい。
〔6.実ノード検索処理のフロー〕
次に、図8を参照して、実施形態に係る情報処理装置100(例えば、提供部136)による実ノード検索処理の手順について説明する。
図8は、実施形態に係る情報処理装置100によって実行される、仮想ノードを含むグラフを使用して実ノードを検索するための処理手順を示すフローチャートである。より具体的には、図8は、仮想ノードを有するグラフデータを用いた実ノード検索処理の一例を示すフローチャートである。以下でいうオブジェクトは、ノードと読み替えてもよい。なお、情報処理装置100による仮想ノードを有するグラフデータを用いた実ノードの検索は下記に限らず、種々の手順により行われてもよい。
ここでは、近傍集合N(G,y)は、ノードyに付与されているエッジにより関連付けられている近傍のオブジェクトの集合である。例えば、近傍集合N(G,y)は、ノードyとの間にエッジが連結されたオブジェクト(ノード)の集合である。また、グラフのノード間が有向エッジで連結される場合、近傍集合N(G,y)は、ノードyからの出力エッジが連結されたオブジェクト(ノード)の集合である。「G」は、所定のグラフデータ(例えば、グラフG1、グラフG2)であってもよい。例えば、情報処理装置100は、k近傍検索処理を実行する。
例えば、情報処理装置100は、超球の半径rを∞(無限大)に設定し(ステップS301)、既存のオブジェクト集合から集合Sを抽出する(ステップS302)。例えば、情報処理装置100は、起点ノードとして決定(選択)されたオブジェクト(ノード)を集合Sとして抽出してもよい。また、例えば、超球とは、検索範囲を示す仮想的な球である。なお、ステップS302において抽出された集合Sに含まれるオブジェクト(ノード)は、検索結果(抽出候補)の集合Rの初期集合にも含められる。また、ステップS302において抽出された集合Sに含まれるオブジェクト(ノード)は、集合Cに含められてもよい。集合Cは、重複検索を回避するために便宜上設けられるものであり、処理開始時には空集合に設定されてもよい。
次に、情報処理装置100は、集合Sに含まれるオブジェクトの中で、検索クエリオブジェクトをyとするとオブジェクトyとの距離が最も短いオブジェクトを抽出し、オブジェクトsとする(ステップS303)。図1を参照して上述した特定の例示においては、検索クエリオブジェクトは、花柄浴衣の画像の画像特徴量である。次に、情報処理装置100は、オブジェクトsを集合Sから除外する(ステップS304)。
次に、情報処理装置100は、オブジェクトsとオブジェクトyとの距離d(s,y)がr(1+ε)を超えるか否かを判定する(ステップS305)。ここで、εは拡張要素であり、r(1+ε)は、探索範囲(この範囲内のノードのみを探索する。検索範囲よりも大きくすることで精度を高めることができる)の半径を示す値である。オブジェクトsとオブジェクトyとの距離d(s,y)がr(1+ε)を超える場合(ステップS305:Yes)、情報処理装置100は、集合Rをオブジェクトyの近傍集合として出力し(ステップS306)、処理を終了する。図1を参照して上述した特定の例示においては、近傍集合は、画像に描写された花柄浴衣と見た目が似ているファッション商品に対応するノードの集合である。
オブジェクトsと検索クエリオブジェクトyとの距離d(s,y)がr(1+ε)を超えない場合(ステップS305:No)、情報処理装置100は、オブジェクトsの近傍集合N(G,s)の要素であるオブジェクトの中から集合Cに含まれないオブジェクトを、所定の基準に基づいて一つ選択し、選択したオブジェクトuを、集合Cに格納する(ステップS307)。
次に、情報処理装置100は、オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下であるか否かを判定する(ステップS308)。オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下である場合(ステップS308:Yes)、情報処理装置100は、オブジェクトuを集合Sに追加する(ステップS309)。また、オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下ではない場合(ステップS308:No)、情報処理装置100は、ステップS310の判定(処理)を行う。
次に、情報処理装置100は、オブジェクトuが実ノード(すなわち、オブジェクトuが仮想ノードでない)であるか否かを判定する(ステップS310)。オブジェクトuが実ノードではない場合(ステップS310:No)、情報処理装置100は、ステップS317の判定(処理)を行う。
オブジェクトuが実ノードである場合(ステップS310:Yes)、情報処理装置100は、オブジェクトuとオブジェクトyとの距離d(u,y)がr以下であるか否かを判定する(ステップS311)。オブジェクトuとオブジェクトyとの距離d(u,y)がrを超える場合、情報処理装置100は、ステップS317の判定(処理)を行う。また、オブジェクトuとオブジェクトyとの距離d(u,y)がr以下ではない場合(ステップS311:No)、情報処理装置100は、ステップS317の判定(処理)を行う。
オブジェクトuとオブジェクトyとの距離d(u,y)がr以下である場合(ステップS311:Yes)、情報処理装置100は、オブジェクトuを集合Rに追加する(ステップS312)。そして、情報処理装置100は、集合Rに含まれるオブジェクト数がksを超えるか否かを判定する(ステップS313)。所定数ksは、任意に定められる自然数である。例えば、ksは、検索における抽出数を示し、「3」や「20」や「100」等の任意の値であってもよい。集合Rに含まれるオブジェクト数がksを超えない場合(ステップS313:No)、情報処理装置100は、ステップS315の判定(処理)を行う。
集合Rに含まれるオブジェクト数がksを超える場合(ステップS313:Yes)、情報処理装置100は、集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長い(遠い)オブジェクトを、集合Rから除外する(ステップS314)。
次に、情報処理装置100は、集合Rに含まれるオブジェクト数がksと一致するか否かを判定する(ステップS315)。集合Rに含まれるオブジェクト数がksと一致しない場合(ステップS315:No)、情報処理装置100は、ステップS317の判定(処理)を行う。また、集合Rに含まれるオブジェクト数がksと一致する場合(ステップS315:Yes)、情報処理装置100は、集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長い(遠い)オブジェクトと、オブジェクトyとの距離を、新たなrに設定する(ステップS316)。
そして、情報処理装置100は、オブジェクトsの近傍集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択したか否かを判定する(ステップS317)。オブジェクトsの近傍集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択していない場合(ステップS317:No)、情報処理装置100は、ステップS307に戻って処理を繰り返す。なお、情報処理装置100は、オブジェクトsの近傍集合N(G,s)の要素であるオブジェクトから全てを選択する場合に限らず、所定の閾値を設定し、その閾値に対応する個数までオブジェクトを選択してもよい。
オブジェクトsの近傍集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択した場合(ステップS317:Yes)、情報処理装置100は、集合Sが空集合であるか否かを判定する(ステップS318)。集合Sが空集合でない場合(ステップS318:No)、情報処理装置100は、ステップS303に戻って処理を繰り返す。また、集合Sが空集合である場合(ステップS318:Yes)、情報処理装置100は、集合Rを出力し、処理を終了する(ステップS319)。例えば、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクト(ノード)を対象ノード(入力オブジェクトy)に対応する近傍ノードとして選択してもよい。例えば、情報処理装置100は、集合Rに含まれるオブジェクト(ノード)を検索クエリ(入力オブジェクトy)に対応する検索結果として、検索を行ったユーザ装置10等へ提供してもよい。
〔7.他の実施形態〕
上述の実施形態に係る情報処理装置100は、上述の実施形態以外にも、種々の異なる形態で実施されてよい。そこで、以下では、上記の情報処理装置100の他の実施形態について説明する。
〔7−1.エッジ間の角度に基づく仮想ノードの追加〕
いくつかの実施形態では、生成部135は、対象ノードと他のノードを連結するエッジと、他の仮想ノードが配置済みのエッジとの角度が所定値を超える場合、対象ノードと他のノードを連結するエッジ上に仮想ノードを追加することにより、第2グラフを生成してもよい。
図9は、グラフを生成するグラフ生成処理の一例を示す図である。上述の例示的な実施形態の場合と同様に、グラフ生成処理は、1)生成済みグラフからの処理対象となるノードの選択、2)生成済みグラフへの仮想ノードの追加および3)仮想ノードへのエッジの付与の3つの段階を含む。第1、第2および第3の段階は、グラフの始状態、中間状態および終状態にそれぞれ対応する。図9の例では、新たなグラフG3が、生成済みグラフであるグラフG1から、中間状態グラフISG2を通して生成される。図9に示された「白矢印」は、グラフ生成処理が次の段階に移行することを示す。
いくつかの実装形態では、情報処理装置100は、「エッジ間の角度に」に基づいて、仮想ノードを追加することができる。以下では、「エッジ間の角度に基づく仮想ノードの追加」の様々な実装形態について説明する。
上述の例示的な実施形態の場合と同様に、はじめに、情報処理装置100の取得部132は、生成済みグラフを取得する。図9の例では、取得部132は、グラフ情報記憶部122から、グラフG1を取得する。そして、情報処理装置100の選択部133は、取得された生成済みグラフ内のノードから、処理対象のノードを選択する。図9の例では、選択部133は、処理対象のノードとして、ノードN1を選択する。
次いで、情報処理装置100の判定部134は、選択部133によって選択された処理対象のノードと他のノードとが仮想ノードの追加に関する所定の条件を満たすかを判定する。そして、判定部134が処理対象のノードと他のノードとが仮想ノードの追加に関する所定の条件を満たすと判定した場合に、情報処理装置100の生成部135は、生成済みグラフに仮想ノードを追加することによって、中間状態グラフを生成する。
判定部134は、追加される仮想ノードの方向を反映するように、中間状態グラフを生成する。生成部135は、処理対象のノードに付与された第1のエッジ上に、第1の仮想ノードを配置する。そして、判定部134は、追加される仮想ノードの方向が特定の方向に偏らないように、仮想ノードが配置された第1のエッジと、処理対象のノードに付与された他のエッジとの間の角度を算出する。判定部134は、算出された角度が仮想ノードの追加に関する所定の条件を満たすかを判定する。仮想ノードの追加に関する所定の条件は、例えば、「算出された角度が閾値を上回る」という条件であってもよい。判定部134は、算出された角度が仮想ノードの追加に関する所定の条件を満たすと判定した場合に、生成部135は、第2の仮想ノードを他のエッジ上に配置する。
第1の仮想ノードが配置された第1のエッジと、第2の仮想ノードが配置された第2のエッジとの間の角度が小さい場合に、第2の仮想ノードは、第1の仮想ノードの近傍に存在することが考えられる。生成部135は、第2の仮想ノードが第1の仮想ノードの近傍に配置されないように、第1の仮想ノードが配置された第1のエッジと、他のエッジとの間の角度を使用することができる。
図9の例では、生成部135は、ノードN1をノードN4に接続するエッジ上に、仮想ノードV3を配置する。判定部134は、仮想ノードV3が配置されたエッジと、ノードN1をノードN3に接続するエッジとの間の角度A1が仮想ノードの追加に関する所定の条件を満たないと判定する。また、判定部134は、仮想ノードV3が配置されたエッジと、ノードN1をノードN5に接続するエッジとの間の角度A2も仮想ノードの追加に関する所定の条件を満たないと判定する。一方、判定部134は、仮想ノードV3が配置されたエッジと、ノードN1をノードN2に接続するエッジとの間の角度は仮想ノードの追加に関する所定の条件を満たすと判定する。同様に、判定部134は、仮想ノードV3が配置されたエッジと、ノードN1をノードN7に接続するエッジとの間の角度は仮想ノードの追加に関する所定の条件を満たすと判定する。その結果、生成部135は、仮想ノードVN1、仮想ノードVN3、仮想ノードVN5および仮想ノードVN6を、グラフG1に追加する。このようにして、生成部135は、グラフG1から中間状態グラフISG2を生成する。
上述の例示的な実施形態の場合と同様に、その後、生成部135は、仮想ノードにエッジを付与するエッジ付与処理を行う。図9の例では、情報処理装置100は、仮想ノードVN1、仮想ノードVN3、仮想ノードVN5および仮想ノードVN6に、エッジを付与する。このようにして、生成部135は、中間状態グラフISG2からグラフG3を生成する。
〔7−2.仮想ノード間の距離に基づく仮想ノードの調整〕
いくつかの実施形態では、生成部135は、第2グラフに含まれる複数の仮想ノードのうち、他の仮想ノードとの間の距離が所定の条件を満たす仮想ノードを削除してもよい。いくつかの実施形態では、生成部135は、第2グラフに含まれる複数の仮想ノードのうち、他の仮想ノードとの間の距離が所定値以下である仮想ノードを削除してもよい。
いくつかの実施形態では、生成部135は、第2グラフに含まれる複数の仮想ノードのうち、距離が所定の条件を満たす仮想ノード群を一の仮想ノードに統合してもよい。いくつかの実施形態では、生成部135は、各仮想ノード間の距離が所定値以下である仮想ノード群を一の仮想ノードに統合してもよい。いくつかの実施形態では、生成部135は、
第2グラフに含まれる複数の仮想ノードのうち、所定のクラスタリング処理により生成された仮想ノード群を一の仮想ノードに統合してもよい。いくつかの実施形態では、生成部135は、仮想ノード群に含まれる仮想ノードを削除し、一の仮想ノードを第2グラフに追加してもよい。
図10は、グラフを生成するグラフ生成処理の一例を示す図である。グラフ生成処理は、1)生成済みグラフからの処理対象となるノードの選択、2)生成済みグラフへの仮想ノードの追加、3)仮想ノードの調整、および4)仮想ノードへのエッジの付与の4つの段階を含む。第1、第2、第3および第4の段階は、グラフの始状態、第1の中間状態、第2の中間状態および終状態にそれぞれ対応する。図10の例では、新たなグラフG4が、生成済みグラフであるグラフG1から、中間状態グラフISG1および中間状態グラフISG3を通して生成される。図10に示された「白矢印」は、グラフ生成処理が次の段階に移行することを示す。
いくつかの実装形態では、情報処理装置100は、「仮想ノード間の距離」に基づいて、仮想ノードを調整することができる。以下では、「仮想ノード間の距離に基づく仮想ノードの調整」の様々な実装形態について説明する。
上述の例示的な実施形態の場合と同様に、はじめに、情報処理装置100の取得部132は、生成済みグラフを取得する。図10の例では、取得部132は、グラフ情報記憶部122から、グラフG1を取得する。そして、情報処理装置100の選択部133は、取得された生成済みグラフ内のノードから、処理対象のノードを選択する。図10の例では、選択部133は、処理対象のノードとして、ノードN1を選択する。
上述の例示的な実施形態の場合と同様に、次いで、情報処理装置100の判定部134は、選択部133によって選択された処理対象のノードと他のノードとが仮想ノードの追加に関する所定の条件を満たすかを判定する。そして、判定部134が処理対象のノードと他のノードとが仮想ノードの追加に関する所定の条件を満たすと判定した場合に、情報処理装置100の生成部135は、生成済みグラフに仮想ノードを追加することによって、第1の中間状態グラフを生成する。
図10の例では、生成部135は、仮想ノードVN1、仮想ノードVN2、仮想ノードVN3、仮想ノードVN4、仮想ノードVN5および仮想ノードVN6を、グラフG1に追加する。このようにして、生成部135は、グラフG1から中間状態グラフISG1を生成する。
次いで、生成部135は、追加された仮想ノードと他の追加された仮想ノードとが仮想ノードの調整に関する所定の条件を満たすかを判定する。そして、生成部135が追加された仮想ノードと他の追加された仮想ノードとが仮想ノードの調整に関する所定の条件を満たすと判定した場合に、生成部135は、他の追加された仮想ノードを削除することによって、第2の中間状態グラフを生成する。
判定部134は、追加された2つの仮想ノード間の距離が閾値を満たさない場合に、追加された2つの仮想ノードのうちの1つを、エッジの生成の前に、削除してもよい。例えば、判定部134は、追加された2つの仮想ノード間の距離を算出する。そして、判定部134は、算出された距離が仮想ノードの調整に関する所定の条件を満たすかを判定する。仮想ノードの調整に関する所定の条件は、例えば、「算出された距離が閾値を下回る」という条件であってもよい。判定部134が算出された距離が仮想ノードの調整に関する所定の条件を満たすと判定した場合に、生成部135は、追加された2つの仮想ノードのうちの1つを、エッジの生成の前に、削除する。
図10の例では、判定部134は、仮想ノードVN3と仮想ノードVN2との間の距離が仮想ノードの調整に関する所定の条件を満たすと判定する。また、判定部134は、仮想ノードVN3と仮想ノードVN4との間の距離が仮想ノードの調整に関する所定の条件を満たすと判定する。一方、判定部134は、仮想ノードVN3と仮想ノードVN1との間の距離が仮想ノードの調整に関する所定の条件を満たさないと判定する。同様に、判定部134は、仮想ノードVN3と仮想ノードVN5との間の距離や、仮想ノードVN3と仮想ノードVN6との間の距離も仮想ノードの調整に関する所定の条件を満たさないと判定する。その結果、生成部135は、仮想ノードVN2および仮想ノードVN4を、グラフG1から削除する。このようにして、生成部135は、中間状態グラフISG1から中間状態グラフISG3を生成する。
上述の例示的な実施形態の場合と同様に、その後、生成部135は、仮想ノードにエッジを付与するエッジ付与処理を行う。図10の例では、情報処理装置100は、仮想ノードVN1、仮想ノードVN3、仮想ノードVN5および仮想ノードVN6に、エッジを付与する。このようにして、生成部135は、中間状態グラフISG3からグラフG4を生成する。
生成部135は、仮想ノードがノードに共有されるように、仮想ノードを追加してもよい。図10の例では、生成部135は、仮想ノードVN2、仮想ノードVN3および仮想ノードVN4を削除してもよい。そして、生成部135は、仮想ノードVN2、仮想ノードVN3および仮想ノードVN4にそれぞれ対応するオブジェクトの平均ベクトルを、新たな仮想ノードとして追加してもよい。いくつかの実装形態では、生成部135は、K-means法等のクラスタリングの手法を使用して、仮想ノードに対応するオブジェクト(すなわち、ベクトルデータ)を、K個のクラスタに分類してもよい(Kは、任意の自然数)。そして、生成部135は、各クラスタの代表ベクトル(すなわち、セントロイド)を、新たな仮想ノードとして追加してもよい。
〔7−3.新たな近傍ノードに基づく仮想ノードの追加〕
いくつかの実施形態では、生成部135は、対象ノードとエッジで連結されていない非連結ノードと、対象ノードとが所定の条件を満たす場合、仮想ノードを追加することにより、第2グラフを生成してもよい。例えば、生成部135は、対象ノードに連結されたエッジ数よりも多い数のノード群であって、対象ノードの近傍ノードとして抽出されたノード群に含まれる非連結ノードと、対象ノードとが所定の条件を満たす場合、仮想ノードを追加してもよい。また、例えば、生成部135は、対象ノードと、非連結ノードとの間の距離が所定の閾値以上である場合、対象ノードと非連結ノードとの間に仮想ノードを追加してもよい。
図11は、グラフを生成するグラフ生成処理の一例を示す図である。グラフ生成処理は、1)生成済みグラフからの処理対象となるノードの選択、2)新たな近傍ノードの検索、3)中間状態グラフへの仮想ノードの追加および4)仮想ノードへのエッジの付与の4つの段階を含む。第1、第2、第3および第4の段階は、グラフの始状態、第1の中間状態、第2の中間状態および終状態にそれぞれ対応する。図11の例では、新たなグラフG5が、生成済みグラフであるグラフG1から、中間状態グラフISG4および中間状態グラフISG5を通して生成される。図11に示された「白矢印」は、グラフ生成処理が次の段階に移行することを示す。
いくつかの実装形態では、情報処理装置100は、「新たな近傍ノード」に基づいて、仮想ノードを追加することができる。以下では、「新たな近傍ノードに基づく仮想ノードの追加」の様々な実装形態について説明する。
上述の例示的な実施形態の場合と同様に、はじめに、情報処理装置100の取得部132は、生成済みグラフを取得する。図11の例では、取得部132は、グラフ情報記憶部122から、グラフG1を取得する。そして、情報処理装置100の選択部133は、取得された生成済みグラフ内のノードから、処理対象のノードを選択する。図11の例では、選択部133は、処理対象のノードとして、ノードN1を選択する。
次いで、情報処理装置100の生成部135は、生成済みグラフを使用することによって、処理対象のノードに対する新たな近傍ノードを検索する。そして、生成部135は、検索された新たな近傍ノードを生成済みグラフに追加することによって、第1の中間状態グラフを生成する。
検索された新たな近傍ノードを生成済みグラフに追加することは、検索された新たな近傍ノードと、処理対象のノードとを新たなエッジによって接続することを包含する。生成済みグラフ内の元のエッジと、新たなエッジとを区別するために、本明細書では、処理対象のノードを新たな近傍ノードに接続するエッジは、「仮想エッジ」と呼ばれる場合がある。
第1のノードが第2のノードの近傍に存在するにもかかわらず、第1のノードが、第2のノードにエッジによって接続されていない場合がある。生成部135は、このような新たな近傍ノードを取得する。生成部135は、生成済みグラフ内のノードに予め付与されたエッジとは異なる新たなエッジ上に、仮想ノードを配置する。例えば、生成部135は、処理対象のノードを新たな近傍ノードに接続するエッジを、仮想エッジとして生成する。生成部135は、処理対象のノードと他のノードとの間の距離を算出してもよい。算出された距離が閾値を満たす場合に、生成部135は、処理対象のノードに対する新たな近傍ノードとして、他のノードを取得してもよい。
図11の例では、生成部135は、新たな近傍ノードN8と、ノードN1とを仮想エッジVE1によって接続する。また、生成部135は、新たな近傍ノードN9と、ノードN1とを仮想エッジVE2によって接続する。このようにして、生成部135は、グラフG1から中間状態グラフISG4を生成する。
上述の例示的な実施形態の場合と同様に、次いで、情報処理装置100の判定部134は、選択部133によって選択された処理対象のノードと他のノードとが仮想ノードの追加に関する所定の条件を満たすかを判定する。例えば、他のノードは、検索された新たな近傍ノードである。そして、判定部134が処理対象のノードと他のノードとが仮想ノードの追加に関する所定の条件を満たすと判定した場合に、生成部135は、生成済みグラフに仮想ノードを追加することによって、第2の中間状態グラフを生成する。
図11の例では、生成部135は、仮想ノードVN1、仮想ノードVN2、仮想ノードVN3、仮想ノードVN4、仮想ノードVN5、仮想ノードVN6、仮想ノードVN7、仮想ノードVN8、仮想ノードVN9および仮想ノードVN10を、中間状態グラフISG4に追加する。このようにして、生成部135は、中間状態グラフISG4から中間状態グラフISG5を生成する。
上述の例示的な実施形態の場合と同様に、その後、生成部135は、仮想ノードにエッジを付与するエッジ付与処理を行う。図11の例では、情報処理装置100は、仮想ノードVN1、仮想ノードVN2、仮想ノードVN3、仮想ノードVN4、仮想ノードVN5、仮想ノードVN6、仮想ノードVN7、仮想ノードVN8、仮想ノードVN9および仮想ノードVN10に、エッジを付与する。このようにして、生成部135は、中間状態グラフISG5からグラフG5を生成する。
〔7−4.ノードの密度に基づく仮想ノードの追加〕
いくつかの実施形態では、生成部135は、第1グラフにおいてノードの密度が低い空間に仮想ノードを追加することにより、第2グラフを生成してもよい。
生成部135は、オブジェクト(すなわち、ベクトルデータ)の密度が低い空間に、仮想ノードを配置することによって、グラフを生成してもよい。一例として、オブジェクトの密度は、オブジェクトに対応するノードの座標から距離r(rは、任意の実数)の中にある他のノードの数であってもよい。生成部135は、ノードの密度が閾値を満たさない場合に、ノードの座標から距離r内の領域に、仮想ノードを配置してもよい。別の例として、生成部135は、超平面や超球を使用することによって、オブジェクトのベクトル空間を、複数の局所領域に分割してもよい。この場合、オブジェクトの密度は、各局所領域内に含まれるノードの数に基づく局所密度であってもよい。生成部135は、局所密度が閾値を満たさない場合に、局所領域内に仮想ノードを配置してもよい。
〔7−5.元のエッジの削除〕
いくつかの実装形態では、仮想ノードが生成済みグラフ内のノードに予め付与されたエッジ上に配置された場合に、生成部135は、このノードを削除してもよい。そして、生成部135は、仮想ノードにエッジを付与するエッジ付与処理を行ってよい。例えば、仮想ノードが第1のノードを第2のノードに接続する元ノード上に配置された場合に、生成部135は、この元のノードを削除してもよい。そして、生成部135は、仮想ノードにエッジを付与するエッジ付与処理を行うことによって、第1のノードを仮想ノードに接続する第1のエッジと、仮想ノードを第2のノードに接続する第2のエッジを生成してもよい。これにより、情報処理装置100は、検索速度を向上させることができる。
いくつかの実装形態では、生成部135は、仮想ノードが配置された全ての元のエッジを削除してもよい。そして、生成部135は、全ての元のノードおよび仮想ノードにエッジを付与するエッジ付与処理を行ってよい。
〔7−6.仮想ノードのオフセット〕
生成部135は、エッジの座標を基準として使用するオフセットに基づいて、エッジから所定の距離離れたベクトル空間に、仮想ノードを配置してもよい。生成部135は、処理対象のノードの座標を基準として使用するオフセットに基づいて、処理対象のノードの近傍(例えば、処理対象のノードから所定の距離離れたベクトル空間)に、仮想ノードを配置してもよい。生成部135は、処理対象のノードにエッジによって接続された他のノードの座標を基準として使用するオフセットに基づいて、他のノードの近傍(例えば、他のノードから所定の距離離れたベクトル空間)に、仮想ノードを配置してもよい。
〔7−7.グラフの適用例〕
いくつかの実施形態では、生成部135は、電子商取引サービスにおいて取引される複数の取引対象の各々に対応する複数のノードが含まれる第1グラフにおける複数のノードの配置態様に基づいて、電子商取引サービスにおいて取引される取引対象に対応付けられていないノードである仮想ノードを第1グラフに追加することにより、この仮想ノードを含む第2グラフを生成する。例えば、生成部135は、第1グラフに含まれる複数のノードであって、電子商取引サービスにおいて取引される複数の取引対象の各々に対応する複数のノードのうちの少なくとも2つのノードが第1の所定の条件を満たす、または、第1グラフに含まれるノード間を連結するエッジが第2の所定の条件を満たす場合に、電子商取引サービスにおいて取引される取引対象に対応付けられていないノードである仮想ノードを第1グラフに追加することにより、この仮想ノードを含む第2のグラフを生成することができる。取得部132は、電子商取引サービスにおいて取引される複数の取引対象の各々に対応する複数のノードと、ノード間を連結するエッジとを含む第1グラフを取得してもよい。また、選択部133は、電子商取引サービスにおいて取引される取引対象に対応付けられてないノードである仮想ノードの追加処理の対象となる対象ノードを、複数のノードから選択してもよい。
生成部135によって生成されたグラフは、静止画像、動画像、音楽等のマルチメディアの検索に使用され得る。図1および図2を参照して上述したように、生成されたグラフは、類似画像検索を含む様々な情報検索に適用可能である。例えば、抽出された特徴量が画像特徴量である場合に、生成されたグラフは、類似画像検索に適用可能である。また、例えば、抽出された特徴量が単語埋め込みである場合に、生成されたグラフは、類似単語検索に適用可能である。
〔8.その他〕
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の一部を手動的に行うこともできる。あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、各図に示した各種情報は、図示した情報に限られない。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
例えば、図3に示した記憶部120の一部又は全部は、情報処理装置100によって保持されるのではなく、ストレージサーバ等に保持されてもよい。この場合、情報処理装置100は、ストレージサーバにアクセスすることで、オブジェクト情報やグラフ情報等の各種情報を取得する。
〔9.ハードウェア構成〕
また、上述してきた実施形態に係る情報処理装置100は、例えば図11に示すような構成のコンピュータ1000によって実現される。図11は、ハードウェア構成の一例を示す図である。コンピュータ1000は、出力装置1010、入力装置1020と接続され、演算装置1030、一次記憶装置1040、二次記憶装置1050、出力IF(Interface)1060、入力IF1070、ネットワークIF1080がバス1090により接続された形態を有する。
演算装置1030は、一次記憶装置1040や二次記憶装置1050に格納されたプログラムや入力装置1020から読み出したプログラム等に基づいて動作し、各種の処理を実行する。一次記憶装置1040は、RAM等、演算装置1030が各種の演算に用いるデータを一時的に記憶するメモリ装置である。また、二次記憶装置1050は、演算装置1030が各種の演算に用いるデータや、各種のデータベースが登録される記憶装置であり、ROM(Read Only Memory)、HDD(Hard Disk Drive)、フラッシュメモリ等により実現される。
出力IF1060は、モニタやプリンタといった各種の情報を出力する出力装置1010に対し、出力対象となる情報を送信するためのインタフェースであり、例えば、USB(Universal Serial Bus)やDVI(Digital Visual Interface)、HDMI(登録商標)(High Definition Multimedia Interface)といった規格のコネクタにより実現される。また、入力IF1070は、マウス、キーボード、およびスキャナ等といった各種の入力装置1020から情報を受信するためのインタフェースであり、例えば、USB等により実現される。
なお、入力装置1020は、例えば、CD(Compact Disc)、DVD(Digital Versatile Disc)、PD(Phase change rewritable Disk)等の光学記録媒体、MO(Magneto-Optical disk)等の光磁気記録媒体、テープ媒体、磁気記録媒体、または半導体メモリ等から情報を読み出す装置であってもよい。また、入力装置1020は、USBメモリ等の外付け記憶媒体であってもよい。
ネットワークIF1080は、ネットワークNを介して他の機器からデータを受信して演算装置1030へ送り、また、ネットワークNを介して演算装置1030が生成したデータを他の機器へ送信する。
演算装置1030は、出力IF1060や入力IF1070を介して、出力装置1010や入力装置1020の制御を行う。例えば、演算装置1030は、入力装置1020や二次記憶装置1050からプログラムを一次記憶装置1040上にロードし、ロードしたプログラムを実行する。
例えば、コンピュータ1000が情報処理装置100として機能する場合、コンピュータ1000の演算装置1030は、一次記憶装置1040上にロードされたプログラムを実行することにより、制御部130の機能を実現する。
〔10.効果〕
上述してきたように、実施形態に係る情報処理装置100は、生成部135を有する。
実施形態に係る情報処理装置100において、生成部135は、複数の検索対象の各々に対応する複数のノードが含まれる第1グラフにおける複数のノードの配置態様に基づいて、検索対象に対応付けられていないノードである仮想ノードを第1グラフに追加することにより、この仮想ノードを含む第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、第1グラフに含まれる複数のノードであって、複数の検索対象の各々に対応する複数のノードのうちの少なくとも2つのノードが第1の所定の条件を満たす、または、第1グラフに含まれるノード間を連結するエッジが第2の所定の条件を満たす場合に、検索対象に対応付けられていないノードである仮想ノードを第1グラフに追加することにより、この仮想ノードを含む第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、仮想ノードの追加処理の対象となる対象ノードと他のノードとが所定の条件を満たす場合、仮想ノードを追加することにより、仮想ノードを含む第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、対象ノードと他のノードを連結するエッジが所定の条件を満たす場合、仮想ノードを追加することにより、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、第1グラフにおける対象ノードと他のノードとの間に仮想ノードを追加することにより、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、対象ノードと他のノードを連結するエッジの長さが所定の閾値以上である場合、対象ノードと他のノードとの間に仮想ノードを追加することにより、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、連結されたエッジのうち長さが最も短い最短エッジの長さが所定値よりも大きいノードを対象ノードとして、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、対象ノードとエッジで連結されていない非連結ノードと、対象ノードとが所定の条件を満たす場合、仮想ノードを追加することにより、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、対象ノードに連結されたエッジ数よりも多い数のノード群であって、対象ノードの近傍ノードとして抽出されたノード群に含まれる非連結ノードと、対象ノードとが所定の条件を満たす場合、仮想ノードを追加する。
また、実施形態に係る情報処理装置100において、生成部135は、対象ノードと、非連結ノードとの間の距離が所定の閾値以上である場合、対象ノードと非連結ノードとの間に仮想ノードを追加する。
また、実施形態に係る情報処理装置100において、生成部135は、対象ノードと他のノードとの間に複数の仮想ノードを追加することにより、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、対象ノードと他のノードとを連結するエッジの長さに応じた数の仮想ノードを追加することにより、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、対象ノードと他のノードとを連結するエッジの長さが長い程、多い数の複数の仮想ノードを追加することにより、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、対象ノードと他のノードを連結するエッジを削除することにより、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、対象ノードと他のノードを連結するエッジ上に仮想ノードを追加することにより、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、対象ノードと他のノードを連結するエッジの中点に仮想ノードを追加することにより、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、対象ノードと他のノードを連結するエッジと、他の仮想ノードが配置済みのエッジとの角度が所定値を超える場合、対象ノードと他のノードを連結するエッジ上に仮想ノードを追加することにより、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、第2グラフに含まれる複数の仮想ノードのうち、他の仮想ノードとの間の距離が所定の条件を満たす仮想ノードを削除する。
また、実施形態に係る情報処理装置100において、生成部135は、第2グラフに含まれる複数の仮想ノードのうち、他の仮想ノードとの間の距離が所定値以下である仮想ノードを削除する。
また、実施形態に係る情報処理装置100において、生成部135は、第2グラフに含まれる複数の仮想ノードのうち、距離が所定の条件を満たす仮想ノード群を一の仮想ノードに統合する。
また、実施形態に係る情報処理装置100において、生成部135は、各仮想ノード間の距離が所定値以下である仮想ノード群を一の仮想ノードに統合する。
また、実施形態に係る情報処理装置100において、生成部135は、第2グラフに含まれる複数の仮想ノードのうち、所定のクラスタリング処理により生成された仮想ノード群を一の仮想ノードに統合する。
また、実施形態に係る情報処理装置100において、生成部135は、仮想ノード群に含まれる仮想ノードを削除し、一の仮想ノードを第2グラフに追加する。
また、実施形態に係る情報処理装置100において、生成部135は、第2グラフに含まれるノードのうち、仮想ノードの近傍に位置するノードである近傍ノードと、仮想ノードとを連結するエッジを第2グラフに追加する。
また、実施形態に係る情報処理装置100において、生成部135は、第1グラフにおいてノードの密度が低い空間に仮想ノードを追加することにより、第2グラフを生成する。
また、実施形態に係る情報処理装置100において、生成部135は、第1グラフに含まれる複数のノードであって、電子商取引サービスにおいて取引される複数の取引対象の各々に対応する複数のノードのうちの少なくとも2つのノードが第1の所定の条件を満たす、または、第1グラフに含まれるノード間を連結するエッジが第2の所定の条件を満たす場合に、電子商取引サービスにおいて取引される取引対象に対応付けられていないノードである仮想ノードを第1グラフに追加することにより、この仮想ノードを含む第2のグラフを生成する。
上述した各処理により、情報処理装置100は、検索精度の高いグラフを生成することができる。
以上、本願の実施形態のいくつかを図面に基づいて詳細に説明したが、これらは例示であり、発明の開示の欄に記載の態様を始めとして、当業者の知識に基づいて種々の変形、改良を施した他の形態で本発明を実施することが可能である。
また、上述した情報処理装置100は、複数のサーバコンピュータで実現してもよく、また、機能によっては外部のプラットフォーム等をAPI(Application Programming Interface)やネットワークコンピューティングなどで呼び出して実現するなど、構成は柔軟に変更できる。
また、上述してきた「部(section、module、unit)」は、「手段」や「回路」などに読み替えることができる。例えば、受信部は、受信手段や受信回路に読み替えることができる。