(57)【要約】【課題】計算量の少ない最大内積探索を行うこと。【解決手段】最大内積探索装置１は、検索ベクトル集合と量子化検索ベクトル集合と代表ベクトル集合とを格納する検索データベース１０と、クエリベクトルを取得するクエリ取得部１４と、取得されたクエリベクトルの要素をブロックに分け、ブロックごとに、当該ブロックのクエリベクトルと格納された代表ベクトル集合の当該ブロックの代表ベクトルそれぞれとの内積を算出し、算出された内積に基づいてブロックごとに当該ブロックの代表ベクトルを選択し、格納された検索ベクトル集合に含まれる検索ベクトルのうち、全てのブロックにおいて各ブロックに対して選択された代表ベクトルを含む検索ベクトルを、格納された量子化検索ベクトル集合に基づいて探索する最大内積探索部１５と、を備える。【選択図】図１
2018045564.tif 000002
【特許請求の範囲】
【請求項１】
所定の要素数の検索ベクトルの集合である検索ベクトル集合と、検索ベクトル集合の各検索ベクトルについて、要素を複数のブロックに分けて前記ブロックごとに代表ベクトルに量子化した量子化検索ベクトル集合と、前記ブロックごとの代表ベクトルの集合である代表ベクトル集合とを格納する検索データベースと、
前記要素数のクエリベクトルを取得するクエリ取得部と、
前記クエリ取得部によって取得されたクエリベクトルの要素を前記ブロックに分け、前記ブロックごとに、当該ブロックのクエリベクトルと前記検索データベースによって格納された代表ベクトル集合の当該ブロックの代表ベクトルそれぞれとの内積を算出し、算出された内積に基づいて前記ブロックごとに当該ブロックの代表ベクトルを選択し、前記検索データベースによって格納された検索ベクトル集合に含まれる検索ベクトルのうち、全ての前記ブロックにおいて各前記ブロックに対して選択された代表ベクトルを含む検索ベクトルを、前記検索データベースによって格納された量子化検索ベクトル集合に基づいて探索する最大内積探索部と、
を備える最大内積探索装置。
【請求項２】
前記検索データベースは、代表ベクトル集合に含まれる前記ブロックごとの代表ベクトルごとに、当該代表ベクトルが含まれる検索ベクトルを識別する検索ベクトル識別情報の集合に対応するＷａｖｅｌｅｔ行列をさらに格納し、
前記最大内積探索部は、検索ベクトルを探索する際に、前記検索データベースによって格納されたＷａｖｅｌｅｔ行列を利用した演算を行う、
請求項１に記載の最大内積探索装置。
【請求項３】
前記最大内積探索部は、検索ベクトルを探索する際に、選択された全ての代表ベクトルそれぞれに対応するＷａｖｅｌｅｔ行列を取得し、取得した全てのＷａｖｅｌｅｔ行列に対して、共通して出現する検索ベクトル識別情報を求める演算を行う、
請求項２に記載の最大内積探索装置。
【請求項４】
代表ベクトル集合に含まれる前記ブロックごとの代表ベクトルごとに、当該代表ベクトルが含まれる検索ベクトルを識別する検索ベクトル識別情報の集合に対応するＷａｖｅｌｅｔ行列を構築するＷａｖｅｌｅｔ行列構築部をさらに備え、
前記検索データベースは、前記Ｗａｖｅｌｅｔ行列構築部によって構築されたＷａｖｅｌｅｔ行列を格納する、
請求項２又は３に記載の最大内積探索装置。
【請求項５】
所定の要素数の検索ベクトルの集合である検索ベクトル集合と、検索ベクトル集合の各検索ベクトルについて、要素を複数のブロックに分けて前記ブロックごとに代表ベクトルに量子化した量子化検索ベクトル集合と、前記ブロックごとの代表ベクトルの集合である代表ベクトル集合とを格納する検索データベースを備える最大内積探索装置により実行される最大内積探索方法であって、
前記要素数のクエリベクトルを取得するクエリ取得ステップと、
前記クエリ取得ステップにおいて取得されたクエリベクトルの要素を前記ブロックに分け、前記ブロックごとに、当該ブロックのクエリベクトルと前記検索データベースによって格納された代表ベクトル集合の当該ブロックの代表ベクトルそれぞれとの内積を算出し、算出された内積に基づいて前記ブロックごとに当該ブロックの代表ベクトルを選択し、前記検索データベースによって格納された検索ベクトル集合に含まれる検索ベクトルのうち、全ての前記ブロックにおいて各前記ブロックに対して選択された代表ベクトルを含む検索ベクトルを、前記検索データベースによって格納された量子化検索ベクトル集合に基づいて探索する最大内積探索ステップと、
を含む最大内積探索方法。
【請求項６】
コンピュータを、
所定の要素数の検索ベクトルの集合である検索ベクトル集合と、検索ベクトル集合の各検索ベクトルについて、要素を複数のブロックに分けて前記ブロックごとに代表ベクトルに量子化した量子化検索ベクトル集合と、前記ブロックごとの代表ベクトルの集合である代表ベクトル集合とを格納する検索データベースと、
前記要素数のクエリベクトルを取得するクエリ取得部と、
前記クエリ取得部によって取得されたクエリベクトルの要素を前記ブロックに分け、前記ブロックごとに、当該ブロックのクエリベクトルと前記検索データベースによって格納された代表ベクトル集合の当該ブロックの代表ベクトルそれぞれとの内積を算出し、算出された内積に基づいて前記ブロックごとに当該ブロックの代表ベクトルを選択し、前記検索データベースによって格納された検索ベクトル集合に含まれる検索ベクトルのうち、全ての前記ブロックにおいて各前記ブロックに対して選択された代表ベクトルを含む検索ベクトルを、前記検索データベースによって格納された量子化検索ベクトル集合に基づいて探索する最大内積探索部、
として機能させる最大内積探索プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クエリベクトルに対して内積が最大となるデータベース中のベクトルを探索する最大内積探索装置、最大内積探索方法及び最大内積探索プログラムに関する。
【背景技術】
【０００２】
画像、音声及びセンサデータ等の分類及び検索において、最大内積探索（ＭＩＰＳ：Maximum  Inner  Product  Search）は重要である。
【０００３】
ＭＩＰＳとは、例えば、データベース中のベクトル｛ｄ１，ｄ２，…，ｄｎ｝とクエリｑが与えられた時に、内積＜ｑ，ｄｉ＞が最大となるデータベース中のベクトルを探すことである。なお、Ｔｏｐ−Ｋ  ＭＩＰＳとは、上記の例でいうと、データベース中のベクトルのうち内積＜ｑ，ｄｉ＞が大きい順にｋ個のベクトルを探すことである。すなわち、ＭＩＰＳとはＴｏｐ−１  ＭＩＰＳである。以降では、ＭＩＰＳはＴｏｐ−Ｋ  ＭＩＰＳも含めるものとする。
【０００４】
分類におけるＭＩＰＳの使用例を挙げると、データベースが各クラスに対応するベクトルであり、クエリが入力データ又はニューラルネットなどで変換された特徴表現であり、ＭＩＰＳは分類結果を返す。また、検索におけるＭＩＰＳの使用例を挙げると、データベースが過去のデータであり、クエリが現在のデータであり（これらのデータは元のデータの場合もあるしニューラルネット等で変換された特徴表現の場合もある）、ＭＩＰＳは最も似ている検索結果を探す。
【０００５】
ＭＩＰＳを行う方法としては、インデックスを使わない方法、ＬＳＨ（Locality  Sensitive  Hashing）を使う方法及びブロック量子化を使う方法が従来知られている。以下では、ベクトル長をｍ、データベース中のベクトルの数をnとして、各方法について簡単に説明する。
【０００６】
インデックスを使わない方法では、そのまま内積を全て計算する。計算量はＯ（ｎｍ）である。
【０００７】
ＬＳＨを使う方法では、ベクトルを長さｂのビットベクトルに変換し、ビットベクトル同士の内積（ＸＯＲ演算）で近似する。一度に計算できるビット幅数をｗとすると、計算量はＯ（ｎｂ／ｗ）である。ＬＳＨを使う方法は、精度が低いことが知られている。
【０００８】
ブロック量子化を使う方法では、ベクトルをブロックに分割し、ブロック毎に量子化する。量子化する際は、クエリの情報も使い、適切なブロックを決定する。ブロック数をｋとすると、計算量はＯ（ｎｋ）である。下記非特許文献１には、ブロック量子化を使う方法が開示されている。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】Ruiqi  Guo、外３名、“Quantization  based  Fast  Inner  Product  Search”、［online］、Google  Research、［平成28年1月14日検索］、インターネット＜URL：http://arxiv.org/pdf/1509.01469v1.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上述の通り最大内積探索は重要であり、特にビッグデータ等の大量のデータが含まれるデータベースに対して最大内積探索を行う場合、計算量の少ない最大内積探索の方法が望まれる。
【００１１】
そこで、本発明は、かかる課題に鑑みて為されたものであり、計算量の少ない最大内積探索を行うことができる最大内積探索装置、最大内積探索方法及び最大内積探索プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するため、本発明の一側面に係る最大内積探索装置は、所定の要素数の検索ベクトルの集合である検索ベクトル集合と、検索ベクトル集合の各検索ベクトルについて、要素を複数のブロックに分けてブロックごとに代表ベクトルに量子化した量子化検索ベクトル集合と、ブロックごとの代表ベクトルの集合である代表ベクトル集合とを格納する検索データベースと、要素数のクエリベクトルを取得するクエリ取得部と、クエリ取得部によって取得されたクエリベクトルの要素をブロックに分け、ブロックごとに、当該ブロックのクエリベクトルと検索データベースによって格納された代表ベクトル集合の当該ブロックの代表ベクトルそれぞれとの内積を算出し、算出された内積に基づいてブロックごとに当該ブロックの代表ベクトルを選択し、検索データベースによって格納された検索ベクトル集合に含まれる検索ベクトルのうち、全てのブロックにおいて各ブロックに対して選択された代表ベクトルを含む検索ベクトルを、検索データベースによって格納された量子化検索ベクトル集合に基づいて探索する最大内積探索部と、を備える。
【００１３】
このような最大内積探索装置によれば、最大内積探索部により、ブロックごとに、当該ブロックのクエリベクトルと代表ベクトル集合の当該ブロックの代表ベクトルそれぞれとの内積に基づく代表ベクトルが選択され、検索ベクトル集合に含まれる検索ベクトルのうち、全てのブロックにおいて各ブロックに対して選択された代表ベクトルを含む検索ベクトルが探索される。ここで、検索ベクトル集合に含まれる検索ベクトルのうち、全てのブロックにおいて各ブロックに対して選択された代表ベクトルを含む検索ベクトルが探索される際に、例えば、Ｗａｖｅｌｅｔ行列を利用した演算を行うことができる。Ｗａｖｅｌｅｔ行列を利用すれば、ある範囲内で共通して出現する値を探索する演算を少ない計算量で行うことができる。つまり、検索ベクトルの全てのブロックそれぞれにおいて選択された代表ベクトルを含む検索ベクトルを少ない計算量で探索することができる。すなわち、計算量の少ない最大内積探索を行うことができる。
【００１４】
また、本発明の一側面に係る最大内積探索装置において、検索データベースは、代表ベクトル集合に含まれるブロックごとの代表ベクトルごとに、当該代表ベクトルが含まれる検索ベクトルを識別する検索ベクトル識別情報の集合に対応するＷａｖｅｌｅｔ行列をさらに格納し、最大内積探索部は、検索ベクトルを探索する際に、検索データベースによって格納されたＷａｖｅｌｅｔ行列を利用した演算を行うこととしてもよい。このような最大内積探索装置によれば、最大内積探索部により、検索ベクトル集合に含まれる検索ベクトルのうち、全てのブロックにおいて各ブロックに対して選択された代表ベクトルを含む検索ベクトルが探索される際に、Ｗａｖｅｌｅｔ行列を利用した演算が行われる。Ｗａｖｅｌｅｔ行列を利用すれば、ある範囲内で共通して出現する値を探索する演算を少ない計算量で行うことができる。かかる構成を採れば、検索ベクトルの全てのブロックそれぞれにおいて選択された代表ベクトルを含む検索ベクトルを少ない計算量で探索することができる。すなわち、計算量の少ない最大内積探索を行うことができる。
【００１５】
また、本発明の一側面に係る最大内積探索装置において、最大内積探索部は、検索ベクトルを探索する際に、選択された全ての代表ベクトルそれぞれに対応するＷａｖｅｌｅｔ行列を取得し、取得した全てのＷａｖｅｌｅｔ行列に対して、共通して出現する検索ベクトル識別情報を求める演算を行うこととしてもよい。Ｗａｖｅｌｅｔ行列を利用すれば、ある範囲内で共通して出現する値を探索する演算を少ない計算量で行うことができる。かかる構成を採れば、検索ベクトルの全てのブロックそれぞれにおいて選択された代表ベクトルを含む検索ベクトルを少ない計算量で探索することができる。すなわち、計算量の少ない最大内積探索を行うことができる。
【００１６】
また、本発明の一側面に係る最大内積探索装置において、代表ベクトル集合に含まれるブロックごとの代表ベクトルごとに、当該代表ベクトルが含まれる検索ベクトルを識別する検索ベクトル識別情報の集合に対応するＷａｖｅｌｅｔ行列を構築するＷａｖｅｌｅｔ行列構築部をさらに備え、検索データベースは、Ｗａｖｅｌｅｔ行列構築部によって構築されたＷａｖｅｌｅｔ行列を格納することとしてもよい。かかる構成を採れば、計算量の少ない最大内積探索を行うためのＷａｖｅｌｅｔ行列を確実に構築及び格納することができる。
【００１７】
ところで、本発明は、上記のように最大内積探索装置の発明として記述できる他に、以下のようにそれぞれ最大内積探索方法及び最大内積探索プログラムの発明としても記述することができる。これはカテゴリが異なるだけで、実質的に同一の発明であり、同様の作用及び効果を奏する。
【００１８】
即ち、本発明の一側面に係る最大内積探索方法は、所定の要素数の検索ベクトルの集合である検索ベクトル集合と、検索ベクトル集合の各検索ベクトルについて、要素を複数のブロックに分けてブロックごとに代表ベクトルに量子化した量子化検索ベクトル集合と、ブロックごとの代表ベクトルの集合である代表ベクトル集合とを格納する検索データベースを備える最大内積探索装置により実行される最大内積探索方法であって、要素数のクエリベクトルを取得するクエリ取得ステップと、クエリ取得ステップにおいて取得されたクエリベクトルの要素をブロックに分け、ブロックごとに、当該ブロックのクエリベクトルと検索データベースによって格納された代表ベクトル集合の当該ブロックの代表ベクトルそれぞれとの内積を算出し、算出された内積に基づいてブロックごとに当該ブロックの代表ベクトルを選択し、検索データベースによって格納された検索ベクトル集合に含まれる検索ベクトルのうち、全てのブロックにおいて各ブロックに対して選択された代表ベクトルを含む検索ベクトルを、検索データベースによって格納された量子化検索ベクトル集合に基づいて探索する最大内積探索ステップと、を含む。
【００１９】
また、本発明の一側面に係る最大内積探索プログラムは、コンピュータを、所定の要素数の検索ベクトルの集合である検索ベクトル集合と、検索ベクトル集合の各検索ベクトルについて、要素を複数のブロックに分けてブロックごとに代表ベクトルに量子化した量子化検索ベクトル集合と、ブロックごとの代表ベクトルの集合である代表ベクトル集合とを格納する検索データベースと、要素数のクエリベクトルを取得するクエリ取得部と、クエリ取得部によって取得されたクエリベクトルの要素をブロックに分け、ブロックごとに、当該ブロックのクエリベクトルと検索データベースによって格納された代表ベクトル集合の当該ブロックの代表ベクトルそれぞれとの内積を算出し、算出された内積に基づいてブロックごとに当該ブロックの代表ベクトルを選択し、検索データベースによって格納された検索ベクトル集合に含まれる検索ベクトルのうち、全てのブロックにおいて各ブロックに対して選択された代表ベクトルを含む検索ベクトルを、検索データベースによって格納された量子化検索ベクトル集合に基づいて探索する最大内積探索部、として機能させる。
【発明の効果】
【００２０】
本発明によれば、計算量の少ない最大内積探索を行うことができる。
【図面の簡単な説明】
【００２１】
【図１】本発明の実施形態に係る最大内積探索装置の機能ブロック図である。
【図２】本発明の実施形態に係る最大内積探索装置のハードウェア構成図である。
【図３】検索ベクトル集合の一例を示す図である。
【図４】量子化検索ベクトル集合の一例及び代表ベクトル集合の一例を示す図である。
【図５】転置ファイル集合の一例を示す図である。
【図６】Ｗａｖｅｌｅｔ行列の構築例を示す図である。
【図７】クエリベクトルの一例を示す図である。
【図８】最大内積探索の処理のうち内積を算出する処理の一例を示す図である。
【図９】最大内積探索の処理のうち内積の大きい代表ベクトルを含む検索ベクトルを探索する処理の一例を示す図である。
【図１０】本発明の実施形態に係る最大内積探索装置で実行される検索データベース構築処理を示すフローチャートである。
【図１１】本発明の実施形態に係る最大内積探索装置で実行される最大内積探索処理を示すフローチャートである。
【図１２】本発明の実施形態に係る最大内積探索プログラムの構成を、記憶媒体と共に示す図である。
【発明を実施するための形態】
【００２２】
以下、図面とともに最大内積探索装置、最大内積探索方法及び最大内積探索プログラムの好適な実施形態について詳細に説明する。なお、図面の説明においては同一要素には同一符号を付し、重複する説明を省略する。
【００２３】
図１は、最大内積探索装置１の機能ブロック図である。図１に示す通り、最大内積探索装置１は、検索データベース１０、ブロック量子化部１１、転置ファイル構築部１２、Ｗａｖｅｌｅｔ行列構築部１３、クエリ取得部１４及び最大内積探索部１５を含んで構成される。
【００２４】
最大内積探索装置１は、ＣＰＵ等のハードウェアから構成されているものである。図２は、最大内積探索装置１のハードウェア構成の一例を示す図である。図１に示される最大内積探索装置１は、物理的には、図２に示すように、一つ以上のＣＰＵ１００、主記憶装置であるＲＡＭ１０１及びＲＯＭ１０２、キーボードやディスプレイ等の入出力装置１０３、通信モジュール１０４、及び補助記憶装置１０５などを含むコンピュータシステムとして構成されている。
【００２５】
図１に示す最大内積探索装置１の各機能ブロックの機能は、図２に示すＣＰＵ１００、ＲＡＭ１０１等のハードウェア上に所定のコンピュータソフトウェアを読み込ませることにより、ＣＰＵ１００の制御のもとで入出力装置１０３、通信モジュール１０４、及び補助記憶装置１０５を動作させるとともに、ＲＡＭ１０１におけるデータの読み出し及び書き込みを行うことで実現される。
【００２６】
以下、図１に示す最大内積探索装置１の各機能ブロックについて説明する。
【００２７】
検索データベース１０は、所定の要素数ｋ（ｋは自然数）の検索ベクトルの集合である検索ベクトル集合を格納する。検索ベクトルとは、後述のクエリベクトルに対して類似する（内積が最大となる、又は内積が比較的大きい）ベクトルを探索する際に、探索対象となる一般的なベクトルである。図３は、検索データベース１０によって格納された検索ベクトル集合の一例を示す図である。図３に示す検索ベクトル集合は、要素数が６の検索ベクトルが１６個集まったものである。説明の便宜上、検索ベクトル集合に含まれる検索ベクトルそれぞれを識別するための識別情報として、各検索ベクトルにはベクトル番号が付与されているものとする。ベクトル番号は、例えば、検索ベクトル集合が配列で実装される際のインデックスに対応する。図３において、ベクトル番号が「０」の検索ベクトルは、要素として値「０．６４」、「０．６２」、「０．８１」、「０．３１」、「０．２９」及び「０．８５」を持っていることを示している。検索データベース１０は、検索ベクトル集合を、予め格納してもよいし、最大内積探索装置１が備える検索ベクトル集合登録部（不図示）の命令に基づいて格納してもよいし、インターネット等のネットワークを介して他の装置から受信して格納してもよい。
【００２８】
ブロック量子化部１１は、検索データベース１０によって格納された検索ベクトル集合の各検索ベクトルについて、要素を複数のブロックに分けてブロックごとに代表ベクトルに量子化した量子化検索ベクトル集合を構築する。ブロック量子化部１１は、代表ベクトルに量子化する際に、検索データベース１０によって格納された、ブロックごとの代表ベクトルの集合である代表ベクトル集合を利用する。なお、代表ベクトル集合は、ブロック量子化部１１が検索データベース１０によって格納された検索ベクトル集合に基づいて構築したものであってもよい。
【００２９】
ここで、検索ベクトルの要素を複数のブロックに分けるとは、例えば、図３に示す通り、検索ベクトルの６つの要素を、要素が２つずつの３つのブロック（ｂ１、ｂ２及びｂ３）に分けることである。図４は、量子化検索ベクトル集合の一例及び代表ベクトル集合の一例を示す図である。図４に示す量子化検索ベクトル集合は、ブロック量子化部１１が、図３に示す検索ベクトル集合の各検索ベクトルについて、要素をブロックｂ１、ｂ２及びｂ３に分けて、ブロックごとに代表ベクトルに量子化したものである。ここで、ブロック量子化部１１は、代表ベクトルに量子化する際に、図４に示す代表ベクトル集合を用いている。
【００３０】
図４に示す代表ベクトル集合は、ブロックｂ１、ｂ２及びｂ３ごとの代表ベクトルの集合である。説明の便宜上、代表ベクトル集合に含まれる代表ベクトルそれぞれを識別するための識別情報として、各代表ベクトルには量子化番号が付与されているものとする。量子化番号は、例えば、代表ベクトル集合が配列で実装される際のインデックスに対応する。図４に示す代表ベクトル集合の一例では、ブロックｂ１では８つの代表ベクトルが含まれている。ブロックごとに任意の数の代表ベクトルが含まれていてもよく、ブロック毎に、含まれる代表ベクトルの数は異なっていてもよいし、同じであってもよい。図４に示す量子化検索ベクトル集合において、各ブロックは、同図に示す代表ベクトル集合の量子化番号が割り当てられている。例えば、量子化検索ベクトル集合のベクトル番号が「０」のレコード（「量子化検索ベクトル」と呼ぶ）のうち、ブロックｂ１は、量子化番号が「４」である代表ベクトル「［０．８０，０．０９］」に量子化されていることを示す。同様に、ブロックｂ２は、量子化番号が「７」であるブロックｂ２の代表ベクトルに量子化され、ブロックｂ３は、量子化番号が「４」であるブロックｂ３の代表ベクトルに量子化されていることを示す。
【００３１】
検索データベース１０は、ブロック量子化部１１によって構築された量子化検索ベクトル集合を格納する。また、検索データベース１０は、ブロック量子化部１１によって構築された代表ベクトル集合を格納する。なお、検索データベース１０は、予め用意された、又はネットワークを介して他の装置から受信した量子化検索ベクトル集合及び代表ベクトル集合を格納してもよい。
【００３２】
転置ファイル構築部１２は、検索データベース１０によって格納された量子化検索ベクトル集合のブロックごとの転置ファイルの集合である転置ファイル集合を構築する。図５は、転置ファイル集合の一例を示す図である。図５に示す転置ファイル集合は、転置ファイル構築部１２により、図４に示す量子化検索ベクトル集合のブロックごとの転置ファイルの集合として構築されたものである。図５に示す転置ファイル集合は、ブロックごとに、量子化番号とベクトル番号とが対応付けられている。量子化番号は、図４に示す代表ベクトル集合の量子化番号である。ベクトル番号は、図４に示す量子化検索ベクトル集合のベクトル番号である。例えば、図５に示すブロックｂ１の転置ファイル集合について、量子化番号が「４」に、ベクトル番号「０」、「５」、「１１」及び「１５」が対応付けられている。これは、量子化番号が「４」である代表ベクトルをブロックｂ１に含む量子化検索ベクトルは、ベクトル番号が「０」、「５」、「１１」及び「１５」である量子化検索ベクトルであることを示している。
【００３３】
検索データベース１０は、転置ファイル構築部１２によって構築された転置ファイル集合を格納する。なお、検索データベース１０は、予め用意された、又はネットワークを介して他の装置から受信した転置ファイル集合を格納してもよい。
【００３４】
Ｗａｖｅｌｅｔ行列構築部１３は、代表ベクトル集合に含まれるブロックごとの代表ベクトルごとに、当該代表ベクトルが含まれる検索ベクトルを識別する検索ベクトル識別情報（ベクトル番号）の集合に対応するＷａｖｅｌｅｔ行列（ウェーブレット行列、Wavelet  Matrix）を構築する。Ｗａｖｅｌｅｔ行列とは、計算量が定数時間のｒａｎｋ関数及びｓｅｌｅｃｔ関数、並びにｉｎｔｅｒｓｅｃｔ関数等をサポートする完備辞書である。完備辞書とは、「０」と「１」とからなるビット列に対して操作を高速に行えるデータ構造である。ｒａｎｋ関数とは、配列中の指定した範囲の「１」の数を返す関数である。ｓｅｌｅｃｔ関数とは、配列中の指定した番目の１の位置を返す関数である。ｉｎｔｅｒｓｅｃｔ関数は、指定された範囲内で共通して出現する値を返す関数である。ｉｎｔｅｒｓｅｃｔ関数は、ｒａｎｋ関数及びｓｅｌｅｃｔ関数を利用した計算量の少ない演算を行うことができる。
【００３５】
Ｗａｖｅｌｅｔ行列構築部１３は、具体的には、転置ファイル構築部１２により構築された転置ファイル集合に含まれる各ブロックの各レコード（量子化番号とベクトル番号とが対応付けられたレコード）のベクトル番号の配列に対して、Ｗａｖｅｌｅｔ行列を構築する。図６は、Ｗａｖｅｌｅｔ行列の構築例を示す図であり、具体的には、図５に示す転置ファイル集合のうち、ブロックｂ１の量子化番号が「４」のベクトル番号の配列である「０，５，１１，１５」について、Ｗａｖｅｌｅｔ行列構築部１３がＷａｖｅｌｅｔ行列を構築する際の処理例を示した図である。
【００３６】
図６において、まず、各ベクトル番号が示す値のビット列を求める。ベクトル番号「０」のビット列は「００００」であり、ベクトル番号「５」のビット列は「０１０１」であり、ベクトル番号「１１」のビット列は「１０１１」であり、ベクトル番号「１５」のビット列は「１１１１」である。次に、配列「０，５，１１，１５」をその順で左から並べ、それぞれの値のビット列の１桁目のビット値を当該順で左から並べる。次に、ビット値が「０」のベクトル番号を当該順で左側に寄せ、ビット値が「１」のベクトル番号を当該順で右側に寄せる。この場合は、ビット値が「００１１」であり、寄せる必要はないため、順番は変わらず、そのまま次（下）の段に配列「０，５，１１，１５」を並べる。以下は同様の処理を繰り返す。並べられた配列「０，５，１１，１５」のそれぞれの値のビット列の２桁目のビット値を当該順で左から並べる。そして同様に寄せを行うが、今回の場合は、ビット値が「０１０１」であるため、３つ目のベクトル番号「１１」を１つ左に寄せ、２つ目のベクトル番号「５」を１つ右に寄せる。すなわち、ベクトル番号「５」と「１１」との位置を入れ替える。そして、次の段に位置が入れ替えられた配列「０，１１，５，１５」を並べ、それぞれの値のビット列の３桁目のビット値を当該順で左から並べる。今回の場合は、ビット値が「０１０１」であるため、３つ目のベクトル番号「５」を１つ左に寄せ、２つ目のベクトル番号「１１」を１つ右に寄せる。そして、次の段に位置が入れ替えられた配列「０，５，１１，１５」を並べ、それぞれの値のビット列の４桁目のビット値を当該順で左から並べる。最後に、これまで並べられた各桁のビット値をその順で上の段から順に合わせた行列としてＷａｖｅｌｅｔ行列を構築する。
【００３７】
検索データベース１０は、Ｗａｖｅｌｅｔ行列構築部によって構築されたＷａｖｅｌｅｔ行列を格納する。なお、検索データベース１０は、予め用意された、又はネットワークを介して他の装置から受信したＷａｖｅｌｅｔ行列を格納してもよい。
【００３８】
クエリ取得部１４は、要素数ｋのクエリベクトルを取得する。すなわち、クエリ取得部１４は、検索データベース１０によって格納された検索ベクトル集合に含まれる各検索ベクトルと同じ要素数のクエリベクトルを取得する。クエリベクトルは、ユーザ等によって指定された一般的なベクトルであり、クエリベクトルに類似するベクトルが検索ベクトル集合から探索される。クエリ取得部１４は、クエリベクトルを、入出力装置１０３から取得してもよいし、他の装置からネットワークを介して取得してもよいし、予め最大内積探索装置１に格納されたクエリベクトルを取得してもよい。クエリ取得部１４は、取得したクエリベクトルを最大内積探索部１５に出力する。図７は、クエリベクトルの一例を示す図である。図７に示すクエリベクトルは、図３に示す検索ベクトル集合に含まれる検索ベクトルの要素数と同じ６つの要素から構成される。
【００３９】
最大内積探索部１５は、クエリ取得部１４によって取得されたクエリベクトルの要素をブロックに分け、ブロックごとに、当該ブロックのクエリベクトルと検索データベース１０によって格納された代表ベクトル集合の当該ブロックの代表ベクトルそれぞれとの内積を算出し、算出された内積に基づいてブロックごとに当該ブロックの代表ベクトルを選択し、検索データベース１０によって格納された検索ベクトル集合に含まれる検索ベクトルのうち、全てのブロックにおいて各ブロックに対して選択された代表ベクトルを含む検索ベクトルを、検索データベース１０によって格納された量子化検索ベクトル集合に基づいて探索する。また、最大内積探索部１５は、検索ベクトルを探索する際に、検索データベース１０によって格納されたＷａｖｅｌｅｔ行列を利用した演算を行う。より具体的には、最大内積探索部１５は、検索ベクトルを探索する際に、選択された全ての代表ベクトルそれぞれに対応するＷａｖｅｌｅｔ行列を取得し、取得した全てのＷａｖｅｌｅｔ行列に対して、共通して出現する検索ベクトル識別情報を求める演算を行う。以下、最大内積探索部１５の処理を具体的に説明する。
【００４０】
まず、最大内積探索部１５は、クエリ取得部１４から入力されたクエリベクトルの要素を、検索データベース１０によって格納された量子化検索ベクトル集合と同じブロックに分ける。図７に示すクエリベクトルでは、６つの要素が、要素が２つずつの３つのブロック（ｂ１、ｂ２及びｂ３）に分けられている。次に、最大内積探索部１５は、ブロックごとに、当該ブロックのクエリベクトルと検索データベース１０によって格納された代表ベクトル集合の当該ブロックの代表ベクトルそれぞれとの内積を算出する。図８は、最大内積探索の処理のうち内積を算出する処理の一例を示す図である。図８に示す通り、最大内積探索部１５は、例えば、クエリベクトルのブロックｂ１のベクトルと、代表ベクトル集合のブロックｂ１対応する代表ベクトルそれぞれとの内積を順に算出し、同様にブロックｂ１及びｂ２に対しても内積を順に算出する。
【００４１】
次に、最大内積探索部１５は、算出された内積に基づいてブロックごとに当該ブロックの代表ベクトルを選択する。図９は、最大内積探索の処理のうち内積の大きい代表ベクトルを含む検索ベクトルを探索する処理の一例を示す図である。図９において、ブロックごとに算出された内積が降順に並べられており、各内積の算出対象である代表ベクトルの量子化番号が対応付けられている。最大内積探索部１５は、例えば、ブロックごとに、内積が最大の代表ベクトルを選択する。例えば、図９において、最大内積探索部１５は、ブロックｂ１から量子化番号が「４」の代表ベクトルを選択し、ブロックｂ２から量子化番号が「１」の代表ベクトルを選択し、ブロックｂ３から量子化番号が「５」の代表ベクトルを選択する。なお、最大内積探索部１５による代表ベクトルの選択方法はこれに限るものではない。例えば、最大内積探索部１５は、ブロックごとに内積が上位２位までの代表ベクトルを選択してもよいし、ブロックごとに内積が所定の順位以上の代表ベクトルを選択してもよいし、ブロックごとに所定の順位を変えるなどブロックごとに基準を変えてもよい。また、最大内積探索部１５は、まず、ブロックごとに最大（１位）の内積の代表ベクトルを選択し、選択された代表ベクトルに基づいて後述の検索ベクトルの探索が失敗した（探索ができなかった）場合に、続いて、ブロックごとに２位以上の内積の代表ベクトルを選択し、選択された代表ベクトルに基づいて再度検索ベクトルの探索を行う等、検索ベクトルの探索が行えるまで繰り返し最大内積探索部１５の処理を実行し、その都度、代表ベクトルの選択基準を変えてもよい。
【００４２】
次に最大内積探索部１５は、検索データベース１０によって格納された検索ベクトル集合に含まれる検索ベクトルのうち、全てのブロックにおいて各ブロックに対して選択された代表ベクトルを含む検索ベクトルを、検索データベース１０によって格納された量子化検索ベクトル集合に基づいて探索する。図９の例で説明すると、ブロックｂ１から選択された量子化番号が「４」の代表ベクトルを検索ベクトルのブロックｂ１に含み、ブロックｂ２から選択された量子化番号が「１」の代表ベクトルを検索ベクトルのブロックｂ２に含み、ブロックｂ３から選択された量子化番号が「５」の代表ベクトルを検索ベクトルのブロックｂ３に含む検索ベクトルを最大内積探索部１５は探索する。その際、最大内積探索部１５は、例えば、検索データベース１０によって格納された転置ファイル集合を利用してもよい。例えば、図９の例で説明すると、最大内積探索部１５は転置ファイル集合を利用することで、ブロックｂ１から選択された量子化番号が「４」の代表ベクトルはベクトル番号が「０」、「５」、「１１」及び「１５」の検索ベクトルに含まれることを判定し、ブロックｂ２から選択された量子化番号が「１」の代表ベクトルはベクトル番号が「２」、「５」、「６」及び「１１」の検索ベクトルに含まれることを判定し、ブロックｂ３から選択された量子化番号が「５」の代表ベクトルはベクトル番号が「１」、「５」、「１１」及び「１５」の検索ベクトルに含まれることを判定することができる。そして、最大内積探索部１５は、各ブロックに共通して現れるベクトル番号として、「５」及び「１１」を判定することができる。すなわち、最大内積探索部１５は、ベクトル番号が「５」及び「１１」の検索ベクトルを、クエリベクトルに類似するベクトルとして探索する。
【００４３】
最大内積探索部１５は、各ブロックに共通して現れるベクトル番号を求める際に、選択された全ての代表ベクトルそれぞれに対応するＷａｖｅｌｅｔ行列を検索データベース１０によって格納されたＷａｖｅｌｅｔ行列から取得し、取得した全てのＷａｖｅｌｅｔ行列に対して、共通して出現するベクトル番号を求める演算を行ってもよい。上述した通り、Ｗａｖｅｌｅｔ行列のｉｎｔｅｒｓｅｃｔ関数を利用することで、各ブロックに共通して現れるベクトル番号を計算量の少ない演算によって求めることができる。
【００４４】
最大内積探索部１５は、探索した検索ベクトル又は検索ベクトル識別情報を、入出力装置１０３（例えばディスプレイ）に出力（表示）してもよいし、ネットワークを介して他の装置に出力してもよい。
【００４５】
続いて、図１０及び図１１に示すフローチャートを用いて、それぞれ最大内積探索装置１における検索データベース構築処理及び最大内積探索方法の処理について説明する。
【００４６】
図１０において、まず、ブロック量子化部１１により、検索データベース１０によって予め格納された検索ベクトル集合に対してブロック量子化が行われ、量子化検索ベクトル集合及び代表ベクトル集合が構築される（ステップＳ１）。次に、転置ファイル構築部１２により、Ｓ１にて構築された代表ベクトル集合の転置ファイルが構築される（ステップＳ２）。次に、Ｗａｖｅｌｅｔ行列構築部１３により、Ｓ２にて構築された転置ファイルに対してＷａｖｅｌｅｔ行列が構築される（ステップＳ３）。
【００４７】
図１１において、まず、クエリ取得部１４により、クエリベクトルが取得される（ステップＳ１０、クエリ取得ステップ）。次に、最大内積探索部１５により、Ｓ１０にて取得されたクエリベクトルと検索データベース１０によって格納された情報に基づいて、クエリベクトルに類似する検索ベクトルが探索される（ステップＳ１１、最大内積探索ステップ）。
【００４８】
引き続いて、上述した一連の最大内積探索装置１による処理をコンピュータに実行させるための最大内積探索プログラム２を説明する。図１２に示すように、最大内積探索プログラム２は、コンピュータに挿入されてアクセスされる、あるいはコンピュータが備える記憶媒体３０に形成されたプログラム格納領域３１内に格納される。より具体的には、最大内積探索プログラム２は、最大内積探索装置１が備える記憶媒体３０に形成されたプログラム格納領域３１内に格納される。
【００４９】
最大内積探索プログラム２は、検索データベースモジュール２０と、ブロック量子化モジュール２１と、転置ファイル構築モジュール２２と、Ｗａｖｅｌｅｔ行列構築モジュール２３と、クエリ取得モジュール２４と、最大内積探索モジュール２５とを備えて構成される。検索データベースモジュール２０と、ブロック量子化モジュール２１と、転置ファイル構築モジュール２２と、Ｗａｖｅｌｅｔ行列構築モジュール２３と、クエリ取得モジュール２４と、最大内積探索モジュール２５とを実行させることにより実現される機能は、上述した最大内積探索装置１の検索データベース１０と、ブロック量子化部１１と、転置ファイル構築部１２と、Ｗａｖｅｌｅｔ行列構築部１３と、クエリ取得部１４と、最大内積探索部１５との機能とそれぞれ同様である。
【００５０】
なお、最大内積探索プログラム２は、その一部若しくは全部が、通信回線等の伝送媒体を介して伝送され、他の機器により受信されて記憶（インストールを含む）される構成としてもよい。また、最大内積探索プログラム２の各モジュールは、１つのコンピュータでなく、複数のコンピュータのいずれかにインストールされてもよい。その場合、当該複数のコンピュータによるコンピュータシステムよって上述した一連の最大内積探索プログラム２の処理が行われる。
【００５１】
次に、本実施形態のように構成された最大内積探索装置１の作用効果について説明する。
【００５２】
本実施形態の最大内積探索装置１によれば、最大内積探索部１５により、ブロックごとに、当該ブロックのクエリベクトルと代表ベクトル集合の当該ブロックの代表ベクトルそれぞれとの内積に基づく代表ベクトルが選択され、検索ベクトル集合に含まれる検索ベクトルのうち、全てのブロックにおいて各ブロックに対して選択された代表ベクトルを含む検索ベクトルが探索される。ここで、検索ベクトル集合に含まれる検索ベクトルのうち、全てのブロックにおいて各ブロックに対して選択された代表ベクトルを含む検索ベクトルが探索される際に、例えば、Ｗａｖｅｌｅｔ行列を利用した演算を行うことができる。Ｗａｖｅｌｅｔ行列を利用すれば、ある範囲内で共通して出現する値を探索する演算を少ない計算量で行うことができる。つまり、検索ベクトルの全てのブロックそれぞれにおいて選択された代表ベクトルを含む検索ベクトルを少ない計算量で探索することができる。すなわち、計算量の少ない最大内積探索を行うことができる。
【００５３】
また、本実施形態の最大内積探索装置１によれば、最大内積探索部１５により、検索ベクトル集合に含まれる検索ベクトルのうち、全てのブロックにおいて各ブロックに対して選択された代表ベクトルを含む検索ベクトルが探索される際に、Ｗａｖｅｌｅｔ行列を利用した演算が行われる。本実施形態のようにＷａｖｅｌｅｔ行列を利用すれば、ある範囲内で共通して出現する値を探索する演算を少ない計算量で行うことができる。かかる構成を採れば、検索ベクトルの全てのブロックそれぞれにおいて選択された代表ベクトルを含む検索ベクトルを少ない計算量で探索することができる。すなわち、計算量の少ない最大内積探索を行うことができる。また、検索ベクトルの全てのブロックそれぞれにおいて選択された代表ベクトルを含む検索ベクトルを少ない計算量で探索することができる。すなわち、計算量の少ない最大内積探索を行うことができる。
【００５４】
また、本実施形態の最大内積探索装置１によれば、Ｗａｖｅｌｅｔ行列構築部１３を備えることで、計算量の少ない最大内積探索を行うためのＷａｖｅｌｅｔ行列を確実に構築及び格納することができる。
【００５５】
本実施形態の最大内積探索装置１は、内積の問題を、最頻の問題に変換し、Ｗａｖｅｌｅｔ行列を用いて処理を行うことで、計算量の少ない最大内積探索を行うことができる。最大内積探索装置１は、画像、音声及びセンサデータの分類及び検索において利用することができる。データの数をｎ、次元数をｍ、ブロック数をｓ、量子化数をｋとすると、全てのデータを調べる手法の計算量はＯ（ｎｍ）となる。一方、本実施形態の最大内積探索装置１では、計算量はＯ（ｎｓ／ｋ）であり、通常ｋ＞＞ｓであるため、最大内積探索装置１により、計算量の少ない、高速な探索を行うことができる。
【符号の説明】
【００５６】
１…最大内積探索装置、２…最大内積探索プログラム、１０…検索データベース、１１…ブロック量子化部、１２…転置ファイル構築部、１３…Ｗａｖｅｌｅｔ行列構築部、１４…クエリ取得部、１５…最大内積探索部、２０…検索データベースモジュール、２１…ブロック量子化モジュール、２２…転置ファイル構築モジュール、２３…Ｗａｖｅｌｅｔ行列構築モジュール、２４…クエリ取得モジュール、２５…最大内積探索モジュール、３０…記憶媒体、３１…プログラム格納領域、１００…ＣＰＵ、１０１…ＲＡＭ、１０２…ＲＯＭ、１０３…入出力装置、１０４…通信モジュール、１０５…補助記憶装置。
【図１】
2018045564.tif 000003
【図２】
2018045564.tif 000004
【図３】
2018045564.tif 000005
【図４】
2018045564.tif 000006
【図５】
2018045564.tif 000007
【図６】
2018045564.tif 000008
【図７】
2018045564.tif 000009
【図８】
2018045564.tif 000010
【図９】
2018045564.tif 000011
【図１０】
2018045564.tif 000012
【図１１】
2018045564.tif 000013
【図１２】
2018045564.tif 000014