(57)【要約】【課題】局所性検知可能ハッシング処理において、入力となる多次元ベクトルを１回スキャンするだけで、局所性検知可能ハッシュの構築と近似近傍検索とを実行することができ、したがって、局所性検知可能ハッシュの構築と近似近傍検索とが高速である局所性検知可能ハッシュの構築装置、類似近傍検索処理装置を提供することを目的とする。【解決手段】局所性検知可能ハッシング処理において、乱数表を構成する複数の乱数をソートし、しかも、上記ソートされた複数の乱数を、昇順または降順に、複数の乱数表に割り当てる。【選択図】図９
2010277522.tif 000002
【特許請求の範囲】
【請求項１】
画像や動画、テキスト等の多次元ベクトルとして表現されている多次元ベクトルデータベースにおいて、
多数の乱数をソートするソート手段と；
上記ソートされた複数の乱数を、昇順または降順に、複数の乱数表に割り当てる割り当て手段と；
上記割り振られた乱数表を用いて、局所性検知可能ハッシングを行う局所性検知可能ハッシュの構築手段と；
を有することを特徴とする局所性検知可能ハッシュの構築装置。
【請求項２】
請求項１において、
必要な乱数を一度に構築することによって、上記乱数表を構築することを特徴とする局所性検知可能ハッシュの構築装置。
【請求項３】
請求項１において、
上記割り振られた乱数表を、上記乱数表の先頭から、１回のスキャンで、局所性検知可能ハッシング処理を実行することを特徴とする局所性検知可能ハッシュの構築装置。
【請求項４】
画像や動画、テキスト等の多次元ベクトルとして表現されている多次元ベクトルデータベースにおいて、
多数の乱数をソートするソート手段と；
上記ソートされた複数の乱数を、昇順または降順に、複数の乱数表に割り当てる割り当て手段と；
上記割り振られた乱数表を用いて、局所性検知可能ハッシングを構築する局所性検知可能ハッシュの構築手段と；
上記割り振られた乱数表を用いて、近似近傍検索処理を実現する近似近傍検索処理手段と；
を有することを特徴とする類似近傍検索処理装置。
【請求項５】
請求項１〜請求項４のいずれか１項記載の装置を構成する各手段としてコンピュータを機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テキストや画像、動画といった高次元ベクトルとして表現できる情報から、高速で類似検索する技術に関する。
【背景技術】
【０００２】
テキスト、写真、動画等、多数の特徴を持つ情報を、多次元ベクトルとして表現し、大量の多次元ベクトルデータの中から、類似検索を高速に行う技術は、非常に重要である。
【０００３】
特に、近年は、ウェブの爆発的普及や携帯電話の機能の発達等によって、一般ユーザが情報を記録し、公開する機会が急増している。爆発する情報の海に溺れないためには、大量の多次元ベクトルデータの中から、高速で類似検索することの重要性が高まっている。
【０００４】
これまで、数多くの多次元ベクトル検索の高速化技術が提案されている。１９９８年以前は、主に木構造を利用した多次元ベクトル検索技術が提案された。しかし、木構造を用いる多次元ベクトル検索技術は、次元数が高くなると、いわゆる「次元の呪い」問題が発生し、線形検索（Linear Search）と同等のコストが必要である。つまり、木構造を利用した高速化手法は、「次元の呪い」によって、次元数が１０を越えると、問合せを高速で処理することができない（たとえば、非特許文献１参照）。
【０００５】
そこで、ＶＡ−ｆｉｌｅと呼ばれるデータ構造を利用し、多次元ベクトル検索を高速化する技術が提案された（たとえば、非特許文献５参照）。このＶＡ−ｆｉｌｅは、空間を分割し、それぞれにビットシーケンスを割り振ることによって、多次元空間の検索をビットシーケンススキャンによって実現する。
【０００６】
しかし、上記ＶＡ−ｆｉｌｅは、その性能が、ビットシーケンスの並びに影響を受け、ビットの全スキャンに近いコストがかかること等が、課題である。これらの課題を解決するために、局所性検知可能ハッシュ（LSH（Locality Sensitive Hashing））が提案されている（たとえば、非特許文献２参照）。この「局所性検知可能ハッシュ」は、多次元ベクトルを近似し、複数のハッシュを用いて索引付けを行う。これによって、検索精度を、確率的に保障しながら、検索の計算コストは、（ハッシュ個数）×（次元数）で済む。理論上、次元数に大きく依存せず、高速に類似検索が可能であるので、ウェブにおける情報推薦や画像検索等への応用が期待されている。
【０００７】
特許文献１記載の発明（木構造を利用した高速化手法）は、上記と同様に、近似近傍検索を実現しているが、精度の保障がなく、また、実データである文書ベクトルに対する検索の精度はそれほど高くない（たとえば、非特許文献４参照）。
【０００８】
高次元データに対する高速な類似検索技術としては、「局所性検知可能ハッシュ」（ＬＳＨ）が最も有望である。この局所性検知可能ハッシュは、近似アルゴリズムであるものの、確率的に精度が保証され（たとえば、非特許文献２、３参照）、非常に高速に近傍（類似）検索を実現する。理論としてのフレームワークは、非特許文献２に提案され、非特許文献３において、Ｌ１ノルムが定義された多次元ベクトル空間を、ハミング空間に写像する局所性検知可能ハッシュが実装された。また、最近は、Ｌ１ノルムだけではなく、安定分布を利用するＬ２ノルム版や、コサイン類似度版、Ｊａｃｃａｒｄ係数版も提案されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００４−０４６６１２号公報
【非特許文献】
【００１０】
【非特許文献１】Kevin Beyer, Jonathan Goldstein, Raghu Ramakrishnan, Uri Shaft,「When Is “Nearest Neighbor” Meaningful?」ICDT 2005
【非特許文献２】Piotr Indyk, Rajeev Motwani,「Approximate nearest neighbors: towards removing the curse of dimensionality」,Annual ACM Symposium on Theory of Computing 1998
【非特許文献３】Aristides Gionis, Piotr Indyk, RajeevMotwani,「Similarity Search in High Dimensions via Hashing」,Very Large Data Bases 1999
【非特許文献４】北  研二，獅々堀  正幹「１次元自己組織化マップを用いた高次元データの高速近傍検索」、自然言語処理 150-5、2002.7.15
【非特許文献５】Roger Weber, Hans-J.Schek, Stephen Blott,「A Quantitative Analysis and Performance Study for Similarity-Search Methods in High-Dimensional Spaces」, Very Large Data Bases 1998
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上記従来例において、局所性検知可能ハッシング処理の中心となる乱数表は、それぞれのハッシュ（乱数表を構成する乱数）毎にランダムにビット位置が決められている。
【００１２】
したがって、上記従来例では、局所性検知可能ハッシュの構築時と近似近傍検索処理時とに、入力となる多次元データを、その都度、スキャンする必要があり、つまり、複数回、スキャンする必要があり、または特殊な索引構造を要求する必要がある。このために、上記従来例では、局所性検知可能ハッシュの構築と近似近傍検索とが遅いという問題がある。
【００１３】
本発明は、局所性検知可能ハッシング処理において、入力となる多次元ベクトルを１回スキャンするだけで、局所性検知可能ハッシュの構築と近似近傍検索とを実行することができ、したがって、局所性検知可能ハッシュの構築と近似近傍検索とが高速である局所性検知可能ハッシュの構築装置、類似近傍検索処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明は、局所性検知可能ハッシング処理において、乱数表を構成する複数の乱数をソートし、しかも、上記ソートされた複数の乱数を、昇順または降順に、複数の乱数表に割り当てる。
【発明の効果】
【００１５】
本発明によれば、局所性検知可能ハッシング処理は、入力となる多次元ベクトルに対して先頭から順番に１回スキャンするだけで、それぞれの乱数表が持つ乱数値（ビットの位置）を検出することができるので、入力ベクトルを複数回スキャンする必要がないという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】近傍検索のイメージを説明する図である。
【図２】図１に示す例に関して、近似近傍検索のイメージを説明する図である。
【図３】多次元ベクトルデータからの局所性検知可能ハッシュ構築と近似近傍検索処理の流れとを説明する図である。
【図４】局所性検知可能ハッシュのそれぞれのハッシュのバケットの構造を説明する図であり、図３について具体的なパケットの様子を示す図である。
【図５】局所性検知可能ハッシュを利用した近似近傍検索処理の流れを説明する図である。
【図６】Ｌ１距離による類似検索を実現する局所性検知可能ハッシュの詳細を説明する図である。
【図７】通常の局所性検知可能ハッシュで用いられる乱数表と多次元ベクトルのＵＮＡＲＹ表現との関係を説明する図である。
【図８】実施例において、ソートされた乱数表による多次元ベクトルのＵＮＡＲＹ表現との関係を説明する図である。
【図９】実施例において、類似近傍検索エンジンをバックエンドとして利用し、類似近傍検索アプリケーション１００のシステム概略を示すブロック図である。
【図１０】実施例１において、ソートされた乱数表構築処理（処理Ａ）を示すフローチャートである。
【図１１】本発明の実施例２であるソートされた乱数表の処理方法（処理Ｂ）を示すフローチャートである。
【図１２】本発明の実施例３であるソートされた乱数表を用いた局所性検知可能ハッシュ構築方法を示すフローチャートである。
【図１３】本発明の実施例４であるソートされた乱数表を用いた局所性検知可能ハッシュ構築方法を示すフローチャートである。
【図１４】図９に示す実施例を別の表現で記載した図である。
【発明を実施するための形態】
【００１７】
発明を実施するための形態は、次の実施例である。
【実施例１】
【００１８】
まず、実施例に使用されている各用語の説明について説明する。
【００１９】
「多次元ベクトル」は、物体の位置や形状、画像、動画、テキスト等の特徴をユークリッド空間のベクトルと見做して表現したものである。次元数は、計測機器やアプリケーションに依存して決められる。
【００２０】
「類似検索」は、大量の多次元ベクトルが格納されている多次元データベースから、与えられた検索クエリに近い（似た）ベクトルを取得する検索である。上記近さは、距離（類似度）によって決められる。
【００２１】
「距離」は、ある多次元ベクトルのうちの２つのベクトルの間に定義される尺度のうちで、距離の公理を満たすものである。ハミング距離、ユークリッド距離、Ｌ＿１ノルム、等、本明細書においては、できるだけ、下記の類似度ではなく距離を用いて説明する。
【００２２】
「類似度」は、ある２つのベクトルが類似するほど高い値を示す尺度である。値が０以上１以下になるように正規化して定義することが多い。１に近いほど、２つの情報が類似し、０に近いほど、類似していないことを示す。例としては、コサイン類似度がある。一般には、距離とは反対の関係にあり、類似度が高いほど距離が小さく、類似度が小さいほど距離が大きい。たとえば、最大値を１に正規化した距離ｄ（ｘ、ｙ）を用いて、１−ｄ（ｘ、ｙ）を類似度と考えることができる。
【００２３】
「近傍検索」は、与えられた検索クエリの近傍を取得する検索である。類似検索が、より一般的に用いられる語であるのに対して、近傍検索は、主に下記の具体的な検索を指す。
【００２４】
図１は、近傍検索のイメージを説明する図である。
【００２５】
トップｋ近傍検索は、検索クエリに近いベクトルのうちで、上位ｋ件を取得する検索である。ｋ＝１の場合、図１に示すように、最近傍検索である。
【００２６】
近傍検索する場合、中心の黒丸が検索キーであり、その周囲から近い点を取得する。たとえば、最近傍は、点Ｐ１であり、トップ３は、点Ｐ１、Ｐ２、Ｐ３の順である。範囲を問合せる場合、範囲の半径をｒとすれば、この検索結果は、点Ｐ１、Ｐ２、Ｐ３、Ｐ４である。
【００２７】
図２は、図１に示す例に関して、近似近傍検索のイメージを説明する図である。
【００２８】
「近似近傍検索」は、近傍検索の結果において、必ずしも最近傍から取得したとは限らないベクトルを含む近傍検索である。フォーマルには、図２に示すように、「近似近傍検索」は、距離ｒに対して誤差係数εを含む（１＋ε）ｒの範囲から、近傍を取得する検索として定義されている。
【００２９】
距離に誤差を含むが、その分、高速化の余地を残す。たとえば、中心の黒丸から点Ｐ２までの距離が、点Ｐ１までの距離と大差ない場合、検索結果として点Ｐ２を出力する可能性がある。点Ｐ２という誤差を含む形で返しても構わないという立場に立つのが、近似近傍検索である。
【００３０】
「ハッシュ」は、検索キーに対して、代数演算でアドレスを割り当て、定数時間での検索を可能にする索引構造であり、ハッシュテーブルとも呼ばれる。様々なプログラミング言語に標準のデータ構造として採用され、局所性検知可能ハッシュ（ＬＳＨ（Locality Sensitive Hashing））も、上記ハッシュを利用して実装することができる。
【００３１】
「局所性検知可能ハッシュ（ＬＳＨ（Locality Sensitive Hashing））」は、Ｉｎｄｙｋ等によって提案された（関連文献２参照）、ハッシュを用いて、近似近傍検索を実現する方法である。ハミング距離、ユークリッド距離、Ｌ２ノルム、コサイン類似度に対応するハッシュ構成方法が提案されている。通常のハッシュは、完全一致検索しかサポートしないが、局所性検知可能ハッシュは、近似近傍を検索する。
【００３２】
「乱数表」は、局所性検知可能ハッシュにおいて、それぞれのハッシュの入力キーとなるビット位置の集合である。以下では、乱数の例として、「６１３５５、６４９７９、７０９８５、７８１７３、８１８９０」を考える。
【００３３】
局所性検知可能ハッシュの構築と近似近傍検索とを高速処理するためには、乱数表自体をソートし、配列として保持する。
【００３４】
図３は、多次元ベクトルデータからの局所性検知可能ハッシュ構築と近似近傍検索処理の流れとを説明する図である。
【００３５】
多次元データから、一種の索引構造である局所性検知可能ハッシュを構築する処理と、検索クエリの処理とにおける流れは同じである。まず、入力となる多次元ベクトルに対して、局所性検知可能ハッシング処理を行い、パケットに格納する。局所性検知可能ハッシュは、複数のハッシュによって構築される（必要であれば、２段目のハッシングを行い、パケット数を減らす）。同一のパケットに入っている多次元ベクトル同士が近傍である可能性が高い。パケットの具体的な様子を図４に示す。
【００３６】
図４は、局所性検知可能ハッシュのそれぞれのハッシュのバケットの構造を説明する図であり、図３について具体的なパケットの様子を示す図である。
【００３７】
ハッシュＬ１では、点Ｐ１、Ｐ２、Ｐ３が同一のパケットに入っており、近傍である可能性が高いことを示している。ハッシュＬ２では、点Ｐ１、Ｐ２が同一のパケットに入っており、互いに近傍である可能性が高いことを示している。この２つのパケットの状況によって、点Ｐ１と点Ｐ２とは、互いに近傍である確率が高い。それぞれのハッシュのキーは、それぞれが持つ乱数表のビット位置のＵＮＡＲＹ表現の値を結合したものである。
【００３８】
図５は、局所性検知可能ハッシュを利用した近似近傍検索処理の流れを説明する図である。
【００３９】
局所性検知可能ハッシング処理、パケットの集計処理までは、局所性検知可能ハッシュを一次記憶に予め読み込むことによって、高速に処理可能である。実データは大きいことが予想されるが、絞り込まれたデータのみを取得すれば良いので、二次記憶に格納することが可能である。これによって、局所性検知可能ハッシュが一次記憶に入る範囲であれば、近似近傍検索を高速に処理可能である。
【００４０】
図６は、Ｌ１距離による類似検索を実現する局所性検知可能ハッシュの詳細を説明する図である。
【００４１】
局所性検知可能ハッシングの内部では、正の整数値を扱うので、多次元ベクトルを予め変換する。多次元ベクトルのそれぞれの次元の値の最大値を求め、０番目からそれぞれの値までを１としそれ以降を０とするバイナリ表現であるＵＮＡＲＹ表現を仮想的に用いる。
【００４２】
［ＵＮＡＲＹ表現とその結合の例］
今、最大値が１０であるときに、ベクトル（３，１，５，８）のＵＮＡＲＹ表現は、
（１１１０００００００，１０００００００００，１１１１１０００００，１１１１１１１１００）であり、この結合は、
１１１０００００００１０００００００００１１１１１００００１１１１１１１１００である。
【００４３】
［ｂｉｔ  ｓａｍｐｌｉｎｇの例］
乱数表が（１０，２３，３８）であるときにおけるｂｉｔ  ｓａｍｐｌｉｎｇした結果は、上記結合の１０，２３，３８番目のビットを結合した０１１になる。このｂｉｔ  ｓａｍｐｌｉｎｇし結合した値を、ハッシュのキーとして元のデータをパケットに格納する。
【００４４】
図７は、通常の局所性検知可能ハッシュで用いられる乱数表と多次元ベクトルのＵＮＡＲＹ表現との関係を説明する図である。
【００４５】
ＵＮＡＲＹ表現を結合したものは非常に大きくなるので、その処理回数をできるだけ減らしたい。通常の局所性検知可能ハッシュでは、それぞれの乱数表間での乱数の値に対する制約が何もないので、図の矢印の交差が示すように、ビット位置の交差が発生する。この場合、局所性検知可能ハッシュ構築、近似近傍検索処理のいずれにおいても、ＵＮＡＲＹ表現を結合したものを何度も確認する必要があり効率的ではない。
【００４６】
図８は、実施例において、ソートされた乱数表による多次元ベクトルのＵＮＡＲＹ表現との関係を説明する図である。
【００４７】
上記実施例は、図８に示すように、ステップＳ１３、Ｓ１４に特徴がある。つまり、Ｓ１３で、整数乱数生成器ｒａｎｄを用いて、ｄ＊ｓ個の乱数を生成し、Ｓ１４で、ｄ＊ｓ個の乱数をソートして、最初の乱数表から、小さい順に埋めていく。その後に、Ｓ１５で、Ｄ個の乱数表を出力する。
【００４８】
実施例では、図８に示すように、それぞれの乱数表内の乱数が、乱数全体で連続する順序を持つように乱数表を設計する。これによって、ビット位置の交差が無くなる。すなわち、１つの乱数表の処理は、連続する区間だけの処理で完結するので、乱数表を小さいほうから順番に処理することによって、ＵＮＡＲＹ表現を結合したもののスキャンは、１回で済む。
【００４９】
図９は、実施例において、類似近傍検索エンジンをバックエンドとして利用し、類似近傍検索アプリケーション１００のシステム概略を示すブロック図である。
【００５０】
類似近傍検索アプリケーションの具体例は、お勧め商品を推薦するために購買履歴ベクトルから類似ベクトルを検索するレコメンデーションシステム、大量の画像データから、似た画像を検索する類似画像検索システム、似た内容を記述した特許文献を検索するための関連特許文献検索システム等である。
【００５１】
利用者ＰＮ１、ＰＮ２、ＰＮ３は、それぞれ、クライアントＣＬ１、ＣＬ２，ＣＬ３を通してネットワーク越しに、類似近傍検索アプリケーション１００を利用する。類似近傍検索アプリケーション１００の内部では、利用者からのアクセスは、ルータＲ１、ＬＡＮ１０１を介して、アプリケーションサーバＳＶ１、データベースサーバＳＶ２，ＳＶ３に渡される。アプリケーションサーバＳＶ１は、ユーザインタフェースやアプリケーションのロジックを提供する。データベースサーバＳＶ２、ＳＶ３には、ユーザ情報やコンテンツ情報、また、類似近傍検索エンジンＥ１によって構築された局所性検知可能ハッシュ索引や近傍情報のキャッシュ等が格納されている。
【００５２】
類似近傍検索エンジンＥ１は、乱数表構築エンジンＥ１１、局所性検知可能ハッシュ構築エンジンＥ１２、近似近傍検索エンジンＥ１３を有する。乱数表構築エンジンＥ１１は、乱数生成器を用いて、提案手法に要求される度に、乱数を生成する。局所性検知可能ハッシュ構築エンジンＥ１２は、データ格納時に局所性検知可能ハッシング処理を行い、局所性検知可能ハッシュ索引を構築する。構築された局所性検知可能ハッシュ索引は、データベースサーバＳＶ２、ＳＶ３に格納する。近似近傍検索エンジンＥ１３は、ユーザのアクセスに応じてアプリケーションサーバＳＶ１から渡される入力となる問合せに対して、局所性検知可能ハッシング処理を行い、類似近傍を取得する。
【００５３】
類似近傍検索システムは、様々なアプリケーションのバックエンドエンジンとして利用することができる。
【００５４】
類似近傍検索エンジンＥ１は、アプリケーションサーバＳＶ１が利用し、乱数表構築エンジンＥ１１と、局所性検知可能ハッシュ構築エンジンＥ１２と、近似近傍検索エンジンＥ１３とによって構成されている。これらの処理部を、単一のサーバ内で実現してもよく、複数台で分散して実現するようにしてもよい。
【００５５】
［ソートされた乱数表構築処理（処理Ａ）］
従来の局所性検知可能ハッシュでは、乱数表間に特に関連性は規定されていない。実施例１である処理Ａでは、全ての乱数をソートしたときに、図８に示すように、連続した乱数値によって、各乱数表が構成されているように、乱数表を構築している。
【００５６】
次に、ソートされた乱数表構築処理（処理Ａ）について説明する。
【００５７】
図１０は、実施例１において、ソートされた乱数表構築処理（処理Ａ）を示すフローチャートである。
【００５８】
ステップＡ０で、局所性検知可能ハッシュ数を、ｎとし、局所性検知可能ハッシュのサンプル数を、ｄ’とし、多次元ベクトル値の最大値を、ｍａｘとし、整数乱数生成器を、ｒａｎｄとし、これを入力する。
【００５９】
ステップＡ２で、整数乱数生成器ｒａｎｄが、１以上、多次元ベクトル値の最大値ｍａｘ以下であるｎ×ｄ’個の乱数を作成する。そして、ステップＡ１で作成された乱数を昇順にソートする。
【００６０】
ステップＡ３で、リストＬｉ（Ｉ＝１，２，…，ｎ）に、ステップＡ２でソートされた乱数列を、ｄ’個ずつ詰める。ステップＡ４で、ｎ個の乱数表Ｌｉ（Ｉ＝１，２，…，ｎ）を出力する。
【実施例２】
【００６１】
［ソートされた乱数表の処理方法（処理Ｂ）］
次に、ソートされた乱数表の処理方法（処理Ｂ）について説明する。
【００６２】
図１１は、本発明の実施例２であるソートされた乱数表の処理方法（処理Ｂ）を示すフローチャートである。
【００６３】
ソートされた乱数表の処理方法（処理Ｂ）は、局所性検知可能ハッシュの構築と近似近傍検索処理時との両方において利用される処理であり、実施例の中心の処理である。ソートされた乱数表と、処理対象である多次元ベクトルとの双方を、先頭から一度だけスキャンする（取り込む）。この処理によって、あるハッシュに格納すべきビット値の列が、キューｑｋに構築される。最後に、これを、通常のハッシュを用いて、バケットに格納する。近似近傍検索処理時には、格納候補として計算されたバケット内に含まれているベクトルを、近傍候補として採用する。
【００６４】
ステップＢ１で、乱数表Ｒｉと、局所性検知可能ハッシュのサンプル数ｄ’と、多次元ベクトルｖ（ｖ１，ｖ２，…，ｖｄ）と、多次元ベクトル値の最大値ｍａｘとを入力する。
【００６５】
ステップＢ２で、一時変数としてのベクトルカーソルｋ＝０（カーソルはベクトル上の位置を表す）とし（ｋ＜＝ｄ）、次元カーソル：ｌ＝０（ｌ＜＝ｄ）、局所性検知可能ハッシュのキーである可変長リストｑｋを空で初期化する。それぞれのカーソルは、多次元ベクトルのＵＮＡＲＹ表現を結合したものと、乱数表を順番に並べたリストの位置とを表し、両方のリストの先頭から最後まで、位置を一つずつ進めていく。最後に到達すると、ＵＮＡＲＹ表現を結合したものを一回スキャンしたことになり、それぞれの乱数表が示すビット位置の値を取得できる。すなわち局所性検知可能ハッシングが完了する。
【００６６】
ステップＢ３で、ｋ＜ｄと判断され、ステップＢ４で、Ｉ＜ｄ’かつＲｉ（Ｉ）＜（ｋ＋１）＊ｍａｘであると判断され、ステップＢ５で、Ｒｉ（Ｉ）＜＝ｖｋ＋ｋ＊ｍａｘと判断されれば、ステップＢ６で、ｑｋ（Ｉ）＝１とする。
【００６７】
ステップＢ５の条件を満たしていなければ、ステップＢ７で、ｑｋ（Ｉ）＝０とする。そして、ステップＢ８で、次元カーソルＩをインクリメントし、ステップＢ４に戻る。
【００６８】
ステップＢ４の条件を満たさなければ、ステップＢ９で、ｋ＝ｋ＋１とし、ステップＢ３に戻る。ステップＢ３の条件を満たさなければ（ｋがｄ以上であれば）、ステップＢ１０で、ハッシュＬｉに、ｑｋをキーとして、多次元ベクトルｖを格納する。
【実施例３】
【００６９】
［ソートされた乱数表を用いた局所性検知可能ハッシュ構築方法（処理Ｃ）］
次に、ソートされた乱数表を用いた局所性検知可能ハッシュ構築方法（処理Ｃ）について説明する。
【００７０】
図１２は、本発明の実施例３であるソートされた乱数表を用いた局所性検知可能ハッシュ構築方法を示すフローチャートである。
【００７１】
ステップＣ１で、乱数表Ｒ１，Ｒ２，…，Ｒｎを入力し、ステップＣ２で、多次元ベクトルデータベースＤから最大値ｍａｘを取得する。
【００７２】
ステップＣ３で、多次元ベクトルデータベースＤが空でないと判断されると、ステップＣ４で、一時変数ｖ∈Ｄとし、ステップＣ５で、一時変数ｉ∈１とする。
【００７３】
ステップＣ６で、ｉ＜＝ｎであると判断されれば、ステップＣ７で、処理Ｂを実行し、ステップＣ８で、ｉを１インクリメントし、ステップＣ６に戻る。ステップＣ６でｉ＞ｎであると判断されれば、ステップＣ９で、Ｄ＝Ｄ−｛ｖ｝とし、ステップＣ３に戻る。
【００７４】
そして、ステップＣ１０で、局所性検知可能ハッシュ（Ｌ１，Ｌ２，…，Ｌｎ）を出力する。
【実施例４】
【００７５】
［ソートされた乱数表を用いた近似近傍検索処理方法（処理Ｄ）］
次に、ソートされた乱数表を用いた近似近傍検索処理方法（処理Ｄ）について説明する。
【００７６】
図１３は、本発明の実施例４であるソートされた乱数表を用いた局所性検知可能ハッシュ構築方法を示すフローチャートである。
【００７７】
近傍候補リストから出力する場合、
（１）必要な個数集まった時点で出力する仕方、
（２）登場回数の多い順に出力する仕方、
（３）候補集合内で線形検索をして近い順に出力する仕方
がある。
【００７８】
ステップＤ１で、乱数表Ｒ１，Ｒ２，…，Ｒｎと、局所性検知可能ハッシュＬ１，Ｌ２，…，Ｌｎと、多次元ベクトル値の最大値ｍａｘと、ベクトルクエリｑとを入力する。ステップＤ２で、一時変数ｉ＝１とし、近傍候補リストＡを空で初期化する。ステップＤ３で、ｉ＜＝ｎであると判断されれば、上記処理Ｂを実行し、局所性検知可能ハッシュＬｉのバケットに含まれているベクトルをＡに追加する。
【００７９】
ステップＤ５で、ｉ＝ｉ＋１とし、ステップＤ６で、近傍候補リストＡの中から回数が多いもの、または厳密距離を計算して近いものを結果として出力する。
【００８０】
図１４は、図９に示す実施例を別の表現で記載した図である。
【００８１】
図１４において、クライアントとして、クライアントＣＬ１のみを代表して記載し、類似近傍検索アプリケーション１００に接続される入力装置４００、出力装置５００を記載してある。
【００８２】
クライアントＣＬ１は、通信手段３０１と、記憶手段３０２と、データ処理手段３０３と、入力部、表示部を含むユーザインタフェース３０４とを有する。他のクライアントＣＬ２、ＣＬ３等の構成も、クライアントＣＬ１と同様である。
【００８３】
類似近傍検索アプリケーション１００は、通信インタフェース２１０と、制御手段２２０と、記憶手段２３０とを有する。
【００８４】
制御手段２２０は、乱数表構築手段２２１と、乱数表処理手段２２２と、局所性検知可能ハッシュ構築手段２２３と、近似近傍検索手段２２４とを有する。
【００８５】
局所性検知可能ハッシュ構築手段２２３は、割り振られた乱数表を用いて、局所性検知可能ハッシングを行う局所性検知可能ハッシュの構築手段の例であり、この具体的処理内容は、図１１に記載してある。
【００８６】
記憶手段２３０は、ＲＯＭ２３１と、ＲＡＭ２３２と、ＨＤＤ２３３と、ＳＳＤ２２４とを有する。
【００８７】
上記実施例によれば、局所性検知可能ハッシング処理する場合、入力ベクトルを、その先頭から順番に、１回スキャンする（取り込む）だけで、それぞれの乱数表が持つ乱数値が示す位置のビットの値を検出することができるので、入力ベクトルを複数回スキャンする必要がない。
【００８８】
また、上記実施例によれば、それぞれの乱数表内の乱数が、乱数全体で連続する順序を持つので、より単純な索引構造で、局所性検知可能ハッシング処理を実行できる。
【００８９】
上記実施例によれば、局所性検知可能ハッシュにおいて、局所性検知可能ハッシング処理を高速に処理できるので、局所性検知可能ハッシュの構築時だけではなく、近似近傍検索処理時にも、処理速度の向上を見込むことができる。
【００９０】
上記実施例によれば、局所性検知可能ハッシュは、データの種類によらず、多次元ベクトルデータに対して適用できるので、画像や動画、テキスト等、高次元多次元データを高速で類似検索することができる。
【００９１】
上記実施例は、局所性検知可能ハッシュにおけるそれぞれの乱数表において、乱数表内部での値のソートだけではなく、乱数表自体もソートして構築する装置である。
【００９２】
上記実施例において、乱数表の構築自体は、全体として必要な個数の互いに異なる乱数を生成し、それらをソートして先頭から乱数表に等分割して割り当てる。乱数表は、乱数値が全体としてソートされた状態で、乱数値に先頭からアクセスできるように保持する。
【００９３】
これによって、上記実施例では、局所性検知可能ハッシング処理は、入力となる多次元ベクトルに対して先頭から順番に、１回スキャンするだけで、それぞれの乱数表が持つ乱数値（ビットの位置）を検出することができるので、入力ベクトルを複数回スキャンする必要がない。
【００９４】
また、上記実施例では、乱数表自体がソートされているので、より単純な索引構造で、局所性検知可能ハッシング処理を実行することができ、分散環境での実現も容易であるというメリットがある。
【００９５】
上記実施例では、局所性検知可能ハッシュにおいて、局所性検知可能ハッシング処理を高速に処理できるので、局所性検知可能ハッシュの構築時だけではなく、近似近傍検索時の双方において、処理速度の向上を見込むことができる。
【００９６】
つまり、上記実施例は、画像や動画、テキスト等の多次元ベクトルとして表現されている多次元ベクトルデータベースを有する。また、乱数表構築エンジンＥ１１は、多数の乱数をソートするソート手段の例であり、上記ソートされた複数の乱数を、昇順または降順に、複数の乱数表に割り当てる割り当て手段の例である。局所性検知可能ハッシュ構築エンジンＥ１２は、上記割り振られた乱数表を用いて、局所性検知可能ハッシングを構築する局所性検知可能ハッシュの構築手段の例である。
【００９７】
この場合、必要な乱数を一度に構築することによって、上記乱数表を構築する。また、上記割り振られた乱数表を、上記乱数表の先頭から、１回のスキャンで、局所性検知可能ハッシング処理を実行する。
【００９８】
近似近傍検索エンジンＥ１３は、上記割り振られた乱数表を用いて、近似近傍検索処理を実現する近似近傍検索処理手段の例である。
【００９９】
上記実施例を、コンピュータで使用可能なソフトウェアとして把握することができる。つまり、上記実施例は、請求項１〜請求項４のいずれか１項記載の装置を構成する各手段としてコンピュータを機能させるプログラムの例である。
【０１００】
また、上記プログラムを、ハードディスク、ＣＤ−ＲＯＭ、光記憶装置または磁気記憶装置等の任意のコンピュータ可読媒体に記録するようにしてもよい。
【符号の説明】
【０１０１】
１００…類似近傍検索アプリケーション、
Ｅ１…類似近傍検索エンジン、
Ｅ１１…乱数表構築エンジン、
Ｅ１２…局所性検知可能ハッシュ構築エンジン、
Ｅ１３…近似近傍検索エンジン。
【図１】
2010277522.tif 000003
【図２】
2010277522.tif 000004
【図３】
2010277522.tif 000005
【図４】
2010277522.tif 000006
【図５】
2010277522.tif 000007
【図６】
2010277522.tif 000008
【図７】
2010277522.tif 000009
【図８】
2010277522.tif 000010
【図９】
2010277522.tif 000011
【図１０】
2010277522.tif 000012
【図１１】
2010277522.tif 000013
【図１２】
2010277522.tif 000014
【図１３】
2010277522.tif 000015
【図１４】
2010277522.tif 000016