以下に、本願に係る情報処理装置、情報処理方法、及び情報処理プログラムを実施するための形態(以下、「実施形態」と呼ぶ)について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る情報処理装置、情報処理方法、及び情報処理プログラムが限定されるものではない。また、以下の各実施形態において同一の部位には同一の符号を付し、重複する説明は省略される。
(実施形態)
〔1.第1の実施形態〕
〔1-1.情報処理〕
図1を用いて、第1の実施形態に係る情報処理の一例について説明する。図1は、第1の実施形態に係る情報処理の一例を示す図である。情報処理装置100は、データ検索の対象となる複数のオブジェクトをグラフ構造化したグラフインデックス(単に「グラフ」ともいう)を用いた検索処理を実行する。図1では、情報処理装置100がデータ検索の対象であるオブジェクトがベクトル化された各ベクトルに対応するノードがエッジで連結されたグラフを用いて近傍検索を行う場合の検索処理の一部を示す。情報処理装置100は、グラフの各ノードを検索対象のオブジェクトとして、グラフを辿って与えられた検索クエリ(ベクトル)の近傍のノードを探索する。情報処理装置100は、検索処理により、抽出する近傍のノードの数として指定された所定数(以下「検索数」ともいう)のノードを、検索クエリの近傍のノードとして抽出する。以下では、画像情報をデータ検索の対象とした場合を一例として説明するが、データ検索の対象は、動画情報や音声情報等の種々の対象であってもよい。
情報処理装置100は、数百万~数億等の単位の膨大な画像情報に対応するノードを対象に検索処理を行うが、図面においてはその一部(図1ではノードN1等の数十個)のみを図示する。例えば、情報処理装置100は、図1中の空間情報SP1に示すように、ノードN1、N7、N9等に示すような複数のノード(ベクトル)に関する情報を取得する。このように「ノードN*(*は任意の数値)」と記載した場合、そのノードはノードID「N*」により識別されるノードであることを示す。例えば、「ノードN1」と記載した場合、そのノードはノードID「N1」により識別されるノードである。空間情報SP1中の白丸(〇)の各々が各ノードを示す。
図1中の空間情報SP1では、主に説明に関係するノードに符号を付すが、符号が付されていない白丸(〇)の各々もノードであり、図示するノード以外にも多数のノードが含まれる。また、各ノードは、各オブジェクト(検索対象)に対応する。例えば、画像から抽出された複数の局所特徴量のそれぞれがオブジェクトであってもよい。また、例えば、オブジェクト間の距離が定義された種々のデータがオブジェクトであってもよい。
例えば図1中の空間情報SP1は、ユークリッド空間であってもよい。例えば、空間情報SP1は、オブジェクトのベクトルの次元数に対応し、100次元や1000次元等の多次元空間であるものとする。なお、図1では、空間情報SP1に示すように直積量子化によりベクトル(空間)が複数の部分領域(部分空間)に4分割された状態を概念的に図示するが、直積量子化の点については後述する。
空間情報SP1中のノードである白丸(〇)間を接続する点線がノード間を連結するエッジを示す。図1の例では、説明を簡単にするために、ノード間が無向(双方向)エッジ(以下単に「エッジ」ともいう)により連結される場合を示す。なお、ここでいう無向エッジとは、連結されたノード間を双方向にデータを辿ることができるエッジを意味する。例えば、ノードN1を示す白丸(〇)とノードN4を示す白丸(〇)との間は点線で接続されており、ノードN1とノードN4との間はエッジで連結されていることを示す。すなわち、空間情報SP1に示すグラフではノードN1とノードN4との間を双方向に辿ることが可能となる。具体的には、空間情報SP1ではノードN1からノードN4へ辿ることができ、かつノードN4からノードN1へ辿ることができる。
なお、図1の例では、図示の関係上、図示したノード間を連結するエッジのみを図示するが、図示したエッジ以外にも多数のエッジが含まれる。このように、図1中の空間情報SP1では、エッジの一部のみを図示するが、例えばk近傍グラフ(k-nearest neighbor graph)であるものとする。なお、空間情報SP1は、種々のグラフであってもよい。
また、グラフのエッジは、無向エッジに限らず、有向エッジであってもよい。有向エッジの場合、有向エッジの参照元となっているノードから参照先のノードへのみ辿ることができる。例えば、2つのノード間が、一方を参照元とし他方を参照先とする第1エッジ、及び一方を参照先とし他方を参照元とする第2エッジの2つの有向エッジで連結されている場合、その2つのノード間が無向(双方向)エッジで連結されて状態と同じ状態である。
ここから、図1を用いて検索処理について説明する。図1の例では、情報処理装置100は、空間情報SP1に示すようなグラフGR1を取得済みであるものとする。なお、情報処理装置100は、種々の従来技術を適宜用いてグラフGR1を生成してもよい。まず、検索処理の説明に先立ってベクトル(空間)の直積量子化について説明する。
図1では、空間情報SP1に示すように直積量子化によりベクトル(空間)が4つの部分空間AR11~AR14に分割された状態を概念的に図示する。図1に示す部分空間AR11~AR14は、各ノード(オブジェクト)のベクトル間の距離等の説明のための概念的な図で示すが、各部分空間AR11~AR14は多次元空間となる。例えば、図1に示す部分空間AR11は、平面上に図示するため2次元の態様にて図示されるが、例えば100次元や1000次元等の多次元空間であるものとする。
各部分空間AR11~AR14の各々は、4分割されるベクトルの各分割(部分ベクトル)に対応する空間を示す。なお、例えば100次元のベクトルを100分割しても良い。例えば、部分空間AR11は、ベクトルが4分割された4つの部分ベクトル(「サブベクトル」ともいう)のうち、先頭の部分ベクトル(「第1サブベクトル」ともいう)に対応する次元の空間(「第1サブ空間」ともいう)を示す。部分空間AR11は、ベクトルの先頭の分割位置に対応する部分空間(第1サブ空間)を示す。検索クエリQE1の場合、部分空間AR11は、先頭の部分ベクトル(第1サブベクトル)である第1部分クエリQE1-1に対応する空間である。
また、部分空間AR12は、ベクトルが4分割された4つの部分ベクトルのうち、先頭から2番目の部分ベクトル(「第2サブベクトル」ともいう)に対応する次元の空間(「第2サブ空間」ともいう)を示す。部分空間AR12は、ベクトルの先頭から2番目の分割位置に対応する部分空間(第2サブ空間)を示す。検索クエリQE1の場合、部分空間AR12は、先頭から2番目の部分ベクトル(第2サブベクトル)である第2部分クエリQE1-2に対応する空間である。
また、部分空間AR13は、ベクトルが4分割された4つの部分ベクトルのうち、先頭から3番目の部分ベクトル(「第3サブベクトル」ともいう)に対応する次元の空間(「第3サブ空間」ともいう)を示す。部分空間AR13は、ベクトルの先頭から3番目の分割位置に対応する部分空間(第3サブ空間)を示す。検索クエリQE1の場合、部分空間AR13は、先頭から3番目の部分ベクトル(第3サブベクトル)である第3部分クエリQE1-3に対応する空間である。
また、部分空間AR14は、ベクトルが4分割された4つの部分ベクトルのうち、先頭から4番目(すなわち最後尾)の部分ベクトル(「第4サブベクトル」ともいう)に対応する次元の空間(「第4サブ空間」ともいう)を示す。部分空間AR14は、ベクトルの先頭から4番目の分割位置に対応する部分空間(第4サブ空間)を示す。検索クエリQE1の場合、部分空間AR14は、先頭から4番目の部分ベクトル(第4サブベクトル)である第4部分クエリQE1-4に対応する空間である。
なお、図1の例では、部分空間AR11~AR14を類似の形状で示すが、各部分空間AR11~AR14の形状は異なってもよいし、また各部分空間AR11~AR14における領域の分割態様も異なってもよい。また、ノード間のエッジによる接続関係は部分空間AR11~AR14で共通であるものとする。すなわち、グラフGR1は、空間情報SP1に対応するグラフであり、部分空間AR11~AR14で共通である。
また、図1の例では、分割された部分ベクトル(サブベクトル)ごとにルックアップテーブルが生成される。例えば、第1サブベクトル、第2サブベクトル、第3サブベクトル、及び第4サブベクトルの4つのサブベクトルごとにクラスタリングされ、個別にルックアップテーブル(コードブック情報)が生成される。
図1では、第1サブベクトルについては、部分空間AR11に示すように、コードブックCD11~CD19に対応する9個のグループにクラスタリングされ、コードブックCD11~CD19の各々に対応するベクトルが代表ベクトル(セントロイド)として算出される。例えば、ノードN7、N9等の第1サブベクトルはコードブックCD11に対応するグループにクラスタリングされることを示す。この場合、ノードN7、N9等の第1サブベクトルは距離の計算(算出)において、第1サブベクトルに対応するコードブック情報(「第1コードブック情報」ともいう)を用いて、コードブックCD11のベクトルにベクトル量子化される。
また、第2サブベクトルについては、コードブックCD21~CD24等(図2、図9参照)に対応する複数のグループにクラスタリングされ、コードブックCD21~CD24等の各々に対応するベクトルが代表ベクトル(セントロイド)として算出される。この場合、各ノードの第2サブベクトルは距離の計算(算出)において、第2サブベクトルに対応するコードブック情報(「第2コードブック情報」ともいう)を用いて、対応するコードブックのベクトルにベクトル量子化される。
第3サブベクトルについては、コードブックCD31~CD34等(図2、図9参照)に対応する複数のグループにクラスタリングされ、コードブックCD31~CD34等の各々に対応するベクトルが代表ベクトル(セントロイド)として算出される。この場合、各ノードの第3サブベクトルは距離の計算(算出)において、第3サブベクトルに対応するコードブック情報(「第3コードブック情報」ともいう)を用いて、対応するコードブックのベクトルにベクトル量子化される。
第4サブベクトルについては、コードブックCD41~CD44等(図2、図9参照)に対応する複数のグループにクラスタリングされ、コードブックCD24~CD44等の各々に対応するベクトルが代表ベクトル(セントロイド)として算出される。この場合、各ノードの第4サブベクトルは距離の計算(算出)において、第4サブベクトルに対応するコードブック情報(「第4コードブック情報」ともいう)を用いて、対応するコードブックのベクトルにベクトル量子化される。
なお、代表ベクトルを求める処理等、コードブック情報の生成は、種々の技術を適宜用いて生成される。コードブック情報の生成については従来技術であるため詳細な説明を省略する。また、ルックアップテーブルについては上記に限らず、例えば、分割された部分ベクトル(サブベクトル)全体で1つのルックアップテーブル(コードブック情報)を用いてもよいが、この点については後述する。
ここから、検索クエリQE1を対象とする検索処理を説明する。まず、情報処理装置100は、検索クエリQE1を取得する(ステップS11)。例えば、情報処理装置100は、ユーザが利用する端末装置10(図4参照)から検索クエリQE1を取得する。
そして、情報処理装置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とする。
そして、情報処理装置100は、検索クエリQE1の各サブベクトルと、そのサブベクトルに対応するコードブックのベクトルとの間の距離を算出する。情報処理装置100は、図2のコードブック情報TB1~TB4に示すように、検索クエリQE1の各サブベクトルと各コードブックのベクトルとの間の距離(差分)を算出する。図2は、第1の実施形態に係るデータの一例を示す図である。
コードブック情報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等と算出する。
同様に、コードブック情報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等と算出する。
なお、図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距離)を計算し処理を行うことにより、効率的な検索処理を可能にすることができる。
情報処理装置100は、検索クエリQE1を対象とする検索処理を実行する(ステップS12)。情報処理装置100は、検索クエリQE1を対象として、グラフGR1を用いた図11に示すような検索処理を行うことにより、検索クエリQE1の検索結果を得る。図11に示す検索処理についての詳細は後述する。情報処理装置100は、検索クエリQE1を対象として検索処理を行うことにより、検索数のノードを検索クエリQE1の近傍のノードとして抽出する。
情報処理装置100は、検索クエリQE1を対象とする検索処理において、各ノードのうち、所定のノードをグラフGR1の検索の開始点(起点)となるノード(以下「起点ノード」ともいう)として選択する。例えば、情報処理装置100は、起点ノードを、木構造のインデックス等の所定のインデックスを用いて選択する。図1の例では、情報処理装置100は、起点ノードとして、ノードN7を選択するものとする。なお、図1では説明を簡単にするために、所定のインデックスを用いてノードN7のみを起点ノードとして選択する場合を示すが、情報処理装置100は、複数のノードを起点ノードとして選択してもよいし、ランダム等の様々な方法により起点ノードを選択してもよい。
ここで、情報処理装置100は、検索クエリQE1を対象とする検索処理において、一のノードからのエッジが連結されたノード(以下「接続ノード」ともいう)と検索クエリとの距離を並列化して算出する(ステップS13)。図1では、情報処理装置100は、一括処理情報LT1に示すように、ノードN7からのエッジが連結されたノード(接続ノード)であるノードN9、N12、N54、N85等については、検索クエリQE1との距離を並列化して算出する。
例えば、ノード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との距離として算出する。
例えば、ノード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との距離を算出する。
例えば、情報処理装置100は、SIMDの演算に関する並列化により、ノードN9、N12、N54、N85の各々と検索クエリQE1との距離を一括して算出する。これにより、情報処理装置100は、距離計算を並列化することにより、距離計算を高速化することでき、効率的な検索処理を可能にすることができる。
なお、図1では説明を簡単にするために、4つのノードを対象として距離を並列化して算出する場合を示すが、並列化される数は、情報処理装置100の仕様に基づいて決定される。例えば、情報処理装置100がSIMDにより一括して処理できる数(「一括処理可能単位」ともいう)が「4」である場合、図1と同様の処理となるが、SIMDにより一括して処理できる数(一括処理可能単位)が「16」である場合、情報処理装置100は、16個のノードを対象として距離を並列化して算出する。また、一括処理可能単位が「32」である場合、情報処理装置100は、32個のノードを対象として距離を並列化して算出する。このように、情報処理装置100は、SIMDにより一括して処理できる数(一括処理可能単位)に対応する数のノードの距離計算を一括して行うことにより、効率的な検索処理を可能にすることができる。
情報処理装置100は、上記のように複数のノードの距離計算を並列化して行いながら、検索クエリQE1を対象として、グラフGR1を用いた図11に示すような検索処理を行うことにより、検索数のノードを検索クエリQE1の近傍のノードとして抽出する。
上述のように、情報処理装置100は、ベクトル量子化された各ノードのベクトルと検索クエリとの間の近似距離(第1距離)を算出して、第1距離を用いて検索処理を行う事により、効率的な検索処理を可能にすることができる。また、情報処理装置100は、並列化可能な数のノードの距離計算を一括して行うことにより、効率的な検索処理を可能にすることができる。上記のように、情報処理装置100は、グラフのノードの複数の接続ノードとの近似距離を一括して計算することにより、限定されたメモリ領域(ルックアップテーブル)を繰り返し利用する(メモリキャッシュにのる)ので高速化が可能である。
また、図1の例では、情報処理装置100は、直積量子化により分割したベクトルを用いて検索処理を行うことにより、ベクトルを分割せずに検索処理を行う場合に比べて、より効率的な検索処理を可能にすることができる。例えば、情報処理装置100は、直積量子化により短いベクトル間の距離を算出することとなり、距離計算の対象となるベクトルのサイズを小さくできる。また、情報処理装置100は、距離計算時に利用するルックアップテーブルによりアクセスするメモリ空間を、分割されたサブベクトルのルックアップテーブルに限定することができる。情報処理装置100は、直積量子化により検索精度の低下を抑制しつつ、ベクトルサイズを削減することができる。なお、図1では、直積量子化が行われた場合の処理を説明したが、直積量子化が行われた場合は一例に過ぎず、情報処理装置100は、直積量子化を行われてないベクトルを用いて検索処理を行ってもよい。
〔1-1-1.その他〕
上述した処理は一例に過ぎず、情報処理装置100は、効率的な検索処理の為に様々な情報や手法を用いて、検索処理を行ってもよい。この点について、各事項について詳述する。
(エッジ(接続ノード)の格納態様)
各ノードに連結されるエッジ(接続ノード)の情報について、ノードでのエッジ(接続ノード)の格納態様(格納方法)には、例えば以下の第1格納態様及び第2格納態様の2種類が考えられるため、格納態様については、利用形態によって選択されてもよい。
例えば、第1格納態様としては、各ノードには接続ノード(オブジェクト)のIDを対応付けて格納し、別のテーブルに直積量子化されたオブジェクトの情報を格納してもよい。例えば、図7及び図8に示すデータの格納態様が第1格納態様に対応する。第1格納態様の場合、メモリ使用量を削減できる。
また、例えば、第2格納態様としては、各ノードに直に量子化されたオブジェクトを持つ。第2格納態様の場合、あるノードの接続ノード(オブジェクト)が量子化された情報を各ノードに対応付けて記憶する。例えば、ノードN7の接続ノードであるノードN9、N12、N54、N85の各々の量子化された情報(図2中のノード情報INF1~INF4)がノードN7に対応付けて記憶されるデータの格納態様が第2格納態様に対応する。第2格納態様の場合、検索時にシーケンシャルにオブジェクトをアクセスするため速度低下が発生を抑制することができる。
(ルックアップテーブル)
上述した例では、分割したサブベクトルごとに個別にクラスタリングし、個々にルックアップテーブル(コードブック情報)を生成する場合を示したが、この場合に限らず、ルックアップテーブルについては任意の態様であってもよい。
例えば、全てのサブベクトルに対してクラスタリングし、一つのルックアップテーブルが生成されてもよい。上述した例では、例えば、第1サブベクトル、第2サブベクトル、第3サブベクトル、及び第4サブベクトルの4つのサブベクトル全体を対象にクラスタリングし、一つのルックアップテーブルが生成されてもよい。
また、個々のサブベクトルを部分的にマージして複数のクラスごとに、ルックアップテーブルが生成されてもよい。例えば、分散が類似しているサブベクトルをマージして複数のクラスを形成し、複数のクラスごとに、ルックアップテーブルが生成されてもよい。上述した例では、例えば、第1サブベクトル及び第3サブベクトルの2つのサブベクトの分散が類似し、第2サブベクトル及び第4サブベクトルの2つのサブベクトの分散が類似している場合、第1サブベクトル及び第3サブベクトルをマージして第1クラスとし、第2サブベクトル及び第4サブベクトルをマージして第2クラスとしてもよい。この場合、第1クラスのルックアップテーブル(コードブック情報)と、第2クラスのルックアップテーブル(コードブック情報)との2つのルックアップテーブルが生成されてもよい。
(転置)
上述したデータの保持は一例に過ぎず、情報処理装置100は、効率的なデータ参照等が可能となるように、種々の態様によりデータを保持してもよい。例えば、情報処理装置100は、転置したデータを保持してもよい。この点について、図3を用いて説明する。図3は、第1の実施形態に係るデータの一例を示す図である。
例えば、ノード情報INF1~INF4に示すようにデータを保持し、ノード情報INF1~INF4を順次処理した場合、図2のステップS14に示すように、ルックアップテーブルであるコードブック情報TB1~TB4を繰り返し参照することとなる。
そこで、ステップS15に示すように、ノード情報INF1~INF4を転置した転置データTR1~TR4が生成される。例えば、情報処理装置100は、ノード情報INF1~INF4を転置した転置データTR1~TR4を生成する。
図3では、ノード情報INF1~INF4のうち、ノードN9、N12、N54、N85の第1サブベクトルに対応するコードブックの一覧である第1データTR1が生成される。具体的には、ノードN9の第1サブベクトルに対応するコードブックCD12、ノードN12の第1サブベクトルに対応するコードブックCD14、ノードN54の第1サブベクトルに対応するコードブックCD13、及びノードN85の第1サブベクトルに対応するコードブックCD18の一覧である第1データTR1が生成される。
同様に、ノード情報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が生成される。
なお、各転置データTR1~TR4の一覧のうち、何番目のデータがどのノードに対応するかの対応付けを示す対応付情報が生成される。図3の例では、各転置データTR1~TR4の一覧のうち、1番目(最初)のデータがノードN9に対応し、2番目のデータがノードN12に対応し、3番目のデータがノードN54に対応し、4番目(最後)のデータがノードN85に対応することを示す対応付情報が生成される。情報処理装置100は、対応付情報を参照することにより、各転置データTR1~TR4の一覧の各データが、どのノードに対応するかを特定することができる。例えば、情報処理装置100は、対応付情報を生成する。
情報処理装置100は、ノード情報INF1~INF4を転置した転置データTR1~TR4を用いて処理を行う。例えば、情報処理装置100は、転置データTR1を用いてルックアップテーブルを参照する場合、コードブック情報TB1のみを参照することとなり、1つのコードブック情報TB1のみを参照することとなる。同様に、情報処理装置100は、転置データTR2を用いてルックアップテーブルを参照する場合、コードブック情報TB2のみを参照することとなり、1つのコードブック情報TB2のみを参照することとなる。転置データTR3、TR4についても同様に1つのコードブック情報のみを参照することとなる。これにより、情報処理装置100は、効率的にデータを参照することができるため、効率的な検索処理を可能にすることができる。
このように、一括距離計算時にサブクラス(サブベクトル等)ごとのルックアップテーブルの参照するように、ノードの近傍オブジェクト(接続ノード)のデータを転置し、サブクラスごとにまとめ上げた順番でデータをノードにもつことで、参照の局所性がさらに高まり、高速化が可能となる。
なお、図3では説明を簡単にするために、4つのノードを対象として転置データを生成する場合を示すが、転置データを生成する単位(ノードの数)は、情報処理装置100の仕様に基づいて決定される。例えば、情報処理装置100の一括処理可能単位が「4」である場合、図3と同様の処理となるが、一括処理可能単位が「16」である場合、16個のノードを一つの単位として転置データが生成される。また、一括処理可能単位が「32」である場合、32個のノードを一つの単位として転置データが生成される。このように、情報処理装置100がSIMDにより一括して処理できる数(一括処理可能単位)に応じて生成される転置データを用いることで、情報処理装置100は、効率的にデータを参照することができるため、効率的な検索処理を可能にすることができる。
例えば、上述のような検索処理時の時間の多くは距離計算であるが、距離計算は上記のようなSIMDによる並列計算により高速化を図ることができる。このように距離計算を並列化した場合、オブジェクトデータをフェッチする時間が検索処理を占めることになる。このフェッチ時間を削減することができれば、さらなる高速化が実現される。なお、データをフェッチする時間を削減するにはプリフェッチを行う方法があるが、限界がある。
一方、情報処理装置100は、上述のように参照の局所性を高め、効率的にデータを参照することを可能にすることにより、データのフェッチを抑制し、さらなる高速化を実現することができる。
(検索結果)
なお、上述した第2距離(真の距離)による検索結果を返す場合には、以下の第1の方法及び第2の方法の2つの方法が考えられる。
例えば、第1の方法としては、検索数を指定された検索数より多く探索し、探索終了時に、真の距離計算を行って距離でソートし、指定された検索数のオブジェクトを検索結果としてもよい。この場合、情報処理装置100は、指定された検索数(「第1数」ともいう)よりも多い数(「拡張検索数」ともいう)のノードを抽出するように、拡張検索数(「第2数」ともいう)を検索数として設定し、図11に示すような検索処理を行うことにより、拡張検索数のノード、すなわち指定された検索数よりも多い数のノードを近傍候補ノードとして抽出する。そして、情報処理装置100は、近傍候補ノードを対象として、第2距離(真の距離)を算出し、近傍候補ノードのうち、第2距離が短い方から第1数のノードを検索クエリの近傍のノードとして抽出する。
また、例えば、第2の方法としては、探索中に、第1距離(近似距離)に基づいて、ノード(オブジェクト)が探索範囲内または検索範囲内に入った場合のみに、第2距離(真の距離)を計算し、近似距離を真の距離で置き換えることで、真の距離による検索結果を返してもよい。
ここでいう、検索範囲は、図11中の「r」により規定される範囲であり、探索範囲は、図11中の検索範囲係数「ε」を用いた「r(1+ε)」により規定される範囲である。例えば、検索範囲に入った場合に第2距離(真の距離)を計算する場合、情報処理装置100は、ノードの第1距離(近似距離)が「r」以下となった場合に、そのノードの第2距離(真の距離)を算出する。また、探索範囲に入った場合に第2距離(真の距離)を計算する場合、情報処理装置100は、ノードの第1距離(近似距離)が「r(1+ε)」以下となった場合に、そのノードの第2距離(真の距離)を算出する。
例えば、精度を高める場合、探索範囲に入った場合を条件としてもよい。また、処理の高速化を求める場合、検索範囲に入った場合を条件としてもよい。なお、上記は一例に過ぎず、いずれを条件とするかは、検索範囲係数「ε」の値や処理の目的などに応じて適宜設定されてもよい。
(ベクトル量子化)
なお、情報処理装置100は、特許文献3に示すように、2段階のベクトル量子化を行ってもよい。そして、情報処理装置100は、下記の式(1)により、検索クエリと各ノードとの距離を算出してもよい。
ここで、上記式(1)中の左辺の値は、例えば、検索クエリとノードとの間の二乗距離を示す。また、例えば、上記式(1)中の「x」は、クエリに対応する。また、例えば、上記式(1)中の「y」は、ノードに対応する。また、例えば、上記式(1)の右辺中の「qc(y)」は、「y」の代表ベクトル(セントロイド)を示す。例えば、情報処理装置100は、上記式(1)中の「y」について、ノードのベクトルデータを有しない場合は、各ノードが属する部分領域のセントロイドの数値を用いてもよい。また、例えば、「y-qc(y)」は、残差ベクトルを示す。また、例えば、上記式(1)の右辺中の「qp」は、所定の量子化器(関数)を示す。
また、例えば、上記式(1)の右辺中の「j」は、分割された空間の数であってもよい。例えば、図1の例では、上記式(1)の右辺中の「j」は、分割された空間の数「4」であってもよい。また、例えば、上記式(1)の右辺中の「uj()」は、括弧中のベクトル間の部分残差ベクトルを示す。例えば、情報処理装置100は、上記式(1)を用いて、各部分空間におけるクエリとノードとの間の二乗距離を算出し、合算することにより、クエリとノードとの距離を算出してもよい。
〔1-2.情報処理システムの構成〕
図4に示すように、情報処理システム1は、端末装置10と、情報提供装置50と、情報処理装置100とが含まれる。端末装置10と、情報提供装置50と、情報処理装置100とは所定のネットワークNを介して、有線または無線により通信可能に接続される。図4は、第1の実施形態に係る情報処理システムの構成例を示す図である。なお、図4に示した情報処理システム1には、複数台の端末装置10や、複数台の情報提供装置50や、複数台の情報処理装置100が含まれてもよい。
端末装置10は、ユーザによって利用される情報処理装置である。端末装置10は、ユーザによる種々の操作を受け付ける。なお、以下では、端末装置10をユーザと表記する場合がある。すなわち、以下では、ユーザを端末装置10と読み替えることもできる。なお、上述した端末装置10は、例えば、スマートフォンや、タブレット型端末や、ノート型PC(Personal Computer)や、デスクトップPCや、携帯電話機や、PDA(Personal Digital Assistant)等により実現される。
情報提供装置50は、ユーザ等に種々の情報提供を行うための情報が格納された情報処理装置である。例えば、情報提供装置50は、ウェブサーバ等の種々の外部装置から収集した文字情報等に基づくオブジェクトIDが格納される。例えば、情報提供装置50は、ユーザ等に画像検索サービスを提供する情報処理装置である。例えば、情報提供装置50は、画像検索サービスを提供するための各情報が格納される。例えば、情報提供装置50は、画像検索サービスの対象となる画像に対応するベクトル情報を情報処理装置100に提供する。また、情報提供装置50は、クエリを情報処理装置100に送信することにより、情報処理装置100からクエリに対応する画像を示すオブジェクトID等を受信する。
情報処理装置100は、検索サービスを提供するコンピュータである。情報処理装置100は、検索クエリに対応する指定された検索数のオブジェクトを検索結果として提供する。情報処理装置100は、検索対象となるノード(オブジェクト)がエッジで連結されたグラフを用いて、検索クエリの近傍のノード(オブジェクト)を検索結果として提供する。情報処理装置100は、複数のオブジェクトの各々に対応するノード群がエッジにより連結されたグラフを用いて、検索クエリの近傍のノードを検索する検索処理において、所定の基準により選択された複数のノードと検索クエリとの距離を、ベクトル量子化がされた複数のノードのベクトル情報を用いて算出する。
例えば、情報処理装置100は、端末装置10からクエリ(検索クエリ)を受信すると、検索クエリに類似する対象(オブジェクト)を検索し、検索結果を端末装置に提供する。また、例えば、情報処理装置100が端末装置に提供するデータは、画像情報等のデータ自体であってもよいし、URL(Uniform Resource Locator)等の対応するデータを参照するための情報であってもよい。また、検索クエリや検索対象(オブジェクト)は、画像、音声、テキストデータなど、如何なる種類のデータであってもよい。
〔1-3.情報処理装置の構成〕
次に、図5を用いて、第1の実施形態に係る情報処理装置100の構成について説明する。図5は、第1の実施形態に係る情報処理装置100の構成例を示す図である。図5に示すように、情報処理装置100は、通信部110と、記憶部120と、制御部130とを有する。なお、情報処理装置100は、情報処理装置100の管理者等から各種操作を受け付ける入力部(例えば、キーボードやマウス等)や、各種情報を表示するための表示部(例えば、液晶ディスプレイ等)を有してもよい。
(通信部110)
通信部110は、例えば、NIC(Network Interface Card)等によって実現される。そして、通信部110は、ネットワーク(例えば図4中のネットワークN)と有線または無線で接続され、端末装置10や情報提供装置50との間で情報の送受信を行う。
(記憶部120)
記憶部120は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。第1の実施形態に係る記憶部120は、図5に示すように、オブジェクト情報記憶部121と、グラフ情報記憶部122と、量子化情報記憶部123と、コードブック情報記憶部124とを有する。
(オブジェクト情報記憶部121)
第1の実施形態に係るオブジェクト情報記憶部121は、オブジェクトに関する各種情報を記憶する。例えば、オブジェクト情報記憶部121は、オブジェクトIDやベクトルデータを記憶する。図6は、第1の実施形態に係るオブジェクト情報記憶部の一例を示す図である。図6に示すオブジェクト情報記憶部121は、「オブジェクトID」、「ベクトル情報」といった項目が含まれる。
「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。また、「ベクトル情報」は、オブジェクトIDにより識別されるオブジェクトに対応するベクトル情報を示す。すなわち、図6の例では、オブジェクトを識別するオブジェクトIDに対して、オブジェクトに対応するベクトルデータ(ベクトル情報)が対応付けられて登録されている。
例えば、図6の例では、オブジェクトID「OB1」により識別されるオブジェクト(対象)は、「10,24,51,2・・・」の多次元のベクトル情報が対応付けられることを示す。
なお、オブジェクト情報記憶部121は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(グラフ情報記憶部122)
第1の実施形態に係るグラフ情報記憶部122は、グラフに関する各種情報を記憶する。例えば、グラフ情報記憶部122は、生成したグラフを記憶する。図7は、第1の実施形態に係るグラフ情報記憶部の一例を示す図である。図7に示すグラフ情報記憶部122は、「ノードID」、「オブジェクトID」、および「接続ノード情報」といった項目を有する。
「ノードID」は、グラフにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。なお、ノードIDとオブジェクトIDが共通である場合、「ノードID」にオブジェクトIDが記憶され、グラフ情報記憶部122に「オブジェクトID」の項目は含まれてなくてもよい。例えば、オブジェクトIDとノードIDとして用いる場合、「ノードID」にオブジェクトIDが記憶され、グラフ情報記憶部122に「オブジェクトID」の項目は含まれてなくてもよい。
また、「接続ノード情報」は、対応するノードから辿ることができるノード(参照先のノード)に関する情報を示す。例えば、「接続ノード情報」には、「参照先」といった情報が含まれる。「参照先」は、エッジにより連結され、そのノードから辿ることができる参照先(ノード)を識別するための情報を示す。すなわち、図7の例では、ノードを識別するノードID(オブジェクトID)に対して、そのノードからエッジにより辿ることができる参照先(ノード)が対応付けられて登録されている。なお、「接続ノード情報」には、参照先に接続されるエッジを識別するための情報(エッジID)等が含まれてもよい。
図7の例では、ノードID「N1」により識別されるノード(ノードN1)は、オブジェクトID「OB1」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN1からは、ノードID「N4」により識別されるノード(ノードN4)にエッジが連結されており、ノードN1からノードN4へ辿ることができることを示す。
また、ノードID「N2」により識別されるノード(ノードN2)は、オブジェクトID「OB2」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN2からは、ノードID「N6」により識別されるノード(ノードN6)にエッジが連結されており、ノードN2からノードN6へ辿ることができることを示す。
また、ノードID「N7」により識別されるノード(ノードN7)は、オブジェクトID「OB7」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN7からは、ノードN9、N12、N54、N85にエッジが連結されており、ノードN2からノードN9、N12、N54、N85の各々へ辿ることができることを示す。
なお、グラフ情報記憶部122は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、グラフ情報記憶部122は、各ノード(ベクトル)間を連結するエッジの長さが記憶されてもよい。すなわち、グラフ情報記憶部122は、各ノード(ベクトル)間の距離を示す情報が記憶されてもよい。なお、グラフ情報記憶部122は、上記に限らず、種々のデータ構造によりグラフ情報を記憶してもよい。
また、グラフは、クエリを入力とし、グラフ中のエッジを辿ることによりノードを探索し、クエリに類似するノードを抽出し出力するプログラムモジュールを含んでもよい。すなわち、グラフは、グラフを用いて検索処理を行うプログラムモジュールとしての利用が想定されるものであってもよい。例えば、グラフGR1は、クエリとしてベクトルデータが入力された場合に、そのベクトルデータに類似するベクトルデータに対応するノードをグラフ中から抽出し、出力するプログラムであってもよい。例えば、グラフGR1は、クエリ画像に対応する類似画像を検索するプログラムモジュールとして利用されるデータであってもよい。例えば、グラフGR1は、入力されたクエリに基づいて、グラフにおいてそのクエリに類似するノードを抽出し、出力するよう、コンピュータを機能させる。
(量子化情報記憶部123)
第1の実施形態に係る量子化情報記憶部123は、割当処理に関する各種情報を記憶する。図8は、第1の実施形態に係る量子化情報記憶部の一例を示す図である。図8の例では、量子化情報記憶部123には、「ノードID」、「オブジェクトID」、および「量子化情報」といった項目を有する。
「ノードID」は、グラフにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。なお、ノードIDとオブジェクトIDが共通である場合、「ノードID」にオブジェクトIDが記憶され、量子化情報記憶部123に「オブジェクトID」の項目は含まれてなくてもよい。
また、「量子化情報」は、各ノード(オブジェクト)の量子化されたベクトルの情報を示す。例えば、「量子化情報」には、「要素」、「コードブックID」といった情報が含まれる。「要素」は、対応するオブジェクトのベクトルにおける配置を示す。図8の例では、「要素」には、「#1」、「#2」、「#3」、「#4」が含まれる場合を示す。この場合、各ノード(オブジェクト)のベクトルは4分割され、各分割された部分ベクトルがコードブックにより量子化されることを示す。なお、分割数は4に限らず、例えば分割数が6の場合、「要素」には、「#1」、「#2」、「#3」、「#4」、「#5」、「#6」が含まれる。「コードブックID」は、各要素(部分ベクトル)に対応するコードブックを識別するための情報を示す。
図8の例では、ノードN9(オブジェクトOB9)のベクトルは、4分割された部分ベクトルのうち、先頭の部分ベクトルがコードブックID「CD12」により識別されるコードブック(コードブックCD12)により量子化されることを示す。また、ノードN9(オブジェクトOB9)のベクトルは、4分割された部分ベクトルのうち、先頭から2番目の部分ベクトルがコードブックID「CD23」により識別されるコードブック(コードブックCD23)により量子化されることを示す。
また、ノードN9(オブジェクトOB9)のベクトルは、4分割された部分ベクトルのうち、先頭から3番目の部分ベクトルがコードブックID「CD35」により識別されるコードブック(コードブックCD35)により量子化されることを示す。また、ノードN9(オブジェクトOB9)のベクトルは、4分割された部分ベクトルのうち、先頭から4番目(すなわち最後尾)の部分ベクトルがコードブックID「CD47」により識別されるコードブック(コードブックCD47)により量子化されることを示す。
なお、量子化情報記憶部123は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(コードブック情報記憶部124)
第1の実施形態に係るコードブック情報記憶部124は、コードブックに関する各種情報を記憶する。例えば、コードブック情報記憶部124は、コードブックIDや各コードブックのベクトル情報を記憶する。図9は、第1の実施形態に係るコードブック情報記憶部の一例を示す図である。図9の例では、コードブック情報記憶部124は、各コードブックとベクトルとの対応付けを示すルックアップテーブルを記憶する場合を一例として示す。
コードブック情報記憶部124は、4分割された部分ベクトルのうち、先頭の部分ベクトルを量子化するために用いるコードブック情報TB1、4分割された部分ベクトルのうち、先頭から2番目の部分ベクトルを量子化するために用いるコードブック情報TB2を記憶する。また、コードブック情報記憶部124は、4分割された部分ベクトルのうち、先頭から3番目の部分ベクトルを量子化するために用いるコードブック情報TB3、4分割された部分ベクトルのうち、先頭から4番目(すなわち最後尾)の部分ベクトルを量子化するために用いるコードブック情報TB4等を記憶する。
図9の例では、コードブック情報TB1には、コードブックID「CD11」により識別されるコードブック(コードブックCD11)やコードブックID「CD12」により識別されるコードブック(コードブックCD12)等のコードブック情報を記憶する。例えば、コードブックCD11は、「5,13・・・」の多次元のベクトル情報が対応付けられることを示す。また、コードブックCD12は、「27,51・・・」の多次元のベクトル情報が対応付けられることを示す。
なお、コードブック情報記憶部124は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、コードブック情報記憶部124は、各コードブックと検索クエリとの差分(距離)を示す情報を記憶してもよい。
(制御部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)等の集積回路により実現される。
図5に示すように、制御部130は、取得部131と、生成部132と、検索処理部133と、提供部134とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部130の内部構成は、図5に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
(取得部131)
取得部131は、各種情報を取得する。例えば、取得部131は、記憶部120から各種情報を取得する。例えば、取得部131は、オブジェクト情報記憶部121や、グラフ情報記憶部122や、量子化情報記憶部123や、コードブック情報記憶部124等から各種情報を取得する。また、取得部131は、各種情報を外部の情報処理装置から取得する。取得部131は、端末装置10や情報提供装置50から各種情報を取得する。
取得部131は、グラフを取得する。例えば、情報処理装置100は、図1中の空間情報SP1を取得してもよい。例えば、情報処理装置100は、情報提供装置50等の外部装置からグラフを取得してもよい。
取得部131は、データ検索の対象となる複数のオブジェクトに対する検索クエリを取得する。例えば、取得部131は、検索クエリQE1に関する情報を取得する。例えば、取得部131は、画像検索に関する検索クエリを取得する。例えば、取得部131は、利用する端末装置10からクエリを取得する。例えば、取得部131は、利用する端末装置10からクエリを受け付けた情報提供装置50からクエリを取得する。
(生成部132)
生成部132は、各種情報を生成する。例えば、生成部132は、記憶部120に記憶された情報(データ)から各種情報(データ)を生成する。例えば、生成部132は、オブジェクト情報記憶部121や、グラフ情報記憶部122や、量子化情報記憶部123や、コードブック情報記憶部124等に記憶された情報(データ)から各種情報を生成する。
生成部132は、グラフ情報記憶部122に示すようなグラフを生成してもよい。例えば、生成部132は、空間情報SP1を生成する。また、生成部132は、量子化情報記憶部123に示すようなベクトル量子化に関する情報を生成してもよい。例えば、生成部132は、ノードN1(オブジェクトOB1)等の各オブジェクトがベクトル量子化された情報を生成する。また、生成部132は、コードブック情報記憶部124に示すようなコードブックに関する情報を生成してもよい。生成部132は、コードブックのルックアップテーブルを生成してもよい。例えば、生成部132は、コードブック情報TB1~TB4のような、コードブックに関する情報を生成する。なお、情報処理装置100がグラフ情報記憶部122、量子化情報記憶部123、コードブック情報記憶部124に示す情報を、情報提供装置50等の外部装置から取得する場合、情報処理装置100は、生成部132を有しなくてもよい。
(検索処理部133)
検索処理部133は、オブジェクトに関する検索サービスを提供する。検索処理部133は、各種情報を探索する。検索処理部133は、各種情報を検索する。例えば、検索処理部133は、グラフを探索することにより、オブジェクトを検索する。例えば、検索処理部133は、取得部131により取得されたクエリが取得された場合、グラフを探索することにより、クエリに類似するオブジェクトを検索する。例えば、検索処理部133は、グラフを探索することにより、クエリに類似するオブジェクトを抽出する。例えば、検索処理部133は、図11に示すような処理手順に基づいて、グラフを探索することにより、クエリに類似するオブジェクトを抽出する。なお、情報処理装置100は、検索サービスを提供しない場合、検索処理部133を有しなくてもよい。
検索処理部133は、検索処理において各種情報を選択する。検索処理部133は、検索処理において各種情報を抽出する。検索処理部133は、検索処理において各種情報を判定する。検索処理部133は、検索処理において各種情報を決定する。検索処理部133は、検索処理において各種情報を変更する。検索処理部133は、検索処理において各種情報を更新する。
検索処理部133は、複数のオブジェクトの各々に対応するノード群がエッジにより連結されたグラフを用いて、検索クエリの近傍のノードを検索する検索処理において、所定の基準により選択された複数のノードと検索クエリとの距離を、ベクトル量子化がされた複数のノードのベクトル情報を用いて算出する。検索処理部133は、複数のノードと検索クエリとの距離の算出を並列化して一括で行う。検索処理部133は、情報処理装置100の仕様に基づいて決定される一括処理数の複数のノードと検索クエリとの距離の算出を並列処理する。
検索処理部133は、複数のノードの各々が対応する代表ベクトルに対応付けられたコードブックを用いて、複数のノードと検索クエリとの距離を算出する。検索処理部133は、一のノードからのエッジが連結された複数のノードと検索クエリとの距離を算出する。検索処理部133は、複数のノードと複数のノードの各々が対応付けられた代表ベクトルを示す参照用情報が一のノードに対応付けて記憶されたノード情報を用いて、複数のノードと検索クエリとの距離を算出する。
検索処理部133は、直積量子化により、各々が複数の部分ベクトルに分割された複数のノードのベクトル情報を用いて、複数のノードと検索クエリとの距離を算出する。検索処理部133は、複数のノードの各々が分割された複数の部分ベクトルの分割位置ごとのベクトルに対応する代表ベクトルに対応付けられた複数のコードブックを用いて、複数のノードと検索クエリとの距離を算出する。検索処理部133は、複数のノードと複数のノードの各々の複数の部分ベクトルの各々が対応付けられた代表ベクトルを示す参照用情報が一のノードに対応付けて記憶されたノード情報を用いて、複数のノードと検索クエリとの距離を算出する。
検索処理部133は、複数のノードの各々に、各ノードの複数の部分ベクトルの各々が対応付けられた代表ベクトルの一覧が対応付けられた参照用情報を用いて、複数のノードと検索クエリとの距離を算出する。検索処理部133は、複数のノードの各々の複数の部分ベクトルの各々が対応する代表ベクトルが、分割位置ごとに一覧で並ぶ転置情報と、複数のノードの各々が一覧で対応する位置を示す対応付情報とを含む参照用情報を用いて、複数のノードと検索クエリとの距離を算出する。検索処理部133は、複数のノードの各々の複数の部分ベクトルの各々が対応する代表ベクトルに対応付けられた一のコードブックを用いて、複数のノードと検索クエリとの距離を算出する。
検索処理部133は、検索処理において処理対象となったノードのうち、所定のノードを対象として、ベクトル量子化がされた距離である第1距離とは異なり、ベクトル量子化がされていない第2距離を算出する。検索処理部133は、検索処理において検索クエリの近傍のノードとして抽出するノードの第1数よりも多い数である第2数のノードを近傍候補ノードとして抽出し、近傍候補ノードを対象として第2距離を算出する。検索処理部133は、近傍候補ノードのうち、第2距離が短い方から第1数のノードを検索クエリの近傍のノードとして抽出する。
検索処理部133は、第1距離が所定の閾値以内であるノードを対象として第2距離を算出する。検索処理部133は、近傍のノードとして抽出する対象範囲を示す検索範囲内のノードを対象として第2距離を算出する。検索処理部133は、検索処理の対象範囲を示す探索範囲内のノードを対象として第2距離を算出する。
(提供部134)
提供部134は、各種情報を提供する。例えば、提供部134は、端末装置10や情報提供装置50に各種情報を送信する。例えば、提供部134は、検索クエリに対応するオブジェクトIDを検索結果として提供する。提供部134は、検索結果を端末装置10へ送信する。提供部134は、検索処理部133により検索されたオブジェクトIDを、検索クエリに対応する検索結果として端末装置10へ提供する。
また、提供部134は、検索処理部133により検索されたオブジェクトIDを情報提供装置50へ提供してもよい。例えば、提供部134は、検索処理部133が検索により抽出したオブジェクトIDを情報提供装置50へ提供する。提供部134は、検索処理部133により抽出されたオブジェクトIDをクエリに対応するベクトルを示す情報として情報提供装置50に提供する。
〔1-4.情報処理のフロー〕
次に、図10を用いて、第1の実施形態に係る情報処理システム1による情報処理の手順について説明する。図10は、第1の実施形態に係る情報処理の一例を示すフローチャートである。
図10に示すように、情報処理装置100は、データ検索の対象となる複数のオブジェクトに対する検索クエリを取得する(ステップS101)。図1の例では、情報処理装置100は、検索クエリQE1を取得する。
そして、情報処理装置100は、複数のオブジェクトの各々に対応するノード群がエッジにより連結されたグラフを用いて、検索クエリの近傍のノードを検索する検索処理において、所定の基準により選択された複数のノードと検索クエリとの距離を、ベクトル量子化がされた複数のノードのベクトル情報を用いて算出する(ステップS102)。図1の例では、情報処理装置100は、複数のノードN9、N12、N54、N85と前記検索クエリQE1との距離を、ベクトル量子化がされた複数のノードN9、N12、N54、N85のベクトル情報を用いて算出する。
〔1-5.検索処理例〕
ここで、第1の実施形態に係る検索処理の一例について、図11を一例として説明する。図11は、第1の実施形態に係る検索処理の一例を示すフローチャートである。以下に説明する検索処理は、情報処理装置100の検索処理部133によって行われる。また、以下でいうオブジェクトは、ノードと読み替えてもよい。なお、以下では、情報処理装置100(検索処理部133)が検索処理を行う。なお、検索サービスを提供しない場合、情報処理装置100は検索処理部133を有しなくてもよい。以下で説明する処理の検索クエリは、追加ノードや対象ノードやユーザが指定したオブジェクト等であってもよい。
ここでは、近傍オブジェクト集合N(G,y)は、ノードyに付与されているエッジにより関連付けられている近傍のオブジェクトの集合である。「G」は、所定のグラフデータ(例えば、空間情報SP1に示すグラフGR1等)であってもよい。例えば、情報処理装置100は、k近傍検索処理を実行する。
例えば、情報処理装置100は、超球の半径rを∞(無限大)に設定し(ステップS300)、既存のオブジェクト集合から部分集合Sを抽出する(ステップS301)。例えば、情報処理装置100は、ルートノードとして選択されたオブジェクト(ノード)を部分集合Sとして抽出してもよい。また、例えば、超球とは、検索範囲を示す仮想的な球である。なお、ステップS301において抽出されたオブジェクト集合Sに含まれるオブジェクトは、同時に検索結果のオブジェクト集合Rの初期集合にも含められる。
次に、情報処理装置100は、オブジェクト集合Sに含まれるオブジェクトの中で、検索クエリオブジェクトをyとするとオブジェクトyとの距離が最も短いオブジェクトを抽出し、オブジェクトsとする(ステップS302)。例えば、情報処理装置100は、ルートノードとして選択されたオブジェクト(ノード)のみがSの要素の場合には、結果的にルートノードがオブジェクトsとして抽出される。次に、情報処理装置100は、オブジェクトsをオブジェクト集合Sから除外する(ステップS303)。
次に、情報処理装置100は、オブジェクトsとオブジェクトyとの距離d(s,y)がr(1+ε)を超えるか否かを判定する(ステップS304)。ここで、εは拡張要素であり、r(1+ε)は、探索範囲(この範囲内のノードのみを探索する。検索範囲よりも大きくすることで精度を高めることができる)の半径を示す値である。オブジェクトsとオブジェクトyとの距離d(s,y)がr(1+ε)を超える場合(ステップS304:Yes)、情報処理装置100は、オブジェクト集合Rをオブジェクトyの近傍オブジェクト集合として出力し(ステップS305)、処理を終了する。
オブジェクトsと検索クエリオブジェクトyとの距離d(s,y)がr(1+ε)を超えない場合(ステップS304:No)、情報処理装置100は、オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトの中からオブジェクト集合Cに含まれないオブジェクトを一つ選択し、選択したオブジェクトuを、オブジェクト集合Cに格納する(ステップS306)。オブジェクト集合Cは、重複検索を回避するために便宜上設けられるものであり、処理開始時には空集合に設定される。
次に、情報処理装置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の判定(処理)を行う。
次に、情報処理装置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の判定(処理)を行う。
オブジェクト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の判定(処理)を行う。
オブジェクト集合Rに含まれるオブジェクト数がksを超える場合(ステップS311:Yes)、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長い(遠い)オブジェクトを、オブジェクト集合Rから除外する(ステップS312)。
次に、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクト数がksと一致するか否かを判定する(ステップS313)。オブジェクト集合Rに含まれるオブジェクト数がksと一致しない場合(ステップS313:No)、情報処理装置100は、ステップS315の判定(処理)を行う。また、オブジェクト集合Rに含まれるオブジェクト数がksと一致する場合(ステップS313:Yes)、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長い(遠い)オブジェクトと、オブジェクトyとの距離を、新たなrに設定する(ステップS314)。
そして、情報処理装置100は、オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えたか否かを判定する(ステップS315)。オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えていない場合(ステップS315:No)、情報処理装置100は、ステップS306に戻って処理を繰り返す。
オブジェクト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)に対応する検索結果として、検索を行った端末装置等へ提供してもよい。
〔2.第2の実施形態〕
ここから、第2の実施形態について説明する。第2の実施形態は、クラスタリングなどにより近傍オブジェクトをグルーピングし、各グループ(以下「ブロブ」ともいう)を一括して距離計算を行う対象とする。すなわち、第2の実施形態では、ブロブ単位で一括距離計算を行う。なお、第1の実施形態と同様の点については、適宜説明を省略する。第2の実施形態においては、情報処理システム1は、情報処理装置100に代えて、情報処理装置100Aを有する。
〔2-1.情報処理〕
まず、図12を用いて、第2の実施形態に係る情報処理の概要を説明する。図12は、第2の実施形態に係る情報処理の一例を示す図である。
図12の例では、情報処理装置100Aは、空間情報SP21に示すようなグラフGR21を取得済みであるものとする。例えば図1中の空間情報SP21は、ユークリッド空間であってもよい。例えば、空間情報SP21は、オブジェクトのベクトルの次元数に対応し、100次元や1000次元等の多次元空間であるものとする。なお、図12の例では、説明を簡単にするために直積量子化が行われていない図を基に説明するが、図1と同様にベクトル(空間)の直積量子化が行われてもよい。
まず、図12で示す各情報について説明する。図12の空間情報SP21中のノードである白丸(〇)間を接続する点線がノード間を連結するエッジを示す。図12では、図1と同様に無向エッジを例として示すが、グラフGR21のエッジは、無向エッジに限らず、有向エッジであってもよい。なお、ノートやエッジについては図1と同様であるため詳細な説明は省略する。
図12の空間情報SP21において、直線で囲まれた領域はクラスタリングなどで近傍のオブジェクトがまとめ上げられた(グループ化された)ものであり、領域をブロブと称する。以下で示す例ではブロブが一括距離計算の処理単位となる。図12は、ブロブBL1~BL10の10個の領域(ブロブ)にクラスタリングされた場合を示す。例えば、ブロブBL1は、ノードN7、N9、N85、N126等の複数のノードが属するブロブであることを示す。なお、ブロブBL1~BL10中の黒い点は、各ブロブのセントロイド(代表ベクトル)を示す。
なお、ブロブBL1~BL10は、クラスタリング等に関する種々の手法を適宜用いて生成される。例えば、ブロブに分類するためのクラスタリングは、k-meansクラスタリングでもよい。また、例えば、ブロブに分類するためのクラスタリングは、k-meansでの一回のイテレーション(アサイン)で各クラスタの中心座標(平均)で得られたセントロイドを次のイテレーションに使うのではなく、その代わりに、各セントロイドに最も近いオブジェクトにセントロイドを置き換えてから、次のイテレーションを行ってもよい。この場合、k-meansで得られる最終的なクラスタのセントロイドは既存のオブジェクト、つまり、ノードとなる。これにより、クラスタ(ブロブ)と各ノードのエッジ(近傍ノード)が一致する傾向が高まり、検索性能をさらに向上させることができる。
図12の例では、情報処理装置100Aは、空間情報SP21に示すように、複数のノード(オブジェクト)をクラスタリングすることにより、分類した複数のブロブBL1~BL10の情報を用いて、検索処理を行う。
ここから、検索クエリQE2を対象とする検索処理を説明する。まず、情報処理装置100Aは、検索クエリQE2を取得する(ステップS21)。例えば、情報処理装置100Aは、ユーザが利用する端末装置10(図4参照)から検索クエリQE2を取得する。
そして、情報処理装置100Aは、検索クエリQE2のベクトルと、コードブックのベクトルとの間の距離を算出する。図示は省略するが直積量子化を行っていない場合、情報処理装置100Aは、検索クエリQE2のベクトルと、ベクトル全体を量子化するためのコードブックのベクトルとの間の距離(差分)を算出する。そして、情報処理装置100Aは、検索クエリQE2のベクトルと各コードブックのベクトルとの間の距離(差分)を、各コードブックを識別するための情報に対応付けてコードブック情報TB21として保持する。なお、直積量子化を行っている場合、情報処理装置100Aは、図1と同様に、図2のコードブック情報TB1~TB4に示すように、検索クエリQE2の各サブベクトルと各コードブックのベクトルとの間の距離(差分)を算出する。なお、検索クエリのベクトルとコードブックのベクトルとの距離算出は、図1、図2等と同様であるため詳細な説明は省略する。
情報処理装置100Aは、検索クエリQE2を対象とする検索処理を実行する(ステップS22)。情報処理装置100Aは、検索クエリQE2を対象として、グラフGR21を用いた図16に示すような検索処理を行うことにより、検索クエリQE2の検索結果を得る。図16に示す検索処理についての詳細は後述する。情報処理装置100Aは、検索クエリQE2を対象として検索処理を行うことにより、検索数のノードを検索クエリQE2の近傍のノードとして抽出する。
情報処理装置100Aは、検索クエリQE2を対象とする検索処理において、各ノードのうち、所定のノードをグラフGR21の検索の起点となるノード(起点ノード)として選択する。図12の例では、情報処理装置100Aは、起点ノードとして、ノードN9を選択するものとする。図12の例では、情報処理装置100Aは、例えば、ノードN9を処理対象として検索処理を開始する。
ここで、情報処理装置100Aは、検索クエリQE2を対象とする検索処理において、処理対象となるノードが属するブロブに属する複数のノードと検索クエリとの距離を並列化して算出する(ステップS23)。図12では、情報処理装置100Aは、一括処理情報LT2に示すように、処理対象となるノードN9が属するブロブBL1に属するノードであるノードN7、N9、N85、N126等については、検索クエリQE2との距離を並列化して算出する。
情報処理装置100Aは、コードブック情報TB21が示す各コードブックと検索クエリQE2との間の距離を用いて、ノードN7、N9、N85、N126の各々と検索クエリQE2との距離を算出する。例えば、情報処理装置100Aは、コードブック情報TB21を参照して、ノードN7のベクトルに対応するコードブックの距離を、ノードN7と検索クエリQE2との距離として算出する。なお、直積量子化が行われている場合の距離算出は、図1、図2等と同様であるため詳細な説明は省略する。
なお、一括処理可能単位については、情報処理装置100の場合と同様に、情報処理装置100Aの仕様に基づいて決定される。例えば、情報処理装置100AがSIMDにより一括して処理できる数(一括処理可能単位)が「4」である場合、図1と同様に、4個のノードを対象として距離を並列化して算出する。例えば、情報処理装置100Aは、SIMDの演算に関する並列化により、ノードN7、N9、N85、N126の各々と検索クエリQE2との距離を一括して算出する。これにより、情報処理装置100Aは、距離計算を並列化することにより、距離計算を高速化することでき、効率的な検索処理を可能にすることができる。また、情報処理装置100Aは、グラフGR21を用いて、ノードN7からのエッジが接続されたノード(例えばノードN12、N64)を辿り、それらのノードが属するブロブ(例えばブロブBL2、BL3)を対象とした一括距離計算を行って、検索処理を行う。なお、情報処理装置100Aは、検索処理において、同じブロブが繰り返し一括距離計算の対象となることを抑制するが詳細は後述する。
なお、図12では説明を簡単にするために、4つのノードを対象として距離を並列化して算出する場合を示すが、並列化される数は、情報処理装置100Aの仕様に基づいて決定される。この点についても図1、図2等と同様であるため、詳細な説明は省略する。また、情報処理装置100Aは、図3に示す例と同様に、転置データを用いてもよい。
上述のように、情報処理装置100Aは、ベクトル量子化された各ノードのベクトルと検索クエリとの間の近似距離(第2距離)を算出して、第2距離を用いて検索処理を行う事により、効率的な検索処理を可能にすることができる。また、情報処理装置100Aは、並列化可能な数のノードの距離計算を一括して行うことにより、効率的な検索処理を可能にすることができる。上記のように、情報処理装置100Aは、ブロブを一括処理の単位として一括して計算することにより、効率的な検索処理を可能にすることができる。
情報処理装置100Aは、検索処理において、グラフGR21を辿り処理対象となるノードを対象に上述した処理を行うことにより、検索数のノードを検索クエリQE2の近傍のノードとして抽出する。例えば、情報処理装置100Aは、情報処理装置100と同様に、上述した第1の方法及び第2の方法のいずれかにより検索結果を得る。
上述した処理は一例に過ぎず、情報処理装置100Aは、効率的な検索処理の為に様々な情報や手法を用いて、検索処理を行ってもよい。この点について、各事項について詳述する。例えば、情報処理装置100Aは、各ブロブに属するノードの数が、情報処理装置100がSIMDにより一括して処理できる数(一括処理可能単位)になるように、クラスタリングを行い、ブロブを生成してもよい。
また、情報処理装置100Aは、ブロブに関する情報を用いて、重複した処理が行われることを抑制してもよい。情報処理装置100Aは、ブロブ単位にそのブロブの距離計算を行ったかを示すブロブ距離計算フラグ(以下単に「フラグ」ともいう)、および各オブジェクトがどのブロブに属するかを示すテーブルを有してもよい。この場合、情報処理装置100Aは、フラグにより各ブロブが処理済であるか否かを管理してもよい。例えば、情報処理装置100Aは、近傍ノードを逐一処理する直前にノードが属するブロブをテーブルにより特定し、そのブロブが一括距離計算済みかをフラグで判断し、未計算の場合には、一括計算を行い、個々のノードの処理を行ってもよい。この点については、図15や図16においても説明する。これにより、情報処理装置100Aは、重複した処理が行われることを抑制することができる。
〔2-2.情報処理装置の構成〕
次に、図13を用いて、第2の実施形態に係る情報処理装置100Aの構成について説明する。図13は、第2の実施形態に係る情報処理装置の構成例を示す図である。図13に示すように、情報処理装置100Aは、通信部110と、記憶部120Aと、制御部130Aとを有する。なお、情報処理装置100Aにおいて、情報処理装置100と同様の点は適宜説明を省略する。
(記憶部120A)
記憶部120Aは、例えば、RAM、フラッシュメモリ等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。第2の実施形態に係る記憶部120Aは、図13に示すように、オブジェクト情報記憶部121と、グラフ情報記憶部122と、量子化情報記憶部123Aと、コードブック情報記憶部124と、ブロブ情報記憶部125とを有する。
(量子化情報記憶部123A)
第2の実施形態に係る量子化情報記憶部123Aは、割当処理に関する各種情報を記憶する。図14は、第2の実施形態に係る量子化情報記憶部の一例を示す図である。図14の例では、量子化情報記憶部123Aには、「ノードID」、「オブジェクトID」、「ブロブID」、および「量子化情報」といった項目を有する。
「ノードID」は、グラフにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。なお、ノードIDとオブジェクトIDが共通である場合、「ノードID」にオブジェクトIDが記憶され、量子化情報記憶部123Aに「オブジェクトID」の項目は含まれてなくてもよい。
「ブロブID」は、ノード(オブジェクト)が属するブロブを識別するための情報を示す。
また、「量子化情報」は、各ノード(オブジェクト)の量子化されたベクトルの情報を示す。例えば、「量子化情報」には、「要素」、「コードブックID」といった情報が含まれる。「要素」は、対応するオブジェクトのベクトルにおける配置を示す。図14の例では、「要素」には、「#1」、「#2」、「#3」、「#4」が含まれる場合を示す。この場合、各ノード(オブジェクト)のベクトルは4分割され、各分割された部分ベクトルがコードブックにより量子化されることを示す。
図14の例では、ノードN1(オブジェクトOB1)は、ブロブID「BL9」により識別されるブロブ(ブロブBL9)に属することを示す。例えば、直積量子化によりベクトルが4分割される場合、ノードN1の量子化情報には、図8に示すノードN1の量子化情報示す4つのコードブックと同様の情報が格納される。また、例えば、直積量子化が行われない場合、ノードN1の量子化情報には、ノードN1のベクトルを量子化するための、1つのコードブックを示す情報が記憶される。
なお、量子化情報記憶部123Aは、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(ブロブ情報記憶部125)
第2の実施形態に係るブロブ情報記憶部125は、ブロブに関する情報を記憶する。例えば、ブロブ情報記憶部125は、各ブロブに対応付けられたオブジェクトを識別する各種情報を記憶する。図15は、第2の実施形態に係るブロブ情報記憶部の一例を示す図である。図15の例では、ブロブ情報記憶部125は、「ブロブID」、「ノードID」、「ベクトル情報」といった項目が含まれる。
「ブロブID」は、ブロブを識別するための識別情報を示す。また、「ノードID」は、ブロブIDにより識別されるブロブに対応付けられたノード(オブジェクト)を示す。「ベクトル情報」は、ブロブのベクトル情報を示す。例えば、「ベクトル情報」は、ブロブのセントロイドに対応するベクトルを示す。
図15に示す例では、ブロブID「BL1」により識別されるブロブ(ブロブBL1)に対応付けられたノード(オブジェクト)は、ノードN7、N9、N85、N126等であることを示す。ブロブBL1は、「51,4,102,33・・・」の多次元のベクトル情報が対応付けられることを示す。
また、ブロブID「BL9」により識別されるブロブ(ブロブBL9)に対応付けられたノード(オブジェクト)は、ノードN1、N4、N5等であることを示す。ブロブBL9は、「12,55,12,6・・・」の多次元のベクトル情報が対応付けられることを示す。
なお、ブロブ情報記憶部125は、上記に限らず、目的に応じて種々の情報を記憶してもよい。ブロブ情報記憶部125は、各ブロブが距離計算の処理対象となったか否かを示すフラグを記憶してもよい。例えば、ブロブ情報記憶部125は、距離計算の対象として処理されていないことを示す値(「未処理フラグ値」ともいう)と、距離計算の対象として処理されたことを示す値(「処理済フラグ値」ともいう)とのいずれかを各ブロブのフラグの値に設定する。例えば、ブロブ情報記憶部125は、検索処理開始時に各ブロブのフラグの値を、そのブロブを対象としての距離計算が未処理であることを示す値(例えば0)に設定し、距離計算の対象となったブロブのフラグの値を、距離計算が処理済みであることを示す値(例えば1)に変更する。
例えば、情報処理装置100Aは、処理対象となったブロブのフラグの値を参照して、そのブロブについて一括距離計算の処理を実行するか否かを判定する。情報処理装置100Aは、各ブロブのフラグの値を参照し、そのブロブのフラグの値が未処理フラグ値である場合は、そのブロブが一括距離計算の処理前であると判定して、そのブロブに属するノードの一括距離計算を実行する。一方、情報処理装置100Aは、そのブロブのフラグの値が処理済フラグ値である場合は、そのブロブが一括距離計算の処理済みであると判定して、そのブロブに属するノードの一括距離計算を行わない。
(制御部130A)
図13の説明に戻って、制御部130Aは、コントローラ(controller)であり、例えば、CPUやMPUやGPU等によって、情報処理装置100A内部の記憶装置に記憶されている各種プログラム(情報処理プログラムの一例に相当)がRAMを作業領域として実行されることにより実現される。また、制御部130Aは、コントローラであり、例えば、ASICやFPGA等の集積回路により実現される。
図13に示すように、制御部130Aは、取得部131と、生成部132Aと、検索処理部133Aと、提供部134とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部130Aの内部構成は、図13に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
(生成部132A)
生成部132Aは、生成部132と同様に各種情報を生成する。
生成部132Aは、量子化情報記憶部123に示すようなベクトル量子化に関する情報を生成してもよい。例えば、生成部132は、ノードN1(オブジェクトOB1)がブロブBL9に属することを示す情報を生成する。また、生成部132は、ブロブ情報記憶部125に示すようなブロブに関する情報を生成してもよい。例えば、生成部132は、ブロブBL1には、ノードN7、N9、N85、N126等が属することを示す情報を生成する。なお、情報処理装置100がグラフ情報記憶部122、量子化情報記憶部123A、コードブック情報記憶部124、ブロブ情報記憶部125に示す情報を、情報提供装置50等の外部装置から取得する場合、情報処理装置100は、生成部132Aを有しなくてもよい。
(検索処理部133A)
検索処理部133Aは、検索処理部133と同様に検索処理に関する各種処理を行う。
検索処理部133Aは、複数のオブジェクトの各々に対応するノード群を対象として、検索クエリの近傍のノードを検索する検索処理において、複数のオブジェクトを分類した複数のブロブの情報を用いて、一のブロブに属する複数のノードと検索クエリとの距離を、ベクトル量子化された複数のノードのベクトル情報を用いて算出する。検索処理部133Aは、複数のノードと検索クエリとの距離の算出を並列化して一括で行う。検索処理部133Aは、情報処理装置100Aの仕様に基づいて決定される一括処理数の複数のノードと検索クエリとの距離の算出を並列処理する。
検索処理部133Aは、検索クエリが該当するブロブと隣接する一のブロブに属する複数のノードと検索クエリとの距離を算出する。検索処理部133Aは、複数のノードがエッジにより連結されたグラフを用いて、検索クエリの近傍のノードを検索する検索処理において、複数のノードと検索クエリとの距離を算出する。検索処理部133Aは、検索処理において処理対象となる対象ノードからのエッジが連結された接続ノードが属する一のブロブに属する複数のノードと検索クエリとの距離を算出する。
検索処理部133Aは、対象ノードが属するブロブ以外の一のブロブに属する複数のノードと検索クエリとの距離を算出する。検索処理部133Aは、複数のノードの各々から、複数のノードの各々が属するブロブ以外の他のブロブへ連結されたブロブ用グラフを用いて、検索クエリの近傍のノードを検索する検索処理において、複数のノードと検索クエリとの距離を算出する。検索処理部133Aは、複数のノードがエッジにより連結された変換前のグラフにおいて、複数のノードのうち一のノードからエッジが連結されたノードが属するブロブであって、一のノードが属するブロブ以外のブロブへ、一のノードからエッジを連結することにより生成された変換後のグラフであるブロブ用グラフを用いて、検索クエリの近傍のノードを検索する検索処理において、複数のノードと検索クエリとの距離を算出する。
検索処理部133Aは、検索処理において処理対象となる対象ノードからのエッジが連結されたブロブである一のブロブに属する複数のノードと検索クエリとの距離を算出する。検索処理部133Aは、既に処理対象となったブロブである処理済みブロブを示す情報を用いて、一のブロブを処理対象とするかを判定する。検索処理部133Aは、一のブロブが処理済みブロブである場合、一のブロブを処理対象としないと判定する。
検索処理部133Aは、検索処理において処理対象となったノードのうち、所定のノードを対象として、ベクトル量子化がされた距離である第1距離とは異なり、ベクトル量子化がされていない第2距離を算出する。検索処理部133Aは、検索処理において検索クエリの近傍のノードとして抽出するノードの第1数よりも多い数である第2数のノードを近傍候補ノードとして抽出し、近傍候補ノードを対象として第2距離を算出する。検索処理部133Aは、近傍候補ノードのうち、第2距離が短い方から第1数のノードを検索クエリの近傍のノードとして抽出する。
検索処理部133Aは、第1距離が所定の閾値以内であるノードを対象として第2距離を算出する。検索処理部133Aは、近傍のノードとして抽出する対象範囲を示す検索範囲内のノードを対象として第2距離を算出する。検索処理部133Aは、検索処理の対象範囲を示す探索範囲内のノードを対象として第2距離を算出する。
〔2-3.検索処理例〕
ここで、第2の実施形態に係る検索処理の一例について、図16を一例として説明する。図16は、第2の実施形態に係る検索処理の一例を示すフローチャートである。以下に説明する検索処理は、情報処理装置100Aの検索処理部133Aによって行われる。なお、図11等、第1の実施形態と同様の点については適宜説明を省略する。例えば、図16において、図11と同様の点は同じステップ番号を付すことにより、適宜説明を省略する。
ここでは、近傍オブジェクト集合N(G,y)は、ノードyに付与されているエッジにより関連付けられている近傍のオブジェクトの集合である。「G」は、所定のグラフデータ(例えば、空間情報SP21に示すグラフGR21等)であってもよい。例えば、情報処理装置100Aは、k近傍検索処理を実行する。
例えば、図16に示す検索処理は、ステップS304の後にステップS304aに示す処理を行う点で、図11に示す検索処理と相違する。このように、図16に示す検索処理は、通常のグラフの探索で、まだ、アクセスしていないブロブに到達した場合にそのブロブ内のオブジェクト(ノード)とクエリとの距離を一括して計算し、各ノードの処理を行う。
具体的には、図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以降の処理を行う。
〔2-4.変形例〕
ここから、変形例について説明する。第2の実施形態に係る変形例においては、ブロブの概念を含むグラフを用いてもよい。例えば、第2の実施形態に係る変形例においては、ノードからのエッジによる参照先がブロブであるグラフを用いてもよい。なお、第1の実施形態や第2の実施形態と同様の点については、適宜説明を省略する。変形例に係る情報処理装置100Aは、グラフ情報記憶部122に代えて、グラフ情報記憶部122Aを有する。
〔2-4-1.情報処理〕
まず、図17を用いて、変形例に係る情報処理の概要を説明する。図17は、変形例に係る情報処理の一例を示す図である。
情報処理装置100Aは、ノード間をエッジで連結したグラフGR21を、ノードからのエッジによる参照先がブロブであるグラフGR31に変換する(ステップS31)。すなわち、情報処理装置100Aは、図17に示すように、通常のグラフであるグラフGR21から、ブロブの概念が導入されたグラフ(ブロブ用グラフ)であるグラフGR31を生成する。
図17の例では、情報処理装置100Aは、空間情報SP31に示すように、ノードからブロブへの有向エッジを含むグラフGR31を生成する。なお、グラフGR31においては、各ノード間のエッジについては削除され、グラフGR31には、ノードからブロブへの有向エッジが含まれ、ノード間のエッジは含まれない。図17に示す矢印線は、矢元のノードから矢先のブロブへの有向エッジを示す。すなわち、図17に示す矢印線は、矢元のノードを参照元とし、矢先のブロブを参照先とする有向エッジを示す。例えば、図17では、ノードN1からは、ブロブBL8及びブロブBL10の2つのブロブへのエッジが連結されることを示す。
例えば、情報処理装置100Aは、各ノードのエッジを接続ノード(近傍ノード)へのエッジから接続ノードが属するブロブへのエッジに変換する。なお、情報処理装置100Aは、各ノード自身が属するブロブへのエッジは生成しない。図17の例では、情報処理装置100Aは、ノードN9とノードN126は同じブロブBL1に属するため、ノードN9からブロブBL1へのエッジ、及びノードN126からブロブBL1へのエッジは生成しない。一方、図17の例では、情報処理装置100Aは、ノードN9とノードN18は異なるブロブBL1、BL4に属するため、ノードN9からブロブBL4へのエッジ、及びノードN18からブロブBL1へのエッジを生成する。
図17の例では、情報処理装置100Aは、空間情報SP31に示すように、ノード(オブジェクト)からブロブへの有向エッジを含むグラフGR31を用いて、検索処理を行う。例えば、情報処理装置100Aは、検索クエリQE2を対象として、グラフGR21を用いた図19に示すような検索処理を行うことにより、検索クエリQE2の検索結果を得る。図19に示す検索処理についての詳細は後述する。なお、図17での検索処理は、ブロブの概念を用いて検索処理を行う点で図12と共通し、エッジに関連する処理の点以外は、図12に示す検索処理と同様である。
〔2-4-2.グラフ〕
次に、図18を用いて、変形例に係るグラフの概要を説明する。図18は、変形例に係るグラフ情報記憶部の一例を示す図である。例えば、図18に示すグラフ情報記憶部122Aは、ブロブの概念が導入されたグラフ(ブロブ用グラフ)を記憶する。図18に示すグラフ情報記憶部122Aは、「ノードID」、「オブジェクトID」、および「ブロブ情報」といった項目を有する。このように、変形例に係るグラフ情報記憶部122Aは、「接続ノード情報」に代えて、「ブロブ情報」を有する点で図7のグラフ情報記憶部122と相違する。なお、図7のグラフ情報記憶部122と同様の点については適宜説明を省略する。
また、「ブロブ情報」は、対応するノードから辿ることができるブロブ(参照先のブロブ)に関する情報を示す。例えば、「ブロブ情報」には、「参照先」といった情報が含まれる。「参照先」は、エッジにより連結され、そのノードから辿ることができる参照先(ブロブ)を識別するための情報を示す。すなわち、図18の例では、ノードを識別するノードID(オブジェクトID)に対して、そのノードからエッジにより辿ることができる参照先(ブロブ)が対応付けられて登録されている。なお、「ブロブ情報」には、参照先に接続されるエッジを識別するための情報(エッジID)等が含まれてもよい。
図18の例では、ノードID「N1」により識別されるノード(ノードN1)は、オブジェクトID「OB1」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN1からは、ブロブID「BL8」により識別されるブロブ(ブロブBL8)にエッジが連結されており、ノードN1からブロブBL8へ辿ることができることを示す。また、ノードN1からは、ブロブID「BL10」により識別されるブロブ(ブロブBL10)にエッジが連結されており、ノードN1からブロブBL10へ辿ることができることを示す。
また、ノードID「N2」により識別されるノード(ノードN2)は、オブジェクトID「OB2」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN2からは、ブロブID「BL5」により識別されるブロブ(ブロブBL5)にエッジが連結されており、ノードN1からブロブBL5へ辿ることができることを示す。
なお、グラフ情報記憶部122Aは、上記に限らず、目的に応じて種々の情報を記憶してもよい。
また、グラフは、クエリを入力とし、グラフ中のエッジを辿ることによりノードを探索し、クエリに類似するノードを抽出し出力するプログラムモジュールを含んでもよい。すなわち、グラフは、グラフを用いて検索処理を行うプログラムモジュールとしての利用が想定されるものであってもよい。例えば、グラフGR31は、クエリとしてベクトルデータが入力された場合に、そのベクトルデータに類似するベクトルデータに対応するノードをグラフ中から抽出し、出力するプログラムであってもよい。例えば、グラフGR31は、クエリ画像に対応する類似画像を検索するプログラムモジュールとして利用されるデータであってもよい。例えば、グラフGR31は、入力されたクエリに基づいて、グラフにおいてそのクエリに類似するノードを抽出し、出力するよう、コンピュータを機能させる。
〔2-4-3.検索処理例〕
ここから、変形例に係る検索処理の一例について、図19を一例として説明する。図19は、変形例に係る検索処理の一例を示すフローチャートである。以下に説明する検索処理は、情報処理装置100Aの検索処理部133Aによって行われる。なお、図11、図16等、第1の実施形態または第2の実施形態と同様の点については適宜説明を省略する。例えば、図19において、図11と同様の点は同じステップ番号を付すことにより、適宜説明を省略する。
図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近傍検索処理を実行する。
例えば、図19に示す検索処理は、図11からステップS306の処理が以下のように変更される。図19の検索処理においては、情報処理装置100Aは、N(G、s)の中からブロブ集合Cに含まれない、ブロブを一つ選択し、選択したブロブをブロブ集合Cに格納し、ブロブ内のオブジェクトを一括計算し、その集合をB(「対象ブロブ内オブジェクト集合B」ともいう)とする(ステップS306)。
また、図19に示す検索処理は、ステップS306の後にステップS306aに示す処理を行う点で、図11に示す検索処理と相違する。具体的には、図19の検索処理においては、情報処理装置100Aは、対象ブロブ内オブジェクト集合Bからオブジェクトuを一つ選択する(ステップS306a)。その後、情報処理装置100Aは、ステップS307以降の処理を行う。
また、図19に示す検索処理は、ステップS315の前にステップS314aに示す処理を行う点で、図11に示す検索処理と相違する。具体的には、図19の検索処理においては、情報処理装置100Aは、対象ブロブ内オブジェクト集合Bから全て選択したか否かを判定する(ステップS314a)。
対象ブロブ内オブジェクト集合Bから全て選択し終えた場合(ステップS314a:Yes)、情報処理装置100Aは、ステップS315の処理を行う。一方、対象ブロブ内オブジェクト集合Bから全て選択し終えていない場合(ステップS314a:No)、情報処理装置100Aは、ステップS306aに戻って処理を繰り返す。
〔2-4-4.生成処理の他の例〕
上述した例では、各ノードのエッジを接続ノードへのエッジから接続ノードが属するブロブへのエッジに変換してブロブ用グラフを生成する場合を示したが、情報処理装置100Aは、様々な情報を適宜用いて、ブロブ用グラフを生成してもよい。例えば、情報処理装置100Aは、複数のオブジェクトを検索対象とする近傍検索インデックス(単に「インデックス」ともいう)を用いて、ブロブ用グラフを生成してもよい。なお、上述した内容と同様の点については適宜説明を省略する。
ブロブ用グラフの生成の一例について図20を用いて説明する。図20は、変形例に係る情報処理の他の一例を示す図である。なお、以下では、インデックスの一例としてグラフを用いる場合を一例として説明するが、インデックスは、複数のオブジェクトを検索対象とするものであればどのようなものであってもよい。例えば、インデックスは、ハッシュテーブル等のハッシュに関する記述を利用したインデックス(ハッシュインデックス)、木構造を有するインデックス(ツリーインデックス)等であってもよい。
また、オブジェクトまたはそのオブジェクトに対応するノード(「オブジェクトノード」ともいう)を示す情報を第1情報と記載し、複数のオブジェクトを分類するために用いる情報を第2情報と記載する場合がある。また、ブロブを示す情報を第3情報と記載し、オブジェクトノードをエッジで連結したグラフを第4情報と記載する場合がある。例えば、図20中のグラフGR21は、オブジェクトノードであるノードN1等がエッジで連結されており、第4情報に対応する。また、図17中のグラフGR31及び図20中のグラフGR32は、第4情報とは異なり、オブジェクトノードとブロブとがエッジが連結されたブロブ用グラフ(「グループグラフ」ともいう)である。すなわち、グループグラフは、オブジェクトノードからブロブへエッジが連結され、オブジェクトノードを参照元とし、ブロブ(グループ)を参照先とするグラフである。
情報処理装置100Aは、オブジェクトノード間がエッジで連結したグラフGR21をインデックス(第4情報)として用いて、オブジェクトノードからのエッジによる参照先がブロブとなるグループグラフであるグラフGR32を生成する(ステップS41)。図20では、情報処理装置100Aは、空間情報SP32に示すように、ノードからブロブへの有向エッジを含むグラフGR32を生成する。
例えば、情報処理装置100Aは、複数のオブジェクトから一のオブジェクトを選択し、グラフGR21を用いて一のオブジェクトの近傍オブジェクトを検索し、一のオブジェクトに対応する一のオブジェクトノードから、近傍オブジェクトが属する他のグループへエッジを連結する連結処理により、グラフGR32を生成する。例えば、情報処理装置100Aは、複数のオブジェクトからランダムに一のオブジェクトを選択し、選択した一のオブジェクトを対象に連結処理を行い、グラフGR32を生成する。
例えば、情報処理装置100Aは、以下のような処理(1-1)~(1-4)を行い、グラフGR32を生成する。なお、オブジェクトは、オブジェクトに対応するノードと読み替えてもよい。
(1-1):ランダムでオブジェクトNXを取得(選択)
(1-2):オブジェクトNXの近傍オブジェクトを定数k件検索
(1-3):各近傍オブジェクトの属するブロブを取得
(1-4):オブジェクトNXから取得したブロブへのエッジを生成
例えば処理(1-1)では、情報処理装置100Aは、オブジェクト情報記憶部121に記憶された複数のオブジェクトからランダムに一のオブジェクトNXを取得する。
例えば処理(1-2)では、情報処理装置100Aは、図11に示すような検索処理を、オブジェクトNXを対象(クエリ)とし、グラフGR21を用いて行うことにより、k件(個)のオブジェクトをオブジェクトNXの近傍オブジェクトとして抽出する。
例えば処理(1-3)では、情報処理装置100Aは、ブロブ情報記憶部125に記憶されたブロブの情報を参照し、オブジェクトNXの近傍オブジェクト(ノード)が対応付けられたブロブを取得する。
例えば処理(1-4)では、情報処理装置100Aは、オブジェクトNXから取得したブロブへのエッジを生成する。例えば、情報処理装置100Aは、量子化情報記憶部123A中のオブジェクトNXに取得したブロブを示す情報を対応付けることにより、グラフGR32を生成する。
例えば、情報処理装置100Aは、上記の処理(1-1)~(1-4)を、処理対象となるオブジェクトが無くなるまで繰り返し行い、グラフGR32を生成する。なお、空間情報SP21に示すブロブを検索により生成している場合、ブロブの生成の際の検索結果を流用して、グラフGR32を生成してもよい。なお、ブロブを検索により生成する例については後述する。
例えば、情報処理装置100Aは、空間情報SP32に示すように、ノード(オブジェクト)からブロブへの有向エッジを含むグラフGR32を用いて、検索処理を行う。例えば、情報処理装置100Aは、検索クエリQE2を対象として、グラフGR32を用いた図19に示すような検索処理を行うことにより、検索クエリQE2の検索結果を得る。
また、上述した例では、クラスタリングによりブロブを生成する場合を示したが、ブロブは、クラスタリングに限らず、様々な方法により生成されてもよい。例えば、情報処理装置100Aは、インデックス等の第2情報を用いて、ブロブを示す情報(第3情報)を生成してもよい。
情報処理装置100Aは、図21に示すような、グラフGR21をインデックスとして用いて、ブロブを示す第3情報を生成する。図21は、ブロブ情報の生成処理の一例を示す図である。図21の空間情報SP20は、空間情報SP21中のブロブの情報が生成される前の状態を示し、図21のグラフGR21は、図20のグラフGR21と同様のグラフである。なお、図21に示す処理は、後述する第1方法の一部を示すものであるが、詳細は後述する。
例えば、情報処理装置100Aは、グラフGR21を用いた検索により、複数のオブジェクトを複数のブロブに分類する第3情報を生成する。例えば、情報処理装置100Aは、グラフGR21中の複数のノードから一のノード(「処理対象ノード」ともいう)を選択し、処理対象ノードにエッジで連結されたノードである近傍ノードのうち少なくとも一部のノードである分類対象ノード、及び処理対象ノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。例えば、情報処理装置100Aは、複数のノードから所定の処理により処理対象ノードを選択し、選択した処理対象ノードを対象に分類処理を行い、第3情報を生成する。
例えば、情報処理装置100Aは、ノードにエッジで連結された近傍ノード(接続ノード)の数に基づいて処理対象ノードを選択してもよい。例えば、情報処理装置100Aは、近傍ノードの数が大きい方から順に処理対象ノードを選択してもよい。近傍ノードの数が大きい方から順に処理対象ノードを選択し、ブロブを示す第3情報を生成する方法を「第1方法」ともいう。また、例えば、情報処理装置100Aは、近傍ノード(接続ノード)の数が小さい方から順に処理対象ノードを選択してもよい。近傍ノードの数が小さい方から順に処理対象ノードを選択し、ブロブを生成する方法を「第2方法」ともいう。また、例えば、情報処理装置100Aは、ランダムに処理対象ノードを選択してもよい。ランダムに処理対象ノードを選択し、ブロブを示す第3情報を生成する方法を「第3方法」ともいう。以下では、第1方法、第2方法、及び第3方法の各々の処理手順の概要を説明する。
〔2-4-4-1.第1方法〕
まず、第1方法について説明する。例えば、第1方法の場合、情報処理装置100Aは、以下のような処理(2-1)~(2-3)を行い、ブロブを示す第3情報を生成する。
(2-1):各ノードの近傍ノード数(エッジ数)が大きいものからノードNDを取得
(2-2):ノードNDの近傍ノード及びノードNDを一のブロブとする
(2-3):ブロブとしたノード及びそのノードのエッジを削除
例えば、情報処理装置100Aは、処理(2-1)~(2-3)を、すべてのノードにおいて実施する。
例えば、処理(2-1)では、情報処理装置100Aは、グラフGR21を参照し、一のノードNDを順次取得する。情報処理装置100Aは、近傍ノードの数が大きい方から順に並べられたノードの一覧情報を用いて、一のノードNDを取得してもよい。
例えば処理(2-2)では、情報処理装置100Aは、処理対象となっているグラフ(グラフGR21等)を参照し、ノードNDの近傍ノード及びノードNDを一のブロブとする情報を生成する。なお、情報処理装置100Aは、すべての近傍ノードをブロブとするのではなく定数K以下の近傍ノードをブロブとしても良い。例えば、情報処理装置100Aは、ノードNDの全近傍ノードをノードNDとともにブロブとするのではなく、近傍ノードのうちK個の近傍ノード及びノードNDを一のブロブとしてもよい。
例えば処理(2-3)では、情報処理装置100Aは、ノードが重複して選択されないように、処理(2-2)においてブロブとしたノード及びそのノードのエッジを削除する。例えば、情報処理装置100Aは、ブロブとしたノードが他のノードの近傍ノードであれば、その(エッジおよび)ノードを削除する。なお、上記の方法は一例に過ぎず、処理(2-3)は、エッジ等を削除する方法に限らず、ブロブを生成可能であればどのような方法であってもよい。例えば、情報処理装置100Aは、既にブロブに属しているノードのリストを保持して、除外するノードを管理する方法により、ブロブの生成を行ってもよい。例えば、情報処理装置100Aは、ブロブとしたノードに所定のフラグ(削除フラグ等)を立てることにより、既にブロブに属しているノードを管理してもよい。このように、フラグを用いる場合、情報処理装置100Aは、処理の際に各ノードのフラグを参照して、そのノードを処理対象とするかを判定する。
上述した第1方法の具体例について図21を用いて説明する。図21では、情報処理装置100Aは、グラフGR21のうち、近傍ノードの数が最大の4個であるノードN7を取得する(ステップS51)。図21では、グラフGR21のうちノードN1も近傍ノードの数が4個であるが、情報処理装置100Aは、ノードN7を取得するものとする。なお、近傍ノードの数が同数のノードが複数ある場合、情報処理装置100Aは、その複数のノードからランダムにノードを取得してもよい。
そして、情報処理装置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に更新される。
そして、情報処理装置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から削除する。
情報処理装置100Aは、上述した処理を処理対象となるノードが無くなるまで繰り返し、複数のブロブを示す第3情報を生成する。
〔2-4-4-2.第2方法〕
次に、第2方法について説明する。例えば、第2方法の場合、情報処理装置100Aは、以下のような処理(3-1)~(3-3)を行い、ブロブを示す第3情報を生成する。
(3-1):各ノードの近傍ノード数(エッジ数)が小さいものからノードNDを取得
(3-2):ノードNDの近傍ノード及びノードNDを一のブロブとする
(3-3):ブロブとしたノード及びそのノードのエッジを削除
例えば、情報処理装置100Aは、処理(3-1)~(3-3)を、すべてのノードにおいて実施する。
例えば、処理(3-1)では、情報処理装置100Aは、グラフGR21を参照し、一のノードNDを順次取得する。情報処理装置100Aは、近傍ノードの数が小さい方から順に並べられたノードの一覧情報を用いて、一のノードNDを取得してもよい。
例えば処理(3-2)では、情報処理装置100Aは、処理対象となっているグラフ(グラフGR21等)を参照し、ノードNDの近傍ノード及びノードNDを一のブロブとする情報を生成する。なお、情報処理装置100Aは、すべての近傍ノードをブロブとするのではなく定数K以下の近傍ノードをブロブとしても良い。例えば、情報処理装置100Aは、ノードNDの全近傍ノードをノードNDとともにブロブとするのではなく、近傍ノードのうちK個の近傍ノード及びノードNDを一のブロブとしてもよい。
例えば処理(3-3)では、情報処理装置100Aは、ノードが重複して選択されないように、処理(3-2)においてブロブとしたノード及びそのノードのエッジを削除する。例えば、情報処理装置100Aは、ブロブとしたノードが他のノードの近傍ノードであれば、その(エッジおよび)ノードを削除する。なお、第2方法は、ノードの取得順が近傍ノード数(エッジ数)が小さい方から順である点以外は、第1方法と同様であるため、具体例等についての説明は省略する。例えば、処理(3-3)は、第1方法と同様に、エッジ等を削除する方法に限らず、ブロブを生成可能であればどのような方法であってもよい。例えば、情報処理装置100Aは、第1方法と同様に、既にブロブに属しているノードのリストを保持して、除外するノードを管理する方法により、ブロブの生成を行ってもよい。
〔2-4-4-3.第3方法〕
次に、第3方法について説明する。例えば、第3方法の場合、情報処理装置100Aは、以下のような処理(4-1)~(4-3)を行い、ブロブを示す第3情報を生成する。
(4-1):ランダムにノードNDを順次取得
(4-2):ノードNDの近傍ノード及びノードNDを一のブロブとする
(4-3):ブロブとしたノード及びそのノードのエッジを削除
例えば、情報処理装置100Aは、処理(4-1)~(4-3)を、すべてのノードにおいて実施する。なお、第3方法は、ノードの取得順がランダムである点以外は、第1方法及び第2方法と同様であり詳細な説明は省略する。例えば、情報処理装置100Aは、すべて同じエッジ数であればランダム順(第3方法)で第3情報の生成を実行してもよい。
〔2-4-4-4.第4方法〕
なお、上述した第1方法~第3方法は一例に過ぎず、情報処理装置100Aは、様々な処理によりブロブを生成してもよい。例えば、情報処理装置100Aは、複数のオブジェクトを検索対象とする近傍検索インデックス(インデックス)を用いた検索によりブロブを生成してもよい。インデックスを用いた検索によりブロブを生成する方法を「第4方法」ともいう。
以下、第4方法について説明する。なお、上述した内容と同様の点については適宜説明を省略する。以下では、インデックスの一例としてグラフを用いる場合を一例として説明するが、上述したようにインデックスは、複数のオブジェクトを検索対象とするものであればどのようなものであってもよい。例えば、インデックスは、ハッシュインデックス、ツリーインデックス等、どのようなインデックスであってもよい。
ここから、図21に示すようなグラフGR21をインデックスとして用いた検索により、情報処理装置100Aがブロブを示す第3情報を生成する場合を説明する。例えば、情報処理装置100Aは、以下のような処理(5-1)~(5-4)を行い、グラフGR32を生成する。
(5-1):ランダムでオブジェクトNXを取得(選択)
(5-2):オブジェクトNXの近傍オブジェクトを定数k件検索
(5-3):オブジェクトNXの近傍オブジェクト及びオブジェクトNXを一のブロブとする
(5-4):重複処理回避用の処理を実行
例えば処理(5-1)では、情報処理装置100Aは、グラフGR21からランダムに一のオブジェクトNXを取得する。
例えば処理(5-2)では、情報処理装置100Aは、図11に示すような検索処理を、オブジェクトNXを対象(クエリ)とし、グラフGR21を用いて行うことにより、k件(個)のオブジェクトをオブジェクトNXの近傍オブジェクトとして抽出する。なお、情報処理装置100Aは、すべてのオブジェクトをスキャン(検索)して、オブジェクトNXの近傍オブジェクトを抽出してもよい。
例えば処理(5-3)では、情報処理装置100Aは、オブジェクトNXの近傍オブジェクトの近傍ノード及びオブジェクトNXを一のブロブとする情報を生成する。
例えば処理(5-4)では、情報処理装置100Aは、一のオブジェクトが重複して検索されたりする等により複数のブロブに属することとならないように、重複処理回避用の処理を実行する。例えば、情報処理装置100Aは、ブロブとしたオブジェクトをインデックスから削除する。例えば、情報処理装置100Aは、ブロブとしたオブジェクトをグラフGR21から削除する。
なお、情報処理装置100Aは、上記に限らず、一のオブジェクトが複数のブロブに属することとならなければ、どのような方法により重複処理回避用の処理を行ってもよい。例えば、情報処理装置100Aは、ブロブとしたオブジェクトに所定のフラグ(削除フラグ等)を立てることにより、既にブロブに属しているオブジェクトが処理対象となることを抑制してもよい。このように、フラグを用いる場合、情報処理装置100Aは、処理の際に各オブジェクトのフラグを参照して、そのオブジェクトを処理対象とするかを判定する。例えば、情報処理装置100Aは、上述したグループグラフの生成に検索結果を利用する場合には、フラグを用いた方法により重複処理回避用の処理を行ってもよい。
〔2-4-5.変形例に係る情報処理装置〕
第2の実施形態の変形例に係る情報処理装置100Aにおいて取得部131は、以下の処理も行う。取得部131は、データ検索の対象となる複数のオブジェクトを示す第1情報と、複数のオブジェクトを分類するために用いる第2情報とを取得する。取得部131は、複数のオブジェクトを検索対象とするインデックスである第2情報を取得する。取得部131は、複数のオブジェクトの各々に対応する複数のノードがエッジにより連結されたグラフである第2情報を取得する。取得部131は、複数のオブジェクトを検索対象とするインデックスである第4情報を取得する。取得部131は、複数のオブジェクトの各々に対応する複数のオブジェクトノードがエッジにより連結されたグラフである第4情報を取得する。
また、第2の実施形態の変形例に係る情報処理装置100Aにおいて生成部132Aは、以下の処理も行う。生成部132Aは、取得部131により取得された第2情報を用いて、第1情報が示す複数のオブジェクトを分類し、複数のオブジェクトを対象とする検索処理において一括処理を行うために用いられる複数のグループを示す第3情報を生成する。生成部132Aは、第2情報を用いて、複数のオブジェクトを複数のグループに分類する第3情報を生成する。生成部132Aは、第2情報を用いた検索により、複数のオブジェクトを複数のグループに分類する第3情報を生成する。
生成部132Aは、グラフ中の複数のノードから一のノードを選択し、一のノードにエッジで連結されたノードである近傍ノードのうち少なくとも一部のノードである分類対象ノード、及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。生成部132Aは、一のノードの近傍ノードのうち所定の数のノードである分類対象ノード、及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。生成部132Aは、一のノードの近傍ノードの全てである分類対象ノード、及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。
生成部132Aは、複数のノードの各々にエッジで連結されたノードである近傍ノードの数に基づいて、複数のノードから一のノードを選択し、一のノードの分類対象ノード及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。生成部132Aは、近傍ノードの数が大きい方から順に一のノードを選択し、一のノードの分類対象ノード及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。生成部132Aは、近傍ノードの数が小さい方から順に一のノードを選択し、一のノードの分類対象ノード及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。
生成部132Aは、複数のノードからランダムに一のノードを選択し、一のノードの分類対象ノード及び一のノードの各々に対応するオブジェクト群を一のグループに分類する分類処理により、第3情報を生成する。生成部132Aは、一のグループに分類された一のノードの分類対象ノード及び一のノードである処理済みノード群をグラフから除外し、処理済みノード群を除外した後のグラフを用いて、分類処理を繰り返すことにより、第3情報を生成する。生成部132Aは、処理済みノード群を除外した後のグラフを用いて、分類処理を複数のオブジェクトがいずれかのグループに分類されるまで繰り返すことにより、第3情報を生成する。生成部132Aは、各々に属するオブジェクトが相互に排他的な複数のグループを示す第3情報を生成する。
生成部132Aは、第4情報を用いて、複数のオブジェクトのうち少なくとも一部のオブジェクトに対応するノードであるオブジェクトノードから、複数のグループのうち、オブジェクトノードが属するグループ以外の他のグループへエッジが連結されたグループグラフを生成する。生成部132Aは、複数のオブジェクトから一のオブジェクトを選択し、第4情報を用いて複数のオブジェクトを対象に、一のオブジェクトの近傍オブジェクトを検索し、一のオブジェクトに対応する一のオブジェクトノードから、近傍オブジェクトが属する他のグループへエッジを連結する連結処理により、グループグラフを生成する。生成部132Aは、複数のオブジェクトからランダムに一のオブジェクトを選択し、一のオブジェクトの近傍オブジェクトを検索し、一のオブジェクトに対応する一のオブジェクトノードから、近傍オブジェクトが属する他のグループへエッジを連結する連結処理により、グループグラフを生成する。生成部132Aは、第4情報を用いて、グループグラフを生成する。
〔2-4-6.情報処理のフロー〕
次に、図22を用いて、変形例に係る情報処理の手順について説明する。図22は、変形例に係る情報処理の一例を示すフローチャートである。
図22に示すように、情報処理装置100Aは、データ検索の対象となる複数のオブジェクトを示す第1情報を取得する(ステップS401)。例えば、情報処理装置100Aは、オブジェクト情報記憶部121から複数のオブジェクトを示す第1情報を取得する。
また、情報処理装置100Aは、複数のオブジェクトを分類するために用いる第2情報を取得する(ステップS402)。例えば、情報処理装置100Aは、グラフ情報記憶部122Aからグラフを第2情報として取得する。
そして、情報処理装置100Aは、第2情報を用いて、第1情報が示す複数のオブジェクトを分類し、複数のオブジェクトを対象とする検索処理において一括処理を行うために用いられる複数のグループを示す第3情報を生成する(ステップS403)。例えば、情報処理装置100Aは、各々に属するオブジェクトが相互に排他的な複数のブロブを示す第3情報を生成する。
〔3.第3の実施形態〕
上述した例では、オブジェクトに対応するノード(オブジェクトノード)間をエッジで連結したグラフ(「オブジェクトグラフ」ともいう)、オブジェクトノードとグループ(ブロブ)間をエッジで連結したグラフ(ブロブ用グラフ)の2種類のグラフを用いる説明したが、情報処理システム1は様々な種類のグラフを用いてもよい。例えば、情報処理システム1は、オブジェクトグラフ及びブロブ用グラフとは異なり、グループ(ブロブ)間を連結したグラフ(以下「グループ連結グラフ」または「ブロブ連結グラフ」ともいう)を生成し、ブロブ連結グラフを検索に用いてもよい。
この点について、以下、第3の実施形態として説明する。第3の実施形態においては、情報処理システム1は、情報処理装置100または情報処理装置100Aに代えて、情報処理装置100Bを有する。なお、第1の実施形態及び第2の実施形態等において上述した内容と同様の点については適宜説明を省略する。
情報処理装置100Bは、インデックス(インデックス情報)を用いて、一のオブジェクトが属する第1グループ(第1ブロブ)ら、一のオブジェクトの近傍オブジェクトが属する第2グループ(第2ブロブ)へエッジが連結されたグループ連結グラフを生成する。以下では、インデックスの一例としてグラフを用いる場合を一例として説明するが、上述したようにインデックスは、複数のオブジェクトを検索対象とするものであればどのようなものであってもよい。例えば、インデックスは、ハッシュインデックス、ツリーインデックス等、どのようなインデックスであってもよい。
〔3-1.情報処理〕
まず、図23を用いて、第3の実施形態に係る情報処理の概要を説明する。図23は、第3の実施形態に係る情報処理の一例を示す図である。
図23の例では、情報処理装置100Bは、空間情報SP21に示すようなグラフGR21を取得済みであるものとする。なお、情報処理装置100Bは、グラフ生成に関する様々な技術を適宜用いて、グラフGR21を生成してもよい。グラフGR21は図12等で示すグラフGR21と同様であるため説明を省略する。
情報処理装置100Bは、任意の方法により、ブロブBL1~BL10等を示す情報を生成する。情報処理装置100Bは、k-means等の任意のクラスタリングにより各ノードをブロブBL1~BL10のいずれかに分類してもよい。なお、情報処理装置100Bは、ブロブを生成可能であれば、どのような方法によりブロブを生成してもよい。例えば、情報処理装置100Bは、上述した第1方法~第4方法のいずれかの方法によりブロブBL1~BL10等を示す情報を生成してもよい。
情報処理装置100Bは、空間情報SP21に示すようなグラフGR21及びブロブの情報を用いて、ブロブ連結グラフを生成する(ステップS61)。図23の例では、情報処理装置100Bは、空間情報SP41に示すように、ブロブ(第1ブロブ)と他のブロブ(第2ブロブ)との間をエッジで連結したブロブ連結グラフであるグラフGR41を生成する。図23に示す矢印線は、矢元のブロブ(第1ブロブ)から矢先のブロブ(第2ブロブ)への有向エッジを示す。すなわち、図23に示す矢印線は、矢元のブロブを参照元とし、矢先のブロブを参照先とする有向エッジを示す。例えば、図23では、ブロブBL1からは、ブロブBL2、ブロブBL3、ブロブBL4、ブロブBL5及びブロブBL8の5つのブロブへのエッジが連結されることを示す。
例えば、情報処理装置100Bは、グラフGR21を検索し、検索結果を基にグラフGR41を生成する。例えば、情報処理装置100Bは、以下のような処理(6-1)~(6-4)を行い、ブロブ連結グラフであるグラフGR41を生成する。なお、以下のオブジェクトは、オブジェクトに対応するノードと読み替えてもよい。
(6-1):ランダムでオブジェクトNXを取得(選択)
(6-2):オブジェクトNXの近傍オブジェクトを定数k件検索
(6-3):各近傍オブジェクトの属するブロブを取得
(6-4):オブジェクトNXが属するブロブから取得したブロブへのエッジを生成
例えば処理(6-1)では、情報処理装置100Bは、オブジェクト情報記憶部121に記憶された複数のオブジェクトからランダムに一のオブジェクトNXを取得する。
例えば処理(6-2)では、情報処理装置100Bは、図11に示すような検索処理を、オブジェクトNXを対象(クエリ)とし、グラフGR21を用いて行うことにより、k件(個)のオブジェクトをオブジェクトNXの近傍オブジェクトとして抽出する。
例えば処理(6-3)では、情報処理装置100Bは、ブロブ情報記憶部125に記憶されたブロブの情報を参照し、オブジェクトNXの近傍オブジェクト(ノード)が対応付けられたブロブを取得する。
例えば処理(6-4)では、情報処理装置100Bは、オブジェクトNXが属するブロブから取得したブロブへのエッジを生成する。情報処理装置100Bは、オブジェクトNXが属するブロブからすべての近傍オブジェクトの属するブロブへのエッジを生成する。例えば、情報処理装置100Bは、オブジェクトNXが属するブロブの参照先として取得したブロブを示す情報(ブロブID)を、オブジェクトNXが属するブロブを示す情報(ブロブID)に対応付けて、ブロブ連結グラフ情報記憶部126に登録することにより、グラフGR41を生成する。
例えば、情報処理装置100Bは、上記の処理(6-1)~(6-4)を、処理対象となるオブジェクトが無くなるまで繰り返し行い、グラフGR41を生成する。なお、情報処理装置100Bは、ブロブXの参照先としてブロブYが登録済みの場合、ブロブXに属するオブジェクトの近傍オブジェクトとして、ブロブYに属するオブジェクトが再度検索(抽出)されても、登録をスキップして各ブロブの参照先に同じブロブが重複して登録されることを抑制してもよい。
例えば、情報処理装置100Bは、空間情報SP41に示すように、ブロブ間をエッジで連結するグラフGR41を用いて検索処理を行う。例えば、情報処理装置100Bは、検索クエリQE2を対象として、ブロブ連結グラフであるグラフGR41を用いた図27及び図28に示すような検索処理を行うことにより、検索クエリQE2の検索結果を得る。
上述したブロブ連結グラフの生成方法は一例に過ぎず、情報処理装置100Bは、様々な方法によりブロブ連結グラフを生成してもよい。例えば、情報処理装置100Bは、グラフを検索することなく、ブロブ連結グラフを生成してもよい。空間情報SP21に示すブロブを検索により生成している場合、ブロブの生成の際の検索結果を流用して、グラフGR41等のブロブ連結グラフを生成してもよい。
例えば、情報処理装置100Bは、グラフGR21でのオブジェクトノードの接続関係を、オブジェクトノードが属するブロブの接続関係に変換して、ブロブ連結グラフを生成してもよい。例えば、ブロブBL9に属するノードN1からはブロブBL8に属するノードN88及びブロブBL10に属するノードにエッジが連結されており、ブロブBL9に属するノードN4からはブロブBL7に属するノードにエッジが連結されている。そのため、情報処理装置100Bは、ブロブBL9から、ブロブBL7、ブロブBL8及びブロブBL10の3つのブロブへのエッジが連結されたブロブ連結グラフを生成する。このように、情報処理装置100Bは、オブジェクトノード間を連結するエッジを基に、ブロブ間をエッジで連結するブロブ連結グラフを生成してもよい。
〔3-2.情報処理装置の構成〕
次に、図24を用いて、第3の実施形態に係る情報処理装置100Bの構成について説明する。図24は、第3の実施形態に係る情報処理装置の構成例を示す図である。図24に示すように、情報処理装置100Bは、通信部110と、記憶部120Bと、制御部130Bとを有する。なお、情報処理装置100Bにおいて、情報処理装置100または情報処理装置100Aと同様の点は適宜説明を省略する。
(記憶部120B)
記憶部120Bは、例えば、RAM、フラッシュメモリ等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。第3の実施形態に係る記憶部120Bは、図24に示すように、オブジェクト情報記憶部121と、グラフ情報記憶部122と、量子化情報記憶部123と、コードブック情報記憶部124と、ブロブ情報記憶部125と、ブロブ連結グラフ情報記憶部126とを有する。
(ブロブ連結グラフ情報記憶部126)
第3の実施形態に係るブロブ連結グラフ情報記憶部126は、ブロブ連結グラフに関する各種情報を記憶する。例えば、ブロブ連結グラフ情報記憶部126は、生成したブロブ連結グラフを記憶する。図25は、第3の実施形態に係るブロブ連結グラフ情報記憶部の一例を示す図である。図25に示すブロブ連結グラフ情報記憶部126は、「ブロブID」および「接続ブロブ情報」といった項目を有する。
「ブロブID」は、グラフにおける各ブロブ(グループ)を識別するための識別情報を示す。「接続ブロブ情報」は、対応するブロブから辿ることができるブロブ(参照先のブロブ)に関する情報を示す。例えば、「接続ブロブ情報」には、「参照先」といった情報が含まれる。「参照先」は、エッジにより連結され、そのブロブから辿ることができる参照先(ブロブ)を識別するための情報を示す。すなわち、図25の例では、ブロブを識別するブロブIDに対して、そのブロブからエッジにより辿ることができる参照先(ブロブ)が対応付けられて登録されている。なお、「接続ブロブ情報」には、参照先に接続されるエッジを識別するための情報(エッジID)等が含まれてもよい。
図25の例では、ブロブID「BL1」により識別されるブロブ(ブロブBL1)からは、ブロブID「BL2」、「BL3」、「BL4」、「BL5」、「BL8」の各々により識別される5つのブロブにエッジが連結されていることを示す。すなわち、ブロブBL1からは、ブロブBL2、BL3、BL4、BL5、BL8の5つのブロブの各々へ辿ることができることを示す。
なお、ブロブ連結グラフ情報記憶部126は、上記に限らず、目的に応じて種々の情報を記憶してもよい。また、ブロブ連結グラフは、クエリを入力とし、ブロブ連結グラフ中のエッジを辿ることによりオブジェクト(オブジェクトノード)を探索し、クエリに類似するオブジェクトを抽出し出力するプログラムモジュールを含んでもよい。すなわち、ブロブ連結グラフは、ブロブ連結グラフを用いて検索処理を行うプログラムモジュールとしての利用が想定されるものであってもよい。例えば、ブロブ連結グラフであるグラフGR41は、クエリとしてベクトルデータが入力された場合に、そのベクトルデータに類似するベクトルデータに対応するオブジェクトをブロブ連結グラフにより抽出し、出力するプログラムであってもよい。例えば、グラフGR41は、クエリ画像に対応する類似画像を検索するプログラムモジュールとして利用されるデータであってもよい。例えば、グラフGR41は、入力されたクエリに基づいて、ブロブ連結グラフにおいてそのクエリに類似するオブジェクトを抽出し、出力するよう、コンピュータを機能させる。
(制御部130B)
図24の説明に戻って、制御部130Bは、コントローラ(controller)であり、例えば、CPUやMPUやGPU等によって、情報処理装置100B内部の記憶装置に記憶されている各種プログラム(情報処理プログラムの一例に相当)がRAMを作業領域として実行されることにより実現される。また、制御部130Bは、コントローラであり、例えば、ASICやFPGA等の集積回路により実現される。
図24に示すように、制御部130Bは、取得部131と、生成部132Bと、検索処理部133Bと、提供部134とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部130Bの内部構成は、図24に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
第3の実施形態に係る取得部131は、データ検索の対象となる複数のオブジェクトが分類された複数のブロブを示すブロブ情報と、複数のオブジェクトを検索対象とするインデックスを示すインデックス情報とを取得する。取得部131は、複数のオブジェクトの各々に対応する複数のノードがエッジにより連結されたグラフを示すインデックス情報を取得する。取得部131は、クラスタリング処理により複数のオブジェクトが分類された複数のブロブを示すブロブ情報を取得する。取得部131は、各々に属するオブジェクトが相互に排他的な複数のブロブを示すブロブ情報を取得する。取得部131は、クエリを取得する。
(生成部132B)
生成部132Bは、生成部132または生成部132Aと同様に各種情報を生成する。
生成部132Bは、取得部131により取得されたインデックス情報を用いて、複数のオブジェクトのうち一のオブジェクトが属する第1ブロブから、一のオブジェクトの近傍オブジェクトが属するブロブである第2ブロブへエッジが連結されたブロブ連結グラフを生成する。生成部132Bは、複数のオブジェクトから一のオブジェクトを選択し、インデックス情報を用いて複数のオブジェクトを対象に、一のオブジェクトの前近傍オブジェクトを検索し、一のオブジェクトが属する第1ブロブから、近傍オブジェクトが属する第2ブロブへエッジを連結することにより、ブロブ連結グラフを生成する。
生成部132Bは、複数のオブジェクトからランダムに一のオブジェクトを選択し、一のオブジェクトの近傍オブジェクトを検索し、一のオブジェクトが属する第1ブロブから、近傍オブジェクトが属する第2ブロブへエッジを連結することにより、ブロブ連結グラフを生成する。生成部132Bは、グラフを用いて第1ブロブから第2ブロブへエッジが連結されたブロブ連結グラフを生成する。
生成部132Bは、グラフを用いて、一のオブジェクトの近傍オブジェクトを検索し、一のオブジェクトが属する第1ブロブから、近傍オブジェクトが属する第2ブロブへエッジを連結することにより、ブロブ連結グラフを生成する。生成部132Bは、第1ブロブから、グラフにおいて一のオブジェクトに対応する一のノードにエッジで連結されたノードである近傍ノードに対応する近傍オブジェクトが属する第2ブロブへエッジを連結することにより、ブロブ連結グラフを生成する。
生成部132Bは、第1ブロブから、第1ブロブの代表点である第1代表点と、第2ブロブの代表点である第2代表点との間をエッジで連結することにより、ブロブ連結グラフを生成する。生成部132Bは、第1ブロブのセントロイドである第1代表点と、第2ブロブのセントロイドである第2代表点との間をエッジで連結することにより、ブロブ連結グラフを生成する。生成部132Bは、第1ブロブに属するオブジェクトを基に算出される中心点である第1代表点と、第2ブロブに属するオブジェクトを基に算出される中心点である第2代表点との間をエッジで連結することにより、ブロブ連結グラフを生成する。
(検索処理部133B)
検索処理部133Bは、検索処理部133または検索処理部133Aと同様に検索処理に関する各種処理を行う。
検索処理部133Bは、生成部132Bにより生成されたブロブ連結グラフを用いた検索処理を行う。検索処理部133Bは、ブロブ連結グラフを用いて、検索クエリの近傍オブジェクトを検索する検索処理を行う。検索処理部133Bは、ブロブ連結グラフにおいてブロブ間を連結するエッジを辿ることにより、検索クエリの近傍オブジェクトを検索する検索処理を行う。
検索処理部133Bは、検索処理において、複数のブロブを示すブロブ情報を用いて、一のブロブに属するオブジェクトである対象オブジェクトと検索クエリとの距離を、ベクトル量子化された対象オブジェクトのベクトル情報を用いて算出する。検索処理部133Bは、対象オブジェクトと検索クエリとの距離の算出を並列化して一括で行う。検索処理部133Bは、情報処理装置の仕様に基づいて決定される一括処理数の対象オブジェクトと検索クエリとの距離の算出を並列処理する。
〔3-3.情報処理のフロー〕
次に、図26を用いて、第3の実施形態に係る情報処理の手順について説明する。図26は、第3の実施形態に係る情報処理の一例を示すフローチャートである。
図26に示すように、情報処理装置100Bは、データ検索の対象となる複数のオブジェクトが分類された複数のグループを示すグループ情報を取得する(ステップS501)。例えば、情報処理装置100Bは、データ検索の対象となる複数のオブジェクトに対応するノード(オブジェクトノード)が分類された複数のブロブを示すブロブ情報を取得する。
情報処理装置100Bは、複数のオブジェクトを検索対象とするインデックスを示すインデックス情報を取得する(ステップS502)。例えば、情報処理装置100Bは、複数のオブジェクトに対応するノード(オブジェクトノード)がエッジで連結されたグラフをインデックスとして取得する。
情報処理装置100Bは、インデックス情報を用いて、複数のオブジェクトのうち一のオブジェクトが属する第1グループから、一のオブジェクトの近傍オブジェクトが属するグループである第2グループへエッジが連結されたグループ連結グラフを生成する(ステップS503)。例えば、情報処理装置100Bは、インデックス情報を用いて、複数のオブジェクトのうち一のオブジェクトが属する第1ブロブから、一のオブジェクトの近傍オブジェクトが属するブロブである第2ブロブへエッジが連結されたブロブ連結グラフを生成する。
〔3-4.検索処理例〕
ここで、第3の実施形態に係る検索処理の一例について、図27及び図28を一例として説明する。図27及び図28は、第3の実施形態に係る検索処理の一例を示すフローチャートである。以下に説明する検索処理は、情報処理装置100Bの検索処理部133Bによって行われる。なお、第1の実施形態や第2の実施形態で説明した検索処理と同様の点については適宜説明を省略する。
図27及び図28では、N(G、s)およびCはブロブの集合(ブロブ集合)となる。また、「G」は、ブロブ間がエッジで連結されたグラフ(ブロブ連結グラフ)データ(例えば、空間情報SP41に示すグラフGR41等)であってもよい。例えば、情報処理装置100Bは、k近傍検索処理を実行する。
まず、図27に示す処理(メイン処理)について説明する。例えば、情報処理装置100Bは、超球の半径rを∞(無限大)に設定し、ブロブ集合Cを空集合(Φ)に設定する(ステップS601)。そして、情報処理装置100Bは、既存のブロブ集合(全てのブロブ)から部分ブロブ集合Bを抽出する(ステップS602)。例えば、情報処理装置100Bは、ルートノードとして選択されたオブジェクト(ノード)が属するブロブを部分ブロブ集合Bとして抽出してもよい。また、例えば、情報処理装置100Bは、ランダムにブロブを部分ブロブ集合Bとして抽出してもよい。
そして、情報処理装置100Bは、判定処理を実行する(ステップS603)。情報処理装置100Bは、図28に示すステップS701~S717の判定処理を実行する。図28に示す判定処理の詳細については後述する。
そして、情報処理装置100Bは、ブロブ集合Sに部分ブロブ集合Bを設定する(ステップS604)。
情報処理装置100Bは、ブロブ集合Sに含まれるブロブの中で最小のクエリ距離dのブロブsを選択する(ステップS605)。なお、ここでいう「クエリ距離」とは、ブロブ内の全てのオブジェクトとクエリオブジェクト(クエリ)間の中で最も短い距離である。例えば、情報処理装置100Bは、クエリ(検索クエリ)となるオブジェクトをyとすると、ブロブ集合Sのうち、オブジェクトyとのクエリ距離が最も短いブロブsを選択する。なお、クエリ距離は、上記に限らず、例えばクエリとブロブの代表点(セントロイド等)との間の距離であってもよい。そして、情報処理装置100Bは、ブロブ集合Sからブロブsを除外する(ステップS606)。
そして、情報処理装置100Bは、ブロブsのクエリ距離dがr(1+ε)を超えるか否かを判定する(ステップS607)。ブロブsのクエリ距離dがr(1+ε)を超える場合(ステップS607:Yes)、情報処理装置100Bは、オブジェクト集合Rをオブジェクトyの近傍オブジェクト集合として出力し(ステップS608)、処理を終了する。
ブロブsのクエリ距離dがr(1+ε)を超えない場合(ステップS607:No)、情報処理装置100Bは、ブロブsがブロブ集合Cに含まれるかを判定する(ステップS609)。
ブロブsがブロブ集合Cに含まれる場合(ステップS609:Yes)、情報処理装置100Bは、ステップS605に戻って処理を繰り返す。
ブロブsがブロブ集合Cに含まれない場合(ステップS609:No)、情報処理装置100Bは、ブロブ集合Cにブロブsを追加する(ステップS610)。
そして、情報処理装置100Bは、部分ブロブ集合Bにブロブsの近傍ブロブ集合N(G,s)を設定する(ステップS611)。近傍ブロブ集合N(G,s)は、例えばブロブsに関連付けられているブロブ(近傍のブロブ)の集合である。例えば、近傍ブロブ集合N(G,s)は、ブロブsからのエッジが連結されているブロブ(近傍のブロブ)の集合である。そして、情報処理装置100Bは、判定処理を実行する(ステップS612)。詳細は後述するが、例えば、情報処理装置100Bは、上述したステップS603と同様に、図28に示すステップS701~S717の判定処理を実行する。
そして、情報処理装置100Bは、ブロブ集合Sが空集合(Φ)であるか否かを判定する(ステップS613)。ブロブ集合Sが空集合でない場合(ステップS613:No)、情報処理装置100Bは、ステップS605に戻って処理を繰り返す。また、ブロブ集合Sが空集合である場合(ステップS613:Yes)、情報処理装置100Bは、オブジェクト集合Rを出力し、処理を終了する(ステップS614)。例えば、情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクト(ノード)を追加ノード(入力オブジェクトy)に対応する近傍ノードとして選択してもよい。例えば、情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクト(ノード)を対象ノード(入力オブジェクトy)に対応する近傍ノードとして抽出(選択)してもよい。また、例えば、情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクト(ノード)を検索クエリ(入力オブジェクトy)に対応する検索結果として、検索を行った端末装置等へ提供してもよい。
ここから、図28に示す処理(判定処理)について説明する。まず、情報処理装置100Bは、ブロブ集合Tに部分ブロブ集合Bを設定する(ステップS701)。
そして、情報処理装置100Bは、ブロブ集合Tからブロブbを一つ取得し、ブロブ集合Tからブロブbを削除する(ステップS702)。そして、情報処理装置100Bは、判定処理に用いる変数であるminを∞(無限大)に設定する(ステップS703)。
そして、情報処理装置100Bは、ブロブbからオブジェクトuを一つ取得し、ブロブbからオブジェクトuを削除する(ステップS704)。
そして、情報処理装置100Bは、オブジェクトuとオブジェクトyとの距離d(u,y)がmin未満か否かを判定する(ステップS705)。
オブジェクトuとオブジェクトyとの距離d(u,y)がmin未満である場合(ステップS705:Yes)、情報処理装置100Bは、minの値を距離d(u,y)に設定(更新)し(ステップS706)、ステップS707の処理を行う。
オブジェクトuとオブジェクトyとの距離d(u,y)がmin未満ではない場合(ステップS705:No)、情報処理装置100Bは、ステップS706の処理を行わず、ステップS707の処理を行う。
情報処理装置100Bは、オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下であるか否かを判定する(ステップS707)。
オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下である場合(ステップS707:Yes)、情報処理装置100Bは、ブロブbをブロブ集合Sに追加し(ステップS708)、ステップS709の処理を行う。
オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下ではない場合(ステップS707:No)、情報処理装置100Bは、ステップS708の処理を行わず、ステップS709の処理を行う。
情報処理装置100Bは、オブジェクトuとオブジェクトyとの距離d(u,y)がr以下であるか否かを判定する(ステップS709)。
オブジェクトuとオブジェクトyとの距離d(u,y)がr以下である場合(ステップS709:Yes)、情報処理装置100Bは、オブジェクトuをオブジェクト集合Rに追加し(ステップS710)、ステップS711の処理を行う。
オブジェクトuとオブジェクトyとの距離d(u,y)がr以下ではない場合(ステップS709:No)、情報処理装置100Bは、ステップS710の処理を行わず、ステップS711の処理を行う。
情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクト数がksを超えるか否かを判定する(ステップS711)。所定数ksは、任意に定められる自然数である。例えば、ksは、検索数や抽出対象数であってもよい。また、例えば、範囲検索等において抽出するオブジェクト数の上限を設けない場合、ksは、無限大に設定されてもよい。例えば、ks=4等であってもよい。
オブジェクト集合Rに含まれるオブジェクト数がksを超える場合(ステップS711:Yes)、情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyから最も遠いオブジェクトを、オブジェクト集合Rから除外し(ステップS712)、ステップS713の処理を行う。
オブジェクト集合Rに含まれるオブジェクト数がksを超えない場合(ステップS711:No)、情報処理装置100Bは、ステップS712の処理を行わず、ステップS713の処理を行う。
情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクト数がksと一致するか否かを判定する(ステップS713)。
オブジェクト集合Rに含まれるオブジェクト数がksと一致する場合(ステップS713:Yes)、情報処理装置100Bは、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyから最も遠いオブジェクトと、オブジェクトyとの距離をrに設定し(ステップS714)、ステップS715の処理を行う。
オブジェクト集合Rに含まれるオブジェクト数がksと一致しない場合(ステップS713:No)、情報処理装置100Bは、ステップS714の処理を行わず、ステップS715の処理を行う。
情報処理装置100Bは、ブロブbが空集合(Φ)であるか否かを判定する(ステップS715)。ブロブbが空集合でない場合(ステップS715:No)、情報処理装置100Bは、ステップS704に戻って処理を繰り返す。
また、ブロブbが空集合である場合(ステップS715:Yes)、情報処理装置100Bは、minを部分ブロブ集合B内のブロブbのブロブのクエリ距離とする(ステップS716)。例えば、情報処理装置100Bは、ブロブbの全てのオブジェクトとクエリとの間の距離のうち最も短い距離をクエリ距離としてminに設定する。
情報処理装置100Bは、ブロブ集合Tが空集合(Φ)であるか否かを判定する(ステップS717)。ブロブ集合Tが空集合でない場合(ステップS717:No)、情報処理装置100Bは、ステップS702に戻って処理を繰り返す。
また、ブロブ集合Tが空集合である場合(ステップS717:Yes)、判定処理を終了する。
〔3-5.変形例〕
ブロブ連結グラフは、上述した例に限らず様々な態様により構成されてもよい。例えば、ブロブ連結グラフは、各グループ(ブロブ)の代表点間がエッジで連結されたグラフであってもよい。この点について、以下、第3の実施形態に係る変形例として説明する。なお、第1の実施形態や第2の実施形態や第3の実施形態と同様の点については、適宜説明を省略する。第3の実施形態の変形例に係る情報処理装置100Bは、ブロブ情報記憶部125及びブロブ連結グラフ情報記憶部126に代えて、ブロブ情報記憶部125A及びブロブ連結グラフ情報記憶部126Aを有する。
〔3-5-1.情報処理〕
まず、図29を用いて、変形例に係る情報処理の概要を説明する。図29は、変形例に係るブロブ連結グラフ情報の一例を示す図である。図29の例ではブロブがクラスタリングにより生成されている場合を示す。
図29の例では、情報処理装置100Bは、各ブロブのセントロイドを連結したブロブ連結グラフを生成する。情報処理装置100Bは、空間情報SP41に示すように、各ブロブBL1~BL10の各々に対応するセントロイドC1~C10をエッジで連結したブロブ連結グラフであるグラフGR42を生成する。情報処理装置100Bは、グラフ生成に関する種々の従来技術を適宜用いてグラフGR42を生成する。
例えば、情報処理装置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を生成する。
なお、情報処理装置100Bは、どのような方法によりグラフGR42を生成してもよい。情報処理装置100Bは、様々なインデックスを用いて、グラフGR42を生成してもよい。例えば、情報処理装置100Bは、オブジェクトノードが連結されたグラフGR21を用いて、グラフGR42を生成してもよい。この場合、情報処理装置100Bは、図23中のグラフGR41と同様の処理によりグラフGR42を生成できるため、詳細な説明は省略する。例えば、情報処理装置100Bは、図23に示す例と同様の処理により、グラフGR42を生成してもよい。なお、グラフGR42は無向(双方向)エッジを一例として示すが、有向エッジであってもよい。
このように、変形例に係る情報処理装置100Bは、セントロイドのグラフをブロブ連結グラフとして生成する。そして、情報処理装置100Bは、生成したブロブ連結グラフを用いてセントロイドで通常の検索を行い、距離計算はブロブ単位で行う。このように、情報処理装置100Bは、ブロブをセントロイドで代表させることで、簡便な処理とすることができる。なお、情報処理装置100Bは、ブロブがクラスタリングではない場合には、各ブロブに属するオブジェクトを基に中心点を算出し、算出した中心点を代表点として用いてもよい。
図29の例では、情報処理装置100Bは、空間情報SP42に示すように、ブロブの代表点であるセントロイド間がエッジで連結されたグラフGR42を用いて、検索処理を行う。例えば、情報処理装置100Bは、検索クエリQE2を対象として、グラフGR21を用いた図27及び図28に示すような検索処理を行うことにより、検索クエリQE2の検索結果を得る。この点については、上述した例と同様であり詳細な説明は省略する。
〔3-5-2.情報〕
次に、図30及び図31を用いて、変形例に係る情報の概要を説明する。図30は、変形例に係るブロブ情報記憶部の一例を示す図である。図31は、変形例に係るブロブ連結グラフ情報記憶部の一例を示す図である。
まず、図30に示す変形例に係るブロブ情報記憶部125Aについて説明する。図30に示す変形例に係るブロブ情報記憶部125Aは、「ブロブID」、「ノードID」、「ベクトル情報」、および「セントロイドID」といった項目が含まれる。このように、変形例に係るブロブ情報記憶部125Aは、「セントロイドID」を有する点で図15のブロブ情報記憶部125と相違する。なお、図15のブロブ情報記憶部125と同様の点については適宜説明を省略する。
「セントロイドID」は、各ブロブのセントロイドを識別するための識別情報を示す。「ベクトル情報」は、ブロブの代表点であるセントロイドのベクトル情報を示す。
図30に示す例では、ブロブID「BL1」により識別されるブロブBL1のセントロイドは、セントロイドID「C1」により識別されるセントロイド(セントロイドC1)であることを示す。ブロブID「BL9」により識別されるブロブBL9のセントロイドは、セントロイドID「C9」により識別されるセントロイド(セントロイドC9)であることを示す。
なお、ブロブ情報記憶部125Aは、上記に限らず、目的に応じて種々の情報を記憶してもよい。
次に、図31に示す変形例に係るブロブ連結グラフ情報記憶部126Aについて説明する。図30に示す変形例に係るブロブ連結グラフ情報記憶部126Aは、「セントロイドID」および「接続セントロイド情報」といった項目を有する。なお、図25のブロブ連結グラフ情報記憶部126と同様の点については適宜説明を省略する。
「セントロイドID」は、グラフにおける各ブロブの代表点であるセントロイドを識別するための識別情報を示す。「接続セントロイド情報」は、対応するセントロイドから辿ることができるセントロイド(参照先のセントロイド)に関する情報を示す。例えば、「接続セントロイド情報」には、「参照先」といった情報が含まれる。「参照先」は、エッジにより連結され、そのセントロイドから辿ることができる参照先(セントロイド)を識別するための情報を示す。すなわち、図31の例では、セントロイドを識別するセントロイドIDに対して、そのセントロイドからエッジにより辿ることができる参照先(セントロイド)が対応付けられて登録されている。なお、「接続セントロイド情報」には、参照先に接続されるエッジを識別するための情報(エッジID)等が含まれてもよい。
図31の例では、セントロイドID「C1」により識別されるセントロイド(セントロイドC1)からは、セントロイドID「C2」、「C3」、「C4」、「C7」、「C8」の各々により識別される5つのセントロイドにエッジが連結されていることを示す。すなわち、セントロイドC1からは、セントロイドC2、C3、C4、C7、C8の5つのセントロイドの各々へ辿ることができることを示す。
なお、ブロブ連結グラフ情報記憶部126Aは、上記に限らず、目的に応じて種々の情報を記憶してもよい。また、ブロブ連結グラフは、クエリを入力とし、ブロブ連結グラフ中のエッジを辿ることによりオブジェクト(オブジェクトノード)を探索し、クエリに類似するオブジェクトを抽出し出力するプログラムモジュールを含んでもよい。すなわち、ブロブ連結グラフは、ブロブ連結グラフを用いて検索処理を行うプログラムモジュールとしての利用が想定されるものであってもよい。例えば、ブロブ連結グラフであるグラフGR42は、クエリとしてベクトルデータが入力された場合に、そのベクトルデータに類似するベクトルデータに対応するオブジェクトをブロブ連結グラフにより抽出し、出力するプログラムであってもよい。例えば、グラフGR42は、クエリ画像に対応する類似画像を検索するプログラムモジュールとして利用されるデータであってもよい。例えば、グラフGR42は、入力されたクエリに基づいて、ブロブ連結グラフにおいてそのクエリに類似するオブジェクトを抽出し、出力するよう、コンピュータを機能させる。
上述したように、各実施形態及び変形例において、情報処理システム1は、以下のような処理を実行する。例えば、情報処理システム1は、ベクトルのクラスタリングでブロブを生成する。例えば、情報処理システム1は、ブロブのセントロイドをノードとしてグラフインデックスを生成する。
例えば、情報処理システム1は、任意のベクトルを一定数取得して、直積量子化のクラスタリングを行う。つまり、情報処理システム1は、部分ベクトルに分割して、部分ベクトル単位にクラスタリングを行い、コードブックを生成する。
例えば、情報処理システム1は、ブロブ単位に属するオブジェクトを直積量子化し、転置インデックスを生成する。例えば、情報処理システム1は、オブジェクトからブロブへのエッジを含むグラフ(ブロブ用グラフ)を生成する。例えば、情報処理システム1は、一般的な直積量子化の手法を用により近傍オブジェクトを検索する。ここでいう一般的な直積量子化の手法とは、例えば、オブジェクトとブロブのすべてのセントロイドとの距離を算出し上位一定数のブロブを取得した後に、ブロブ内のオブジェクトの距離を直積量子化で距離を求めて近傍オブジェクトを取得することであってもよい。なお、情報処理システム1は、上述したように、セントロイドのグラフを生成している場合はグラフを用いて一定数のブロブを検索して取得することが可能である。または、情報処理システム1は、上記した、オブジェクトからブロブへのエッジを含むグラフ(ブロブ用グラフ)ではなく、ブロブ間をエッジで連結したグラフ(ブロブ連結グラフ)を生成してもよい。
〔4.第4の実施形態〕
上述した例では、オブジェクトを分類するグループの一例であるブロブを用いる場合を示したが、オブジェクトを分類するグループはブロブのみに限らず、オブジェクトを分類する様々なグラフが用いられてもよい。例えば、ブロブ(第1グループ)以外にもオブジェクトを量子化する単位となる第2グループであるクラスタが用いられてもよい。
この点について、以下、第4の実施形態として説明する。第4の実施形態においては、情報処理システム1は、情報処理装置100、情報処理装置100Aまたは情報処理装置100Bに代えて、情報処理装置100Cを有する。なお、第1の実施形態、第2の実施形態及び第3の実施形態等において上述した内容と同様の点については適宜説明を省略する。
情報処理装置100Cは、複数のオブジェクトを分類する複数のブロブを示すブロブ情報(第1グループ情報)と、ブロブとは異なる分類となるグループであるクラスタを示すクラスタ情報(第2グループ情報)とを生成する。
〔4-1.情報処理〕
まず、図32を用いて、第4の実施形態に係る情報処理の概要を説明する。図32は、第4の実施形態に係る情報処理の一例を示す図である。なお、図32では、情報処理装置100Cがオブジェクトを複数のブロブに分類し、そのブロブを基にクラスタに分類する場合を示すが、クラスタに分類した後にブロブに分類してもよいが、この点については後述する。
まず、情報処理装置100Cは、複数のオブジェクトを複数のブロブに分類するブロブ情報を生成する(ステップS71)。図32の例では、情報処理装置100Cは、任意の方法により、複数のオブジェクトをブロブBL1~BL10等に分類するブロブ情報を生成する。情報処理装置100Cは、k-means等の任意のクラスタリングにより各ノードをブロブBL1~BL10のいずれかに分類してもよい。なお、情報処理装置100Cは、ブロブを生成可能であれば、どのような方法によりブロブを生成してもよい。例えば、情報処理装置100Cは、グラフ等のインデックスを用いて、ブロブを生成してもよい。例えば、情報処理装置100Cは、上述した第1方法~第4方法等に任意のいずれかの方法によりブロブBL1~BL10等を示す情報を生成してもよい。
なお、図32では、情報処理装置100Cは、空間情報SP41に示すように、ブロブ連結グラフであるグラフGR41を生成するが、グラフGR41を生成しなくてもよい。例えば、情報処理装置100Cは、グラフGR41を生成する場合、図23と同様の情報をもちいた処理によりグラフGR41を生成するが、図23での説明と同様であるため詳細な説明を省略する。
そして、情報処理装置100Cは、複数のブロブを複数のクラスタに分類するクラスタ情報を生成する(ステップS72)。例えば、情報処理装置100Cは、任意の方法により、ブロブBL1~BL10等の複数のブロブを分類するクラスタを示すクラスタ情報を生成する。情報処理装置100Cは、k-means等の任意のクラスタリングによりブロブBL1~BL10等の複数のクラスタのいずれかに分類してもよい。なお、情報処理装置100Cは、ブロブを生成可能であれば、どのような方法によりブロブを生成してもよい。例えば、情報処理装置100Cは、グラフ等のインデックスを用いて、ブロブを生成してもよい。
図32の例では、情報処理装置100Cは、ブロブBL1~BL10等のクラスタCL1~CL4等に分類するクラスタ情報を生成する。例えば、情報処理装置100Cは、ブロブBL1及びブロブBL7をクラスタCL1に分類する。すなわち、情報処理装置100Cは、ブロブBL1に属するオブジェクト、及びブロブBL7に属するオブジェクトをクラスタCL1に分類する。なお、図32及び図34では、ブロブの境界線がクラスタの境界線上にあるように図示したが、分割の方法によっては一致しない場合があり、また方法によっては空間が境界線で分割されるとも限らない。
また、情報処理装置100Cは、ブロブBL2及びブロブBL4をクラスタCL2に分類する。すなわち、情報処理装置100Cは、ブロブBL2に属するオブジェクト、及びブロブBL4に属するオブジェクトをクラスタCL2に分類する。
また、情報処理装置100Cは、ブロブBL3、ブロブBL8及びブロブBL10をクラスタCL3に分類する。すなわち、情報処理装置100Cは、ブロブBL3に属するオブジェクト、ブロブBL8に属するオブジェクト、及びブロブBL10に属するオブジェクトをクラスタCL3に分類する。
また、情報処理装置100Cは、ブロブBL5、ブロブBL6及びブロブBL9をクラスタCL4に分類する。すなわち、情報処理装置100Cは、ブロブBL5に属するオブジェクト、ブロブBL6に属するオブジェクト、及びブロブBL9に属するオブジェクトをクラスタCL4に分類する。
例えば、情報処理装置100Cは、クラスタ情報を用いて量子化に関する処理を実行する。情報処理装置100Cは、クラスタ情報を用いて複数のオブジェクトを対象とする量子化に関する処理を行う。例えば、情報処理装置100Cは、クラスタCL1~CL4のの各々に属するオブジェクトごとに量子化を行うが、この点については後述する。
上記のように、情報処理装置100Cは、データ検索の対象となる複数のオブジェクトを分類する複数のブロブを示すブロブ情報と、複数のブロブとは異なる分類となる複数のクラスタを示すクラスタ情報とを生成する。これにより、情報処理装置100Cは、複数のオブジェクトを分類する2種類のグループを生成することができ、オブジェクトを分類するグループを生成することができる。
〔4-1-1.他の処理例〕
なお、図32に示した処理は一例に過ぎず、情報処理装置100Cは、ブロブ情報及びクラスタ情報を生成可能であれば、どのような態様の処理により生成を行ってもよい。
例えば、情報処理装置100Cは、クラスタに分類するクラスタ情報を生成した後に、ブロブに分類するブロブ情報を生成してもよい。この場合、情報処理装置100Cは、複数のオブジェクトをクラスタに分類するクラスタリングにより、各オブジェクトを複数のクラスタのいずれかの分類するクラスタ情報を生成してもよい。例えば、情報処理装置100Cは、k-means等の任意のクラスタリングにより各オブジェクトをクラスタCL1~CL4のいずれかに分類してもよい。
そして、情報処理装置100Cは、クラスタCL1~CL4の少なくとも1つを分割し、二以上のブロブを生成することにより、ブロブを示すブロブ情報を生成してもよい。例えば、情報処理装置100Cは、各クラスタに属するオブジェクトをk-means等の任意のクラスタリングによってクラスタリングすることにより、各クラスタを分割しブロブを生成する。例えば、情報処理装置100Cは、クラスタCL1を2つのブロブに分割することにより、ブロブBL1及びブロブBL7を生成してもよい。例えば、情報処理装置100Cは、クラスタCL1に属しているオブジェクトをクラスタ数2でk-meansによりクラスタリングして、クラスタCL1を分割しブロブBL1及びブロブBL7を生成する。
例えば、情報処理装置100Cは、クラスタCL2を2つのブロブに分割することにより、ブロブBL2及びブロブBL4を生成してもよい。例えば、情報処理装置100Cは、クラスタCL3を3つのブロブに分割することにより、ブロブBL3、ブロブBL8及びブロブBL10を生成してもよい。例えば、情報処理装置100Cは、クラスタCL4を3つのブロブに分割することにより、ブロブBL5、ブロブBL6及びブロブBL9を生成してもよい。
〔4-2.情報処理装置の構成〕
次に、図33を用いて、第4の実施形態に係る情報処理装置100Cの構成について説明する。図33は、第4の実施形態に係る情報処理装置の構成例を示す図である。図33に示すように、情報処理装置100Cは、通信部110と、記憶部120Cと、制御部130Bとを有する。なお、情報処理装置100Cにおいて、情報処理装置100、情報処理装置100Aまたは情報処理装置100Bと同様の点は適宜説明を省略する。
(記憶部120C)
記憶部120Cは、例えば、RAM、フラッシュメモリ等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。第4の実施形態に係る記憶部120Cは、図33に示すように、オブジェクト情報記憶部121と、グラフ情報記憶部122と、量子化情報記憶部123と、コードブック情報記憶部124と、ブロブ情報記憶部125と、ブロブ連結グラフ情報記憶部126と、クラスタ情報記憶部127とを有する。
第4の実施形態に係るクラスタ情報記憶部127は、第2グループであるクラスタに関する情報を記憶する。クラスタ情報記憶部127は、量子化の単位となるクラスタに関する情報を記憶する。クラスタ情報記憶部127は、各クラスタを識別する識別情報(クラスタID等)に、そのクラスタに属する第1グループであるブロブを示す情報(ブロブID等)を対応付けて記憶してもよい。また、クラスタ情報記憶部127は、各クラスタを識別する識別情報(クラスタID等)に、そのクラスタに属するオブジェクトを示す情報(オブジェクトID等)を対応付けて記憶してもよい。また、クラスタ情報記憶部127は、各クラスタを識別する識別情報(クラスタID等)に、そのクラスタのセントロイド等の基点を特定するための情報(基点ID等)及びそのベクトル等を対応付けて記憶してもよい。
(制御部130C)
制御部130Cは、コントローラ(controller)であり、例えば、CPUやMPUやGPU等によって、情報処理装置100C内部の記憶装置に記憶されている各種プログラム(情報処理プログラムの一例に相当)がRAMを作業領域として実行されることにより実現される。また、制御部130Cは、コントローラであり、例えば、ASICやFPGA等の集積回路により実現される。
図33に示すように、制御部130Cは、取得部131と、生成部132Cと、検索処理部133Cと、提供部134とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部130Cの内部構成は、図33に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
第4の実施形態に係る取得部131は、データ検索の対象となる複数のオブジェクトを示すオブジェクト情報を取得する。取得部131は、複数のオブジェクトを検索対象とするインデックスを示すインデックス情報を取得する。
取得部131は、データ検索の対象となる複数のオブジェクトを分類する複数のブロブと、複数のブロブとは異なる分類となるグループであって、複数のオブジェクトのうち、複数のブロブにおいて同じブロブに属するオブジェクトを同じグループに分類するグループである複数のクラスタとを示す処理用情報を取得する。取得部131は、複数のオブジェクトを分類する第1数のブロブと、複数のオブジェクトを第1数よりも少ない第2数に分類するクラスタとを示す処理用情報を取得する。取得部131は、複数のブロブのうち二以上のブロブの各々に属するオブジェクト群が一のクラスタに分類された複数のクラスタを示す処理用情報を取得する。
取得部131は、複数のオブジェクトを対象とする検索処理における一括処理である第1処理を実行するために用いられる複数のブロブを示す処理用情報を取得する。取得部131は、複数のオブジェクトを対象とする量子化に関する処理である第2処理を行うために用いられる複数のクラスタを示す処理用情報を取得する。
取得部131は、複数のブロブの各々を識別する複数の第1識別情報と、複数のクラスタの各々を識別する複数の第2識別情報とを対応付けた処理用情報を取得する。取得部131は、一の第2識別情報が二以上の第1識別情報に対応付けられた処理用情報を取得する。
取得部131は、複数のオブジェクトの各々が属するブロブの第1識別情報に対応付けられた処理用情報を取得する。取得部131は、複数のオブジェクトの各々が量子化された量子化後オブジェクト情報が第1識別情報に対応付けられた処理用情報を取得する。取得部131は、直積量子化により、複数のオブジェクトの各々に対応するベクトルを分割した各部分ベクトルを量子化するベクトル量子化により生成された量子化後オブジェクト情報が、第1識別情報に対応付けられた処理用情報を取得する。取得部131は、量子化に対応する各セントロイドの各部分領域に対応する各部分セントロイドに基づいて生成された量子化後オブジェクト情報が、第1識別情報に対応付けられた処理用情報を取得する。取得部131は、量子化に対応する各セントロイドと、当該各セントロイドの各部分領域内に対応する各部分セントロイドと、により生成される残差ベクトルに基づいて生成された量子化後オブジェクト情報が、第1識別情報に対応付けられた処理用情報を取得する。
(生成部132C)
生成部132Cは、生成部132、生成部132Aまたは生成部132Bと同様に各種情報を生成する。
生成部132Cは、取得部131により取得されたオブジェクト情報に基づいて、複数のオブジェクトを分類する複数のブロブを示すブロブ情報を生成する。生成部132Cは、複数のブロブとは異なる分類となるグループであって、複数のオブジェクトのうち、複数のブロブにおいて同じブロブに属するオブジェクトを同じグループに分類するグループである複数のクラスタを示すクラスタ情報を生成する。
生成部132Cは、複数のオブジェクトを第1数のブロブに分類するブロブ情報と、複数のオブジェクトを第1数よりも少ない第2数のクラスタに分類するクラスタ情報とを生成する。生成部132Cは、複数のブロブのうち二以上のブロブの各々に属するオブジェクト群が一のクラスタに分類された複数のクラスタを示すクラスタ情報を生成する。
生成部132Cは、複数のオブジェクトを対象とする検索処理において一括処理を行うために用いられる複数のブロブを示すブロブ情報を生成する。生成部132Cは、複数のオブジェクトに関する距離の算出を一括して行うために用いられる複数のブロブを示すブロブ情報を生成する。生成部132Cは、検索処理で用いられる検索クエリとオブジェクトとの距離の算出を並列処理するために用いられる複数のブロブを示すブロブ情報を生成する。
生成部132Cは、複数のオブジェクトを対象とする量子化に関する処理を行うために用いられる複数のクラスタを示すクラスタ情報を生成する。生成部132Cは、量子化の単位となる複数のクラスタを示すクラスタ情報を生成する。生成部132Cは、複数のオブジェクトの各々に対応するベクトルを量子化するために用いられる複数のクラスタを示すクラスタ情報を生成する。
生成部132Cは、複数のブロブの分類後に、複数のクラスタの分類を行う。生成部132Cは、複数のオブジェクトをクラスタリングすることにより複数のブロブを示すブロブ情報を生成する。生成部132Cは、インデックス情報を用いて、複数のブロブを示すブロブ情報を生成する。生成部132Cは、ブロブを示すブロブ情報を用いて、複数のクラスタを示すクラスタ情報を生成する。生成部132Cは、複数のブロブをクラスタリングすることにより複数のクラスタを示すクラスタ情報を生成する。
生成部132Cは、複数のクラスタの分類後に、複数のブロブの分類を行う。生成部132Cは、複数のオブジェクトをクラスタリングすることにより複数のクラスタを示すクラスタ情報を生成する。生成部132Cは、クラスタを示すクラスタ情報を用いて、複数のブロブを示すブロブ情報を生成する。生成部132Cは、複数のクラスタのうち、少なくとも一のクラスタを分割し、二以上のブロブを生成することにより、複数のブロブを示すブロブ情報を生成する。生成部132Cは、各第2グループに属するオブジェクトをクラスタリングすることにより、各第2グループを二以上の第1グループに分割することにより、複数の第1グループを示す第1グループ情報を生成する。
(検索処理部133C)
検索処理部133Cは、ブロブに属するオブジェクトを対象とする第1処理、及びクラスタに属するオブジェクトを対象とする第2処理を実行する処理部として機能する。検索処理部133Cは、検索処理部133、検索処理部133Aまたは検索処理部133Bと同様に検索処理に関する各種処理を行う。検索処理部133Cは、生成部132Cにより生成された情報を用いた処理を行う。
検索処理部133Cは、取得部131により取得された処理用情報を用いて、ブロブに属するオブジェクトを対象とする第1処理と、クラスタに属するオブジェクトを対象とする第2処理とを実行する。検索処理部133Cは、一のクラスタに属するオブジェクト群を対象に第2処理を実行する。検索処理部133Cは、一のブロブに属するオブジェクト群を対象に第1処理を実行する。
検索処理部133Cは、一のブロブに属するオブジェクト群を対象に距離の算出を一括して行う第1処理を実行する。検索処理部133Cは、一のブロブに属するオブジェクト群の各々と、検索処理で用いられる検索クエリとの距離の算出の並列処理である第1処理を実行する。
検索処理部133Cは、一のクラスタに属するオブジェクト群を対象に第2処理を実行する。検索処理部133Cは、一のクラスタに属するオブジェクト群を対象に量子化である第2処理を実行する。検索処理部133Cは、一のクラスタに属するオブジェクト群の各々に対応するベクトルを量子化する第2処理を実行する。
検索処理部133Cは、一のクラスタに二以上のブロブが属する場合、当該二以上のブロブに属するオブジェクト群を対象として第2処理を実行する。検索処理部133Cは、一のクラスタに二以上のブロブが属する場合、当該二以上のブロブに属する全オブジェクトを対象として量子化を実行する。
検索処理部133Cは、処理用情報を参照して、第1処理と第2処理とを実行する。検索処理部133Cは、処理用情報を参照して処理対象となるオブジェクトを特定する。検索処理部133Cは、複数のオブジェクトを対象とする検索処理において、二以上の第1識別情報のうち、一の第1識別情報のブロブを対象として第1処理を行うとともに、一の第2識別情報のクラスタに関して検索処理において参照する参照用情報を生成した後、二以上の第1識別情報のうち、一の第1識別情報以外の他の第1識別情報の他のブロブを対象として第1処理を行い際は参照用情報を生成しない。
検索処理部133Cは、ブロブ連結グラフを用いた検索処理を行う。検索処理部133Cは、ブロブ連結グラフを用いて、検索クエリの近傍オブジェクトを検索する検索処理を行う。検索処理部133Cは、ブロブ連結グラフにおいてブロブ間を連結するエッジを辿ることにより、検索クエリの近傍オブジェクトを検索する検索処理を行う。
検索処理部133Cは、検索処理において、複数のブロブを示すブロブ情報を用いて、一のブロブに属するオブジェクトである対象オブジェクトと検索クエリとの距離を、ベクトル量子化された対象オブジェクトのベクトル情報を用いて算出する。検索処理部133Cは、対象オブジェクトと検索クエリとの距離の算出を並列化して一括で行う。検索処理部133Cは、情報処理装置の仕様に基づいて決定される一括処理数の対象オブジェクトと検索クエリとの距離の算出を並列処理する。
検索処理部133Cは、ブロブ連結グラフを用い、図27及び図28に示す処理により検索処理を行う。例えば、検索処理部133Cは、空間情報SP51に示すように、ブロブ間をエッジで連結するグラフGR41を用いて検索処理を行う。例えば、検索処理部133Cは、検索クエリQE3を対象として、ブロブ連結グラフであるグラフGR41を用いた図27及び図28に示すような検索処理を行うことにより、検索クエリQE3の検索結果を得る。例えば、検索処理部133Cは、ブロブ連結グラフを辿ることにより、処理対象となったブロブについて第1処理を実行する。
検索処理部133Cは、処理対象となったブロブが属するクラスタについて、参照用情報が未生成である場合、参照用情報を生成する。例えば、検索処理部133Cは、距離のルックアップテーブル(LUT)を参照用情報として生成する。例えば、検索処理部133Cは、検索処理において、クラスタ単位に距離のルックアップテーブルを生成する。すなわち、検索処理部133Cは、検索処理において、ブロブ単位ではなく、クラスタ単位で、距離のルックアップテーブルを生成する。これにより、情報処理装置100Cは、検索時間の増大を抑制することができる。
検索処理部133Cは、生成した参照用情報を用いて、処理対象となったブロブに属するオブジェクトについて一括して距離計算を実行する。例えば、検索処理部133Cは、処理対象となったブロブが属するクラスタについて、参照用情報が生成済みである場合、参照用情報を生成しない。そして、検索処理部133Cは、既に生成済みである参照用情報を用いて、処理対象となったブロブに属するオブジェクトについて一括して距離計算を実行する。
〔4-3.処理及び情報例〕
ここから、第4の実施形態における処理や処理に用いる情報等の例について説明する。
まず、図34を用いて量子化に関する概念について説明する。図34は、第4の実施形態に係る量子化に関する概念図である。
例えば、基点CL1は、クラスタCL1の量子化に用いられる基点を示す。この場合、基点CL1は、ブロブBL1及びブロブBL7を含むクラスタCL1のセントロイドを示す。また、例えば、基点CL2は、クラスタCL2の量子化に用いられる基点を示す。この場合、基点CL2は、ブロブBL2及びブロブBL4を含むクラスタCL2のセントロイドを示す。
例えば、基点CL3は、クラスタCL3の量子化に用いられる基点を示す。この場合、基点CL3は、ブロブBL3、ブロブBL8及びブロブBL10を含むクラスタCL3のセントロイドを示す。また、例えば、基点CL4は、クラスタCL4の量子化に用いられる基点を示す。この場合、基点CL4は、ブロブBL5、ブロブBL6及びブロブBL9を含むクラスタCL4のセントロイドを示す。
この場合、情報処理装置100Cは、4つのクラスタCL1~CL4の各々の中で残差ベクトルを求める。そして、情報処理装置100Cは、4つのクラスタCL1~CL4の各々の中で求めた残差ベクトルを用いて、量子化を行う。例えば、情報処理装置100Cは、クラスタCL1に属するオブジェクトについては基点CL1からの残差ベクトルを用いて、量子化を行う。残差ベクトルを用いた量子化についての詳細な説明は省略するが、情報処理装置100Cは、例えば特許文献3に示す技術などを適宜用いて、残差ベクトルを用いた量子化を行う。
なお、図34では図を用いて説明するために、ベクトルを部分ベクトルに分割していない状態を示すが、情報処理装置100Cは、直積量子化により分割された部分空間ごとに基点を導出し、導出した基点を基に残差ベクトルを用いて、量子化を行ってもよい。例えば、情報処理装置100Cは、ベクトルを4つの部分ベクトルに分割して直積量子化を行う場合、各部分ベクトルに対応する部分空間ごとに基点があり、その基点からの残差ベクトルを用いて、量子化を行う。
以下、図34を参照しつつ、情報処理装置100Cによるオブジェクトの量子化及び量子化による処理についての一例を説明する。図34では、クエリオブジェクト(検索クエリ)が検索クエリQE3である場合を一例として説明する。なお、以下で説明するオブジェクト(ベクトル)の量子化や直積量子化等において、特許文献3に開示された内容と同様の点については、詳細な説明を適宜省略する。
図34の空間情報SP52に示すように、検索クエリQE3と、ノードN7等のクラスタCL1に属する各オブジェクトに対応する各ベクトルとの距離は異なるが、情報処理装置100Cは、ノードN7等のクラスタCL1に属する各オブジェクトに対応するベクトルを用いない。この場合、検索クエリQE3と各ベクトルとの距離は、例えば検索クエリQE3とクラスタCL1の基点CL1に対応するベクトルとの距離とみなされることとなる。すなわち、クラスタCL1に属する各オブジェクトに対応するベクトルは、基点CL1に対応するベクトルに量子化される。具体的には、情報処理装置100Cは、基点CL1からの各ベクトルの差分である残差ベクトルを求めて、その残差ベクトルを直積量子化(さらに部分空間に分割して量子化)する。
例えば、情報処理装置100Cは、各クラスタをさらに複数の部分領域に分割し、複数の部分領域に対応する部分セントロイドをコードブックとして生成する。例えば、情報処理装置100Cは、各クラスタに関する残差ベクトルの情報に基づいて、各クラスタが分割された複数の部分領域に対応する部分セントロイドを生成してもよい。
例えば、情報処理装置100Cは、各クラスタに含まれるオブジェクトの数に基づいて、各クラスタの部分領域の数を決定してもよいし、所定の設定値に基づいて部分領域の数を決定してもよい。例えば、情報処理装置100Cは、クラスタリングに関する種々の従来技術を適宜用いて、部分領域を決定してもよい。例えば、情報処理装置100Cは、クラスタCL1の各部分領域に含まれるオブジェクトとクラスタCL1の基点CL1から残差ベクトルを算出し、その残差ベクトルから部分領域の部分セントロイドを生成する。例えば、情報処理装置100Cは、クラスタの基点と、各部分領域の部分セントロイドとの残差ベクトルの情報を用いる。例えば、情報処理装置100Cは、クラスタCL1の基点CL1と、その各部分領域の部分セントロイドとの残差ベクトの情報を用いる。例えば、情報処理装置100Cは、各オブジェクトに対応付けてそのオブジェクトが属する部分領域の部分セントロイドの情報を記憶する。
例えば、情報処理装置100Cは、上述した情報を用いることにより、各オブジェクトの位置をそのベクトルが属する部分領域のセントロイドの位置に量子化することができる。これにより、情報処理装置100Cは、検索クエリQE3と各オブジェクトとの距離を、検索クエリQE3と各オブジェクトが属する部分領域の部分セントロイドに対応するベクトルとの距離まで細部化することができる。
例えば、情報処理装置100Cは、各クラスタの基点のベクトルと、部分セントロイドに関する残差ベクトルとを示す情報とを用いる。これにより、情報処理装置100Cは、例えば検索クエリQE3に対して、部分セントロイドまでの距離を算出することができる。したがって、情報処理装置100Cは、例えば検索クエリQE3と各オブジェクトとの距離を、クラスタの基点よりもさらに近似した部分セントロイドまでの距離とすることができる。
なお、情報処理装置100Cは、各オブジェクトのベクトルを複数の部分ベクトルに分割して処理してもよい。すなわち、情報処理装置100Cは、いわゆる直積量子化に関する技術を用いて、処理を行ってもよい。この点については、上述した第1の実施形態等と同様であるため、重複する説明は適宜省略する。
例えば、図34の場合、情報処理装置100Cは、検索クエリQE3のベクトルを複数の部分ベクトル(「検索クエリQE3の部分ベクトル」ともいう)に分割する。この場合、空間情報SP52も複数の部分空間(「空間情報SP52の部分空間」ともいう)に分割される。例えば、情報処理装置100Cは、図1と同様に検索クエリQE3のベクトルを4分割してもよい。この場合、空間情報SP52も4つの部分空間に分割され、各クラスタが複数の部分空間に分割される。
例えば、情報処理装置100Cは、4つの部分空間において各オブジェクトが属する領域に対応する部分セントロイド(コードブック)を示す情報を、各オブジェクトに対応付けて記憶する。例えば、情報処理装置100Cは、各オブジェクトに対応する4つのコードブックと検索クエリQE3との距離を合計することにより、各オブジェクトと検索クエリQE3との距離を算出する。
次に、図35及び図36を用いて、転置インデックスの概要を説明する。図35は、第4の実施形態に係る転置インデックスの一例を示す図である。図36は、第4の実施形態に係る転置インデックスの具体例を示す図である。
まず、図35に示す転置インデックスIND1について説明する。図35に示す転置インデックスIND1は、「ブロブID」、「クラスタID」、「量子化オブジェクト数」、「量子化オブジェクト#1」、「量子化オブジェクト#2」、「量子化オブジェクト#3」、および「量子化オブジェクト#4」等といった項目が含まれる。なお、図35では、「量子化オブジェクト#1」~「量子化オブジェクト#4」までの4つを図示するが、転置インデックスIND1には、「量子化オブジェクト#5」、「量子化オブジェクト#6」等、各ブロブに属するオブジェクト数に対応する数の項目が含まれる。
「ブロブID」は、第1グループであるブロブを識別するための識別情報を示す。「クラスタID」は、第2グループであるクラスタを識別するための識別情報を示す。「量子化オブジェクト数」は、ブロブに属するオブジェクト数を示す。「量子化オブジェクト#1」~「量子化オブジェクト#4」は、量子化されたオブジェクトを示す。例えば、「量子化オブジェクト#1」~「量子化オブジェクト#4」には、オブジェクトが直積量子化され、各部分ベクトルに対応するコードブックを示す情報の一覧が記憶される。
図35の例では、ブロブID「1」であるブロブは、クラスタID「2」であるクラスタに属し、属するオブジェクト数が4つであることを示す。また、ブロブID「1」であるブロブについて、「量子化オブジェクト#1」には「4、2、8、10」が格納され、そのオブジェクトが4つの部分ベクトルで構成され、それぞれコードブック「4」、「2」、「8」、「10」で量子化されていることを示す。例えば、ブロブID「1」の「量子化オブジェクト#1」に対応するオブジェクトについては、4つ分割された部分ベクトルのうち、最初の部分ベクトルがコードブック「4」で量子化され、2番目の部分ベクトルがコードブック「2」で量子化され、3番目の部分ベクトルがコードブック「8」で量子化され、最後の部分ベクトルがコードブック「10」で量子化されることを示す。
なお、転置インデックスIND1は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、転置インデックスIND1は、各量子化オブジェクトを示す情報(オブジェクトID等)を各量子化オブジェクトに対応付けて記憶してもよい。
次に、図36に示す転置インデックスIND2について説明する。図36は、図32に等に示す例と対応する転置インデックスの具体例を示す。なお、転置インデックスIND1と同様の点については適宜説明を省略する。図36に示す転置インデックスIND2は、「ブロブID」、「クラスタID」、「量子化オブジェクト数」、「量子化オブジェクト#1」等といった項目が含まれる。なお、図36では、「量子化オブジェクト#1」のみを図示するが、転置インデックスIND1と同様に各ブロブに属するオブジェクト数に対応する数の項目が含まれる。
転置インデックスIND2では、図32に示す空間情報SP51と同様に、ブロブID「BL1」により識別されるブロブBL1は、クラスタID「CL1」であるクラスタCL1に属することを示す。また、ブロブBL1に属するオブジェクト数は、「NM1」であることを示す。なお、図36では「NM1」といった抽象的な符号で示すが、「量子化オブジェクト数」には、転置インデックスIND1と同様に具体的な数を示す値(例えば10や100等)が記憶される。
また、ブロブBL1は、「量子化オブジェクト#1」には「CD51、CD64、CD77、CD82」が格納され、そのオブジェクトが4つの部分ベクトルで構成され、それぞれコードブック「CD51」、「CD64」、「CD77」、「CD82」で量子化されていることを示す。
また、転置インデックスIND2では、図32に示す空間情報SP51と同様に、ブロブID「BL2」により識別されるブロブBL2は、クラスタID「CL2」であるクラスタCL2に属することを示す。また、転置インデックスIND2では、図32に示す空間情報SP51と同様に、ブロブID「BL7」により識別されるブロブBL7は、クラスタID「CL1」であるクラスタCL1に属することを示す。
なお、転置インデックスIND2は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、転置インデックスIND2は、各量子化オブジェクトを示す情報(オブジェクトID等)を各量子化オブジェクトに対応付けて記憶してもよい。このように、転置インデックスには、クラスタを識別する情報(クラスタID)が付与されており、情報処理装置100Cは、転置インデックスを用いて残差ベクトルを算出する。例えば、残差ベクトルはインデックスの生成および検索時に用いられるが、特許文献3等の従来技術における処理と同様であるため詳細な説明を適宜省略する。
〔4-4.情報処理のフロー〕
次に、図37及び図38を用いて、第4の実施形態に係る情報処理の手順について説明する。図37及び図38は、第4の実施形態に係る情報処理の一例を示すフローチャートである。
まず、図37について説明する。例えば、図37は、グループの生成処理の一例を示すフローチャートである。図37に示すように、情報処理装置100Cは、データ検索の対象となる複数のオブジェクトを示すオブジェクト情報を取得する(ステップS601)。例えば、情報処理装置100Cは、オブジェクト情報記憶部121から複数のオブジェクトを示すオブジェクト情報を取得する。
情報処理装置100Cは、オブジェクト情報に基づいて、複数のオブジェクトを分類する複数の第1グループを示す第1グループ情報を生成する(ステップS602)。例えば、情報処理装置100Cは、オブジェクト情報に基づいて、複数のオブジェクトを分類する複数のブロブを示すブロブ情報を生成する。
情報処理装置100Cは、複数の第1グループとは異なる分類となるグループであって、複数のオブジェクトのうち、複数の第1グループにおいて同じ第1グループに属するオブジェクトを同じグループに分類するグループである複数の第2グループを示す第2グループ情報を生成する(ステップS603)。例えば、情報処理装置100Cは、少なくとも1つのクラスタが2つ以上のブロブを含む複数のクラスタを示すクラスタ情報を生成する。なお、情報処理装置100Cは、ブロブと一対一に対応するクラスタを示すクラスタ情報を生成してもよい。
次に、図38について説明する。例えば、図38は、グループを用いた処理の一例を示すフローチャートである。図38に示すように、情報処理装置100Cは、データ検索の対象となる複数のオブジェクトを分類する複数の第1グループと、複数の第1グループとは異なる分類となるグループであって、複数のオブジェクトのうち、複数の第1グループにおいて同じ第1グループに属するオブジェクトを同じグループに分類するグループである複数の第2グループとを示す処理用情報を取得する(ステップS701)。例えば、情報処理装置100Cは、ブロブ情報記憶部125に記憶されたブロブ情報と、クラスタ情報記憶部127に記憶されたクラスタ情報とを処理用情報として取得する。例えば、情報処理装置100Cは、転置インデックスIND1または転置インデックスIND2を取得する。
情報処理装置100Cは、処理用情報を用いて、第1グループに属するオブジェクトを対象とする第1処理と、第2グループに属するオブジェクトを対象とする第2処理とを実行する(ステップS702)。例えば、情報処理装置100Cは、ブロブに属するオブジェクトを対象とする一括処理を実行し、クラスタに属するオブジェクトを対象とする量子化を実行する。
〔5.効果〕
上述してきたように、第4の実施形態に係る情報処理装置100Cは、取得部131と、生成部132Cとを有する。取得部131は、データ検索の対象となる複数のオブジェクトを示すオブジェクト情報を取得する。生成部132Cは、取得部131により取得されたオブジェクト情報に基づいて、複数のオブジェクトを分類する複数の第1グループを示す第1グループ情報と、複数の第1グループとは異なる分類となるグループであって、複数のオブジェクトのうち、複数の第1グループにおいて同じ第1グループに属するオブジェクトを同じグループに分類するグループである複数の第2グループを示す第2グループ情報とを生成する。
このように、第4の実施形態に係る情報処理装置100Cは、データ検索の対象となる複数のオブジェクトを分類する複数の第1グループを示す第1グループ情報と、複数の第1グループとは異なる分類となる複数の第2グループを示す第2グループ情報とを生成することで、複数のオブジェクトを分類する2種類のグループを生成することができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、複数のオブジェクトを第1数の第1グループに分類する第1グループ情報と、複数のオブジェクトを第1数よりも少ない第2数の第2グループに分類する第2グループ情報とを生成する。
このように、情報処理装置100Cは、各々グループの数が異なる2種類のグループを生成することができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、複数の第1グループのうち二以上の第1グループの各々に属するオブジェクト群が一の第2グループに分類された複数の第2グループを示す第2グループ情報を生成する。
このように、情報処理装置100Cは、包含関係のある2種類のグループを生成することができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、複数のオブジェクトを対象とする検索処理において一括処理を行うために用いられる複数の第1グループを示す第1グループ情報を生成する。
このように、情報処理装置100Cは、検索処理において一括処理を行うために用いられる第1グループを含む2種類のグループを生成することができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、複数のオブジェクトに関する距離の算出を一括して行うために用いられる複数の第1グループを示す第1グループ情報を生成する。
このように、情報処理装置100Cは、距離の算出を一括して行うために用いられる第1グループを含む2種類のグループを生成することができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、検索処理で用いられる検索クエリとオブジェクトとの距離の算出を並列処理するために用いられる複数の第1グループを示す第1グループ情報を生成する。
このように、情報処理装置100Cは、検索処理で用いられる検索クエリとオブジェクトとの距離の算出を並列処理するために用いられる第1グループを含む2種類のグループを生成することができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、複数のオブジェクトを対象とする量子化に関する処理を行うために用いられる複数の第2グループを示す第2グループ情報を生成する。
このように、情報処理装置100Cは、複数のオブジェクトを対象とする量子化に関する処理を行うために用いられる第2グループを含む2種類のグループを生成することができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、量子化の単位となる複数の第2グループを示す第2グループ情報を生成する。
このように、情報処理装置100Cは、量子化の単位となる第2グループを含む2種類のグループを生成することができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、複数のオブジェクトの各々に対応するベクトルを量子化するために用いられる複数の第2グループを示す第2グループ情報を生成する。
このように、情報処理装置100Cは、複数のオブジェクトの各々に対応するベクトルを量子化するために用いられる第2グループを含む2種類のグループを生成することができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、複数の第1グループの分類後に、複数の第2グループの分類を行う。
このように、情報処理装置100Cは、第1グループの分類、第2グループの分類の順でグループの情報を生成する処理を行うことで、オブジェクトを分類するグループを生成することができる。
生成部132Cは、複数のオブジェクトをクラスタリングすることにより複数の第1グループを示す第1グループ情報を生成する。
このように、情報処理装置100Cは、複数のオブジェクトをクラスタリングすることにより複数の第1グループの分類を行うことで、オブジェクトを分類するグループを生成することができる。
取得部131は、複数のオブジェクトを検索対象とするインデックスを示すインデックス情報を取得する。生成部132Cは、インデックス情報を用いて、複数の第1グループを示す第1グループ情報を生成する。
このように、情報処理装置100Cは、インデックスを用いて複数の第1グループの分類を行う、オブジェクトを分類するグループを生成することができる。
生成部132Cは、第1グループを示す第1グループ情報を用いて、複数の第2グループを示す第2グループ情報を生成する。
このように、情報処理装置100Cは、第1グループ情報を用いて、複数の第2グループを示す第2グループ情報を生成することで、第1グループの分類を基に第2グループの分類ができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、複数の第1グループをクラスタリングすることにより複数の第2グループを示す第2グループ情報を生成する。
このように、情報処理装置100Cは、第1グループをクラスタリングして複数の第2グループを示す第2グループ情報を生成することで、第1グループの分類を基に第2グループの分類ができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、複数の第2グループの分類後に、複数の第1グループの分類を行う。
このように、情報処理装置100Cは、第2グループの分類、第1グループの分類の順でグループの情報を生成する処理を行うことで、オブジェクトを分類するグループを生成することができる。
生成部132Cは、複数のオブジェクトをクラスタリングすることにより複数の第2グループを示す第2グループ情報を生成する。
このように、情報処理装置100Cは、複数のオブジェクトをクラスタリングすることにより複数の第2グループの分類を行うことで、オブジェクトを分類するグループを生成することができる。
生成部132Cは、第2グループを示す第2グループ情報を用いて、複数の第1グループを示す第1グループ情報を生成する。
このように、情報処理装置100Cは、第2グループ情報を用いて、複数の第1グループを示す第1グループ情報を生成することで、第2グループの分類を基に第1グループの分類ができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、複数の第2グループのうち、少なくとも一の第2グループを分割し、二以上の第1グループを生成することにより、複数の第1グループを示す第1グループ情報を生成する。
このように、情報処理装置100Cは、第2グループを分割して複数の第1グループを示す第1グループ情報を生成することで、第2グループの分類を基に第1グループの分類ができ、オブジェクトを分類するグループを生成することができる。
生成部132Cは、各第2グループに属するオブジェクトをクラスタリングすることにより、各第2グループを二以上の第1グループに分割することにより、複数の第1グループを示す第1グループ情報を生成する。
このように、情報処理装置100Cは、各第2グループに属するオブジェクトをクラスタリングすることにより、各第2グループを二以上の第1グループに分割して複数の第1グループを示す第1グループ情報を生成することで、第2グループの分類を基に第1グループの分類ができ、オブジェクトを分類するグループを生成することができる。
〔6.ハードウェア構成〕
上述してきた各実施形態に係る情報処理装置100、100A、100B、100Cは、例えば図39に示すような構成のコンピュータ1000によって実現される。図39は、情報処理装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。コンピュータ1000は、CPU1100、RAM1200、ROM(Read Only Memory)1300、HDD(Hard Disk Drive)1400、通信インターフェイス(I/F)1500、入出力インターフェイス(I/F)1600、及びメディアインターフェイス(I/F)1700を有する。
CPU1100は、ROM1300またはHDD1400に格納されたプログラムに基づいて動作し、各部の制御を行う。ROM1300は、コンピュータ1000の起動時にCPU1100によって実行されるブートプログラムや、コンピュータ1000のハードウェアに依存するプログラム等を格納する。
HDD1400は、CPU1100によって実行されるプログラム、及び、かかるプログラムによって使用されるデータ等を格納する。通信インターフェイス1500は、ネットワークNを介して他の機器からデータを受信してCPU1100へ送り、CPU1100が生成したデータをネットワークNを介して他の機器へ送信する。
CPU1100は、入出力インターフェイス1600を介して、ディスプレイやプリンタ等の出力装置、及び、キーボードやマウス等の入力装置を制御する。CPU1100は、入出力インターフェイス1600を介して、入力装置からデータを取得する。また、CPU1100は、生成したデータを入出力インターフェイス1600を介して出力装置へ出力する。
メディアインターフェイス1700は、記録媒体1800に格納されたプログラムまたはデータを読み取り、RAM1200を介してCPU1100に提供する。CPU1100は、かかるプログラムを、メディアインターフェイス1700を介して記録媒体1800からRAM1200上にロードし、ロードしたプログラムを実行する。記録媒体1800は、例えばDVD(Digital Versatile Disc)、PD(Phase change rewritable Disk)等の光学記録媒体、MO(Magneto-Optical disk)等の光磁気記録媒体、テープ媒体、磁気記録媒体、または半導体メモリ等である。
例えば、コンピュータ1000が第1の実施形態に係る情報処理装置100として機能する場合、コンピュータ1000のCPU1100は、RAM1200上にロードされたプログラムを実行することにより、制御部130の機能を実現する。コンピュータ1000のCPU1100は、これらのプログラムを記録媒体1800から読み取って実行するが、他の例として、他の装置からネットワークNを介してこれらのプログラムを取得してもよい。
以上、本願の実施形態のいくつかを図面に基づいて詳細に説明したが、これらは例示であり、発明の開示の行に記載の態様を始めとして、当業者の知識に基づいて種々の変形、改良を施した他の形態で本発明を実施することが可能である。
〔7.その他〕
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、各図に示した各種情報は、図示した情報に限られない。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
また、上述してきた各実施形態に記載された各処理は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
また、上述してきた「部(section、module、unit)」は、「手段」や「回路」などに読み替えることができる。例えば、取得部は、取得手段や取得回路に読み替えることができる。