(57)【特許請求の範囲】
【請求項１】
所定の複数次元のベクトル形式のデータの集合を記憶したデータベースと、
該データベースのデータをベクトルの１成分の値の順に並べたデータのリストを各成分について作成するリスト作成手段と、
前記複数次元のベクトル形式のテストデータを入力する入力手段と、
前記複数次元のベクトル形式における１つの成分を、前記テストデータの各成分値の絶対値の大きい順に順次選択する成分選択手段と、
該成分選択手段により選択された１つの成分につき、前記リストから前記テストデータと成分値の差の小さい順に順次データを選択するデータ選択手段と、
該データ選択手段により選択されたデータと前記テストデータとの全空間における距離を計算する距離計算手段と、
該距離計算手段により計算された距離の小さい順に所定数のデータを抽出する抽出手段と、
前記データ選択手段により選択された１つのデータと前記テストデータとの１つの成分値の差に基づいて、前記データ選択手段によるデータの選択を続行するか終了するかを判定する終了判定手段と、
前記データ選択手段により選択されたデータと前記テストデータとの部分空間における距離に基づいて、前記距離計算手段により全空間における距離を計算するか否かを制御する距離計算制御手段とを備えたことを特徴とするデータ処理装置。
【請求項２】
前記リスト作成手段は、各成分について、前記データベースの各データの当該成分の値を、当該値の順に並べたリストと、前記各データの識別子を前記値の順に並べたリストとを作成することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記抽出手段が、
前記所定数のデータと該所定数のデータと前記テストデータとの距離の二乗の最大値とを記憶するデータ記憶手段と、
前記距離計算手段により新たに距離が計算されたデータの距離の二乗が前記最大値より小さい場合に、当該データを前記最大値に対応するデータに代えて前記データ記憶手段に追加し、最大値を更新する記憶制御手段とを有することを特徴とする請求項１に記載のデータ処理装置。
【請求項４】
前記終了判定手段が、前記１つの成分値の差の二乗が前記最大値以上である場合に、終了すると判定することを特徴とする請求項３に記載のデータ処理装置。
【請求項５】
前記距離計算制御手段が、前記部分空間における距離の二乗が前記最大値以上である場合に、全空間における距離の計算を不実施とするように制御することを特徴とする請求項３に記載のデータ処理装置。
【請求項６】
所定の複数次元のベクトル形式のデータの集合を記憶したデータベースと、リスト作成手段と、入力手段と、成分選択手段と、データ選択手段と、距離計算手段と、抽出手段と、終了判定手段と、距離計算制御手段とを備えたデータ処理装置において実行されるデータ処理方法であって、
前記リスト作成手段が、前記データベースのデータをベクトルの１成分の値の順に並べたデータのリストを各成分について作成するリスト作成工程と、
前記入力手段が、前記複数次元のベクトル形式のテストデータを入力する入力工程と、
前記成分選択手段が、前記複数次元のベクトル形式における１つの成分を、前記テストデータの各成分値の絶対値の大きい順に順次選択する成分選択工程と、
前記データ選択手段が、該成分選択工程により選択された１つの成分につき、前記リストから前記テストデータと成分値の差の小さい順に順次データを選択するデータ選択工程と、
前記距離計算手段が、該データ選択工程により選択されたデータと前記テストデータとの全空間における距離を計算する距離計算工程と、
前記抽出手段が、該距離計算工程により計算された距離の小さい順に所定数のデータを抽出する抽出工程と、
前記終了判定手段が、前記データ選択工程により選択された１つのデータと前記テストデータとの１つの成分値の差に基づいて、前記データ選択工程によるデータの選択を続行するか終了するかを判定する終了判定工程と、
前記距離計算制御手段が、前記データ選択工程により選択されたデータと前記テストデータとの部分空間における距離に基づいて、前記距離計算工程により全空間における距離を計算するか否かを制御する距離計算制御工程とを備えたことを特徴とするデータ処理方法。
【請求項７】
前記リスト作成工程において、前記リスト作成手段が、各成分について、前記データベースの各データの当該成分の値を、当該値の順に並べたリストと、前記各データの識別子を前記値の順に並べたリストとを作成することを特徴とする請求項６に記載のデータ処理方法。
【請求項８】
前記抽出工程は、
前記抽出手段が、前記所定数のデータと該所定数のデータと前記テストデータとの距離の二乗の最大値とをデータ記憶部に記憶するデータ記憶工程と、
前記抽出手段が、前記距離計算工程により新たに距離が計算されたデータの距離の二乗が前記最大値より小さい場合に、当該データを前記最大値に対応するデータに代えて前記データ記憶部に追加し、最大値を更新する記憶制御工程とを有することを特徴とする請求項６に記載のデータ処理方法。
【請求項９】
前記終了判定工程では、前記終了判定手段が、前記１つの成分値の差の二乗が前記最大値以上である場合に、終了すると判定することを特徴とする請求項８に記載のデータ処理方法。
【請求項１０】
前記距離計算制御工程では、前記距離計算手段が、前記部分空間における距離の二乗が前記最大値以上である場合に、全空間における距離の計算を不実施とするように制御することを特徴とする請求項８に記載のデータ処理方法。
【請求項１１】
所定の複数次元のベクトル形式のデータの集合を記憶したデータベースのデータをベクトルの１成分の値の順に並べたデータのリストを各成分について作成するリスト作成工程と、
前記複数次元のベクトル形式のテストデータを入力する入力工程と、
前記複数次元のベクトル形式における１つの成分を、前記テストデータの各成分値の絶対値の大きい順に順次選択する成分選択工程と、
該成分選択工程により選択された１つの成分につき、前記リストから前記テストデータと成分値の差の小さい順に順次データを選択するデータ選択工程と、
該データ選択工程により選択されたデータと前記テストデータとの全空間における距離を計算する距離計算工程と、
該距離計算工程により計算された距離の小さい順に所定数のデータを抽出する抽出工程と、
前記データ選択工程により選択された１つのデータと前記テストデータとの１つの成分値の差に基づいて、前記データ選択工程によるデータの選択を続行するか終了するかを判定する終了判定工程と、
前記データ選択工程により選択されたデータと前記テストデータとの部分空間における距離に基づいて、前記距離計算工程により全空間における距離を計算するか否かを制御する距離計算制御工程とをコンピュータに実行させるデータ処理プログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ベクトル形式のデータの処理に関し、特に、入力ベクトルとの距離に基づいてデータベースより所定数のデータを抽出するデータ処理装置及びその方法に関するものである。
【０００２】
【従来の技術】
ベクトルで表現されたデータ間の類似度として距離が広く用いられている。例えば文字認識や音声認識システムでは、サンプリングされたデータを適当な基底で張られた特徴量空間に写像し、ベクトル表現されたデータをプロトタイプとして記憶しておく。新たに入力されたデータとプロトタイプとの距離を計算し、入力データを最も近いプロトタイプに対応するクラスに属するものとして同定する。
【０００３】
最も効率の悪い計算方法は全数探索であり、その計算量はベクトルの次元とプロトタイプ数の積のオーダーになる。
【０００４】
距離の計算量が決定的な障害として認識されるのは、データベース検索においてである。近年のコンピュータ処理能力の飛躍的発達によってデータベースは文書データのみならず、画像や音声といった非テクストデータをも蓄積できるようになった。これら非テクストデータを従来のキーワードで検索するためにはキーワードを付与しなければならない。キーワード付与の手間を避けたいなら特徴量ベクトルによる類似検索を行わなければならない。
【０００５】
また文書データを検索する場合でも、より柔軟な検索を可能にするために文書をベクトルで表現し、このベクトルに基づく類似検索を行うアルゴリズムも実現されている。このとき前記計算量が検索システム実現の本質的問題となる。通常のデータベースに格納されるデータ件数は数十万件を超える。従ってベクトルの次元数が１個増加する度に計算量が数十万増加するという絶望的な状況になる。
【０００６】
このような状況を回避するためには、ベクトルの次元を減らすか、計算するデータ数を減らすしかない。前者はデータの表現空間の次元を減らすことに等しいので、データ検索に必要な情報がベクトルの成分として十分表現されない可能性がある。後者は、検索結果として要求されているデータ数がデータの総数に比べて十分小さいときに意味のある方法論である。k-NN探索で取り扱う問題はこの種のものであり、いくつかの有効な方法が提案されている。
【０００７】
k-NN探索は、システムに記憶されているプロトタイプの集合から、テストベクトルに近いk 個を探索し、それらのクラスを基に、テストベクトルのクラスを同定するための方法である。このような場合、テストベクトルに近いk 個のプロトタイプを如何に高速に見つけることができるかが重要な課題の１つである。このような要求はデータベース検索においても存在する。
【０００８】
検索ユーザーは、データベースに格納されている大量のデータのうち、自分が指定した検索キーに近いいくつかのデータだけが欲しいのであって、他のデータの、ましてや距離の値などに何の価値も見出さない。検索ユーザーのこのような要求に応えるための技術は、k-NN探索の高速アルゴリズムの目的と一致する。
【０００９】
プロトタイプの集合からテストベクトルに近いk 個を抽出する場合、探索の計算量を軽減するために、予めプロトタイプの集合を構造化しておくのが一般的である。構造化の際にデータの性質を反映させればさせるほど、探索の計算量の軽減が期待できる。
【００１０】
例えばプロトタイプを階層的に構造化する場合では、プロトタイプが表現されているN 次元ベクトル空間を分割するという操作を再帰的に繰り返すことによって達成される。空間を分割管理するときに用いられる境界が超平面であるものをK-D-B Tree  〔文献１〕、矩形領域で分割する方法をR-Tree  〔文献２〕、超球で分割する方法をSS-Tree 〔文献３〕、矩形と超球との組み合わせで空間を分割する方法をSR-Tree 〔文献４〕という。更にN 次元ベクトル空間をプロトタイプの分布の共分散行列に関する固有ベクトルで張られる空間に変換し直しておけば、探索の計算量に対して、より効果的な構造化が期待できる〔文献５，６〕。
【００１１】
しかしこれらの方法はデータ構造化のための計算量と記憶容量がベクトルの次元数の増加に対して指数関数的に増大してしまい、高次元ベクトルで表現されているデータへの応用が事実上制限されてしまう可能性がある。
〔文献１〕JT. Robinson: "The K-D-B Tree: A Search Structure for Large Multidimensional Dynamic Indexes," Proc. on ACM SIGMOD, pp.10-18, 1981.
〔文献２〕A. Guttman: "R-trees: A dynamic index structure for spatial searching," Proc. ACM SIGMOD, Boston, USA, pp.47-57, Jun. 1984.
〔文献３〕DA. White and R. Jain: "Similarity indexing with the SS-tree," Proc. of the 12th Int. Conf. on Data Engineering, New Orleans, USA, pp.323-331, Feb. 1996.
〔文献４〕片山，佐藤: "SR-Tree：高次元点データに対する最近接検索のためのインデクス構造の提案,"  信学論(D-I), vol.18-D-I, no.8, pp.703-717, Aug. 1997.
〔文献５〕RF. Sproull: "Refinemants to Nearest Neighbor Searching in k-Dimensional Trees," Algorithmica, 6, pp.579-589, 1991.
〔文献６〕DA. White and R. Jain: "Similarity Indexing: Algorithms and Performance," Proc. on SPIE, pp.62-73, 1996.
【００１２】
一方、統計的性質を利用しない" 緩い" 構造化と、少し“賢い”探索アルゴリズムによって計算量の軽減を達成しているアルゴリズムもある。そのうち最も基本的なもののひとつが射影アルゴリズムと呼ばれるFriedmanらのアルゴリズムである〔文献７〕。
〔文献７〕JH. Friedman, F. Baskett, and LJ. Shustek: "An Algorithm for Finding Nearest Neighbors," IEEE Trans. on Computers, pp.1000-1006, Oct. 1975.
【００１３】
射影アルゴリズムで前処理として要求されるデータの構造化は、ベクトルの各成分毎のソーティングであり、位相に基づく構造化である。つまり、プロトタイプがｄ次元ベクトルのときは、ｄ個のソーティング・リストが生成されることになる。
【００１４】
この処理により、昇順に並べられたj 成分値を格納したリストVjと、対応するプロトタイプID番号を格納したリストIjの２種類が、ベクトルの次元数だけ得られる。即ち、Vjの先頭からn+1 番目の値Vj(n+1) はn 番目の値Vj(n) 以上である。また、Ij(n) をID番号とするプロトタイプYIj(n)のj 成分値YIj(n)(j) がVj(n) と一致する。
【００１５】
プロトタイプ集合からテストベクトルX に最も近いもの1 組を抽出するための射影アルゴリズムの原理を図１０を用いて説明する。探索は、適当な基準で選択された１個のソーティング・リストVmとImに沿って行われる。これは、図中、m を選択したことに対応している。Imは成分値によってソーティングされたデータ番号が格納されているので、リスト上での並びがm 軸上での位相を正確に反映している。まずテストベクトルX のm 成分X(m)に最も近い値をVmから探す。これをVm(j) とする。これに対応するプロトタイプはYIm(j)である。図ではYIm(j)がY1である。Y1はm 成分に関してX に最も近いが、全空間での距離が最も近いとは限らない。
【００１６】
さて次に、X とY1との距離ρ(X,Y1)を計算する。すると、m 成分の値が開区間( X(m) -  ρ(X,Y1), X(m) +  ρ(X,Y1) )( 図中A の領域）に属するプロトタイプのみが、Y1よりX に近い可能性があり、探索の対象として意味があることがわかる。図１０の例では、m 成分に関して次に近いプロトタイプY2を検査することによって、探索対象となるプロトタイプの集合が更に( X(m) -  ρ(X,Y2), X(m) +  ρ(X,Y2) )( 図中B の領域）に制限される。このように1 次元部分空間での成分値をもとに、探索の対象となるプロトタイプ集合を小さくしていくことによって、計算量の軽減を図っているのが射影アルゴリズムである。
【００１７】
【発明が解決しようとする課題】
Friedmanらの射影アルゴリズムは、ベクトルの次元の増加と共に性能が低下することが報告されている〔文献７〕。プロトタイプ数に対して、実際に距離を計算したプロトタイプ数の期待値の割合を相対効率ηと呼べば、１０００個のプロトタイプ集合から１個の最近傍系を取り出す課題において、２次元ベクトルのときη= 0.03であるのに対して、９次元ベクトルではη= 0.6 にまで低下している。
【００１８】
集合から取り出したプロトタイプ数をNEXT、距離計算を行ったプロトタイプ数をNgとすると、距離計算を行うかどうかを判定する処理の計算量はＯ(NEXT) 、距離計算のための計算量はＯ(dNg)となる。NgがNEXTに近付くにつれ、処理のオーバーヘッドが加算されるので、９次元ベクトルに対する実際の計算時間は、全数探索より悪くなってしまう可能性がある。
【００１９】
射影アルゴリズムが高次元ベクトルに適用できないということから、Neneらは非常に単純で効果的なアルゴリズムを考案した〔文献８〕。Searching by Slicingと呼ばれるその方法は、テストベクトルのj 番目の成分X(j)を中心に前後εの閉区間〔X(j) - ε, X(j) +ε〕に属するプロトタイプのみを探索結果の候補として残していくという方法である。各成分を独立に評価するこの方法では、その性能は明らかにεに依存する。彼らはεの決定法を提案しているが、それらは確率的であり高次元ベクトルには効果的でない。
〔文献８〕SA. Nene and SK. Nayar: "A Simple Algorithm for Nearest Neighbor Search in High Dimensions," IEEE Trans. on PAMI, vol.19, no.9, pp.989-1003, Sept. 1997.
【００２０】
【課題を解決するための手段】
上記課題を解決するために、本発明は、データ処理装置に、所定の複数次元のベクトル形式のデータの集合を記憶したデータベースと、該データベースのデータをベクトルの１成分の値の順に並べたデータのリストを各成分について作成するリスト作成手段と、前記複数次元のベクトル形式のテストデータを入力する入力手段と、前記複数次元のベクトル形式における１つの成分を、前記テストデータの各成分値の絶対値の大きい順に順次選択する成分選択手段と、該成分選択手段により選択された１つの成分につき、前記リストから前記テストデータと成分値の差の小さい順に順次データを選択するデータ選択手段と、該データ選択手段により選択されたデータと前記テストデータとの全空間における距離を計算する距離計算手段と、該距離計算手段により計算された距離の小さい順に所定数のデータを抽出する抽出手段と、前記データ選択手段により選択された１つのデータと前記テストデータとの１つの成分値の差に基づいて、前記データ選択手段によるデータの選択を続行するか終了するかを判定する終了判定手段と、前記データ選択手段により選択されたデータと前記テストデータとの部分空間における距離に基づいて、前記距離計算手段により全空間における距離を計算するか否かを制御する距離計算制御手段とを備える。
【００２１】
また、他の態様によれば、所定の複数次元のベクトル形式のデータの集合を記憶したデータベースと、リスト作成手段と、入力手段と、成分選択手段と、データ選択手段と、距離計算手段と、抽出手段と、終了判定手段と、距離計算制御手段とを備えたデータ処理装置において実行されるデータ処理方法に、前記リスト作成手段が、前記データベースのデータをベクトルの１成分の値の順に並べたデータのリストを各成分について作成するリスト作成工程と、前記入力手段が、前記複数次元のベクトル形式のテストデータを入力する入力工程と、前記成分選択手段が、前記複数次元のベクトル形式における１つの成分を、前記テストデータの各成分値の絶対値の大きい順に順次選択する成分選択工程と、前記データ選択手段が、該成分選択工程により選択された１つの成分につき、前記リストから前記テストデータと成分値の差の小さい順に順次データを選択するデータ選択工程と、前記距離計算手段が、該データ選択工程により選択されたデータと前記テストデータとの全空間における距離を計算する距離計算工程と、前記抽出手段が、該距離計算工程により計算された距離の小さい順に所定数のデータを抽出する抽出工程と、前記終了判定手段が、前記データ選択工程により選択された１つのデータと前記テストデータとの１つの成分値の差に基づいて、前記データ選択工程によるデータの選択を続行するか終了するかを判定する終了判定工程と、前記距離計算制御手段が、前記データ選択工程により選択されたデータと前記テストデータとの部分空間における距離に基づいて、前記距離計算工程により全空間における距離を計算するか否かを制御する距離計算制御工程とを備える。
【００２２】
また、本発明の他の態様によれば、コンピュータ読み取り可能な記憶媒体に、所定の複数次元のベクトル形式のデータの集合を記憶したデータベースのデータをベクトルの１成分の値の順に並べたデータのリストを各成分について作成するリスト作成工程と、前記複数次元のベクトル形式のテストデータを入力する入力工程と、前記複数次元のベクトル形式における１つの成分を、前記テストデータの各成分値の絶対値の大きい順に順次選択する成分選択工程と、該成分選択工程により選択された１つの成分につき、前記リストから前記テストデータと成分値の差の小さい順に順次データを選択するデータ選択工程と、該データ選択工程により選択されたデータと前記テストデータとの全空間における距離を計算する距離計算工程と、該距離計算工程により計算された距離の小さい順に所定数のデータを抽出する抽出工程と、前記データ選択工程により選択された１つのデータと前記テストデータとの１つの成分値の差に基づいて、前記データ選択工程によるデータの選択を続行するか終了するかを判定する終了判定工程と、前記データ選択工程により選択されたデータと前記テストデータとの部分空間における距離に基づいて、前記距離計算工程により全空間における距離を計算するか否かを制御する距離計算制御工程とをコンピュータに実行させるデータ処理プログラムを記憶したことを特徴とする。
【００２３】
【発明の実施の形態】
本実施形態による高速計算アルゴリズムは、射影アルゴリズムを自然に高次元に拡張したものである。従って、プロトタイプ集合に対する" 硬い" 構造化や、予め設定すべきパラメタを必要としない汎用的なものである。
【００２４】
Friedmanらのアルゴリズムでは、取り出したプロトタイプとテストベクトルとの距離を計算するかどうかを判定するのに、1 次元部分空間上に射影した差ベクトルのノルムの2 乗を利用していた。
【００２５】
本実施形態で提案するアルゴリズムでは、この部分空間の次元を、判定の対象となっているプロトタイプが条件を満足するまで、適応的に増加させる。即ち、既に得られているk 近傍系の半径ξの2 乗よりも、ｍ次元部分空間に射影されたテストベクトルとプロトタイプとの差ベクトルのノルムの2 乗が小さいときには、ｍ＋１次元空間での差ベクトルを計算しξ2 と比較する。このような処理を部分空間の次元が予め設定された値に一致するまで繰り返す。
【００２６】
本提案アルゴリズムの有効性を検証するために、一様乱数に基づいて計算機で生成したプロトタイプ集合に対する実験を行った結果、ベクトルの次元の増加に依らず計算量の軽減を達成できることを確認した。
【００２７】
まず、提案アルゴリズムの詳細を述べる前に、問題設定、語句と記号の定義を明らかにしておく。
【００２８】
想定する問題は、d 次元ベクトルとして表現されたN 個のプロトタイプYjの集合をΩとする：
Ω = { Y1, Y2,  …, YN }, Yj∈Rd
このとき、適当に与えられたテストベクトルX ∈Rdに、計量ρ(X,Yj)に関して近いk 個のプロトタイプをΩから抽出する。ただしユークリッド距離は差ベクトルの2 乗ノルムとして定義され、従って空間は直交基底で張られていることを前提としている：
【００２９】
【外１】
0004086376.tif 000002
ここで、テストベクトルX 、プロトタイプYjのk 成分値をそれぞれX(k)、Yj(k) 表記した。
【００３０】
図１は、本発明の1 実施形態であるデータ処理装置の機能構成を表す図である。入出力部１０１は、受信装置やキーボード等の入力部と、送信装置や表示装置等の出力部とを備える。
【００３１】
例えばスタンドアロンのコンピュータの場合は、入出力部１０１はキーボードと表示装置から成り、キーボードから入力された入力データを距離計算部１０２へ送信し、距離計算部１０２から送信されたデータを表示装置に出力する。
【００３２】
或いは、通信回線に接続されている通信端末の場合は、入出力部１０１は送受信を行なう通信制御装置から成り、通信回線を介して入力された入力データを距離計算部１０２に送信し、距離計算部１０２から送信されたデータを通信回線を介して指定されたアドレスに送信する。
【００３３】
また、距離計算部１０２は、ＣＰＵがＲＯＭやディスクメモリ等に記憶された各機能プログラム（フローチャートにつき後述する処理手順に対応するプログラムを含む）を実行することにより実現され、計算結果や処理により生成される各種データを記憶するためのＲＡＭなどのメモリを備える。
【００３４】
データベース１０３には、d 次元ベクトルで表現されたN 個のプロトタイプの集合が格納されており、距離計算部１０２によってアクセスされる。
【００３５】
距離計算部１０２の処理を図2 を用いて説明する。
【００３６】
ステップS201で入出力部１０１から入力があったかどうかを検査し、なければステップS201を繰り返し、あればステップS202へ進む。ステップS202では、入力データがデータベース１０３のデータを更新するものかどうかを検査し、そうであればステップS203へ、そうでなければステップS204へ進む。ステップS203では、後述する前処理を実行し、それが終了したらステップS201へ進む。ステップS204では該入力データが計算処理のものかどうかを検査し、そうであればステップS205へ、そうでなければステップS201へ進む。ステップS205では、後述する検索処理を実行し、それが終了したらステップS201へ進む。
【００３７】
図８を用いてステップS203で実行される前処理について説明する。
【００３８】
前処理では、プロトタイプ集合の各成分値に関するソーティング・リストを作成する。この処理で、昇順に並べられたj 成分値を格納したリストVjと、対応するプロトタイプID番号を格納したリストIjという２種類のリストが、ベクトルの次元数だけ得られる。ステップS801でn を１に設定する。ステップS802で、N 個のプロトタイプそれぞれについて、n 成分値とID番号のペアを作成する。即ち：
{ (Y1(n), 1), (Y2(n), 2), ... , (YN(n),N) }
【００３９】
ステップS803で上記ペアの集合をn 成分値の昇順に並べ替える。
【００４０】
{ (YIn(1)(n), In(1)), (YIn(2)(n), In(2)), ... , (YIn(N)(n), In(N)) }
【００４１】
以下、成分値の並びとID番号の並びを別々にリストX 、I とする：
Vn＝{ YIn(1)(n), YIn(2)(n), ... , YIn(N)(n) }         (2)
In＝{ In(1), In(2), ... , In(N) }                     (3)
【００４２】
ステップS804ではn をインクレメントし、ベクトルの次元ｄを超えていたら処理を終了し、そうでなければステップS802へ進む。
【００４３】
2 種類のリストの関係は次のとおりである。Vjの先頭からn+1 番目の値Vj(n+1) はn 番目の値Vj(n) 以上である。また、Ij(n) をID番号とするプロトタイプYIj(n)のj 成分値YIj(n)(j) がVj(n) と一致する。
【００４４】
次に図３を用いてステップS205で実行される検索処理を説明する。
【００４５】
検索処理の入力として、検索のためのベクトルX （以下テストベクトルと呼ぶ）と、検索結果として要求されているプロトタイプの個数k が与えられている。
【００４６】
ステップS301ではベクトル空間の基底のインデクスリストを作成する。これは後述する終了条件や棄却条件を適用する基底の順序を定めるリストであり、例えば、テストベクトルX の成分値の絶対値の大きい順に対応するリストである：
Λ = {  λ1,  λ1, ..., λd}                (4)
また小さいほうからL 個の集合をΛL と書く：
ΛL = { λd-L+1,  λd-L+2, ..., λd}        (5)
【００４７】
ステップS302ではPTR 及び関連する変数の初期化処理を実行する。この処理を図4 を用いて説明する。
【００４８】
ステップS401でm をλ1 に設定する。ステップS402でm 成分値のソーティング・リストVmを取得する。ステップS403ではテストベクトルのm 成分値X(m)に最も近い値をVmから探索し、その位置をPTR に格納する。即ち：
|Vm(PTR) - X(m)|≦|Vm(j) - X(m)|, ∀j ∈ {1, 2, ..., N}
関連する変数は以下のように初期化する：
PTRL = PTR - 1, BNDL = 0, CALL = 0
PTRH = PTR + 1, BNDH = 0, CALH = 0
【００４９】
ステップS303ではk 個の近傍集合の初期化を行う。この処理を図５を用いて説明する。
【００５０】
ステップS501では近傍集合N0(X) を空集合に初期化する。ステップS502ではt １に設定する。ステップS503では、図6 を用いて後述するPTR の更新を行う。ステップS504ではID番号Im(PTR) のプロトタイプYIm(PTR)とテストベクトルX との距離の２乗ρ(X,YIm(PTR))2 を計算する：
【００５１】
【外２】
0004086376.tif 000003
【００５２】
ステップS505では近傍集合Nt-1(X) にプロトタイプのIDと距離の自乗とを追加する：
Nt(X) ＝ Nt-1(X) + {(Im(PTR), ρ(X, YIm(PTR))2)}
【００５３】
ステップS506でt をインクレメントし、k を超えればステップS507へ、そうでなければステップS503へ進む。
【００５４】
ステップS507では近傍集合のなかでρ(X, YIm(PTR))2の最大値をξt-1 、またそれに対応するID番号をIMAX,t-1として記憶する。
【００５５】
ステップS304ではt をk に設定する。ステップS305ではPTR の更新を実行する。この処理を図６を用いて説明する。
【００５６】
ステップS601ではPTRLが１未満かどうかを検査し、そうであればステップS602へ、そうでなければステップS603へ進む。ステップS602では以下の処理を実行する：
BNDL = 1, DxL = ∞
【００５７】
ステップS603ではPTRHがN を超えるかどうかを検査し、そうであればステップS604へ、そうでなければステップS605へ進む。ステップS604では以下の処理を実行する：
BNDH = 1, DxH = ∞
【００５８】
ステップS605ではBNDLとBNDHの積が１かどうかを検査し、そうであれば検索処理を終了し、そうでなければステップS606へ進む。
【００５９】
ステップＳ６０６ではＢＮＤＬ＋ＣＡＬＬが０かどうかを検査し、そうであればステップＳ６０７へ、そうでなければステップＳ６０８へ進む。ステップＳ６０７では以下の処理を実行する：
ＤｘＬ    ＝  （Ｖｍ（ＰＴＲＬ）−Ｘ（ｍ））２
ＣＡＬＬ  ＝  １
【００６０】
ステップＳ６０８ではＢＮＤＨ＋ＣＡＬＨが０かどうかを検査しそうであればステップＳ６０９へ、そうでなければステップＳ６１０へ進む。ステップＳ６０９では以下の処理を実行する：
ＤｘＨ    ＝  （Ｖｍ（ＰＴＲＨ）−Ｘ（ｍ））２
ＣＡＬＨ  ＝  １
【００６１】
ステップS610では、DxLがDxH より小さければステップS611へ、そうでなければステップS612へ進む。
【００６２】
ステップS611では以下の処理を実行し、図3 の検索処理のステップS306へ戻る：
Dx=DxL, PTR=PTRL, CALL = 0
【００６３】
ステップS612では以下の処理を実行し、図3 の検索処理のステップS306へ戻る：
Dx=DxH, PTR=PTRH, CALH = 0
【００６４】
PTR の更新処理では、PTR と関連する変数の値を変更し、終了条件が満足されれば、図3 に示した検索処理そのものを終了する。ステップS306では次式の終了条件を満足したかどうかを検査し満足すれば検索処理を終了し、そうでなければステップS307へ進む。
【００６５】
Dx  ≧  ξt-1                                         (8)
【００６６】
ステップS307からステップS309のステップで、棄却条件を満足するかどうかを検査する。ステップS307ではm に２を設定する。
【００６７】
ステップS308では次式の処理を実行する：
n = Im(PTR)
j = λm
Dx  ← Dx + (Yn(j)-X(j))2
上式で選られるDxはm 次元部分空間におけるYnの距離の2 乗である。
【００６８】
次式の棄却条件を満足したかどうかを検査し、満足したらステップS311へ、そうでなければステップS309へ進む：
Dx  ≧  ξt-1                                         (9)
【００６９】
ステップS309ではm をインクレメントし、その結果がg を超えたらステップS310へ、そうでなければステップS308へ進む。
【００７０】
ステップS310では図7 につき後述する距離計算を実行しステップS311へ進む。ステップS311ではt をインクレメントし、その結果がN を超えたら処理を終了し、そうでなければステップS305へ進む。
【００７１】
ステップS310で実行する距離計算を図7 を用いて説明する。
【００７２】
ステップS701ではj をg+1 に設定する。ステップS702ではs をλj に設定する。ステップS703では以下の処理を実行する：
Dx  ← Dx + (Yn(s)-X(s))2
ただしn = Im(PTR) である。
【００７３】
ステップS704ではj をインクレメントし、その結果がベクトルの次元d を超えたらステップS705へ、そうでなければステップS703へ進む。ステップS705ではDxがξt-1 より小さければステップS706へ、そうでなければ処理を終了する。
【００７４】
ステップS706とステップS707で近傍集合の更新を行う。ステップS706では、近傍集合からξt-1 に対応するID番号と距離の2 乗のペアを削除する：
Nt(X) ←Nt-1(X) - { (IMAX,t-1,ξt-1) }
【００７５】
ステップS707では以下の処理を実行し図３のステップS310へ戻る：
Nt(X) ←Nt-1(X) + { (Im(PTR),Dx) }
【００７６】
ステップS305、ステップS306或いはステップS310で終了したときの、Nt(X) が検索結果として出力される。
【００７７】
以上説明した実施形態による効果を計算機実験によって検証する。
【００７８】
〔計算機実験〕
本発明の有効性を検証するために検索結果として要求されるプロトタイプ数k=10個、プロトタイプ数N=1000，10000 個に対して探索の計算機実験を行った。以下の項目が実験パラメタである：
・ベクトルの次元：d = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100 }
実験で確認することは以下の項目である：
・ベクトルの次元の増加に伴う計算量の変化
・プロトタイプ数N に対する計算量の変化
実験に使用した計算機の諸元は以下のとおりである：
・シリコングラフィクス社製  Ｏ２
・CPU: MIPS R10000, Rev2.6(174 MHz)
・メインメモリ: 128 MB
・OS: IRIX Release 6.3
尚、プログラム言語はＣを用いた。
【００７９】
〔実験手順〕
(1) 一様乱数を用いて、d 次元ベクトルN 個より成るプロトタイプ集合を生成する。
(2) 一様乱数を用いて、d 次元のテストベクトルを1 個、生成する。
(3) 全数探索を行う。
(4) 提案アルゴリズムによる探索を行う。
【００８０】
上記４つの手順を100 回繰り返し、相対CPU 時間の平均値を計算した。ここで、相対CPU 時間 = (提案アルゴリズムのCPU 時間)/( 全数探索のCPU 時間) である。
【００８１】
〔高次元ベクトルに対する性能〕
ベクトルの次元数の増加に対する性能の改善を、比較的低次元、小さい集合で確認したので、次に高次元ベクトルで表現されたプロトタイプの、より大規模な集合に対するk-NN探索における性能を検証した。
【００８２】
実験結果を図９に示す。図中、ベクトルの次元(dimensionarity)を横軸、相対CPU 時間 (CPU time ratio) ηT を縦軸、プロトタイプ数N をパラメタとして示した。
【００８３】
図９よりプロトタイプ数N に関わらず、ベクトルの次元の増加に伴って相対ＣＰＵ時間が１次のオーダーで増加していることがわかる。しかしN=10000 個のときの傾きは非常に小さい。このときの相対CPU 時間の値は、10次元で1%、90次元でも7%と、高次元でも非常に小さい値を示している。実際、90次元ベクトル10000 個から最近接プロトタイプ10個を取り出す探索処理では、全数探索3.7(sec)に対して、提案方式では0.26(sec) で終了した。
【００８４】
尚、本発明は、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記憶した記憶媒体を、装置あるいはシステムに供給し、装置あるいはシステム内のコンピュータが記憶媒体に格納されたプログラムコードを読み出して実行することによって達成してもよい。
【００８５】
更に、装置あるいはシステム内のコンピュータが記憶媒体に格納されたプログラムコードを読み出して実行することによって、上述した実施形態の機能を直接実現するばかりでなく、そのプログラムコードの指示に基づいて、コンピュータ上で稼動しているＯＳなどの処理により、上述の機能を実現される場合も含まれる。
【００８６】
これらの場合、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００８７】
【発明の効果】
以上説明したように、本発明によれば、与えられたベクトル形式のデータとの距離に基づいて、ベクトル形式のデータ集合から所定数のデータを高速に抽出することができる。これにより、例えば画像などのデータベースの検索を高速に行なうことができる。
【図面の簡単な説明】
【図１】実施形態の情報処理装置の機能構成図である。
【図２】距離計算部の処理手順を示すフローチャートである。
【図３】検索処理手順を示すフローチャートである。
【図４】ポインタの初期化処理手順を示すフローチャートである。
【図５】近傍集合の初期化処理手順を示すフローチャートである。
【図６】ポインタの更新処理手順を示すフローチャートである。
【図７】距離計算の処理手順を示すフローチャートである。
【図８】前処理手順を示すフローチャートである。
【図９】計算機実験の結果を示す図である。
【図１０】射影アルゴリズムの原理を示す図である。
【図１】
0004086376.tif 000004
【図２】
0004086376.tif 000005
【図３】
0004086376.tif 000006
【図４】
0004086376.tif 000007
【図５】
0004086376.tif 000008
【図６】
0004086376.tif 000009
【図７】
0004086376.tif 000010
【図８】
0004086376.tif 000011
【図９】
0004086376.tif 000012
【図１０】
0004086376.tif 000013