(57)【特許請求の範囲】
【請求項１】
ベクトル形式のデータの集合を記憶したデータベースと、問い合わせベクトルを入力する入力手段と、プログラムを記憶するメモリと、該メモリに記憶されたプログラムを実行することで、リスト作成手段と、リスト優先順位決定手段と、選択手段と、出力手段と、制御手段とを実現するプロセッサとを備え、前記ベクトル形式のデータの集合から、前記問い合わせベクトルと類似度の高いデータを第１の所定数抽出するデータ処理装置であって、
前記リスト作成手段が、前記データベースのデータをベクトルの１成分の強度の降順に並べたデータのリストを各成分について作成し、
前記リスト優先順位決定手段が、前記問い合わせベクトルの成分強度の降順に前記リストのそれぞれに対する優先順位を決定し、
前記選択手段が、前記各成分についてのリストから各リストに対する前記優先順位と各リスト内の順位とに基づいて第２の所定数のデータを選択し、
前記出力手段が、前記選択手段により選択された前記第２の所定数のデータから、該データの各々と前記問い合わせベクトルとの類似度に基づいて１つのデータを出力し、
前記制御手段が、前記出力手段により出力したデータ以外のデータを対象として、前記選択手段による前記第２の所定数のデータ選択と、前記出力手段による１つのデータの出力とを、当該出力手段より出力したデータの総数が前記第１の所定数のデータに達するまで繰り返し実行するように制御することを特徴とするデータ処理装置。
【請求項２】
前記類似度は、前記問い合わせベクトルの成分強度に基づいて重み付けされた各データのノルムであることを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記選択手段は、前記リストから前記第２の所定数のリストを選択し、当該選択された各リストより前記出力手段により出力したデータを除いたデータ中で最上位のデータを選択することを特徴とする請求項１に記載のデータ処理装置。
【請求項４】
前記選択手段は、前記出力手段により前回データが出力されたリストの優先順位に基づいて、前記第２の所定数のリストを選択することを特徴とする請求項３に記載のデータ処理装置。
【請求項５】
前記選択手段により選択された前記第２の所定数のデータの中で、前記問い合わせデータとの類似度を未計算のデータについて当該類似度を計算する類似度計算手段を備えたことを特徴とする請求項１に記載のデータ処理装置。
【請求項６】
ベクトル形式のデータの集合を記憶したデータベースと、問い合わせベクトルを入力する入力手段と、プログラムを記憶するメモリと、該メモリに記憶されたプログラムを実行することで、リスト作成手段と、リスト優先順位決定手段と、選択手段と、出力手段と、制御手段とを実現するプロセッサとを備えたデータ処理装置において、前記データベースに記憶されたベクトル形式のデータの集合から、前記問い合わせベクトルと類似度の高いデータを第１の所定数抽出するデータ処理方法であって、
前記リスト作成手段が、前記データベースのデータをベクトルの１成分の強度の降順に並べたデータのリストを各成分について作成するリスト作成工程と、
前記リスト優先順位決定手段が、前記問い合わせベクトルの成分強度の降順に前記リストのそれぞれに対する優先順位を決定するリスト優先順位決定工程と、
前記選択手段が、前記各成分についてのリストから各リストに対する前記優先順位と各リスト内の順位とに基づいて第２の所定数のデータを選択する選択工程と、
前記出力手段が、前記選択手段により選択された前記第２の所定数のデータから、該データの各々と前記問い合わせベクトルとの類似度に基づいて１つのデータを出力する出力工程と、
前記制御手段が、前記出力工程で出力したデータ以外のデータを対象として、前記選択工程による前記第２の所定数のデータ選択と、前記出力工程による１つのデータの出力とを、当該出力工程で出力したデータの総数が前記第１の所定数のデータに達するまで繰り返し実行するように制御する制御工程とを備えたことを特徴とするデータ処理方法。
【請求項７】
前記類似度は、前記問い合わせベクトルの成分強度に基づいて重み付けされた各データのノルムであることを特徴とする請求項６に記載のデータ処理方法。
【請求項８】
前記選択工程では、前記選択手段が、前記リストから前記第２の所定数のリストを選択し、当該選択された各リストより前記出力工程で出力したデータを除いたデータ中で最上位のデータを選択することを特徴とする請求項６に記載のデータ処理方法。
【請求項９】
前記選択工程では、前記出力工程により前回データが出力されたリストの優先順位に基づいて、前記第２の所定数のリストを選択することを特徴とする請求項８に記載のデータ処理方法。
【請求項１０】
前記プロセッサが、前記メモリに記憶されたプログラムを実行することで、更に類似度計算手段を実現し、該類似度計算手段が、前記選択工程により選択された前記第２の所定数のデータの中で、前記問い合わせデータとの類似度を未計算のデータについて当該類似度を計算する類似度計算工程を備えたことを特徴とする請求項６に記載のデータ処理方法。
【請求項１１】
ベクトル形式のデータの集合を記憶したデータベースと、問い合わせベクトルを入力する入力手段とを備えたコンピュータに、前記ベクトル形式のデータの集合から、前記問い合わせベクトルと類似度の高いデータを第１の所定数抽出する処理を実行させるデータ処理プログラムであって、
前記データベースのデータをベクトルの１成分の強度の降順に並べたデータのリストを各成分について作成するリスト作成工程と、
前記問い合わせベクトルの成分強度の降順に前記リストのそれぞれに対する優先順位を決定するリスト優先順位決定工程と、
前記各成分についてのリストから各リストに対する前記優先順位と各リスト内の順位とに基づいて第２の所定数のデータを選択する選択工程と、
該選択工程により選択された前記第２の所定数のデータから、該データの各々と前記問い合わせベクトルとの類似度に基づいて１つのデータを出力する出力工程と、
前記出力工程で出力したデータ以外のデータを対象として、前記選択工程による前記第２の所定数のデータ選択と、前記出力工程による１つのデータの出力とを、当該出力工程で出力したデータの総数が前記第１の所定数のデータに達するまで繰り返し実行するように制御する制御工程とを前記コンピュータに実行させることを特徴とするデータ処理プログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ベクトル間の類似度を計算するデータ処理装置及びその方法に関し、特に、問い合わせベクトルとの類似度に基づいて所定数のデータを出力するデータ処理装置及びその方法に関するものである。
【０００２】
【従来の技術】
ベクトル間の類似度を計算する方法として距離が一般的に用いられている。一般には、あるキー・ベクトルが与えられたときに、予め定められたベクトルの集合の中から、キー・ベクトルに近いものをＬ個抽出するという問題を扱うことが多い。このような問題設定では、全てのベクトルとの比較演算を行っていたのでは、計算量のオーダーは、ベクトルの次元Ｍとベクトルの集合の要素数Ｎに対して、Ｏ(ＭＮ)となってしまう。
【０００３】
そこで、距離計算に対する高速アルゴリズムがいくつか提供されている。これら高速アルゴリズムに共通の戦略は、予めデータを構造化しておき、距離計算時の計算複雑性を軽減しようというものである。
【０００４】
例えばベクトルの各軸の成分値をもとにソーティング・リストを作成しておく方法では、キーとなるベクトルが与えられたときに、適当な優先度によって軸をソーティングし、最上位に位置する軸のソーティング・リスト中で、キー・ベクトルの成分値がどこに位置するかを特定する。そして、近い位置に格納されているベクトルから順に、そのＩＤをもとに、ベクトルとキー・ベクトルとの距離を計算していく。正確な結果を得るためには全てのベクトルとの距離を計算しなければならないが、もしも、選択した軸の成分値に関する順序が実際のベクトル間の距離を良く反映していれば、少ない計算量で満足できる結果が期待できる。
【０００５】
この方法ではデータの構造化にＯ(Ｎlog2Ｎ)、Ｌ個のベクトルとの比較演算にＯ(Ｌlog2Ｎ)のオーダーの計算量で済む。射影方式と呼ばれるこの方式の他にも、K-dツリーや、その派生バージョンがあるが、前処理と検索時の計算量のオーダーは同じ程度である。
【０００６】
以上説明した従来技術はベクトルの距離計算に関するものであったが、ベクトル間の類似度を表現する尺度としてノルムが有効な場合がある。例えば、「Kiyoki Y., Kitagawa T., and Hayama T., "A Metadatabase System for Semantic Image Search by a Mathematical Model of Meaning," SIGMOD RECORD, Col.23, No.4, (Dec.1994)」（以下文献１と称する）では、文脈ベクトルとの類似度を以下のように計算している。即ち、文脈ベクトルをもとに表現空間に対する射影作用素を生成し、この射影作用素によって抽出された部分空間でのベクトルのノルムを計算することによって、文脈ベクトルとの類似度を定義している。
【０００７】
また、「宮原，清木，北川：“意味の数学モデルによる意味的画像探索のための高速化アルゴリズム，”情報処理学会研究報告，データベースシステム１１３−４１,（1997.7.15）」（以下文献２と称する）では、このような類似度計算のための高速計算アルゴリズムが提案されている。これは上記、距離計算における、射影方式の直接的な応用となっている。即ち、予め各軸に対するソーティング・リストを作成しておく。そして文脈ベクトルが与えられると、文脈ベクトルの成分値に基づいて各軸の優先度を決定する。ソーティング・リストの優先度と、各リストにおける順位に基づいて、文脈ベクトルとの類似度を決定する。この方式では、前処理の計算量がＯ(Ｎlog2Ｎ)、比較計算は結果として出力するデータ数Ｌのオーダーである。
【０００８】
【発明が解決しようとする課題】
しかしながら、上記文献２の従来方式には以下のような問題がある。これを図２を用いて説明する。図２は、文献２の従来方式で作成されるソーティング・リストの例を示す図である。
【０００９】
文献2の方式では、最初に、優先度が最も高い軸のソーティング・リストの最上位に位置するベクトルを最も類似度が高いと判断する。図２ではID番号10のベクトルである。次に同じ軸の第2位に位置するベクトル、図２中ID番号6のベクトルを、2番目に類似度が高いとする。3番目に類似度が高いベクトルは、優先度が2番目の軸のソーティング・リストの最上位に位置するベクトル、図中ID番号3のベクトルと決定する。このように、文献２の方式では、リスト上の位置の順に類似度を決定していくので、例えばID番号6とID番号3の順序が実際の類似度とは逆転している可能性がある。
【００１０】
【課題を解決するための手段】
上記課題を解決するために、本発明では、ベクトル形式のデータの集合を記憶したデータベースと、問い合わせベクトルを入力する入力手段と、プログラムを記憶するメモリと、該メモリに記憶されたプログラムを実行することで、リスト作成手段と、リスト優先順位決定手段と、選択手段と、出力手段と、制御手段とを実現するプロセッサとを備え、前記ベクトル形式のデータの集合から、前記問い合わせベクトルと類似度の高いデータを第１の所定数抽出するデータ処理装置において、前記リスト作成手段が、前記データベースのデータをベクトルの１成分の強度の降順に並べたデータのリストを各成分について作成し、前記リスト優先順位決定手段が、前記問い合わせベクトルの成分強度の降順に前記リストのそれぞれに対する優先順位を決定し、前記選択手段が、前記各成分についてのリストから各リストに対する前記優先順位と各リスト内の順位とに基づいて第２の所定数のデータを選択し、前記出力手段が、前記選択手段により選択された前記第２の所定数のデータから、該データの各々と前記問い合わせベクトルとの類似度に基づいて１つのデータを出力し、前記制御手段が、前記出力手段により出力したデータ以外のデータを対象として、前記選択手段による前記第２の所定数のデータ選択と、前記出力手段による１つのデータの出力とを、当該出力手段より出力したデータの総数が前記第１の所定数のデータに達するまで繰り返し実行するように制御することを特徴とする。
【００１１】
また、他の態様によれば、ベクトル形式のデータの集合を記憶したデータベースと、問い合わせベクトルを入力する入力手段と、プログラムを記憶するメモリと、該メモリに記憶されたプログラムを実行することで、リスト作成手段と、リスト優先順位決定手段と、選択手段と、出力手段と、制御手段とを実現するプロセッサとを備えたデータ処理装置において、前記データベースに記憶されたベクトル形式のデータの集合から、前記問い合わせベクトルと類似度の高いデータを第１の所定数抽出するデータ処理方法に、前記リスト作成手段が、前記データベースのデータをベクトルの１成分の強度の降順に並べたデータのリストを各成分について作成するリスト作成工程と、前記リスト優先順位決定手段が、前記問い合わせベクトルの成分強度の降順に前記リストのそれぞれに対する優先順位を決定するリスト優先順位決定工程と、前記選択手段が、前記各成分についてのリストから各リストに対する前記優先順位と各リスト内の順位とに基づいて第２の所定数のデータを選択する選択工程と、前記出力手段が、前記選択手段により選択された前記第２の所定数のデータから、該データの各々と前記問い合わせベクトルとの類似度に基づいて１つのデータを出力する出力工程と、前記制御手段が、前記出力工程で出力したデータ以外のデータを対象として、前記選択工程による前記第２の所定数のデータ選択と、前記出力工程による１つのデータの出力とを、当該出力工程で出力したデータの総数が前記第１の所定数のデータに達するまで繰り返し実行するように制御する制御工程とを備える。
【００１２】
また、他の態様によれば、コンピュータ読み取り可能な記憶媒体に、ベクトル形式のデータの集合を記憶したデータベースと、問い合わせベクトルを入力する入力手段とを備えたコンピュータに、前記ベクトル形式のデータの集合から、前記問い合わせベクトルと類似度の高いデータを第１の所定数抽出する処理を実行させるデータ処理プログラムであって、前記データベースのデータをベクトルの１成分の強度の降順に並べたデータのリストを各成分について作成するリスト作成工程と、前記問い合わせベクトルの成分強度の降順に前記リストのそれぞれに対する優先順位を決定するリスト優先順位決定工程と、前記各成分についてのリストから各リストに対する前記優先順位と各リスト内の順位とに基づいて第２の所定数のデータを選択する選択工程と、該選択工程により選択された前記第２の所定数のデータから、該データの各々と前記問い合わせベクトルとの類似度に基づいて１つのデータを出力する出力工程と、前記出力工程で出力したデータ以外のデータを対象として、前記選択工程による前記第２の所定数のデータ選択と、前記出力工程による１つのデータの出力とを、当該出力工程で出力したデータの総数が前記第１の所定数のデータに達するまで繰り返し実行するように制御する制御工程とを前記コンピュータに実行させることを特徴とするデータ処理プログラムを記憶する。
【００１３】
【発明の実施の形態】
図１は、本発明の1実施形態であるデータ処理装置の機能構成を表す図である。装置の各部は、以下に説明する機能を実現するものであれば、それぞれが専用のプログラムメモリやプロセッサを含む機器であってもよいし、複数の機能部を、同一のＣＰＵがＲＯＭやディスクメモリ等に記憶された各機能プログラム（フローチャートにつき後述する処理手順に対応するプログラムを含む）を実行することにより、あるいは各機能に対応する特定のハードウェアを制御する制御プログラムを実行することにより実現してもよい。
【００１４】
図１において、データベース103は、ベクトルとして記述された検索対象データを格納している。リスト作成部101は、データベース103のデータについて、成分毎に降順に並べたデータIDのリストを作成・記憶する。候補出力部102は、問い合わせベクトルとデータベース103のデータとの類似度を計算して所定数の候補データを出力する。
【００１５】
＜リスト作成部101＞
処理の対象となるデータは、適当な次元を持つ計量ベクトル空間上のベクトルとして表現されているとし、ベクトルの次元をＤとする。以下、データ集合に属する任意のデータXのm成分強度をXmと記述する。また、データ集合Ωに含まれるデータをXj, j∈ (1,2, ... , N)と記述する。
【００１６】
リスト作成部101では、データ集合に含まれる全てのデータの各成分値毎のソーティング・リストを作成し、記憶する。
【００１７】
m番目の成分に関するソーティング・リストのn番目の値をR(m,n)と書く。すなわち、R(m,n)は、m番目の成分に関してn番目に大きい値を持つベクトルのインデクスを表す。
【００１８】
＜候補出力部102＞
候補出力部102では、与えられた文脈ベクトルの下でのベクトルXのノルムを計算する。その処理の流れを説明する前に、計算に用いられるデータについて、図７を用いて説明する。図７は、具体例による各データの計算の途中結果を示す図である。
【００１９】
PAXはベクトル空間の各軸の優先順位を表わすベクトル変数であり、優先順位の高い順に軸の番号が格納されている。図７の例では、第４成分が最も優先順位が高く、次が第３成分となっている。Rはリスト作成部101により作成される、各成分値に基づくデータIDのソーティング・リストである。
【００２０】
INDXは、各成分で現在計算の対象となっているのが、ソーティング・リストＲの何番目のベクトルかを示すベクトル変数である。図７ではINDX(1)が１であるが、これは第1成分に対するソーティング・リストの第1番目のベクトル、即ちID10のベクトルが計算の対象となっていることを示している。NRMは上記計算の対象となっている各ベクトルのノルムを格納するベクトル変数である。
【００２１】
PTRは計算の対象としているベクトルを指すポインタを成分に持つベクトルである。TNRMはPTRで指し示されるベクトルのノルムを格納する。ANSは検索結果を格納する。
【００２２】
図３は、候補出力部102の処理手順を示すフローチャートである。同図を用いて候補出力部102の処理の流れを説明する。
【００２３】
ステップＳ３０１では、問い合わせベクトルの成分値に基づいてPAXを作成する。ここでは、問い合わせベクトルの成分強度の降順に軸の優先順位を定め、優先順位の高い順に軸の番号を格納するものとする。ステップＳ３０２では、PTR、D、INDX、NRMを初期化する。
【００２４】
ここで、PTRは計算の対象としているベクトルを指すポインタを成分に持つ３次元ベクトルであり、以下のように初期化する：
PTR = (0, 1, 2)T                            (1)
【００２５】
DはPTRの有効成分数を表すものであり、ベクトルの次元数Mに初期化する。
【００２６】
INDXはデータベクトルと同じ次元数Mを持つベクトル変数であり、INDX(n)には、n番目の成分に対するソーティング・リストにおいて現在計算の対象となっている要素が何番目の要素かが格納されている。
【００２７】
例えば、INDX(m)にnが格納されているときには、R(m,n)の内容（ベクトルのID番号）を指すポインタを意味している。全ての要素に対して１で初期化される。
【００２８】
NRMはデータベクトルと同じ次元数Mを持つベクトル変数であり、NRM(n)には、INDX(n)で指し示されるID番号のノルムが格納されている。ノルムの計算は、要求されるまでは行わない。そこで、−1を格納することによって、まだ計算されていないことを表すことにする。従って、初期値は全ての値に対して−1を設定する。
【００２９】
TNRMはPTRと同じ次元を持つベクトル変数であり、PTRで指し示される3個のベクトルのノルムを格納する。
【００３０】
PTR、PAX、そしてINDXによってベクトルのID番号が決定される。実際、PTR(n)に対応するベクトルID番号Jは次式で計算される：
J = R( PAX(PTR(n)), INDX(PAX(PTR(n)))  （２）
例えば、図７のPTR(2)に対するベクトルのID番号Jは、
0004194680.tif 000002
と計算される。
【００３１】
ステップＳ３０３では、図4につき後述する処理によって、PTRで指し示される3個のベクトルのノルムの計算を行う。これにより変数TNRMが更新される。ただし、PTRが指すベクトルID番号が適当でないとき、例えば０以下であったり、データの総数を超えるような場合、或いはPTRが直接指し示すべき行列Rのインデクスが適当でないような場合には、−１が格納される。これによって格納されている値が有効かどうかが判断できる。
【００３２】
ステップＳ３０４では、検索結果が何番目であるかを示すmを１に設定する。ステップＳ３０５では、PTR(2)に対応するベクトルID番号を(2)式で計算し、ｍ番目の検索結果ANS(m)として出力する。
【００３３】
ステップＳ３０６では、ｍが出力すべき候補数Ｌ以上であれば処理を終了し、そうでなければステップＳ３０７へ進む。ステップＳ３０７では、
INDX(PAX(PTR(2)))の内容に１を加算する。ステップＳ３０８では、
NRM(PAX(PTR(2)))に−1を格納する。
【００３４】
ステップＳ３０９では、図4につき後述するノルム計算処理によってノルムを計算し、TNRMの値を更新する。ステップＳ３１０では、図６につき後述するポインタ更新処理によってPTRの値を更新する。ステップＳ３１１では、ｍに１を加算し、ステップＳ３０５へ進む。
【００３５】
図４は、ポインタの指すベクトルのノルム計算処理手順を示すフローチャートである。図4につきTNRMのノルムの計算処理を説明する。
【００３６】
ステップＳ４０１では、ｎを１に初期化する。ステップＳ４０２では、図5につき後述するノルム計算処理によって、PTR(n)に対応するベクトルのノルムを計算し、TNRM(n)に値を格納する。ステップＳ４０３では、ｎに１を加算する。ステップＳ４０４では、ｎが３を超えたかどうか検査し、超えていなければＳ４０２へ進み、超えていれば処理を終了する。
【００３７】
図５は、各ベクトルのノルム計算処理手順を示すフローチャートである。図５につきステップＳ４０２で実行されるノルム計算処理を説明する。この処理はポインタPTR(n)の指すベクトルのID番号Jを引数として受け取る。
【００３８】
ステップＳ５０１では、PAX(J)が０を超え、かつN以下かどうかを検査し、この範囲内であればステップＳ５０２へ、そうでなければステップＳ５０６へ進む。
【００３９】
ステップＳ５０２では、NRM(PAX(J))が非負かどうか検査し、そうであればステップＳ５０５へ、そうでなければステップＳ５０３へ進む。
【００４０】
ステップＳ５０３では、ID番号J = R( PAX(PTR(n)), INDX(PAX(PTR(n)))が既に答えとして出力されたかどうかを検査し、出力されていればステップＳ５０６へ、そうでなければステップＳ５０４へ進む。
【００４１】
ステップＳ５０４では、次式によってID番号JのベクトルＸのノルムを計算し、NRM(PAX(PTR(J)))に格納する：
‖X‖ = (ΣjKj2Xj2)1/2                      (3)
ただし、Ｋ=(K1, K2, ... , KM)はユーザによって与えられた問い合わせベクトルである。あるいはノルムの２乗でも構わない：
‖X‖2 = (ΣjKj2Xj2)                        (3)'
【００４２】
ステップＳ５０５では、戻り値としてNRM(PAX(PTR(J)))をセットする。
ステップＳ５０６では戻り値として−１をセットする。
【００４３】
図６は、ポインタの更新処理手順を示すフローチャートである。図６につきステップＳ３１０で実行される処理を説明する。
【００４４】
ステップＳ６０１では、TNRMの３個の成分のうちの最大値を求め、そのインデクスが１であればステップＳ６０２へ、そうでなければステップＳ６０３へ進む。ステップＳ６０２では、PTRの全ての成分から１を減ずる。ステップＳ６０３では、最大値のインデクスが３であればステップＳ６０４へ、そうでなければ処理を終了する。ステップＳ６０４では、PTRの全ての成分に１を加算する。以上により、PTR(2)はTNRMの３個の成分のうちの最大値に対応するベクトルを指すようになり、ステップＳ３０５で、そのID番号が検索結果として出力される。
【００４５】
上記装置を用いて、以下に示す１０個の５次元（縦）ベクトルのソーティングリストを作成する。ただし、ユーザーが指定した問い合わせベクトルK = (0.1208, 0.3529, 0.6511, 0.6595, 0.0439)T、Ｌ=３とする。
【００４６】
X1 = ( 0.1612, 0.0346, 0.4996, 0.5000, 0.6879 )T
X2 = ( 0.3638, 0.4927, 0.7882, 0.0328, 0.0507 )T
X3 = ( 0.5638, 0.7144, 0.0082, 0.4081, 0.0712 )T
X4 = ( 0.2602, 0.4280, 0.3671, 0.5799, 0.5274 )T
X5 = ( 0.4488, 0.0783, 0.5570, 0.3543, 0.5972 )T
X6 = ( 0.6401, 0.5359, 0.1845, 0.0334, 0.5176 )T
X7 = ( 0.2215, 0.4269, 0.5105, 0.6688, 0.2465 )T
X8 = ( 0.1550, 0.6164, 0.4534, 0.4726, 0.4087 )T
X9 = ( 0.0603, 0.5242, 0.7343, 0.2263, 0.3622 )T
X10 = ( 0.7386, 0.4604, 0.2291, 0.2649, 0.3462 )T
【００４７】
さて、まずリスト作成部101において、成分毎の強度に関する降順リストとして以下の５個のリストを生成し、記憶する：
１番目の成分 → ｛X10, X6, X3, X5, X2, X4, X7, X1, X8, X9｝
２番目の成分 → ｛X3, X8, X6, X9, X2, X10, X4, X7, X5, X1｝
３番目の成分 → ｛X2, X9, X5, X7, X1, X8, X4, X10, X6, X3｝
４番目の成分 → ｛X7, X4, X1, X8, X3, X5, X10, X9, X6, X2｝
５番目の成分 → ｛X1, X5, X4, X6, X8, X9, X10, X7, X3, X2｝
【００４８】
降順リストの計算量はデータ数Nに対してＯ(NlogN)であるから、ベクトルがM次元であるとすると、予めO(MNlogN)の準備を行えばよい。
【００４９】
次に候補出力部102の処理を実行する。
【００５０】
ステップＳ３０１で、問い合わせベクトルの成分値からPAXは以下のように決定できる：
PAX = ( 4, 3, 2, 1, 5 )              (4)
【００５１】
ステップＳ３０２で以下のように初期化を行う：
D = 5
PTR = ( 0, 1, 2 )
INDX = ( 1, 1, 1, 1, 1)
NRM = ( -1, -1, -1, -1, -1 )
【００５２】
ステップＳ３０３では、ノルムを計算する。PTR(1)に対応する行列Rのインデクスは、(PAX(PTR(1)), INDX(PAX(PTR(1)))) = (PAX(0), INDX(PAX(0)))となり、PAX(0)は適当でないので、PTR(1)に対応するID番号は存在せず、TNRM(1)には−１が格納される。
【００５３】
PTR(2)に対応する行列Rのインデクスは、
(PAX(PTR(2)), INDX(PAX(PTR(2)))) = (PAX(1), INDX(PAX(1)))= (4, 1)となり、ベクトルID番号はR(4, 1)の値、即ち７と与えられる。ID７のベクトルX7のノルムを(3)式を用いて計算すれば0.5376が得られ、NRM(PAX(PTR(2))) = NRM(4)に格納する。同様にPTR(3)に対し、NRM(PAX(PTR(3))) = NRM(3)にX2のノルム、0.5070を格納する。
【００５４】
ステップＳ３０４では、ｍを１に設定する。ステップＳ３０５では、PTR(2)に対応するベクトルID番号である７を出力する。ステップＳ３０６では、ｍがL以上かどうかを検査し、ｍがL未満なのでステップＳ３０７に進む。
【００５５】
ステップＳ３０７では、INDX(PAX(PTR(2))) = INDX(4)の値１に１を加算し、２とする。ステップＳ３０８では、NRM(PAX(PTR(2))) = NRM(4)に−1を格納する。
【００５６】
ステップＳ３０９ではノルムを計算する。PTRで指し示されているNRMのインデクスは４と３であり、NRM(4)とNRM(3)のうち、値が負であるのはNRM(4)なので、ID番号がR(4, INDX(4)) = R(4, 2) = 4のベクトルのノルムを計算する。その結果0.3945という値が得られ、この値をNRM(4)及びTNRM(2)に格納する。
【００５７】
ステップＳ３１０では、PTRの値を更新する。図6に示すフローチャートに基づけば、TNRMの値に基づいて処理が行われる。現在のTNRMは
TNRM = ( -1, 0.3945, 0.5070 )T
であり、最大値を取る成分のインデクスは３なので、PTRの全ての値に１を加算し、
PTR = ( 1, 2, 3)T
となる。ここまでの処理によって、各データの値は図８に示すように更新される。
【００５８】
ステップＳ３１１では、ｍに１を加算する。ステップＳ３０５では、R(PAX(PTR(2)), INDX(PAX(PTR(2)))) = 2を2番目の結果として出力する。ステップＳ３０６では、mがL以上かどうか検査し、ｍはL未満なのでステップＳ３０７へ進む。ステップＳ３０７では、INDX(PAX(PTR(2))) = 1に１を加算し２にする。ステップＳ３０８では、NRM(PAX(PTR(2)))に−1を格納する。
【００５９】
ステップＳ３０９では、ノルムを計算する。NRM(PTR(1))、NRM(PTR(2))、NRM(PTR(3))のうちで−1なのはNRM(PTR(2))とNRM(PTR(3))なので、これらに対応するベクトル、即ち、ID番号９と３のベクトルのノルムを計算する。その結果、
NRM(PTR(3)) = 0.4880, TNRM(2) = 0.4880
NRM(PTR(2)) = 0.3286, TNRM(3) = 0.3286となる。
【００６０】
ステップＳ３１０では、PTRを更新する。TNRMの成分のうち最大値を取るのは２番目の成分なので、PTRの値はそのままである。ここまでの処理によって、各データの値は図９に示すように更新される。
【００６１】
ステップＳ３１１において、mを更新する。ステップＳ３０５では、
R(PAX(PTR(2)), INDX(PAX(PTR(2)))) = R(3, 2) = 9なので、９を結果として出力する。ステップＳ３０６でｍがL以上かどうか検査するが、ｍ＝Lなので処理を終了する。
【００６２】
上記例題に対する出力として、{X7, X2, X9}という候補リストが得られた。内積計算を正確に行った結果である{ X7, X2, X9, X8, X4, X1, X3, X5, X10, X6 }の上位3個と比較すると、上述の高速近似計算の結果全てが正解であったことがわかる。常に正解を与える保証はないが、本発明が良い近似解を与えることが期待できる。以上の処理の計算量は、ベクトルの次元Ｍと抽出すべきデータ数Ｌに対してＭＬ個の乗算と加算で十分である。
【００６３】
これに対し、通常の内積計算を行うには、全データ数をＮとすると、それぞれの内積を計算するためにＭＮ個の乗算と加算が必要である。従って、ＬがＮに比べて非常に小さい場合、計算量の点で有効な技術である。膨大なＮを扱う状況は、一般の認識問題で常に出くわすものであり、その際、基本となるデータKと近いデータをせいぜい数個得られれば、その後の処理にとって十分有効である場合が多い。上記の方法は、そのような場合に有効である。
【００６４】
尚、本発明は、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記憶した記憶媒体を、装置あるいはシステムに供給し、装置あるいはシステム内のコンピュータが記憶媒体に格納されたプログラムコードを読み出して実行することによって達成してもよい。
【００６５】
更に、装置あるいはシステム内のコンピュータが記憶媒体に格納されたプログラムコードを読み出して実行することによって、上述した実施形態の機能を直接実現するばかりでなく、そのプログラムコードの指示に基づいて、コンピュータ上で稼動しているＯＳなどの処理により、上述の機能を実現される場合も含まれる。
【００６６】
これらの場合、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【００６７】
【発明の効果】
以上説明したように、本発明によれば、与えられたベクトルとの類似度に基づくデータ集合のソーティング・リストの一部を、高速に生成することができる。これにより、問い合わせベクトルとの類似度の高いデータをデータベースから検索する場合において、検索速度を劇的に短縮することができる。
【図面の簡単な説明】
【図１】実施形態の情報処理装置の機能構成図である。
【図２】ソーティング・リストの例を示す図である。
【図３】候補出力部の処理手順を示すフローチャートである。
【図４】ポインタの指すベクトルのノルム計算処理手順を示すフローチャートである。
【図５】各ベクトルのノルム計算処理手順を示すフローチャートである。
【図６】ポインタの更新処理手順を示すフローチャートである。
【図７】具体例による計算の途中結果を示す図である。
【図８】具体例による計算の途中結果を示す図である。
【図９】具体例による計算の途中結果を示す図である。
【図１】
0004194680.tif 000003
【図２】
0004194680.tif 000004
【図３】
0004194680.tif 000005
【図４】
0004194680.tif 000006
【図５】
0004194680.tif 000007
【図６】
0004194680.tif 000008
【図７】
0004194680.tif 000009
【図８】
0004194680.tif 000010
【図９】
0004194680.tif 000011