以下に、本願に係る情報処理装置、情報処理方法、及び情報処理プログラムを実施するための形態(以下、「実施形態」と呼ぶ)について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る情報処理装置、情報処理方法、及び情報処理プログラムが限定されるものではない。また、以下の各実施形態において同一の部位には同一の符号を付し、重複する説明は省略される。
(実施形態)
〔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に戻って処理を繰り返す。
〔3.効果〕
上述してきたように、第2の実施形態または変形例に係る情報処理装置100Aは、取得部131と、検索処理部133Aとを有する。取得部131は、データ検索の対象となる複数のオブジェクトに対する検索クエリを取得する。検索処理部133Aは、複数のオブジェクトの各々に対応するノード群を対象として、検索クエリの近傍のノードを検索する検索処理において、複数のオブジェクトを分類した複数のグループ(実施形態では「ブロブ」。以下同様)の情報を用いて、一のグループに属する複数のノードと検索クエリとの距離を、ベクトル量子化された複数のノードのベクトル情報を用いて算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、複数のオブジェクトを分類した複数のグループの情報を用いて、一のグループに属する複数のノードを対象として、ベクトル量子化された情報を用いて行うことにより、複数のノードを対象について計算負荷を低減することができる。したがって、情報処理装置100Aは、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、複数のノードと検索クエリとの距離の算出を並列化して一括で行う。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、複数のノードについて、検索クエリとの距離の算出を並列化して一括で行うことにより、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、情報処理装置100Aの仕様に基づいて決定される一括処理数の複数のノードと検索クエリとの距離の算出を並列処理する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、情報処理装置100Aが一括して処理可能な数の複数のノードについて、検索クエリとの距離の算出を並列化して一括で行うことにより、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、処理対象となるノードが属する一のグループに属する複数のノードと検索クエリとの距離を算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、処理対象となるノードが属する一のグループに属する複数のノードを対象として、ベクトル量子化された情報を用いて行うことにより、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、複数のノードがエッジにより連結されたグラフを用いて、検索クエリの近傍のノードを検索する検索処理において、複数のノードと検索クエリとの距離を算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、検索クエリの近傍のノードを検索する検索処理において、複数のノードと検索クエリとの距離を算出することにより、グラフを用いた効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、検索処理において処理対象となる対象ノードからのエッジが連結された接続ノードが属する一のグループに属する複数のノードと検索クエリとの距離を算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、対象ノードから辿ることができるノードが属する一のグループに属する複数のノードを対象として、ベクトル量子化された情報を用いて行うことにより、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、対象ノードが属するグループ以外の一のグループに属する複数のノードと検索クエリとの距離を算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、対象ノードから辿ることができるノードが属する一のグループに属する複数のノードを対象として、ベクトル量子化された情報を用いて行うことにより、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、複数のノードの各々から、複数のノードの各々が属するグループ以外の他のグループへ連結されたグループグラフを用いて、検索クエリの近傍のノードを検索する検索処理において、複数のノードと検索クエリとの距離を算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、ノードからグループへ連結されたグループグラフ(実施形態では「ブロブ用グラフ」)を用いて検索処理を行うことにより、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、複数のノードがエッジにより連結された変換前のグラフにおいて、複数のノードのうち一のノードからエッジが連結されたノードが属するグループであって、一のノードが属するグループ以外のグループへ、一のノードからエッジを連結することにより生成された変換後のグラフであるグループグラフを用いて、検索クエリの近傍のノードを検索する検索処理において、複数のノードと検索クエリとの距離を算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、ノード間がエッジで連結されたグラフから生成されたグループグラフを用いて検索処理を行うことにより、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、検索処理において処理対象となる対象ノードからのエッジが連結されたグループである一のグループに属する複数のノードと検索クエリとの距離を算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、対象ノードからのエッジが連結されたグループである一のグループに属する複数のノードを対象として、ベクトル量子化された情報を用いて行うことにより、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、既に処理対象となったグループである処理済みグループを示す情報を用いて、一のグループを処理対象とするかを判定する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、ノードが重複して距離算出の対象となることを抑制することができるため、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、一のグループが処理済みグループである場合、一のグループを処理対象としないと判定する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、ノードが重複して距離算出の対象となることを抑制することができるため、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、検索処理において処理対象となったノードのうち、所定のノードを対象として、ベクトル量子化がされた距離である第1距離とは異なり、ベクトル量子化がされていない第2距離を算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、ベクトル量子化された情報を用いて検索処理を行いつつ、所定のノードについてはベクトル量子化されていない距離を算出することにより、検索の精度を保ちつつ、検索処理時間の増大を抑制することができる。したがって、情報処理装置100Aは、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、検索処理において検索クエリの近傍のノードとして抽出するノードの第1数よりも多い数である第2数のノードを近傍候補ノードとして抽出し、近傍候補ノードを対象として第2距離を算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、検索結果とするノード数よりも多いノードを候補として抽出し、それらの候補のベクトル量子化されていない距離を算出することにより、検索の精度を保ちつつ、検索処理時間の増大を抑制することができる。したがって情報処理装置100Aは、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、近傍候補ノードのうち、第2距離が短い方から第1数のノードを検索クエリの近傍のノードとして抽出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、候補のうちベクトル量子化されていない距離が短い方から検索結果とする数だけのノードを近傍のノードとすることにより、正確に距離計算されたノードを近傍のノードとすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、第1距離が所定の閾値以内であるノードを対象として第2距離を算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、ベクトル量子化された距離が閾値以内であるノードのみを対象として、ベクトル量子化されていない距離を算出することにより、検索の精度を保ちつつ、検索処理時間の増大を抑制することができる。したがって、情報処理装置100Aは、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、近傍のノードとして抽出する対象範囲を示す検索範囲内のノードを対象として第2距離を算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、ベクトル量子化された距離が検索範囲内のノードのみを対象として、ベクトル量子化されていない距離を算出することにより、検索の精度を保ちつつ、検索処理時間の増大を抑制することができる。したがって、情報処理装置100Aは、効率的な検索処理を可能にすることができる。
また、第2の実施形態または変形例に係る情報処理装置100Aにおいて、検索処理部133Aは、検索処理の対象範囲を示す探索範囲内のノードを対象として第2距離を算出する。
このように、第2の実施形態または変形例に係る情報処理装置100Aは、ベクトル量子化された距離が探索範囲内のノードのみを対象として、ベクトル量子化されていない距離を算出することにより、検索の精度を保ちつつ、検索処理時間の増大を抑制することができる。したがって、情報処理装置100Aは、効率的な検索処理を可能にすることができる。
〔4.ハードウェア構成〕
上述してきた各実施形態に係る情報処理装置100、100Aは、例えば図20に示すような構成のコンピュータ1000によって実現される。図20は、情報処理装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。コンピュータ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を介してこれらのプログラムを取得してもよい。
以上、本願の実施形態のいくつかを図面に基づいて詳細に説明したが、これらは例示であり、発明の開示の行に記載の態様を始めとして、当業者の知識に基づいて種々の変形、改良を施した他の形態で本発明を実施することが可能である。
〔5.その他〕
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、各図に示した各種情報は、図示した情報に限られない。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
また、上述してきた各実施形態に記載された各処理は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
また、上述してきた「部(section、module、unit)」は、「手段」や「回路」などに読み替えることができる。例えば、取得部は、取得手段や取得回路に読み替えることができる。