(57)【特許請求の範囲】
【請求項１】
データを入出力するインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続される一つ以上の記憶装置と、を備える検索サーバにおいて、
前記記憶装置には、各々が複数のクラスタのいずれかに含まれる複数の第１ベクトルデータと、前記複数の第１ベクトルデータの前記クラスタごとの代表値と、が格納され、
前記プロセッサは、
第２ベクトルデータを含む検索要求を受信すると、受信した前記第２ベクトルデータをキーとして前記代表値を検索し、
前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、第１の所定の数の前記クラスタに含まれる複数の第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記第２ベクトルデータと、前記第２ベクトルデータをキーとした前記第１ベクトルデータの検索が終了した前記クラスタを示す情報と、を含む検索要求を受信すると、前記受信した情報によって示されるクラスタ以外の前記クラスタの前記代表値を、前記第２ベクトルデータをキーとして検索し、
前記受信した情報によって示されるクラスタ以外の前記クラスタのうち、前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、前記第１の所定の数の前記クラスタに含まれる複数の前記第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記検索された第１ベクトルデータのうち、前記第２ベクトルデータとの距離が近い第２の所定の数の前記第１ベクトルデータを、前記インターフェースを介して出力することを特徴とする検索サーバ。
【請求項２】
データを入出力するインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続される一つ以上の記憶装置と、を備える検索サーバにおいて、
前記記憶装置には、各々が複数のクラスタのいずれかに含まれる複数の第１ベクトルデータと、前記複数の第１ベクトルデータの前記クラスタごとの代表値と、が格納され、
前記プロセッサは、
第２ベクトルデータを含む検索要求を受信すると、受信した前記第２ベクトルデータをキーとして前記代表値を検索し、
前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、第１の所定の数の前記クラスタに含まれる複数の第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記検索された第１ベクトルデータのうち、前記第２ベクトルデータとの距離が近い第２の所定の数の前記第１ベクトルデータ、及び、前記第２ベクトルデータをキーとした前記第１ベクトルデータの検索が終了した前記クラスタを示す情報を、前記インターフェースを介して出力することを特徴とする検索サーバ。
【請求項３】
前記プロセッサは、
前記第２ベクトルデータと、前記第２ベクトルデータをキーとした前記第１ベクトルデータの検索が終了した前記クラスタを示す情報と、を含む検索要求を受信すると、前記受信した情報によって示されるクラスタ以外の前記クラスタの前記代表値を、前記第２ベクトルデータをキーとして検索し、
前記受信した情報によって示されるクラスタ以外の前記クラスタのうち、前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、前記第１の所定の数の前記クラスタに含まれる複数の前記第１ベクトルデータを、前記第２ベクトルデータをキーとして検索することを特徴とする請求項２に記載の検索サーバ。
【請求項４】
データを入出力するインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続される一つ以上の記憶装置と、を備える検索サーバにおいて、
前記記憶装置には、各々が複数のクラスタのいずれかに含まれる複数の第１ベクトルデータと、前記複数の第１ベクトルデータの前記クラスタごとの代表値と、が格納され、
前記プロセッサは、
第２ベクトルデータを含む検索要求を受信すると、受信した前記第２ベクトルデータをキーとして前記代表値を検索し、
前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、第１の所定の数の前記クラスタに含まれる複数の第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記検索された第１ベクトルデータのうち、前記第２ベクトルデータとの距離が近い第２の所定の数の前記第１ベクトルデータを、前記インターフェースを介して出力し、
前記複数のクラスタを配列として前記記憶装置に格納する場合に、前記配列中で隣り合う位置に存在するクラスタ同士の代表値の距離が相対的に小さくなるよう再配置することを特徴とする検索サーバ。
【請求項５】
ネットワークを介して接続された端末計算機及び検索サーバを備える検索システムにおいて、
前記検索サーバは、前記ネットワークに接続されるインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続される一つ以上の記憶装置と、を備え、
前記記憶装置には、各々が複数のクラスタのいずれかに含まれる複数の第１ベクトルデータと、前記複数の第１ベクトルデータの前記クラスタごとの代表値と、が格納され、
前記端末計算機は、第２ベクトルデータの入力を受け付けると、前記受け付けた第２ベクトルデータを含む検索要求を、前記ネットワークを介して前記検索サーバに送信し、
前記プロセッサは、
前記インターフェースを介して前記第２ベクトルデータを含む検索要求を受信すると、受信した前記第２ベクトルデータをキーとして前記代表値を検索し、
前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、第１の所定の数の前記クラスタに含まれる複数の第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記第２ベクトルデータと、前記第２ベクトルデータをキーとした前記第１ベクトルデータの検索が終了した前記クラスタを示す情報と、を含む検索要求を受信すると、前記受信した情報によって示されるクラスタ以外の前記クラスタの前記代表値を、前記第２ベクトルデータをキーとして検索し、
前記受信した情報によって示されるクラスタ以外の前記クラスタのうち、前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、前記第１の所定の数の前記クラスタに含まれる複数の前記第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記検索された第１ベクトルデータのうち、前記第２ベクトルデータとの距離が近い第２の所定の数の前記第１ベクトルデータを、前記インターフェースを介して出力し、
前記端末計算機は、前記検索サーバから前記第１ベクトルデータを受信すると、前記受信した第１ベクトルデータ又は前記受信した第１ベクトルデータに関連付けられたデータを検索結果として表示することを特徴とする検索システム。
【請求項６】
ネットワークを介して接続された端末計算機及び検索サーバを備える検索システムにおいて、
前記検索サーバは、前記ネットワークに接続されるインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続される一つ以上の記憶装置と、を備え、
前記記憶装置には、各々が複数のクラスタのいずれかに含まれる複数の第１ベクトルデータと、前記複数の第１ベクトルデータの前記クラスタごとの代表値と、が格納され、
前記端末計算機は、第２ベクトルデータの入力を受け付けると、前記受け付けた第２ベクトルデータを含む検索要求を、前記ネットワークを介して前記検索サーバに送信し、
前記プロセッサは、
前記インターフェースを介して前記第２ベクトルデータを含む検索要求を受信すると、受信した前記第２ベクトルデータをキーとして前記代表値を検索し、
前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、第１の所定の数の前記クラスタに含まれる複数の第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記検索された第１ベクトルデータのうち、前記第２ベクトルデータとの距離が近い第２の所定の数の前記第１ベクトルデータ、及び、前記第２ベクトルデータをキーとした前記第１ベクトルデータの検索が終了した前記クラスタを示す情報を、前記インターフェースを介して出力し、
前記端末計算機は、前記検索サーバから前記第１ベクトルデータを受信すると、前記受信した第１ベクトルデータ又は前記受信した第１ベクトルデータに関連付けられたデータを検索結果として表示することを特徴とする検索システム。
【請求項７】
前記プロセッサは、
前記第２ベクトルデータと、前記第２ベクトルデータをキーとした前記第１ベクトルデータの検索が終了した前記クラスタを示す情報と、を含む検索要求を受信すると、前記受信した情報によって示されるクラスタ以外の前記クラスタの前記代表値を、前記第２ベクトルデータをキーとして検索し、
前記受信した情報によって示されるクラスタ以外の前記クラスタのうち、前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、前記第１の所定の数の前記クラスタに含まれる複数の前記第１ベクトルデータを、前記第２ベクトルデータをキーとして検索することを特徴とする請求項６に記載の検索システム。
【請求項８】
ネットワークを介して接続された端末計算機及び検索サーバを備える検索システムにおいて、
前記検索サーバは、前記ネットワークに接続されるインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続される一つ以上の記憶装置と、を備え、
前記記憶装置には、各々が複数のクラスタのいずれかに含まれる複数の第１ベクトルデータと、前記複数の第１ベクトルデータの前記クラスタごとの代表値と、が格納され、
前記端末計算機は、第２ベクトルデータの入力を受け付けると、前記受け付けた第２ベクトルデータを含む検索要求を、前記ネットワークを介して前記検索サーバに送信し、
前記プロセッサは、
前記インターフェースを介して前記第２ベクトルデータを含む検索要求を受信すると、受信した前記第２ベクトルデータをキーとして前記代表値を検索し、
前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、第１の所定の数の前記クラスタに含まれる複数の第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記検索された第１ベクトルデータのうち、前記第２ベクトルデータとの距離が近い第２の所定の数の前記第１ベクトルデータを、前記インターフェースを介して出力し、
前記端末計算機は、
前記検索サーバから前記第１ベクトルデータを受信すると、前記受信した第１ベクトルデータ又は前記受信した第１ベクトルデータに関連付けられたデータを検索結果として表示し、
前記第２ベクトルデータをキーとして検索された前記第１ベクトルデータと、前記第１ベクトルデータの検索が終了した前記クラスタを示す情報とを前記検索サーバから受信すると、前記第２ベクトルデータと、受信した前記第１ベクトルデータと、受信した前記クラスタを示す情報と、を含む検索要求を、前記ネットワークを介して前記検索サーバに送信することを特徴とする検索システム。
【請求項９】
前記端末計算機は、
前記第２の所定の数の検索結果の表示要求を受け付けると、前記検索要求を前記検索サーバに送信し、
前記第２の所定の数の検索結果を、前記第２ベクトルデータと前記第１ベクトルデータとの間の距離が近い順に表示し、
前記第２の所定の数の検索結果を表示した場合のみ、前記表示された検索結果の下位に連続する前記第２の所定の検索結果の表示要求の受け付けを許可されることを特徴とする請求項８に記載の検索システム。
【請求項１０】
ネットワークを介して接続された端末計算機及び検索サーバを備える検索システムにお
いて、
前記検索サーバは、前記ネットワークに接続されるインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続される一つ以上の記憶装置と、を備え、
前記記憶装置には、各々が複数のクラスタのいずれかに含まれる複数の第１ベクトルデータと、前記複数の第１ベクトルデータの前記クラスタごとの代表値と、が格納され、
前記端末計算機は、第２ベクトルデータの入力を受け付けると、前記受け付けた第２ベクトルデータを含む検索要求を、前記ネットワークを介して前記検索サーバに送信し、
前記プロセッサは、
前記インターフェースを介して前記第２ベクトルデータを含む検索要求を受信すると、受信した前記第２ベクトルデータをキーとして前記代表値を検索し、
前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、第１の所定の数の前記クラスタに含まれる複数の第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記検索された第１ベクトルデータのうち、前記第２ベクトルデータとの距離が近い第２の所定の数の前記第１ベクトルデータを、前記インターフェースを介して出力し、
前記複数のクラスタを配列として前記記憶装置に格納する場合に、前記配列中で隣り合う位置に存在するクラスタ同士の代表値の距離が相対的に小さくなるよう再配置し、
前記端末計算機は、前記検索サーバから前記第１ベクトルデータを受信すると、前記受信した第１ベクトルデータ又は前記受信した第１ベクトルデータに関連付けられたデータを検索結果として表示することを特徴とする検索システム。
【請求項１１】
データを入出力するインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続される一つ以上の記憶装置と、を備える計算機がベクトルデータを検索する方法であって、
前記記憶装置には、各々が複数のクラスタのいずれかに含まれる複数の第１ベクトルデータと、前記複数の第１ベクトルデータの前記クラスタごとの代表値と、が格納され、
前記方法は、
第２ベクトルデータを含む検索要求を受信すると、受信した前記第２ベクトルデータをキーとして前記代表値を検索し、
前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、第１の所定の数の前記クラスタに含まれる複数の第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記第２ベクトルデータと、前記第２ベクトルデータをキーとした前記第１ベクトルデータの検索が終了した前記クラスタを示す情報と、を含む検索要求を受信すると、前記受信した情報によって示されるクラスタ以外の前記クラスタの前記代表値を、前記第２ベクトルデータをキーとして検索し、
前記受信した情報によって示されるクラスタ以外の前記クラスタのうち、前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、前記第１の所定の数の前記クラスタに含まれる複数の前記第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記検索された第１ベクトルデータのうち、前記第２ベクトルデータとの距離が近い第２の所定の数の前記第１ベクトルデータを、前記インターフェースを介して出力することを特徴とする方法。
【請求項１２】
データを入出力するインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続される一つ以上の記憶装置と、を備える計算機がベクトルデータを検索する方法であって、
前記記憶装置には、各々が複数のクラスタのいずれかに含まれる複数の第１ベクトルデータと、前記複数の第１ベクトルデータの前記クラスタごとの代表値と、が格納され、
前記方法は、
第２ベクトルデータを含む検索要求を受信すると、受信した前記第２ベクトルデータをキーとして前記代表値を検索し、
前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、第１の所定の数の前記クラスタに含まれる複数の第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記検索された第１ベクトルデータのうち、前記第２ベクトルデータとの距離が近い第２の所定の数の前記第１ベクトルデータ、及び、前記第２ベクトルデータをキーとした前記第１ベクトルデータの検索が終了した前記クラスタを示す情報を、前記インターフェースを介して出力することを特徴とする方法。
【請求項１３】
前記方法は、
前記第２ベクトルデータと、前記第２ベクトルデータをキーとした前記第１ベクトルデータの検索が終了した前記クラスタを示す情報と、を含む検索要求を受信すると、前記受信した情報によって示されるクラスタ以外の前記クラスタの前記代表値を、前記第２ベクトルデータをキーとして検索し、
前記受信した情報によって示されるクラスタ以外の前記クラスタのうち、前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、前記第１の所定の数の前記クラスタに含まれる複数の前記第１ベクトルデータを、前記第２ベクトルデータをキーとして検索することを特徴とする請求項１２に記載の方法。
【請求項１４】
データを入出力するインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続される一つ以上の記憶装置と、を備える計算機がベクトルデータを検索する方法であって、
前記記憶装置には、各々が複数のクラスタのいずれかに含まれる複数の第１ベクトルデータと、前記複数の第１ベクトルデータの前記クラスタごとの代表値と、が格納され、
前記方法は、
第２ベクトルデータを含む検索要求を受信すると、受信した前記第２ベクトルデータをキーとして前記代表値を検索し、
前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、第１の所定の数の前記クラスタに含まれる複数の第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、
前記検索された第１ベクトルデータのうち、前記第２ベクトルデータとの距離が近い第２の所定の数の前記第１ベクトルデータを、前記インターフェースを介して出力し、
前記複数のクラスタを配列として前記記憶装置に格納する場合に、前記配列中で隣り合う位置に存在するクラスタ同士の代表値の距離が相対的に小さくなるよう再配置することを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機上でのベクトルデータの検索に関する。
【背景技術】
【０００２】
ベクトルデータの検索として一般的なのは、地図データ等の空間位置情報に基づく検索である。この場合、ベクトルデータの次元数は、高々２〜数次元程度となる。これに対して、画像・映像等を対象とする類似検索では、各データを特徴付けるデータとして、数１０次元〜数１００次元のベクトルが用いられる。類似検索では、検索のキーとなるデータと、ベクトル空間中で距離が小さいデータの検索、すなわち、ベクトル空間中での最近接検索が行われる。例えば、静止画像の類似検索では、画像中の色分布のヒストグラム等が、データを特徴付ける特徴量ベクトルとして用いられる。
【０００３】
最近接検索では、ベクトル間の距離を知る必要がある。距離計算の対象データ数をＮ、特徴量ベクトルの次元数をＭとすれば、検索キーデータと距離計算の対象データとの間でＮ回の距離計算が必要となり、かつ、各距離計算に必要となる時間は、Ｍに比例する。従って、最近接検索を線形探索で実現した場合、１回の検索時間のＮ×Ｍに比例した計算時間が必要となる。
【０００４】
最近接検索の処理を高速化する手法として、検索キーデータに応じて距離計算の対象データを絞り込む方法が複数提案されている。多次元インデキシングと総称される一群の手法は、データベースの分野で利用されているバランス木の概念を多次元空間の処理に拡張したものである。多次元インデキシングでは、空間中の領域が木構造で管理される。そして、検索キーデータが与えられると、その検索キーデータを含む領域が定義されたリーフをLog Ｎのオーダで検索する。一方、パターン認識の分野では、距離が近いもの同士を予め分類しておく、クラスタリングに基づく高速化がしばしば用いられる。具体的な分類の手法としては、k-means法が一般的である。
【０００５】
一方、非特許文献１は、高次元で分布する確率ベクトルに関する解析によって、通常の確率分布で成立するある条件の下で、任意の点と他の標本分布中の中との最小距離と最大距離との比が、空間の高次元化に伴い１に収束すること、すなわち、全ての標本点間の距離の差が無くなって行くことを示した。従って、上記の各種高速化手法が、高次元空間の処理で、一般的な意味で良好な効果を生むことは困難であり、通常は、その性能は線形探索に劣るものとなる、と結論付けている。ただし、非特許文献１は、標本の分布が一様構造ではなく、クラスタ構造を持つ場合は、クラスタリング処理が有効性を発揮することも指摘している。
【非特許文献１】Kevin Beyer, Jonathan Goldstein, Raghu Rmakrishnan, Uri Shaft.: "When Is Nearest Neighbor Meaningful", Proceeding of International Conference on Database Theory, 1999, p.217-235.
【発明の開示】
【発明が解決しようとする課題】
【０００６】
対象となるデータに対して適切な特徴量ベクトルが抽出されていると仮定すれば、標本分布は、ある程度のクラスタ構造を持っていると想定される。従って、そこから適切にクラスタ構造を抽出することが出来れば、クラスタリングに基づく検索の高速化が期待できる。ただし、実際にどの程度の高速化が可能かは、存在しているクラスタが互いにどの程度分離しているか、及び、検索キーとクラスタとの関係に依存する。
【０００７】
例えば、データ全体がＮｃ個のクラスタに分類されており、各クラスタには、それを構成するメンバ（すなわち、各クラスタに含まれるデータ）の平均ベクトルが保存されているものとする。検索時には、まず、検索キーのベクトルと各クラスタの平均ベクトルとの距離が計算される。次に、その距離が小さい順序にクラスタを参照していき、各クラスタのメンバと検索キーとの距離計算を行うことによって、類似検索の結果、すなわち、検索キー近傍のデータを取得する。
【０００８】
真の検索結果は、全数検索（すなわち、全クラスタの全メンバを対象とする検索）を行った場合の結果である。次に、上記の手続きにおいて、幾つのクラスタを参照すれば、真の結果と一致する結果を得られるか、について検討する。
【０００９】
クラスタ間の分離が良く、かつ、検索キーが何れかのクラスタの平均ベクトルの近傍にある場合は、少数個のクラスタを参照するだけで十分であろう。仮に、最近接クラスタのメンバ数が、要求される検索結果数より十分大きければ、一つのクラスタのみの参照で済むかも知れない。逆に、検索キーが、クラスタ境界付近に位置する場合は、少なくとも、その境界に接するクラスタを参照する必要が生じる。また、検索キー近傍のクラスタの分離が悪い場合は、多数のクラスタを参照する必要が生じる。
【００１０】
実際の検索時には、真の結果は未知である。従って、真の結果になるべく近い結果を得たければ、なるべく多くのクラスタを参照する必要がある。しかし、あまり多数のクラスタを参照すると、線形探索と同等の計算量となってしまうため、検索の高速化は実現しない。このことは、クラスタリングではなく、多次元インデキシングを用いた場合も同様である。この場合、多数のリーフを参照することになる。
【００１１】
さらに、クラスタリング及び多次元インデキシングのいずれが用いられる場合にも、データとの距離計算以外の処理が必要となる。すなわち、クラスタリングでは、クラスタ平均との距離計算、多次元インデキシングでは、木構造を辿る際の領域判定が必要である。また、大量のデータへのアクセスに関しては、一般に、単純な線形探索の方が効率的である。従って、これらの高速化手法は、少なくとも、アルゴリズム評価のレベルで十分な有効性を示す必要がある。
【００１２】
現在、類似検索を必要とする多くの分野で、扱うべきデータ量が増大しており、線形探索に代わる高速な検索が必要とされている。従って、上述した問題点を克服する高速検索技術がますます必要となっている。
【課題を解決するための手段】
【００１３】
実際の類似検索の利用を考えた場合、必ずしも、真の結果を正確に知る必要がなく、それよりも、アプリケーション上での迅速な応答が要求される場合が多い。本発明では、クラスタリングに基づいた検索エンジンにおいて、検索エンジンとそれを使用するアプリケーションが以下のようなデータを送受信することによって、類似検索を行うアプリケーションにとって最適な処理系を実現する。
【００１４】
検索エンジンは、クライアントのアプリケーションから検索要求を受けると、所定の個数のクラスタを参照して類似検索を実行し、取得した類似検索の結果をアプリケーション側に返す。この際、検索エンジンは、検索のために参照したクラスタに関する情報も合わせてアプリケーション側に渡す。アプリケーション側に返された検索結果は、一般に、上位、すなわち、高類似度の結果の信頼性は高いが、下位の結果の信頼性は低い。アプリケーション側が、より真の結果に近い検索結果を必要とする場合、再度、同一の検索条件での検索要求をエンジン側に発行する。この際、アプリケーションは、以前に取得した検索結果及び以前に参照したクラスタに関する情報も合わせて検索エンジンに送信する。検索エンジンは、以前に参照したクラスタに関する処理を省略し、より低類似度の所定の個数のクラスタを参照し、クラスタメンバのデータに関する類似検索処理を行う。その結果、以前の検索結果よりも高類似度のデータを発見した場合、検索エンジンは、検索結果を更新し、参照したクラスタの情報とともに、検索結果をアプリケーション側に返す。このような処理を繰り返すことによって、アプリケーションは、必要に応じて、より精度の高い類似検索の結果を取得することが可能となる。
【００１５】
より具体的には、本願で開示する代表的な発明は、データを入出力するインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続される一つ以上の記憶装置と、を備える検索サーバにおいて、前記記憶装置には、各々が複数のクラスタのいずれかに含まれる複数の第１ベクトルデータと、前記複数の第１ベクトルデータの前記クラスタごとの代表値と、が格納され、前記プロセッサは、第２ベクトルデータを含む検索要求を受信すると、受信した前記第２ベクトルデータをキーとして前記代表値を検索し、前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、第１の所定の数の前記クラスタに含まれる複数の第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、前記第２ベクトルデータと、前記第２ベクトルデータをキーとした前記第１ベクトルデータの検索が終了した前記クラスタを示す情報と、を含む検索要求を受信すると、前記受信した情報によって示されるクラスタ以外の前記クラスタの前記代表値を、前記第２ベクトルデータをキーとして検索し、前記受信した情報によって示されるクラスタ以外の前記クラスタのうち、前記第２ベクトルデータとの距離が近い前記代表値を含む前記クラスタから順に、前記第１の所定の数の前記クラスタに含まれる複数の前記第１ベクトルデータを、前記第２ベクトルデータをキーとして検索し、前記検索された第１ベクトルデータのうち、前記第２ベクトルデータとの距離が近い第２の所定の数の前記第１ベクトルデータを、前記インターフェースを介して出力することを特徴とする。
【発明の効果】
【００１６】
検索エンジン側においては、１回の検索要求に対して常に一定個数のクラスタのみが参照されるため、ほぼ一定の応答時間が実現される。アプリケーション側においては、その利用の文脈に応じて、要求する検索精度を制御可能であるため、エンドユーザにとって最適な処理系を構成することが可能となる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施の一形態として、画像を対象とした類似検索システムについて説明する。
【００１８】
図１は、本発明の実施の形態の類似検索システムの構成を示すブロック図である。
【００１９】
検索エンジンが稼動するサーバ計算機１１０は、通信基盤１２０を経由して、アプリケーションプログラムが稼動するクライアント計算機１３０と接続され、クライアント計算機１３０に検索等のサービスを提供する。
【００２０】
通信基盤１２０は、サーバ計算機１１０とクライアント計算機１３０とを接続するネットワーク（例えば、ＩＰネットワーク）である。
【００２１】
サーバ計算機１１０は、少なくとも、相互に接続されたインターフェース（Ｉ／Ｆ）１５１、ＣＰＵ１５２、メモリ１５３及びハードディスク１５４を備える。
【００２２】
Ｉ／Ｆ１５１は、通信基盤１２０に接続され、サーバ計算機１１０とクライアント計算機１３０の間の通信に使用される。
【００２３】
ＣＰＵ１５２は、メモリ１５３に格納されたプログラムを実行するプロセッサである。
【００２４】
メモリ１５３は、ＣＰＵ１５２によって実行されるプログラム及びＣＰＵ１５２によって参照されるデータを格納する記憶装置である。本実施の形態のメモリ１５３は、いわゆる主記憶装置であり、例えば、ランダムアクセス可能な半導体記憶装置である。本実施の形態のメモリ１５３は、少なくとも、検索サーバプロセス１１１を実現するためのサーバ・プログラム及びデータを格納する。
【００２５】
ハードディスク１５４は、一つ以上のハードディスクドライブ（ＨＤＤ）からなる記憶装置である。本実施の形態のハードディスク１５４は、画像サーバ１４０に格納された画像の特徴量ベクトルに関する情報を特徴量データ１１４及びクラスタ管理情報１１５として格納する。
【００２６】
特徴量ベクトルとは、画像サーバ１４０に格納されている画像の特徴をベクトルデータとして数値化したものである。特徴量ベクトルは、従来から知られている種々の方法によって算出することができる。
【００２７】
本実施の形態において、各特徴量ベクトルは、複数のクラスタのいずれかに分類される。相互に距離が近い特徴量ベクトルは、同じクラスタに分類されることが望ましい。特徴量ベクトルは、どのような方法でクラスタに分類されてもよいが、本実施の形態では、k-means法によって分類される。
【００２８】
一つの特徴量データ１１４は、一つのクラスタに分類された一つ以上の画像を識別するデータＩＤと、そのＩＤによって識別される画像データの特徴量ベクトルと、の組を含む。なお、各クラスタに分類された画像及び特徴ベクトルは、クラスタメンバとも記載される。
【００２９】
クラスタ管理情報１１５は、各クラスタを識別するクラスタＩＤと、そのクラスタＩＤによって識別されるクラスタの代表値と、の組を含む。
【００３０】
本実施の形態において、各クラスタの代表値とは、各クラスタに含まれる特徴量ベクトルの平均ベクトル（クラスタ平均）である。しかし、平均ベクトル以外の値がクラスタの代表値として使用されてもよい。例えば、平均ベクトルに近接するクラスタメンバの特徴量ベクトルが使用されてもよいし、他の統計的な代表値、例えば、最頻値、中央値等が使用されてもよい。k-means法による最適化の結果、各クラスタが完全に分離している場合、各特徴量ベクトルは、その特徴量ベクトルと最も距離が近い代表値を含むクラスタに含まれる。
【００３１】
なお、本実施の形態のハードディスク１５４は、光ディスク装置、フラッシュメモリのような半導体記憶装置、又は、その他のいかなる種類の記憶装置によって置き換えられてもよい。
【００３２】
画像サーバ１４０は、画像データを格納する記憶装置（図示省略）を備え、通信基盤１２０に接続される計算機である。
【００３３】
サーバ計算機１１０内の検索サーバプロセス１１１は、クラスタリングされた（すなわち、クラスタに分類された）検索対象を管理している。システム稼動時には、クラスタ管理情報１１５は、サーバ計算機のメモリ１５３内にクラスタ管理情報１１２として展開されている。各クラスタ情報１１３として、各クラスタＩＤ、そのＩＤによって識別されるクラスタの代表値である平均ベクトル、及び、クラスタメンバを識別するデータＩＤ列等が格納されている。各クラスタメンバの特徴量ベクトルは、特徴量データ１１４として一括してハードディスク１５４上で管理される。このため、メモリ１５３内のクラスタ情報１１３として、さらに、各クラスタメンバの特徴量ベクトルを格納したハードディスク上の位置が格納されている。
【００３４】
なお、クラスタ管理情報１１２は、ハードディスク１５４上に記録されたクラスタ管理情報のコピーである。このため、クラスタに対する更新が生じた場合、クラスタ管理情報１１２だけでなく、ハードディスク１５４上のクラスタ管理情報１１５も更新される。しかし、検索処理においてクラスタ管理情報１１５が直接参照されることはない。
【００３５】
クライアント計算機１３０は、通信基盤１２０に接続され、アプリケーションプログラム（図示省略）が稼動する計算機である。図１には二つのクライアント計算機１３０を示すが、本類似検索システムは任意の数のクライアント計算機１３０を備えてもよい。
【００３６】
クライアント計算機１３０は、いかなる構成の計算機であってもよい。図１には、典型的なクライアント計算機１３０の構成を示す。すなわち、図１のクライアント計算機１３０は、ＣＰＵ１３１、メモリ１３２、Ｉ／Ｆ１３３、入力装置１３４及び出力装置１３５を備える。
【００３７】
ＣＰＵ１３１は、メモリ１３２に格納されたプログラムを実行するプロセッサである。
【００３８】
メモリ１３２は、ＣＰＵ１３１によって実行されるプログラム等を格納する記憶装置である。メモリ１３２は、少なくとも、アプリケーションプログラム（図示省略）を格納する。
【００３９】
Ｉ／Ｆ１３３は、通信基盤１２０に接続され、クライアント計算機１３０とサーバ計算機１１０との間の通信に使用されるインターフェースである。
【００４０】
入力装置１３４は、クライアント計算機１３０のユーザから入力を受け付ける装置である。入力装置１３４は、例えば、キーボード、ポインティングデバイス又は画像スキャナ等を含んでもよい。
【００４１】
出力装置１３５は、クライアント計算機１３０のユーザに情報を表示する装置である。具体的には、例えば、類似検索の結果として取得された画像が出力装置１３５に表示される。出力装置１３５は、例えばＣＲＴ又は液晶ディスプレイのような画像表示装置である。
【００４２】
次に、本類似検索システムにおけるデータ登録時の処理について説明する。
【００４３】
本システムでは、k-means法に基づいたクラスタリングを採用している。ただし、データの登録ごとに、全データのクラスタリングを行ったのでは、実用的な処理時間で登録処理を行うことは不可能である。本システムでは、新規データ登録時に、そのデータと距離が近いクラスタを、近接クラスタとして所定の個数検索し、検索された近接クラスタに関してk-means法の最適化を実行する。また、各クラスタのメンバのハードディスク上の格納領域を、物理的にも連続的に確保するために、クラスタ生成時に所定の量のディスク領域を確保する。それに従い、各クラスタメンバの最大数も制限される。
【００４４】
図２は、本発明の実施の形態においてデータ登録時に実行される処理を示すフローチャートである。
【００４５】
図２に示す処理は、検索サーバプロセス１１１を実現するサーバ・プログラムの一部として実行される。従って、図２に示す処理は、ＣＰＵ１５２によって実行される。
【００４６】
ＣＰＵ１５２は、登録対象の新規データｘを与えられると、まず、近接クラスタを検索し、近接クラスタの集合Ｃ*を取得する（２１０）。具体的には、ＣＰＵ１５２は、各クラスタの平均ベクトルと新規データｘとを比較し、新規データｘと距離が近い平均ベクトルによって代表されるクラスタから順に、所定の数のクラスタを近接クラスタの集合Ｃ*として取得する。
【００４７】
次に、ＣＰＵ１５２は、近接クラスタの集合Ｃ*の中の最近接クラスタｃ*（すなわち、新規データｘと最も距離が近い平均ベクトルによって代表されるクラスタ）に、新規データｘを追加する（２２０）。
【００４８】
次に、ＣＰＵ１５２は、パラメータt及びパラメータiを、それぞれ、「０」及び「１」に初期化する（２２１、２２２）。パラメータtは、k-means法の更新の反復回数を計数するために使用される。パラメータiは、近接クラスタの集合Ｃ*に要素として含まれるクラスタを指示するために使用される。
【００４９】
その後、ステップ２３０以降に示す、k-means法による最適化のループに入る。
【００５０】
具体的には、ＣＰＵ１５２は、近接クラスタの集合Ｃ*の要素である各クラスタについて（２３０）、クラスタのメンバ数が制限M_maxを超えるか否かを判定する（２３１）。
【００５１】
具体的には、ＣＰＵ１５２は、ステップ２３０において、パラメータiが集合Ｃ*の要素数以下であるか否かを判定する。ステップ２３０において、パラメータiが集合Ｃ*の要素数以下であると判定された場合、ＣＰＵ１５２は、集合Ｃ*のi番目の要素であるクラスタｃを対象として（２３４）、クラスタｃのメンバ数がM_maxを超えるか否かを判定する（２３１）。なお、最適化ループに入った時点では、新規データｘが追加された最近接クラスタｃ*以外のクラスタは、メンバ数制限を超えないことが前提となる。
【００５２】
仮に最近接クラスタｃ*のメンバ数がM_maxを超えた場合、ＣＰＵ１５２は、そのクラスタを２分割し（２３２）、新たに生成されたクラスタｄを近接クラスタの集合Ｃ*の要素に加える（２３３）。クラスタを２分割する方法としては、種々の方法が考えられる。ここでは、そのクラスタ内のベクトル分布に関して主軸を求め、各メンバのベクトルの主軸への射影が、クラスタ平均ベクトルの射影のどちら側に存在するかを判定することによって、メンバを二つのクラスタに群分けする。
【００５３】
ステップ２３３が実行された後、ＣＰＵ１５２の処理は、ステップ２３１に戻る。ステップ２３１では、分割後のクラスタのメンバ数がM_maxを超えているか否かが判定される。分割後のクラスタのメンバ数がM_maxを超えていると判定された場合、そのクラスタをさらに分割するために、処理はステップ２３２に進む。一方、分割後のクラスタのメンバ数がM_maxを超えていないと判定された場合、次のクラスタについてステップ２３１の判定を実行するために、ＣＰＵ１５２は、パラメータiの値に１を加算して（２３５）、ステップ２３０に戻る。
【００５４】
ステップ２３０において、パラメータiが集合Ｃ*の要素数を超えたと判定された場合、集合Ｃ*の要素である全てのクラスタのメンバ数がM_max以内であることが確認された。この場合、ＣＰＵ１５２は、k-means法による最適化の反復回数tをチェックする（２４０）。
【００５５】
本システムにおいて、図２に示す最適化は、あくまでクラスタの部分集合を対象としたものであり、クラスタ全体での最適化を意味しない。また、データの追加は、その後も繰り返し行われることを想定しており、その度に最適化が実行される。従って、ある時点での最適化を極端に重視する必要はなく、反復の最大数t_maxは、数回程度で十分である。
【００５６】
ステップ２４０において、反復回数を示すパラメータtが反復の最大数t_max以上であると判定された場合、k-means法による最適化が所定の回数実行されたため、図２の処理が終了する。あるいは、ステップ２４０において、集合Ｃ*が変化していないと判定された場合、さらに最適化を実行する必要がないと考えられる。従って、この場合も、図２の処理が終了する。
【００５７】
一方、ステップ２４０において、反復回数を示すパラメータtが反復の最大数t_maxより小さく、かつ、集合Ｃ*が変化していると判定された場合、クラスタの最適化を実行する必要があるため、ＣＰＵ１５２は、k-means法によって集合Ｃ*を更新する（２５０）。
【００５８】
ステップ２５０の処理は、通常のk-means法と同様である。すなわち、近接クラスタに含まれる全データは、その時点での最も近接したクラスタ平均を持つクラスタに配分される。これによって、各近接クラスタのメンバ、及び、クラスタ平均が更新され、ステップ２３０に戻る。最適化ループに入った時点とは異なり、今回は、大きくクラスタの状態が変化した場合、複数のクラスタがメンバ数の上限を超える可能性がある。また、２分割しただけでは不十分であるため、再度分割が必要となる場合、あるいは、新たに生成されたクラスタが上限を超える場合も生じる可能性がある。このため、ＣＰＵ１５２は、全てのクラスタのメンバ数が上限M_max以下となるように処理（ステップ２３０からステップ２３５）した後、ステップ２４０に移行する。ステップ２４０で、反復数が最大数t_maxに達したか、あるいは、近接クラスタの集合Ｃ*の状態に全く変化がない場合、処理を終了する。
【００５９】
図２に示した一連の処理は、メモリ１５３上の作業領域で実行され、最終的な近接クラスタの状態が、ハードディスク１５４上に保存される。このハードディスク１５４上への保存時には、オプションとして、以下の機能が用意されている。
【００６０】
一般に、類似性が高いクラスタは、更新時、及び、検索時に同時に参照される可能性が高い。従って、類似性が高いクラスタ同士が、ハードディスク上でなるべく近傍に集まるように配列すれば、ディスク走査の負荷を低減できるはずである。
【００６１】
【数１】
0005137339.tif 000002
【００６２】
式（１）は、クラスタ位置の再配列の手続きを定義するためのエネルギー関数である。Ncは、クラスタ数、v_iは、i番目の位置にあるクラスタの平均ベクトルを表す。本エネルギー関数は、相前後する位置にあるクラスタ平均の２乗距離の総和として定義されている。
【００６３】
ただし、両端の位置、すなわち、１番目の位置とNc番目の位置での境界条件は、両端で折り返しを行った形式で定義している。具体的には、存在しない０番目の位置のクラスタの平均ベクトルv_0の代わりに、２番目の位置のクラスタの平均ベクトルv_2が用いられる。また、存在しないNc+1番目の位置のクラスタの平均ベクトルv_Nc+1の代わりに、Nc-1番目の位置のクラスタの平均ベクトルv_Nc-1が用いられる。この時、i番目の位置にあるクラスタとj番目の位置にあるクラスタを交換した場合のエネルギー関数の変化量は、式（２）によって算出される。ただし、j>iとする。
【００６４】
【数２】
0005137339.tif 000003
【００６５】
上記のエネルギー変化量に基づき、エネルギー関数が減少するように配列内のクラスタ位置を更新すれば、配列中で隣り合う位置に存在するクラスタ同士の距離が相対的に小さい状態が実現できる。
【００６６】
図３は、本発明の実施の形態において実行されるクラスタ位置の再配列の処理を示すフローチャートである。
【００６７】
図３に示す処理は、検索サーバプロセス１１１を実現するサーバ・プログラムの一部として実行される。従って、図３に示す処理は、ＣＰＵ１５２によって実行される。
【００６８】
まず、ＣＰＵ１５２は、現在更新対象となっている近接クラスタの集合Ｃ*から、式（１）によって算出されるエネルギーの減少量が最大となるクラスタの組を探す（３１０）。
【００６９】
次に、ＣＰＵ１５２は、ステップ３１０の条件に該当するクラスタの組を発見したか否かを判定する（３２０）。
【００７０】
該当するクラスタの組が発見されない場合、エネルギーを減少させる位置の交換が存在しない（言い換えると、現在のクラスタの配列のエネルギーが最も小さい）。この場合、各クラスタは最適に配置されていると考えられるため、処理を終了する。
【００７１】
一方、該当するクラスタの組が発見された場合、ＣＰＵ１５２は、その位置を交換することによって配列を更新し（３３０）、次のクラスタの組を探すためにステップ３１０に戻る。最終的には、こうして得られた配列上の位置に従って、クラスタメンバの特徴量ベクトルをハードディスク１５４上へ保存する。
【００７２】
次に、本システムにおける検索処理について説明する。
【００７３】
図４は、本発明の実施の形態の類似検索における、クライアント・サーバ間の情報の流れ、及び、各プログラム内での処理の概略を示す説明図である。
【００７４】
クライアント・プログラムは、クライアント計算機１３０のメモリ１３２に格納され、ＣＰＵ１３１によって実行されるアプリケーションプログラムである。ＣＰＵ１３１は、必要に応じて入力装置１３４及び出力装置１３５を制御しながら、図４に示すクライアント側の処理を実行する。一方、サーバ・プログラムは、サーバプロセス１１１を実現するプログラムであり、サーバ計算機１１０のメモリ１５３に格納され、ＣＰＵ１５２によって実行される。
【００７５】
また、以下の説明においてクライアント・プログラムからサーバ・プログラムに送信されるデータ、及び、サーバ・プログラムからクライアント・プログラムに返されるデータは、実際には、Ｉ／Ｆ１３３、通信基盤１２０及びＩ／Ｆ１５１を介して送受信される。
【００７６】
クライアント計算機のユーザは、入力装置１３４を使用して、検索要求を入力することができる。ユーザからの要求（４０１）を受け付けたクライアント・プログラムは、類似検索のキーとなるベクトルデータ（以下、キーデータ）を検索条件として含む検索要求を、サーバ・プログラムに送信する（４０２）。
【００７７】
サーバ・プログラムは、まず、クラスタを対象とした類似検索を実行する（４０３）。以下、これをクラスタ間検索処理と呼ぶ。クラスタ間検索処理によって、キーデータと全クラスタの平均ベクトルとの間の距離計算が実行され、距離が小さい（すなわち、近い）順序にソートされた所定の個数Rc個のクラスタからなる配列が得られる。
【００７８】
次に、このソートされたクラスタ配列中のメンバを参照し、各クラスタメンバの特徴量ベクトルとキーデータとの間の距離計算を実行することによって、類似検索の結果を導出する（４０４）。具体的には、ソートされたRc個のクラスタの全メンバの特徴量ベクトルとキーデータとの間の距離を計算し、その距離が小さい順にクラスタメンバをソートする。以下、この処理をクラスタ内検索処理と呼ぶ。
【００７９】
サーバ・プログラムは、類似検索の結果を、クライアント・プログラムに返す（４０５）。クライアント・プログラムに返される類似検索の結果は、少なくとも、キーデータとの距離が近いものから順に、所定の個数のクラスタメンバの識別子を含む。この際、サーバ・プログラムは、実際に参照されたクラスタ（すなわち、類似検索が終了したクラスタ）に関する情報を類似検索の結果に付加して返す。以下、前回までの類似検索の際に実際に参照されたクラスタに関する情報を「参照クラスタ情報」と記載する。検索結果及び参照クラスタ情報については、後で図５及び図６を参照して説明する。
【００８０】
検索結果を受信したクライアント・プログラムは、検索結果の表示等の処理を実行する（４０６）。例えば、クライアント・プログラムは、受信した検索結果に含まれる識別子によって識別される画像を、出力装置１３５に表示してもよい。検索結果の表示の例については、後で図８を参照して説明する。
【００８１】
その後、再度、ユーザから同一条件の検索要求を受け付けると（４０７）、クライアント・プログラムは、検索条件とともに、以前取得した参照クラスタ情報及び検索結果を、検索要求としてサーバ・プログラムに送信する（４０８）。
【００８２】
検索要求を受信すると、サーバ・プログラムは、再びクラスタ間検索処理を実行する（４０９）。この際、サーバ・プログラムは、参照クラスタ情報を用いて、参照済みのクラスタに関する距離計算を省略することができる。ステップ４０９の検索の結果、前回検索されたクラスタ数RcにさらにRc個加えたRc×２個のクラスタが、各クラスタの平均ベクトルとキーデータとの間の距離が小さい順にソートされる。その結果、ソートされたRc×２個のクラスタからなる配列が得られる。
【００８３】
次のクラスタ内検索処理（４１０）において、サーバ・プログラムは、前回参照された上位Rc個のクラスタのメンバの検索を省略し、Rc+1位からRc×2位までの順位にあるRc個のクラスタについて、キーデータを用いてクラスタメンバとの類似検索を実行し、その検索結果を前回の検索結果とマージする。具体的には、今回得られた検索結果と前回得られた検索結果を合わせて、それらの検索結果であるクラスタメンバをキーデータとの間の距離が近い順にソートする。
【００８４】
サーバ・プログラムは、こうして更新された検索結果と、Rc×２個の参照クラスタに関する情報とを、クライアント・プログラムに返す（４１１）。
【００８５】
以下、同様の処理を繰り返すことによって、参照クラスタの個数が増えていく。これによって、クライアント・プログラムは、より高い精度の検索結果を、ユーザからの要求に応じて、逐次的に取得することができる。１回の検索要求に応じて新たに検索されるクラスタの数は一定（Rc個）である。そして、各クラスタのメンバ数には上限（M_max）がある。このため、１回の検索要求に応じた検索処理に要する時間は、一定の上限を超えることがない。各クラスタのメンバ数が概ね同じであれば、１回の検索要求に応じた検索処理に要する時間も概ね同じとなる。
【００８６】
図５は、本発明の実施の形態の参照クラスタ情報の説明図である。
【００８７】
具体的には、図５は、例えば図４のステップ４０５、４０８及び４１１において、クライアント・プログラムとサーバ・プログラムの間で送受信される参照クラスタ情報の説明図である。
【００８８】
各クラスタは、各クラスタを識別するクラスタＩＤによって管理されている。参照クラスタ情報は、タイムスタンプ５１０、既に検索のために参照されたクラスタを識別するクラスタＩＤの列、及び、各クラスタの平均ベクトルとキーデータとの間の距離を示す情報を含む。タイムスタンプ５１０には、その参照クラスタ情報が生成された時刻が記録される。
【００８９】
なお、図５において、各クラスタＩＤと距離の組は、距離の値が昇順となるように整列される。すなわち、距離の値が最も小さいクラスタＩＤが参照クラスタ情報の先頭となる。
【００９０】
図６は、本発明の実施の形態の検索結果の説明図である。
【００９１】
具体的には、図６は、例えば図４のステップ４０５、４０８及び４１１において、クライアント・プログラムとサーバ・プログラムの間で送受信される検索結果の説明図である。
【００９２】
検索結果は、クラスタ内検索処理の結果として得られたクラスタメンバを識別するデータＩＤの列、及び、各クラスタメンバの特徴量ベクトルとキーデータとの間の距離を示す情報を含む。
【００９３】
なお、図５と同様、図６のデータＩＤと距離の組は、距離の値が昇順となるように整列される。
【００９４】
図７は、本発明の実施の形態のサーバ・プログラムにおいて実行されるクラスタ内検索処理を示すフローチャートである。
【００９５】
図７の処理は、図４のステップ４０４及び４１０において実行される。従って、図７の処理は、サーバ・プログラムの一部として、サーバ計算機１１０のＣＰＵ１５２によって実行される。
【００９６】
最初に、処理の概要を説明する。
【００９７】
ステップ７１０の判定は、クラスタ間検索によって得られたクラスタ配列の先頭から、参照済みのクラスタをスキップするための判定である。クラスタのメンバ及びクラスタの順序に変更がない場合、クラスタ間検索の結果は不変である。この場合、参照済みクラスタを対象としたクラスタ内検索処理の結果は、既に取得した結果と同じになるはずである。従って、この場合、参照済みクラスタを対象としたクラスタ内検索処理を省略することができる。
【００９８】
ただし、データの更新処理によって、クラスタ全体の状態が変わった場合、クラスタ間検索の結果は、変わってしまう可能性がある。例えば、クラスタに新たなメンバが追加された場合（図２参照）、さらに、クラスタの順序が変更された場合（図３参照）、それらのクラスタについては、クラスタ内検索処理を実行する必要がある。クラスタ内検索処理を省略できるか否かの判定が、ステップ７２０において実行される。
【００９９】
ステップ７３０以降のループにおいて、参照済みクラスタを除く所定のRc個のクラスタのメンバを対象とする類似検索が実行される。類似検索のために最後に参照された後に状態が変わってしまったクラスタがある場合、そのクラスタは参照済みクラスタに含まれない。
【０１００】
次に、処理の詳細を説明する。
【０１０１】
以下の説明において、配列Ａは、参照クラスタ情報によって示されるクラスタの配列に相当する。配列Ｂは、クラスタ間検索処理の結果として得られた配列に相当する。例えば、図７の処理が図４のステップ４１０において実行される場合、ステップ４０８においてクライアント・プログラムから送信された参照クラスタ情報（１）が示すクラスタの配列が配列Ａに相当し、ステップ４０９のクラスタ間検索処理の結果が配列Ｂに相当する。また、パラメータi及びjは、配列Ａ又はＢに含まれる要素を示すために使用される。
【０１０２】
最初に、サーバ・プログラムは、パラメータiの値を「０」に初期化する（７０１）。
【０１０３】
次に、サーバ・プログラムは、パラメータiの値が配列Ａの要素数以下であるか否かを判定する（７１０）。
【０１０４】
ステップ７１０において、パラメータiの値が配列Ａの要素数以下であると判定された場合、次に、サーバ・プログラムは、クラスタＡ[i]とクラスタＢ[i]が同一であるか否かを判定する（７２０）。
【０１０５】
クラスタはクラスタＩＤによって管理される。従って、Ａ[i]とＢ[i]のクラスタＩＤが異なる場合、これらのクラスタは同一でないと判定される。さらに、Ａ[i]とＢ[i]のクラスタＩＤが同一であっても、状態が異なる場合がある。したがって、ステップ７２０の判定のために、タイムスタンプ５１０が参照される。Ａ[i]とＢ[i]のクラスタＩＤが同一でも、Ａ[i]に関するタイムスタンプ５１０が示す時刻以降にＢ[i]が更新されていた場合、これらのクラスタは異なるクラスタであると判定される。
【０１０６】
ステップ７２０において、Ａ[i]とＢ[i]が異なるクラスタであると判定された場合、クラスタＢ[i]の状態は、最後に参照された後で更新されている。この場合、クラスタＢ[i]及びその下位のクラスタを対象とするクラスタ内検索処理を実行するため、サーバ・プログラムはステップ７２２に進む。
【０１０７】
一方、ステップ７２０において、Ａ[i]とＢ[i]が同一のクラスタであると判定された場合、参照済みクラスタであるＢ[i]を対象とするクラスタ内検索処理は、省略することができる。この場合、次の要素について判定するため、サーバ・プログラムは、パラメータiの値を１加算して（７２１）、ステップ７１０に戻る。
【０１０８】
ステップ７１０において、パラメータiの値が配列Ａの要素数を超えると判定された場合、クラスタＢ[i]及びそれより下位のクラスタは、まだクラスタ内検索処理の対象になったことがない。この場合、クラスタＢ[i]及びその下位のクラスタを対象とするクラスタ内検索処理を実行するため、サーバ・プログラムはステップ７２２に進む。
【０１０９】
新たに参照すべきクラスタの開始位置（すなわち、ステップ７２２の時点のＢ[i]）が確定したら、サーバ・プログラムは、そのクラスタから始まるRc個のクラスタに関してクラスタ内検索処理を実行する。
【０１１０】
具体的には、サーバ・プログラムは、ステップ７２２において、パラメータjの値を「１」に初期化する。
【０１１１】
次に、サーバ・プログラムは、パラメータjの値が、所定の参照クラスタ数Rc以下であるか否かを判定する（７３０）。
【０１１２】
ステップ７３０において、パラメータjの値がRc以下であると判定された場合、まだRc個のクラスタを対象とするクラスタ内検索処理が終了していない。この場合、サーバ・プログラムは、クラスタＢ[i+j]を対象とするクラスタ内検索処理を実行する（７４０）。具体的には、サーバ・プログラムは、クラスタＢ[i+j]のメンバとキーデータとの間の距離を計算する。
【０１１３】
次に、サーバ・プログラムは、既に取得した検索結果に、クラスタＢ[i+j]から得られた結果をマージすることによって、検索結果を更新する（７５０）。ここで、既に取得した検索結果とは、クライアント・プログラムから送信された検索要求に含まれる検索結果（例えば、図４のステップ４０８に示す検索結果（１））である。具体的には、サーバ・プログラムは、既に取得した検索結果であるクラスタメンバに、ステップ７４０において検索されたクラスタのメンバを追加し、それらのクラスタメンバを、検索キーデータからの距離が小さい順にソートする。
【０１１４】
次に、サーバ・プログラムは、次のクラスタについて処理するため、パラメータjの値を１加算して（７５１）、ステップ７３０に戻る。
【０１１５】
ステップ７３０において、パラメータjの値がRcを超えると判定された場合、Rc個のクラスタを対象とするクラスタ内検索処理が終了した。この場合、サーバ・プログラムは、処理を終了する。
【０１１６】
次に、本システムにおけるユーザに対する検索結果の表示について説明する。
【０１１７】
図８は、本発明の実施の形態において表示される検索結果表示画面の状態遷移の例の説明図である。
【０１１８】
図１から図７を参照して説明したように、本実施の形態のサーバ・プログラムは、クライアント・プログラムから送信されたベクトルデータをキーとして、多数のベクトルデータを対象とする類似検索を実行する。そして、サーバ・プログラムは、検索結果をクライアント・プログラムに返す。クライアント・プログラムは、検索結果であるベクトルデータ自体を表示してもよいが、ベクトルデータに関連付けられたデータを表示してもよい。
【０１１９】
本実施の形態において、検索対象のベクトルデータは、画像の特徴量ベクトルである。この場合、クライアント・プログラムは、検索によって得られた特徴量ベクトル自体を表示するのではなく、その特徴量ベクトルに対応する画像を検索結果として表示する。特徴量ベクトルに対応する画像は、画像サーバ１４０に格納されている。
【０１２０】
図６に示すように、サーバ・プログラムからクライアント・プログラムに送信される検索結果がデータＩＤを含む場合、クライアント・プログラムは、受信したデータＩＤによって識別される画像を画像サーバ１４０から取得して、検索結果として出力装置１３５に表示する。
【０１２１】
図８には、検索によって得られた特徴量ベクトルに対応する画像を、検索結果として表示する画面の例を示す。なお、図８の画面は、クライアント計算機の出力装置１３５に表示される。
【０１２２】
図８の例では、検索結果の最大数を１００件とし、１画面上に２０件ずつ画像を表示する画面構成となっている。画面上の表示は、２０件だけであるが、クライアント・プログラムは、サーバ・プログラムに対して、特徴量ベクトルとキーデータとの間の類似性が高い上位１００件の検索結果を常に要求するよう設定されている。
【０１２３】
図８は、類似検索結果表示画面８１０、８２０、８３０及び８４０が順次表示される例を示す。各画面８１０等は、検索結果８１１及びボタン８１２等を含む。検索結果８１１は、検索結果である画像、又は、その画像を縮小したサムネイル画像である。
【０１２４】
検索結果表示の初期画面８１０には、検索結果１００件中の１位から２０位までが、特徴量ベクトルとキーデータとの間の類似性が高い順序に配列され、表示されている（８１１）。初期画面８１０の表示は、図４のステップ４０６に相当する。従って、このとき表示される検索結果は、図４のステップ４０５における検索結果（１）に相当する。
【０１２５】
初期画面８１０には、さらに、ボタン８１２及び８１３が表示される。ボタン８１２は、検索結果の最初の２０件（すなわち、１位から２０位までの検索結果）を表示する要求を受け付けるボタンである。一方、ボタン８１３は、次の２０件（すなわち、２１位から４０位までの検索結果）を表示する要求を受け付けるボタンである。
【０１２６】
初期画面には、最初の２０件が表示されている。このため、ユーザは、ボタン８１２を操作することができない。この場合、ボタン８１２は、ボタン８１３と異なる態様（例えば、異なる色彩又は形状）で表示される。
【０１２７】
ここで、ユーザがボタン８１３を操作すると、再度、クライアント・プログラムが検索要求をサーバに送信する。入力装置がマウスを含む場合、ボタン８１３の操作は、マウスクリックであってもよい。ユーザによるボタン８１３の操作が図４のステップ４０７に相当し、その結果送信される検索要求がステップ４０８に相当する。サーバ・プログラムは、受信した検索要求に従って、類似検索処理を実行し、その結果をクライアント・プログラムに返す（図４のステップ４０９、４１０及び４１１）。
【０１２８】
その結果、クライアント・プログラムは、更新された１００件の検索結果を取得する。検索結果取得後、画面８１０は画面８２０に遷移する。本システムでは、上位の検索結果は相対的に安定しており、通常の場合、画面８２０には、更新された検索結果中の２１位から４０位までの画像が、類似性が高い順序で表示される。
【０１２９】
ただし、検索結果の更新の結果、上位２０位以内に変動が生じる場合も当然ある。この場合、画面８２０には、更新された検索結果中の上位４０位以内の画像で、かつ、まだ画面８１０に表示されていない画像が、類似性が高い順に２０件表示される。例えば、更新された検索結果中の４位と８位の画像が、以前の検索結果中の２０位以内に含まれていなかった場合、画面８２０に表示される検索結果は、先頭に、４位、次に８位の画像が表示され、その後に、２１位から３８位までの画像が表示される。この場合、３９位と４０位の画像は画面８２０に表示されない。
【０１３０】
画面８２０には、ボタン８２１、８２２及び８２３が表示される。ボタン８２１及び８２２の機能は、それぞれ、画面８１０のボタン８１２及び８１３と同等である。ボタン８２３は、画面８２０に表示されている検索結果の次の２０件（すなわち、４１位から６０位までの検索結果）を表示する要求を受け付けるボタンである。従って、ユーザがボタン８２１を操作すると、上位２０位までの検索結果表示に戻る。ユーザがボタン８２３を操作すると、４１位から６０位までの検索結果が表示される。ユーザは、ボタン８２２を操作することができない。
【０１３１】
例えば、ユーザがボタン８２１をクリックすると、画面８２０は画面８３０に遷移する。この際には、検索結果は更新されない。画面８３０に表示されている検索結果の画像は、画像８１０に表示されているものと全く同一である。しかし、画面８３０に表示されているボタンの数は、画面８２０と同じである。
【０１３２】
具体的には、画面８３０には、ボタン８３１、８３２及び８３３が表示される。これらのボタンの機能は、それぞれ、画面８２０のボタン８２１、８２２及び８２３と同等である。ただし、画面８１０のボタン８１２と同様、ユーザは、ボタン８３１を操作することができない。
【０１３３】
その後、ユーザが、まだ表示されていない下位の検索結果の表示を順次要求すると、上記と同様の手順によって検索結果が更新され、ボタンの数が増加する。最終的に８１位から１００位までの検索結果を表示する画面８４０に至るまで、上記の処理が実行される。画面８４０には、８１位から１００位までの検索結果の画像と、五つのボタン８４１から８４５が表示される。ボタン８４１から８４３の機能は、それぞれ、画面８２０のボタン８２１から８２３と同等である。ボタン８４４は、６１位から８０位までの検索結果の表示を要求するためのボタンである。ボタン８４５は、８１位から１００位までの検索結果の表示を要求するためのボタンである。
【０１３４】
仮に、画面８１０において、はじめから、４１位以降の検索結果の表示を要求するボタンが表示される場合、例えば、４１位から６０位までの検索結果の表示が要求される場合がある。この要求がなされた時点で、２１位から４０位までの検索結果もまだ表示されていない。このため、サーバ・プログラムは、２１位から４０位までの検索結果を表示するためのRc個のクラスタを対象とするクラスタ内検索処理と、４１位から６０位までの検索結果を表示するための次のRc個のクラスタを対象とするクラスタ内検索処理とを実行する必要がある。言い換えると、サーバ・プログラムは、１回の検索要求に応じて、Rc×２個のクラスタを対象とするクラスタ内検索処理を実行する必要がある。その結果、Rc個のクラスタを対象とするクラスタ内検索処理が実行される場合と比較して、１回の検索要求に対する応答時間が長くなる。
【０１３５】
一方、図８に示すユーザインタフェースによれば、上位の検索結果が表示された場合のみ、その表示された検索結果の下位に連続する検索結果の表示要求を受け付けることが許可される。例えば、最初に上位２０位までの２０件の検索結果を表示することが要求されたとき、その要求に応じて表示される画面８１０には、１位から２０位までの検索結果が表示される。しかし、この画面８１０には、次の２０件（すなわち２１位から４０位まで）の表示を要求するためのボタン８１３が表示されるが、４１位以降の検索結果の表示を要求するボタンは表示されない。ボタン８１３が操作され、２１位から４０位までの検索結果が一度表示されると、その後、４１位から６０位までの検索結果を表示するボタン８２３、８３３又は８４３が表示される（画面８２０、８３０又は８４０）。このため、サーバ・プログラムは、Rc個を超える数のクラスタを対象とする検索要求を受けることがない。このため、サーバ・プログラムは、１回の検索要求に対して、概ね一定の応答時間内に検索結果を返すことができる。
【０１３６】
上記画面構成の特徴は、検索結果の表示範囲指定に制約を設け、ある範囲の表示が、その一つ上位の範囲が表示された後に、はじめて可能になるようにした点である。この制約は、上位から順番に見ていく、という、通常に行われるユーザ操作を妨げるものではなく、そのような操作を自然に促すものである。特に、類似性に限らず何かしらの基準でソートされたデータを見る場合、上位から順番に内容を確認していくのが、操作の流れとしては最も自然である。従って、操作性の点でユーザに対して不満を与えることはない。また、不用な機能が除かれている分、より分かり易い画面となっている。
【０１３７】
図８に示す画面による検索結果表示は、類似検索結果の順位を正確に反映するものではない。また、最終的な検索結果の上位１００件に含まれているにも関わらず、検索結果として表示されない画像も、稀には存在する。まず、順位に関して言えば、類似検索の場合、目的は類似したデータを閲覧することであり、正確な順位は、ユーザにとって特に意味のある情報とは言えない。従って、ユーザにとって特に不都合は生じない。検索結果の内容に関しては、先述したように、本システムでは、上位の検索結果は相対的に安定しており、表示から外れるデータは、検索結果中で類似性が低い方のデータとなる。類似検索では、類似性が高いデータに対してユーザが関心を持っている、と想定されるので、これも、ユーザにとっての不都合とはならない。
【０１３８】
一方、図８のような画面構成と異なり、大量の検索結果、例えば、上位１０００件を表示するようなユーザインタフェースも存在する。このような大量のデータを表示する方法に関しては、特開２０００−２９８８５号公報及び特開２００４−６２３５６号公報に記載されている。大量のデータを表示する場合、画像データの転送に時間を要するため、一度に全画像が表示されることはない。この場合、検索結果の更新は、所定の時間間隔で自動的に実行される。検索結果が更新された時点で、クライアント・プログラムが表示するべき画像も更新される。更新によって検索結果から外れたデータは、画面上からも除去される。この自動更新は、使用者が、別の検索条件を指定するまで繰り返される。この方式を採用した場合、画面上には、常に最新の検索結果が表示されることになる。また、自動更新による表示画像の変動は、更新回数に応じて減少し、アプリケーション側が新たに取得する必要がある画像の数も減少する。従って、不必要に通信負荷等が生じることはない。
【０１３９】
以上の本発明の実施の形態は、検索対象のベクトルデータが画像の特徴量ベクトルである場合を例として説明したが、本発明は、いかなる種類のベクトルデータの検索に対しても適用することができる。
【０１４０】
以上、本発明の実施の形態によれば、検索対象のベクトルデータが予めクラスタに分類され、各クラスタの代表値が定められる。任意のベクトルデータをキーとする検索要求が発行された場合、キーデータとの距離が近い代表値によって代表される所定の数のクラスタのみを対象として、類似検索が実行される。このため、高速な類似検索を実現することができる。各クラスタが、相互に類似するベクトルデータによって構成される場合、１回目の検索にある程度の精度を期待することができる。１回目の検索要求に応じた検索によって目的のデータを取得できなかった場合、前回と同一のベクトルデータをキーとする検索要求を繰り返し発行することによって、類似検索の対象クラスタの範囲が順次拡大される。その結果、検索要求を繰り返すごとに、検索精度が向上する。ユーザは、必要な精度の検索結果を得るまで検索要求を繰り返し発行することができる。検索要求を繰り返す場合、既に検索が実行されたクラスタを対象とする類似検索が省略される。このため、類似検索の対象の範囲を拡大しても、１回の検索要求に対応して実際に類似検索が実行されるクラスタの数を一定とすることができる。その結果、検索要求に対する応答時間が一定の値以下に抑えられる。
【図面の簡単な説明】
【０１４１】
【図１】本発明の実施の形態の類似検索システムの構成を示すブロック図である。
【図２】本発明の実施の形態においてデータ登録時に実行される処理を示すフローチャートである。
【図３】本発明の実施の形態において実行されるクラスタ位置の再配列の処理を示すフローチャートである。
【図４】本発明の実施の形態の類似検索における、クライアント・サーバ間の情報の流れ、及び、各プログラム内での処理の概略を示す説明図である。
【図５】本発明の実施の形態の参照クラスタ情報の説明図である。
【図６】本発明の実施の形態の検索結果の説明図である。
【図７】本発明の実施の形態のサーバ・プログラムにおいて実行されるクラスタ内検索処理を示すフローチャートである。
【図８】本発明の実施の形態において表示される検索結果表示画面の状態遷移の例の説明図である。
【符号の説明】
【０１４２】
１１０  サーバ計算機。
１１１  検索サーバプロセス。
１１２  クラスタ管理情報
１１３  クラスタ情報
１１４  クラスタメンバの特徴量データ
１１５  記録されたクラスタ管理情報
１２０  通信基盤
１３０  クライアント計算機
１３１、１５２  ＣＰＵ
１３２、１５３  メモリ
１３３、１５１  インターフェース
１３４  入力装置
１３５  出力装置
１５４  ハードディスク
２１０  近接クラスタの取得
２２０  最近接クラスタへのデータ追加
２３０  近接クラスタ要素数に関するループの判定部分
２３１  クラスタメンバ数のチェック
２３２  クラスタの分割
２３３  クラスタの追加
２４０  k-means法の反復回数のチェック
２５０  k-means法の実行
３１０  配置交換する組の探索
３２０  組が発見できたか否かの判定
３３０  クラスタ配列の更新
４０１  ユーザ入力
４０２  クライアントからサーバへの送信情報（初回）
４０３  クラスタ間検索処理
４０４  クラスタ内検索処理
４０５  サーバからクライアントへの返信情報（初回）
４０６  検索結果表示
４０７  ユーザ入力
４０８  クライアントからサーバへの送信情報（２回目）
４０９  クラスタ間検索処理
４１０  クラスタ内検索処理
４１１  サーバからクライアントへの返信情報（２回目）
５１０  タイムスタンプ
７１０  参照済みクラスタ数の判定
７２０  クラスタ同一性の判定
７３０  新規参照するクラスタ数の判定
７４０  クラスタ内での類似検索
７５０  検索結果の更新
８１０  類似画像検索結果表示画面／１位から２０位
８１１  検索結果
８１２、８２１、８３１、８４１  １位から２０位を表示するためのボタン
８１３、８２２、８３２、８４２  ２１位から４０位を表示するためのボタン
８２０  類似画像検索結果表示画面／２１位から４０位
８２３、８３３、８４３  ４１位から６０位を表示するためのボタン
８３０  類似画像検索結果再表示画面／１位から２０位
８３１  表示する順位を切り替えるボタンの列
８２１  １位から２０位を表示するためのボタン
８４０  類似画像検索結果表示画面／８１位から１００位
８４１  表示する順位を切り替えるボタンの列
８４４  ６１位から８０位を表示するためのボタン
８４５  ８１位から１００位を表示するためのボタン
【図１】
0005137339.tif 000004
【図２】
0005137339.tif 000005
【図３】
0005137339.tif 000006
【図４】
0005137339.tif 000007
【図５】
0005137339.tif 000008
【図６】
0005137339.tif 000009
【図７】
0005137339.tif 000010
【図８】
0005137339.tif 000011