以下に、本願に係る生成装置、生成方法、及び生成プログラムを実施するための形態(以下、「実施形態」と呼ぶ)について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る生成装置、生成方法、及び生成プログラムが限定されるものではない。また、以下の各実施形態において同一の部位には同一の符号を付し、重複する説明は省略される。
(実施形態)
〔1.生成処理〕
図1を用いて、実施形態に係る生成処理の一例について説明する。図1は、実施形態に係る生成処理の一例を示す図である。図1では、生成装置100(図3参照)が第1セントロイドに対応付けられたベクトルの数に応じて、複数の第2セントロイドを生成する場合を示す。すなわち、図1では、生成装置100が第1セントロイドに対応付けられたベクトル群を分割して対応付けるための複数の第2セントロイドを生成する場合を示す。なお、対象とする情報は、ベクトルとして表現可能であれば、どのような情報であってもよい。なお、以下では、画像情報を対象としたベクトル情報について説明するが、ベクトル情報の対象は、動画情報や音声情報等の他の対象であってもよい。
なお、セントロイドについての詳細は後述するが、第1セントロイドや第2セントロイドは、相対的な概念であって、第1セントロイドは対応付けられたベクトル群が分割される対象となるセントロイドを示し、第2セントロイドは第1セントロイドに対応付けられたベクトル群を分割して対応付けられるセントロイドを示す。すなわち、一のセントロイドに対しては第2セントロイドであるセントロイドが、他のセントロイドに対しては第1セントロイドとなる場合がある。また、以下では、第1セントロイドから生成された第2セントロイドに対応付けられたベクトル群をさらに分割する場合、分割したベクトル(対象ベクトル)が対応付けられるセントロイドを第3セントロイドと称する場合がある。なお、この場合、第2セントロイドを第1セントロイドとして、捉えた場合、第3セントロイドは、第2セントロイドとなる。なお、以下では、第1〜第3セントロイドを単に「セントロイド」と記載する場合がある。
図1の例では、数百万〜数億単位の画像情報に対応するベクトル情報を対象にするが、図面においてはその一部のみを図示する。また、以下では、例えば、画像情報に対応するベクトルデータ自体を示す場合、「ベクトルデータ」と記載し、画像情報に対応する各ベクトルデータを識別する情報を示す場合、「ベクトル識別情報」や「ベクトルID」と記載する。すなわち、ここでいう、ベクトルデータは、N次元の高次元ベクトルを意味し、ベクトル識別情報は、ベクトルID等の各ベクトルを識別する情報を意味する。例えば、図1に示す例において、ベクトル識別情報V112と記載した場合、ベクトルID「V112」を意味する。また、例えば、ベクトルV112と記載した場合、ベクトルID「V112」により識別されるベクトルを意味する。また、ベクトルデータであるかベクトル識別情報であるかを特に区別せずに説明する場合は「ベクトル」や「ベクトル情報」と記載する。
また、以下では、「ベクトルV*(*は任意の数値)」と記載した場合、そのベクトルはベクトルID「V*」により識別されるベクトルであることを示す。例えば、「ベクトルV1」と記載した場合、そのベクトルはベクトルID「V1」により識別されるベクトルである。また、「セントロイドC*(*は任意の数値)」と記載した場合、そのセントロイドはセントロイドID「C*」により識別されるセントロイドであることを示す。例えば、「セントロイドC4」と記載した場合、そのセントロイドはセントロイドID「C4」により識別されるセントロイド(ベクトル)である。
まず、生成装置100は、セントロイドに対応付けられるベクトルとの対応付けを示す対応情報を取得する(ステップS11)。図1の例では、生成装置100が画像情報に各々対応するベクトル情報を用いて、対応付けを示す対応情報を生成する場合を示す。例えば、生成装置100は、情報提供装置50等の外部の情報処理装置から画像情報に各々対応するベクトル情報を取得する。図1の例では、生成装置100は、空間情報GR11等に示すようにベクトル識別情報V3〜V1100等により各々識別される複数のベクトル情報を取得する。例えば、生成装置100は、ベクトル識別情報V3〜V1100等を含む多数のベクトル情報を取得する。
図1に示す例においては、取得した各ベクトル情報を「○」にベクトル識別情報を付すことにより表現する。例えば、ベクトルID「V55」により識別されるベクトルは、空間情報GR11中の右下の「○」点として表現する。例えば、図1に示す例において、各ベクトルデータは、N次元の実数値ベクトルである。また、図1や図9等に示す空間情報GR11−1〜GR11−4は、空間情報の一部を模式的に示す図であり、空間情報GR11−1〜GR11−4は、生成処理により生成される情報に対応する空間情報である。また、以下では、空間情報GR11−1〜GR11−4について、特に区別なく説明する場合には、空間情報GR11と記載する。
なお、図1中の空間情報GR11は、ユークリッド空間であってもよい。また、図1に示す空間情報GR11は、各ベクトル間の距離等の説明のための概念的な図である。多次元空間となる。なお、例えば、図1に示す空間情報GR11は、平面上に図示するため2次元の態様にて図示されるが、例えば100次元や1000次元等の多次元空間であるものとする。
本実施形態においては、空間情報GR11における各ベクトルの距離を対応する各画像間の類似度とする。ここで、図1に示す例においては、空間情報GR11における各ベクトル間の距離が小さい画像同士の類似度が高く、空間情報GR11における各ベクトル間の距離が大きい画像同士の類似度が低い。例えば、図1中の空間情報GR11において、ベクトルID「V9」により識別されるベクトル情報と、ベクトルID「V34」により識別されるベクトル情報とは近接している、すなわち距離が小さい。そのため、ベクトルID「V9」により識別されるベクトル情報に対応する画像と、ベクトルID「V34」により識別されるベクトル情報に対応する画像とは類似度が高いことを示す。また、例えば、図1中の空間情報GR11において、ベクトルID「V9」により識別されるベクトル情報と、ベクトルID「V55」により識別されるベクトル情報とは遠隔にある、すなわち距離が大きい。そのため、ベクトルID「V9」により識別されるベクトル情報に対応する画像と、ベクトルID「V55」により識別されるベクトル情報に対応する画像とは類似度が低いことを示す。なお、類似度を示す指標は、本願の生成処理に適用可能であれば、どのような指標であってもよく、距離や向き等を対象とする指標であってもよい。例えば、類似度を示す指標は、本願の生成処理に適用可能であれば、ユークリッド距離やマハラノビス距離やコサイン距離等の種々の指標が用いられてもよい。
図1の例では、生成装置100は、所定のクラスタリング手法により、複数のベクトルをクラスタリングする。例えば、生成装置100は、所定のクラスタリング手法により、セントロイドに対応付けられるベクトルの数の差が均一になるように複数のベクトルをクラスタリングする。例えば、生成装置100は、所定のクラスタリング手法により、セントロイドに対応付けられるベクトルの数の差が所定値以内になるように複数のベクトルをクラスタリングする。k−means法等の種々の従来技術を適宜用いて、複数のベクトルをクラスタリングしてもよい。例えば、生成装置100は、所定のクラスタ数を設定し、各クラスタの分類されるベクトルの数を制限した制約付きクラスタリングにより、セントロイドに対応付けられるベクトルの数の差が所定値以内になるように複数のベクトルをクラスタリングしてもよい。
このように、生成装置100は、各セントロイドに対応付けられるベクトルの数の差が所定値以内になるような複数のセントロイド情報を生成する。例えば、生成装置100は、各セントロイドに対応付けられるベクトルの数が均等になるような複数のセントロイド情報を生成する。以下では、この点を説明するために、クラスタ数は100個、すなわち生成されるセントロイドはセントロイドC1〜C11等を含む100個のセントロイドであり、セントロイドC1〜C11等の各々に対応する領域AR1〜AR11等に含まれるベクトルの数は25(個)であるものとする。なお、図1の空間情報GR11においては、セントロイドやベクトルの一部のみを図示するものとする。また、セントロイドの個数は、ベクトルの数に基づいて選択(決定)されてもよいし、所定の設定値に基づいて選択(決定)されてもよい。
また、上記の生成方法は一例であり、生成装置100は、各セントロイドに対応付けられるベクトルの数の差が所定値以内になるように複数のセントロイド情報を生成可能であれば、どのような情報や技術を用いてセントロイド情報を生成してもよい。例えば、生成装置100は、種々の従来技術等を適宜用いたり組み合わせたりして、各セントロイドに対応付けられるベクトルの数が均等になるような複数のセントロイド情報を生成してもよい。
例えば、生成装置100は、ランダムサンプリングを行うことによりベクトル識別情報の数の差が所定値以内になるような複数のセントロイド情報を生成してもよい。例えば、生成装置100は、ランダムサンプリングを行ってセントロイドを選択し、選択されたセントロイドに基づいて各ベクトルを対応付けることにより、各セントロイドに対応付けられるベクトルの数の差が所定値以内になるような複数のセントロイド情報を生成してもよい。なお、生成装置100は、第2セントロイドの生成を行う前のクラスタリングの処理については、各セントロイドに対応付けられるベクトルの数の差が均一になれば、どのような手法により複数のセントロイド情報を生成してもよい。例えば、生成装置100は、LSH(Locality Sensitive Hashing)等のハッシュに関する従来技術を用いて、各セントロイドに対応付けられるベクトルの数の差が均一になるように複数のセントロイド情報を生成してもよい。この場合、例えば、生成装置100は、LSH等により算出される各ベクトルのハッシュ値に基づいて、各ベクトルをクラスタ(グループ)に分割し、ハッシュ値に基づいてベクトルが分割されたクラスタごとにセントロイド情報を生成してもよい。また、例えば、生成装置100は、非特許文献1に開示されるようなEqual frequency binningの技術等の種々の従来技術を適宜用いて、各セントロイドに対応付けられるベクトルの数が均等になるような複数のセントロイド情報を生成してもよい。
図1の例では、生成装置100は、図1中の空間情報GR11に示すように、ベクトル識別情報C1、C2、C3、C4、C5、C6、C7、C8、C9、C10、C11をセントロイドとするセントロイド情報を生成する。図1中では、各セントロイドに対応する領域AR1〜AR11等の各々に5個のベクトルを図示するが、領域AR1〜AR11等の各々には99個のベクトルが位置するものとする。このように、生成装置100は、セントロイドとなるベクトル識別情報C1、C2、C3、C4、C5、C6、C7、C8、C9、C10、C11の各々に対応付けられるベクトルが均等になるように複数のセントロイド情報を生成してもよい。
なお、図1中の空間情報GR11に示す境界LNは、どのベクトルがどのセントロイドに対応付けられるかを示すための仮想的な線である。例えば、領域AR2を囲む境界LN内に位置するベクトル(ベクトルV33、V66等)は、セントロイドC2に対応付けられることを示す。図1中の例では、生成装置100は、境界LNにより空間情報GR11を領域AR1〜AR11等のように分割する。例えば、図1中の空間情報GR11における領域AR1には、ベクトル識別情報V4、V25、V32、V41、V87等の各々により識別されるベクトル等が含まれる。図1の例では、ベクトル識別情報V4、V25、V32、V41、V87等の各々により識別されるベクトルは、セントロイドC1に対応付けられることを示す。すなわち、生成装置100は、セントロイドC1にベクトル識別情報V4、V25、V32、V41、V87等を対応付ける。例えば、セントロイドC1に対応する画像がある場合、ベクトル識別情報V4、V25、V32、V41、V87等の各々により識別されるベクトルに対応する画像は、各セントロイドのうち、セントロイドC1により識別されるセントロイドに対応する画像に類似していることを示す。
図1の例では、生成装置100は、セントロイド情報記憶部122−1に示すような複数のセントロイド情報を生成する。例えば、生成装置100は、空間情報GR11中の領域AR1に対応するセントロイドC1とそのベクトル情報を含むセントロイド情報をセントロイド情報記憶部122−1に格納する。具体的には、生成装置100は、セントロイドID「C1」と、空間情報GR11中の領域AR1のセントロイドの位置に対応するベクトル情報とを組み合わせたセントロイド情報を生成し、セントロイド情報記憶部122−1に格納する。なお、領域に対応するセントロイドの位置は、領域の中心であってもよい。例えば、領域に対応するセントロイドの位置は、領域の重心や質量中心であってもよい。図1の例では、生成装置100は、セントロイドC1のベクトルデータ「10,24,54,2・・・」をセントロイド情報記憶部122−1に格納する。
例えば、生成装置100は、空間情報GR11中の領域AR2に対応するセントロイドを識別するセントロイドIDやセントロイドに対応するベクトル情報を含むセントロイド情報としてセントロイド情報記憶部122−1に格納する。具体的には、生成装置100は、セントロイドID「C2」と、セントロイドC2に対応するベクトルデータであって、「22,48,5,63・・・」となるN次元のベクトル情報とを組み合わせたセントロイド情報を生成し、セントロイド情報記憶部122−1に格納する。
このように、図1では、セントロイド情報の更新に応じて、セントロイド情報記憶部122をセントロイド情報記憶部122−1、122−2として説明する。すなわち、図1では、セントロイド情報記憶部122−1から、セントロイド情報記憶部122−2に更新されることを示す。また、セントロイド情報記憶部122−1、122−2は同一のセントロイド情報記憶部122である。また、以下では、セントロイド情報記憶部122−1、122−2について、特に区別することなく説明する場合には、セントロイド情報記憶部122と記載する。
そして、生成装置100は、各セントロイドに対応付けられたベクトルに基づいて第2インデックス情報を生成する。例えば、生成装置100は、各セントロイドに対応する領域AR1〜AR11等の各々に含まれるベクトルを識別する情報をセントロイドIDに対応付けた第2インデックス情報を生成する。
例えば、生成装置100は、セントロイドC1に対応付けてベクトル識別情報V4、V25、V32、V41、V87等を第2インデックス情報記憶部123−1に格納する。例えば、生成装置100は、セントロイドC2に対応付けてベクトル識別情報ベクトルV33、V66、V81、V112、V971等を第2インデックス情報記憶部123−1に格納する。
以下では、第2インデックスの更新に応じて、第2インデックス情報記憶部123を第2インデックス情報記憶部123−1、123−2として説明する。すなわち、図1では、第2インデックス情報記憶部123−1から、第2インデックス情報記憶部123−2に更新されることを示す。また、第2インデックス情報記憶部123−1、123−2は同一の第2インデックス情報記憶部123である。また、以下では、第2インデックス情報記憶部123−1、123−2について、特に区別することなく説明する場合には、第2インデックス情報記憶部123と記載する。
このように、生成装置100は、セントロイドにベクトルを識別する情報が対応付けられた、いわゆる転置インデックス情報を生成することにより、セントロイドが特定された場合に類似するベクトルの検索を高速化することができる。なお、類似するベクトルの検索時には近傍の複数のセントロイドを特定しても良い。
また、生成装置100は、図1の空間情報GR11−1に示すようにクラスタリングされたベクトル情報を、外部の情報処理装置から取得してもよい。例えば、生成装置100は、図1中のセントロイド情報記憶部122−1や第2インデックス情報記憶部123−1に示すような情報を、外部の情報処理装置から取得してもよい。
ここから、ベクトルが増加した場合について説明する。例えば、生成装置100は、1つの第1セントロイドに対応付けられたベクトルの数が所定の閾値に達した場合、所定の数の第2セントロイドを新たに生成し、その第2セントロイドに第1セントロイドに対応付けられたベクトル群を分割して対応付ける。図1の例では、生成装置100は、1つの第1セントロイドに対応付けられたベクトル(対象ベクトル)の数が100に達した場合、4つの第2セントロイドを生成し、対象ベクトルが対応付けられるセントロイドを4つの第2セントロイドに分割する場合を示す。すなわち、図1の例では、生成装置100は、1つの第1セントロイドに対応付けられたベクトル(対象ベクトル)の数が100に達した場合、各セントロイドに対応付けられるベクトルの設定数「25」になるように、100個の対象ベクトルが4つの第2セントロイドに平均的に約25個ずつ対応付けられるように分割する場合を示す。すなわち、生成装置100は、対象ベクトル数「100」を設定数「25」で除算した数「4」に基づいて、4つの第2セントロイドを生成する。なお、4つに限らず、生成装置100は、対象ベクトル数や設定数等に基づいて、適宜の数(2以上)の第2セントロイドを生成してもよい。
図1の例では、生成装置100は、ベクトルの増加を示す情報を取得する(ステップS12)。例えば、生成装置100は、情報提供装置50に追加された画像に対応するベクトル情報を取得する。図1の例では、情報提供装置50に75個の画像が新たに追加されたものとする。例えば、生成装置100は、75個の画像の各々に対応するベクトル識別情報V5001〜V5075を取得する。
なお、図1の例では、説明を簡単にするために、追加されたベクトルV5001〜V5075の全てが、領域AR2内に位置する、すなわちセントロイドC2に近接して位置するベクトルであるものとする。そのため、図1の例では、生成装置100は、追加されたベクトルV5001〜V5075の全てをセントロイドC2に対応付ける。
これにより、セントロイドC2には、ベクトル識別情報V33、V66、V81、V112、V971、V5001〜V5075等の100個のベクトルが対応付けられる。したがって、図1の例では、空間情報GR11−2に示すように、領域AR2内にベクトル識別情報V33、V66、V81、V112、V971、V5001〜V5075等の100個のベクトルが位置することとなる。なお、図1中の空間情報GR11−2には、100個のベクトルのうち、一部のみを図示する。
図1の例では、セントロイドC2に100個のベクトルが対応付けられたため、生成装置100は、閾値に達したと判定し、セントロイドを生成する(ステップS13)。例えば、生成装置100は、第1セントロイドであるセントロイドC2に対応する4つの第2セントロイドを生成する。例えば、生成装置100は、セントロイドC2に対応付けられた100個のベクトルを4分割するように、クラスタリングを行うことにより、4つの第2セントロイドであるセントロイドC2−1〜C2−4を生成する。例えば、生成装置100は、領域AR2を4つの領域に分割するようにクラスタリングを行うことにより、4つの第2セントロイドであるセントロイドC2−1〜C2−4を生成する。
図1の例では、生成装置100は、所定のクラスタリング手法により、領域AR2内の100個のベクトルをクラスタリングする。例えば、生成装置100は、所定のクラスタリング手法により、4つの第2セントロイドに対応付けられるベクトルの数の差が均一になるように複数のベクトルをクラスタリングする。例えば、生成装置100は、4つの第2セントロイドに対応付けられるベクトルの数の差が均一になるように複数のベクトルをクラスタリングする。なお、セントロイドC2−1〜C2−4に対応付けられるベクトルの数は、完全に均一(25個)である場合に限らず、25個から所定の範囲内(20〜30個)等であってもよい。
このように、生成装置100は、各セントロイドに対応付けられるベクトルの数の差ができるだけ小さくなるようなセントロイドC2−1〜C2−4を生成する。例えば、図1の空間情報GR11−3中の領域AR2−1には、ベクトル識別情報V66、V5001等が含まれる。すなわち、生成装置100は、セントロイドC2−1にベクトルV66、V5001等を対応付ける。
そして、生成装置100は、第2セントロイドの生成に応じて、情報を更新する(ステップS14)。図1の例では、生成装置100は、第2セントロイドの生成に応じて、情報を更新する。例えば、生成装置100は、複数の第2セントロイドを生成した場合、複数の第2セントロイドを第1セントロイドに対応付け、第1ベクトル群に含まれる各ベクトルと第1セントロイドとの対応付けを解除するように記憶部120(図3参照)の情報を更新する。
図1の例では、生成装置100は、生成した複数の第2セントロイドに対応する情報により、セントロイド情報記憶部122を更新する。例えば、生成装置100は、空間情報GR11中の領域AR2−1に対応するセントロイドC2−1とそのベクトル情報を含むセントロイド情報をセントロイド情報記憶部122−2に格納する。具体的には、生成装置100は、セントロイドID「C2−1」と、空間情報GR11中の領域AR2−1のセントロイドの位置に対応するベクトル情報とを組み合わせたセントロイド情報を生成し、セントロイド情報記憶部122−2に格納する。図1の例では、生成装置100は、セントロイドC2−1のベクトルデータ「21,40,11,52・・・」をセントロイド情報記憶部122−2に格納する。
例えば、生成装置100は、空間情報GR11中の領域AR2−2に対応するセントロイドを識別するセントロイドIDやセントロイドに対応するベクトル情報を含むセントロイド情報としてセントロイド情報記憶部122−2に格納する。具体的には、生成装置100は、セントロイドID「C2−2」と、セントロイドC2−2に対応するベクトルデータであって、「19,51,9,65・・・」となるN次元のベクトル情報とを組み合わせたセントロイド情報を生成し、セントロイド情報記憶部122−2に格納する。また、残りの2つの第2セントロイドであるセントロイドC2−3、C2−4についても同様に、セントロイド情報をセントロイド情報記憶部122−2に格納する。なお、生成装置100は、セントロイド情報記憶部122−2に記憶されたセントロイドC2の情報を削除してもよいし、所定のフラグを用いてベクトルとの直接の対応付けが解除されたことを判別可能にしてもよい。
また、図1の例では、生成装置100は、生成した複数の第2セントロイドに対応する情報により、第2インデックス情報記憶部123を更新する。例えば、生成装置100は、各セントロイドC2−1〜C2−4に対応付けられたベクトルに基づいて、第2インデックス情報記憶部123を更新する。例えば、生成装置100は、各セントロイドC2−1〜C2−4に対応する領域AR2−1〜AR2−4の各々に含まれるベクトルを識別する情報をセントロイドC2−1〜C2−4に対応付けた第2インデックス情報を生成する。
例えば、生成装置100は、セントロイドC2−1に対応付けて25個のベクトルのベクトル識別情報を第2インデックス情報記憶部123−2に格納する。例えば、生成装置100は、セントロイドC2−1に対応付けてベクトル識別情報V66、V5001、V5004等を第2インデックス情報記憶部123−2に格納する。例えば、生成装置100は、セントロイドC2−2に対応付けて25個のベクトルのベクトル識別情報を第2インデックス情報記憶部123−2に格納する。例えば、生成装置100は、セントロイドC2−2に対応付けてベクトル識別情報ベクトルV971、V5003等を第2インデックス情報記憶部123−2に格納する。
また、生成装置100は、第2インデックス情報記憶部123−2に示すように、セントロイドC2に対応する第2インデックス情報を削除することにより、セントロイドC2とベクトルとの対応付けを解除する。なお、生成装置100は、第2インデックス情報記憶部123中のセントロイドC2に対応する情報に、所定のフラグを立てることにより、セントロイドC2とベクトルとの直接の対応付けが解除されたことを判別可能にしてもよい。また、ベクトルとの直接の対応付けが解除されたセントロイドC2は、検索時の第1インデックス情報として利用されるが、詳細は図9において詳述する。
上述したように、生成装置100は、1つの第1セントロイド(セントロイドC2)に対応付けられるベクトルの数が多くなった場合、その対応付けを分割するように、複数の第2セントロイドを生成することにより、効率的な検索を可能にするセントロイド情報を生成することができる。例えば、セントロイドに対応付けられたベクトル数が多い場合には近傍ではないベクトルが結果となる場合等がある。したがって、生成装置100は、各セントロイドに対応付けられるベクトルの数ができる限り均等となるように、画像の登録の変動に応じてセントロイドを調整することにより、セントロイド情報を用いた検索時における性能を向上させることができる。特に、生成装置100は、k最近傍検索の場合、検索結果数が一定であるため、セントロイドに対応付けられたベクトル数を均等にすることにより、より効率的な検索を可能にするという効果を奏することができる。
より具体的には、生成装置100は、上記のように1つの第1セントロイドに対応付けられるベクトルが所定の条件を満たす場合、その対応付けを分割するように、複数の第2セントロイドを生成することにより、各セントロイドに対応付けられるベクトルの数の差が所定値以内になるように調整可能となる。このように、生成装置100は、各セントロイドに対応付けられるベクトルの数が均等になるように、所定の条件を満たす第1セントロイドについて複数の第2セントロイドを生成することにより、効率的な検索を可能にするセントロイド情報を生成することができる。例えば、生成装置100が生成したセントロイド情報により、クエリに対応するセントロイドを特定することができるため、そのセントロイドに対応付けられたベクトルを検索結果とすることにより、近傍検索における効率的な検索を可能にすることができる。また、生成装置100は、上述した処理以外にも他の情報の生成処理を行ったり、生成した情報を用いてクエリに対する情報提供を行なったりするが、それらの点についての詳細は後述する。
また、上述したように、生成装置100は、全ベクトルデータのうち、セントロイドとなるもののベクトルデータのみをセントロイド情報記憶部122等の記憶部120(図3参照)に格納し、他のベクトルデータについては記憶部120に格納しない。言い換えると、生成装置100は、セントロイド以外のベクトルについてはベクトル識別情報のみを第2インデックス情報記憶部123に格納する。これにより、生成装置100は、格納するベクトル情報のデータ量を抑制しつつ、効率的な検索を可能にするセントロイド情報を生成することができる。
〔1−1.再併合〕
なお、上述した例では、第2セントロイドを生成する場合を示したが、生成装置100は、生成した第2セントロイドを削除してもよい。すなわち、生成装置100は、第2セントロイドを生成することにより、分割した領域を再併合してもよい。例えば、生成装置100は、画像が削除されること等により画像が検索対象から除外された場合、各セントロイドに対応付けられるベクトルの数が減少した場合、下記のような再併合の処理を行ってもよい。
生成装置100は、複数の第2セントロイドの各々に対応付けられるベクトルの数が所定の閾値以下である場合、複数の第2セントロイドの各々に対応付けられたベクトルを、第1セントロイドに対応付け、第1セントロイドと複数の第2セントロイドとの対応付けを解除してもよい。
例えば、生成装置100は、生成した第2セントロイドであるセントロイドC2−1〜C2−4の各々に対応付けられるベクトルの数が所定の閾値(例えば6個等)以下である場合、セントロイドC2−1〜C2−4の各々に対応付けられたベクトルを、セントロイドC2に対応付けてもよい。例えば、生成装置100は、セントロイドC2−1〜C2−4の各々に対応付けられるベクトルを合算した数が所定の閾値(例えば25個)以下である場合、セントロイドC2−1〜C2−4の各々に対応付けられたベクトルを、セントロイドC2に対応付けてもよい。
また、生成装置100は、生成した複数の第2セントロイドを削除してもよい。例えば、生成装置100は、上述のような領域の再併合を行った場合、生成した複数の第2セントロイドを削除してもよい。図1の例では、生成装置100は、上記のセントロイドC2とベクトルとの直接の対応付けを行い再併合処理に応じて、セントロイドC2−1〜C2−4を第2インデックス情報記憶部123から削除してもよい。
例えば、画像が削除されること等により画像が検索対象から除外された場合、各セントロイドに対応付けられるベクトルの数が変動する。具体的には、画像が検索対象から除外された場合、各セントロイドに対応付けられるベクトルの数が減少する。この場合、あるセントロイドに対応付けられるベクトルが少ない場合、そのセントロイドが抽出された場合、対応する検索画像が所望の数に満たない場合がある。また、あるセントロイドに対応付けられるベクトルが無くなる、すなわち0個になった場合、そのセントロイドが抽出された場合、対応する検索画像がないこととなる。しかしながら、上記のように一度分割した領域(セントロイド)を再度併合することにより、各セントロイドに対応付けられるベクトル数をできる限り均等に保つことにより、検索の性能の低下を抑制することができる。
〔1−2.再帰処理〕
また、生成装置100は、セントロイドC2−1〜C2−4をさらに分割するように複数の第2セントロイドを生成してもよい。すなわち、生成装置100は、第2セントロイドであるセントロイドC2−1〜C2−4をさらに分割するように複数の第3セントロイドを生成してもよい。例えば、生成装置100は、第2セントロイドであるセントロイドC2−1に対応付けられるベクトル数が75個になった場合を一例として説明する。
この場合、例えば、生成装置100は、図9中の第1インデックス情報記憶部121に示すように、セントロイドC2−2から3つの第2セントロイドであるセントロイドC2−2−1〜C2−2−3を生成してもよい。以下では、セントロイドC2−2がセントロイドC2に基づいて生成されたセントロイドであることを明示するために、セントロイドC2−2を第2セントロイドC2−2とする。また、セントロイドC2−2−1〜C2−2−3が第2セントロイドC2に基づいて生成されたセントロイドであることを明示するために、セントロイドC2−2−1〜C2−2−3を第3セントロイドC2−2−1〜C2−2−3とする。
例えば、生成装置100は、第2セントロイドC2−2に対応付けられたベクトルの数が閾値「75」に達した場合、3つの第3セントロイドC2−2−1〜C2−2−3を新たに生成する。また、生成装置100は、その第3セントロイドC2−2−1〜C2−2−3に第2セントロイドC2−2に対応付けられた第2ベクトル群を分割して対応付ける。すなわち、生成装置100は、1つの第2セントロイドC2−2に対応付けられたベクトル(対象ベクトル)の数が75に達した場合、各第3セントロイドに対応付けられるベクトルの設定数「25」になるように、75個の対象ベクトルが3つの第3セントロイドに平均的に約25個ずつ対応付けられるように分割する。
例えば、図9の示す例では、生成装置100は、各第3セントロイドに対応付けられるベクトルの数の差ができるだけ小さくなるような第3セントロイドC2−2−1〜C2−2−3を生成する。例えば、図9の空間情報GR11−4中の領域AR2−2−1には、ベクトル識別情報V971等が含まれる。すなわち、生成装置100は、セントロイドC2−2−1にベクトルV971等の約25個のベクトルを対応付ける。また、例えば、図9の空間情報GR11−4中の領域AR2−2−2には、ベクトル識別情報V5003等が含まれる。すなわち、生成装置100は、セントロイドC2−2−2にベクトルV5003等の約25個のベクトルを対応付ける。また、生成装置100は、セントロイドC2−2−3についても同様に、約25個のベクトルを対応付ける。
このように、生成装置100は、上述のような75や100等の種々の閾値を適宜用いて生成処理を行ってもよい。また、生成装置100は、上述のように、分割数を3や4等の適宜の数として生成処理を行ってもよい。すなわち、生成装置100は、2個以上の第2セントロイドや第3セントロイド等を生成してもよい。
なお、生成装置100は、再帰的に複数のセントロイドを生成する回数を制限してもよい。例えば、生成装置100は、再帰的に複数のセントロイドを生成する回数を2回に制限してもよい。この場合、生成装置100は、図9中の第1インデックス情報記憶部121に示すように、第3階層までのセントロイド(「第3階層のセントロイド」とする)を生成してもよい。そして、この場合、生成装置100は、第3階層までの領域の分割(セントロイドの生成)を行った後、第3階層のセントロイドに対応する領域のベクトルの数が所定の閾値に達した場合、第3階層のセントロイドに対応する領域について、図10に示すような部分領域の生成を行ってもよい。
〔2.生成システムの構成〕
図2に示すように、生成システム1は、端末装置10と、情報提供装置50と、生成装置100とが含まれる。端末装置10と、情報提供装置50と、生成装置100とは所定のネットワークNを介して、有線または無線により通信可能に接続される。図2は、実施形態に係る生成システムの構成例を示す図である。なお、図2に示した生成システム1には、複数台の端末装置10や、複数台の情報提供装置50や、複数台の生成装置100が含まれてもよい。
端末装置10は、ユーザによって利用される情報処理装置である。端末装置10は、ユーザによる種々の操作を受け付ける。なお、以下では、端末装置10をユーザと表記する場合がある。すなわち、以下では、ユーザを端末装置10と読み替えることもできる。なお、上述した端末装置10は、例えば、スマートフォンや、タブレット型端末や、ノート型PC(Personal Computer)や、デスクトップPCや、携帯電話機や、PDA(Personal Digital Assistant)等により実現される。図8に示す例においては、端末装置10がノート型PCである場合を示す。
情報提供装置50は、ユーザ等に種々の情報提供を行うための情報が格納された情報処理装置である。例えば、情報提供装置50は、ウェブサーバ等の種々の外部装置から収集した文字情報等に基づくベクトル識別情報が格納される。例えば、情報提供装置50は、ユーザ等に画像検索サービスを提供する情報処理装置である。例えば、情報提供装置50は、画像検索サービスを提供するための各情報が格納される。例えば、情報提供装置50は、画像検索サービスの対象となる画像に対応するベクトル情報を生成装置100に提供する。また、情報提供装置50は、クエリを生成装置100に送信することにより、生成装置100からクエリに対応する画像を示すベクトル識別情報等を受信する。
生成装置100は、第1セントロイドに対応付けられた第1ベクトル群に関する情報が所定の条件を満たす場合、第1ベクトル群に含まれるベクトルである対象ベクトルの各々が距離に応じて対応付けられる複数の第2セントロイドを生成する。例えば、生成装置100は、第1セントロイドの対象ベクトルの数が所定の閾値以上である場合、複数の第2セントロイドを生成する。また、本実施形態において生成装置100は、クエリを取得した場合、生成した情報に基づいて、クエリに対応するベクトル識別情報を提供する。なお、生成装置100は、情報提供装置50等の種々の外部装置から収集したベクトル情報に基づいてセントロイド情報を生成してもよい。また、生成装置100は、情報提供装置50と一体であってもよい。
〔3.生成装置の構成〕
次に、図3を用いて、実施形態に係る生成装置100の構成について説明する。図3は、実施形態に係る生成装置100の構成例を示す図である。図3に示すように、生成装置100は、通信部110と、記憶部120と、制御部130とを有する。なお、生成装置100は、生成装置100の管理者等から各種操作を受け付ける入力部(例えば、キーボードやマウス等)や、各種情報を表示するための表示部(例えば、液晶ディスプレイ等)を有してもよい。
(通信部110)
通信部110は、例えば、NIC(Network Interface Card)等によって実現される。そして、通信部110は、ネットワーク(例えば図2中のネットワークN)と有線または無線で接続され、端末装置10との間で情報の送受信を行う。
(記憶部120)
記憶部120は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。実施形態に係る記憶部120は、図3に示すように、第1インデックス情報記憶部121と、セントロイド情報記憶部122と、第2インデックス情報記憶部123とを有する。なお、図示を省略するが、第1インデックス情報記憶部121には、上述した第1インデックスに関する各種情報が記憶される。
(第1インデックス情報記憶部121)
実施形態に係る第1インデックス情報記憶部121は、第1インデックスに関する各種情報を記憶する。図4は、実施形態に係る第1インデックス情報記憶部の一例を示す図である。具体的には、図4の例では、第1インデックス情報記憶部121は、セントロイド情報に基づいて、ツリー構造のインデックス情報を示す。図4の例では、第1インデックス情報記憶部121は、「第1階層」、「第2階層」、「第3階層」等といった項目が含まれる。なお、「第1階層」〜「第3階層」に限らず、インデックスの階層数に応じて、「第4階層」、「第5階層」、「第6階層」等が含まれてもよい。
「第1階層」は、第1インデックスの第1階層に属するセントロイドを識別(特定)する情報が格納される。「第1階層」に格納されるセントロイドは、第1インデックスの根(ルート)に直接結ばれる階層に対応するノードとなる。例えば、「第1階層」には、第2セントロイドの生成前におけるクラスタリングにより生成されたセントロイドを識別(特定)する情報が格納される。
「第2階層」は、第1インデックスの第2階層に属するセントロイドを識別(特定)する情報が格納される。「第2階層」に格納されるセントロイドは、第1階層のセントロイドに結ばれる直下の階層に対応するノードとなる。例えば、「第2階層」には、第1階層のセントロイドに対して生成されたセントロイドを識別(特定)する情報が格納される。例えば、「第2階層」には、第1階層のセントロイドを第1セントロイドとして生成処理を行った場合の第2セントロイドを識別(特定)する情報が格納される。
「第3階層」は、第1インデックスの第3階層に属するセントロイドを識別(特定)する情報が格納される。「第3階層」に格納されるセントロイドは、第2階層のセントロイドに結ばれる直下の階層に対応するノードとなる。例えば、「第3階層」には、第2階層のセントロイドに対して生成されたセントロイドを識別(特定)する情報が格納される。例えば、「第3階層」には、第2階層のセントロイドを第1セントロイドとして生成処理を行った場合の第2セントロイドを識別(特定)する情報が格納される。例えば、「第3階層」には、第1階層のセントロイドを第1セントロイドとし、第2階層のセントロイドを第2セントロイドとした場合の第3セントロイドを識別(特定)する情報が格納される。
例えば、図4に示す例においては、第1インデックス情報記憶部121には、図1中の空間情報GR11−3に対応する情報が記憶される。例えば、第1インデックス情報記憶部121は、第1階層のセントロイドが、セントロイドC1〜C11であることを示す。具体的には、第1インデックス情報記憶部121は、所定のクラスタリングにより生成されたセントロイドが、セントロイドC1〜C11であることを示す。
また、例えば、第1インデックス情報記憶部121は、第2階層のセントロイドが、セントロイドC2−1〜C2−4であることを示す。具体的には、第1インデックス情報記憶部121は、セントロイドC2に対応する第2階層のセントロイドが、セントロイドC2−1〜C2−4であることを示す。
なお、第1インデックス情報記憶部121は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(セントロイド情報記憶部122)
実施形態に係るセントロイド情報記憶部122は、セントロイドに関する各種情報を記憶する。例えば、セントロイド情報記憶部122は、セントロイドIDやベクトルデータを記憶する。図5は、実施形態に係るセントロイド情報記憶部の一例を示す図である。図5に示すセントロイド情報記憶部122は、「セントロイドID」、「ベクトルデータ」といった項目が含まれる。
「セントロイドID」は、セントロイドを識別するための識別情報を示す。また、「ベクトルデータ」は、セントロイドIDにより識別されるセントロイド(ベクトル)に対応するベクトルデータを示す。
例えば、図5に示す例においては、セントロイド情報記憶部122には、セントロイドID「C1」により識別されるセントロイド(ベクトル)に対応するベクトルデータは、「10,24,54,2・・・」のN次元ベクトルであることを示す。
また、例えば、図5に示す例においては、セントロイド情報記憶部122には、セントロイドID「C4」により識別されるセントロイド(ベクトル)に対応するベクトルデータは、「32,1,120,31・・・」のN次元ベクトルであることを示す。
なお、セントロイド情報記憶部122は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(第2インデックス情報記憶部123)
実施形態に係る第2インデックス情報記憶部123は、セントロイド情報記憶部122に記憶された各セントロイドに対応付けられたベクトルを識別する各種情報を記憶する。図6は、実施形態に係る第2インデックス情報記憶部の一例を示す図である。図6の例では、第2インデックス情報記憶部123は、「セントロイドID」、「ベクトルID」といった項目が含まれる。
「セントロイドID」は、セントロイドを識別するための識別情報を示す。また、「ベクトルID」は、セントロイドIDにより識別されるセントロイド(ベクトル)に対応付けられたベクトルを示す。
例えば、図6に示す例においては、第2インデックス情報記憶部123には、セントロイドID「C1」により識別されるセントロイド(ベクトル)に対応付けられたベクトルは、ベクトル識別情報V4、V25、V32、V41、V87等により各々識別されるベクトルであることを示す。
また、例えば、図6に示す例においては、第2インデックス情報記憶部123には、セントロイドID「C4」により識別されるセントロイド(ベクトル)に対応付けられたベクトルは、ベクトル識別情報V9、V12、V34、V54、V85等により各々識別されるベクトルであることを示す。
なお、第2インデックス情報記憶部123は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(制御部130)
図3の説明に戻って、制御部130は、コントローラ(controller)であり、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)等によって、生成装置100内部の記憶装置に記憶されている各種プログラム(生成プログラムの一例に相当)がRAMを作業領域として実行されることにより実現される。また、制御部130は、コントローラであり、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積回路により実現される。
図3に示すように、制御部130は、取得部131と、生成部132と、抽出部133と、提供部134とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部130の内部構成は、図3に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
(取得部131)
取得部131は、各種情報を取得する。例えば、取得部131は、第1インデックス情報記憶部121や、セントロイド情報記憶部122や、第2インデックス情報記憶部123等から各種情報を取得する。また、取得部131は、各種情報を外部の情報処理装置から取得する。
取得部131は、所定の対象に関するベクトルが距離に応じて対応付けられる第1セントロイドと、第1セントロイドに対応付けられるベクトルとの対応付けを示す対応情報を取得する。取得部131は、データ検索の対象となるベクトルが距離に応じて対応付けられる第1セントロイドと、第1セントロイドに対応付けられるベクトルとの対応付けを示す対応情報を取得する。また、取得部131は、所定のクラスタリング手法によりベクトルが対応付けられた第1セントロイドであって、新たに追加されるベクトルが距離に応じて対応付けられる第1セントロイドの対応情報を取得する。また、取得部131は、対応付けられるベクトルの数の差が所定値以内になるように所定のクラスタリング手法によりベクトルが対応付けられた第1セントロイドであって、新たに追加されるベクトルが距離に応じて対応付けられる第1セントロイドの対応情報を取得する。
例えば、取得部131は、検索対象の各々に対応する複数のベクトル識別情報を取得する。例えば、取得部131は、情報提供装置50から各ベクトル識別情報に関する情報を取得してもよい。例えば、取得部131は、複数のベクトル識別情報を異なるタイミングで取得してもよい。例えば、取得部131は、画像情報が検索対象として追加されたタイミングで、その画像情報に対応するベクトル識別情報を取得してもよい。
例えば、取得部131は、検索クエリに関する情報を取得する。例えば、取得部131は、画像検索に関する検索クエリを取得する。図8の例では、取得部131は、ユーザU1が利用する端末装置10からクエリを受け付けた情報提供装置50からクエリを取得する。
図1の例では、取得部131は、画像情報に各々対応するベクトル情報を取得する。図1の例では、取得部131は、空間情報GR11等に示すようにベクトル識別情報V3〜V1100等により各々識別される複数のベクトル情報を取得する。例えば、取得部131は、ベクトル識別情報V3〜V1100等を含む多数のベクトル情報を取得する。
図1の例では、取得部131は、セントロイドに対応付けられるベクトルとの対応付けを示す対応情報を取得する。例えば、取得部131は、情報提供装置50等の外部の情報処理装置から画像情報に各々対応するベクトル情報を取得する。
図1の例では、取得部131は、ベクトルの増加を示す情報を取得する。例えば、取得部131は、情報提供装置50に追加された画像に対応するベクトル情報を取得する。例えば、取得部131は、75個の画像の各々に対応するベクトル識別情報V5001〜V5075を情報提供装置50から取得する。
(生成部132)
生成部132は、各種情報を生成する。例えば、生成部132は、記憶部120に記憶される各種情報を生成する。例えば、生成部132は、第1インデックス情報記憶部121や、セントロイド情報記憶部122や、第2インデックス情報記憶部123等に記憶される各種情報を生成する。
生成部132は、取得部131により取得された対応情報に基づいて、第1セントロイドに対応付けられた第1ベクトル群に関する情報が所定の条件を満たす場合、第1ベクトル群に含まれるベクトルである対象ベクトルの各々が距離に応じて対応付けられる複数の第2セントロイドを生成する。また、生成部132は、対象ベクトルの数が所定の閾値以上である場合、複数の第2セントロイドを生成する。また、生成部132は、対象ベクトルの数に応じた数の複数の第2セントロイドを生成する。
また、生成部132は、対象ベクトルの数と所定の設定値とに基づく数の複数の第2セントロイドを生成する。また、生成部132は、対象ベクトルの数を所定の設定値により除算した数の複数の第2セントロイドを生成する。また、生成部132は、複数の第2セントロイドを生成した場合、複数の第2セントロイドを第1セントロイドに対応付け、第1ベクトル群に含まれる各ベクトルと第1セントロイドとの対応付けを解除する。
また、生成部132は、複数の第2セントロイドの各々に対応付けられるベクトルの数が所定の閾値以下である場合、複数の第2セントロイドの各々に対応付けられたベクトルを、第1セントロイドに対応付け、第1セントロイドと複数の第2セントロイドとの対応付けを解除する。また、生成部132は、複数の第2セントロイドを削除する。
また、生成部132は、複数の第2セントロイドのうち、一の第2セントロイドに対応付けられた第2ベクトル群に関する情報が所定の条件を満たす場合、第2ベクトル群に含まれるベクトルである対象ベクトルの各々が距離に応じて対応付けられる複数の第3セントロイドを生成する。
例えば、生成部132は、複数のベクトル情報に基づいて、ベクトル量子化において各ベクトル情報の各々が距離に応じて対応付けられる複数のセントロイド情報であって、各セントロイド情報に対応付けられるベクトル情報の数が均等になるように複数のセントロイド情報を生成する。例えば、生成部132は、複数のベクトル情報から所定の条件に基づいてベクトル情報をセントロイド情報として選択することにより、複数のセントロイド情報を生成する。例えば、生成部132は、複数のベクトル情報から、ランダムサンプリングにより選択されたベクトル情報をセントロイド情報として選択することにより、複数のセントロイド情報を生成する。
例えば、生成部132は、所定の検索要求に対して、セントロイド情報の特定に用いる第1インデックス情報を生成する。例えば、生成部132は、高次元ベクトルを検索する検索インデックスを第1インデックス情報として生成する。例えば、生成部132は、複数のセントロイド情報に関する木構造型のインデックス、または、グラフ構造型のインデックスを第1インデックス情報として生成する。
例えば、生成部132は、各セントロイド情報と、当該各セントロイド情報に対応付けられたベクトル情報とを示す第2インデックス情報を生成する。例えば、生成部132は、各セントロイド情報に対応付けられたベクトル情報を特定する転置インデックスを第2インデックス情報として生成する。
例えば、生成部132は、各ベクトル情報を分割した各部分ベクトルを量子化するベクトル量子化に基づいて、各セントロイド情報に対応付けられるベクトル情報の数が均等になるように複数のセントロイド情報を生成する。例えば、生成部132は、各セントロイド情報に対応する領域に含まれるベクトル情報に基づいて、当該領域が分割された複数の部分領域に対応する部分セントロイド情報を生成する。例えば、生成部132は、各セントロイド情報に対応する領域に含まれるベクトル情報に関する残差ベクトル情報に基づいて、当該領域が分割された複数の部分領域に対応する部分セントロイド情報を生成する。例えば、生成部132は、各セントロイド情報と、当該各セントロイド情報に対応する領域に含まれるベクトル情報により生成される残差ベクトル情報に基づいて、当該領域が分割された複数の部分領域に対応する部分セントロイド情報を生成する。例えば、生成部132は、各部分領域の部分セントロイド情報と、当該各部分領域内に含まれるベクトル情報とを対応付けた対応付情報を生成する。例えば、生成部132は、各セントロイド情報と、当該各セントロイド情報の各部分領域内に対応する各部分セントロイド情報とにより生成される残差ベクトル情報に基づいて、対応付情報を生成する。
また、生成部132は、ベクトルをセントロイドとして選択することにより、複数の第1セントロイド情報等のセントロイド情報を生成してもよい。例えば、生成部132は、所定の回数ランダムサンプリングを行い、最も均等にベクトルがクラスタリングされるベクトル(セントロイド)の組合せに基づいて、複数のセントロイド情報を生成してもよい。また、例えば、生成部132は、最も均等にベクトルがクラスタリングされるセントロイドの組合せのうち、平均値からの乖離が大きいセントロイドを近接する他のベクトルに変更することにより、各セントロイドに対応付けられるベクトルの数が均等になるような複数のセントロイド情報を生成してもよい。
例えば、生成部132は、所定の回数ランダムサンプリングを行い、各クラスタに含まれるベクトルの数の差が最も小さくベクトルがクラスタリングされるセントロイドの組合せに基づいて、複数のセントロイド情報を生成する。例えば、生成部132は、所定の回数ランダムサンプリングを行い、最も均等にベクトルがクラスタリングされるセントロイドの組合せに基づいて、複数のセントロイド情報を生成する。また、例えば、生成部132は、最も均等にベクトルがクラスタリングされるセントロイドの組合せのうち、平均値からの乖離が大きいセントロイドを近接する他のベクトルに変更することにより、各セントロイドに対応付けられるベクトルの数が均等になるような複数のセントロイド情報を生成してもよい。また、例えば、生成部132は、各クラスタに含まれるベクトルの数の差が所定値(例えば、5や10等)以下になった場合、ランダムサンプリングを終了し、そのセントロイドの組合せに基づいて、複数のセントロイド情報を生成してもよい。例えば、生成部132は、最多のベクトルが含まれるクラスタと最少のベクトルが含まれるクラスタとの差が所定値(例えば、1や50等)以下になった場合、ランダムサンプリングを終了し、そのセントロイドの組合せに基づいて、複数のセントロイド情報を生成してもよい。また、例えば、生成部132は、各クラスタに含まれるベクトルの数の差が「0」、すなわち各クラスタに含まれるベクトルの数が同一になった場合、ランダムサンプリングを終了し、そのセントロイドの組合せに基づいて、複数のセントロイド情報を生成してもよい。
例えば、生成部132は、各セントロイドに対応付けられたベクトルに基づいて第2インデックス情報を生成してもよい。例えば、生成部132は、各セントロイドに対応する領域AR1〜AR11等の各々に含まれるベクトルを識別する情報をセントロイドIDに対応付けた第2インデックス情報を生成する。また、生成部132は、クエリを取得した際に対応するセントロイドを特定するために用いる第1インデックス情報を生成する。
図1の例では、生成部132は、所定のクラスタリング手法により、複数のベクトルをクラスタリングする。例えば、生成部132は、所定のクラスタリング手法により、セントロイドに対応付けられるベクトルの数の差が均一になるように複数のベクトルをクラスタリングする。例えば、生成部132は、各セントロイドに対応付けられるベクトルの数の差が所定値以内になるような複数のセントロイド情報を生成する。例えば、生成部132は、各セントロイドに対応付けられるベクトルの数が均等になるような複数のセントロイド情報を生成する。
図1の例では、生成部132は、図1中の空間情報GR11に示すように、ベクトル識別情報C1、C2、C3、C4、C5、C6、C7、C8、C9、C10、C11をセントロイドとするセントロイド情報を生成する。生成部132は、セントロイド情報記憶部122−1に示すような複数のセントロイド情報を生成する。
また、生成部132は、各セントロイドに対応付けられたベクトルに基づいて第2インデックス情報を生成する。例えば、生成部132は、各セントロイドに対応する領域AR1〜AR11等の各々に含まれるベクトルを識別する情報をセントロイドIDに対応付けた第2インデックス情報を生成する。
図1の例では、セントロイドC2に100個のベクトルが対応付けられたため、生成部132は、閾値に達したと判定し、セントロイドを生成する。例えば、生成部132は、第1セントロイドであるセントロイドC2に対応する4つの第2セントロイドを生成する。例えば、生成部132は、セントロイドC2に対応付けられた100個のベクトルを4分割するように、クラスタリングを行うことにより、4つの第2セントロイドであるセントロイドC2−1〜C2−4を生成する。例えば、生成部132は、領域AR2を4つの領域に分割するようにクラスタリングを行うことにより、4つの第2セントロイドであるセントロイドC2−1〜C2−4を生成する。
また、図1の例では、生成部132は、各セントロイドC2−1〜C2−4に対応する領域AR2−1〜AR2−4の各々に含まれるベクトルを識別する情報をセントロイドC2−1〜C2−4に対応付けた第2インデックス情報を生成する。
(抽出部133)
抽出部133は、各種情報を選択する。例えば、抽出部133は、ベクトル識別情報を選択する。例えば、抽出部133は、取得部131により取得されたクエリに基づいてセントロイド情報を選択する。
図8の例では、抽出部133は、クエリ情報QE11を用いてセントロイドを抽出する。例えば、抽出部133は、第1インデックス情報記憶部121に記憶された第1インデックス情報に基づいて、クエリ情報QE11に対応するセントロイドを特定し、抽出する。例えば、抽出部133は、種々の従来技術を適宜用いて、クエリ情報QE11における特徴領域を特定し、特徴領域における特徴量を局所特徴量として算出する。例えば、抽出部133は、種々の従来技術を適宜用いて、クエリ情報QE11における局所特徴量を抽出する。
図8の例では、抽出部133は、セントロイド情報記憶部122からセントロイドID「C2−1」により識別されるセントロイド情報を抽出する。例えば、抽出部133は、空間情報GR11において、クエリ情報QE11がセントロイドのうち、セントロイドID「C2−1」により識別されるセントロイドと最も近いため、セントロイドID「C2−1」により識別されるセントロイド情報を抽出する。例えば、抽出部133は、セントロイド情報に基づいて、ベクトルを抽出する。例えば、抽出部133は、セントロイド情報に基づいて、クエリ情報QE11に類似するベクトルを抽出する。例えば、抽出部133は、セントロイド情報に基づいて第2インデックス情報記憶部123からベクトルを抽出する。
図8の例では、抽出部133は、第2インデックス情報記憶部123にセントロイドID「C2−1」により識別されるセントロイド(ベクトル)に対応付けられて記憶されたベクトル識別情報V66、V5001、V5004等を抽出する。
(提供部134)
提供部134は、各種情報を提供する。例えば、提供部134は、端末装置10や情報提供装置50に各種情報を提供する。例えば、提供部134は、外部の情報処理装置に記憶部120に記憶された各種情報を提供する。例えば、提供部134は、空間情報GR11等の各種情報を提供する。
例えば、提供部134は、クエリに対応するベクトル識別情報を検索結果として提供する。例えば、提供部134は、抽出部133により選択されたベクトル識別情報を情報提供装置50へ提供する。図8の例では、提供部134は、抽出部133により選択されたベクトル識別情報をクエリに対応するベクトルを示す情報として情報提供装置50に提供する。図8の例では、提供部134は、ベクトル識別情報V66、V5001、V5004等をクエリに対応するベクトルを示す情報として情報提供装置50に提供する。また、提供部134は、セントロイドC2−1に対応する実データ(画像データ)がある場合、セントロイドC2−1のベクトル情報も情報提供装置50に提供してもよい。
図8の例では、提供部134は、抽出部133により抽出されたベクトルを識別する情報を情報提供装置50に提供する。例えば、提供部134は、セントロイドとして抽出されたセントロイドC2−1に対応する領域AR2−1内に位置するベクトル識別情報V66、V5001、V5004等を情報提供装置50に提供する。例えば、提供部134は、セントロイドとして抽出されたベセントロイドC2−1に対応するベクトル識別情報V66、V5001、V5004等を含む25のベクトル識別情報を情報提供装置50に提供する。
〔4.生成処理のフロー〕
次に、図7を用いて、実施形態に係る生成システム1による生成処理の手順について説明する。図7は、実施形態に係る生成処理の一例を示すフローチャートである。
図7に示すように、生成装置100は、第1セントロイドと、第1セントロイドに対応付けられるベクトルとの対応付けを示す対応情報を取得する(ステップS101)。図1の例では、生成装置100は、第2インデックス情報記憶部123に記憶されたセントロイドC2に関する対応情報を取得する。具体的には、生成装置100は、セントロイドC2にベクトルV33、V66、V81、V112、V971等が対応付けられた対応情報を第2インデックス情報記憶部123から取得する。
その後、生成装置100は、第1セントロイドに対応付けられた第1ベクトル群に関する情報が所定の条件を満たす場合、複数の第2セントロイドを生成する(ステップS102)。例えば、生成装置100は、セントロイドに対応付けられたベクトルの数が所定の閾値以上である場合、複数の第2セントロイドを生成する。図1の例では、生成装置100は、第1セントロイドとしてのセントロイドC2に対応付けられたベクトルの数が「100」であるため、ベクトル数「100」を設定値「25」で除算した数「4」に基づいて、4つの第2セントロイドを生成する。具体的には、生成装置100は、4つの第2セントロイドC2−1、C2−2、C2−3、C2−4を生成する。
〔5.情報の提供について〕
次に、図8を用いて、実施形態に係る生成システム1による情報提供について説明する。図8は、実施形態に係るクエリに対応する情報の提供の一例を示す図である。図8の例では、情報提供装置50が端末装置10から取得したクエリに応じて、端末装置10に検索結果を提供する場合を示す。具体的には、情報提供装置50が生成装置100から取得したベクトル識別情報に基づいてユーザに検索結果として画像情報を提供する場合を示す。図8の例では、情報提供装置50がk最近傍検索による画像検索サービスを提供する場合を一例として説明する。例えば、k最近傍検索では、検索クエリからの距離が近い方からk個のベクトルを検索(抽出)する。なお、以下では説明を簡単にするために、「k」が「6」である場合を示す。
まず、情報提供装置50は、ユーザU1が利用する端末装置10からクエリを取得する(ステップS21)。図8の例では、情報提供装置50は、端末装置10からクエリ情報QE11を取得する。例えば、情報提供装置50は、端末装置10から画像情報をクエリ情報QE11として取得する。
そして、情報提供装置50は、生成装置100にクエリを送信する(ステップS22)。図8の例では、情報提供装置50は、端末装置10から取得したクエリ情報QE11を生成装置100に送信する。そして、生成装置100は、画像情報をクエリ情報QE11として取得する。
その後、生成装置100は、クエリ情報QE11を用いてセントロイドを抽出する(ステップS23)。例えば、生成装置100は、第1インデックス情報記憶部121に記憶された第1インデックス情報に基づいて、クエリ情報QE11に対応するセントロイドを特定し、抽出する。
例えば、生成装置100は、種々の従来技術を適宜用いて、クエリ情報QE11における特徴領域を特定し、特徴領域における特徴量を局所特徴量として算出する。例えば、生成装置100は、種々の従来技術を適宜用いて、クエリ情報QE11における局所特徴量を抽出する。
また、例えば、生成装置100は、クエリ情報QE11からBoFに関する情報を生成する。そして、生成装置100は、第1インデックス情報記憶部121に記憶された第1インデックス情報に基づいて、クエリ情報QE11のBoFに関する情報と類似するBoFを検索することにより、セントロイドを特定する。
例えば、生成装置100は、クエリ情報QE11のBoFに関する情報に最も近いBoF表現を、第1インデックス情報記憶部121に記憶された第1インデックス情報を用いて検索する。なお、生成装置100は、クエリ情報QE11のBoFに関する情報と、検索で抽出されたセントロイドのBoFに関する情報との距離が所定の閾値以上であった場合、クエリ情報QE11に対応するベクトル情報はないと判定してもよい。なお、生成装置100は、セントロイドの抽出を、特許文献2に記載されるような種々の従来技術を適宜用いて行ってもよい。例えば、生成装置100は、特許文献2に記載される処理により、特徴点座標の照合を行うことにより、クエリ情報QE11と、抽出したセントロイドに対応する画像との類似性の確信度を検証してもよい。
図8の例では、生成装置100は、セントロイド情報記憶部122からセントロイドID「C2−1」により識別されるセントロイド情報を抽出する。例えば、生成装置100は、空間情報GR11において、クエリ情報QE11がセントロイドのうち、セントロイドID「C2−1」により識別されるセントロイドと最も近いため、セントロイドID「C2−1」により識別されるセントロイド情報を抽出する。
そして、生成装置100は、セントロイド情報に基づいて、ベクトルを抽出する(ステップS24)。例えば、生成装置100は、セントロイド情報に基づいて、クエリ情報QE11に類似するベクトルを抽出する。例えば、生成装置100は、セントロイド情報に基づいて第2インデックス情報記憶部123からベクトルを抽出する。
図8の例では、生成装置100は、第2インデックス情報記憶部123にセントロイドID「C2−1」により識別されるセントロイド(ベクトル)に対応付けられて記憶されたベクトル識別情報V66、V5001、V5004等を抽出する。例えば、図8では、セントロイドC2−1に対応する領域AR2−1内に位置するベクトル識別情報V66、V5001、V5004等を含む25のベクトル識別情報(ベクトル)が抽出されるものとする。
その後、生成装置100は、抽出したベクトルを識別する情報を情報提供装置50に提供する(ステップS25)。図8の例では、生成装置100は、セントロイドとして抽出されたベセントロイドC2−1に対応するベクトル識別情報V66、V5001、V5004等を含む25のベクトル識別情報を情報提供装置50に提供する。
生成装置100からベクトルを識別する情報を受信した情報提供装置50は、受信したベクトルを識別する情報に対応付けられた画像情報を端末装置10に提供する(ステップS26)。例えば、情報提供装置50は、生成装置100から受信したベクトルを識別する情報に対応付けられた画像情報をクエリ情報QE11に対応する検索結果として端末装置10に提供する。図8の例では、生成装置100からベクトル識別情報V66、V5001、V5004等を受信した情報提供装置50は、ベクトル識別情報V66、V5001、V5004等の各々に対応する画像情報を端末装置10に提供する。例えば、情報提供装置50は、ベクトル識別情報V66、V5001、V5004等の各々に対応する画像情報とクエリ情報QE11との類似度を算出し、類似度に応じた順序で並んだ画像情報を端末装置10に提供してもよい。
〔6.第1インデックス〕
また、生成装置100は、クエリを取得した際に対応するセントロイドを特定するために、第1インデックス情報を用いてもよい。この点について、図9を用いて説明する。図9は、実施形態に係る第1インデックス情報の概念図を示す図である。
図1の例では、生成装置100は、クエリを取得した際に対応するセントロイドを特定するために、図4の第1インデックス情報記憶部121に示すような第1インデックス情報を生成する。また、生成装置100は、生成処理によるセントロイドの生成に応じて、第1インデックス情報記憶部121の情報を更新する。
図9の第1インデックス情報記憶部121は、生成装置100がセントロイドC2−2に対してさらに第2セントロイドを生成した場合を示す。例えば、図9の示す例では、生成装置100は、第3セントロイドC2−2−1〜C2−2−3を生成する。
図9中の第1インデックス情報記憶部121に示す「第3階層」には、セントロイドC2−2の第2セントロイドが格納される。例えば、図9の第1インデックス情報記憶部121は、第3階層のセントロイドが、セントロイドC2−2−1〜C2−2−3であることを示す。具体的には、図9の第1インデックス情報記憶部121は、第2階層のセントロイドC2−2に対応する第3階層のセントロイドが、セントロイドC2−2−1〜C2−2−3であることを示す。
また、この場合のセントロイドC2に対応する領域AR2内は、図9の空間情報GR11−4に示すようになる。例えば、図9の空間情報GR11−4中の領域AR2−2−1には、ベクトル識別情報V971等が含まれる。また、例えば、図9の空間情報GR11−4中の領域AR2−2−2には、ベクトル識別情報V5003等が含まれる。
例えば、生成装置100は、図9中の第1インデックス情報記憶部121に示す第1インデックス情報に対応するツリー情報TR11を生成する(ステップS31)。なお、図9では、インデックスを図として示すために、ツリー情報TR11を生成するものとして説明するが、図9中の第1インデックス情報記憶部121に示す情報は、ツリー情報TR11の情報を含む。図9の例では、生成装置100は、ツリー情報TR11と空間情報GR11とを含むグラフ情報GR1を生成する。なお、ツリー情報TR11は空間情報GR11に含まれてもよい。また、図9の例では、説明を簡単にするために、セントロイドC1〜C6、C8、C9、C11等の図示を省略し、ツリー情報TR11の一部を図示する。
図9中のツリー情報TR11は、ルートRTやセントロイドC1〜C11、C2−1〜C2−4、C2−2−1〜C2−2−3等を含む。図1の例では、例えばセントロイドC1〜C11、C2−1〜C2−4、C2−2−1〜C2−2−3等は、実データに対応するベクトルであってもよい。
図9中のツリー情報TR11に示すように、第1階層に属するセントロイドC1〜C11は、ルートRTに直接接続される。例えば、第1階層に属するセントロイドC10は、ルートRTに直接接続される。また、セントロイドC10は、対応する第2階層のセントロイドがないため、ベクトルが対応付けられる。すなわち、セントロイドC10は、ツリー情報TR11の葉(リーフノード)となる。また、セントロイドC2以外の他の第1階層のセントロイドC1、C3〜C9、C11も、ツリー情報TR11の葉(リーフノード)となる。
また、例えば、第1階層に属するセントロイドC2は、ルートRTに直接接続される。また、セントロイドC2は、対応する第2階層のセントロイドC2−1〜C2−4があるため、セントロイドC2−1〜C2−4に接続される。
また、セントロイドC2に対応する第2階層のセントロイドC2−1、C2−3、C2−4には、対応する第3階層のセントロイドがないため、ベクトルが対応付けられる。例えば、セントロイドC2−1には、ベクトルV66、V5001等が対応付けられる。また、例えば、セントロイドC2−3には、ベクトルV81、V112等が対応付けられる。また、例えば、セントロイドC2−4には、ベクトルV33、V5002等が対応付けられる。このように、セントロイドC2−2以外の他の第2階層のセントロイドC2−1、C2−3、C2−4は、ツリー情報TR11の葉(リーフノード)となる。
また、セントロイドC2−2に対応する第3階層のセントロイドC2−2−1〜C2−2−3には、対応する第4階層のセントロイドがないため、ベクトルが対応付けられる。例えば、セントロイドC2−2−1には、ベクトルV971等が対応付けられる。また、例えば、セントロイドC2−2−2には、ベクトルV5003等が対応付けられる。このように、第3階層のセントロイドC2−2−1〜C2−2−3は、ツリー情報TR11の葉(リーフノード)となる。
このように、図9に示す例では、階層の上下に関わらず、リーフノードとなるセントロイドにベクトルが対応付けられる。そのため、生成装置100は、検索クエリを取得した場合、その検索クエリに近似するリーフノードを特定することにより、検索クエリに対応するベクトルを特定することが可能となる。
例えば、生成装置100は、検索クエリQE11(図8参照)を取得した場合、ツリー情報TR11を上から下へ辿ることにより、検索クエリQE11の近傍候補となるセントロイドを特定することにより、効率的に検索クエリに対応するセントロイドを特定することができる。例えば、生成装置100は、ツリー情報TR11をルートRTからリーフノードまで辿ることにより、検索クエリの近傍候補となるセントロイドを特定してもよい。図8の例では、例えば、生成装置100は、ツリー情報TR11をルートRTからセントロイドC2−1まで辿ることにより、検索クエリQE11の近傍候補となるセントロイドC2−1を特定してもよい。
なお、上述したような複数のセントロイド情報に関する木構造やグラフ型の検索インデックスは一例であり、生成装置100は、クエリに対応するセントロイド情報を高速に特定することが可能であれば、どのようなデータ構造の第1インデックス情報を生成してもよい。例えば、生成装置100は、クエリに対応するセントロイド情報を高速に特定することが可能であれば、バイナリ空間分割に関する技術等の種々の従来技術を適宜用いて、第1インデックス情報を生成してもよい。例えば、生成装置100は、高次元ベクトルの検索に対応可能なインデックスであれば、どのようなデータ構造の第1インデックス情報を生成してもよい。
また、生成装置100は、上記の第1インデックス情報に限らず、クエリを取得した際に対応するセントロイドを特定するために利用可能であれば、どのような第1インデックス情報を用いてもよい。例えば、生成装置100は、高次元ベクトルを検索する検索インデックスを第1インデックス情報として生成する。ここでいう高次元ベクトルとは、例えば、数百次元から数千次元のベクトルであってもよいし、それ以上の次元のベクトルであってもよい。
また、例えば、生成装置100は、非特許文献2に記載されるようなグラフ型の検索インデックスに関する情報を第1インデックス情報として生成してもよい。また、例えば、生成装置100は、ツリー構造(木構造)に関する検索インデックスを第1インデックス情報として生成してもよい。例えば、生成装置100は、kd木(k-dimensional tree)に関する検索インデックスを第1インデックス情報として生成してもよい。例えば、生成装置100は、VP木(vantage-point tree)に関する検索インデックスを第1インデックス情報として生成してもよい。このように、生成装置100は、複数のセントロイド情報に関する木構造型のインデックス、グラフ構造型のインデックスを第1インデックス情報として生成してもよい。また、例えば、生成装置100は、転置インデックスを第1インデックス情報として生成してもよい。
また、例えば、生成装置100は、高次元データを検索できるハッシュ型などその他のインデックスを第1インデックス情報として用いてもよい。例えば、生成装置100は、高次元データを検索できるハッシュ型などその他のインデックスを第1インデックス情報として第1インデックス情報記憶部121に記憶してもよい。
また、例えば、生成装置100は、ツリー情報TR11のリーフノードとなるセントロイド間を所定のエッジで接続することにより、リーフノードにおけるグラフ構造(グラフ情報)を生成してもよい。図9の例では、生成装置100がリーフノードであるセントロイドC7、C10、C2−1、C2−3等をエッジEDで接続した場合を示す。なお、生成装置100は、ツリー情報TR11の各リーフノードを接続したグラフ情報を生成してもよい。この場合、例えば、生成装置100は、ツリー情報TR11のリーフノードまで辿った後、リーフノード間のグラフ構造と辿ることにより、セントロイドを特定してもよい。
〔7.第2インデックスの生成について〕
上記例においては、各セントロイドに対応する領域に基づく処理を説明したが、生成装置100は、各セントロイドに対応する領域を部分領域に分割してもよい。この点について図10を用いて以下説明する。図10は、実施形態に係る第2インデックス情報の生成処理の一例を示す図である。
例えば、図10中の空間情報GR11は、図8中の空間情報GR11に対応し、クエリ情報QE21と領域AR4に含まれるセントロイドC4やベクトルV9、V12、V34、V54、V85に対応する各ベクトルとの関係を示す。このように、図10中の空間情報GR11に示すように、クエリ情報QE21とセントロイドC4やベクトルV9、V12、V34、V54、V85に対応する各ベクトルとの距離は異なるが、生成装置100には、ベクトル識別情報V9、V12、V34、V54、V85に対応するベクトルデータを格納しない。この場合、例えば、クエリ情報QE21と各ベクトルとの距離は、クエリ情報QE21と領域AR4のセントロイドC4に対応するベクトルとの距離とみなされることとなる。言い換えると、ベクトル識別情報V9、V12、V34、V54、V85に対応するベクトルデータは、セントロイドC4に対応するベクトルデータに量子化される。このような場合、例えば、各領域AR1〜AR11等に含まれるベクトルは同一距離とみなされるのでベクトルの数が多くなった場合、検索結果として該当するデータが多くなる。
そこで、生成装置100は、生成処理において、各領域AR1〜AR11等をさらに部分領域に分割してもよい。以下では、領域AR4をさらに部分領域に分割する場合を示す。例えば、生成装置100は、各セントロイド情報に対応する領域に含まれるベクトル情報に関する残差ベクトル情報に基づいて、当該領域が分割された複数の部分領域に対応する部分セントロイド情報を生成してもよい。以下では、生成装置100は、各セントロイド情報と、当該各セントロイド情報に対応する領域に含まれるベクトル情報により生成される残差ベクトル情報に基づいて、当該領域が分割された複数の部分領域に対応する部分セントロイド情報を生成する場合を示す。
例えば、生成装置100は、領域AR4に含まれるベクトルの数に基づいて部分空間の数を決定してもよいし、所定の設定値に基づいて部分空間の数を決定してもよい。図10の例では、生成装置100は、領域AR4を9個の部分領域AR41〜AR49に分割する場合を示す。例えば、生成装置100は、各領域AR41〜AR49に含まれるベクトルの数が均等になるように各部分領域AR41〜AR49の範囲を決定してもよい。また、例えば、生成装置100は、クラスタリングに関する種々の従来技術を適宜用いて、各部分領域AR41〜AR49の範囲を決定してもよい。
図10の例では、生成装置100は、各部分領域AR41〜AR49に含まれるベクトルとセントロイドから残差ベクトルを算出し、その残差ベクトルから部分領域のセントロイドを生成する。この場合、複数の領域があっても個別のセントロイド集合があるわけではなく、共通でかつ単一のセントロイド集合を構成する。ただし、生成装置100は、複数の領域の各々について個別にセントロイド集合を生成してもよい。例えば、生成装置100は、セントロイドの総数が所定の閾値以下である場合、複数の領域の各々について個別のセントロイド集合を生成してもよい。なお、部分領域のセントロイドは残差ベクトルではなく、元のベクトルでも良い。例えば、生成装置100は、元のベクトルの分散が所定の閾値以下である場合、元のベクトルを部分領域のセントロイドとしてもよい。例えば、生成装置100は、ベクトル識別情報V34により識別されるベクトルを含む部分領域AR41に含まれるベクトルに基づいて、セントロイドCN41を生成する。また、例えば、生成装置100は、ベクトル識別情報V9により識別されるベクトルを含む部分領域AR42に含まれるベクトルに基づいて、セントロイドCN42を生成する。なお、生成装置100は、各セントロイド情報に対応する領域に含まれるベクトル情報に基づいて、当該領域が分割された複数の部分領域に対応する部分セントロイド情報を生成してもよい。
例えば、生成装置100は、一の領域のセントロイドと、各部分領域のセントロイドとの残差ベクトルに関する情報を記憶する。図10の例では、生成装置100は、部分セントロイド情報LT1に示すように、領域AR4のセントロイドC4と、その部分領域AR41のセントロイドCN41との残差ベクトルに関する情報や領域AR4のセントロイドC4と、その部分領域AR48のセントロイドCN48との残差ベクトルに関する情報等が記憶される。なお、生成装置100は、部分セントロイド情報LT1を記憶部120に記憶してもよい。
また、生成装置100は、各ベクトルに対応付けてそのベクトルが属する部分領域のセントロイド情報を記憶してもよい。図10の例では、生成装置100は、第2インデックス情報記憶部123Aに示すように、セントロイドC4に対応付けて記憶されたベクトルV9にセントロイドCN42を対応付けて記憶してもよい。なお、生成装置100は、第2インデックス情報記憶部123Aを記憶部120に含んでもよい。具体的には、生成装置100は、セントロイドID「C4」に対応付けられたベクトル識別情報「V9」にセントロイドID「CN42」を対応付けて記憶してもよい。このように、生成装置100は、各ベクトルにそのベクトルが属する部分領域のセントロイドに関する情報を対応付けて第2インデックス情報記憶部123Aに記憶する。これにより、生成装置100は、第2インデックス情報記憶部123Aを参照することで、ベクトルがどの部分領域に属するかを特定可能となり、さらに処理を高速化することができる。
上述したように、部分領域AR41〜AR49による分割が無い場合、クエリ情報QE21と各ベクトルとの距離は、クエリ情報QE21と領域AR4のセントロイドC4に対応するベクトルとの距離とみなされることとなる。一方、生成装置100は、部分領域AR41〜AR49による分割を行うことにより、クエリ情報QE21と各ベクトルとの距離をさらに細分化することができる。この点について、図11を用いて説明する。図11は、実施形態に係る第2インデックス情報の利用の一例を示す図である。
例えば、生成装置100は、部分セントロイド情報LT1を用いることにより、各ベクトルの位置をそのベクトルが属する部分領域のセントロイドの位置に量子化することができる。これにより、生成装置100は、クエリ情報QE21と各ベクトルとの距離を、クエリ情報QE21と各ベクトルが属する部分領域AR41〜AR49のセントロイドに対応するベクトルとの距離まで細部化することができる。
図11の例では、生成装置100は、セントロイド情報記憶部122に示すようにセントロイドID「C4」により識別されるベクトルのベクトルデータを有し、部分セントロイド情報LT1に示すようにセントロイドCN41に関する残差ベクトル情報を有する。そのため、生成装置100は、例えばクエリ情報QE21に対して、セントロイドCN41までの距離を算出することができる。したがって、生成装置100は、例えばクエリ情報QE21とベクトルV34との距離を、セントロイドC4よりもさらに近似したセントロイドCN41までの距離とすることができる。
このように、生成装置100は、各領域AR1〜AR11等をさらに細分化した部分領域に関する情報を用いることにより、格納するベクトルデータの数は領域に対応するセントロイドの数に抑制しつつ、さらに各ベクトルを細分化して量子化することが可能となる。例えば、生成装置100は、各領域AR1〜AR11等に含まれるベクトルの数が膨大(例えば1万や10万等)になった場合であっても、領域をさらに細分化することにより、各ベクトルを適切に量子化することができる。したがって、生成装置100は、効率的な検索を可能にするセントロイド情報を生成することができる。
〔7−1.分割時の第2インデックスの生成について〕
なお、図10及び図11の例では、第1階層のセントロイドC4に対応する領域の分領域への分割の場合を一例として示したが、生成装置100は、第2階層以降の階層のセントロイドに対応する領域を部分領域へ分割してもよい。
例えば、図1の例では、生成装置100は、第2セントロイドとして生成されたセントロイドC2−1〜C2−4ごとにさらに部分領域に分割してもよい。例えば、生成装置100は、セントロイドC2−1に対応する領域AR2−1に含まれるベクトル情報に基づいて、当該領域AR2−1が分割された複数の部分領域に対応する部分セントロイド情報を生成してもよい。
また、生成装置100は、所定の階層以下のセントロイドに対応する領域を部分領域に分割してもよい。例えば、生成装置100は、図9に示すように、第3階層までは、第2セントロイドの生成を行い、第3階層のセントロイドに対応するベクトルが所定の数以上になった場合に、そのセントロイドに対応する領域を部分領域に分割してもよい。
〔8.ベクトルの分割の一例〕
なお、上記の例では、生成装置100が各ベクトルを一のベクトルとして処理する場合を示したが、生成装置100は、各ベクトルを複数の部分ベクトルに分割して処理してもよい。例えば、生成装置100は、いわゆる直積量子化に関する技術を用いて、処理を行ってもよい。この点について図12を用いて説明する。図12は、実施形態に係るベクトルの分割の一例を示す図である。なお、図12の例では、説明を簡単にするために、クエリに対応するベクトルデータQE31の次元数が12である場合を示すが、生成装置100は、より高次元のベクトルを対象としてもよい。
図12の例では、生成装置100は、ベクトルデータQE31を4分割する。例えば、生成装置100は、ベクトルデータQE31のうち、1次元〜3次元のデータを部分ベクトルデータQE31−1とし、4次元〜6次元のデータを部分ベクトルデータQE31−2とし、7次元〜9次元のデータを部分ベクトルデータQE31−3とし、10次元〜12次元のデータを部分ベクトルデータQE31−4とする。具体的には、生成装置100は、「45,23,2」を部分ベクトルデータQE31−1とし、「127,34,5」を部分ベクトルデータQE31−2とし、「20,98,110」を部分ベクトルデータQE31−3とし、「12,45,4」を部分ベクトルデータQE31−4とする。
なお、上記のように、クエリを部分ベクトルに分割する場合を示したが、セントロイド情報の生成処理においては、各画像情報に対応するベクトルが部分ベクトルに分割されるものとする。また、図12では、説明を簡単にするために図1に示す空間情報GR11中の領域AR4を複数の部分領域(以下「部分空間」ともいう)に分割する場合を図示する。図12に示す例では、空間情報GR11中の領域AR4が複数の部分空間AR4−1〜AR4−4に分割された場合を示す。
部分ベクトルデータQE31−1は、部分空間AR4−1に対応するベクトルデータであり、部分ベクトルデータQE31−2は、部分空間AR4−2に対応するベクトルデータであり、部分ベクトルデータQE31−3は、部分空間AR4−3に対応するベクトルデータであり、部分ベクトルデータQE31−4は、部分空間AR4−4に対応するベクトルデータであるものとする。例えば、図12の例では、部分ベクトルデータQE31−1は、部分空間AR4−1中のセントロイドCN43の領域に位置する。
図12の例では、部分空間AR4−1〜AR4−4を類似の形状で示すが、各部分空間AR4−1〜AR4−4の形状は異なってもよいし、また各部分空間AR4−1〜AR4−4における領域の分割態様も異なってもよい。
そして、生成装置100は、全部分空間AR4−1〜AR4−4における距離を合計等することにより、各クエリとセントロイドとの距離を算出する。例えば、生成装置100は、下記の式(1)により、各クエリとベクトルとの距離を算出してもよい。なお、上述した例では、部分領域のセントロイドは基本共通であったが、部分ベクトルの場合には、生成装置100は、ベクトル単位にセントロイド集合を生成してもよい。例えば、生成装置100は、部分空間AR4−1〜AR4−4ごとにセントロイド集合を生成してもよい。これにより、部分ベクトルごとのベクトルデータの分布の傾向が違う場合であっても、生成装置100は、効率的な検索を可能にするセントロイド情報を生成することができる。また、生成装置100は、部分ベクトルを共通としてセントロイド集合を生成してもよい。例えば、生成装置100は、部分空間AR4−1〜AR4−4に共通するセントロイド集合を生成してもよい。これにより、生成装置100は、ベクトルを部分ベクトルに分割した場合であっても、効率的な検索を可能にするセントロイド情報を生成することができる。
ここで、上記式(1)中の左辺の値は、例えば、クエリとベクトルとの間の二乗距離を示す。また、例えば、上記式(1)中の「x」は、クエリに対応する。また、例えば、上記式(1)中の「y」は、ベクトルに対応する。また、例えば、上記式(1)の右辺中の「qc(y)」は、「y」のセントロイドを示す。例えば、生成装置100は、上記式(1)中の「y」について、ベクトルのベクトルデータを有しない場合は、図10のように各ベクトルが属する部分領域のセントロイドのベクトルデータの数値を用いてもよい。また、例えば、「y−qc(y)」は、残差ベクトルを示す。また、例えば、上記式(1)の右辺中の「qp」は、所定の量子化器(関数)を示す。
また、例えば、上記式(1)の右辺中の「j」は、分割された空間の数であってもよい。例えば、図12の例では、上記式(1)の右辺中の「j」は、分割された空間の数「4」であってもよい。また、例えば、上記式(1)の右辺中の「uj()」は、括弧中のベクトル間の部分残差ベクトルを示す。例えば、生成装置100は、上記式(1)を用いて、各部分空間におけるクエリとベクトルとの間の二乗距離を算出し、合算することにより、各クエリとベクトルとの距離を算出してもよい。例えば、図12の例では、生成装置100は、各部分空間AR4−1〜AR4−4における部分ベクトルデータQE31−1〜QE31−4と、各部分空間AR4−1〜AR4−4におけるベクトルとの間の二乗距離を算出し、合算することにより、ベクトルデータQE31に対応するクエリとベクトルとの距離を算出してもよい。
これにより、生成装置100は、各ベクトルをより細分化して量子化することが可能となり、クエリに対応するベクトルをより適切に抽出することができる。また、生成装置100は、上述した処理を適宜組み合わせることにより、近傍検索における効率的な検索を可能にするセントロイド情報を生成してもよい。例えば、生成装置100は、直積量子化時の各部分ベクトルをそのまま用いてもよいし、残差ベクトルを算出して用いてもよい。例えば、生成装置100は、各部分ベクトルとセントロイドから残差ベクトルを算出し、その残差ベクトルを用いてもよい。また、生成装置100は、部分ベクトル間で共通にセントロイドを生成してもよいし、個別にセントロイドを生成してもよい。例えば、生成装置100は、一のベクトルが分割された部分ベクトル間で共通にセントロイドを生成してもよいし、個別にセントロイドを生成してもよい。なお、上記は一例であり、生成装置100は、種々の情報を適宜組み合わせたり、個別に用いたりすることにより、近傍検索における効率的な検索を可能にするセントロイド情報を生成してもよい。例えば、生成装置100は、ある情報を共通化して用いたり、ある情報を個別化して用いたりすることにより、近傍検索における効率的な検索を可能にするセントロイド情報を生成してもよい。
〔9.効果〕
上述してきたように、実施形態に係る生成装置100は、取得部131と、生成部132とを有する。取得部131は、所定の対象に関するベクトルが距離に応じて対応付けられる第1セントロイドと、第1セントロイドに対応付けられるベクトルとの対応付けを示す対応情報を取得する。生成部132は、取得部131により取得された対応情報に基づいて、第1セントロイドに対応付けられた第1ベクトル群に関する情報が所定の条件を満たす場合、第1ベクトル群に含まれるベクトルである対象ベクトルの各々が距離に応じて対応付けられる複数の第2セントロイドを生成する。
このように、実施形態に係る生成装置100は、対応情報に基づいて、第1セントロイドに対応付けられた第1ベクトル群に関する情報が所定の条件を満たす場合、第1ベクトル群に含まれるベクトルである対象ベクトルの各々が距離に応じて対応付けられる複数の第2セントロイドを生成することにより、効率的な検索を可能にするセントロイド情報を生成することができる。
また、実施形態に係る生成装置100において、生成部132は、対象ベクトルの数が所定の閾値以上である場合、複数の第2セントロイドを生成する。
このように、実施形態に係る生成装置100は、対象ベクトルの数が所定の閾値以上である場合、複数の第2セントロイドを生成することにより、効率的な検索を可能にするセントロイド情報を生成することができる。
また、実施形態に係る生成装置100において、生成部132は、対象ベクトルの数に応じた数の複数の第2セントロイドを生成する。
このように、実施形態に係る生成装置100は、対象ベクトルの数に応じた数の複数の第2セントロイドを生成することにより、効率的な検索を可能にするセントロイド情報を生成することができる。
また、実施形態に係る生成装置100において、生成部132は、対象ベクトルの数と所定の設定値とに基づく数の複数の第2セントロイドを生成する。
このように、実施形態に係る生成装置100は、対象ベクトルの数と所定の設定値とに基づく数の複数の第2セントロイドを生成することにより、効率的な検索を可能にするセントロイド情報を生成することができる。
また、実施形態に係る生成装置100において、生成部132は、対象ベクトルの数を所定の設定値により除算した数の複数の第2セントロイドを生成する。
このように、実施形態に係る生成装置100は、対象ベクトルの数を所定の設定値により除算した数の複数の第2セントロイドを生成することにより、効率的な検索を可能にするセントロイド情報を生成することができる。
また、実施形態に係る生成装置100において、取得部131は、所定のクラスタリング手法によりベクトルが対応付けられた第1セントロイドであって、新たに追加されるベクトルが距離に応じて対応付けられる第1セントロイドの対応情報を取得する。
このように、実施形態に係る生成装置100は、所定のクラスタリング手法によりベクトルが対応付けられた第1セントロイドであって、新たに追加されるベクトルが距離に応じて対応付けられる第1セントロイドの対応情報を取得することにより、効率的な検索を可能にするセントロイド情報を生成することができる。
また、実施形態に係る生成装置100において、取得部131は、対応付けられるベクトルの数の差が所定値以内になるように所定のクラスタリング手法によりベクトルが対応付けられた第1セントロイドであって、新たに追加されるベクトルが距離に応じて対応付けられる第1セントロイドの対応情報を取得する。
このように、実施形態に係る生成装置100は、対応付けられるベクトルの数の差が所定値以内になるように所定のクラスタリング手法によりベクトルが対応付けられた第1セントロイドであって、新たに追加されるベクトルが距離に応じて対応付けられる第1セントロイドの対応情報を取得することにより、効率的な検索を可能にするセントロイド情報を生成することができる。
また、実施形態に係る生成装置100において、生成部132は、複数の第2セントロイドを生成した場合、複数の第2セントロイドを第1セントロイドに対応付け、第1ベクトル群に含まれる各ベクトルと第1セントロイドとの対応付けを解除する。
このように、実施形態に係る生成装置100は、複数の第2セントロイドを生成した場合、複数の第2セントロイドを第1セントロイドに対応付け、第1ベクトル群に含まれる各ベクトルと第1セントロイドとの対応付けを解除することにより、効率的な検索を可能にするセントロイド情報を生成することができる。
また、実施形態に係る生成装置100において、生成部132は、複数の第2セントロイドの各々に対応付けられるベクトルの数が所定の閾値以下である場合、複数の第2セントロイドの各々に対応付けられたベクトルを、第1セントロイドに対応付け、第1セントロイドと複数の第2セントロイドとの対応付けを解除する。
このように、実施形態に係る生成装置100は、複数の第2セントロイドの各々に対応付けられるベクトルの数が所定の閾値以下である場合、複数の第2セントロイドの各々に対応付けられたベクトルを、第1セントロイドに対応付け、第1セントロイドと複数の第2セントロイドとの対応付けを解除することにより、効率的な検索を可能にするセントロイド情報を生成することができる。
また、実施形態に係る生成装置100において、生成部132は、複数の第2セントロイドを削除する。
このように、実施形態に係る生成装置100は、複数の第2セントロイドを削除することにより、効率的な検索を可能にするセントロイド情報を生成することができる。
また、実施形態に係る生成装置100において、生成部132は、複数の第2セントロイドのうち、一の第2セントロイドに対応付けられた第2ベクトル群に関する情報が所定の条件を満たす場合、第2ベクトル群に含まれるベクトルである対象ベクトルの各々が距離に応じて対応付けられる複数の第3セントロイドを生成する。
このように、実施形態に係る生成装置100は、複数の第2セントロイドのうち、一の第2セントロイドに対応付けられた第2ベクトル群に関する情報が所定の条件を満たす場合、第2ベクトル群に含まれるベクトルである対象ベクトルの各々が距離に応じて対応付けられる複数の第3セントロイドを生成することにより、効率的な検索を可能にするセントロイド情報を生成することができる。
〔10.ハードウェア構成〕
上述してきた実施形態に係る生成装置100は、例えば図13に示すような構成のコンピュータ1000によって実現される。図13は、生成装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。コンピュータ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が実施形態に係る生成装置100として機能する場合、コンピュータ1000のCPU1100は、RAM1200上にロードされたプログラムを実行することにより、制御部130の機能を実現する。コンピュータ1000のCPU1100は、これらのプログラムを記録媒体1800から読み取って実行するが、他の例として、他の装置からネットワークNを介してこれらのプログラムを取得してもよい。
以上、本願の実施形態のいくつかを図面に基づいて詳細に説明したが、これらは例示であり、発明の開示の行に記載の態様を始めとして、当業者の知識に基づいて種々の変形、改良を施した他の形態で本発明を実施することが可能である。
〔11.その他〕
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、各図に示した各種情報は、図示した情報に限られない。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
また、上述してきた各実施形態に記載された各処理は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
また、上述してきた「部(section、module、unit)」は、「手段」や「回路」などに読み替えることができる。例えば、取得部は、取得手段や取得回路に読み替えることができる。