(57)【特許請求の範囲】
【請求項１】
木構造索引の構築手段と木構造索引の検索手段とを備える類似特徴量の検索装置により，予め，多次元空間におけるベクトルとして表現される特徴量を蓄え，特徴量の多次元空間を，各領域内の特徴量点の数の最大が所定値のｄ以下になるように，全ての次元において領域を次元毎に等分割する領域等分割型木構造索引を記憶する索引格納装置を有し，前記索引格納装置に格納される領域等分割型木構造索引を利用して，検索キーとして与えられた特徴量との距離が最も近い特徴量を返却する類似特徴量の検索方法において，
前記木構造索引の構築手段が，前記索引格納装置に格納される領域等分割型木構造索引における木構造の各階層において，下位の階層にノードが存在しない全ての空ノードそれぞれに対して，同一階層内のノードで下位の階層にノードが存在する他のノード群の中で，当該空ノードに距離的に最も近いノードの下位ノードをリンク先とするリンク情報を，前記索引格納装置に格納される領域等分割型木構造索引における空ノードに格納する処理過程と，
前記木構造索引の検索手段が，検索キーが前記索引格納装置に格納される領域等分割型木構造索引における空ノードに対応する領域のベクトルであっても，前記リンクを辿ることで最下位階層の葉ノードを求め，その葉ノード内で最も距離的に近い特徴量ベクトルを，最近傍点として返却する処理過程とを有する
ことを特徴とする類似特徴量の検索方法。
【請求項２】
請求項１記載の類似特徴量の検索方法において，
前記木構造索引の構築手段が，空ノードからリンクを張るノードを求める際に，空ノードの領域の中心点に相当するベクトルと，下位の階層にノードが存在するノードの領域の中心点に相当するベクトルとの間，または空ノードの領域の中心点に相当するベクトルと，下位の階層にノードが存在するノード配下に含まれるベクトル群の重心との間で，距離計算を行い，
最も距離的に近いノードをリンク先として決定する処理過程を有する
ことを特徴とする類似特徴量の検索方法。
【請求項３】
請求項１または請求項２記載の類似特徴量の検索方法において，
前記木構造索引の構築手段が，木構造索引にベクトルを追加する際に，木構造の根からベクトルを追加する最下位階層の葉ノードまで辿るときに通過する全ての中間ノードにおいて，空ノードからのリンクが張られているノードが最も距離的に近いノードでなくなってしまった場合に，距離の再計算を行い，
最も距離的に近いノードを求めリンクを張り直す処理過程を有する
ことを特徴とする類似特徴量の検索方法。
【請求項４】
請求項１または請求項２記載の類似特徴量の検索方法において，
前記木構造索引の構築手段が，木構造索引に複数のベクトルをまとめて追加する場合に，個々のベクトルを木構造に追加する度にリンクのメンテナンスを行わず，全てのベクトルを追加し終わった後，一括して空ノードからのリンクを張る処理過程を有する
ことを特徴とする類似特徴量の検索方法。
【請求項５】
木構造索引の構築手段と木構造索引の検索手段とを備える類似特徴量の検索装置により，予め，多次元空間におけるベクトルとして表現される特徴量を蓄え，特徴量の多次元空間を，各領域内の特徴量点の数の最大が所定値のｄ以下になるように，全ての次元において領域を次元毎に等分割する領域等分割型木構造索引を記憶する索引格納装置を有し，前記索引格納装置に格納される領域等分割型木構造索引を利用して，検索キーとして与えられた特徴量との距離が最も近い特徴量を返却する類似特徴量の検索方法において，
前記木構造索引の構築手段が，前記索引格納装置に格納される領域等分割型木構造索引における木構造上の途中のノードを複数抽出し，それらの各ノードに対応する多次元空間内の領域の範囲を示す情報をショートカットとしてショートカット情報格納装置に登録する処理過程と，
前記木構造索引の検索手段が，検索キーベクトルが，前記ショートカット情報格納装置にショートカットとして登録されているノードに対応する多次元空間内の領域の範囲に含まれるベクトルであるかどうかの判定を行い，領域内のベクトルの場合，ショートカットとして登録してあるノードを基点として，木構造を辿ることにより最近傍点を求め，領域外のベクトルの場合，木構造の根から辿ることにより最近傍点を求める処理過程とを有する
ことを特徴とする類似特徴量の検索方法。
【請求項６】
請求項５記載の類似特徴量の検索方法において，
前記木構造索引の構築手段が，ショートカットとして登録するノードを抽出する際に，木構造の階層が根からｎ段以下の全てのノードをショートカットとして抽出する方法，ｎ段以下の特定の部分木内の全てのノードをショートカットとして抽出する方法，木構造の階層が根からｎ段おきの階層中の全てのノードをショートカットして抽出する方法，木構造の階層の深い順にｎ％のノードをショートカットして抽出する方法，もしくは木構造の中のノードの中で充填率の高い順にｎ％のノードをショートカットして抽出する方法，またはこれらの方法のうちのいくつかを組み合わせた方法を用いる
ことを特徴とする類似特徴量の検索方法。
【請求項７】
木構造索引の構築手段と木構造索引の検索手段とを備える類似特徴量の検索装置により，予め，多次元空間におけるベクトルとして表現される特徴量を蓄え，特徴量の多次元空間を，各領域内の特徴量点の数の最大が所定値のｄ以下になるように，全ての次元において領域を次元毎に等分割する領域等分割型木構造索引を記憶する索引格納装置を有し，前記索引格納装置に格納される領域等分割型木構造索引を利用して，検索キーとして与えられた特徴量との距離が最も近い特徴量を返却する類似特徴量の検索方法において，
前記木構造索引の構築手段が，前記索引格納装置に格納される領域等分割型木構造索引における木構造の各階層において，下位の階層にノードが存在しない全ての空ノードそれぞれに対して，同一階層内のノードで下位の階層にノードが存在する他のノード群の中で，当該空ノードに距離的に最も近いノードの下位ノードをリンク先とするリンク情報を，前記索引格納装置に格納される領域等分割型木構造索引における空ノードに格納するとともに，前記索引格納装置に格納される領域等分割型木構造索引における木構造上の途中のノードを複数抽出し，それらの各ノードに対応する多次元空間内の領域の範囲を示す情報をショートカットとしてショートカット情報格納装置に登録し，かつ，前記空ノードからのリンクを，そのノードより下位の部分木内のショートカットとして登録されているノードとする処理過程と，
前記木構造索引の検索手段が，検索キーベクトルが，前記ショートカット情報格納装置にショートカットとして登録されているノードに対応する多次元空間内の領域の範囲に含まれるベクトルであるかどうかの判定を行い，領域内のベクトルの場合，ショートカットとして登録してあるノードを基点として，木構造を辿ることにより最近傍点を求め，領域外のベクトルの場合，木構造の根から辿ることにより最近傍点を求め，検索キーが空ノードに対応する領域のベクトルであっても，前記リンクを辿ることで最下位階層の葉ノード内で最も距離的に近い特徴量ベクトルを，最近傍点として返却する処理過程とを有する
ことを特徴とする類似特徴量の検索方法。
【請求項８】
木構造索引の構築手段と木構造索引の検索手段とを備える類似特徴量の検索装置により，予め，多次元空間におけるベクトルとして表現される特徴量を蓄え，特徴量の多次元空間を，各領域内の特徴量点の数の最大が所定値のｄ以下になるように，全ての次元において領域を次元毎に等分割する領域等分割型木構造索引を記憶する索引格納装置を有し，前記索引格納装置に格納される領域等分割型木構造索引を利用して，検索キーとして与えられた特徴量との距離が最も近い特徴量を返却する類似特徴量の検索方法において，
前記木構造索引の構築手段が，予め，分割された木構造索引を構築する特徴量ベクトルの集合のそれぞれについて領域等分割型木構造索引の情報を生成することにより木構造索引を構築し，索引格納装置に格納する処理過程と，
前記木構造索引の構築手段が，前記分割構築された木構造索引を統合し，一つの木構造索引として索引格納装置に格納する処理過程と，
前記木構造索引の検索手段が，前記統合され一つの木構造索引として索引格納装置に格納された領域等分割型木構造索引の情報を用いて，検索キーとして与えられた特徴量との距離が最も近い特徴量を返却する処理過程とを有する
ことを特徴とする類似特徴量の検索方法。
【請求項９】
木構造索引の構築手段と木構造索引の検索手段とを備える類似特徴量の検索装置により，予め，多次元空間におけるベクトルとして表現される特徴量を蓄え，特徴量の多次元空間を，各領域内の特徴量点の数の最大が所定値のｄ以下になるように，全ての次元において領域を次元毎に等分割する領域等分割型木構造索引を記憶する索引格納装置を有し，前記索引格納装置に格納される領域等分割型木構造索引を利用して，検索キーとして与えられた特徴量との距離が最も近い特徴量を返却する類似特徴量の検索方法において，
前記木構造索引の構築手段が，前記索引格納装置に格納される領域等分割型木構造索引における葉ノードに，その葉ノードと隣接する他の葉ノードの情報を格納する処理過程と，
前記木構造索引の検索手段が，前記索引格納装置に格納される領域等分割型木構造索引における葉ノードと，その葉ノードの隣接葉ノードの中から，最も近い特徴量を求め，それを最近傍点として返却する処理過程とを有する
ことを特徴とする類似特徴量の検索方法。
【請求項１０】
予め，多次元空間におけるベクトルとして表現される特徴量を蓄え，特徴量の多次元空間を，各領域内の特徴量点の数の最大が所定値のｄ以下になるように，全ての次元において領域を次元毎に等分割する領域等分割型木構造索引を記憶する索引格納装置を有し，前記索引格納装置に格納される領域等分割型木構造索引を利用して，検索キーとして与えられた特徴量との距離が最も近い特徴量を返却する類似特徴量の検索装置において，
前記索引格納装置に格納される領域等分割型木構造索引における木構造の各階層において，下位の階層にノードが存在しない全ての空ノードそれぞれに対して，同一階層内のノードで下位の階層にノードが存在する他のノード群の中で，当該空ノードに距離的に最も近いノードの下位ノードをリンク先とするリンク情報を，前記索引格納装置に格納される領域等分割型木構造索引における空ノードに格納する木構造索引の構築手段と，
検索キーが前記索引格納装置に格納される領域等分割型木構造索引における空ノードに対応する領域のベクトルであっても，前記リンクを辿ることで最下位階層の葉ノードを求め，その葉ノード内で最も距離的に近い特徴量ベクトルを，最近傍点として返却する木構造索引の検索手段とを備える
ことを特徴とする類似特徴量の検索装置。
【請求項１１】
予め，多次元空間におけるベクトルとして表現される特徴量を蓄え，特徴量の多次元空間を，各領域内の特徴量点の数の最大が所定値のｄ以下になるように，全ての次元において領域を次元毎に等分割する領域等分割型木構造索引を記憶する索引格納装置を有し，前記索引格納装置に格納される領域等分割型木構造索引を利用して，検索キーとして与えられた特徴量との距離が最も近い特徴量を返却する類似特徴量の検索装置において，
前記索引格納装置に格納される領域等分割型木構造索引における木構造上の途中のノードを複数抽出し，それらの各ノードに対応する多次元空間内の領域の範囲を示す情報をショートカットとしてショートカット情報格納装置に登録する木構造索引の構築手段と，
検索キーベクトルが，前記ショートカット情報格納装置にショートカットとして登録されているノードに対応する多次元空間内の領域の範囲に含まれるベクトルであるかどうかの判定を行い，領域内のベクトルの場合，ショートカットとして登録してあるノードを基点として，木構造を辿ることにより最近傍点を求め，領域外のベクトルの場合，木構造の根から辿ることにより最近傍点を求める木構造索引の検索手段とを備える
ことを特徴とする類似特徴量の検索装置。
【請求項１２】
予め，多次元空間におけるベクトルとして表現される特徴量を蓄え，特徴量の多次元空間を，各領域内の特徴量点の数の最大が所定値のｄ以下になるように，全ての次元において領域を次元毎に等分割する領域等分割型木構造索引を記憶する索引格納装置を有し，前記索引格納装置に格納される領域等分割型木構造索引を利用して，検索キーとして与えられた特徴量との距離が最も近い特徴量を返却する類似特徴量の検索装置をコンピュータによって構成するためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって，
前記コンピュータを，
前記索引格納装置に格納される領域等分割型木構造索引における木構造の各階層において，下位の階層にノードが存在しない全ての空ノードそれぞれに対して，同一階層内のノードで下位の階層にノードが存在する他のノード群の中で，当該空ノードに距離的に最も近いノードの下位ノードをリンク先とするリンク情報を，前記索引格納装置に格納される領域等分割型木構造索引における空ノードに格納する木構造索引の構築手段と，
検索キーが前記索引格納装置に格納される領域等分割型木構造索引における空ノードに対応する領域のベクトルであっても，前記リンクを辿ることで最下位階層の葉ノードを求め，その葉ノード内で最も距離的に近い特徴量ベクトルを，最近傍点として返却する木構造索引の検索手段として
機能させるためのプログラムを記録した
ことを特徴とする類似特徴量の検索プログラム記録媒体。
【請求項１３】
予め，多次元空間におけるベクトルとして表現される特徴量を蓄え，特徴量の多次元空間を，各領域内の特徴量点の数の最大が所定値のｄ以下になるように，全ての次元において領域を次元毎に等分割する領域等分割型木構造索引を記憶する索引格納装置を有し，前記索引格納装置に格納される領域等分割型木構造索引を利用して，検索キーとして与えられた特徴量との距離が最も近い特徴量を返却する類似特徴量の検索装置をコンピュータによって構成するためのプログラムを記録したコンピュータ読み取り可能な記録媒体であって，
前記コンピュータを，
前記索引格納装置に格納される領域等分割型木構造索引における木構造上の途中のノードを複数抽出し，それらの各ノードに対応する多次元空間内の領域の範囲を示す情報をショートカットとしてショートカット情報格納装置に登録する木構造索引の構築手段と，
検索キーベクトルが，前記ショートカット情報格納装置にショートカットとして登録されているノードに対応する多次元空間内の領域の範囲に含まれるベクトルであるかどうかの判定を行い，領域内のベクトルの場合，ショートカットとして登録してあるノードを基点として，木構造を辿ることにより最近傍点を求め，領域外のベクトルの場合，木構造の根から辿ることにより最近傍点を求める木構造索引の検索手段として
機能させるためのプログラムを記録した
ことを特徴とする類似特徴量の検索プログラム記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は，類似特徴量の検索方法および装置に係り，特に，画像，映像，モーション，音楽，音声などのマルチメディアデータに対する類似検索システムの実現やテキストの類似検索システム，または，インターネット上の画像のように，大量で，その量が日々増加するような対象に対し，高速な類似検索を実現するための類似特徴量の検索方法および装置に関する。
【０００２】
【従来の技術】
画像，映像，音楽などのマルチメディアデータに対する類似検索とは，検索対象としてデータベース中に蓄えられた画像や音楽から抽出された１次元以上の多次元特徴量と，検索キーとして与えられた画像や音楽から抽出された多次元特徴量との間で，距離計算等を行うことにより類似度を求め，最も類似度の高い順に上位ｋ件（ｋは１以上の整数）を求めるような検索を指す。
【０００３】
ここで，特徴量としては，色，模様，構造，形状などの画像等，マルチメディア情報の内容特徴や，地図座標や，テキスト内のキーワード重み等がある。
【０００４】
最も単純な類似検索では，検索キーから得られる特徴量とデータベース内の全特徴量との類似計算が検索実行時に行われる。この検索の高速化のために，特願平１０−２０３５８３号および特願平１１−２２９４５９号で示される事前類似計算結果等を用いる手法がある。
【０００５】
この手法は，非常に高速な検索手法であるが，データベースに存在することが保証されていない特徴量を検索キーとして類似検索を行う場合には，最近傍検索装置によってデータベース内の特徴量に最も類似度の高い特徴量を求める必要がある。この最近傍検索装置として，領域等分割型木構造索引を用いる方法がある。
【０００６】
領域等分割型木構造索引とは，領域の体積を軸毎にｎｋ  （ｎのｋ乗，ｎは次元毎の等分割数，ｋは特徴量点の次元数）分割を行う方法であり，特に領域の体積を２ｋ  乗分割する領域２ｋ  等分割型木構造索引（多次元４分割型木構造索引）がよく用いられる。
【０００７】
また，この領域２ｋ  等分割型木構造索引のうち，２次元の特徴量点に対して軸毎に２分割する索引を４分木（Ｑｕａｄ  Ｔｒｅｅ）索引，３次元の特徴量に対して軸毎に２分割する索引を８分木（Ｏｃｔ  Ｔｒｅｅ）索引と呼ぶ。また，これらの領域等分割型木構造索引を総称して，Ｑｕａｄ  Ｔｒｅｅ索引と呼ぶこともある。
【０００８】
図１２は，領域に含まれる点の数を１までとした場合の，２次元の特徴量に対する領域等分割型木構造索引の構築の例を示している。
【０００９】
図１２（Ａ）において，点１が挿入された後，点２を挿入したとき，領域内に点が２つ存在するので，Ｘ軸，Ｙ軸ともに２等分され，４つの領域に分割される。分割後の領域ｂには，２つの点（点１および点２）が存在するので，領域ｂをＸ軸，Ｙ軸ともに２等分し，さらに４つの領域に分割する。ここで各領域に含まれる点の数が１となったので，さらなる分割は不要である。
【００１０】
次に，点３から点６まで挿入を行うが，挿入位置の領域の点の数は１なので，分割は不要である。次に，点７を挿入すると，領域ｃの点の数が２となったので，領域ｃをＸ軸，Ｙ軸ともに２分割し，４つの領域に分ける。その結果，点の数が２以上の領域がなくなったので，さらなる分割は不要である。
【００１１】
図１２（Ｂ）は，挿入終了後の状態を木構造にしたものである。根ノードａは平面全体に対応している。また，ノードｂは領域ｂに，ノードｃは領域ｃに，各々対応している。また，葉ノードに書かれている数字は（Ａ）中の同番号の点に対応しており，数字が記入されていないノードは領域内に点が存在しないことを意味している。
【００１２】
ここで，木構造上の節をノードと呼び，下位の階層に節もしくは点があるようなノードを中間ノード，下位の階層に点のみしかないノードを葉ノード，下位の階層にノードも点も存在しないノードを空ノードと呼ぶ。また，木構造の最上位のノードを根ノードと呼ぶ。
【００１３】
図１３は，２次元の特徴量に対する領域等分割型木構造索引を用いて，最近傍点を検索する例を示している。
【００１４】
図１３（Ａ）および（Ｂ）に点Ａを挿入する場合には，点Ａの座標が，領域ａ内の４つの領域のどの領域に含まれるかの判定を行う。図１３（Ａ）の場合は，領域ｃがその領域にあたる。次に，領域ｃ内でどの領域に含まれるかの判定を行う。図１３（Ａ）の場合は，点６が存在する領域ｄがこれにあたり，領域ｄは図１３（Ｂ）より，葉ノードであることがわかっているので，領域ｄに含まれる点６を最近傍点として返却する。
【００１５】
また，点Ｂの最近傍点を求める検索の場合には，領域ｃを求める過程は，点Ａの場合と同様であるが，領域ｃ内でどの領域に含まれるかの判定を行うと，領域ｅがその領域にあたる。領域ｅは図１３（Ｂ）より，空のノードであることがわかっているので，最近傍点が存在しない旨の返却を行う。
【００１６】
【発明が解決しようとする課題】
従来の領域等分割型木構造索引による最近傍検索は，以下のような問題がある。
【００１７】
（１）検索結果が存在しないという問題
検索キーとして与えられたベクトルが含まれる領域を探索する際に，木構造索引中の各階層において，含まれる領域の判定を行うが，含まれると判定された領域が空ノードの場合，最近傍点が存在しないと判定されてしまい，最近傍点の返却ができない。この場合，最近傍点を探し出すためには，例えば上位のノードの配下にある空ノードではない全ての葉ノードについて網羅的に最近傍点であるかどうかを判定するための距離計算が必要になるため，検索性能が著しく悪化することになる。
【００１８】
（２）検索性能の問題
索引を構築する対象のベクトルの数が非常に多くなった場合，木構造が非常に深くなり，検索速度が悪化する。また，索引を構築する対象のベクトル群のデータが非常に偏っている場合，つまり，データの分布として特定の点の近傍に非常に多数の点が存在する場合，木構造索引は，各ノードに含まれる点の最大数が決まっているため，多段にわたって分割を繰り返す。このとき，ノード内の点の数は最大数以下にする必要があるため，木構造が非常に深くなり検索速度が悪化する。
【００１９】
（３）構築速度の問題
点の数が非常に多くなった場合，木構造も深くなるので，木構造の構築に非常に多大な時間がかかる。
【００２０】
（４）検索精度の問題
検索時に点を挿入する過程と同様に検索する方式は，隣接する領域との距離計算を行っていないため，検索キーが挿入されるべき葉ノードの領域内の点と最近傍点である保証がない。すなわち，挿入されるべき葉ノードの領域に隣接する他の領域に最近傍点が存在する可能性があるため，検索精度が良くない場合がある。
【００２１】
本発明は上記問題点の解決を図り，類似特徴量の検索に適した効率のよい検索を実現するための手段を提供することを目的とする。
【００２２】
【課題を解決するための手段】
本発明は，上記課題を解決するために，以下の手段を有する。
【００２３】
（１）検索結果を必ず返却する仕組み
予め，多次元空間におけるベクトルとして表現される特徴量（特徴量ベクトル）を蓄え，特徴量の多次元空間を，各領域内の特徴量点の数の最大が所定値のｄ以下になるように，全ての次元において領域を次元毎に等分割する領域等分割型木構造索引を有し，領域等分割型木構造索引を利用して，検索キーとして与えられた特徴量との距離が最も近い特徴量を返却するような類似特徴量の検索方法において，
木構造索引の構築時に，
木構造の各階層において，下位の階層にノードが存在しない全ての空ノードのそれぞれに対して，同一階層内のノードで下位の階層にノードが存在する他のノード群の中で，距離的に最も近いノードの下位ノードを参照するように，空ノードからリンクを張り，
木構造索引の検索時に，
検索キーが空ノードに対応する領域のベクトルであっても，リンクを辿ることで最下位階層の葉ノードを求め，その葉ノード内で最も距離的に近い特徴量ベクトルを，最近傍点として返却する。
【００２４】
このことにより，検索キーとして与えられたベクトルが含まれる領域を探索する際に，木構造索引中の各階層において，含まれる領域の判定を行うが，含まれると判定された領域が空ノードの場合でも，リンク先のノードを辿ることで最近傍点の返却が可能になる。
【００２５】
また，空ノードからリンクを張るノードを求める方法としては，空ノードの領域の中心点に相当するベクトルと，下位の階層にノードが存在するノードの領域の中心点に相当するベクトルとの間で，距離計算を行い，最も距離的に近いノードをリンク先とするような方法や，空ノードの領域の中心点に相当するベクトルと，下位の階層にノードが存在するノード配下に含まれるベクトル群の重心との間で，距離計算を行い，最も距離的に近いノードをリンク先とするような方法をとる。
【００２６】
また，構築後で空ノードからのリンクも全て張られている状態の木構造索引にデータ（ベクトル）を追加する際には，木構造の根からベクトルを追加する最下位階層の葉ノードまで辿る際に通過する全ての中間ノードにおいて，空ノードからのリンクが張られているノードが最も距離的に近いノードでなくなってしまった場合に，距離の再計算を行い，最も距離的に近いノードを求め，リンクを張り直す。このことより，データを追加後の木構造索引を利用した検索において，リンクが正しいノードに対して張り直されているので，正しい類似特徴量の検索が可能になる。
【００２７】
（２）検索性能の向上
木構造索引の構築時に，木構造上の途中のノードを複数抽出し，ショートカット（近道）として登録し，
検索時に，検索キーベクトルが，ショートカットとして登録されているリンクに対応する多次元空間内の領域の範囲に含まれるベクトルであるかどうかの判定を行い，領域内のベクトルの場合，ショートカットとして登録してあるノードを基点として，木構造を辿ることで最近傍点を求め，領域外のベクトルの場合，木構造の根から辿ることで最近傍点を求め，最近傍点を返却する。
【００２８】
このことにより，検索キーとして与えられたベクトルが，ショートカットとして登録されているノードに含まれる場合に，木構造の途中のノードを基点とする検索が可能となり，木構造が非常に深いときなどには，木構造の根を基点とする検索よりも非常に高速に検索することが可能になる。
【００２９】
ショートカットとして登録するノードを抽出する方法としては，以下の（ａ）  〜（ｄ）  の方法またはこれらのいくつかを組み合わせた方法を用いて，データ分布に従い，より高速化が図れるようにショートカットの登録を行う。なお，ｎ１  〜ｎ４  は，索引構築時に与えられた設定値または予めシステム内で定められた設定値である。
（ａ）  木構造の階層が根からｎ１  段以下の全てのノード，またはｎ１  段以下の特定の部分木内の全てのノードをショートカットとして抽出する。
（ｂ）  木構造の階層が根からｎ２  段おきの階層中の全てのノードをショートカットして抽出する。
（ｃ）  木構造の階層の深い順にｎ３  ％のノードをショートカットして抽出する。
（ｄ）  木構造の中のノードの中で充填率（空ノードでないノード数）の高い順にｎ４  ％のノードをショートカットして抽出する。
【００３０】
また，空ノードからのリンク先を，上記ショートカット先にすることで，木構造の部分木配下の探索をさらに高速化することが可能になる。
【００３１】
（３）木構造索引の構築の高速化
木構造索引にベクトルを大量に追加する場合には，個々のベクトルを木構造に追加する度にリンクのメンテナンスを行わず，全てのベクトルを追加し終わった後，一括して空ノードからのリンクを張る。このことにより，データを１件追加する度にリンクのメンテナンスを行う必要がないので，木構造索引の構築が高速になる。
【００３２】
また，予め，木構造索引を構築する特徴量ベクトルの集合を分割しておき，分割された特徴量ベクトルの集合それぞれにおいて木構造索引を構築し，分割構築された木構造索引を統合し，一つの木構造索引とする。このことにより，複数の計算機において，分割された特徴量ベクトルに対する木構造索引を同時に構築し統合することで，索引構築の並列性を高め，構築の高速化が図れる。
【００３３】
また，並列に木構造索引を構築する際に，リンクの生成は一切行わず，統合した結果の木構造索引においてのみリンクの生成を一括して行うことで，さらに構築の高速化が図れる。
【００３４】
（４）検索精度の向上
木構造索引の構築時に，葉ノードに，その葉ノードと隣接する他の葉ノードを記憶しておき，
木構造索引の検索時に，葉ノードと，その葉ノードの隣接葉ノードの中から，最も近い特徴量を求め，それを最近傍点として返却する。
【００３５】
このことにより，木構造を辿る際に，領域間の距離計算をすることなく，近傍特徴量を求めることができるので，検索が高速でかつ検索精度が高い。
【００３６】
【発明の実施の形態】
図１に，本発明に係る類似特徴量検索装置の構成例を示す。図１において，１はＣＰＵおよびメモリなどからなる類似特徴量検索装置，２はユーザが検索を行うためのディスプレイやキーボードなどを備えた検索指示装置，３は検索を高速化するための索引を構築する索引構築部，４は検索指示装置２または他のプログラムからの検索要求に対して索引を検索する索引検索部，５は検索対象となる特徴量のデータが格納されたデータベース（ＤＢ），６はデータベース５中の特徴量を高速に検索するための索引を格納する索引格納装置，７は木構造索引のノードを途中から検索できるようにするためのショートカット・リストを格納するショートカット・リスト格納装置を表す。
【００３７】
索引構築部３の木構造索引構築部３１は，データベース５内の特徴量を用いて木構造索引を構築する。この木構造索引の構築では，葉ノードに，その葉ノードと隣接する他の葉ノードを記憶しておく。ここで，木構造の構築を高速化するために，例えば，予め木構造索引を構築する特徴量ベクトルの集合を分割しておき，分割された特徴量ベクトルの集合のそれぞれについて，複数のプロセッサを用いて木構造索引を別々に構築し，その後，分割構築された木構造索引を統合して一つの木構造索引とするようにしてもよい。
【００３８】
次に，空ノードリンク生成部３２は，木構造索引構築部３１により生成された木構造索引の各中間ノードを参照し，空ノードに対するリンクを生成する。この結果を索引格納装置６に格納する。
【００３９】
さらに検索の高速化を可能にするために，ショートカット生成部３３を起動すると，まず，ショートカット抽出部３３１が動作し，索引格納装置６に格納された木構造索引に対して，ショートカットとなり得るノードの候補（ノードのリスト）を抽出する。ショートカット登録部３３２は，ショートカット抽出部３３１により抽出されたノードをショートカットして，ノードＩＤやノードの領域の座標値や索引内の該当ノードへのポインタなどの情報を持つショートカット・リストを生成し，ショートカット・リスト格納装置７に格納する。
【００４０】
検索時に，検索要求入力部４１に検索要求が入力されると，まず，検索キーがショートカット利用判定部４２に通知される。ショートカット利用判定部４２は，ショートカット・リスト格納装置７に格納されたショートカット・リストを参照し，検索キーがショートカットの利用が可能なものであるかどうかの判定を行う。
【００４１】
ショートカットの利用が可能であれば，ショートカット・リスト内に登録されている該当ノードへのポインタを用いて，そのノードを先頭に索引の探索を開始することを索引検索部４３に指示する。ショートカットの利用が可能でない場合，索引の最上位のノード（根ノード）から探索を開始することを索引検索部４３に指示する。
【００４２】
索引検索部４３は，索引格納装置６に格納された木構造索引について，指示されたノードから探索を開始し，検索キーとして与えられた特徴量との距離が最も近い類似特徴量を求める。このとき，検索キーが空ノードに対応する領域のベクトルであっても，空ノードリンク生成部３２によって生成されたリンクを辿ることで最下位階層の葉ノードを求め，その葉ノード内で最も距離的に近い特徴量ベクトルを，最近傍点とする。検索結果出力部４４は，索引検索部４３により求めた最近傍点の類似特徴量をもとに，事前類似検索結果等を用いて検索結果を得る。
【００４３】
本発明の具体的な実施の形態をさらに詳しく説明する。
【００４４】
〔第１の実施の形態〕
図２および図３に基づき，索引構築時に空ノードに対するリンクを生成する方法およびリンク付きの索引を利用した検索方法を説明する。
【００４５】
まず，索引にベクトルの追加を行う（Ｓ１）。追加を行う方法は従来技術と同様で，検索キーベクトルの座標が木構造中の各階層において，どの領域に含まれるかの判定を行い，含まれる領域のノード（階層）へと移動し，同様の判定を繰り返す。含まれる領域が葉ノードでかつ葉ノードにベクトルを追加できる場合，つまり，ノード内の点の数が最大数以下の場合には，葉ノードにベクトルを追加する。追加できない場合には，その領域を分割し，葉ノードに含まれていたベクトルおよび新たに追加しようとしているベクトルをその分割した領域に対して追加する処理を再帰的に行う。
【００４６】
次に，空ノードヘのリンクを生成する際には，木構造内の全ての階層において以下の操作を繰り返す（Ｓ２）。
【００４７】
まず，一つの階層において，下位の階層にノードが存在するような領域のノードを全て抽出する（Ｓ３）。そして，その階層における全ての空ノードに対して，以下の処理を繰り返す（Ｓ４）。抽出された空ノードでないノードの集合と各空ノードとの間で距離計算を行い，最も距離的に近いノードを，その空ノードのリンク先として，リンクを生成する（Ｓ５）。
【００４８】
以上のリンク付き索引を利用して検索を行う場合には，以下の処理を行う。ただし，説明を簡単にするため，ここではショートカットはないものとする。まず，木構造の根ノードを基点として処理を開始し，現在着目しているノードは葉ノードかどうかを判定する（Ｓ１１）。葉ノードでない場合，検索キーが現在着目しているノード配下のどの領域に含まれるかの判定を行い，その領域を特定する（Ｓ１２）。次に，その領域は空ノードかどうかを判定し（Ｓ１３），空ノードであれば，その空ノードからリンクされるノードに移動し（Ｓ１４），ステップＳ１１以下の処理を繰り返す。空ノードでなければ，配下のノードに移動し（Ｓ１５），同様にステップＳ１１以下の処理を繰り返す。
【００４９】
ステップＳ１１で，着目しているノードが葉ノードであると判定された場合，検索キーと葉ノード内のベクトルとの間で距離計算を行い，距離的に最も近いベクトルを最近傍ベクトルとして検索要求元へ返却する（Ｓ１６）。
【００５０】
次に，図４を用いて，距離的に最も近いノードを求める方法を説明する。この方法は，図２のステップＳ５で用いられる。図４（Ａ）は，２次元ベクトル空間を軸毎に４分割する領域等分割型木構造索引の例で，領域の中心点を用いて，距離的に最も近いノードを求める方法を説明する図である。また，図４（Ｂ）は，２次元ベクトル空間を軸毎に２分割する領域等分割型木構造索引の例で，領域内の点の重心を用いて，距離的に最も近いノードを求める方法を説明する図である。
【００５１】
図４（Ａ）において，領域Ａ，Ｂ，Ｃ，Ｄが下位の階層にノードが存在する領域で，空き領域Ｚのリンク先を求めるものとする。まず，領域Ａ，Ｂ，Ｃ，Ｄの各領域の中心点は，ａ，ｂ，ｃ，ｄとなる。空き領域Ｚの中心点はｚとなる。中心点ｚと距離的に最も近いノードを求めるために，中心点ｚと各空でない領域の中心点との距離計算を行う。
【００５２】
距離ｚａ＝｛  （１．７５−  ０．２５）２  ＋（０．２５−  ０．２５）２  ｝１／２  ＝  １．５０
距離ｚｂ＝｛  （１．７５−  ０．２５）２  ＋（０．７５−  ０．２５）２  ｝１／２  ＝  １．５８
距離ｚｃ＝｛  （１．７５−  ０．２５）２  ＋（１．２５−  ０．２５）２  ｝１／２  ＝  １．８０
距離ｚｄ＝｛  （１．７５−  ０．２５）２  ＋（１．７５−  ０．２５）２  ｝１／２  ＝  ２．１２
その結果，中心点ａとの距離が最も近いため，空ノードＺのリンク先はノードＡとなる。
【００５３】
図４（Ｂ）において，領域Ａ，Ｃが下位の階層にノード（この例の場合は葉ノード）が存在する領域で，空き領域Ｚのリンク先を求めるものとする。まず，領域Ａ，Ｃ内の重心を求め，それぞれａ’，ｃ’とする。空き領域Ｚの中心点はｚとなる。中心点ｚと距離的に最も近いノードを求めるために，中心点ｚと各重心との距離計算を行う。
【００５４】
距離ｚａ’＝｛  （１．４７５  −０．５）２  ＋（０．５−０．４７５）２  ｝１／２  ＝  ０．９７５
距離ｚｃ’＝｛  （１．４２５  −０．５）２  ＋（１．３２５−０．５）２  ｝１／２  ＝  １．２３９
その結果，重心ａ’との距離が最も近いため，空きノードＺのリンク先はノードＡとなる。
【００５５】
また，中心と重心を組み合わせる方式でもかまわない。この場合，例えば空きでない領域の下位の階層のうち，さらにその配下の階層が空きでないノード群の中心を点と考え重心を求め，その重心と空きノードの中心との間の距離計算を行うようにしてもよい。
【００５６】
図５は，２次元ベクトル空間を軸毎に４分割する領域等分割型木構造索引において，空ノードからのリンクの例を示す図である。
【００５７】
例えば，分割された領域に対して，図５（Ａ）に示すように０から１５までの数字を割り振り，配列で管理する場合の例について説明する。領域１，７，９は空ノードを表し，距離計算の結果，それぞれ領域０，３，１３が最も距離的に近い領域で，その各々の領域に対してリンクが張ってある。この例におけるリンクの表現方法は，図５（Ｂ）の配列における「空ノード判定フラグ」で表現してある。フラグが負の場合には，下位の階層にノードが存在することを表し，正の場合には，同一階層中の最も距離的に近い領域の番号（配列ＩＤ）となっており，すなわちリンクを表現している。空ノードの場合には，下位階層が存在しないので，配列中の下位階層へのポインタの部分には何も入っていない。
【００５８】
図５（Ｂ）では，配列ＩＤでリンクを表現しているが，リンクを同一階層中最も距離的に近い領域が指す下位階層へのポインタそのものを，空ノードの下位階層へのポインタとしてコピーすることでリンクを表現してもかまわない。
【００５９】
〔第２の実施の形態〕
図６を用いて，ショートカットを生成する方法およびショートカットを用いた検索方法を説明する。
【００６０】
まず，従来方法と同様に特徴量ベクトルをもとに木構造索引を構築する（Ｓ２１）。次に，木構造上の途中のノードを複数抽出し（Ｓ２２），ショートカット（近道）として登録する（Ｓ２３）。
【００６１】
一方，木構造索引の検索時には，検索キーベクトルが，ショートカットとして登録されているリンクに対応する多次元空間内の領域の範囲に含まれるベクトルであるかどうかの判定を行う（Ｓ３１）。領域内のベクトルと判定された場合には，ショートカットとして登録してあるノードを基点として検索を開始し（Ｓ３２），木構造を辿ることで最近傍点を求め，返却する（Ｓ３４）。領域外のベクトルと判定された場合には，木構造の根のノードを基点として検索を開始し（Ｓ３３），木構造を辿ることで最近傍点を求め，返却する（Ｓ３４）。
【００６２】
図７を用いて，ショートカットの表現方法の例を説明する。図７（Ａ）は，２次元ベクトル空間を軸毎に４分割する領域等分割型木構造索引において，網掛けした領域３，４，１４がショートカット対象のノードの例を示している。
【００６３】
ショートカットは，図７（Ｂ）のような配列として表現される。各領域を表すのは配列ＩＤで，各領域毎にそれぞれの領域の範囲を示す各次元毎の座標情報を持つ。また，検索キーベクトルがその領域の範囲に含まれるとき，検索を開始する基点となるノードへのポインタ情報を持つ。例えば，ｐｔｒ１は，領域番号３に対応するノードへのポインタであり，ｐｔｒ２は，領域番号４に対応するノードへのポインタである。
【００６４】
領域内のベクトルかどうかの判定は，検索キーベクトルの各次元毎に，検索キーベクトルの座標が，各軸の範囲に入っているかどうかを判定し，全て範囲内の場合，領域内のベクトルと判定され，その領域をショートカットとして採用し，そのノードを基点として検索を開始する。一つの軸でも領域外と判定された場合には，そのショートカットは利用できない。
【００６５】
図８を用いて，ショートカットとして抽出するノード選択する方法を説明する。図８（Ａ）に示すように各領域内に特徴量点が分布していたとすると，図８（Ｂ）に示すような木構造索引が構築されていることになる。
（ａ）  図８の例において，木構造の階層が根から２段以下の全てのノードをショートカットとして抽出する場合には，ノードｂ，ｃ，ｄ，ｅ，ｆがショートカット対象となる。
（ｂ）  図８の例において，木構造の階層が根から３段以下の部分木を全てショートカット対象とする場合には，ノードｃ，ｄ，ｆがショートカット対象となる。
（ｃ）  図８の例において，木構造の階層が根から２段おきの階層を全てショートカットとする場合には，ノードｂ，ｄ，ｅがショートカット対象となる。
（ｄ）  図８の例において，木構造の階層が根から深い順に上位２０％以内をショートカットとする場合には，ノードの順番は，ｄ，｛ｃ，ｆ｝，｛ｂ，ｅ｝となるので，ノードｄがショートカット対象となる。
（ｅ）  図８の例において，木構造のノード中の充填率の高い順に上位２０％以内をショートカットする場合には，ノードの順番は，ｄ，｛ｂ，ｅ｝，｛ｃ，ｆ｝となるので，ノードｄがショートカット対象となる。
【００６６】
例えば，上記（ａ）  のケースで，ノードｂ，ｃ，ｄ，ｅ，ｆがショートカット対象になった場合，下位のノードｄの領域は，それより上位のノードｃの領域の範囲に含まれ，その領域はさらに上位のノードｂの領域の範囲に含まれる。そこで，図７（Ｂ）に示すようなショートカットのための配列（テーブル）では，下位のノードに対応する領域が，それより上位のノードに対応する領域よりも先に現れるようにし，ショートカットのための領域の検索は先頭から順番に行う。これにより，狭い範囲の領域へのショートカットを優先させて高速に検索することが可能になる。または，図７（Ｂ）に示すようなショートカットのための配列（テーブル）を，各階層毎にまとめて別々に作り，低い階層のものから順番にショートカットのための領域の検索を行うようにしてもよい。
【００６７】
〔第３の実施の形態〕
図９および図１０を用いて，木構造を並列に構築し，木構造を統合する方法を説明する。
【００６８】
点１から点１９までの全特徴量を点１から点９の集合と点１０から点１９の２つの集合に分割する。そして，それぞれの集合に対して，木構造を構築する。次に，構築された木構造において，木の根ノードから同一の階層のノード同士の統合を行う。その際に，統合するノード同士が同一の種類のノードの場合（中間ノードと中間ノードもしくは葉ノードと葉ノード）の場合には，その同一のノードを統合後の木構造に作り，それぞれの木構造からノード内の情報のコピーを行う。例えば，領域ｅにおいては，両方の木構造において中間ノードなので個々の下位ノード情報のコピーを行い，統合後の中間ノードｅを生成する。
【００６９】
一方，統合するノード同士が同一種類のノードでない場合には，葉ノードであるほうの情報を別領域に保存し，中間ノードの情報を，統合後の中間ノードとし，そのノードに対して，葉ノードの情報の挿入を行う。例えば，領域ｂにおいては，点１は葉ノードなので，別領域に保存し，中間ノードｂを統合後の中間ノードとし，その中間ノードに対して点１の挿入を行う。
【００７０】
上記操作を全てのノードについて行う。ただし，統合を行う木構造の各ノードに挿入可能な点の数の最大値は，統合前の木構造それぞれの各ノードに挿入可能な点の数の最大値の総和以上でなければならない。
【００７１】
〔第４の実施の形態〕
図１１を用いて，隣接ノードを求める方法および隣接ノードを使った検索方法の説明を行う。
【００７２】
図１１における領域ｃの隣接ノードを求める操作は，領域ｃに含まれる各々の点（点１，３，４）における近傍点の上位ｋ件を，例えば特願平１０−２０３５８３号および特願平１１−２２９４５９号で示される事前類似計算結果を用いて求め，どの事前類似計算結果にも含まれる点で領域ｃに含まれる点以外を選び出す。この結果選び出された点の集合を検索キーとして，木構造を探索し，各点が含まれる領域を隣接ノードとする。このように求められた隣接ノードを全て隣接ノードヘのリンクとして持たせてもよいし，その一部だけを隣接ノードヘのリンクとしてもかまわない。図１１の場合には，領域ｃに含まれる点の事前類似計算結果のうち，共通に現れる点で領域ｃに含まれないのは，点２になるので，点２の含まれる領域ｄを隣接ノードとしてリンクを付与する。
【００７３】
検索時には，検索キーとして点Ａが与えられた場合，領域ｃまで辿り着いたとき，領域ｃ内と隣接領域内の全ての点（点２）との間で距離計算を行い，最も近い点（点２）を最近傍点として返却する。
【００７４】
ここで用いている事前類似計算結果の求め方は，以下のとおりである。予め検索対象となるデータベース内の全ての特徴量をキーとし，データベース内における類似計算を行い，他の特徴量との類似度を計算する。そして，類似度の高い順にｋ件分のＩＤ情報を，類似度順付きで，必要によってはその類似度の値とともに，事前類似計算結果格納装置に格納する。これを利用することによって，検索キー特徴量としてデータベース内の特徴量が与えられた場合，その検索キー特徴量に対する事前類似検索結果を検索結果として返却することができ，検索時における類似度の計算を省略することが可能になる。
【００７５】
【発明の効果】
以上説明したように，本発明によれば，非常に高速でかつ精度の高い類似検索が可能になる。また，類似検索システムを高速に構築することが可能になる。
【図面の簡単な説明】
【図１】本発明の構成例を示す図である。
【図２】索引構築時に空ノードに対するリンクを生成する方法を説明するための図である。
【図３】リンク付きの索引を利用した検索方法を説明するための図である。
【図４】距離的に最も近いノード求める方法を説明するための図である。
【図５】空ノードに対するリンクの例を説明するための図である。
【図６】ショートカットを生成する方法およびショートカットを用いた検索方法を説明するための図である。
【図７】ショートカットの表現方法の例を説明するための図である。
【図８】ショートカットとして抽出するノードを選択する方法を説明するための図である。
【図９】木構造を並列に構築し，木構造を統合する方法を説明するための図である。
【図１０】木構造を並列に構築し，木構造を統合する方法を説明するための図である。
【図１１】隣接ノードを求める方法および隣接ノードを使った検索方法の説明するための図である。
【図１２】従来の領域等分割型木構造索引の構築例を示す図である。
【図１３】従来の領域等分割型木構造索引の検索例を示す図である。
【符号の説明】
１    類似特徴量検索装置
２    検索指示装置
３    索引構築部
４    索引検索部
５    データベース
６    索引格納装置
７    ショートカット・リスト格納装置
３１  木構造索引構築部
３２  空ノードリンク生成部
３３  ショートカット生成部
４１  検索要求入力部
４２  ショートカット利用判定部
４３  索引検索部
４４  検索結果出力部
３３１  ショートカット抽出部
３３２  ショートカット登録部
【図１】
0003615439.tif 000002
【図２】
0003615439.tif 000003
【図３】
0003615439.tif 000004
【図４】
0003615439.tif 000005
【図５】
0003615439.tif 000006
【図６】
0003615439.tif 000007
【図７】
0003615439.tif 000008
【図８】
0003615439.tif 000009
【図９】
0003615439.tif 000010
【図１０】
0003615439.tif 000011
【図１１】
0003615439.tif 000012
【図１２】
0003615439.tif 000013
【図１３】
0003615439.tif 000014