(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-21
(45)【発行日】2023-09-29
(54)【発明の名称】情報処理装置、情報処理方法、及び情報処理プログラム
(51)【国際特許分類】
G06F 16/906 20190101AFI20230922BHJP
G06F 16/901 20190101ALI20230922BHJP
【FI】
G06F16/906
G06F16/901
(21)【出願番号】P 2021118322
(22)【出願日】2021-07-16
【審査請求日】2022-08-09
(73)【特許権者】
【識別番号】319013263
【氏名又は名称】ヤフー株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】岩崎 雅二郎
【審査官】早川 学
(56)【参考文献】
【文献】特開2014-074959(JP,A)
【文献】特表2006-520948(JP,A)
【文献】特開2020-086662(JP,A)
【文献】特開2020-184235(JP,A)
【文献】米国特許出願公開第2021/0157606(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
データ検索の対象となる複数のオブジェクトを示す第1情報と、前記複数のオブジェクトを分類するために用いる第2情報とを取得する取得部と、
前記取得部により取得された前記第2情報を用いて、前記第1情報が示す前記複数のオブジェクトを分類し、前記複数のオブジェクトを対象とする検索処理において一括処理を行うために用いられる複数のグループを示す第3情報を生成する生成部と、
を備え
、
前記取得部は、
前記複数のオブジェクトの各々に対応する複数のノードがエッジにより連結されたグラフである前記第2情報を取得し、
前記生成部は、
前記グラフ中の前記複数のノードから一のノードを選択し、前記一のノードにエッジで連結されたノードである近傍ノードのうち少なくとも一部のノードである分類対象ノード、及び前記一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理を、前記一のグループに分類された前記一のノードの前記分類対象ノード及び前記一のノードである処理済みノード群を前記グラフから除外し、前記処理済みノード群を除外した後の前記グラフを用いて繰り返すことにより、前記第3情報を生成する
ことを特徴とする情報処理装置。
【請求項2】
前記取得部は、
前記複数のオブジェクトを検索対象とするインデックスである前記第2情報を取得し、
前記生成部は、
前記第2情報を用いて、前記複数のオブジェクトを前記複数のグループに分類する前記第3情報を生成する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記生成部は、
前記第2情報を用いた検索により、前記複数のオブジェクトを前記複数のグループに分類する前記第3情報を生成する
ことを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記生成部は、
前記一のノードの前記近傍ノードのうち所定の数のノードである前記分類対象ノード、及び前記一のノードの各々に対応するオブジェクト群を前記一のグループに分類する前記分類処理により、前記第3情報を生成する
ことを特徴とする請求項
1~3のいずれか1項に記載の情報処理装置。
【請求項5】
前記生成部は、
前記一のノードの前記近傍ノードの全てである前記分類対象ノード、及び前記一のノードの各々に対応するオブジェクト群を前記一のグループに分類する前記分類処理により、前記第3情報を生成する
ことを特徴とする請求項
1~4のいずれか1項に記載の情報処理装置。
【請求項6】
前記生成部は、
前記複数のノードの各々にエッジで連結されたノードである前記近傍ノードの数に基づいて、複数のノードから前記一のノードを選択し、前記一のノードの前記分類対象ノード及び前記一のノードの各々に対応するオブジェクト群を前記一のグループに分類する前記分類処理により、前記第3情報を生成する
ことを特徴とする請求項
1~
5のいずれか1項に記載の情報処理装置。
【請求項7】
前記生成部は、
前記近傍ノードの数が大きい方から順に前記一のノードを選択し、前記一のノードの前記分類対象ノード及び前記一のノードの各々に対応するオブジェクト群を前記一のグループに分類する前記分類処理により、前記第3情報を生成する
ことを特徴とする請求項
6に記載の情報処理装置。
【請求項8】
前記生成部は、
前記近傍ノードの数が小さい方から順に前記一のノードを選択し、前記一のノードの前記分類対象ノード及び前記一のノードの各々に対応するオブジェクト群を前記一のグループに分類する前記分類処理により、前記第3情報を生成する
ことを特徴とする請求項
6に記載の情報処理装置。
【請求項9】
前記生成部は、
前記複数のノードからランダムに前記一のノードを選択し、前記一のノードの前記分類対象ノード及び前記一のノードの各々に対応するオブジェクト群を前記一のグループに分類する前記分類処理により、前記第3情報を生成する
ことを特徴とする請求項
1~
5のいずれか1項に記載の情報処理装置。
【請求項10】
前記生成部は、
前記処理済みノード群を除外した後の前記グラフを用いて、前記分類処理を前記複数のオブジェクトがいずれかのグループに分類されるまで繰り返すことにより、前記第3情報を生成する
ことを特徴とする請求項
1~9のいずれか1項に記載の情報処理装置。
【請求項11】
前記生成部は、
各々に属するオブジェクトが相互に排他的な前記複数のグループを示す前記第3情報を生成する
ことを特徴とする請求項1~
10のいずれか1項に記載の情報処理装置。
【請求項12】
前記取得部は、
前記複数のオブジェクトを検索対象とするインデックスである第4情報を取得し、
前記生成部は、
前記第4情報を用いて、前記複数のオブジェクトのうち少なくとも一部のオブジェクトに対応するノードであるオブジェクトノードから、前記複数のグループのうち、前記オブジェクトノードが属するグループ以外の他のグループへエッジが連結されたグループグラフを生成する
ことを特徴とする請求項1~
11のいずれか1項に記載の情報処理装置。
【請求項13】
前記生成部は、
前記複数のオブジェクトから一のオブジェクトを選択し、前記第4情報を用いて前記複数のオブジェクトを対象に、前記一のオブジェクトの近傍オブジェクトを検索し、前記一のオブジェクトに対応する一のオブジェクトノードから、前記近傍オブジェクトが属する前記他のグループへエッジを連結する連結処理により、前記グループグラフを生成する
ことを特徴とする請求項
12に記載の情報処理装置。
【請求項14】
前記生成部は、
前記複数のオブジェクトからランダムに前記一のオブジェクトを選択し、前記一のオブジェクトの前記近傍オブジェクトを検索し、前記一のオブジェクトに対応する前記一のオブジェクトノードから、前記近傍オブジェクトが属する前記他のグループへエッジを連結する前記連結処理により、前記グループグラフを生成する
ことを特徴とする請求項
13に記載の情報処理装置。
【請求項15】
前記取得部は、
前記複数のオブジェクトの各々に対応する複数のオブジェクトノードがエッジにより連結されたグラフである前記第4情報を取得し、
前記生成部は、
前記第4情報を用いて、前記グループグラフを生成する
ことを特徴とする請求項
12~
14のいずれか1項に記載の情報処理装置。
【請求項16】
コンピュータが実行する情報処理方法であって、
データ検索の対象となる複数のオブジェクトを示す第1情報と、前記複数のオブジェクトを分類するために用いる第2情報とを取得する取得工程と、
前記取得工程により取得された前記第2情報を用いて、前記第1情報が示す前記複数のオブジェクトを分類し、前記複数のオブジェクトを対象とする検索処理において一括処理を行うために用いられる複数のグループを示す第3情報を生成する生成工程と、
を含
み、
前記取得工程は、
前記複数のオブジェクトの各々に対応する複数のノードがエッジにより連結されたグラフである前記第2情報を取得し、
前記生成工程は、
前記グラフ中の前記複数のノードから一のノードを選択し、前記一のノードにエッジで連結されたノードである近傍ノードのうち少なくとも一部のノードである分類対象ノード、及び前記一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理を、前記一のグループに分類された前記一のノードの前記分類対象ノード及び前記一のノードである処理済みノード群を前記グラフから除外し、前記処理済みノード群を除外した後の前記グラフを用いて繰り返すことにより、前記第3情報を生成する
ことを特徴とする情報処理方法。
【請求項17】
データ検索の対象となる複数のオブジェクトを示す第1情報と、前記複数のオブジェクトを分類するために用いる第2情報とを取得する取得手順と、
前記取得手順により取得された前記第2情報を用いて、前記第1情報が示す前記複数のオブジェクトを分類し、前記複数のオブジェクトを対象とする検索処理において一括処理を行うために用いられる複数のグループを示す第3情報を生成する生成手順と、
をコンピュータに実行させ
、
前記取得手順は、
前記複数のオブジェクトの各々に対応する複数のノードがエッジにより連結されたグラフである前記第2情報を取得し、
前記生成手順は、
前記グラフ中の前記複数のノードから一のノードを選択し、前記一のノードにエッジで連結されたノードである近傍ノードのうち少なくとも一部のノードである分類対象ノード、及び前記一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理を、前記一のグループに分類された前記一のノードの前記分類対象ノード及び前記一のノードである処理済みノード群を前記グラフから除外し、前記処理済みノード群を除外した後の前記グラフを用いて繰り返すことにより、前記第3情報を生成する
ことを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、情報処理方法、及び情報処理プログラムに関する。
【背景技術】
【0002】
従来、種々の情報を探索(検索)する技術が提供されている。例えば、検索対象に対応するノードがエッジにより連結されたグラフを生成し、生成したグラフを用いて検索を行う技術が提供されている。また、このような技術は、例えば画像検索等に用いられる。
【先行技術文献】
【特許文献】
【0003】
【文献】特許第6293335号公報
【文献】特許第6300982号公報
【文献】特許第6311000号公報
【非特許文献】
【0004】
【文献】岩崎雅二郎 "木構造型インデックスを利用した近似k最近傍グラフによる近傍検索", 情報処理学会論文誌, 2011/2, Vol. 52, No. 2. pp.817-828.
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上記の従来技術では、検索処理の効率化の点では改善の余地がある。例えば、上記の従来技術では、グラフのエッジ数等を調整したりして、効率的な検索ができるグラフに変更することにより、検索処理の時間削減等の効率化を行っているが、グラフの変更により検索処理の効率化を図るには限界がある。そのため、例えば検索処理の高速化等、効率的な検索処理を行うために検索処理に利用可能な情報を生成することが望まれている。
【0006】
本願は、上記に鑑みてなされたものであって、検索処理に利用可能な情報を生成する情報処理装置、情報処理方法、及び情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本願に係る情報処理装置は、データ検索の対象となる複数のオブジェクトを示す第1情報と、前記複数のオブジェクトを分類するために用いる第2情報とを取得する取得部と、前記取得部により取得された前記第2情報を用いて、前記第1情報が示す前記複数のオブジェクトを分類し、前記複数のオブジェクトを対象とする検索処理において一括処理を行うために用いられる複数のグループを示す第3情報を生成する生成部と、を備えたことを特徴とする。
【発明の効果】
【0008】
実施形態の一態様によれば、検索処理に利用可能な情報を生成することができるという効果を奏する。
【図面の簡単な説明】
【0009】
【
図1】
図1は、第1の実施形態に係る情報処理の一例を示す図である。
【
図2】
図2は、第1の実施形態に係るデータの一例を示す図である。
【
図3】
図3は、第1の実施形態に係るデータの一例を示す図である。
【
図4】
図4は、第1の実施形態に係る情報処理システムの構成例を示す図である。
【
図5】
図5は、第1の実施形態に係る情報処理装置の構成例を示す図である。
【
図6】
図6は、第1の実施形態に係るオブジェクト情報記憶部の一例を示す図である。
【
図7】
図7は、第1の実施形態に係るグラフ情報記憶部の一例を示す図である。
【
図8】
図8は、第1の実施形態に係る量子化情報記憶部の一例を示す図である。
【
図9】
図9は、第1の実施形態に係るコードブック情報記憶部の一例を示す図である。
【
図10】
図10は、第1の実施形態に係る情報処理の一例を示すフローチャートである。
【
図11】
図11は、第1の実施形態に係る検索処理の一例を示すフローチャートである。
【
図12】
図12は、第2の実施形態に係る情報処理の一例を示す図である。
【
図13】
図13は、第2の実施形態に係る情報処理装置の構成例を示す図である。
【
図14】
図14は、第2の実施形態に係る量子化情報記憶部の一例を示す図である。
【
図15】
図15は、第2の実施形態に係るブロブ情報記憶部の一例を示す図である。
【
図16】
図16は、第2の実施形態に係る検索処理の一例を示すフローチャートである。
【
図17】
図17は、変形例に係る情報処理の一例を示す図である。
【
図18】
図18は、変形例に係るグラフ情報記憶部の一例を示す図である。
【
図19】
図19は、変形例に係る検索処理の一例を示すフローチャートである。
【
図20】
図20は、変形例に係る情報処理の他の一例を示す図である。
【
図21】
図21は、ブロブ情報の生成処理の一例を示す図である。
【
図22】
図22は、変形例に係る情報処理の一例を示すフローチャートである。
【
図23】
図23は、第3の実施形態に係る情報処理の一例を示す図である。
【
図24】
図24は、第3の実施形態に係る情報処理装置の構成例を示す図である。
【
図25】
図25は、第3の実施形態に係るブロブ連結グラフ情報記憶部の一例を示す図である。
【
図26】
図26は、第3の実施形態に係る情報処理の一例を示すフローチャートである。
【
図27】
図27は、第3の実施形態に係る検索処理の一例を示すフローチャートである。
【
図28】
図28は、第3の実施形態に係る検索処理の一例を示すフローチャートである。
【
図29】
図29は、変形例に係るブロブ連結グラフ情報の一例を示す図である。
【
図30】
図30は、変形例に係るブロブ情報記憶部の一例を示す図である。
【
図31】
図31は、変形例に係るブロブ連結グラフ情報記憶部の一例を示す図である。
【
図32】
図32は、情報処理装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。
【発明を実施するための形態】
【0010】
以下に、本願に係る情報処理装置、情報処理方法、及び情報処理プログラムを実施するための形態(以下、「実施形態」と呼ぶ)について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る情報処理装置、情報処理方法、及び情報処理プログラムが限定されるものではない。また、以下の各実施形態において同一の部位には同一の符号を付し、重複する説明は省略される。
【0011】
(実施形態)
〔1.第1の実施形態〕
〔1-1.情報処理〕
図1を用いて、第1の実施形態に係る情報処理の一例について説明する。
図1は、第1の実施形態に係る情報処理の一例を示す図である。情報処理装置100は、データ検索の対象となる複数のオブジェクトをグラフ構造化したグラフインデックス(単に「グラフ」ともいう)を用いた検索処理を実行する。
図1では、情報処理装置100がデータ検索の対象であるオブジェクトがベクトル化された各ベクトルに対応するノードがエッジで連結されたグラフを用いて近傍検索を行う場合の検索処理の一部を示す。情報処理装置100は、グラフの各ノードを検索対象のオブジェクトとして、グラフを辿って与えられた検索クエリ(ベクトル)の近傍のノードを探索する。情報処理装置100は、検索処理により、抽出する近傍のノードの数として指定された所定数(以下「検索数」ともいう)のノードを、検索クエリの近傍のノードとして抽出する。以下では、画像情報をデータ検索の対象とした場合を一例として説明するが、データ検索の対象は、動画情報や音声情報等の種々の対象であってもよい。
【0012】
情報処理装置100は、数百万~数億等の単位の膨大な画像情報に対応するノードを対象に検索処理を行うが、図面においてはその一部(
図1ではノードN1等の数十個)のみを図示する。例えば、情報処理装置100は、
図1中の空間情報SP1に示すように、ノードN1、N7、N9等に示すような複数のノード(ベクトル)に関する情報を取得する。このように「ノードN*(*は任意の数値)」と記載した場合、そのノードはノードID「N*」により識別されるノードであることを示す。例えば、「ノードN1」と記載した場合、そのノードはノードID「N1」により識別されるノードである。空間情報SP1中の白丸(〇)の各々が各ノードを示す。
【0013】
図1中の空間情報SP1では、主に説明に関係するノードに符号を付すが、符号が付されていない白丸(〇)の各々もノードであり、図示するノード以外にも多数のノードが含まれる。また、各ノードは、各オブジェクト(検索対象)に対応する。例えば、画像から抽出された複数の局所特徴量のそれぞれがオブジェクトであってもよい。また、例えば、オブジェクト間の距離が定義された種々のデータがオブジェクトであってもよい。
【0014】
例えば
図1中の空間情報SP1は、ユークリッド空間であってもよい。例えば、空間情報SP1は、オブジェクトのベクトルの次元数に対応し、100次元や1000次元等の多次元空間であるものとする。なお、
図1では、空間情報SP1に示すように直積量子化によりベクトル(空間)が複数の部分領域(部分空間)に4分割された状態を概念的に図示するが、直積量子化の点については後述する。
【0015】
空間情報SP1中のノードである白丸(〇)間を接続する点線がノード間を連結するエッジを示す。
図1の例では、説明を簡単にするために、ノード間が無向(双方向)エッジ(以下単に「エッジ」ともいう)により連結される場合を示す。なお、ここでいう無向エッジとは、連結されたノード間を双方向にデータを辿ることができるエッジを意味する。例えば、ノードN1を示す白丸(〇)とノードN4を示す白丸(〇)との間は点線で接続されており、ノードN1とノードN4との間はエッジで連結されていることを示す。すなわち、空間情報SP1に示すグラフではノードN1とノードN4との間を双方向に辿ることが可能となる。具体的には、空間情報SP1ではノードN1からノードN4へ辿ることができ、かつノードN4からノードN1へ辿ることができる。
【0016】
なお、
図1の例では、図示の関係上、図示したノード間を連結するエッジのみを図示するが、図示したエッジ以外にも多数のエッジが含まれる。このように、
図1中の空間情報SP1では、エッジの一部のみを図示するが、例えばk近傍グラフ(k-nearest neighbor graph)であるものとする。なお、空間情報SP1は、種々のグラフであってもよい。
【0017】
また、グラフのエッジは、無向エッジに限らず、有向エッジであってもよい。有向エッジの場合、有向エッジの参照元となっているノードから参照先のノードへのみ辿ることができる。例えば、2つのノード間が、一方を参照元とし他方を参照先とする第1エッジ、及び一方を参照先とし他方を参照元とする第2エッジの2つの有向エッジで連結されている場合、その2つのノード間が無向(双方向)エッジで連結されて状態と同じ状態である。
【0018】
ここから、
図1を用いて検索処理について説明する。
図1の例では、情報処理装置100は、空間情報SP1に示すようなグラフGR1を取得済みであるものとする。なお、情報処理装置100は、種々の従来技術を適宜用いてグラフGR1を生成してもよい。まず、検索処理の説明に先立ってベクトル(空間)の直積量子化について説明する。
【0019】
図1では、空間情報SP1に示すように直積量子化によりベクトル(空間)が4つの部分空間AR11~AR14に分割された状態を概念的に図示する。
図1に示す部分空間AR11~AR14は、各ノード(オブジェクト)のベクトル間の距離等の説明のための概念的な図で示すが、各部分空間AR11~AR14は多次元空間となる。例えば、
図1に示す部分空間AR11は、平面上に図示するため2次元の態様にて図示されるが、例えば100次元や1000次元等の多次元空間であるものとする。
【0020】
各部分空間AR11~AR14の各々は、4分割されるベクトルの各分割(部分ベクトル)に対応する空間を示す。なお、例えば100次元のベクトルを100分割しても良い。例えば、部分空間AR11は、ベクトルが4分割された4つの部分ベクトル(「サブベクトル」ともいう)のうち、先頭の部分ベクトル(「第1サブベクトル」ともいう)に対応する次元の空間(「第1サブ空間」ともいう)を示す。部分空間AR11は、ベクトルの先頭の分割位置に対応する部分空間(第1サブ空間)を示す。検索クエリQE1の場合、部分空間AR11は、先頭の部分ベクトル(第1サブベクトル)である第1部分クエリQE1-1に対応する空間である。
【0021】
また、部分空間AR12は、ベクトルが4分割された4つの部分ベクトルのうち、先頭から2番目の部分ベクトル(「第2サブベクトル」ともいう)に対応する次元の空間(「第2サブ空間」ともいう)を示す。部分空間AR12は、ベクトルの先頭から2番目の分割位置に対応する部分空間(第2サブ空間)を示す。検索クエリQE1の場合、部分空間AR12は、先頭から2番目の部分ベクトル(第2サブベクトル)である第2部分クエリQE1-2に対応する空間である。
【0022】
また、部分空間AR13は、ベクトルが4分割された4つの部分ベクトルのうち、先頭から3番目の部分ベクトル(「第3サブベクトル」ともいう)に対応する次元の空間(「第3サブ空間」ともいう)を示す。部分空間AR13は、ベクトルの先頭から3番目の分割位置に対応する部分空間(第3サブ空間)を示す。検索クエリQE1の場合、部分空間AR13は、先頭から3番目の部分ベクトル(第3サブベクトル)である第3部分クエリQE1-3に対応する空間である。
【0023】
また、部分空間AR14は、ベクトルが4分割された4つの部分ベクトルのうち、先頭から4番目(すなわち最後尾)の部分ベクトル(「第4サブベクトル」ともいう)に対応する次元の空間(「第4サブ空間」ともいう)を示す。部分空間AR14は、ベクトルの先頭から4番目の分割位置に対応する部分空間(第4サブ空間)を示す。検索クエリQE1の場合、部分空間AR14は、先頭から4番目の部分ベクトル(第4サブベクトル)である第4部分クエリQE1-4に対応する空間である。
【0024】
なお、
図1の例では、部分空間AR11~AR14を類似の形状で示すが、各部分空間AR11~AR14の形状は異なってもよいし、また各部分空間AR11~AR14における領域の分割態様も異なってもよい。また、ノード間のエッジによる接続関係は部分空間AR11~AR14で共通であるものとする。すなわち、グラフGR1は、空間情報SP1に対応するグラフであり、部分空間AR11~AR14で共通である。
【0025】
また、
図1の例では、分割された部分ベクトル(サブベクトル)ごとにルックアップテーブルが生成される。例えば、第1サブベクトル、第2サブベクトル、第3サブベクトル、及び第4サブベクトルの4つのサブベクトルごとにクラスタリングされ、個別にルックアップテーブル(コードブック情報)が生成される。
【0026】
図1では、第1サブベクトルについては、部分空間AR11に示すように、コードブックCD11~CD19に対応する9個のグループにクラスタリングされ、コードブックCD11~CD19の各々に対応するベクトルが代表ベクトル(セントロイド)として算出される。例えば、ノードN7、N9等の第1サブベクトルはコードブックCD11に対応するグループにクラスタリングされることを示す。この場合、ノードN7、N9等の第1サブベクトルは距離の計算(算出)において、第1サブベクトルに対応するコードブック情報(「第1コードブック情報」ともいう)を用いて、コードブックCD11のベクトルにベクトル量子化される。
【0027】
また、第2サブベクトルについては、コードブックCD21~CD24等(
図2、
図9参照)に対応する複数のグループにクラスタリングされ、コードブックCD21~CD24等の各々に対応するベクトルが代表ベクトル(セントロイド)として算出される。この場合、各ノードの第2サブベクトルは距離の計算(算出)において、第2サブベクトルに対応するコードブック情報(「第2コードブック情報」ともいう)を用いて、対応するコードブックのベクトルにベクトル量子化される。
【0028】
第3サブベクトルについては、コードブックCD31~CD34等(
図2、
図9参照)に対応する複数のグループにクラスタリングされ、コードブックCD31~CD34等の各々に対応するベクトルが代表ベクトル(セントロイド)として算出される。この場合、各ノードの第3サブベクトルは距離の計算(算出)において、第3サブベクトルに対応するコードブック情報(「第3コードブック情報」ともいう)を用いて、対応するコードブックのベクトルにベクトル量子化される。
【0029】
第4サブベクトルについては、コードブックCD41~CD44等(
図2、
図9参照)に対応する複数のグループにクラスタリングされ、コードブックCD24~CD44等の各々に対応するベクトルが代表ベクトル(セントロイド)として算出される。この場合、各ノードの第4サブベクトルは距離の計算(算出)において、第4サブベクトルに対応するコードブック情報(「第4コードブック情報」ともいう)を用いて、対応するコードブックのベクトルにベクトル量子化される。
【0030】
なお、代表ベクトルを求める処理等、コードブック情報の生成は、種々の技術を適宜用いて生成される。コードブック情報の生成については従来技術であるため詳細な説明を省略する。また、ルックアップテーブルについては上記に限らず、例えば、分割された部分ベクトル(サブベクトル)全体で1つのルックアップテーブル(コードブック情報)を用いてもよいが、この点については後述する。
【0031】
ここから、検索クエリQE1を対象とする検索処理を説明する。まず、情報処理装置100は、検索クエリQE1を取得する(ステップS11)。例えば、情報処理装置100は、ユーザが利用する端末装置10(
図4参照)から検索クエリQE1を取得する。
【0032】
そして、情報処理装置100は、検索クエリQE1であるベクトルを4分割する。すなわち、情報処理装置100は、検索クエリQE1を4つの部分クエリに分割する。
図1では、情報処理装置100は、検索クエリQE1を、第1サブベクトルである第1部分クエリQE1-1、第2サブベクトルである第2部分クエリQE1-2、第3サブベクトルである第3部分クエリQE1-3、及び第4サブベクトルである第4部分クエリQE1-4との4つのサブベクトルに分割する。具体的には、情報処理装置100は、「45,23,2…」を第1部分クエリQE1-1とし、「127,34,5…」を第2部分クエリQE1-2とし、「20,98,110…」を第3部分クエリQE1-3とし、「12,45,4…」を第4部分クエリQE1-4とする。
【0033】
そして、情報処理装置100は、検索クエリQE1の各サブベクトルと、そのサブベクトルに対応するコードブックのベクトルとの間の距離を算出する。情報処理装置100は、
図2のコードブック情報TB1~TB4に示すように、検索クエリQE1の各サブベクトルと各コードブックのベクトルとの間の距離(差分)を算出する。
図2は、第1の実施形態に係るデータの一例を示す図である。
【0034】
コードブック情報TB1は、第1サブベクトルに対応する第1コードブック情報を示し、情報処理装置100は、第1サブベクトルに対応するコードブックCD11~CD19の各々のベクトルと、第1部分クエリQE1-1との間の距離を算出する。
図2では、情報処理装置100は、コードブック情報TB1に示すように、コードブックCD11と第1部分クエリQE1-1との間の距離を距離DS11と算出する。同様に、情報処理装置100は、コードブックCD12~CD14等の各々と第1部分クエリQE1-1との間の距離を距離DS12~DS14等と算出する。
【0035】
同様に、コードブック情報TB2~TB4の各々は、第2~第4サブベクトルの各々に対応する第2~第4コードブック情報を示す。情報処理装置100は、コードブック情報TB2に示すように、コードブックCD21~CD24等の各々と第2部分クエリQE1-2との間の距離を距離DS21~DS24等と算出する。情報処理装置100は、コードブック情報TB3に示すように、コードブックCD31~CD34等の各々と第3部分クエリQE1-3との間の距離を距離DS31~DS34等と算出する。情報処理装置100は、コードブック情報TB4に示すように、コードブックCD41~CD44等の各々と第4部分クエリQE1-4との間の距離を距離DS41~DS44等と算出する。
【0036】
なお、
図2では説明のため抽象的に示すが、距離DS11~DS44等は具体的な値であるものとする。距離は浮動小数点で表される値であるが、後述のSIMD(Single Instruction, Multiple Data)による高速化のためにscale-offset-compression(「https://www.unidata.ucar.edu/blogs/developer/entry/compression_by_scaling_and_offfset」等参照)により1バイト整数型に圧縮してもよい。情報処理装置100は、各コードブックとクエリとの間の距離算出を、検索クエリQE1を取得したタイミングで行ってもよいし、その情報が必要になったタイミングで行ってもよい。情報処理装置100は、検索処理において、コードブック情報TB1~TB4をルックアップテーブルとして用いて、各ノードと検索クエリQE1との間の距離、すなわち近似距離(「第1距離」ともいう)を算出する。このように、情報処理装置100は、検索処理において、グラフを探索する際には、各ノードと検索クエリとの間の真の距離(「第2距離」ともいう)ではなく、近似距離(第1距離)を計算し処理を行うことにより、効率的な検索処理を可能にすることができる。
【0037】
情報処理装置100は、検索クエリQE1を対象とする検索処理を実行する(ステップS12)。情報処理装置100は、検索クエリQE1を対象として、グラフGR1を用いた
図11に示すような検索処理を行うことにより、検索クエリQE1の検索結果を得る。
図11に示す検索処理についての詳細は後述する。情報処理装置100は、検索クエリQE1を対象として検索処理を行うことにより、検索数のノードを検索クエリQE1の近傍のノードとして抽出する。
【0038】
情報処理装置100は、検索クエリQE1を対象とする検索処理において、各ノードのうち、所定のノードをグラフGR1の検索の開始点(起点)となるノード(以下「起点ノード」ともいう)として選択する。例えば、情報処理装置100は、起点ノードを、木構造のインデックス等の所定のインデックスを用いて選択する。
図1の例では、情報処理装置100は、起点ノードとして、ノードN7を選択するものとする。なお、
図1では説明を簡単にするために、所定のインデックスを用いてノードN7のみを起点ノードとして選択する場合を示すが、情報処理装置100は、複数のノードを起点ノードとして選択してもよいし、ランダム等の様々な方法により起点ノードを選択してもよい。
【0039】
ここで、情報処理装置100は、検索クエリQE1を対象とする検索処理において、一のノードからのエッジが連結されたノード(以下「接続ノード」ともいう)と検索クエリとの距離を並列化して算出する(ステップS13)。
図1では、情報処理装置100は、一括処理情報LT1に示すように、ノードN7からのエッジが連結されたノード(接続ノード)であるノードN9、N12、N54、N85等については、検索クエリQE1との距離を並列化して算出する。
【0040】
例えば、ノードN9は、ノード情報INF1に示すように、第1サブベクトルがコードブックCD12、第2サブベクトルがコードブックCD23、第3サブベクトルがコードブックCD35、及び第4サブベクトルがコードブックCD47に対応付けられていることを示す。なお、変数CDのサイズはコードブックのサイズにより決定されるので、例えばコードブックサイズが16であれば、変数CDは4ビットで良いことになり、大幅なデータの圧縮が可能である。そのため、情報処理装置100は、コードブックCD12の距離DS12、コードブックCD23の距離DS23、コードブックCD35の距離DS35、及びコードブックCD47の距離DS47を用いて、ノードN9と、検索クエリQE1との距離を算出する。例えば、情報処理装置100は、コードブックCD12の距離DS12、コードブックCD23の距離DS23、コードブックCD35の距離DS35、及びコードブックCD47の距離DS47の合計を、ノードN9と検索クエリQE1との距離として算出する。
【0041】
例えば、ノードN12は、ノード情報INF2に示すように、第1サブベクトルがコードブックCD14、第2サブベクトルがコードブックCD29、第3サブベクトルがコードブックCD31、及び第4サブベクトルがコードブックCD45に対応付けられていることを示す。例えば、情報処理装置100は、コードブックCD14の距離DS14、コードブックCD29の距離DS29、コードブックCD31の距離DS31、及びコードブックCD45の距離DS45の合計を、ノードN12と検索クエリQE1との距離として算出する。同様に、情報処理装置100は、ノードN54のノード情報INF3を用いて、ノードN54と検索クエリQE1との距離を算出し、ノードN85のノード情報INF4を用いて、ノードN85と検索クエリQE1との距離を算出する。
【0042】
例えば、情報処理装置100は、SIMDの演算に関する並列化により、ノードN9、N12、N54、N85の各々と検索クエリQE1との距離を一括して算出する。これにより、情報処理装置100は、距離計算を並列化することにより、距離計算を高速化することでき、効率的な検索処理を可能にすることができる。
【0043】
なお、
図1では説明を簡単にするために、4つのノードを対象として距離を並列化して算出する場合を示すが、並列化される数は、情報処理装置100の仕様に基づいて決定される。例えば、情報処理装置100がSIMDにより一括して処理できる数(「一括処理可能単位」ともいう)が「4」である場合、
図1と同様の処理となるが、SIMDにより一括して処理できる数(一括処理可能単位)が「16」である場合、情報処理装置100は、16個のノードを対象として距離を並列化して算出する。また、一括処理可能単位が「32」である場合、情報処理装置100は、32個のノードを対象として距離を並列化して算出する。このように、情報処理装置100は、SIMDにより一括して処理できる数(一括処理可能単位)に対応する数のノードの距離計算を一括して行うことにより、効率的な検索処理を可能にすることができる。
【0044】
情報処理装置100は、上記のように複数のノードの距離計算を並列化して行いながら、検索クエリQE1を対象として、グラフGR1を用いた
図11に示すような検索処理を行うことにより、検索数のノードを検索クエリQE1の近傍のノードとして抽出する。
【0045】
上述のように、情報処理装置100は、ベクトル量子化された各ノードのベクトルと検索クエリとの間の近似距離(第1距離)を算出して、第1距離を用いて検索処理を行う事により、効率的な検索処理を可能にすることができる。また、情報処理装置100は、並列化可能な数のノードの距離計算を一括して行うことにより、効率的な検索処理を可能にすることができる。上記のように、情報処理装置100は、グラフのノードの複数の接続ノードとの近似距離を一括して計算することにより、限定されたメモリ領域(ルックアップテーブル)を繰り返し利用する(メモリキャッシュにのる)ので高速化が可能である。
【0046】
また、
図1の例では、情報処理装置100は、直積量子化により分割したベクトルを用いて検索処理を行うことにより、ベクトルを分割せずに検索処理を行う場合に比べて、より効率的な検索処理を可能にすることができる。例えば、情報処理装置100は、直積量子化により短いベクトル間の距離を算出することとなり、距離計算の対象となるベクトルのサイズを小さくできる。また、情報処理装置100は、距離計算時に利用するルックアップテーブルによりアクセスするメモリ空間を、分割されたサブベクトルのルックアップテーブルに限定することができる。情報処理装置100は、直積量子化により検索精度の低下を抑制しつつ、ベクトルサイズを削減することができる。なお、
図1では、直積量子化が行われた場合の処理を説明したが、直積量子化が行われた場合は一例に過ぎず、情報処理装置100は、直積量子化を行われてないベクトルを用いて検索処理を行ってもよい。
【0047】
〔1-1-1.その他〕
上述した処理は一例に過ぎず、情報処理装置100は、効率的な検索処理の為に様々な情報や手法を用いて、検索処理を行ってもよい。この点について、各事項について詳述する。
【0048】
(エッジ(接続ノード)の格納態様)
各ノードに連結されるエッジ(接続ノード)の情報について、ノードでのエッジ(接続ノード)の格納態様(格納方法)には、例えば以下の第1格納態様及び第2格納態様の2種類が考えられるため、格納態様については、利用形態によって選択されてもよい。
【0049】
例えば、第1格納態様としては、各ノードには接続ノード(オブジェクト)のIDを対応付けて格納し、別のテーブルに直積量子化されたオブジェクトの情報を格納してもよい。例えば、
図7及び
図8に示すデータの格納態様が第1格納態様に対応する。第1格納態様の場合、メモリ使用量を削減できる。
【0050】
また、例えば、第2格納態様としては、各ノードに直に量子化されたオブジェクトを持つ。第2格納態様の場合、あるノードの接続ノード(オブジェクト)が量子化された情報を各ノードに対応付けて記憶する。例えば、ノードN7の接続ノードであるノードN9、N12、N54、N85の各々の量子化された情報(
図2中のノード情報INF1~INF4)がノードN7に対応付けて記憶されるデータの格納態様が第2格納態様に対応する。第2格納態様の場合、検索時にシーケンシャルにオブジェクトをアクセスするため速度低下が発生を抑制することができる。
【0051】
(ルックアップテーブル)
上述した例では、分割したサブベクトルごとに個別にクラスタリングし、個々にルックアップテーブル(コードブック情報)を生成する場合を示したが、この場合に限らず、ルックアップテーブルについては任意の態様であってもよい。
【0052】
例えば、全てのサブベクトルに対してクラスタリングし、一つのルックアップテーブルが生成されてもよい。上述した例では、例えば、第1サブベクトル、第2サブベクトル、第3サブベクトル、及び第4サブベクトルの4つのサブベクトル全体を対象にクラスタリングし、一つのルックアップテーブルが生成されてもよい。
【0053】
また、個々のサブベクトルを部分的にマージして複数のクラスごとに、ルックアップテーブルが生成されてもよい。例えば、分散が類似しているサブベクトルをマージして複数のクラスを形成し、複数のクラスごとに、ルックアップテーブルが生成されてもよい。上述した例では、例えば、第1サブベクトル及び第3サブベクトルの2つのサブベクトの分散が類似し、第2サブベクトル及び第4サブベクトルの2つのサブベクトの分散が類似している場合、第1サブベクトル及び第3サブベクトルをマージして第1クラスとし、第2サブベクトル及び第4サブベクトルをマージして第2クラスとしてもよい。この場合、第1クラスのルックアップテーブル(コードブック情報)と、第2クラスのルックアップテーブル(コードブック情報)との2つのルックアップテーブルが生成されてもよい。
【0054】
(転置)
上述したデータの保持は一例に過ぎず、情報処理装置100は、効率的なデータ参照等が可能となるように、種々の態様によりデータを保持してもよい。例えば、情報処理装置100は、転置したデータを保持してもよい。この点について、
図3を用いて説明する。
図3は、第1の実施形態に係るデータの一例を示す図である。
【0055】
例えば、ノード情報INF1~INF4に示すようにデータを保持し、ノード情報INF1~INF4を順次処理した場合、
図2のステップS14に示すように、ルックアップテーブルであるコードブック情報TB1~TB4を繰り返し参照することとなる。
【0056】
そこで、ステップS15に示すように、ノード情報INF1~INF4を転置した転置データTR1~TR4が生成される。例えば、情報処理装置100は、ノード情報INF1~INF4を転置した転置データTR1~TR4を生成する。
【0057】
図3では、ノード情報INF1~INF4のうち、ノードN9、N12、N54、N85の第1サブベクトルに対応するコードブックの一覧である第1データTR1が生成される。具体的には、ノードN9の第1サブベクトルに対応するコードブックCD12、ノードN12の第1サブベクトルに対応するコードブックCD14、ノードN54の第1サブベクトルに対応するコードブックCD13、及びノードN85の第1サブベクトルに対応するコードブックCD18の一覧である第1データTR1が生成される。
【0058】
同様に、ノード情報INF1~INF4のうち、ノードN9、N12、N54、N85の第2サブベクトルに対応するコードブックの一覧である第2データTR2が生成される。また、ノード情報INF1~INF4のうち、ノードN9、N12、N54、N85の第3サブベクトルに対応するコードブックの一覧である第3データTR3が生成される。ノード情報INF1~INF4のうち、ノードN9、N12、N54、N85の第4サブベクトルに対応するコードブックの一覧である第4データTR4が生成される。
【0059】
なお、各転置データTR1~TR4の一覧のうち、何番目のデータがどのノードに対応するかの対応付けを示す対応付情報が生成される。
図3の例では、各転置データTR1~TR4の一覧のうち、1番目(最初)のデータがノードN9に対応し、2番目のデータがノードN12に対応し、3番目のデータがノードN54に対応し、4番目(最後)のデータがノードN85に対応することを示す対応付情報が生成される。情報処理装置100は、対応付情報を参照することにより、各転置データTR1~TR4の一覧の各データが、どのノードに対応するかを特定することができる。例えば、情報処理装置100は、対応付情報を生成する。
【0060】
情報処理装置100は、ノード情報INF1~INF4を転置した転置データTR1~TR4を用いて処理を行う。例えば、情報処理装置100は、転置データTR1を用いてルックアップテーブルを参照する場合、コードブック情報TB1のみを参照することとなり、1つのコードブック情報TB1のみを参照することとなる。同様に、情報処理装置100は、転置データTR2を用いてルックアップテーブルを参照する場合、コードブック情報TB2のみを参照することとなり、1つのコードブック情報TB2のみを参照することとなる。転置データTR3、TR4についても同様に1つのコードブック情報のみを参照することとなる。これにより、情報処理装置100は、効率的にデータを参照することができるため、効率的な検索処理を可能にすることができる。
【0061】
このように、一括距離計算時にサブクラス(サブベクトル等)ごとのルックアップテーブルの参照するように、ノードの近傍オブジェクト(接続ノード)のデータを転置し、サブクラスごとにまとめ上げた順番でデータをノードにもつことで、参照の局所性がさらに高まり、高速化が可能となる。
【0062】
なお、
図3では説明を簡単にするために、4つのノードを対象として転置データを生成する場合を示すが、転置データを生成する単位(ノードの数)は、情報処理装置100の仕様に基づいて決定される。例えば、情報処理装置100の一括処理可能単位が「4」である場合、
図3と同様の処理となるが、一括処理可能単位が「16」である場合、16個のノードを一つの単位として転置データが生成される。また、一括処理可能単位が「32」である場合、32個のノードを一つの単位として転置データが生成される。このように、情報処理装置100がSIMDにより一括して処理できる数(一括処理可能単位)に応じて生成される転置データを用いることで、情報処理装置100は、効率的にデータを参照することができるため、効率的な検索処理を可能にすることができる。
【0063】
例えば、上述のような検索処理時の時間の多くは距離計算であるが、距離計算は上記のようなSIMDによる並列計算により高速化を図ることができる。このように距離計算を並列化した場合、オブジェクトデータをフェッチする時間が検索処理を占めることになる。このフェッチ時間を削減することができれば、さらなる高速化が実現される。なお、データをフェッチする時間を削減するにはプリフェッチを行う方法があるが、限界がある。
【0064】
一方、情報処理装置100は、上述のように参照の局所性を高め、効率的にデータを参照することを可能にすることにより、データのフェッチを抑制し、さらなる高速化を実現することができる。
【0065】
(検索結果)
なお、上述した第2距離(真の距離)による検索結果を返す場合には、以下の第1の方法及び第2の方法の2つの方法が考えられる。
【0066】
例えば、第1の方法としては、検索数を指定された検索数より多く探索し、探索終了時に、真の距離計算を行って距離でソートし、指定された検索数のオブジェクトを検索結果としてもよい。この場合、情報処理装置100は、指定された検索数(「第1数」ともいう)よりも多い数(「拡張検索数」ともいう)のノードを抽出するように、拡張検索数(「第2数」ともいう)を検索数として設定し、
図11に示すような検索処理を行うことにより、拡張検索数のノード、すなわち指定された検索数よりも多い数のノードを近傍候補ノードとして抽出する。そして、情報処理装置100は、近傍候補ノードを対象として、第2距離(真の距離)を算出し、近傍候補ノードのうち、第2距離が短い方から第1数のノードを検索クエリの近傍のノードとして抽出する。
【0067】
また、例えば、第2の方法としては、探索中に、第1距離(近似距離)に基づいて、ノード(オブジェクト)が探索範囲内または検索範囲内に入った場合のみに、第2距離(真の距離)を計算し、近似距離を真の距離で置き換えることで、真の距離による検索結果を返してもよい。
【0068】
ここでいう、検索範囲は、
図11中の「r」により規定される範囲であり、探索範囲は、
図11中の検索範囲係数「ε」を用いた「r(1+ε)」により規定される範囲である。例えば、検索範囲に入った場合に第2距離(真の距離)を計算する場合、情報処理装置100は、ノードの第1距離(近似距離)が「r」以下となった場合に、そのノードの第2距離(真の距離)を算出する。また、探索範囲に入った場合に第2距離(真の距離)を計算する場合、情報処理装置100は、ノードの第1距離(近似距離)が「r(1+ε)」以下となった場合に、そのノードの第2距離(真の距離)を算出する。
【0069】
例えば、精度を高める場合、探索範囲に入った場合を条件としてもよい。また、処理の高速化を求める場合、検索範囲に入った場合を条件としてもよい。なお、上記は一例に過ぎず、いずれを条件とするかは、検索範囲係数「ε」の値や処理の目的などに応じて適宜設定されてもよい。
【0070】
(ベクトル量子化)
なお、情報処理装置100は、特許文献3に示すように、2段階のベクトル量子化を行ってもよい。そして、情報処理装置100は、下記の式(1)により、検索クエリと各ノードとの距離を算出してもよい。
【0071】
【0072】
ここで、上記式(1)中の左辺の値は、例えば、検索クエリとノードとの間の二乗距離を示す。また、例えば、上記式(1)中の「x」は、クエリに対応する。また、例えば、上記式(1)中の「y」は、ノードに対応する。また、例えば、上記式(1)の右辺中の「qc(y)」は、「y」の代表ベクトル(セントロイド)を示す。例えば、情報処理装置100は、上記式(1)中の「y」について、ノードのベクトルデータを有しない場合は、各ノードが属する部分領域のセントロイドの数値を用いてもよい。また、例えば、「y-qc(y)」は、残差ベクトルを示す。また、例えば、上記式(1)の右辺中の「qp」は、所定の量子化器(関数)を示す。
【0073】
また、例えば、上記式(1)の右辺中の「j」は、分割された空間の数であってもよい。例えば、
図1の例では、上記式(1)の右辺中の「j」は、分割された空間の数「4」であってもよい。また、例えば、上記式(1)の右辺中の「u
j()」は、括弧中のベクトル間の部分残差ベクトルを示す。例えば、情報処理装置100は、上記式(1)を用いて、各部分空間におけるクエリとノードとの間の二乗距離を算出し、合算することにより、クエリとノードとの距離を算出してもよい。
【0074】
〔1-2.情報処理システムの構成〕
図4に示すように、情報処理システム1は、端末装置10と、情報提供装置50と、情報処理装置100とが含まれる。端末装置10と、情報提供装置50と、情報処理装置100とは所定のネットワークNを介して、有線または無線により通信可能に接続される。
図4は、第1の実施形態に係る情報処理システムの構成例を示す図である。なお、
図4に示した情報処理システム1には、複数台の端末装置10や、複数台の情報提供装置50や、複数台の情報処理装置100が含まれてもよい。
【0075】
端末装置10は、ユーザによって利用される情報処理装置である。端末装置10は、ユーザによる種々の操作を受け付ける。なお、以下では、端末装置10をユーザと表記する場合がある。すなわち、以下では、ユーザを端末装置10と読み替えることもできる。なお、上述した端末装置10は、例えば、スマートフォンや、タブレット型端末や、ノート型PC(Personal Computer)や、デスクトップPCや、携帯電話機や、PDA(Personal Digital Assistant)等により実現される。
【0076】
情報提供装置50は、ユーザ等に種々の情報提供を行うための情報が格納された情報処理装置である。例えば、情報提供装置50は、ウェブサーバ等の種々の外部装置から収集した文字情報等に基づくオブジェクトIDが格納される。例えば、情報提供装置50は、ユーザ等に画像検索サービスを提供する情報処理装置である。例えば、情報提供装置50は、画像検索サービスを提供するための各情報が格納される。例えば、情報提供装置50は、画像検索サービスの対象となる画像に対応するベクトル情報を情報処理装置100に提供する。また、情報提供装置50は、クエリを情報処理装置100に送信することにより、情報処理装置100からクエリに対応する画像を示すオブジェクトID等を受信する。
【0077】
情報処理装置100は、検索サービスを提供するコンピュータである。情報処理装置100は、検索クエリに対応する指定された検索数のオブジェクトを検索結果として提供する。情報処理装置100は、検索対象となるノード(オブジェクト)がエッジで連結されたグラフを用いて、検索クエリの近傍のノード(オブジェクト)を検索結果として提供する。情報処理装置100は、複数のオブジェクトの各々に対応するノード群がエッジにより連結されたグラフを用いて、検索クエリの近傍のノードを検索する検索処理において、所定の基準により選択された複数のノードと検索クエリとの距離を、ベクトル量子化がされた複数のノードのベクトル情報を用いて算出する。
【0078】
例えば、情報処理装置100は、端末装置10からクエリ(検索クエリ)を受信すると、検索クエリに類似する対象(オブジェクト)を検索し、検索結果を端末装置に提供する。また、例えば、情報処理装置100が端末装置に提供するデータは、画像情報等のデータ自体であってもよいし、URL(Uniform Resource Locator)等の対応するデータを参照するための情報であってもよい。また、検索クエリや検索対象(オブジェクト)は、画像、音声、テキストデータなど、如何なる種類のデータであってもよい。
【0079】
〔1-3.情報処理装置の構成〕
次に、
図5を用いて、第1の実施形態に係る情報処理装置100の構成について説明する。
図5は、第1の実施形態に係る情報処理装置100の構成例を示す図である。
図5に示すように、情報処理装置100は、通信部110と、記憶部120と、制御部130とを有する。なお、情報処理装置100は、情報処理装置100の管理者等から各種操作を受け付ける入力部(例えば、キーボードやマウス等)や、各種情報を表示するための表示部(例えば、液晶ディスプレイ等)を有してもよい。
【0080】
(通信部110)
通信部110は、例えば、NIC(Network Interface Card)等によって実現される。そして、通信部110は、ネットワーク(例えば
図4中のネットワークN)と有線または無線で接続され、端末装置10や情報提供装置50との間で情報の送受信を行う。
【0081】
(記憶部120)
記憶部120は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。第1の実施形態に係る記憶部120は、
図5に示すように、オブジェクト情報記憶部121と、グラフ情報記憶部122と、量子化情報記憶部123と、コードブック情報記憶部124とを有する。
【0082】
(オブジェクト情報記憶部121)
第1の実施形態に係るオブジェクト情報記憶部121は、オブジェクトに関する各種情報を記憶する。例えば、オブジェクト情報記憶部121は、オブジェクトIDやベクトルデータを記憶する。
図6は、第1の実施形態に係るオブジェクト情報記憶部の一例を示す図である。
図6に示すオブジェクト情報記憶部121は、「オブジェクトID」、「ベクトル情報」といった項目が含まれる。
【0083】
「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。また、「ベクトル情報」は、オブジェクトIDにより識別されるオブジェクトに対応するベクトル情報を示す。すなわち、
図6の例では、オブジェクトを識別するオブジェクトIDに対して、オブジェクトに対応するベクトルデータ(ベクトル情報)が対応付けられて登録されている。
【0084】
例えば、
図6の例では、オブジェクトID「OB1」により識別されるオブジェクト(対象)は、「10,24,51,2・・・」の多次元のベクトル情報が対応付けられることを示す。
【0085】
なお、オブジェクト情報記憶部121は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
【0086】
(グラフ情報記憶部122)
第1の実施形態に係るグラフ情報記憶部122は、グラフに関する各種情報を記憶する。例えば、グラフ情報記憶部122は、生成したグラフを記憶する。
図7は、第1の実施形態に係るグラフ情報記憶部の一例を示す図である。
図7に示すグラフ情報記憶部122は、「ノードID」、「オブジェクトID」、および「接続ノード情報」といった項目を有する。
【0087】
「ノードID」は、グラフにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。なお、ノードIDとオブジェクトIDが共通である場合、「ノードID」にオブジェクトIDが記憶され、グラフ情報記憶部122に「オブジェクトID」の項目は含まれてなくてもよい。例えば、オブジェクトIDとノードIDとして用いる場合、「ノードID」にオブジェクトIDが記憶され、グラフ情報記憶部122に「オブジェクトID」の項目は含まれてなくてもよい。
【0088】
また、「接続ノード情報」は、対応するノードから辿ることができるノード(参照先のノード)に関する情報を示す。例えば、「接続ノード情報」には、「参照先」といった情報が含まれる。「参照先」は、エッジにより連結され、そのノードから辿ることができる参照先(ノード)を識別するための情報を示す。すなわち、
図7の例では、ノードを識別するノードID(オブジェクトID)に対して、そのノードからエッジにより辿ることができる参照先(ノード)が対応付けられて登録されている。なお、「接続ノード情報」には、参照先に接続されるエッジを識別するための情報(エッジID)等が含まれてもよい。
【0089】
図7の例では、ノードID「N1」により識別されるノード(ノードN1)は、オブジェクトID「OB1」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN1からは、ノードID「N4」により識別されるノード(ノードN4)にエッジが連結されており、ノードN1からノードN4へ辿ることができることを示す。
【0090】
また、ノードID「N2」により識別されるノード(ノードN2)は、オブジェクトID「OB2」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN2からは、ノードID「N6」により識別されるノード(ノードN6)にエッジが連結されており、ノードN2からノードN6へ辿ることができることを示す。
【0091】
また、ノードID「N7」により識別されるノード(ノードN7)は、オブジェクトID「OB7」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN7からは、ノードN9、N12、N54、N85にエッジが連結されており、ノードN2からノードN9、N12、N54、N85の各々へ辿ることができることを示す。
【0092】
なお、グラフ情報記憶部122は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、グラフ情報記憶部122は、各ノード(ベクトル)間を連結するエッジの長さが記憶されてもよい。すなわち、グラフ情報記憶部122は、各ノード(ベクトル)間の距離を示す情報が記憶されてもよい。なお、グラフ情報記憶部122は、上記に限らず、種々のデータ構造によりグラフ情報を記憶してもよい。
【0093】
また、グラフは、クエリを入力とし、グラフ中のエッジを辿ることによりノードを探索し、クエリに類似するノードを抽出し出力するプログラムモジュールを含んでもよい。すなわち、グラフは、グラフを用いて検索処理を行うプログラムモジュールとしての利用が想定されるものであってもよい。例えば、グラフGR1は、クエリとしてベクトルデータが入力された場合に、そのベクトルデータに類似するベクトルデータに対応するノードをグラフ中から抽出し、出力するプログラムであってもよい。例えば、グラフGR1は、クエリ画像に対応する類似画像を検索するプログラムモジュールとして利用されるデータであってもよい。例えば、グラフGR1は、入力されたクエリに基づいて、グラフにおいてそのクエリに類似するノードを抽出し、出力するよう、コンピュータを機能させる。
【0094】
(量子化情報記憶部123)
第1の実施形態に係る量子化情報記憶部123は、割当処理に関する各種情報を記憶する。
図8は、第1の実施形態に係る量子化情報記憶部の一例を示す図である。
図8の例では、量子化情報記憶部123には、「ノードID」、「オブジェクトID」、および「量子化情報」といった項目を有する。
【0095】
「ノードID」は、グラフにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。なお、ノードIDとオブジェクトIDが共通である場合、「ノードID」にオブジェクトIDが記憶され、量子化情報記憶部123に「オブジェクトID」の項目は含まれてなくてもよい。
【0096】
また、「量子化情報」は、各ノード(オブジェクト)の量子化されたベクトルの情報を示す。例えば、「量子化情報」には、「要素」、「コードブックID」といった情報が含まれる。「要素」は、対応するオブジェクトのベクトルにおける配置を示す。
図8の例では、「要素」には、「#1」、「#2」、「#3」、「#4」が含まれる場合を示す。この場合、各ノード(オブジェクト)のベクトルは4分割され、各分割された部分ベクトルがコードブックにより量子化されることを示す。なお、分割数は4に限らず、例えば分割数が6の場合、「要素」には、「#1」、「#2」、「#3」、「#4」、「#5」、「#6」が含まれる。「コードブックID」は、各要素(部分ベクトル)に対応するコードブックを識別するための情報を示す。
【0097】
図8の例では、ノードN9(オブジェクトOB9)のベクトルは、4分割された部分ベクトルのうち、先頭の部分ベクトルがコードブックID「CD12」により識別されるコードブック(コードブックCD12)により量子化されることを示す。また、ノードN9(オブジェクトOB9)のベクトルは、4分割された部分ベクトルのうち、先頭から2番目の部分ベクトルがコードブックID「CD23」により識別されるコードブック(コードブックCD23)により量子化されることを示す。
【0098】
また、ノードN9(オブジェクトOB9)のベクトルは、4分割された部分ベクトルのうち、先頭から3番目の部分ベクトルがコードブックID「CD35」により識別されるコードブック(コードブックCD35)により量子化されることを示す。また、ノードN9(オブジェクトOB9)のベクトルは、4分割された部分ベクトルのうち、先頭から4番目(すなわち最後尾)の部分ベクトルがコードブックID「CD47」により識別されるコードブック(コードブックCD47)により量子化されることを示す。
【0099】
なお、量子化情報記憶部123は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
【0100】
(コードブック情報記憶部124)
第1の実施形態に係るコードブック情報記憶部124は、コードブックに関する各種情報を記憶する。例えば、コードブック情報記憶部124は、コードブックIDや各コードブックのベクトル情報を記憶する。
図9は、第1の実施形態に係るコードブック情報記憶部の一例を示す図である。
図9の例では、コードブック情報記憶部124は、各コードブックとベクトルとの対応付けを示すルックアップテーブルを記憶する場合を一例として示す。
【0101】
コードブック情報記憶部124は、4分割された部分ベクトルのうち、先頭の部分ベクトルを量子化するために用いるコードブック情報TB1、4分割された部分ベクトルのうち、先頭から2番目の部分ベクトルを量子化するために用いるコードブック情報TB2を記憶する。また、コードブック情報記憶部124は、4分割された部分ベクトルのうち、先頭から3番目の部分ベクトルを量子化するために用いるコードブック情報TB3、4分割された部分ベクトルのうち、先頭から4番目(すなわち最後尾)の部分ベクトルを量子化するために用いるコードブック情報TB4等を記憶する。
【0102】
図9の例では、コードブック情報TB1には、コードブックID「CD11」により識別されるコードブック(コードブックCD11)やコードブックID「CD12」により識別されるコードブック(コードブックCD12)等のコードブック情報を記憶する。例えば、コードブックCD11は、「5,13・・・」の多次元のベクトル情報が対応付けられることを示す。また、コードブックCD12は、「27,51・・・」の多次元のベクトル情報が対応付けられることを示す。
【0103】
なお、コードブック情報記憶部124は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、コードブック情報記憶部124は、各コードブックと検索クエリとの差分(距離)を示す情報を記憶してもよい。
【0104】
(制御部130)
図5の説明に戻って、制御部130は、コントローラ(controller)であり、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)やGPU(Graphics Processing Unit)等によって、情報処理装置100内部の記憶装置に記憶されている各種プログラム(情報処理プログラムの一例に相当)がRAMを作業領域として実行されることにより実現される。また、制御部130は、コントローラであり、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積回路により実現される。
【0105】
図5に示すように、制御部130は、取得部131と、生成部132と、検索処理部133と、提供部134とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部130の内部構成は、
図5に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
【0106】
(取得部131)
取得部131は、各種情報を取得する。例えば、取得部131は、記憶部120から各種情報を取得する。例えば、取得部131は、オブジェクト情報記憶部121や、グラフ情報記憶部122や、量子化情報記憶部123や、コードブック情報記憶部124等から各種情報を取得する。また、取得部131は、各種情報を外部の情報処理装置から取得する。取得部131は、端末装置10や情報提供装置50から各種情報を取得する。
【0107】
取得部131は、グラフを取得する。例えば、情報処理装置100は、
図1中の空間情報SP1を取得してもよい。例えば、情報処理装置100は、情報提供装置50等の外部装置からグラフを取得してもよい。
【0108】
取得部131は、データ検索の対象となる複数のオブジェクトに対する検索クエリを取得する。例えば、取得部131は、検索クエリQE1に関する情報を取得する。例えば、取得部131は、画像検索に関する検索クエリを取得する。例えば、取得部131は、利用する端末装置10からクエリを取得する。例えば、取得部131は、利用する端末装置10からクエリを受け付けた情報提供装置50からクエリを取得する。
【0109】
(生成部132)
生成部132は、各種情報を生成する。例えば、生成部132は、記憶部120に記憶された情報(データ)から各種情報(データ)を生成する。例えば、生成部132は、オブジェクト情報記憶部121や、グラフ情報記憶部122や、量子化情報記憶部123や、コードブック情報記憶部124等に記憶された情報(データ)から各種情報を生成する。
【0110】
生成部132は、グラフ情報記憶部122に示すようなグラフを生成してもよい。例えば、生成部132は、空間情報SP1を生成する。また、生成部132は、量子化情報記憶部123に示すようなベクトル量子化に関する情報を生成してもよい。例えば、生成部132は、ノードN1(オブジェクトOB1)等の各オブジェクトがベクトル量子化された情報を生成する。また、生成部132は、コードブック情報記憶部124に示すようなコードブックに関する情報を生成してもよい。生成部132は、コードブックのルックアップテーブルを生成してもよい。例えば、生成部132は、コードブック情報TB1~TB4のような、コードブックに関する情報を生成する。なお、情報処理装置100がグラフ情報記憶部122、量子化情報記憶部123、コードブック情報記憶部124に示す情報を、情報提供装置50等の外部装置から取得する場合、情報処理装置100は、生成部132を有しなくてもよい。
【0111】
(検索処理部133)
検索処理部133は、オブジェクトに関する検索サービスを提供する。検索処理部133は、各種情報を探索する。検索処理部133は、各種情報を検索する。例えば、検索処理部133は、グラフを探索することにより、オブジェクトを検索する。例えば、検索処理部133は、取得部131により取得されたクエリが取得された場合、グラフを探索することにより、クエリに類似するオブジェクトを検索する。例えば、検索処理部133は、グラフを探索することにより、クエリに類似するオブジェクトを抽出する。例えば、検索処理部133は、
図11に示すような処理手順に基づいて、グラフを探索することにより、クエリに類似するオブジェクトを抽出する。なお、情報処理装置100は、検索サービスを提供しない場合、検索処理部133を有しなくてもよい。
【0112】
検索処理部133は、検索処理において各種情報を選択する。検索処理部133は、検索処理において各種情報を抽出する。検索処理部133は、検索処理において各種情報を判定する。検索処理部133は、検索処理において各種情報を決定する。検索処理部133は、検索処理において各種情報を変更する。検索処理部133は、検索処理において各種情報を更新する。
【0113】
検索処理部133は、複数のオブジェクトの各々に対応するノード群がエッジにより連結されたグラフを用いて、検索クエリの近傍のノードを検索する検索処理において、所定の基準により選択された複数のノードと検索クエリとの距離を、ベクトル量子化がされた複数のノードのベクトル情報を用いて算出する。検索処理部133は、複数のノードと検索クエリとの距離の算出を並列化して一括で行う。検索処理部133は、情報処理装置100の仕様に基づいて決定される一括処理数の複数のノードと検索クエリとの距離の算出を並列処理する。
【0114】
検索処理部133は、複数のノードの各々が対応する代表ベクトルに対応付けられたコードブックを用いて、複数のノードと検索クエリとの距離を算出する。検索処理部133は、一のノードからのエッジが連結された複数のノードと検索クエリとの距離を算出する。検索処理部133は、複数のノードと複数のノードの各々が対応付けられた代表ベクトルを示す参照用情報が一のノードに対応付けて記憶されたノード情報を用いて、複数のノードと検索クエリとの距離を算出する。
【0115】
検索処理部133は、直積量子化により、各々が複数の部分ベクトルに分割された複数のノードのベクトル情報を用いて、複数のノードと検索クエリとの距離を算出する。検索処理部133は、複数のノードの各々が分割された複数の部分ベクトルの分割位置ごとのベクトルに対応する代表ベクトルに対応付けられた複数のコードブックを用いて、複数のノードと検索クエリとの距離を算出する。検索処理部133は、複数のノードと複数のノードの各々の複数の部分ベクトルの各々が対応付けられた代表ベクトルを示す参照用情報が一のノードに対応付けて記憶されたノード情報を用いて、複数のノードと検索クエリとの距離を算出する。
【0116】
検索処理部133は、複数のノードの各々に、各ノードの複数の部分ベクトルの各々が対応付けられた代表ベクトルの一覧が対応付けられた参照用情報を用いて、複数のノードと検索クエリとの距離を算出する。検索処理部133は、複数のノードの各々の複数の部分ベクトルの各々が対応する代表ベクトルが、分割位置ごとに一覧で並ぶ転置情報と、複数のノードの各々が一覧で対応する位置を示す対応付情報とを含む参照用情報を用いて、複数のノードと検索クエリとの距離を算出する。検索処理部133は、複数のノードの各々の複数の部分ベクトルの各々が対応する代表ベクトルに対応付けられた一のコードブックを用いて、複数のノードと検索クエリとの距離を算出する。
【0117】
検索処理部133は、検索処理において処理対象となったノードのうち、所定のノードを対象として、ベクトル量子化がされた距離である第1距離とは異なり、ベクトル量子化がされていない第2距離を算出する。検索処理部133は、検索処理において検索クエリの近傍のノードとして抽出するノードの第1数よりも多い数である第2数のノードを近傍候補ノードとして抽出し、近傍候補ノードを対象として第2距離を算出する。検索処理部133は、近傍候補ノードのうち、第2距離が短い方から第1数のノードを検索クエリの近傍のノードとして抽出する。
【0118】
検索処理部133は、第1距離が所定の閾値以内であるノードを対象として第2距離を算出する。検索処理部133は、近傍のノードとして抽出する対象範囲を示す検索範囲内のノードを対象として第2距離を算出する。検索処理部133は、検索処理の対象範囲を示す探索範囲内のノードを対象として第2距離を算出する。
【0119】
(提供部134)
提供部134は、各種情報を提供する。例えば、提供部134は、端末装置10や情報提供装置50に各種情報を送信する。例えば、提供部134は、検索クエリに対応するオブジェクトIDを検索結果として提供する。提供部134は、検索結果を端末装置10へ送信する。提供部134は、検索処理部133により検索されたオブジェクトIDを、検索クエリに対応する検索結果として端末装置10へ提供する。
【0120】
また、提供部134は、検索処理部133により検索されたオブジェクトIDを情報提供装置50へ提供してもよい。例えば、提供部134は、検索処理部133が検索により抽出したオブジェクトIDを情報提供装置50へ提供する。提供部134は、検索処理部133により抽出されたオブジェクトIDをクエリに対応するベクトルを示す情報として情報提供装置50に提供する。
【0121】
〔1-4.情報処理のフロー〕
次に、
図10を用いて、第1の実施形態に係る情報処理システム1による情報処理の手順について説明する。
図10は、第1の実施形態に係る情報処理の一例を示すフローチャートである。
【0122】
図10に示すように、情報処理装置100は、データ検索の対象となる複数のオブジェクトに対する検索クエリを取得する(ステップS101)。
図1の例では、情報処理装置100は、検索クエリQE1を取得する。
【0123】
そして、情報処理装置100は、複数のオブジェクトの各々に対応するノード群がエッジにより連結されたグラフを用いて、検索クエリの近傍のノードを検索する検索処理において、所定の基準により選択された複数のノードと検索クエリとの距離を、ベクトル量子化がされた複数のノードのベクトル情報を用いて算出する(ステップS102)。
図1の例では、情報処理装置100は、複数のノードN9、N12、N54、N85と前記検索クエリQE1との距離を、ベクトル量子化がされた複数のノードN9、N12、N54、N85のベクトル情報を用いて算出する。
【0124】
〔1-5.検索処理例〕
ここで、第1の実施形態に係る検索処理の一例について、
図11を一例として説明する。
図11は、第1の実施形態に係る検索処理の一例を示すフローチャートである。以下に説明する検索処理は、情報処理装置100の検索処理部133によって行われる。また、以下でいうオブジェクトは、ノードと読み替えてもよい。なお、以下では、情報処理装置100(検索処理部133)が検索処理を行う。なお、検索サービスを提供しない場合、情報処理装置100は検索処理部133を有しなくてもよい。以下で説明する処理の検索クエリは、追加ノードや対象ノードやユーザが指定したオブジェクト等であってもよい。
【0125】
ここでは、近傍オブジェクト集合N(G,y)は、ノードyに付与されているエッジにより関連付けられている近傍のオブジェクトの集合である。「G」は、所定のグラフデータ(例えば、空間情報SP1に示すグラフGR1等)であってもよい。例えば、情報処理装置100は、k近傍検索処理を実行する。
【0126】
例えば、情報処理装置100は、超球の半径rを∞(無限大)に設定し(ステップS300)、既存のオブジェクト集合から部分集合Sを抽出する(ステップS301)。例えば、情報処理装置100は、ルートノードとして選択されたオブジェクト(ノード)を部分集合Sとして抽出してもよい。また、例えば、超球とは、検索範囲を示す仮想的な球である。なお、ステップS301において抽出されたオブジェクト集合Sに含まれるオブジェクトは、同時に検索結果のオブジェクト集合Rの初期集合にも含められる。
【0127】
次に、情報処理装置100は、オブジェクト集合Sに含まれるオブジェクトの中で、検索クエリオブジェクトをyとするとオブジェクトyとの距離が最も短いオブジェクトを抽出し、オブジェクトsとする(ステップS302)。例えば、情報処理装置100は、ルートノードとして選択されたオブジェクト(ノード)のみがSの要素の場合には、結果的にルートノードがオブジェクトsとして抽出される。次に、情報処理装置100は、オブジェクトsをオブジェクト集合Sから除外する(ステップS303)。
【0128】
次に、情報処理装置100は、オブジェクトsとオブジェクトyとの距離d(s,y)がr(1+ε)を超えるか否かを判定する(ステップS304)。ここで、εは拡張要素であり、r(1+ε)は、探索範囲(この範囲内のノードのみを探索する。検索範囲よりも大きくすることで精度を高めることができる)の半径を示す値である。オブジェクトsとオブジェクトyとの距離d(s,y)がr(1+ε)を超える場合(ステップS304:Yes)、情報処理装置100は、オブジェクト集合Rをオブジェクトyの近傍オブジェクト集合として出力し(ステップS305)、処理を終了する。
【0129】
オブジェクトsと検索クエリオブジェクトyとの距離d(s,y)がr(1+ε)を超えない場合(ステップS304:No)、情報処理装置100は、オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトの中からオブジェクト集合Cに含まれないオブジェクトを一つ選択し、選択したオブジェクトuを、オブジェクト集合Cに格納する(ステップS306)。オブジェクト集合Cは、重複検索を回避するために便宜上設けられるものであり、処理開始時には空集合に設定される。
【0130】
次に、情報処理装置100は、オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下であるか否かを判定する(ステップS307)。オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下である場合(ステップS307:Yes)、情報処理装置100は、オブジェクトuをオブジェクト集合Sに追加する(ステップS308)。また、オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下ではない場合(ステップS307:No)、情報処理装置100は、ステップS309の判定(処理)を行う。
【0131】
次に、情報処理装置100は、オブジェクトuとオブジェクトyとの距離d(u,y)がr以下であるか否かを判定する(ステップS309)。オブジェクトuとオブジェクトyとの距離d(u,y)がrを超える場合(ステップS309:No)、情報処理装置100は、ステップS315の判定(処理)を行う。すなわち、オブジェクトuとオブジェクトyとの距離d(u,y)がr以下ではない場合、情報処理装置100は、ステップS315の判定(処理)を行う。
【0132】
オブジェクトuとオブジェクトyとの距離d(u,y)がr以下である場合(ステップS309:Yes)、情報処理装置100は、オブジェクトuをオブジェクト集合Rに追加する(ステップS310)。そして、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクト数がksを超えるか否かを判定する(ステップS311)。所定数ksは、任意に定められる自然数である。例えば、ksは、検索数や抽出対象数であってもよい。また、例えば、範囲検索等において抽出するオブジェクト数の上限を設けない場合、ksは、無限大に設定されてもよい。例えば、ks=4等であってもよい。オブジェクト集合Rに含まれるオブジェクト数がksを超えない場合(ステップS311:No)、情報処理装置100は、ステップS313の判定(処理)を行う。
【0133】
オブジェクト集合Rに含まれるオブジェクト数がksを超える場合(ステップS311:Yes)、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長い(遠い)オブジェクトを、オブジェクト集合Rから除外する(ステップS312)。
【0134】
次に、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクト数がksと一致するか否かを判定する(ステップS313)。オブジェクト集合Rに含まれるオブジェクト数がksと一致しない場合(ステップS313:No)、情報処理装置100は、ステップS315の判定(処理)を行う。また、オブジェクト集合Rに含まれるオブジェクト数がksと一致する場合(ステップS313:Yes)、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長い(遠い)オブジェクトと、オブジェクトyとの距離を、新たなrに設定する(ステップS314)。
【0135】
そして、情報処理装置100は、オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えたか否かを判定する(ステップS315)。オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えていない場合(ステップS315:No)、情報処理装置100は、ステップS306に戻って処理を繰り返す。
【0136】
オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えた場合(ステップS315:Yes)、情報処理装置100は、オブジェクト集合Sが空集合であるか否かを判定する(ステップS316)。オブジェクト集合Sが空集合でない場合(ステップS316:No)、情報処理装置100は、ステップS302に戻って処理を繰り返す。また、オブジェクト集合Sが空集合である場合(ステップS316:Yes)、情報処理装置100は、オブジェクト集合Rを出力し、処理を終了する(ステップS317)。例えば、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクト(ノード)を追加ノード(入力オブジェクトy)に対応する近傍ノードとして選択してもよい。例えば、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクト(ノード)を対象ノード(入力オブジェクトy)に対応する近傍ノードとして抽出(選択)してもよい。また、例えば、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクト(ノード)を検索クエリ(入力オブジェクトy)に対応する検索結果として、検索を行った端末装置等へ提供してもよい。
【0137】
〔2.第2の実施形態〕
ここから、第2の実施形態について説明する。第2の実施形態は、クラスタリングなどにより近傍オブジェクトをグルーピングし、各グループ(以下「ブロブ」ともいう)を一括して距離計算を行う対象とする。すなわち、第2の実施形態では、ブロブ単位で一括距離計算を行う。なお、第1の実施形態と同様の点については、適宜説明を省略する。第2の実施形態においては、情報処理システム1は、情報処理装置100に代えて、情報処理装置100Aを有する。
【0138】
〔2-1.情報処理〕
まず、
図12を用いて、第2の実施形態に係る情報処理の概要を説明する。
図12は、第2の実施形態に係る情報処理の一例を示す図である。
【0139】
図12の例では、情報処理装置100Aは、空間情報SP21に示すようなグラフGR21を取得済みであるものとする。例えば
図1中の空間情報SP21は、ユークリッド空間であってもよい。例えば、空間情報SP21は、オブジェクトのベクトルの次元数に対応し、100次元や1000次元等の多次元空間であるものとする。なお、
図12の例では、説明を簡単にするために直積量子化が行われていない図を基に説明するが、
図1と同様にベクトル(空間)の直積量子化が行われてもよい。
【0140】
まず、
図12で示す各情報について説明する。
図12の空間情報SP21中のノードである白丸(〇)間を接続する点線がノード間を連結するエッジを示す。
図12では、
図1と同様に無向エッジを例として示すが、グラフGR21のエッジは、無向エッジに限らず、有向エッジであってもよい。なお、ノートやエッジについては
図1と同様であるため詳細な説明は省略する。
【0141】
図12の空間情報SP21において、直線で囲まれた領域はクラスタリングなどで近傍のオブジェクトがまとめ上げられた(グループ化された)ものであり、領域をブロブと称する。以下で示す例ではブロブが一括距離計算の処理単位となる。
図12は、ブロブBL1~BL10の10個の領域(ブロブ)にクラスタリングされた場合を示す。例えば、ブロブBL1は、ノードN7、N9、N85、N126等の複数のノードが属するブロブであることを示す。なお、ブロブBL1~BL10中の黒い点は、各ブロブのセントロイド(代表ベクトル)を示す。
【0142】
なお、ブロブBL1~BL10は、クラスタリング等に関する種々の手法を適宜用いて生成される。例えば、ブロブに分類するためのクラスタリングは、k-meansクラスタリングでもよい。また、例えば、ブロブに分類するためのクラスタリングは、k-meansでの一回のイテレーション(アサイン)で各クラスタの中心座標(平均)で得られたセントロイドを次のイテレーションに使うのではなく、その代わりに、各セントロイドに最も近いオブジェクトにセントロイドを置き換えてから、次のイテレーションを行ってもよい。この場合、k-meansで得られる最終的なクラスタのセントロイドは既存のオブジェクト、つまり、ノードとなる。これにより、クラスタ(ブロブ)と各ノードのエッジ(近傍ノード)が一致する傾向が高まり、検索性能をさらに向上させることができる。
【0143】
図12の例では、情報処理装置100Aは、空間情報SP21に示すように、複数のノード(オブジェクト)をクラスタリングすることにより、分類した複数のブロブBL1~BL10の情報を用いて、検索処理を行う。
【0144】
ここから、検索クエリQE2を対象とする検索処理を説明する。まず、情報処理装置100Aは、検索クエリQE2を取得する(ステップS21)。例えば、情報処理装置100Aは、ユーザが利用する端末装置10(
図4参照)から検索クエリQE2を取得する。
【0145】
そして、情報処理装置100Aは、検索クエリQE2のベクトルと、コードブックのベクトルとの間の距離を算出する。図示は省略するが直積量子化を行っていない場合、情報処理装置100Aは、検索クエリQE2のベクトルと、ベクトル全体を量子化するためのコードブックのベクトルとの間の距離(差分)を算出する。そして、情報処理装置100Aは、検索クエリQE2のベクトルと各コードブックのベクトルとの間の距離(差分)を、各コードブックを識別するための情報に対応付けてコードブック情報TB21として保持する。なお、直積量子化を行っている場合、情報処理装置100Aは、
図1と同様に、
図2のコードブック情報TB1~TB4に示すように、検索クエリQE2の各サブベクトルと各コードブックのベクトルとの間の距離(差分)を算出する。なお、検索クエリのベクトルとコードブックのベクトルとの距離算出は、
図1、
図2等と同様であるため詳細な説明は省略する。
【0146】
情報処理装置100Aは、検索クエリQE2を対象とする検索処理を実行する(ステップS22)。情報処理装置100Aは、検索クエリQE2を対象として、グラフGR21を用いた
図16に示すような検索処理を行うことにより、検索クエリQE2の検索結果を得る。
図16に示す検索処理についての詳細は後述する。情報処理装置100Aは、検索クエリQE2を対象として検索処理を行うことにより、検索数のノードを検索クエリQE2の近傍のノードとして抽出する。
【0147】
情報処理装置100Aは、検索クエリQE2を対象とする検索処理において、各ノードのうち、所定のノードをグラフGR21の検索の起点となるノード(起点ノード)として選択する。
図12の例では、情報処理装置100Aは、起点ノードとして、ノードN9を選択するものとする。
図12の例では、情報処理装置100Aは、例えば、ノードN9を処理対象として検索処理を開始する。
【0148】
ここで、情報処理装置100Aは、検索クエリQE2を対象とする検索処理において、処理対象となるノードが属するブロブに属する複数のノードと検索クエリとの距離を並列化して算出する(ステップS23)。
図12では、情報処理装置100Aは、一括処理情報LT2に示すように、処理対象となるノードN9が属するブロブBL1に属するノードであるノードN7、N9、N85、N126等については、検索クエリQE2との距離を並列化して算出する。
【0149】
情報処理装置100Aは、コードブック情報TB21が示す各コードブックと検索クエリQE2との間の距離を用いて、ノードN7、N9、N85、N126の各々と検索クエリQE2との距離を算出する。例えば、情報処理装置100Aは、コードブック情報TB21を参照して、ノードN7のベクトルに対応するコードブックの距離を、ノードN7と検索クエリQE2との距離として算出する。なお、直積量子化が行われている場合の距離算出は、
図1、
図2等と同様であるため詳細な説明は省略する。
【0150】
なお、一括処理可能単位については、情報処理装置100の場合と同様に、情報処理装置100Aの仕様に基づいて決定される。例えば、情報処理装置100AがSIMDにより一括して処理できる数(一括処理可能単位)が「4」である場合、
図1と同様に、4個のノードを対象として距離を並列化して算出する。例えば、情報処理装置100Aは、SIMDの演算に関する並列化により、ノードN7、N9、N85、N126の各々と検索クエリQE2との距離を一括して算出する。これにより、情報処理装置100Aは、距離計算を並列化することにより、距離計算を高速化することでき、効率的な検索処理を可能にすることができる。また、情報処理装置100Aは、グラフGR21を用いて、ノードN7からのエッジが接続されたノード(例えばノードN12、N64)を辿り、それらのノードが属するブロブ(例えばブロブBL2、BL3)を対象とした一括距離計算を行って、検索処理を行う。なお、情報処理装置100Aは、検索処理において、同じブロブが繰り返し一括距離計算の対象となることを抑制するが詳細は後述する。
【0151】
なお、
図12では説明を簡単にするために、4つのノードを対象として距離を並列化して算出する場合を示すが、並列化される数は、情報処理装置100Aの仕様に基づいて決定される。この点についても
図1、
図2等と同様であるため、詳細な説明は省略する。また、情報処理装置100Aは、
図3に示す例と同様に、転置データを用いてもよい。
【0152】
上述のように、情報処理装置100Aは、ベクトル量子化された各ノードのベクトルと検索クエリとの間の近似距離(第2距離)を算出して、第2距離を用いて検索処理を行う事により、効率的な検索処理を可能にすることができる。また、情報処理装置100Aは、並列化可能な数のノードの距離計算を一括して行うことにより、効率的な検索処理を可能にすることができる。上記のように、情報処理装置100Aは、ブロブを一括処理の単位として一括して計算することにより、効率的な検索処理を可能にすることができる。
【0153】
情報処理装置100Aは、検索処理において、グラフGR21を辿り処理対象となるノードを対象に上述した処理を行うことにより、検索数のノードを検索クエリQE2の近傍のノードとして抽出する。例えば、情報処理装置100Aは、情報処理装置100と同様に、上述した第1の方法及び第2の方法のいずれかにより検索結果を得る。
【0154】
上述した処理は一例に過ぎず、情報処理装置100Aは、効率的な検索処理の為に様々な情報や手法を用いて、検索処理を行ってもよい。この点について、各事項について詳述する。例えば、情報処理装置100Aは、各ブロブに属するノードの数が、情報処理装置100がSIMDにより一括して処理できる数(一括処理可能単位)になるように、クラスタリングを行い、ブロブを生成してもよい。
【0155】
また、情報処理装置100Aは、ブロブに関する情報を用いて、重複した処理が行われることを抑制してもよい。情報処理装置100Aは、ブロブ単位にそのブロブの距離計算を行ったかを示すブロブ距離計算フラグ(以下単に「フラグ」ともいう)、および各オブジェクトがどのブロブに属するかを示すテーブルを有してもよい。この場合、情報処理装置100Aは、フラグにより各ブロブが処理済であるか否かを管理してもよい。例えば、情報処理装置100Aは、近傍ノードを逐一処理する直前にノードが属するブロブをテーブルにより特定し、そのブロブが一括距離計算済みかをフラグで判断し、未計算の場合には、一括計算を行い、個々のノードの処理を行ってもよい。この点については、
図15や
図16においても説明する。これにより、情報処理装置100Aは、重複した処理が行われることを抑制することができる。
【0156】
〔2-2.情報処理装置の構成〕
次に、
図13を用いて、第2の実施形態に係る情報処理装置100Aの構成について説明する。
図13は、第2の実施形態に係る情報処理装置の構成例を示す図である。
図13に示すように、情報処理装置100Aは、通信部110と、記憶部120Aと、制御部130Aとを有する。なお、情報処理装置100Aにおいて、情報処理装置100と同様の点は適宜説明を省略する。
【0157】
(記憶部120A)
記憶部120Aは、例えば、RAM、フラッシュメモリ等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。第2の実施形態に係る記憶部120Aは、
図13に示すように、オブジェクト情報記憶部121と、グラフ情報記憶部122と、量子化情報記憶部123Aと、コードブック情報記憶部124と、ブロブ情報記憶部125とを有する。
【0158】
(量子化情報記憶部123A)
第2の実施形態に係る量子化情報記憶部123Aは、割当処理に関する各種情報を記憶する。
図14は、第2の実施形態に係る量子化情報記憶部の一例を示す図である。
図14の例では、量子化情報記憶部123Aには、「ノードID」、「オブジェクトID」、「ブロブID」、および「量子化情報」といった項目を有する。
【0159】
「ノードID」は、グラフにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。なお、ノードIDとオブジェクトIDが共通である場合、「ノードID」にオブジェクトIDが記憶され、量子化情報記憶部123Aに「オブジェクトID」の項目は含まれてなくてもよい。
【0160】
「ブロブID」は、ノード(オブジェクト)が属するブロブを識別するための情報を示す。
【0161】
また、「量子化情報」は、各ノード(オブジェクト)の量子化されたベクトルの情報を示す。例えば、「量子化情報」には、「要素」、「コードブックID」といった情報が含まれる。「要素」は、対応するオブジェクトのベクトルにおける配置を示す。
図14の例では、「要素」には、「#1」、「#2」、「#3」、「#4」が含まれる場合を示す。この場合、各ノード(オブジェクト)のベクトルは4分割され、各分割された部分ベクトルがコードブックにより量子化されることを示す。
【0162】
図14の例では、ノードN1(オブジェクトOB1)は、ブロブID「BL9」により識別されるブロブ(ブロブBL9)に属することを示す。例えば、直積量子化によりベクトルが4分割される場合、ノードN1の量子化情報には、
図8に示すノードN1の量子化情報示す4つのコードブックと同様の情報が格納される。また、例えば、直積量子化が行われない場合、ノードN1の量子化情報には、ノードN1のベクトルを量子化するための、1つのコードブックを示す情報が記憶される。
【0163】
なお、量子化情報記憶部123Aは、上記に限らず、目的に応じて種々の情報を記憶してもよい。
【0164】
(ブロブ情報記憶部125)
第2の実施形態に係るブロブ情報記憶部125は、ブロブに関する情報を記憶する。例えば、ブロブ情報記憶部125は、各ブロブに対応付けられたオブジェクトを識別する各種情報を記憶する。
図15は、第2の実施形態に係るブロブ情報記憶部の一例を示す図である。
図15の例では、ブロブ情報記憶部125は、「ブロブID」、「ノードID」、「ベクトル情報」といった項目が含まれる。
【0165】
「ブロブID」は、ブロブを識別するための識別情報を示す。また、「ノードID」は、ブロブIDにより識別されるブロブに対応付けられたノード(オブジェクト)を示す。「ベクトル情報」は、ブロブのベクトル情報を示す。例えば、「ベクトル情報」は、ブロブのセントロイドに対応するベクトルを示す。
【0166】
図15に示す例では、ブロブID「BL1」により識別されるブロブ(ブロブBL1)に対応付けられたノード(オブジェクト)は、ノードN7、N9、N85、N126等であることを示す。ブロブBL1は、「51,4,102,33・・・」の多次元のベクトル情報が対応付けられることを示す。
【0167】
また、ブロブID「BL9」により識別されるブロブ(ブロブBL9)に対応付けられたノード(オブジェクト)は、ノードN1、N4、N5等であることを示す。ブロブBL9は、「12,55,12,6・・・」の多次元のベクトル情報が対応付けられることを示す。
【0168】
なお、ブロブ情報記憶部125は、上記に限らず、目的に応じて種々の情報を記憶してもよい。ブロブ情報記憶部125は、各ブロブが距離計算の処理対象となったか否かを示すフラグを記憶してもよい。例えば、ブロブ情報記憶部125は、距離計算の対象として処理されていないことを示す値(「未処理フラグ値」ともいう)と、距離計算の対象として処理されたことを示す値(「処理済フラグ値」ともいう)とのいずれかを各ブロブのフラグの値に設定する。例えば、ブロブ情報記憶部125は、検索処理開始時に各ブロブのフラグの値を、そのブロブを対象としての距離計算が未処理であることを示す値(例えば0)に設定し、距離計算の対象となったブロブのフラグの値を、距離計算が処理済みであることを示す値(例えば1)に変更する。
【0169】
例えば、情報処理装置100Aは、処理対象となったブロブのフラグの値を参照して、そのブロブについて一括距離計算の処理を実行するか否かを判定する。情報処理装置100Aは、各ブロブのフラグの値を参照し、そのブロブのフラグの値が未処理フラグ値である場合は、そのブロブが一括距離計算の処理前であると判定して、そのブロブに属するノードの一括距離計算を実行する。一方、情報処理装置100Aは、そのブロブのフラグの値が処理済フラグ値である場合は、そのブロブが一括距離計算の処理済みであると判定して、そのブロブに属するノードの一括距離計算を行わない。
【0170】
(制御部130A)
図13の説明に戻って、制御部130Aは、コントローラ(controller)であり、例えば、CPUやMPUやGPU等によって、情報処理装置100A内部の記憶装置に記憶されている各種プログラム(情報処理プログラムの一例に相当)がRAMを作業領域として実行されることにより実現される。また、制御部130Aは、コントローラであり、例えば、ASICやFPGA等の集積回路により実現される。
【0171】
図13に示すように、制御部130Aは、取得部131と、生成部132Aと、検索処理部133Aと、提供部134とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部130Aの内部構成は、
図13に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
【0172】
(生成部132A)
生成部132Aは、生成部132と同様に各種情報を生成する。
【0173】
生成部132Aは、量子化情報記憶部123に示すようなベクトル量子化に関する情報を生成してもよい。例えば、生成部132は、ノードN1(オブジェクトOB1)がブロブBL9に属することを示す情報を生成する。また、生成部132は、ブロブ情報記憶部125に示すようなブロブに関する情報を生成してもよい。例えば、生成部132は、ブロブBL1には、ノードN7、N9、N85、N126等が属することを示す情報を生成する。なお、情報処理装置100がグラフ情報記憶部122、量子化情報記憶部123A、コードブック情報記憶部124、ブロブ情報記憶部125に示す情報を、情報提供装置50等の外部装置から取得する場合、情報処理装置100は、生成部132Aを有しなくてもよい。
【0174】
(検索処理部133A)
検索処理部133Aは、検索処理部133と同様に検索処理に関する各種処理を行う。
【0175】
検索処理部133Aは、複数のオブジェクトの各々に対応するノード群を対象として、検索クエリの近傍のノードを検索する検索処理において、複数のオブジェクトを分類した複数のブロブの情報を用いて、一のブロブに属する複数のノードと検索クエリとの距離を、ベクトル量子化された複数のノードのベクトル情報を用いて算出する。検索処理部133Aは、複数のノードと検索クエリとの距離の算出を並列化して一括で行う。検索処理部133Aは、情報処理装置100Aの仕様に基づいて決定される一括処理数の複数のノードと検索クエリとの距離の算出を並列処理する。
【0176】
検索処理部133Aは、検索クエリが該当するブロブと隣接する一のブロブに属する複数のノードと検索クエリとの距離を算出する。検索処理部133Aは、複数のノードがエッジにより連結されたグラフを用いて、検索クエリの近傍のノードを検索する検索処理において、複数のノードと検索クエリとの距離を算出する。検索処理部133Aは、検索処理において処理対象となる対象ノードからのエッジが連結された接続ノードが属する一のブロブに属する複数のノードと検索クエリとの距離を算出する。
【0177】
検索処理部133Aは、対象ノードが属するブロブ以外の一のブロブに属する複数のノードと検索クエリとの距離を算出する。検索処理部133Aは、複数のノードの各々から、複数のノードの各々が属するブロブ以外の他のブロブへ連結されたブロブ用グラフを用いて、検索クエリの近傍のノードを検索する検索処理において、複数のノードと検索クエリとの距離を算出する。検索処理部133Aは、複数のノードがエッジにより連結された変換前のグラフにおいて、複数のノードのうち一のノードからエッジが連結されたノードが属するブロブであって、一のノードが属するブロブ以外のブロブへ、一のノードからエッジを連結することにより生成された変換後のグラフであるブロブ用グラフを用いて、検索クエリの近傍のノードを検索する検索処理において、複数のノードと検索クエリとの距離を算出する。
【0178】
検索処理部133Aは、検索処理において処理対象となる対象ノードからのエッジが連結されたブロブである一のブロブに属する複数のノードと検索クエリとの距離を算出する。検索処理部133Aは、既に処理対象となったブロブである処理済みブロブを示す情報を用いて、一のブロブを処理対象とするかを判定する。検索処理部133Aは、一のブロブが処理済みブロブである場合、一のブロブを処理対象としないと判定する。
【0179】
検索処理部133Aは、検索処理において処理対象となったノードのうち、所定のノードを対象として、ベクトル量子化がされた距離である第1距離とは異なり、ベクトル量子化がされていない第2距離を算出する。検索処理部133Aは、検索処理において検索クエリの近傍のノードとして抽出するノードの第1数よりも多い数である第2数のノードを近傍候補ノードとして抽出し、近傍候補ノードを対象として第2距離を算出する。検索処理部133Aは、近傍候補ノードのうち、第2距離が短い方から第1数のノードを検索クエリの近傍のノードとして抽出する。
【0180】
検索処理部133Aは、第1距離が所定の閾値以内であるノードを対象として第2距離を算出する。検索処理部133Aは、近傍のノードとして抽出する対象範囲を示す検索範囲内のノードを対象として第2距離を算出する。検索処理部133Aは、検索処理の対象範囲を示す探索範囲内のノードを対象として第2距離を算出する。
【0181】
〔2-3.検索処理例〕
ここで、第2の実施形態に係る検索処理の一例について、
図16を一例として説明する。
図16は、第2の実施形態に係る検索処理の一例を示すフローチャートである。以下に説明する検索処理は、情報処理装置100Aの検索処理部133Aによって行われる。なお、
図11等、第1の実施形態と同様の点については適宜説明を省略する。例えば、
図16において、
図11と同様の点は同じステップ番号を付すことにより、適宜説明を省略する。
【0182】
ここでは、近傍オブジェクト集合N(G,y)は、ノードyに付与されているエッジにより関連付けられている近傍のオブジェクトの集合である。「G」は、所定のグラフデータ(例えば、空間情報SP21に示すグラフGR21等)であってもよい。例えば、情報処理装置100Aは、k近傍検索処理を実行する。
【0183】
例えば、
図16に示す検索処理は、ステップS304の後にステップS304aに示す処理を行う点で、
図11に示す検索処理と相違する。このように、
図16に示す検索処理は、通常のグラフの探索で、まだ、アクセスしていないブロブに到達した場合にそのブロブ内のオブジェクト(ノード)とクエリとの距離を一括して計算し、各ノードの処理を行う。
【0184】
具体的には、
図16の検索処理においては、情報処理装置100Aは、オブジェクトsが属するブロブがまだ距離計算していない場合には、以下のすべて(
図16中のステップS304a中の「-」に続けて示す4つの処理。以下「第1の処理」~「第4の処理」とする)を実行する(ステップS304a)。ステップS304aにおいて、情報処理装置100Aは、そのブロブ内のオブジェクトを一括距離計算する処理(第1の処理)を実行する。また、ステップS304aにおいて、情報処理装置100Aは、ブロブの距離計算フラグをセットする処理(第2の処理)を実行する。また、ステップS304aにおいて、情報処理装置100Aは、一括距離計算を行ったブロブ内のすべてのオブジェクトをCに格納する処理(第3の処理)を実行する。また、ステップS304aにおいて、情報処理装置100Aは、ブロブのすべてのオブジェクトをuとして逐一ステップS307からステップS314までの処理を行う処理(第4の処理)を実行する。その後、情報処理装置100Aは、ステップS306以降の処理を行う。
【0185】
〔2-4.変形例〕
ここから、変形例について説明する。第2の実施形態に係る変形例においては、ブロブの概念を含むグラフを用いてもよい。例えば、第2の実施形態に係る変形例においては、ノードからのエッジによる参照先がブロブであるグラフを用いてもよい。なお、第1の実施形態や第2の実施形態と同様の点については、適宜説明を省略する。変形例に係る情報処理装置100Aは、グラフ情報記憶部122に代えて、グラフ情報記憶部122Aを有する。
【0186】
〔2-4-1.情報処理〕
まず、
図17を用いて、変形例に係る情報処理の概要を説明する。
図17は、変形例に係る情報処理の一例を示す図である。
【0187】
情報処理装置100Aは、ノード間をエッジで連結したグラフGR21を、ノードからのエッジによる参照先がブロブであるグラフGR31に変換する(ステップS31)。すなわち、情報処理装置100Aは、
図17に示すように、通常のグラフであるグラフGR21から、ブロブの概念が導入されたグラフ(ブロブ用グラフ)であるグラフGR31を生成する。
【0188】
図17の例では、情報処理装置100Aは、空間情報SP31に示すように、ノードからブロブへの有向エッジを含むグラフGR31を生成する。なお、グラフGR31においては、各ノード間のエッジについては削除され、グラフGR31には、ノードからブロブへの有向エッジが含まれ、ノード間のエッジは含まれない。
図17に示す矢印線は、矢元のノードから矢先のブロブへの有向エッジを示す。すなわち、
図17に示す矢印線は、矢元のノードを参照元とし、矢先のブロブを参照先とする有向エッジを示す。例えば、
図17では、ノードN1からは、ブロブBL8及びブロブBL10の2つのブロブへのエッジが連結されることを示す。
【0189】
例えば、情報処理装置100Aは、各ノードのエッジを接続ノード(近傍ノード)へのエッジから接続ノードが属するブロブへのエッジに変換する。なお、情報処理装置100Aは、各ノード自身が属するブロブへのエッジは生成しない。
図17の例では、情報処理装置100Aは、ノードN9とノードN126は同じブロブBL1に属するため、ノードN9からブロブBL1へのエッジ、及びノードN126からブロブBL1へのエッジは生成しない。一方、
図17の例では、情報処理装置100Aは、ノードN9とノードN18は異なるブロブBL1、BL4に属するため、ノードN9からブロブBL4へのエッジ、及びノードN18からブロブBL1へのエッジを生成する。
【0190】
図17の例では、情報処理装置100Aは、空間情報SP31に示すように、ノード(オブジェクト)からブロブへの有向エッジを含むグラフGR31を用いて、検索処理を行う。例えば、情報処理装置100Aは、検索クエリQE2を対象として、グラフGR21を用いた
図19に示すような検索処理を行うことにより、検索クエリQE2の検索結果を得る。
図19に示す検索処理についての詳細は後述する。なお、
図17での検索処理は、ブロブの概念を用いて検索処理を行う点で
図12と共通し、エッジに関連する処理の点以外は、
図12に示す検索処理と同様である。
【0191】
〔2-4-2.グラフ〕
次に、
図18を用いて、変形例に係るグラフの概要を説明する。
図18は、変形例に係るグラフ情報記憶部の一例を示す図である。例えば、
図18に示すグラフ情報記憶部122Aは、ブロブの概念が導入されたグラフ(ブロブ用グラフ)を記憶する。
図18に示すグラフ情報記憶部122Aは、「ノードID」、「オブジェクトID」、および「ブロブ情報」といった項目を有する。このように、変形例に係るグラフ情報記憶部122Aは、「接続ノード情報」に代えて、「ブロブ情報」を有する点で
図7のグラフ情報記憶部122と相違する。なお、
図7のグラフ情報記憶部122と同様の点については適宜説明を省略する。
【0192】
また、「ブロブ情報」は、対応するノードから辿ることができるブロブ(参照先のブロブ)に関する情報を示す。例えば、「ブロブ情報」には、「参照先」といった情報が含まれる。「参照先」は、エッジにより連結され、そのノードから辿ることができる参照先(ブロブ)を識別するための情報を示す。すなわち、
図18の例では、ノードを識別するノードID(オブジェクトID)に対して、そのノードからエッジにより辿ることができる参照先(ブロブ)が対応付けられて登録されている。なお、「ブロブ情報」には、参照先に接続されるエッジを識別するための情報(エッジID)等が含まれてもよい。
【0193】
図18の例では、ノードID「N1」により識別されるノード(ノードN1)は、オブジェクトID「OB1」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN1からは、ブロブID「BL8」により識別されるブロブ(ブロブBL8)にエッジが連結されており、ノードN1からブロブBL8へ辿ることができることを示す。また、ノードN1からは、ブロブID「BL10」により識別されるブロブ(ブロブBL10)にエッジが連結されており、ノードN1からブロブBL10へ辿ることができることを示す。
【0194】
また、ノードID「N2」により識別されるノード(ノードN2)は、オブジェクトID「OB2」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN2からは、ブロブID「BL5」により識別されるブロブ(ブロブBL5)にエッジが連結されており、ノードN1からブロブBL5へ辿ることができることを示す。
【0195】
なお、グラフ情報記憶部122Aは、上記に限らず、目的に応じて種々の情報を記憶してもよい。
【0196】
また、グラフは、クエリを入力とし、グラフ中のエッジを辿ることによりノードを探索し、クエリに類似するノードを抽出し出力するプログラムモジュールを含んでもよい。すなわち、グラフは、グラフを用いて検索処理を行うプログラムモジュールとしての利用が想定されるものであってもよい。例えば、グラフGR31は、クエリとしてベクトルデータが入力された場合に、そのベクトルデータに類似するベクトルデータに対応するノードをグラフ中から抽出し、出力するプログラムであってもよい。例えば、グラフGR31は、クエリ画像に対応する類似画像を検索するプログラムモジュールとして利用されるデータであってもよい。例えば、グラフGR31は、入力されたクエリに基づいて、グラフにおいてそのクエリに類似するノードを抽出し、出力するよう、コンピュータを機能させる。
【0197】
〔2-4-3.検索処理例〕
ここから、変形例に係る検索処理の一例について、
図19を一例として説明する。
図19は、変形例に係る検索処理の一例を示すフローチャートである。以下に説明する検索処理は、情報処理装置100Aの検索処理部133Aによって行われる。なお、
図11、
図16等、第1の実施形態または第2の実施形態と同様の点については適宜説明を省略する。例えば、
図19において、
図11と同様の点は同じステップ番号を付すことにより、適宜説明を省略する。
【0198】
図19では、集合N(G,y)は、ノードyに付与されているエッジにより関連付けられているブロブの集合である点で、
図11及び
図16の検索処理と相違する。
図19では、N(G、s)およびCはブロブ集合となる。すなわち、
図11での「近傍オブジェクト集合N」は、
図19では、「ブロブ集合N」と読み替えられ、
図11での「オブジェクト集合C」は、
図19では、「ブロブ集合C」と読み替えられる。また、上記のブロブへの変更に関連する処理における「オブジェクト」の文言は、適宜「ブロブ」と読み替えられる。「G」は、ブロブの概念が導入されたグラフ(ブロブ用グラフ)データ(例えば、空間情報SP31に示すグラフGR31等)であってもよい。例えば、情報処理装置100Aは、k近傍検索処理を実行する。
【0199】
例えば、
図19に示す検索処理は、
図11からステップS306の処理が以下のように変更される。
図19の検索処理においては、情報処理装置100Aは、N(G、s)の中からブロブ集合Cに含まれない、ブロブを一つ選択し、選択したブロブをブロブ集合Cに格納し、ブロブ内のオブジェクトを一括計算し、その集合をB(「対象ブロブ内オブジェクト集合B」ともいう)とする(ステップS306)。
【0200】
また、
図19に示す検索処理は、ステップS306の後にステップS306aに示す処理を行う点で、
図11に示す検索処理と相違する。具体的には、
図19の検索処理においては、情報処理装置100Aは、対象ブロブ内オブジェクト集合Bからオブジェクトuを一つ選択する(ステップS306a)。その後、情報処理装置100Aは、ステップS307以降の処理を行う。
【0201】
また、
図19に示す検索処理は、ステップS315の前にステップS314aに示す処理を行う点で、
図11に示す検索処理と相違する。具体的には、
図19の検索処理においては、情報処理装置100Aは、対象ブロブ内オブジェクト集合Bから全て選択したか否かを判定する(ステップS314a)。
【0202】
対象ブロブ内オブジェクト集合Bから全て選択し終えた場合(ステップS314a:Yes)、情報処理装置100Aは、ステップS315の処理を行う。一方、対象ブロブ内オブジェクト集合Bから全て選択し終えていない場合(ステップS314a:No)、情報処理装置100Aは、ステップS306aに戻って処理を繰り返す。
【0203】
〔2-4-4.生成処理の他の例〕
上述した例では、各ノードのエッジを接続ノードへのエッジから接続ノードが属するブロブへのエッジに変換してブロブ用グラフを生成する場合を示したが、情報処理装置100Aは、様々な情報を適宜用いて、ブロブ用グラフを生成してもよい。例えば、情報処理装置100Aは、複数のオブジェクトを検索対象とする近傍検索インデックス(単に「インデックス」ともいう)を用いて、ブロブ用グラフを生成してもよい。なお、上述した内容と同様の点については適宜説明を省略する。
【0204】
ブロブ用グラフの生成の一例について
図20を用いて説明する。
図20は、変形例に係る情報処理の他の一例を示す図である。なお、以下では、インデックスの一例としてグラフを用いる場合を一例として説明するが、インデックスは、複数のオブジェクトを検索対象とするものであればどのようなものであってもよい。例えば、インデックスは、ハッシュテーブル等のハッシュに関する記述を利用したインデックス(ハッシュインデックス)、木構造を有するインデックス(ツリーインデックス)等であってもよい。
【0205】
また、オブジェクトまたはそのオブジェクトに対応するノード(「オブジェクトノード」ともいう)を示す情報を第1情報と記載し、複数のオブジェクトを分類するために用いる情報を第2情報と記載する場合がある。また、ブロブを示す情報を第3情報と記載し、オブジェクトノードをエッジで連結したグラフを第4情報と記載する場合がある。例えば、
図20中のグラフGR21は、オブジェクトノードであるノードN1等がエッジで連結されており、第4情報に対応する。また、
図17中のグラフGR31及び
図20中のグラフGR32は、第4情報とは異なり、オブジェクトノードとブロブとがエッジが連結されたブロブ用グラフ(「グループグラフ」ともいう)である。すなわち、グループグラフは、オブジェクトノードからブロブへエッジが連結され、オブジェクトノードを参照元とし、ブロブ(グループ)を参照先とするグラフである。
【0206】
情報処理装置100Aは、オブジェクトノード間がエッジで連結したグラフGR21をインデックス(第4情報)として用いて、オブジェクトノードからのエッジによる参照先がブロブとなるグループグラフであるグラフGR32を生成する(ステップS41)。
図20では、情報処理装置100Aは、空間情報SP32に示すように、ノードからブロブへの有向エッジを含むグラフGR32を生成する。
【0207】
例えば、情報処理装置100Aは、複数のオブジェクトから一のオブジェクトを選択し、グラフGR21を用いて一のオブジェクトの近傍オブジェクトを検索し、一のオブジェクトに対応する一のオブジェクトノードから、近傍オブジェクトが属する他のグループへエッジを連結する連結処理により、グラフGR32を生成する。例えば、情報処理装置100Aは、複数のオブジェクトからランダムに一のオブジェクトを選択し、選択した一のオブジェクトを対象に連結処理を行い、グラフGR32を生成する。
【0208】
例えば、情報処理装置100Aは、以下のような処理(1-1)~(1-4)を行い、グラフGR32を生成する。なお、オブジェクトは、オブジェクトに対応するノードと読み替えてもよい。
【0209】
(1-1):ランダムでオブジェクトNXを取得(選択)
(1-2):オブジェクトNXの近傍オブジェクトを定数k件検索
(1-3):各近傍オブジェクトの属するブロブを取得
(1-4):オブジェクトNXから取得したブロブへのエッジを生成
【0210】
例えば処理(1-1)では、情報処理装置100Aは、オブジェクト情報記憶部121に記憶された複数のオブジェクトからランダムに一のオブジェクトNXを取得する。
【0211】
例えば処理(1-2)では、情報処理装置100Aは、
図11に示すような検索処理を、オブジェクトNXを対象(クエリ)とし、グラフGR21を用いて行うことにより、k件(個)のオブジェクトをオブジェクトNXの近傍オブジェクトとして抽出する。
【0212】
例えば処理(1-3)では、情報処理装置100Aは、ブロブ情報記憶部125に記憶されたブロブの情報を参照し、オブジェクトNXの近傍オブジェクト(ノード)が対応付けられたブロブを取得する。
【0213】
例えば処理(1-4)では、情報処理装置100Aは、オブジェクトNXから取得したブロブへのエッジを生成する。例えば、情報処理装置100Aは、量子化情報記憶部123A中のオブジェクトNXに取得したブロブを示す情報を対応付けることにより、グラフGR32を生成する。
【0214】
例えば、情報処理装置100Aは、上記の処理(1-1)~(1-4)を、処理対象となるオブジェクトが無くなるまで繰り返し行い、グラフGR32を生成する。なお、空間情報SP21に示すブロブを検索により生成している場合、ブロブの生成の際の検索結果を流用して、グラフGR32を生成してもよい。なお、ブロブを検索により生成する例については後述する。
【0215】
例えば、情報処理装置100Aは、空間情報SP32に示すように、ノード(オブジェクト)からブロブへの有向エッジを含むグラフGR32を用いて、検索処理を行う。例えば、情報処理装置100Aは、検索クエリQE2を対象として、グラフGR32を用いた
図19に示すような検索処理を行うことにより、検索クエリQE2の検索結果を得る。
【0216】
また、上述した例では、クラスタリングによりブロブを生成する場合を示したが、ブロブは、クラスタリングに限らず、様々な方法により生成されてもよい。例えば、情報処理装置100Aは、インデックス等の第2情報を用いて、ブロブを示す情報(第3情報)を生成してもよい。
【0217】
情報処理装置100Aは、
図21に示すような、グラフGR21をインデックスとして用いて、ブロブを示す第3情報を生成する。
図21は、ブロブ情報の生成処理の一例を示す図である。
図21の空間情報SP20は、空間情報SP21中のブロブの情報が生成される前の状態を示し、
図21のグラフGR21は、
図20のグラフGR21と同様のグラフである。なお、
図21に示す処理は、後述する第1方法の一部を示すものであるが、詳細は後述する。
【0218】
例えば、情報処理装置100Aは、グラフGR21を用いた検索により、複数のオブジェクトを複数のブロブに分類する第3情報を生成する。例えば、情報処理装置100Aは、グラフGR21中の複数のノードから一のノード(「処理対象ノード」ともいう)を選択し、処理対象ノードにエッジで連結されたノードである近傍ノードのうち少なくとも一部のノードである分類対象ノード、及び処理対象ノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。例えば、情報処理装置100Aは、複数のノードから所定の処理により処理対象ノードを選択し、選択した処理対象ノードを対象に分類処理を行い、第3情報を生成する。
【0219】
例えば、情報処理装置100Aは、ノードにエッジで連結された近傍ノード(接続ノード)の数に基づいて処理対象ノードを選択してもよい。例えば、情報処理装置100Aは、近傍ノードの数が大きい方から順に処理対象ノードを選択してもよい。近傍ノードの数が大きい方から順に処理対象ノードを選択し、ブロブを示す第3情報を生成する方法を「第1方法」ともいう。また、例えば、情報処理装置100Aは、近傍ノード(接続ノード)の数が小さい方から順に処理対象ノードを選択してもよい。近傍ノードの数が小さい方から順に処理対象ノードを選択し、ブロブを生成する方法を「第2方法」ともいう。また、例えば、情報処理装置100Aは、ランダムに処理対象ノードを選択してもよい。ランダムに処理対象ノードを選択し、ブロブを示す第3情報を生成する方法を「第3方法」ともいう。以下では、第1方法、第2方法、及び第3方法の各々の処理手順の概要を説明する。
【0220】
〔2-4-4-1.第1方法〕
まず、第1方法について説明する。例えば、第1方法の場合、情報処理装置100Aは、以下のような処理(2-1)~(2-3)を行い、ブロブを示す第3情報を生成する。
【0221】
(2-1):各ノードの近傍ノード数(エッジ数)が大きいものからノードNDを取得
(2-2):ノードNDの近傍ノード及びノードNDを一のブロブとする
(2-3):ブロブとしたノード及びそのノードのエッジを削除
【0222】
例えば、情報処理装置100Aは、処理(2-1)~(2-3)を、すべてのノードにおいて実施する。
【0223】
例えば、処理(2-1)では、情報処理装置100Aは、グラフGR21を参照し、一のノードNDを順次取得する。情報処理装置100Aは、近傍ノードの数が大きい方から順に並べられたノードの一覧情報を用いて、一のノードNDを取得してもよい。
【0224】
例えば処理(2-2)では、情報処理装置100Aは、処理対象となっているグラフ(グラフGR21等)を参照し、ノードNDの近傍ノード及びノードNDを一のブロブとする情報を生成する。なお、情報処理装置100Aは、すべての近傍ノードをブロブとするのではなく定数K以下の近傍ノードをブロブとしても良い。例えば、情報処理装置100Aは、ノードNDの全近傍ノードをノードNDとともにブロブとするのではなく、近傍ノードのうちK個の近傍ノード及びノードNDを一のブロブとしてもよい。
【0225】
例えば処理(2-3)では、情報処理装置100Aは、ノードが重複して選択されないように、処理(2-2)においてブロブとしたノード及びそのノードのエッジを削除する。例えば、情報処理装置100Aは、ブロブとしたノードが他のノードの近傍ノードであれば、その(エッジおよび)ノードを削除する。なお、上記の方法は一例に過ぎず、処理(2-3)は、エッジ等を削除する方法に限らず、ブロブを生成可能であればどのような方法であってもよい。例えば、情報処理装置100Aは、既にブロブに属しているノードのリストを保持して、除外するノードを管理する方法により、ブロブの生成を行ってもよい。例えば、情報処理装置100Aは、ブロブとしたノードに所定のフラグ(削除フラグ等)を立てることにより、既にブロブに属しているノードを管理してもよい。このように、フラグを用いる場合、情報処理装置100Aは、処理の際に各ノードのフラグを参照して、そのノードを処理対象とするかを判定する。
【0226】
上述した第1方法の具体例について
図21を用いて説明する。
図21では、情報処理装置100Aは、グラフGR21のうち、近傍ノードの数が最大の4個であるノードN7を取得する(ステップS51)。
図21では、グラフGR21のうちノードN1も近傍ノードの数が4個であるが、情報処理装置100Aは、ノードN7を取得するものとする。なお、近傍ノードの数が同数のノードが複数ある場合、情報処理装置100Aは、その複数のノードからランダムにノードを取得してもよい。
【0227】
そして、情報処理装置100Aは、ノードN7の近傍ノードであるノードN9、N12、N54、N126の4個のノード及びノードN7の5個のノードを一のブロブBL11とする(ステップS52)。情報処理装置100Aは、ノードN7、N9、N12、N54、N126の5個のノードが一のブロブBL11に属することを示す第3情報BLT1を生成する。そして、情報処理装置100Aは、ノードN7、N9、N12、N54、N126の5個のノード及び各ノードのエッジをグラフGR21から削除する。これにより、空間情報SP20-1に示すように、グラフGR21はグラフGR21-1に更新される。
【0228】
そして、情報処理装置100Aは、グラフGR21のうち、近傍ノードの数が4個であるノードN1を取得する(ステップS53)。そして、情報処理装置100Aは、ノードN1の近傍ノードであるノードN4、N5、N88、N99の4個のノード及びノードN1の5個のノードを一のブロブBL12とする(ステップS54)。情報処理装置100Aは、ノードN1、N4、N5、N88、N99の5個のノードが一のブロブBL12に属することを示す第3情報BLT2を生成する。そして、情報処理装置100Aは、ノードN1、N4、N5、N88、N99の5個のノード及び各ノードのエッジをグラフGR21-1から削除する。
【0229】
情報処理装置100Aは、上述した処理を処理対象となるノードが無くなるまで繰り返し、複数のブロブを示す第3情報を生成する。
【0230】
〔2-4-4-2.第2方法〕
次に、第2方法について説明する。例えば、第2方法の場合、情報処理装置100Aは、以下のような処理(3-1)~(3-3)を行い、ブロブを示す第3情報を生成する。
【0231】
(3-1):各ノードの近傍ノード数(エッジ数)が小さいものからノードNDを取得
(3-2):ノードNDの近傍ノード及びノードNDを一のブロブとする
(3-3):ブロブとしたノード及びそのノードのエッジを削除
【0232】
例えば、情報処理装置100Aは、処理(3-1)~(3-3)を、すべてのノードにおいて実施する。
【0233】
例えば、処理(3-1)では、情報処理装置100Aは、グラフGR21を参照し、一のノードNDを順次取得する。情報処理装置100Aは、近傍ノードの数が小さい方から順に並べられたノードの一覧情報を用いて、一のノードNDを取得してもよい。
【0234】
例えば処理(3-2)では、情報処理装置100Aは、処理対象となっているグラフ(グラフGR21等)を参照し、ノードNDの近傍ノード及びノードNDを一のブロブとする情報を生成する。なお、情報処理装置100Aは、すべての近傍ノードをブロブとするのではなく定数K以下の近傍ノードをブロブとしても良い。例えば、情報処理装置100Aは、ノードNDの全近傍ノードをノードNDとともにブロブとするのではなく、近傍ノードのうちK個の近傍ノード及びノードNDを一のブロブとしてもよい。
【0235】
例えば処理(3-3)では、情報処理装置100Aは、ノードが重複して選択されないように、処理(3-2)においてブロブとしたノード及びそのノードのエッジを削除する。例えば、情報処理装置100Aは、ブロブとしたノードが他のノードの近傍ノードであれば、その(エッジおよび)ノードを削除する。なお、第2方法は、ノードの取得順が近傍ノード数(エッジ数)が小さい方から順である点以外は、第1方法と同様であるため、具体例等についての説明は省略する。例えば、処理(3-3)は、第1方法と同様に、エッジ等を削除する方法に限らず、ブロブを生成可能であればどのような方法であってもよい。例えば、情報処理装置100Aは、第1方法と同様に、既にブロブに属しているノードのリストを保持して、除外するノードを管理する方法により、ブロブの生成を行ってもよい。
【0236】
〔2-4-4-3.第3方法〕
次に、第3方法について説明する。例えば、第3方法の場合、情報処理装置100Aは、以下のような処理(4-1)~(4-3)を行い、ブロブを示す第3情報を生成する。
【0237】
(4-1):ランダムにノードNDを順次取得
(4-2):ノードNDの近傍ノード及びノードNDを一のブロブとする
(4-3):ブロブとしたノード及びそのノードのエッジを削除
【0238】
例えば、情報処理装置100Aは、処理(4-1)~(4-3)を、すべてのノードにおいて実施する。なお、第3方法は、ノードの取得順がランダムである点以外は、第1方法及び第2方法と同様であり詳細な説明は省略する。例えば、情報処理装置100Aは、すべて同じエッジ数であればランダム順(第3方法)で第3情報の生成を実行してもよい。
【0239】
〔2-4-4-4.第4方法〕
なお、上述した第1方法~第3方法は一例に過ぎず、情報処理装置100Aは、様々な処理によりブロブを生成してもよい。例えば、情報処理装置100Aは、複数のオブジェクトを検索対象とする近傍検索インデックス(インデックス)を用いた検索によりブロブを生成してもよい。インデックスを用いた検索によりブロブを生成する方法を「第4方法」ともいう。
【0240】
以下、第4方法について説明する。なお、上述した内容と同様の点については適宜説明を省略する。以下では、インデックスの一例としてグラフを用いる場合を一例として説明するが、上述したようにインデックスは、複数のオブジェクトを検索対象とするものであればどのようなものであってもよい。例えば、インデックスは、ハッシュインデックス、ツリーインデックス等、どのようなインデックスであってもよい。
【0241】
ここから、
図21に示すようなグラフGR21をインデックスとして用いた検索により、情報処理装置100Aがブロブを示す第3情報を生成する場合を説明する。例えば、情報処理装置100Aは、以下のような処理(5-1)~(5-4)を行い、グラフGR32を生成する。
【0242】
(5-1):ランダムでオブジェクトNXを取得(選択)
(5-2):オブジェクトNXの近傍オブジェクトを定数k件検索
(5-3):オブジェクトNXの近傍オブジェクト及びオブジェクトNXを一のブロブとする
(5-4):重複処理回避用の処理を実行
【0243】
例えば処理(5-1)では、情報処理装置100Aは、グラフGR21からランダムに一のオブジェクトNXを取得する。
【0244】
例えば処理(5-2)では、情報処理装置100Aは、
図11に示すような検索処理を、オブジェクトNXを対象(クエリ)とし、グラフGR21を用いて行うことにより、k件(個)のオブジェクトをオブジェクトNXの近傍オブジェクトとして抽出する。なお、情報処理装置100Aは、すべてのオブジェクトをスキャン(検索)して、オブジェクトNXの近傍オブジェクトを抽出してもよい。
【0245】
例えば処理(5-3)では、情報処理装置100Aは、オブジェクトNXの近傍オブジェクトの近傍ノード及びオブジェクトNXを一のブロブとする情報を生成する。
【0246】
例えば処理(5-4)では、情報処理装置100Aは、一のオブジェクトが重複して検索されたりする等により複数のブロブに属することとならないように、重複処理回避用の処理を実行する。例えば、情報処理装置100Aは、ブロブとしたオブジェクトをインデックスから削除する。例えば、情報処理装置100Aは、ブロブとしたオブジェクトをグラフGR21から削除する。
【0247】
なお、情報処理装置100Aは、上記に限らず、一のオブジェクトが複数のブロブに属することとならなければ、どのような方法により重複処理回避用の処理を行ってもよい。例えば、情報処理装置100Aは、ブロブとしたオブジェクトに所定のフラグ(削除フラグ等)を立てることにより、既にブロブに属しているオブジェクトが処理対象となることを抑制してもよい。このように、フラグを用いる場合、情報処理装置100Aは、処理の際に各オブジェクトのフラグを参照して、そのオブジェクトを処理対象とするかを判定する。例えば、情報処理装置100Aは、上述したグループグラフの生成に検索結果を利用する場合には、フラグを用いた方法により重複処理回避用の処理を行ってもよい。
【0248】
〔2-4-5.変形例に係る情報処理装置〕
第2の実施形態の変形例に係る情報処理装置100Aにおいて取得部131は、以下の処理も行う。取得部131は、データ検索の対象となる複数のオブジェクトを示す第1情報と、複数のオブジェクトを分類するために用いる第2情報とを取得する。取得部131は、複数のオブジェクトを検索対象とするインデックスである第2情報を取得する。取得部131は、複数のオブジェクトの各々に対応する複数のノードがエッジにより連結されたグラフである第2情報を取得する。取得部131は、複数のオブジェクトを検索対象とするインデックスである第4情報を取得する。取得部131は、複数のオブジェクトの各々に対応する複数のオブジェクトノードがエッジにより連結されたグラフである第4情報を取得する。
【0249】
また、第2の実施形態の変形例に係る情報処理装置100Aにおいて生成部132Aは、以下の処理も行う。生成部132Aは、取得部131により取得された第2情報を用いて、第1情報が示す複数のオブジェクトを分類し、複数のオブジェクトを対象とする検索処理において一括処理を行うために用いられる複数のグループを示す第3情報を生成する。生成部132Aは、第2情報を用いて、複数のオブジェクトを複数のグループに分類する第3情報を生成する。生成部132Aは、第2情報を用いた検索により、複数のオブジェクトを複数のグループに分類する第3情報を生成する。
【0250】
生成部132Aは、グラフ中の複数のノードから一のノードを選択し、一のノードにエッジで連結されたノードである近傍ノードのうち少なくとも一部のノードである分類対象ノード、及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。生成部132Aは、一のノードの近傍ノードのうち所定の数のノードである分類対象ノード、及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。生成部132Aは、一のノードの近傍ノードの全てである分類対象ノード、及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。
【0251】
生成部132Aは、複数のノードの各々にエッジで連結されたノードである近傍ノードの数に基づいて、複数のノードから一のノードを選択し、一のノードの分類対象ノード及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。生成部132Aは、近傍ノードの数が大きい方から順に一のノードを選択し、一のノードの分類対象ノード及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。生成部132Aは、近傍ノードの数が小さい方から順に一のノードを選択し、一のノードの分類対象ノード及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。
【0252】
生成部132Aは、複数のノードからランダムに一のノードを選択し、一のノードの分類対象ノード及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。生成部132Aは、一のグループに分類された一のノードの分類対象ノード及び一のノードである処理済みノード群をグラフから除外し、処理済みノード群を除外した後のグラフを用いて、分類処理を繰り返すことにより、第3情報を生成する。生成部132Aは、処理済みノード群を除外した後のグラフを用いて、分類処理を複数のオブジェクトがいずれかのグループに分類されるまで繰り返すことにより、第3情報を生成する。生成部132Aは、各々に属するオブジェクトが相互に排他的な複数のグループを示す第3情報を生成する。
【0253】
生成部132Aは、第4情報を用いて、複数のオブジェクトのうち少なくとも一部のオブジェクトに対応するノードであるオブジェクトノードから、複数のグループのうち、オブジェクトノードが属するグループ以外の他のグループへエッジが連結されたグループグラフを生成する。生成部132Aは、複数のオブジェクトから一のオブジェクトを選択し、第4情報を用いて複数のオブジェクトを対象に、一のオブジェクトの近傍オブジェクトを検索し、一のオブジェクトに対応する一のオブジェクトノードから、近傍オブジェクトが属する他のグループへエッジを連結する連結処理により、グループグラフを生成する。生成部132Aは、複数のオブジェクトからランダムに一のオブジェクトを選択し、一のオブジェクトの近傍オブジェクトを検索し、一のオブジェクトに対応する一のオブジェクトノードから、近傍オブジェクトが属する他のグループへエッジを連結する連結処理により、グループグラフを生成する。生成部132Aは、第4情報を用いて、グループグラフを生成する。
【0254】
〔2-4-6.情報処理のフロー〕
次に、
図22を用いて、変形例に係る情報処理の手順について説明する。
図22は、変形例に係る情報処理の一例を示すフローチャートである。
【0255】
図22に示すように、情報処理装置100Aは、データ検索の対象となる複数のオブジェクトを示す第1情報を取得する(ステップS401)。例えば、情報処理装置100Aは、オブジェクト情報記憶部121から複数のオブジェクトを示す第1情報を取得する。
【0256】
また、情報処理装置100Aは、複数のオブジェクトを分類するために用いる第2情報を取得する(ステップS402)。例えば、情報処理装置100Aは、グラフ情報記憶部122Aからグラフを第2情報として取得する。
【0257】
そして、情報処理装置100Aは、第2情報を用いて、第1情報が示す複数のオブジェクトを分類し、複数のオブジェクトを対象とする検索処理において一括処理を行うために用いられる複数のグループを示す第3情報を生成する(ステップS403)。例えば、情報処理装置100Aは、各々に属するオブジェクトが相互に排他的な複数のブロブを示す第3情報を生成する。
【0258】
〔3.第3の実施形態〕
上述した例では、オブジェクトに対応するノード(オブジェクトノード)間をエッジで連結したグラフ(「オブジェクトグラフ」ともいう)、オブジェクトノードとグループ(ブロブ)間をエッジで連結したグラフ(ブロブ用グラフ)の2種類のグラフを用いる説明したが、情報処理システム1は様々な種類のグラフを用いてもよい。例えば、情報処理システム1は、オブジェクトグラフ及びブロブ用グラフとは異なり、グループ(ブロブ)間を連結したグラフ(以下「グループ連結グラフ」または「ブロブ連結グラフ」ともいう)を生成し、ブロブ連結グラフを検索に用いてもよい。
【0259】
この点について、以下、第3の実施形態として説明する。第3の実施形態においては、情報処理システム1は、情報処理装置100または情報処理装置100Aに代えて、情報処理装置100Bを有する。なお、第1の実施形態及び第2の実施形態等において上述した内容と同様の点については適宜説明を省略する。
【0260】
情報処理装置100Bは、インデックス(インデックス情報)を用いて、一のオブジェクトが属する第1グループ(第1ブロブ)ら、一のオブジェクトの近傍オブジェクトが属する第2グループ(第2ブロブ)へエッジが連結されたグループ連結グラフを生成する。以下では、インデックスの一例としてグラフを用いる場合を一例として説明するが、上述したようにインデックスは、複数のオブジェクトを検索対象とするものであればどのようなものであってもよい。例えば、インデックスは、ハッシュインデックス、ツリーインデックス等、どのようなインデックスであってもよい。
【0261】
〔3-1.情報処理〕
まず、
図23を用いて、第3の実施形態に係る情報処理の概要を説明する。
図23は、第3の実施形態に係る情報処理の一例を示す図である。
【0262】
図23の例では、情報処理装置100Bは、空間情報SP21に示すようなグラフGR21を取得済みであるものとする。なお、情報処理装置100Bは、グラフ生成に関する様々な技術を適宜用いて、グラフGR21を生成してもよい。グラフGR21は
図12等で示すグラフGR21と同様であるため説明を省略する。
【0263】
情報処理装置100Bは、任意の方法により、ブロブBL1~BL10等を示す情報を生成する。情報処理装置100Bは、k-means等の任意のクラスタリングにより各ノードをブロブBL1~BL10のいずれかに分類してもよい。なお、情報処理装置100Bは、ブロブを生成可能であれば、どのような方法によりブロブを生成してもよい。例えば、情報処理装置100Bは、上述した第1方法~第4方法のいずれかの方法によりブロブBL1~BL10等を示す情報を生成してもよい。
【0264】
情報処理装置100Bは、空間情報SP21に示すようなグラフGR21及びブロブの情報を用いて、ブロブ連結グラフを生成する(ステップS61)。
図23の例では、情報処理装置100Bは、空間情報SP41に示すように、ブロブ(第1ブロブ)と他のブロブ(第2ブロブ)との間をエッジで連結したブロブ連結グラフであるグラフGR41を生成する。
図23に示す矢印線は、矢元のブロブ(第1ブロブ)から矢先のブロブ(第2ブロブ)への有向エッジを示す。すなわち、
図23に示す矢印線は、矢元のブロブを参照元とし、矢先のブロブを参照先とする有向エッジを示す。例えば、
図23では、ブロブBL1からは、ブロブBL2、ブロブBL3、ブロブBL4、ブロブBL5及びブロブBL8の5つのブロブへのエッジが連結されることを示す。
【0265】
例えば、情報処理装置100Bは、グラフGR21を検索し、検索結果を基にグラフGR41を生成する。例えば、情報処理装置100Bは、以下のような処理(6-1)~(6-4)を行い、ブロブ連結グラフであるグラフGR41を生成する。なお、以下のオブジェクトは、オブジェクトに対応するノードと読み替えてもよい。
【0266】
(6-1):ランダムでオブジェクトNXを取得(選択)
(6-2):オブジェクトNXの近傍オブジェクトを定数k件検索
(6-3):各近傍オブジェクトの属するブロブを取得
(6-4):オブジェクトNXが属するブロブから取得したブロブへのエッジを生成
【0267】
例えば処理(6-1)では、情報処理装置100Bは、オブジェクト情報記憶部121に記憶された複数のオブジェクトからランダムに一のオブジェクトNXを取得する。
【0268】
例えば処理(6-2)では、情報処理装置100Bは、
図11に示すような検索処理を、オブジェクトNXを対象(クエリ)とし、グラフGR21を用いて行うことにより、k件(個)のオブジェクトをオブジェクトNXの近傍オブジェクトとして抽出する。
【0269】
例えば処理(6-3)では、情報処理装置100Bは、ブロブ情報記憶部125に記憶されたブロブの情報を参照し、オブジェクトNXの近傍オブジェクト(ノード)が対応付けられたブロブを取得する。
【0270】
例えば処理(6-4)では、情報処理装置100Bは、オブジェクトNXが属するブロブから取得したブロブへのエッジを生成する。情報処理装置100Bは、オブジェクトNXが属するブロブからすべての近傍オブジェクトの属するブロブへのエッジを生成する。例えば、情報処理装置100Bは、オブジェクトNXが属するブロブの参照先として取得したブロブを示す情報(ブロブID)を、オブジェクトNXが属するブロブを示す情報(ブロブID)に対応付けて、ブロブ連結グラフ情報記憶部126に登録することにより、グラフGR41を生成する。
【0271】
例えば、情報処理装置100Bは、上記の処理(6-1)~(6-4)を、処理対象となるオブジェクトが無くなるまで繰り返し行い、グラフGR41を生成する。なお、情報処理装置100Bは、ブロブXの参照先としてブロブYが登録済みの場合、ブロブXに属するオブジェクトの近傍オブジェクトとして、ブロブYに属するオブジェクトが再度検索(抽出)されても、登録をスキップして各ブロブの参照先に同じブロブが重複して登録されることを抑制してもよい。
【0272】
例えば、情報処理装置100Bは、空間情報SP41に示すように、ブロブ間をエッジで連結するグラフGR41を用いて検索処理を行う。例えば、情報処理装置100Bは、検索クエリQE2を対象として、ブロブ連結グラフであるグラフGR41を用いた
図27及び
図28に示すような検索処理を行うことにより、検索クエリQE2の検索結果を得る。
【0273】
上述したブロブ連結グラフの生成方法は一例に過ぎず、情報処理装置100Bは、様々な方法によりブロブ連結グラフを生成してもよい。例えば、情報処理装置100Bは、グラフを検索することなく、ブロブ連結グラフを生成してもよい。空間情報SP21に示すブロブを検索により生成している場合、ブロブの生成の際の検索結果を流用して、グラフGR41等のブロブ連結グラフを生成してもよい。
【0274】
例えば、情報処理装置100Bは、グラフGR21でのオブジェクトノードの接続関係を、オブジェクトノードが属するブロブの接続関係に変換して、ブロブ連結グラフを生成してもよい。例えば、ブロブBL9に属するノードN1からはブロブBL8に属するノードN88及びブロブBL10に属するノードにエッジが連結されており、ブロブBL9に属するノードN4からはブロブBL7に属するノードにエッジが連結されている。そのため、情報処理装置100Bは、ブロブBL9から、ブロブBL7、ブロブBL8及びブロブBL10の3つのブロブへのエッジが連結されたブロブ連結グラフを生成する。このように、情報処理装置100Bは、オブジェクトノード間を連結するエッジを基に、ブロブ間をエッジで連結するブロブ連結グラフを生成してもよい。
【0275】
〔3-2.情報処理装置の構成〕
次に、
図24を用いて、第3の実施形態に係る情報処理装置100Bの構成について説明する。
図24は、第3の実施形態に係る情報処理装置の構成例を示す図である。
図24に示すように、情報処理装置100Bは、通信部110と、記憶部120Bと、制御部130Bとを有する。なお、情報処理装置100Bにおいて、情報処理装置100または情報処理装置100Aと同様の点は適宜説明を省略する。
【0276】
(記憶部120B)
記憶部120Bは、例えば、RAM、フラッシュメモリ等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。第3の実施形態に係る記憶部120Bは、
図24に示すように、オブジェクト情報記憶部121と、グラフ情報記憶部122と、量子化情報記憶部123と、コードブック情報記憶部124と、ブロブ情報記憶部125と、ブロブ連結グラフ情報記憶部126とを有する。
【0277】
(ブロブ連結グラフ情報記憶部126)
第3の実施形態に係るブロブ連結グラフ情報記憶部126は、ブロブ連結グラフに関する各種情報を記憶する。例えば、ブロブ連結グラフ情報記憶部126は、生成したブロブ連結グラフを記憶する。
図25は、第3の実施形態に係るブロブ連結グラフ情報記憶部の一例を示す図である。
図25に示すブロブ連結グラフ情報記憶部126は、「ブロブID」および「接続ブロブ情報」といった項目を有する。
【0278】
「ブロブID」は、グラフにおける各ブロブ(グループ)を識別するための識別情報を示す。「接続ブロブ情報」は、対応するブロブから辿ることができるブロブ(参照先のブロブ)に関する情報を示す。例えば、「接続ブロブ情報」には、「参照先」といった情報が含まれる。「参照先」は、エッジにより連結され、そのブロブから辿ることができる参照先(ブロブ)を識別するための情報を示す。すなわち、
図25の例では、ブロブを識別するブロブIDに対して、そのブロブからエッジにより辿ることができる参照先(ブロブ)が対応付けられて登録されている。なお、「接続ブロブ情報」には、参照先に接続されるエッジを識別するための情報(エッジID)等が含まれてもよい。
【0279】
図25の例では、ブロブID「BL1」により識別されるブロブ(ブロブBL1)からは、ブロブID「BL2」、「BL3」、「BL4」、「BL5」、「BL8」の各々により識別される5つのブロブにエッジが連結されていることを示す。すなわち、ブロブBL1からは、ブロブBL2、BL3、BL4、BL5、BL8の5つのブロブの各々へ辿ることができることを示す。
【0280】
なお、ブロブ連結グラフ情報記憶部126は、上記に限らず、目的に応じて種々の情報を記憶してもよい。また、ブロブ連結グラフは、クエリを入力とし、ブロブ連結グラフ中のエッジを辿ることによりオブジェクト(オブジェクトノード)を探索し、クエリに類似するオブジェクトを抽出し出力するプログラムモジュールを含んでもよい。すなわち、ブロブ連結グラフは、ブロブ連結グラフを用いて検索処理を行うプログラムモジュールとしての利用が想定されるものであってもよい。例えば、ブロブ連結グラフであるグラフGR41は、クエリとしてベクトルデータが入力された場合に、そのベクトルデータに類似するベクトルデータに対応するオブジェクトをブロブ連結グラフにより抽出し、出力するプログラムであってもよい。例えば、グラフGR41は、クエリ画像に対応する類似画像を検索するプログラムモジュールとして利用されるデータであってもよい。例えば、グラフGR41は、入力されたクエリに基づいて、ブロブ連結グラフにおいてそのクエリに類似するオブジェクトを抽出し、出力するよう、コンピュータを機能させる。
【0281】
(制御部130B)
図24の説明に戻って、制御部130Bは、コントローラ(controller)であり、例えば、CPUやMPUやGPU等によって、情報処理装置100B内部の記憶装置に記憶されている各種プログラム(情報処理プログラムの一例に相当)がRAMを作業領域として実行されることにより実現される。また、制御部130Bは、コントローラであり、例えば、ASICやFPGA等の集積回路により実現される。
【0282】
図24に示すように、制御部130Bは、取得部131と、生成部132Bと、検索処理部133Bと、提供部134とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部130Bの内部構成は、
図24に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
【0283】
第3の実施形態に係る取得部131は、データ検索の対象となる複数のオブジェクトが分類された複数のブロブを示すブロブ情報と、複数のオブジェクトを検索対象とするインデックスを示すインデックス情報とを取得する。取得部131は、複数のオブジェクトの各々に対応する複数のノードがエッジにより連結されたグラフを示すインデックス情報を取得する。取得部131は、クラスタリング処理により複数のオブジェクトが分類された複数のブロブを示すブロブ情報を取得する。取得部131は、各々に属するオブジェクトが相互に排他的な複数のブロブを示すブロブ情報を取得する。取得部131は、クエリを取得する。
【0284】
(生成部132B)
生成部132Bは、生成部132または生成部132Aと同様に各種情報を生成する。
【0285】
生成部132Bは、取得部131により取得されたインデックス情報を用いて、複数のオブジェクトのうち一のオブジェクトが属する第1ブロブから、一のオブジェクトの近傍オブジェクトが属するブロブである第2ブロブへエッジが連結されたブロブ連結グラフを生成する。生成部132Bは、複数のオブジェクトから一のオブジェクトを選択し、インデックス情報を用いて複数のオブジェクトを対象に、一のオブジェクトの前近傍オブジェクトを検索し、一のオブジェクトが属する第1ブロブから、近傍オブジェクトが属する第2ブロブへエッジを連結することにより、ブロブ連結グラフを生成する。
【0286】
生成部132Bは、複数のオブジェクトからランダムに一のオブジェクトを選択し、一のオブジェクトの近傍オブジェクトを検索し、一のオブジェクトが属する第1ブロブから、近傍オブジェクトが属する第2ブロブへエッジを連結することにより、ブロブ連結グラフを生成する。生成部132Bは、グラフを用いて第1ブロブから第2ブロブへエッジが連結されたブロブ連結グラフを生成する。
【0287】
生成部132Bは、グラフを用いて、一のオブジェクトの近傍オブジェクトを検索し、一のオブジェクトが属する第1ブロブから、近傍オブジェクトが属する第2ブロブへエッジを連結することにより、ブロブ連結グラフを生成する。生成部132Bは、第1ブロブから、グラフにおいて一のオブジェクトに対応する一のノードにエッジで連結されたノードである近傍ノードに対応する近傍オブジェクトが属する第2ブロブへエッジを連結することにより、ブロブ連結グラフを生成する。
【0288】
生成部132Bは、第1ブロブから、第1ブロブの代表点である第1代表点と、第2ブロブの代表点である第2代表点との間をエッジで連結することにより、ブロブ連結グラフを生成する。生成部132Bは、第1ブロブのセントロイドである第1代表点と、第2ブロブのセントロイドである第2代表点との間をエッジで連結することにより、ブロブ連結グラフを生成する。生成部132Bは、第1ブロブに属するオブジェクトを基に算出される中心点である第1代表点と、第2ブロブに属するオブジェクトを基に算出される中心点である第2代表点との間をエッジで連結することにより、ブロブ連結グラフを生成する。
【0289】
(検索処理部133B)
検索処理部133Bは、検索処理部133または検索処理部133Aと同様に検索処理に関する各種処理を行う。
【0290】
検索処理部133Bは、生成部132Bにより生成されたブロブ連結グラフを用いた検索処理を行う。検索処理部133Bは、ブロブ連結グラフを用いて、検索クエリの近傍オブジェクトを検索する検索処理を行う。検索処理部133Bは、ブロブ連結グラフにおいてブロブ間を連結するエッジを辿ることにより、検索クエリの近傍オブジェクトを検索する検索処理を行う。
【0291】
検索処理部133Bは、検索処理において、複数のブロブを示すブロブ情報を用いて、一のブロブに属するオブジェクトである対象オブジェクトと検索クエリとの距離を、ベクトル量子化された対象オブジェクトのベクトル情報を用いて算出する。検索処理部133Bは、対象オブジェクトと検索クエリとの距離の算出を並列化して一括で行う。検索処理部133Bは、情報処理装置の仕様に基づいて決定される一括処理数の対象オブジェクトと検索クエリとの距離の算出を並列処理する。
【0292】
〔3-3.情報処理のフロー〕
次に、
図26を用いて、第3の実施形態に係る情報処理の手順について説明する。
図26は、第3の実施形態に係る情報処理の一例を示すフローチャートである。
【0293】
図26に示すように、情報処理装置100Bは、データ検索の対象となる複数のオブジェクトが分類された複数のグループを示すグループ情報を取得する(ステップS501)。例えば、情報処理装置100Bは、データ検索の対象となる複数のオブジェクトに対応するノード(オブジェクトノード)が分類された複数のブロブを示すブロブ情報を取得する。
【0294】
情報処理装置100Bは、複数のオブジェクトを検索対象とするインデックスを示すインデックス情報を取得する(ステップS502)。例えば、情報処理装置100Bは、複数のオブジェクトに対応するノード(オブジェクトノード)がエッジで連結されたグラフをインデックスとして取得する。
【0295】
情報処理装置100Bは、インデックス情報を用いて、複数のオブジェクトのうち一のオブジェクトが属する第1グループから、一のオブジェクトの近傍オブジェクトが属するグループである第2グループへエッジが連結されたグループ連結グラフを生成する(ステップS503)。例えば、情報処理装置100Bは、インデックス情報を用いて、複数のオブジェクトのうち一のオブジェクトが属する第1ブロブから、一のオブジェクトの近傍オブジェクトが属するブロブである第2ブロブへエッジが連結されたブロブ連結グラフを生成する。
【0296】
〔3-4.検索処理例〕
ここで、第3の実施形態に係る検索処理の一例について、
図27及び
図28を一例として説明する。
図27及び
図28は、第3の実施形態に係る検索処理の一例を示すフローチャートである。以下に説明する検索処理は、情報処理装置100Bの検索処理部133Bによって行われる。なお、第1の実施形態や第2の実施形態で説明した検索処理と同様の点については適宜説明を省略する。
【0297】
図27及び
図28では、N(G、s)およびCはブロブの集合(ブロブ集合)となる。また、「G」は、ブロブ間がエッジで連結されたグラフ(ブロブ連結グラフ)データ(例えば、空間情報SP41に示すグラフGR41等)であってもよい。例えば、情報処理装置100Bは、k近傍検索処理を実行する。
【0298】
まず、
図27に示す処理(メイン処理)について説明する。例えば、情報処理装置100Bは、超球の半径rを∞(無限大)に設定し、ブロブ集合Cを空集合(Φ)に設定する(ステップS601)。そして、情報処理装置100Bは、既存のブロブ集合(全てのブロブ)から部分ブロブ集合Bを抽出する(ステップS602)。例えば、情報処理装置100Bは、ルートノードとして選択されたオブジェクト(ノード)が属するブロブを部分ブロブ集合Bとして抽出してもよい。また、例えば、情報処理装置100Bは、ランダムにブロブを部分ブロブ集合Bとして抽出してもよい。
【0299】
そして、情報処理装置100Bは、判定処理を実行する(ステップS603)。情報処理装置100Bは、
図28に示すステップS701~S717の判定処理を実行する。
図28に示す判定処理の詳細については後述する。
【0300】
そして、情報処理装置100Bは、ブロブ集合Sに部分ブロブ集合Bを設定する(ステップS604)。
【0301】
情報処理装置100Bは、ブロブ集合Sに含まれるブロブの中で最小のクエリ距離dのブロブsを選択する(ステップS605)。なお、ここでいう「クエリ距離」とは、ブロブ内の全てのオブジェクトとクエリオブジェクト(クエリ)間の中で最も短い距離である。例えば、情報処理装置100Bは、クエリ(検索クエリ)となるオブジェクトをyとすると、ブロブ集合Sのうち、オブジェクトyとのクエリ距離が最も短いブロブsを選択する。なお、クエリ距離は、上記に限らず、例えばクエリとブロブの代表点(セントロイド等)との間の距離であってもよい。そして、情報処理装置100Bは、ブロブ集合Sからブロブsを除外する(ステップS606)。
【0302】
そして、情報処理装置100Bは、ブロブsのクエリ距離dがr(1+ε)を超えるか否かを判定する(ステップS607)。ブロブsのクエリ距離dがr(1+ε)を超える場合(ステップS607:Yes)、情報処理装置100Bは、オブジェクト集合Rをオブジェクトyの近傍オブジェクト集合として出力し(ステップS608)、処理を終了する。
【0303】
ブロブsのクエリ距離dがr(1+ε)を超えない場合(ステップS607:No)、情報処理装置100Bは、ブロブsがブロブ集合Cに含まれるかを判定する(ステップS609)。
【0304】
ブロブsがブロブ集合Cに含まれる場合(ステップS609:Yes)、情報処理装置100Bは、ステップS605に戻って処理を繰り返す。
【0305】
ブロブsがブロブ集合Cに含まれない場合(ステップS609:No)、情報処理装置100Bは、ブロブ集合Cにブロブsを追加する(ステップS610)。
【0306】
そして、情報処理装置100Bは、部分ブロブ集合Bにブロブsの近傍ブロブ集合N(G,s)を設定する(ステップS611)。近傍ブロブ集合N(G,s)は、例えばブロブsに関連付けられているブロブ(近傍のブロブ)の集合である。例えば、近傍ブロブ集合N(G,s)は、ブロブsからのエッジが連結されているブロブ(近傍のブロブ)の集合である。そして、情報処理装置100Bは、判定処理を実行する(ステップS612)。詳細は後述するが、例えば、情報処理装置100Bは、上述したステップS603と同様に、
図28に示すステップS701~S717の判定処理を実行する。
【0307】
そして、情報処理装置100Bは、ブロブ集合Sが空集合(Φ)であるか否かを判定する(ステップS613)。ブロブ集合Sが空集合でない場合(ステップS613:No)、情報処理装置100Bは、ステップS605に戻って処理を繰り返す。また、ブロブ集合Sが空集合である場合(ステップS613:Yes)、情報処理装置100Bは、オブジェクト集合Rを出力し、処理を終了する(ステップS614)。例えば、情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクト(ノード)を追加ノード(入力オブジェクトy)に対応する近傍ノードとして選択してもよい。例えば、情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクト(ノード)を対象ノード(入力オブジェクトy)に対応する近傍ノードとして抽出(選択)してもよい。また、例えば、情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクト(ノード)を検索クエリ(入力オブジェクトy)に対応する検索結果として、検索を行った端末装置等へ提供してもよい。
【0308】
ここから、
図28に示す処理(判定処理)について説明する。まず、情報処理装置100Bは、ブロブ集合Tに部分ブロブ集合Bを設定する(ステップS701)。
【0309】
そして、情報処理装置100Bは、ブロブ集合Tからブロブbを一つ取得し、ブロブ集合Tからブロブbを削除する(ステップS702)。そして、情報処理装置100Bは、判定処理に用いる変数であるminを∞(無限大)に設定する(ステップS703)。
【0310】
そして、情報処理装置100Bは、ブロブbからオブジェクトuを一つ取得し、ブロブbからオブジェクトuを削除する(ステップS704)。
【0311】
そして、情報処理装置100Bは、オブジェクトuとオブジェクトyとの距離d(u,y)がmin未満か否かを判定する(ステップS705)。
【0312】
オブジェクトuとオブジェクトyとの距離d(u,y)がmin未満である場合(ステップS705:Yes)、情報処理装置100Bは、minの値を距離d(u,y)に設定(更新)し(ステップS706)、ステップS707の処理を行う。
【0313】
オブジェクトuとオブジェクトyとの距離d(u,y)がmin未満ではない場合(ステップS705:No)、情報処理装置100Bは、ステップS706の処理を行わず、ステップS707の処理を行う。
【0314】
情報処理装置100Bは、オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下であるか否かを判定する(ステップS707)。
【0315】
オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下である場合(ステップS707:Yes)、情報処理装置100Bは、ブロブbをブロブ集合Sに追加し(ステップS708)、ステップS709の処理を行う。
【0316】
オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下ではない場合(ステップS707:No)、情報処理装置100Bは、ステップS708の処理を行わず、ステップS709の処理を行う。
【0317】
情報処理装置100Bは、オブジェクトuとオブジェクトyとの距離d(u,y)がr以下であるか否かを判定する(ステップS709)。
【0318】
オブジェクトuとオブジェクトyとの距離d(u,y)がr以下である場合(ステップS709:Yes)、情報処理装置100Bは、オブジェクトuをオブジェクト集合Rに追加し(ステップS710)、ステップS711の処理を行う。
【0319】
オブジェクトuとオブジェクトyとの距離d(u,y)がr以下ではない場合(ステップS709:No)、情報処理装置100Bは、ステップS710の処理を行わず、ステップS711の処理を行う。
【0320】
情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクト数がksを超えるか否かを判定する(ステップS711)。所定数ksは、任意に定められる自然数である。例えば、ksは、検索数や抽出対象数であってもよい。また、例えば、範囲検索等において抽出するオブジェクト数の上限を設けない場合、ksは、無限大に設定されてもよい。例えば、ks=4等であってもよい。
【0321】
オブジェクト集合Rに含まれるオブジェクト数がksを超える場合(ステップS711:Yes)、情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyから最も遠いオブジェクトを、オブジェクト集合Rから除外し(ステップS712)、ステップS713の処理を行う。
【0322】
オブジェクト集合Rに含まれるオブジェクト数がksを超えない場合(ステップS711:No)、情報処理装置100Bは、ステップS712の処理を行わず、ステップS713の処理を行う。
【0323】
情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクト数がksと一致するか否かを判定する(ステップS713)。
【0324】
オブジェクト集合Rに含まれるオブジェクト数がksと一致する場合(ステップS713:Yes)、情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyから最も遠いオブジェクトと、オブジェクトyとの距離をrに設定し(ステップS714)、ステップS715の処理を行う。
【0325】
オブジェクト集合Rに含まれるオブジェクト数がksと一致しない場合(ステップS713:No)、情報処理装置100Bは、ステップS714の処理を行わず、ステップS715の処理を行う。
【0326】
情報処理装置100Bは、ブロブbが空集合(Φ)であるか否かを判定する(ステップS715)。ブロブbが空集合でない場合(ステップS715:No)、情報処理装置100Bは、ステップS704に戻って処理を繰り返す。
【0327】
また、ブロブbが空集合である場合(ステップS715:Yes)、情報処理装置100Bは、minを部分ブロブ集合B内のブロブbのブロブのクエリ距離とする(ステップS716)。例えば、情報処理装置100Bは、ブロブbの全てのオブジェクトとクエリとの間の距離のうち最も短い距離をクエリ距離としてminに設定する。
【0328】
情報処理装置100Bは、ブロブ集合Tが空集合(Φ)であるか否かを判定する(ステップS717)。ブロブ集合Tが空集合でない場合(ステップS717:No)、情報処理装置100Bは、ステップS702に戻って処理を繰り返す。
【0329】
また、ブロブ集合Tが空集合である場合(ステップS717:Yes)、判定処理を終了する。
【0330】
〔3-5.変形例〕
ブロブ連結グラフは、上述した例に限らず様々な態様により構成されてもよい。例えば、ブロブ連結グラフは、各グループ(ブロブ)の代表点間がエッジで連結されたグラフであってもよい。この点について、以下、第3の実施形態に係る変形例として説明する。なお、第1の実施形態や第2の実施形態や第3の実施形態と同様の点については、適宜説明を省略する。第3の実施形態の変形例に係る情報処理装置100Bは、ブロブ情報記憶部125及びブロブ連結グラフ情報記憶部126に代えて、ブロブ情報記憶部125A及びブロブ連結グラフ情報記憶部126Aを有する。
【0331】
〔3-5-1.情報処理〕
まず、
図29を用いて、変形例に係る情報処理の概要を説明する。
図29は、変形例に係るブロブ連結グラフ情報の一例を示す図である。
図29の例ではブロブがクラスタリングにより生成されている場合を示す。
【0332】
図29の例では、情報処理装置100Bは、各ブロブのセントロイドを連結したブロブ連結グラフを生成する。情報処理装置100Bは、空間情報SP41に示すように、各ブロブBL1~BL10の各々に対応するセントロイドC1~C10をエッジで連結したブロブ連結グラフであるグラフGR42を生成する。情報処理装置100Bは、グラフ生成に関する種々の従来技術を適宜用いてグラフGR42を生成する。
【0333】
例えば、情報処理装置100Bは、ブロブBL1のセントロイドC1がブロブBL2のセントロイドC2、ブロブBL3のセントロイドC3、ブロブBL4のセントロイドC4、ブロブBL7のセントロイドC7、及びブロブBL8のセントロイドC8の5つのセントロイドにエッジで連結されたグラフGR42を生成する。また、例えば、情報処理装置100Bは、ブロブBL2のセントロイドC2が、ブロブBL1のセントロイドC1、ブロブBL3のセントロイドC3、及びブロブBL4のセントロイドC4の3つのセントロイドにエッジで連結されたグラフGR42を生成する。
【0334】
なお、情報処理装置100Bは、どのような方法によりグラフGR42を生成してもよい。情報処理装置100Bは、様々なインデックスを用いて、グラフGR42を生成してもよい。例えば、情報処理装置100Bは、オブジェクトノードが連結されたグラフGR21を用いて、グラフGR42を生成してもよい。この場合、情報処理装置100Bは、
図23中のグラフGR41と同様の処理によりグラフGR42を生成できるため、詳細な説明は省略する。例えば、情報処理装置100Bは、
図23に示す例と同様の処理により、グラフGR42を生成してもよい。なお、グラフGR42は無向(双方向)エッジを一例として示すが、有向エッジであってもよい。
【0335】
このように、変形例に係る情報処理装置100Bは、セントロイドのグラフをブロブ連結グラフとして生成する。そして、情報処理装置100Bは、生成したブロブ連結グラフを用いてセントロイドで通常の検索を行い、距離計算はブロブ単位で行う。このように、情報処理装置100Bは、ブロブをセントロイドで代表させることで、簡便な処理とすることができる。なお、情報処理装置100Bは、ブロブがクラスタリングではない場合には、各ブロブに属するオブジェクトを基に中心点を算出し、算出した中心点を代表点として用いてもよい。
【0336】
図29の例では、情報処理装置100Bは、空間情報SP42に示すように、ブロブの代表点であるセントロイド間がエッジで連結されたグラフGR42を用いて、検索処理を行う。例えば、情報処理装置100Bは、検索クエリQE2を対象として、グラフGR21を用いた
図27及び
図28に示すような検索処理を行うことにより、検索クエリQE2の検索結果を得る。この点については、上述した例と同様であり詳細な説明は省略する。
【0337】
〔3-5-2.情報〕
次に、
図30及び
図31を用いて、変形例に係る情報の概要を説明する。
図30は、変形例に係るブロブ情報記憶部の一例を示す図である。
図31は、変形例に係るブロブ連結グラフ情報記憶部の一例を示す図である。
【0338】
まず、
図30に示す変形例に係るブロブ情報記憶部125Aについて説明する。
図30に示す変形例に係るブロブ情報記憶部125Aは、「ブロブID」、「ノードID」、「ベクトル情報」、および「セントロイドID」といった項目が含まれる。このように、変形例に係るブロブ情報記憶部125Aは、「セントロイドID」を有する点で
図15のブロブ情報記憶部125と相違する。なお、
図15のブロブ情報記憶部125と同様の点については適宜説明を省略する。
【0339】
「セントロイドID」は、各ブロブのセントロイドを識別するための識別情報を示す。「ベクトル情報」は、ブロブの代表点であるセントロイドのベクトル情報を示す。
【0340】
図30に示す例では、ブロブID「BL1」により識別されるブロブBL1のセントロイドは、セントロイドID「C1」により識別されるセントロイド(セントロイドC1)であることを示す。ブロブID「BL9」により識別されるブロブBL9のセントロイドは、セントロイドID「C9」により識別されるセントロイド(セントロイドC9)であることを示す。
【0341】
なお、ブロブ情報記憶部125Aは、上記に限らず、目的に応じて種々の情報を記憶してもよい。
【0342】
次に、
図31に示す変形例に係るブロブ連結グラフ情報記憶部126Aについて説明する。
図30に示す変形例に係るブロブ連結グラフ情報記憶部126Aは、「セントロイドID」および「接続セントロイド情報」といった項目を有する。なお、
図25のブロブ連結グラフ情報記憶部126と同様の点については適宜説明を省略する。
【0343】
「セントロイドID」は、グラフにおける各ブロブの代表点であるセントロイドを識別するための識別情報を示す。「接続セントロイド情報」は、対応するセントロイドから辿ることができるセントロイド(参照先のセントロイド)に関する情報を示す。例えば、「接続セントロイド情報」には、「参照先」といった情報が含まれる。「参照先」は、エッジにより連結され、そのセントロイドから辿ることができる参照先(セントロイド)を識別するための情報を示す。すなわち、
図31の例では、セントロイドを識別するセントロイドIDに対して、そのセントロイドからエッジにより辿ることができる参照先(セントロイド)が対応付けられて登録されている。なお、「接続セントロイド情報」には、参照先に接続されるエッジを識別するための情報(エッジID)等が含まれてもよい。
【0344】
図31の例では、セントロイドID「C1」により識別されるセントロイド(セントロイドC1)からは、セントロイドID「C2」、「C3」、「C4」、「C7」、「C8」の各々により識別される5つのセントロイドにエッジが連結されていることを示す。すなわち、セントロイドC1からは、セントロイドC2、C3、C4、C7、C8の5つのセントロイドの各々へ辿ることができることを示す。
【0345】
なお、ブロブ連結グラフ情報記憶部126Aは、上記に限らず、目的に応じて種々の情報を記憶してもよい。また、ブロブ連結グラフは、クエリを入力とし、ブロブ連結グラフ中のエッジを辿ることによりオブジェクト(オブジェクトノード)を探索し、クエリに類似するオブジェクトを抽出し出力するプログラムモジュールを含んでもよい。すなわち、ブロブ連結グラフは、ブロブ連結グラフを用いて検索処理を行うプログラムモジュールとしての利用が想定されるものであってもよい。例えば、ブロブ連結グラフであるグラフGR42は、クエリとしてベクトルデータが入力された場合に、そのベクトルデータに類似するベクトルデータに対応するオブジェクトをブロブ連結グラフにより抽出し、出力するプログラムであってもよい。例えば、グラフGR42は、クエリ画像に対応する類似画像を検索するプログラムモジュールとして利用されるデータであってもよい。例えば、グラフGR42は、入力されたクエリに基づいて、ブロブ連結グラフにおいてそのクエリに類似するオブジェクトを抽出し、出力するよう、コンピュータを機能させる。
【0346】
上述したように、各実施形態及び変形例において、情報処理システム1は、以下のような処理を実行する。例えば、情報処理システム1は、ベクトルのクラスタリングでブロブを生成する。例えば、情報処理システム1は、ブロブのセントロイドをノードとしてグラフインデックスを生成する。
【0347】
例えば、情報処理システム1は、任意のベクトルを一定数取得して、直積量子化のクラスタリングを行う。つまり、情報処理システム1は、部分ベクトルに分割して、部分ベクトル単位にクラスタリングを行い、コードブックを生成する。
【0348】
例えば、情報処理システム1は、ブロブ単位に属するオブジェクトを直積量子化し、転置インデックスを生成する。例えば、情報処理システム1は、オブジェクトからブロブへのエッジを含むグラフ(ブロブ用グラフ)を生成する。例えば、情報処理システム1は、一般的な直積量子化の手法を用により近傍オブジェクトを検索する。ここでいう一般的な直積量子化の手法とは、例えば、オブジェクトとブロブのすべてのセントロイドとの距離を算出し上位一定数のブロブを取得した後に、ブロブ内のオブジェクトの距離を直積量子化で距離を求めて近傍オブジェクトを取得することであってもよい。なお、情報処理システム1は、上述したように、セントロイドのグラフを生成している場合はグラフを用いて一定数のブロブを検索して取得することが可能である。または、情報処理システム1は、上記した、オブジェクトからブロブへのエッジを含むグラフ(ブロブ用グラフ)ではなく、ブロブ間をエッジで連結したグラフ(ブロブ連結グラフ)を生成してもよい。
【0349】
〔4.効果〕
上述してきたように、第2の実施形態または変形例に係る情報処理装置100Aは、取得部131と、生成部132Aとを有する。取得部131は、データ検索の対象となる複数のオブジェクトを示す第1情報と、複数のオブジェクトを分類するために用いる第2情報とを取得する。生成部132Aは、取得部131により取得された第2情報を用いて、第1情報が示す複数のオブジェクトを分類し、複数のオブジェクトを対象とする検索処理において一括処理を行うために用いられる複数のグループを示す第3情報を生成する。
【0350】
このように、第2の実施形態または変形例に係る情報処理装置100Aは、複数のオブジェクトを分類するために用いる第2情報を用いて、複数のオブジェクトを分類し、複数のオブジェクトを対象とする検索処理において一括処理を行うために用いられる複数のグループを示す第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0351】
取得部131は、複数のオブジェクトを検索対象とするインデックスである第2情報を取得する。生成部132Aは、第2情報を用いて、複数のオブジェクトを複数のグループに分類する第3情報を生成する。
【0352】
このように、情報処理装置100Aは、複数のオブジェクトを検索対象とするインデックスを用いて、第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0353】
また、生成部132Aは、第2情報を用いた検索により、複数のオブジェクトを複数のグループに分類する第3情報を生成する。
【0354】
このように、情報処理装置100Aは、インデックスを用いた検索により、第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0355】
取得部131は、複数のオブジェクトの各々に対応する複数のノードがエッジにより連結されたグラフである第2情報を取得する。生成部132Aは、第2情報を用いて、複数のオブジェクトを複数のグループに分類する第3情報を生成する。
【0356】
このように、情報処理装置100Aは、複数のオブジェクトの各々に対応する複数のノードがエッジにより連結されたグラフを用いて、第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0357】
また、生成部132Aは、グラフ中の複数のノードから一のノードを選択し、一のノードにエッジで連結されたノードである近傍ノードのうち少なくとも一部のノードである分類対象ノード、及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。
【0358】
このように、情報処理装置100Aは、グラフを用いた分類処理により、第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0359】
また、生成部132Aは、一のノードの近傍ノードのうち所定の数のノードである分類対象ノード、及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。
【0360】
このように、情報処理装置100Aは、一のノードの近傍ノードのうち所定の数のノードである分類対象ノード、及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0361】
また、生成部132Aは、一のノードの近傍ノードの全てである分類対象ノード、及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。
【0362】
このように、情報処理装置100Aは、一のノードの全近傍ノード、及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0363】
また、生成部132Aは、複数のノードの各々にエッジで連結されたノードである近傍ノードの数に基づいて、複数のノードから一のノードを選択し、一のノードの分類対象ノード及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。
【0364】
このように、情報処理装置100Aは、近傍ノードの数に基づいて選択された一のノードを対象として分類処理を繰り返して第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0365】
また、生成部132Aは、近傍ノードの数が大きい方から順に一のノードを選択し、一のノードの分類対象ノード及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。
【0366】
このように、情報処理装置100Aは、近傍ノードの数が大きい方から順に選択された一のノードを対象として分類処理を繰り返して第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0367】
また、生成部132Aは、近傍ノードの数が小さい方から順に一のノードを選択し、一のノードの分類対象ノード及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。
【0368】
このように、情報処理装置100Aは、近傍ノードの数が小さい方から順に選択された一のノードを対象として分類処理を繰り返して第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0369】
また、生成部132Aは、複数のノードからランダムに一のノードを選択し、一のノードの分類対象ノード及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。
【0370】
このように、情報処理装置100Aは、ランダムに選択された一のノードを対象として分類処理を繰り返して第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0371】
また、生成部132Aは、一のグループに分類された一のノードの分類対象ノード及び一のノードである処理済みノード群をグラフから除外し、処理済みノード群を除外した後のグラフを用いて、分類処理を繰り返すことにより、第3情報を生成する。
【0372】
このように、情報処理装置100Aは、分類済みのノードを除外し、分類処理を繰り返して第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0373】
また、生成部132Aは、処理済みノード群を除外した後のグラフを用いて、分類処理を複数のオブジェクトがいずれかのグループに分類されるまで繰り返すことにより、第3情報を生成する。
【0374】
このように、情報処理装置100Aは、全オブジェクトがいずれかのグループに分類されるまで分類処理を繰り返して第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0375】
また、生成部132Aは、各々に属するオブジェクトが相互に排他的な複数のグループを示す第3情報を生成する。
【0376】
このように、情報処理装置100Aは、各々に属するオブジェクトが相互に排他的な複数のグループを示す第3情報を生成することで、第3情報によって検索処理において一括処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0377】
取得部131は、複数のオブジェクトを検索対象とするインデックスである第4情報を取得する。生成部132Aは、第4情報を用いて、複数のオブジェクトのうち少なくとも一部のオブジェクトに対応するノードであるオブジェクトノードから、複数のグループのうち、オブジェクトノードが属するグループ以外の他のグループへエッジが連結されたグループグラフを生成する。
【0378】
このように、情報処理装置100Aは、複数のオブジェクトを検索対象とするインデックスを用いて、グループグラフを生成することで、グループグラフを用いて検索処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0379】
生成部132Aは、複数のオブジェクトから一のオブジェクトを選択し、第4情報を用いて複数のオブジェクトを対象に、一のオブジェクトの近傍オブジェクトを検索し、一のオブジェクトに対応する一のオブジェクトノードから、近傍オブジェクトが属する他のグループへエッジを連結する連結処理により、グループグラフを生成する。
【0380】
このように、情報処理装置100Aは、一のオブジェクトノードから、近傍オブジェクトが属する他のグループへエッジを連結する連結処理により、グループグラフを生成することで、グループグラフを用いて検索処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0381】
生成部132Aは、複数のオブジェクトからランダムに一のオブジェクトを選択し、一のオブジェクトの近傍オブジェクトを検索し、一のオブジェクトに対応する一のオブジェクトノードから、近傍オブジェクトが属する他のグループへエッジを連結する連結処理により、グループグラフを生成する。
【0382】
このように、情報処理装置100Aは、ランダムに選択した一のオブジェクトノードから、近傍オブジェクトが属する他のグループへエッジを連結する連結処理により、グループグラフを生成することで、グループグラフを用いて検索処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0383】
取得部131は、複数のオブジェクトの各々に対応する複数のオブジェクトノードがエッジにより連結されたグラフである第4情報を取得する。生成部132Aは、第4情報を用いて、グループグラフを生成する。
【0384】
このように、情報処理装置100Aは、複数のオブジェクトノードがエッジにより連結されたグラフを用いて、グループグラフを生成することで、グループグラフを用いて検索処理を行うことが可能となる。したがって、情報処理装置100Aは、検索処理に利用可能な情報を生成することができる。
【0385】
〔5.ハードウェア構成〕
上述してきた各実施形態に係る情報処理装置100、100A、100Bは、例えば
図32に示すような構成のコンピュータ1000によって実現される。
図32は、情報処理装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。コンピュータ1000は、CPU1100、RAM1200、ROM(Read Only Memory)1300、HDD(Hard Disk Drive)1400、通信インターフェイス(I/F)1500、入出力インターフェイス(I/F)1600、及びメディアインターフェイス(I/F)1700を有する。
【0386】
CPU1100は、ROM1300またはHDD1400に格納されたプログラムに基づいて動作し、各部の制御を行う。ROM1300は、コンピュータ1000の起動時にCPU1100によって実行されるブートプログラムや、コンピュータ1000のハードウェアに依存するプログラム等を格納する。
【0387】
HDD1400は、CPU1100によって実行されるプログラム、及び、かかるプログラムによって使用されるデータ等を格納する。通信インターフェイス1500は、ネットワークNを介して他の機器からデータを受信してCPU1100へ送り、CPU1100が生成したデータをネットワークNを介して他の機器へ送信する。
【0388】
CPU1100は、入出力インターフェイス1600を介して、ディスプレイやプリンタ等の出力装置、及び、キーボードやマウス等の入力装置を制御する。CPU1100は、入出力インターフェイス1600を介して、入力装置からデータを取得する。また、CPU1100は、生成したデータを入出力インターフェイス1600を介して出力装置へ出力する。
【0389】
メディアインターフェイス1700は、記録媒体1800に格納されたプログラムまたはデータを読み取り、RAM1200を介してCPU1100に提供する。CPU1100は、かかるプログラムを、メディアインターフェイス1700を介して記録媒体1800からRAM1200上にロードし、ロードしたプログラムを実行する。記録媒体1800は、例えばDVD(Digital Versatile Disc)、PD(Phase change rewritable Disk)等の光学記録媒体、MO(Magneto-Optical disk)等の光磁気記録媒体、テープ媒体、磁気記録媒体、または半導体メモリ等である。
【0390】
例えば、コンピュータ1000が第1の実施形態に係る情報処理装置100として機能する場合、コンピュータ1000のCPU1100は、RAM1200上にロードされたプログラムを実行することにより、制御部130の機能を実現する。コンピュータ1000のCPU1100は、これらのプログラムを記録媒体1800から読み取って実行するが、他の例として、他の装置からネットワークNを介してこれらのプログラムを取得してもよい。
【0391】
以上、本願の実施形態のいくつかを図面に基づいて詳細に説明したが、これらは例示であり、発明の開示の行に記載の態様を始めとして、当業者の知識に基づいて種々の変形、改良を施した他の形態で本発明を実施することが可能である。
【0392】
〔6.その他〕
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、各図に示した各種情報は、図示した情報に限られない。
【0393】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【0394】
また、上述してきた各実施形態に記載された各処理は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【0395】
また、上述してきた「部(section、module、unit)」は、「手段」や「回路」などに読み替えることができる。例えば、取得部は、取得手段や取得回路に読み替えることができる。
【符号の説明】
【0396】
1 情報処理システム
10 端末装置
50 情報提供装置
100、100A、100B 情報処理装置
120、120A、120B 記憶部
121 オブジェクト情報記憶部
122 グラフ情報記憶部
123、123A 量子化情報記憶部
124 コードブック情報記憶部
125、125A ブロブ情報記憶部
126、126A ブロブ連結グラフ情報記憶部
130、130A、130B 制御部
131 取得部
132、132A、132B 生成部
133、133A、133B 検索処理部
134 提供部