(57)【特許請求の範囲】
【請求項１】
記憶装置に蓄積された複数の多次元ベクトルデータ（次元数をＮとする）の中から、位置およびサイズに任意の多次元矩形領域内に存在する当該多次元ベクトルデータを検索する多次元ベクトル検索装置における多次元ベクトル検索方法において、
前記多次元ベクトルデータからＮ≧ｎなるｎ個の次元を選択して構成されるｎ次元ベクトルデータに関して、当該ｎ次元ベクトルデータの存在するｎ次元の領域全体を、（２のｋ乗）のｎ乗個のサブ領域群に分割し、各サブ領域を一意に識別して順序を規定する、ｋ桁の数値として表されるアドレス値を算出し、当該ｎ次元ベクトルデータの存在するｎ次元の各次元に、各次元の領域全体を２のｋ乗個のサブ領域群に分割し、該各サブ領域を一意に識別し、順序を規定し、ｋ桁の数値として表される軸アドレス値を算出し、
前記多次元ベクトルデータからアドレス値を算出し、該算出したアドレス値を前記多次元ベクトルデータに対応付けＢ−Ｔｒｅｅ構造を有するＢ−Ｔｒｅｅデータとして前記記憶装置に格納し、
多次元矩形領域を含む検索条件の入力に応じて、該入力された多次元矩形領域にてアドレス値順序が最小となる端点とアドレス値順序が最大となる端点に相当する検索最小アドレス値と検索最大アドレス値を算出し、前記算出した検索最小アドレス値に対応する軸アドレス値と、前記算出した検索最大アドレス値に対応する軸アドレス値と、前記算出した検索最小アドレス値に対応するＢ−Ｔｒｅｅ構造における格納位置と、前記算出した検索最大アドレス値に対応するＢ−Ｔｒｅｅデータにおける格納位置とをそれぞれ算出し、前記算出した検索最小アドレス値に対応するＢ−Ｔｒｅｅ構造における格納位置から前記算出した検索最大アドレス値に対応するＢ−Ｔｒｅｅ構造における格納位置に含まれる多次元ベクトルデータを対象として、それぞれについて軸アドレス値を算出し、前記算出した検索最小アドレス値に対応する軸アドレス値と前記算出した検索最大アドレス値に対応する軸アドレス値との比較演算により、特定される前記多次元ベクトルデータを得る第1の判定処理を処理し、
前記第1の判定処理で得た前記多次元ベクトルデータを前記記憶装置から参照して前記検索条件を満たすか否かを判定する第２の判定処理を行い、当該多次元ベクトルデータが前記検索条件を満たす場合は当該多次元ベクトルデータを前記記憶装置から読み出して検索結果として出力することを特徴とする多次元ベクトル検索方法。
【請求項２】
請求項１記載の多次元ベクトル検索方法において、前記多次元ベクトルデータを前記記憶装置に格納する際に、当該多次元ベクトルデータの各次元の概略値を元に算出される前記アドレス値と当該多次元ベクトルデータとを関連付けて別々に格納することを特徴とする多次元ベクトル検索方法。
【請求項３】
請求項１記載の多次元ベクトル検索方法において、前記アドレス値を算出する際に、前記多次元ベクトルデータについて所定の次元を選択してアドレス用ベクトルを作成し、当該アドレス用ベクトルの各次元の概略値を元に算出される値をアドレス値とすることを特徴とする多次元ベクトル検索方法。
【請求項４】
請求項１記載の多次元ベクトル検索方法において、前記アドレス値について一次元的順序を付ける規則を設定し、前記アドレス値をインデクスキーとしたＢ−Ｔｒｅｅを作成して前記データ対を蓄積し、前記第１の判定処理を行う際に、当該Ｂ−Ｔｒｅｅを用いて前記検索範囲の最小アドレス値と前記検索範囲の最大アドレス値の格納位置を求め、当該検索範囲の最小アドレス値よりも小さいアドレス値を持つ前記データ対と当該検索範囲の最大アドレス値よりも大きいアドレス値を持つ前記データ対については、前記第１の判定処理を行わないことを特徴とする多次元ベクトル検索方法。
【請求項５】
記憶装置に蓄積された複数の多次元ベクトルデータ（次元数をＮとする）の中から、位置およびサイズに任意の多次元矩形領域内に存在する当該多次元ベクトルデータを検索する多次元ベクトル検索装置において、
前記多次元ベクトル検索装置は、
前記多次元ベクトルデータからＮ≧ｎなるｎ個の次元を選択して構成されるｎ次元ベクトルデータに関して、当該ｎ次元ベクトルデータの存在するｎ次元の領域全体を、（２のｋ乗）のｎ乗個のサブ領域群に分割し、各サブ領域を一意に識別して順序を規定する、ｋ桁の数値として表されるアドレス値を算出し、当該ｎ次元ベクトルデータの存在するｎ次元の各次元に、各次元の領域全体を２のｋ乗個のサブ領域群に分割し、該各サブ領域を一意に識別し、順序を規定し、ｋ桁の数値として表される軸アドレス値を算出し、
前記多次元ベクトルデータからアドレス値を算出し、該算出したアドレス値を前記多次元ベクトルデータに対応付けＢ−Ｔｒｅｅ構造を有するＢ−Ｔｒｅｅデータとして前記記憶装置に格納し、
多次元矩形領域を含む検索条件の入力に応じて、該入力された多次元矩形領域にてアドレス値順序が最小となる端点とアドレス値順序が最大となる端点に相当する検索最小アドレス値と検索最大アドレス値を算出し、前記算出した検索最小アドレス値に対応する軸アドレス値と、前記算出した検索最大アドレス値に対応する軸アドレス値と、前記算出した検索最小アドレス値に対応するＢ−Ｔｒｅｅ構造における格納位置と、前記算出した検索最大アドレス値に対応するＢ−Ｔｒｅｅデータにおける格納位置とをそれぞれ算出し、前記算出した検索最小アドレス値に対応するＢ−Ｔｒｅｅ構造における格納位置から前記算出した検索最大アドレス値に対応するＢ−Ｔｒｅｅ構造における格納位置に含まれる多次元ベクトルデータを対象として、それぞれについて軸アドレス値を算出し、前記算出した検索最小アドレス値に対応する軸アドレス値と前記算出した検索最大アドレス値に対応する軸アドレス値との比較演算により、特定される前記多次元ベクトルデータを得る第1の判定処理を処理し、
前記第1の判定処理で得た前記多次元ベクトルデータを前記記憶装置から参照して前記検索条件を満たすか否かを判定する第２の判定処理を行い、当該多次元ベクトルデータが前記検索条件を満たす場合は当該多次元ベクトルデータを前記記憶装置から読み出して検索結果として出力することを特徴とする多次元ベクトル検索装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、多数のｎ（ｎ≧１）次元ベクトルデータが蓄積されたデータベース等から、ｎ次元空間内において、位置、サイズ共に任意のｎ次元矩形領域内に存在するベクトルデータを検索する多次元ベクトル検索方法に関し、特に、ｎが数十以上となる場合の検索に適用して有効な技術に関するものである。
【０００２】
【従来の技術】
従来、蓄積された複数のｎ次元ベクトルデータの中から、ｎ次元ベクトル空間内において、位置、サイズ共に任意のｎ次元矩形領域内に存在するベクトルデータを検索する方法が、ＰＣＴ／ＥＰ９７／０４５２０に開示されている。
【０００３】
この方法では、ベクトル空間を一次元的に順序付けることのできる領域に分割し、各ベクトルデータが属する領域によってベクトルデータを管理する。検索時には、ベクトル空間内で位置、サイズ共に任意のｎ次元矩形領域を検索範囲として、検索範囲と重なる領域を全て求め、求めた各領域内に存在するベクトルデータに対して、ベクトルデータの各次元値と検索範囲の各次元の最小値、最大値との比較を行う。ベクトルデータの各次元値の比較において、検索範囲内に存在すると判定されたベクトルデータを検索結果として出力する。
【０００４】
【発明が解決しようとする課題】
しかしながら、上記のような従来の方法では、対象データが数十次元以上の高次元ベクトルになると、検索するのに要する処理時間が増大するという問題があった。すなわち、上記公知例によれば、検索処理は「検索範囲と重なる領域を全て求める処理」と「ベクトルデータの各次元値と検索範囲の各次元の最小値、最大値との比較を行う処理」とに分けることができ、「検索範囲と重なる領域を全て求める処理」の処理オーダが、Ｏ（２ｎ×ａ（ｎ））（ａは１つの領域に対して検索範囲と重なるか否かをを判定する処理量）であり、「ベクトルデータの各次元値と検索範囲の各次元の最小値、最大値との比較を行う処理」の処理オーダが、Ｏ（ｒ×ｂ（ｎ））（ｒは検索結果となるデータ数、ｂは１件毎に検索範囲の各次元との比較を行う処理量）である。例えば、対象ベクトルデータが３２次元の場合には、「検索範囲と重なる領域を全て求める処理」の処理オーダは、Ｏ（約４０億×ａ（ｎ））となる。ａの処理時間を１μ秒と仮定しても、「検索範囲と重なる領域を全て求める処理」だけで４０００秒を要することになる。このように、上記従来の方法では、対象データの次元数が増加すると、検索処理時間が増大する。多次元ベクトル検索方法は、例えば類似画像検索のような検索システムに適用されるが、そのような検索システムにおいて要求される検索処理時間は１０万件程度のベクトルデータに対して「数秒程度」であり、上記従来の方法では、要求を満たすのは難しいと考えられる。
【０００５】
本発明の目的は上記問題を改善するために、ｎが数十以上の場合でも、位置、サイズ共に任意のｎ次元矩形領域内に存在するｎ次元ベクトルデータを検索するのに要する処理時間に対し、検索対象となるベクトルデータの次元数の影響を減らす技術を提供することにある。
【０００６】
【課題を解決するための手段】
上記問題を改善するために、蓄積された複数の多次元ベクトルデータの中から、位置、サイズ共に任意の多次元矩形領域内に存在する当該多次元ベクトルデータを検索する多次元ベクトル検索方法において、前記多次元矩形領域を検索条件として入力し、前記多次元ベクトルデータと当該多次元ベクトルデータの各次元の概略値を元に算出されるアドレス値とからなるデータ対に対して、当該アドレス値を用いて第１の判定処理を行い、当該アドレス値が前記検索条件を満たす場合に、当該データ対の多次元ベクトルデータを用いて第２の判定処理を行い、当該ベクトルデータが前記検索条件を満たす場合に、当該多次元ベクトルデータを検索結果として出力するようにする。すなわち、本発明による検索処理は、検索結果の候補となるデータを絞り込む「第１の判定処理」と、検索結果の候補となるデータを対象にして、最終的に検索結果となるデータを求める「第２の判定処理」とに分けられる。第１の判定処理の処理オーダは、Ｏ（Ｎ×ｆ（ｎ））（Ｎは蓄積データ数、ｆは１件毎の前判定処理量）であり、第２の判定処理の処理オーダは、Ｏ（Ｎ’×ｇ（ｎ））（Ｎ’は本判定処理の対象となるデータ数、ｇは１件毎の本判定処理量）であるので、検索処理全体の処理オーダはＯ（Ｎ×ｆ（ｎ）＋Ｎ’×ｇ（ｎ））となる。アドレス値はベクトルデータの各次元値の概略値を元に算出されるので、アドレス値のサイズはベクトルデータのサイズよりも小さくなり、結果として、ｆ（ｎ）＜＜ｇ（ｎ）となる。また、本発明においては、経験的観測により、第１の判定処理を行うことにより、第２の判定処理の対象となるデータ数を検索結果となるデータ数の３倍程度にまで絞り込むことが期待できる。例えば、１０万件の蓄積データから１００件の検索結果を出力する検索では、第１の判定処理の処理オーダＯ（１０万×ｆ（ｎ））に対して、第２の判定処理の処理オーダはＯ（３００×ｇ（ｎ））となる。ここで、経験的観測により、ファイルＩ／Ｏを考慮した処理時間として、ｆの処理時間を１０μ秒、ｇの処理時間を１ｍ秒と仮定すると、第１の判定処理の処理時間が１秒程度、第２の判定処理の処理時間が０．３秒程度であり、検索処理全体で１．３秒となるので、１０万件程度のベクトルデータに対して「数秒程度」という要求を満たし得る性能であるということができる。また、ＣＰＵ演算はファイルＩ／Ｏに比べて処理時間が非常に短いので、検索対象となるベクトルデータの次元数が増加しても、検索処理全体の処理量にはほとんど影響を与えない。
【０００７】
以上のように本発明の多次元ベクトル検索方法によれば、ｎが数十以上の場合でも、位置、サイズ共に任意のｎ次元矩形領域内に存在するｎ次元ベクトルデータを検索するのに要する処理時間を、処理量が検索対象となるベクトルデータの次元数にしたがって増大せず、１０万件程度のベクトルデータに対して「数秒程度」という要求を満し得る時間にまで減らすことが可能である。
【０００８】
【発明の実施の形態】
次に、本発明の一実施形態について図面を参照して説明する。
【０００９】
図１は本実施形態の多次元ベクトル検索方法の原理を示す図である。本実施形態では、多次元空間４０３に分布する、１０個のベクトルデータ３０３から検索範囲４０４内に存在するベクトルデータ３０３を求める手順として、まず、第１の判定処理を行うことにより、１０個のベクトルデータ３０３から、検索範囲４０４内に存在し得るベクトルデータ３０３である、図の網掛け部分に存在する３個のベクトルデータ３０３に絞り込む。次に、絞り込まれた３個のベクトルデータ３０３に対してのみ、第２の判定処理を行い、検索範囲４０４内に存在する２個のベクトルデータ３０３を求める。ここで、第１の判定処理の計算量が非常に少ないので、検索処理に要する時間を減らすことができる。
【００１０】
図２は本実施形態の多次元ベクトル検索装置の構成を示す図である。図２に示すように本実施形態の多次元ベクトル検索装置は、ＣＰＵ１００と、入力装置１０１と、出力装置１０２と、バス１０３と、メモリ２００と、二次記憶装置３００とから構成される。本システムの蓄積処理実行時は、蓄積処理プログラム２０１と、アドレス算出プログラム２０３と、Ｂ−Ｔｒｅｅプログラム２０４とがメモリ２００に格納され、ＣＰＵ１００で実行される。入力装置１０１から入力されたベクトルデータ３０３がメモリ２００に渡り、蓄積処理プログラム２０１がＢ−Ｔｒｅｅデータ３０１を更新し、アドレス値３０２、ベクトルデータ３０３を二次記憶装置３００に格納する。本システムの検索処理実行時は、検索処理プログラム２０２と、アドレス算出プログラム２０３と、Ｂ−Ｔｒｅｅプログラム２０４と、軸アドレス算出プログラム２０５と、範囲内判定プログラム２０６とがメモリ２００に格納され、ＣＰＵ１００で実行される。ここで、Ｂ−Ｔｒｅｅプログラム２０４は、一般的に用いられているＢ−Ｔｒｅｅ処理を行うプログラムである。入力装置１０１から入力された検索範囲４０４の情報がメモリ２００に渡り、検索処理プログラム２０２がＢ−Ｔｒｅｅデータ３０１、アドレス値３０２、ベクトルデータ３０３を参照して検索結果のベクトルデータ３０３を求め、出力装置１０２に検索結果のベクトルデータ３０３を出力する。二次記憶装置３００には、Ｂ−Ｔｒｅｅデータ３０１と、アドレス値３０２と、ベクトルデータ３０３とが格納されている。Ｂ−Ｔｒｅｅデータ３０１は、Ｂ−Ｔｒｅｅプログラム２０４により作成されるデータであり、図１０に示すように、アドレス値３０２をインデクスキーとしたＢ−Ｔｒｅｅのノード部に相当する。Ｂ−Ｔｒｅｅデータ３０１のリーフ部に相当するのがアドレス値３０２、Ｂ−Ｔｒｅｅデータ３０１の実データ部に相当するのがベクトルデータ３０３となっている。以下、アドレス値３０２と当該アドレス値３０２を算出した元のベクトルデータ３０３との組をデータ対と呼ぶ。
【００１１】
本システムを機能させるための、蓄積処理プログラム２０１、検索処理プログラム２０２、アドレス算出プログラム２０３、Ｂ−Ｔｒｅｅプログラム２０４、軸アドレス算出プログラム２０５、範囲内判定プログラム２０６、からなるプログラムは、ＣＤ−ＲＯＭ等の記録媒体に記録され二次記憶媒体２に格納された後、メモリ１２にロードされて実行されるものとする。なお前記プログラムを記録する媒体はＣＤ−ＲＯＭ以外の他の媒体でも良い。
【００１２】
以下、本実施形態の蓄積処理と検索処理について説明する。
【００１３】
図３は、本実施形態の蓄積処理プログラム２０１のフローチャートである。以下、図１１、図１２と併せて説明する。ステップ３１では、入力装置１０１から入力されたベクトルデータ３０３から、アドレス算出プログラム２０３によりアドレス値３０２を算出する。図１１に示すように、ベクトルデータ３０３（１１）が入力されたら、ベクトルデータ３０３（１１）のアドレス値３０２［１．３．２］を算出する。ステップ３２では、算出したアドレス値３０２の二次記憶装置３００における格納位置をＢ−Ｔｒｅｅプログラム２０４により求め、Ｂ−Ｔｒｅｅデータ３０１を更新し、アドレス値３０２、ベクトルデータ３０３を二次記憶装置３００に格納する。ここでは、アドレス値３０２の大小関係が、データ対（３）＜データ対（１１）＜データ対（４）となっているので、図１２に示すように、データ対（１１）のアドレス値３０２［１．３．２］はデータ対（３）のアドレス値３０２［１．０．３］と、データ対（４）のアドレス値３０２［２．０．３］との間に挿入されるので、Ｂ−Ｔｒｅｅデータ３０１を更新し、それに伴いアドレス値３０２、ベクトルデータ３０３をしかるべき格納位置に格納する。
【００１４】
図４は、本実施形態のアドレス算出プログラム２０３のフローチャートである。ステップ４１では、アドレス値３０２を算出する対象のベクトルデータ３０３から、検索の用途に応じて必要なｍ個の次元を選択することにより、アドレス用ベクトルを作成する。ステップ４２では、アドレス用ベクトル空間からなるキューブ４０１を処理対象キューブとする。ステップ４３では、変数ｉに「１」を代入する。ｉとは、アドレス値３０２の全ての桁に対して処理を行ったかどうかをチェックする変数である。ステップ４４では、対象キューブに対して基本分割処理を行い、処理対象キューブを２ｍ個のサブキューブ４０２に分割する。ステップ４５では、ベクトルデータ３０３がステップ４４で分割されたサブキューブ４０２のうち、どのサブキューブ４０２に含まれるかを判断する。ステップ４６では、ベクトルデータ３０３が含まれるサブキューブ４０２の番号をアドレス値３０２のｉ桁目の数Ｘｉとする。ここで、Ｘｉは符号なしｍビット整数である。ステップ４７では、ベクトルデータ３０３が含まれるサブキューブ４０２を処理対象キューブとする。ステップ４８では、アドレス値３０２の全ての桁に対して処理を行ったかどうかをチェックする。、ｉ＜ｋを満たす場合にはステップ４９に進み、満たさない場合には、アドレス値３０２の全ての桁に対して処理を行ったので、［Ｘ１．Ｘ２．…．Ｘｋ］というｋ個の数値並びをアドレス値３０２としてプログラムを終了する。ステップ４９では、変数ｉを「１」増分する。ここで、アドレス値３０２の桁数ｋを多くすると、範囲内判定プログラム２０６で行われるアドレス値３０２の比較処理において判定精度が良くなり、ベクトルデータ３０３の比較処理を行う回数を減らすことができる。反面、アドレス値３０２の比較処理自体の計算量、アドレス値３０２のデータ量が大きくなる。そのため、アドレス値３０２の桁数ｋは、蓄積されているベクトルデータ３０３の分布密度等を考慮して適切な値に設定する必要がある。
【００１５】
基本分割とは、図８に示すように、ｍ次元のキューブ４０１を各辺２分割することにより、２ｍ個のサブキューブ４０２に分割する処理であり、各サブキューブ４０２には通し番号を付ける。ここでは、分割の際に各辺を２等分割しているが、ベクトルデータ３０３の分布の偏りを考慮して分割しても良い。アドレス値３０２の１次元的な順序付け規則とは、上位桁の数値が大きいアドレス値３０２ほど大きいと定義する。すなわち、２次元のアドレス用ベクトルから３桁のアドレス値３０２を算出した場合には、アドレス値３０２は数式１のような大小関係を持ち、これを昇順で並べると、図９の矢印で示した順番となる。
【００１６】
【数１】
０.０.０＜０.０.１＜  …  ＜０.０.３＜０.１.０＜  …  ＜３.３.２＜３.３.３
図５は、本実施形態の検索処理プログラム２０２のフローチャートである。以下、図１３の検索範囲４０４が入力された場合の蓄積データに対して、検索処理プログラムが行う処理の流れを、図１４と併せて説明する。ステップ５０では、検索範囲４０４内で原点から一番近い点と一番遠い点とを求め、アドレス算出プログラム２０３により、それぞれの点のアドレス値３０２を算出する。以下、検索範囲４０４内で原点から一番近い点が持つアドレス値３０２を検索最小アドレス値、検索範囲４０４内で原点から一番遠い点が持つアドレス値３０２を検索最大アドレス値と呼ぶ。検索最小アドレス値は［２．１．１］、検索最大アドレス値は［３．２．１］と算出される。ステップ５１では、Ｂ−Ｔｒｅｅプログラム２０４により、二次記憶装置３００での、検索最小アドレス値と検索最大アドレス値の格納位置を求める。図１４に示すように、検索最小アドレス値の格納位置は（４）と（５）の間、検索最大アドレス値の格納位置は（９）と（１０）の間と求められるので、。ステップ５２では、軸アドレス算出プログラムにより、検索最小アドレス値の軸アドレス値と検索最大アドレス値の軸アドレス値を算出する。検索最小アドレス値の軸アドレス値は、横軸［０．１．１］、縦軸［１．０．０］と算出され、検索最大アドレス値の軸アドレス値は、横軸［１．０．１］、縦軸［１．１．０］と算出される。ステップ５３では、ステップ５１で求めた検索最小アドレス値の格納位置に格納されているデータ対を処理対象データ対とする。すなわち、データ対（５）を処理対象データ対とする。ステップ５４では、処理対象データ対以降に格納されているデータ対、すなわち、処理対象データ対のアドレス値３０２よりも大きいアドレス値３０２を持つデータ対に対して処理を行う必要があるかを判断する。この判断は、ステップ５２で求めた検索最大アドレス値の格納位置と処理対象データ対の格納位置とを比較することにより行う。「検索最大アドレス値の格納位置＜処理対象データ対格納位置」ならば、処理を続ける必要がないので、プログラムを終了する。「検索最大アドレス値の格納位置≧処理対象データ対格納位置」ならば、ステップ５５に進む。つまり、図１４において、データ対（９）よりも後に格納されているデータ対（１０）に対しては、判定処理を行う必要がない。ステップ５５では、軸アドレス算出プログラム２０５により、処理対象データ対のアドレス値３０２の軸アドレスを算出する。アドレス値３０２（５）の軸アドレスは、横軸［０．１．１］、縦軸［１．０．１］と求められる。ステップ５６では、範囲内判定プログラム２０６により、処理対象データ対のベクトルデータ３０３が検索範囲４０４内に存在するか否かの判定処理を行う。ステップ５７では、処理対象データ対のベクトルデータ３０３が検索範囲４０４内に存在すると判定された、すなわち、処理対象データ対のベクトルデータ３０３が検索結果であるならば、ステップ５８に進む。そうでないならば、すてっぷ５９に進む。ステップ５８では、処理対象データ対のベクトルデータ３０３を検索結果として出力装置１０２に出力する。ステップ５９では、処理対象データ対の次の位置に格納されているデータ対を処理対象として、ステップ５４に進む。処理対象データ対が（５）の場合、処理対象データ対を次に格納されているデータ対（６）にする。
【００１７】
以上のように、Ｂ−Ｔｒｅｅプログラム２０４を用いることにより、データ対（１）、データ対（２）、データ対（３）、データ対（４）、データ対（１０）に対しては、アドレス値３０２の比較による判定処理を行う必要がないので、アドレス値３０２の比較による判定処理の計算量を１／２に減らすことができる。
【００１８】
図６は、本実施形態の軸アドレス算出プログラム２０５のフローチャートである。ｊ軸アドレス値ａｊは、アドレス値３０２を第ｊベクトルについてのみ評価する処理を高速化するために使用される。ステップ６１では、変数ｉに「１」を代入する。ｉとは、アドレス値３０２の全ての桁に対して２進数を算出したかどうかをチェックする変数である。ステップ６２では、アドレス値３０２のｉ桁目の数Ｘｉを２進数で表示した時の各桁数ｘi１、ｘi２、…、ｘiｍを算出する。ここでｍとは、アドレス用ベクトルの次元数である。ステップ６３では、全ての桁に対して２進数を算出したかどうかをチェックする。ｉ＜ｋを満たす場合にはステップ６４に進み、満たさない場合には、全ての桁に対して２進数を算出したのでステップ６５に進む。ここでｋとは、アドレス用ベクトルの次元数である。ステップ６４では、変数ｉを「１」増分する。ステップ６５では、変数ｊに「１」を代入する。ｊとは、アドレス用ベクトルの全ての次元における軸アドレス値を算出したかどうかをチェックする変数である。ステップ６６では、ステップ６２で算出された２進数のうちｘ１ｊ、ｘ２ｊ、…、ｘｋｊのｋ個の２進数から構成されるｋビット整数をｊ軸アドレス値ａｊとして算出する。ステップ６７では、アドレス用ベクトルの全ての次元における軸アドレス値を算出したかどうかをチェックする。ｊ＜ｍを満たす場合にはステップ６８に進み、満たさない場合には、アドレス用ベクトルの全ての次元における軸アドレス値を算出したのでプログラムを終了する。ステップ６８では、変数ｊを「１」増分する。
【００１９】
図７は、本実施形態の範囲内判定プログラム２０６のフローチャートである。以下、図１の蓄積データに対して範囲内判定プログラム２０６が行う処理の流れを、図１５、図１６と併せて説明する。範囲内判定プログラム２０６が行う処理は、「アドレス値３０２の比較による判定処理」と「ベクトルデータ３０３各次元値の比較による判定処理」とに分けることができる。ステップ７１からステップ７４までがアドレス値３０２の比較による判定処理であり、ステップ７５からステップ７８までがベクトルデータ３０３各次元値の比較による判定処理である。ステップ７１では、変数ｉに「１」を代入する。ｉとは、アドレス値３０２の全ての軸アドレス値に対して判定処理を行ったかどうかをチェックする変数である。ステップ７２では、処理対象データ対のアドレス値３０２が検索最小アドレス値から検索最大アドレス値までの値かどうかを判断する。ここで、ａｍｉｎｉとは検索最小アドレス値のｉ軸アドレス値、ａｉとは処理対象データ対のアドレス値３０２のｉ軸アドレス値、ａｍａｘｉとは検索最大アドレス値のｉ軸アドレス値を示す。ａｍｉｎｉ≦ａｉ≦ａｍａｘｉを満たす場合にはステップ７３へ進む。満たさない場合には、処理対象データ対のベクトルデータ３０３は検索範囲４０４の内部には存在しないとしてプログラムを終了する。ステップ７３では、全ての軸アドレス値に対して判定処理を行ったかどうかをチェックする。ここでｍとは、アドレス用ベクトルの次元数である。ｉ＜ｍを満たす場合にはステップ７４に進み、満たさない場合には、全ての軸アドレス値に対して判定処理を行ったので、処理対象データ対のベクトルデータ３０３は検索範囲４０４の内部に存在するとして、ステップ７５に進む。ステップ７４では、変数ｉを「１」増分する。図１５に、アドレス値３０２の比較による判定処理の詳細な内容を示す。（５）〜（９）のデータに対して、アドレス値３０２の比較による判定処理を行い、検索範囲４０４内に存在し得ると判定されたデータが（５）、（７）、（９）である。ステップ７５では、変数ｊに「１」を代入する。ｊとは、ベクトルデータ３０３の全ての次元に対して判定処理を行ったかどうかをチェックする変数である。ステップ７６では、処理対象データ対のベクトルデータ３０３の次元値が検索範囲４０４の当該次元の最大値から最小値までの値かどうかを判断する。ここで、ｖｍｉｎｊとは検索範囲４０４のｊ次元での最小値、ｖｊとは処理対象データ対のベクトルデータ３０３のｊ次元値、ｖｍａｘｊとは検索範囲４０４のｊ次元での最大値を示す。ｖｍｉｎｊ≦ｖｊ≦ｖｍａｘｊを満たす場合にはステップ７７へ進む。満たさない場合には、処理対象データ対のベクトルデータ３０３は検索範囲４０４の内部には存在しないとしてプラグラムを終了する。ステップ７７では、ベクトルデータ３０３の全ての次元に対して判定処理を行ったかどうかをチェックする。ここでｎとは、ベクトルデータ３０３の次元数である。ｊ＜ｎを満たす場合にはステップ７８に進み、満たさない場合には、ベクトルデータ３０３の全ての次元に対して判定処理を行ったので、処理対象データ対のネクトルデータ３０３は検索範囲４０４の内部に存在するとしてプログラムを終了する。ステップ７８では、変数ｊを「１」増分する。図１６に、ベクトルデータ３０３各次元値の比較による判定処理の詳細な内容を示す。（５）、（７）、（９）のデータに対して、アドレス値３０２の比較による判定処理を行い、検索範囲４０４内に存在すると判定されたデータが（５）、（９）であり、個の２個のデータが検索結果となる。
【００２０】
本実施形態では、１枚の画像から輝度微分情報や色情報を解析して求められる５９０次元の画像特徴量をベクトルデータ３０３として使用した。そして、５９０次元のベクトルデータ３０３から３２次元のアドレス用ベクトルを作成し、６桁のアドレス値３０２を算出した。そのため、５９０次元のベクトルデータ３０３からアドレス値３０２を算出するよりも、アドレス値３０２のサイズが３２／５９０になり、検索処理に要する計算量を減らすことができる。また、軸アドレス値のサイズが６ビットであり、それに対して、ベクトルデータ３０３の各次元値のサイズは４バイト＝３２ビット（実数値）である。ここで、１０万件のベクトルデータ３０３の集合に対して、Ｂ−Ｔｒｅｅプログラム２０４を用いることによって、アドレス値３０２の比較による判定処理の対象となるベクトルデータ３０３を蓄積データ件数の１／２に絞り込み、アドレス値３０２の比較による判定処理で３００件が検索範囲４０４の内部に存在し得ると判定され、ベクトルデータ３０３各次元値の比較による判定処理で１００件が検索範囲４０４の内部に存在すると判定される検索処理について考察する。この場合、１０万件分のベクトルデータ３０３各次元値の比較による判定処理を５万件分のアドレス値３０２の比較による判定処理と３００件分のベクトルデータ３０３各次元値の比較による判定処理で代用したと言うことができる。ここで、Ｂ−Ｔｒｅｅプログラム２０４を用いた処理量は他の処理に比べて無視できるほど小さいものとした。１件に対するベクトルデータ３０３各次元値の比較による判定処理が、ベクトルデータ３０３の５９０次元各次元における３２ビット比較処理であるのに対して、１件に対するアドレス値３０２の比較による判定処理は、アドレス用ベクトルの３２次元各次元における６ビット比較処理であるので、１件当たりの比較処理回数が３２／５９０、１回あたりの比較処理対象データサイズが６／３２となる。よって、１件に対するベクトルデータ３０３各次元値の比較による判定処理を１ｕとすると、検索処理に要する計算量を１０万ｕから、約５００ｕ＋３００ｕ＝約８００ｕに減らすことが可能となる。
【００２１】
以上説明したように本実施形態の多次元ベクトル検索方法によれば、ｎ次元ベクトル空間内において、位置、サイズ共に任意のｎ次元矩形領域内に存在するｎ次元ベクトルデータを検索するのに要する処理時間を１／１００程度に減らすことが可能であり、また、処理量が検索対象となるベクトルデータの次元数にしたがって増大しないので、ｎが数十以上の場合でも適用することが可能である。
【００２２】
【発明の効果】
本発明によれば、位置、サイズ共に任意のｎ次元矩形領域内に存在するｎ次元ベクトルデータを検索する処理において、「第１の判定処理」と「第２の判定処理」とを導入することによって、ｎが数十以上の場合でも、位置、サイズ共に任意のｎ次元矩形領域内に存在するｎ次元ベクトルデータを検索するのに要する処理時間に対し、検索対象となるベクトルデータの次元数の影響を減らすことが可能となる。
【図面の簡単な説明】
【図１】本実施形態の多次元ベクトル検索方法の原理を示す図である。
【図２】本実施形態の多次元ベクトル検索装置の構成を示す図である。
【図３】本実施形態の蓄積処理プログラム２０１のフローチャートである。
【図４】本実施形態のアドレス算出プログラム２０３のフローチャートである。
【図５】本実施形態の検索処理プログラム２０２のフローチャートである。
【図６】本実施形態の軸アドレス算出プログラム２０５のフローチャートである。
【図７】本実施形態の範囲内判定プログラム２０６のフローチャートである。
【図８】本実施形態のアドレス算出プログラム２０３が行う基本分割を説明する図である。
【図９】本実施形態のアドレス値３０２の１次元的な順序付け規則を説明する図である。
【図１０】本実施形態の二次記憶装置３００の詳細を示す図である。
【図１１】本実施形態の蓄積処理を説明するための多次元ベクトル空間４０３を示す図である。
【図１２】本実施形態の蓄積処理を説明するための二次記憶装置３００の詳細を示す図である。
【図１３】本実施形態の検索処理を説明するための多次元ベクトル空間４０３を示す図である。
【図１４】本実施形態の検索処理を説明するための二次記憶装置３００の詳細を示す図である。
【図１５】本実施形態のアドレス値３０２の比較による判定処理の詳細な内容を示す図である。
【図１６】本実施形態のベクトルデータ３０３各次元値の比較による判定処理の詳細な内容を示す図である。
【符号の説明】
１０１  ＣＰＵ
１０１  入力装置
１０２  出力装置
１０３  バス
２００  メモリ
２０１  蓄積処理プログラム
２０２  検索処理プログラム
２０３  アドレス算出プログラム
２０４  Ｂ−Ｔｒｅｅプログラム
２０５  軸アドレス算出プログラム
２０６  範囲内判定プログラム
３００  二次記憶装置
３０１  Ｂ−Ｔｒｅｅデータ
３０２  アドレス値
３０３  ベクトルデータ
４０１  キューブ
４０２  サブキューブ
４０３  多次元ベクトル空間
【図１】
0004029536.tif 000002
【図２】
0004029536.tif 000003
【図３】
0004029536.tif 000004
【図４】
0004029536.tif 000005
【図５】
0004029536.tif 000006
【図６】
0004029536.tif 000007
【図７】
0004029536.tif 000008
【図８】
0004029536.tif 000009
【図９】
0004029536.tif 000010
【図１０】
0004029536.tif 000011
【図１１】
0004029536.tif 000012
【図１２】
0004029536.tif 000013
【図１３】
0004029536.tif 000014
【図１４】
0004029536.tif 000015
【図１５】
0004029536.tif 000016
【図１６】
0004029536.tif 000017