(57)【特許請求の範囲】
【請求項１】
複数のベクトルデータをノードとし、近傍にあるノード間をエッジにより接続してなるグラフインデックスを保持するグラフインデックス保持部と、
未探索ノードを保持するための未探索ノード保持部と、
前記グラフインデックスのノードから起点を選択して未探索ノードに追加する起点選択部と、
クエリとなるベクトルデータを取得するクエリ取得部と、
前記未探索ノードから順次ノードを選択し、選択されたノードとクエリとの距離が所定の距離範囲内である関係にあるか判断する判断部と、
判断結果が前記関係であると判断された場合には前記選択されたノードに接続されている近傍ノードを前記未探索ノードに追加する未探索ノード追加部と、
を有するグラフインデックス探索装置。
【請求項２】
前記未探索ノード保持部は、前記クエリから最も近い未探索ノードを選択可能に保持する請求項１に記載のグラフインデックス探索装置。
【請求項３】
前記未探索ノード保持部は、スタック構造を有し、
前記未探索ノード追加部は、前記近傍ノードを前記クエリから距離の遠い順に追加する請求項１に記載のグラフインデックス探索装置。
【請求項４】
前記未探索ノード保持部は、前記クエリから最も遠い未探索ノードを選択可能に保持する請求項１に記載のグラフインデックス探索装置。
【請求項５】
前記未探索ノード保持部は、スタック構造を有し、
前記未探索ノード追加部は、前記近傍ノードを前記クエリから距離の近い順に追加する請求項１に記載のグラフインデックス探索装置。
【請求項６】
前記判断部は、前記未探索ノードからランダムにノードを選択する請求項１から５のいずれか一に記載のグラフインデックス探索装置。
【請求項７】
前記起点選択部は、
未探索ノードとしての起点をグラフインデックス中の複数のノードからランダムに選択するランダム選択手段を有することを特徴とする請求項１から６のいずれか一に記載のグラフインデックス探索装置。
【請求項８】
ベクトル空間分割により前記複数のベクトルデータを木構造型インデックスで保持する木構造インデックス保持部を更に備え、
前記起点選択部は、
前記木構造インデックスに基づいて前記クエリが属するベクトル空間にあるベクトルデータから未探索ノードとしての起点を選択する木構造インデックス選択手段を有することを特徴とする請求項１から６のいずれか一に記載のグラフインデックス探索装置。
【請求項９】
判断部により前記関係にあると判断されたノードであって、検索範囲内にあるノードを検索結果として保持する検索結果保持部をさらに有する請求項１から８のいずれか一に記載のグラフインデックス探索装置。
【請求項１０】
複数のベクトルデータをノードとし、近傍にあるノード間をエッジにより接続してなるグラフインデックスを保持するグラフインデックス保持部と、
未探索ノードを保持するための未探索ノード保持部と、を有するグラフインデックス探索装置の動作方法であって、
前記グラフインデックスのノードから起点を選択して未探索ノードに追加する起点選択ステップと、
クエリとなるベクトルデータを取得するクエリ取得ステップと、
前記未探索ノードから順次ノードを選択し、選択されたノードとクエリとの距離が所定の距離範囲内である関係にあるか判断する判断ステップと、
判断結果が前記関係であると判断された場合には前記選択されたノードに接続されている近傍ノードを前記未探索ノードに追加する未探索ノード追加ステップと、
を有するグラフインデックス探索装置の動作方法。
【請求項１１】
複数のベクトルデータをノードとし、近傍にあるノード間をエッジにより接続してなるグラフインデックスを保持するグラフインデックス保持部と、
未探索ノードを保持するための未探索ノード保持部と、を有するグラフインデックス探索装置を動作させるプログラムであって、
前記グラフインデックスのノードから起点を選択して未探索ノードに追加する起点選択ステップと、
クエリとなるベクトルデータを取得するクエリ取得ステップと、
前記未探索ノードから順次ノードを選択し、選択されたノードとクエリとの距離が所定の距離範囲内である関係にあるか判断する判断ステップと、
判断結果が前記関係であると判断された場合には前記選択されたノードに接続されている近傍ノードを前記未探索ノードに追加する未探索ノード追加ステップと、
を計算機に実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフ構造のインデックスを用いて新規ベクトルデータと類似する既存ベクトルデータを検索するための技術に関する。
【背景技術】
【０００２】
ベクトルデータの検索の例として画像認識がある。画像認識は、認識対象画像における特徴領域から多次元のベクトルデータ（局所特徴量）を抽出し、多数の学習画像から抽出した多次元のベクトルデータとの距離などに基づき、それらの学習画像のなかから類似画像を抽出するものである。
【０００３】
類似画像の検索において、学習画像の数が多い場合において、認識対象画像と各学習画像とのベクトルデータ間の距離を逐一計算すると多くの時間が検索にかかってしまう。そこで、検索速度を高めるために何らかのインデックスが用いられる。
【０００４】
例えば、特許文献１においては、グラフ構造のインデックスを用いて高速な検索を実現している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第５３０８００１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
グラフ構造のインデックスは、例えば画像における局所特徴量などの多次元ベクトルデータと対応付けたノードをエッジによって互いに接続して構成されるインデックスである。このようなグラフ構造のインデックスを用いた検索は、いずれかに選択された検索開始点となるノードからエッジを介して接続されるノードを辿ることにより、クエリ（認識対象画像）と近接する学習画像を抽出する。
【０００７】
ここで、エッジにより接続されるノードの数は一つに限られず複数に及ぶため、エッジを介してノードを辿る経路は多岐にわたる。すなわち、接続される複数のノードのうちいずれのノードを選択して辿るのか、あるいは検索開始点をどのように規定するのかなどにより、その経路は多岐にわたり、そのノードの辿り方は検索の精度や速度に影響を及ぼすという問題がある。
【０００８】
本発明は、精度や速度といった検索に求められる性能をより向上させるためのノードの辿り方などを示すことを課題とする。
【課題を解決するための手段】
【０００９】
そこで、上記課題を解決するために本発明において、以下のグラフインデックス探索装置などを提供する。すなわち、複数のベクトルデータをノードとし、近傍にあるノード間をエッジにより接続してなるグラフインデックスを保持するグラフインデックス保持部と、未探索ノードを保持するための未探索ノード保持部と、前記グラフインデックスのノードから起点を選択して未探索ノードに追加する起点選択部と、クエリとなるベクトルデータを取得するクエリ取得部と、前記未探索ノードから順次ノードを選択し、選択されたノードとクエリとの関係が所定の関係にあるか判断する判断部と、判断結果が所定の関係であると判断された場合には前記選択されたノードに接続されている近傍ノードを前記未探索ノードに追加する未探索ノード追加部と、を有するグラフインデックス探索装置などを提供する。
【発明の効果】
【００１０】
上記のような構成を採用するグラフインデックス探索装置により、ベクトルデータの検索における速度や精度の向上を図ることができる。
【図面の簡単な説明】
【００１１】
【図１】実施形態１のグラフインデックス探索装置の機能ブロックの一例を示す図
【図２】グラフインデックスを用いた探索処理について説明するための概念図
【図３】優先度を付けたキュー構造にてノードを保持する未探索ノード保持部の概念図
【図４】検索処理のアルゴリズムを疑似コードで表わしたプログラムの一例
【図５】実施形態１のグラフインデックス探索装置のハードウェア構成の一例を表す概略図
【図６】実施形態１のグラフインデックス探索装置の処理の一例を表すフロー図
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態について、添付図面を用いて説明する。なお、本発明は、これら実施形態に何ら限定されるべきものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施し得る。
＜実施形態１＞
＜構成＞
【００１３】
図１は、本実施形態のグラフインデックス生成装置の機能ブロックの一例を示すブロック図である。なお、以下に記載する本装置の機能ブロックは、ハードウェア及びソフトウェアの組み合わせとして実現され得る。具体的には、コンピュータを利用するものであれば、ＣＰＵ（中央演算装置）や主メモリ、システムバス、あるいは二次記憶装置（ハードディスクドライブや不揮発性メモリ、ＣＤやＤＶＤなどの記憶メディアとそれらメディアの読取ドライブなど）、情報入力に利用される入力デバイス、表示装置、その他の外部周辺装置などのハードウェア構成部、またその外部周辺装置用のインターフェース、通信用インターフェース、それらハードウェアを制御するためのドライバプログラムやその他アプリケーションプログラム、ユーザ・インターフェース用アプリケーションなどが挙げられる。そして主メモリ上に展開したプログラムに従ったＣＰＵの演算処理によって、入力デバイスやその他インターフェースなどから入力され、メモリやハードディスク上に保持されているデータなどが加工、蓄積されたり、上記各ハードウェアやソフトウェアを制御するための命令が生成されたりする。あるいは本装置の機能ブロックは専用ハードウェアによって実現されてもよい。また、本装置は一つのハードウェアやソフトウェアにより構成される場合に限られず、複数のハードウェアやソフトウェアの組み合わせによって構成されてもよく、ネットワークを介在したサーバ装置を含んで構成されてもよい。
【００１４】
また、この発明は装置として実現できるのみでなく、方法としても実現可能である。また、このような発明の一部をソフトウェアとして構成することができる。さらに、そのようなソフトウェアをコンピュータに実行させるために用いるプログラム、及びプログラムを固定した記録媒体も、当然にこの発明の技術的な範囲に含まれる（本明細書の全体を通じて同様である）。
【００１５】
図１に示すように、本実施形態のグラフインデックス探索装置０１００は、グラフインデックス保持部０１０１と、未探索ノード保持部０１０２と、起点選択部０１０３と、クエリ取得部０１０４と、判断部０１０５と、未探索ノード追加部０１０６と、を有する。
【００１６】
グラフインデックス保持部０１０１は、複数のベクトルデータをノードとし、近傍にあるノード間をエッジにより接続してなるグラフインデックスを保持する機能を有する。ベクトルデータは前述した画像や音声から抽出した特徴量などがある。また、水位や潮位、地震動（地面の動き）、大気中のＣＯ２やＰＭ２．５の濃度分布など数値で表現されるものすべてである。
【００１７】
近傍とは、ベクトル空間におけるノード間の距離における近傍である。近傍であるか否かは種々定めることができる。例えば、あるノードと他のすべてのノードとの距離に基づき近い順にソートした上位Ｘ個に該当するノードを近傍のノードとすることができる。また、あるノードから規定の距離範囲内に位置するノードを近傍ノードとしてもよい。なお、ここでいう距離は、例えばユークリッド距離などである。
【００１８】
ノード間に接続されるエッジはリンクと称される場合もある、また、エッジは単方向を有するものであってもよいし、双方向を有するものであってもよい。ここでいう方向とは、グラフインデックを用いて検索を行う際に、ノード間に張られたエッジにより辿ることのできる方向を意味する。
【００１９】
未探索ノード保持部０１０２は、未探索ノードを保持するための機能を有する。保持するための機能とは、保持することができるという意味である。
【００２０】
本装置においては、後述するクエリを取得し、グラフインデックスを構成するいずれかのノードからエッジにより接続されているノードを辿り、辿ったノードについての情報（例えば、クエリとの距離や接続されているエッジ数など）の取得などを行いながら、クエリに近い距離にある（類似する）ノードを検索するものである。このようにノードを辿ることを探索という。
【００２１】
未探索ノードとは、前述の通り、未だ辿られていないノードであり、例えば当該ノードについての情報を取得したり、当該ノードに何らかの処理を施すといったことがなされていないノードである。後述する未探索ノード追加部により未探索ノード保持部に保持されているノードや、すでに未探索ノード保持部に保持されているノードとエッジにより接続しているノードであって未だ未探索ノード保持部に保持されていないノードでもある。
【００２２】
未探索ノードの保持にあたり、保持する未探索ノードに何らかの情報を付随させて保持することもできる。例えば、探索における経路として辿られたことを示すフラグを立てたり、辿られることによる処理履歴を付したりすることができる。また、未探索ノードのＩＤを配列や集合(set, priority queue)といったデータ格納形式で管理することができる。
【００２３】
起点選択部０１０３は、前記グラフインデックスのノードから起点を選択して未探索ノードに追加する機能を有する。起点とは前述の探索を行うときの起点である。起点の選択はランダムに行ってもよいし、何らかのインデックスを用いて行ってもよい。未探索ノードに追加するとは、未探索ノード保持部による保持対象となることを意味する。すなわち、起点として選択されたノードは未探索ノード保持部に保持されることになる。
【００２４】
本装置は、ベクトル空間分割によりグラフインデックスが保持するグラフインデックスを構成するノードに対応するベクトルデータをリーフノードとする木構造型インデックスを保持する構成としてもよい。
【００２５】
係る木構造型インデックスを保持する場合には、起点選択部は木構造型インデックスに基づいて、後述するクエリが属するベクトル空間にあるベクトルデータから未探索ノードとしての起点を選択することができる。これにより、クエリと近傍にあるノードを起点として探索をすることができ、効率よく探索を行うことが可能となる。ここでの木構造型インデックスによる検索を近似近傍検索とすることで、高速に近傍ノードを取得できる。
【００２６】
クエリ取得部０１０４は、クエリとなるベクトルデータを取得する機能を有する。クエリとは、例えば、類似画像検索においては、学習画像から類似する画像を見つけようとする画像のこと（検索元）をいう。クエリの取得は、例えばネットワークを介してクライアント端末などから取得する。また、クエリとなるベクトルデータとは、検索元となる画像から抽出した特徴量のように、クエリをベクトルデータで表わしたものとなる。
【００２７】
判断部０１０５は、前記未探索ノードから順次ノードを選択し、選択されたノードがまだ後述する範囲判定を行っていないノードの場合にのみ、選択されたノードにエッジで接続された近傍ノードとクエリとの関係が所定の関係にあるか判断する（範囲判定）機能を有する。当該近傍ノードとクエリとの関係とは、例えば、クエリとなるベクトルデータを中心として所定の距離（ベクトル空間における距離）範囲内に当該近傍ノードが存在するか否かといった関係である。このように規定される範囲を検索範囲という。この検索範囲内か否かは、クエリと当該近傍ノードとの距離によって判断できる。
【００２８】
また、前述の検索範囲をα倍した範囲（探索範囲）内に当該近傍ノードが存在するか否かといった関係である。この判断も、クエリとなるベクトルデータと当該近傍ノードとの距離によって判断できる。なお、具体的な検索の処理については後述するが、αの値を１より大きな値に設定することにより、検索速度が相対的に遅くなるものの検索漏れの少ない高精度の検索を行うことが可能となる。また、αの値を１より小さな値に設定することにより、検索精度が相対的に低下するものの高速な検索を行うことができる。
【００２９】
判断部は未探索ノードから順次ノードを選択するが、ここで選択の対象となる未探索ノードは、未探索ノード保持部に保持されているノードである。
【００３０】
未探索ノード保持部に保持されるノードを順次選択する態様は種々考えられ、例えば、保持される複数の未探索ノードからランダムに一の未探索ノードを選択するようにしてもよい。ランダムに選択する場合には、広範囲に探索するためローカルミニマムに落ち込みにくい。また、ソート処理がないため高速な検索が可能になるが、広範囲に検索することにより速度が低下する。
【００３１】
また、保持される未探索ノードから各ノードとクエリとの距離が近い順に選択してもよい。この場合、近傍ノードを効果的に探索できる反面、ローカルミニマムに落ち込みやすい。また、距離の近い順にソートする処理を要するため時間がかかる。
【００３２】
また、ノードの選択は、未探索ノード保持部におけるノード保持の態様に応じたものであってもよい。例えば、プライオリティキュー（優先度付きキュー）構造で保持する場合であって、クエリとなるベクトルデータとの距離の近い順や遠い順に優先度を付して保持する場合には、その付された優先度に基づいて（近い順又は遠い順）選択される。
【００３３】
この場合には、ソート処理がないもののソートした場合と同じ効果を得ることができ、近い順に優先度を付して保持した場合には、近接ノードを効果的に探索することができる。また、遠い順に優先度を付して保持した場合には、広範囲に探索することができローカルミニマムに落ち込みにくい。
【００３４】
また、未探索ノード保持部がスタック構造により未探索ノードを保持する場合には、複数保持されている未探索ノードのうち最後に保持された未探索ノードが選択される。この場合については後述する。
【００３５】
本装置における探索の初期段階、すなわち、起点のみが未探索ノード保持部に保持されている段階では、その起点として選択されたノードが判断部により判断される。
【００３６】
未探索ノード追加部０１０６は、判断部による判断結果が所定の関係であると判断された場合には前記選択されたノードに接続されている近傍ノードを前記未探索ノードに追加する機能を有する。
【００３７】
図２を用いて本機能について検索処理と併せて説明する。図２は、グラフインデックスを用いて探索を行う処理について説明するための概念図である。図中の符号０２０１で示すのがクエリとなるベクトルデータ（以下、単にクエリという）である。また、符号０２０２で示すのは起点として選択されたノードである。起点となったノードは未探索ノードとして保持される。なお、起点を選択した時点で未探索ノード保持部に保持されるノードは、起点となったノードのみである。起点は複数のノードから構成されてもよい。
【００３８】
判断部は、未探索ノード保持部に保持されるノードを選択する。起点が複数存在する場合には、それぞれの起点から順次検索処理を行う。まず、選択された起点ノードが上述した探索範囲内にあるか判断する。検索の初期段階において検索範囲は無限大に設定されているため、起点となったノードは探索範囲内にあると判断することができる。この判断結果により起点となったノードに接続されている近傍ノード追加される。追加される近傍ノードは、図中のノードａ（０２０３）、ノードｂ（０２０４）及びノードｃ（０２０５）である。これら複数の近傍ノードを未探索ノードに追加するにあたり所定の順に追加する態様については後述する。ここで、判断部により判断された起点ノードは未探索ノードではなくなる。
【００３９】
判断部は、上述の通り未探索ノードに追加されたノードａ、ノードｂ及びノードｃを順次選択し、それぞれのノードが探索範囲内（０２１１）にあるかの判断をする。なお、この探索範囲はクエリと起点との距離を検索範囲（０２１０）とし、これをα倍したものである。具体的には、検索範囲ｒに（１＋ε）を乗じたものが探索範囲である（εは探索範囲係数という）。図示するように、各ノードは探索範囲内にあるので未探索ノード保持部に追加して保持する。
【００４０】
ここでは、クエリとの距離の近い順に優先度を付けたキュー構造で保持するものとする。この場合における未探索ノード保持部の保持態様の概念を図３に示す。図示するように、クエリとの距離に基づき優先度が各ノードに付される。ここでは、最もクエリに近いノードａの優先度が「１」で、次に近いノードｂに優先度「２」が付され、最もクエリから遠いノードｃに優先度「３」が付される。
【００４１】
ここで、起点はすでに判断部により判断が済んでいるため優先度は付されない。このようなノードを未探索ノード保持部の保持対象から外してもよいし、本図に示すように探索済のフラグを付して保持していてもよい。
【００４２】
このように未探索ノード保持部にノードが追加されると、判断部はさらに追加されたノードに接続されている近傍ノードについて所定の関係にあるかの判断をする。ここで、図３に示したように、未探索ノード保持部は優先度を付けたキュー構造にてノードを保持しているので、判断部は、優先度「１」が付されているノードａを選択して判断を行う。ノードａについて前述のような判断を行った後に、優先度に従いノードｂ、ノードｃと順次選択して同様に判断する。そして、判断がなされたノードａ、ノードｂ及びノードｃに探索済のフラグを立てる。
【００４３】
また、ノードａ、ノードｂ及びノードｃのそれぞれについて、検索範囲内にあるか判断し、検索範囲内にあるノードについては検索結果として保持する。そして検索結果として保持されるノードとクエリとの距離に基づき検索範囲を狭めていく。すなわち検索結果として保持するノードの数（検索数）の上限を予め定めておき（ｋｓ個）、前述の検索数がｋｓを超えた場合にはクエリからの距離が遠い順に超過分のノードを検索結果としての保持対象から外し、そのうえで検索結果として保持されるノードのうちクエリから最遠のノードまでの距離を新たな検索範囲とする。このように検索範囲を狭めながら探索を進めていくことで効率よくクエリに近づいていくことができる。
【００４４】
以降も、上述した処理を行いながらノードを辿ることによりクエリに類似するノードを検索する。検索の終了は、例えば、検索範囲を狭めていき、探索範囲内に対象となる未探索ノードが存在しなくなったことを条件とするなどして終了する。
【００４５】
図４は、上述したような検索処理のアルゴリズムを疑似コードで表わしたプログラムの一例である。なお、図示する疑似コードにおいては、保持される未探索ノードとクエリとの距離を計算し、最も距離の近いノードを判断対象として選択する処理を行っている。判断対象とする未探索ノードの選択の態様は上述の通り種々考えられ、検索処理のアルゴリズムもその態様に応じたものとなる。
【００４６】
上記プログラムにおいて、Ｓはグラフインデックスを構成するノードであって、未だ辿られていない（クエリとの距離判断などがなされていない）ノードの集合である。また、ｑはクエリである。ｓは集合Ｓから選択される判断対象となるノードである。ｒは検索範囲である。また、εは、検索限界範囲を規定する探索範囲係数である。また、ｏは、ｓに接続するノードである。また、Ｃは探索済のノードの集合であり、Ｒは検索結果としてほじされるノードの集合である。
＜ハードウェア構成＞
【００４７】
図５は、上記機能的な各構成要件をハードウェアとして実現した際の、グラフインデックス探索装置の構成の一例を表す概略図である。この図を利用してグラフインデックス探索装置に係るそれぞれのハードウェア構成の働きについて説明する。
【００４８】
この図にあるように、グラフインデックス探索装置は、各種演算処理を実行するための「ＣＰＵ」（０５０１）と、「主メモリ」（０５０２）と、「二次記憶装置」（０５０３）と、「通信インターフェース」（０５０４）」などを備える。記憶装置にはベクトルデータ、グラフインデックス、クエリ、所定の関係、規定数ｋｓ、検索終了条件、起点選択プログラムなどの各種プログラムなどが格納されている。ＣＰＵはこれら各種プログラムを主メモリに展開したうえで実行する。前記の各ハードウェア構成は「システムバス」（０５０５）などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
【００４９】
まず、ＣＰＵは、クエリ取得プログラムを実行し、クエリとなるベクトルデータを取得する。そして、起点選択プログラムを実行し、グラフインデックスのノードから起点を選択する。そして、選択した起点を未探索ノードとして所定の領域に格納する。そして、判断プログラムを実行し、格納された未探索ノードとクエリとの関係が所定の関係にあるか判断する。判断結果は所定の領域に格納する。そして、未探索ノード追加プログラムを実行し、格納されている判断結果が所定の関係にあるとの結果である場合に格納されている未探索ノードと接続されているノードを未探索ノードとして所定領域に格納する。また、判断プログラムの実行により判断された未探索ノードについては判断済のフラグをその未探索ノードに付して格納する。そして、検索終了条件が満たされたか判断し、満たされたとの判断結果が得られるまで、上記各プログラム及び処理を繰り返し実行する。
＜処理の流れ＞
【００５０】
図６は、本実施形態のグラフインデックス探索装置における処理の流れの一例を表すフロー図である。なお、以下に示すステップは、上記のような計算機の各ハードウェア構成によって実行されるステップであっても良いし、媒体に記録され計算機を制御するためのプログラムを構成する処理ステップであっても構わない。
【００５１】
図示するように、まず、クエリとなるベクトルデータを取得する（クエリ取得ステップ：Ｓ０６０１）。そして、グラフインデックスのノードから起点を選択して未探索ノードに追加する（起点選択ステップ：Ｓ０６０２）。そして、未探索ノードから順次ノードを選択し、選択されたノードとクエリとの関係が所定の関係にあるか判断する（判断ステップ：Ｓ０６０３）。そして、判断結果が所定の関係であると判断された場合には前記選択されたノードに接続されている近傍ノードを前記未探索ノードに追加する（未探索ノード追加ステップ：Ｓ０６０４）。
＜効果＞
【００５２】
未探索ノードの保持をプライオリティキュー構造で行ったり、未探索ノードから判断対象とするノードをランダムに選択することなどにより、所望の検索精度や検索速度などに応え得るグラフインデックス探索装置を提供することができる。
＜実施形態２＞
【００５３】
本実施形態は、実施形態１におけるグラフインデックス探索装置を基本とし、未探索ノード保持部がスタック構造により未探索ノードを保持することを特徴とする。
【００５４】
スタック構造による保持データの処理は、いわゆる後入れ先出しの構造である。そして、このような未探索ノード保持部に対して、一つの態様としては、未探索ノード追加部は、接続される近傍ノードをクエリから距離の遠い順に追加する。
【００５５】
この場合、次に判断部により判断されるノードは追加されたノードのうち最もクエリに近いノードから取り出されるためクエリに近いノードを辿ることができる。しかしクエリに近い順であっても局所的な近い順であるのでローカルミニマムに落ち込むリスクは高くない。また、ソートを行わないので高速で検索することができる。
【００５６】
また、他の態様として、未探索ノード追加部は、接続される近傍ノードをクエリから距離の近い順に追加する。次に判断部により判断されるノードは追加されたノードのうち最もクエリに遠いノードから選択され。そのため広範囲に探索することができ、ローカルミニマムに落ち込みにくくなる。
【００５７】
本装置においては、実施形態１及び２において、種々の未探索ノード保持部と未探索ノード追加部の構成を示してきた。それぞれの態様に応じて、検索の傾向（検索速度、検索範囲、ローカルミニマムの生じにくさ、など）を付与することができる。とくに、未探索ノード保持部をスタック構造とし、未探索ノード追加部を接続される近傍ノードをクエリからの距離順（遠い順又は近い順）に追加するという制御により、ソートや優先度を付与することなく未探索ノード保持部をシンプルな構成にしつつ、未探索ノード保持部から判断対象となる未探索ノードの選択において一定の傾向を付与することができる。そして、そのような傾向が付与されることにより、検索処理自体の傾向を付与することが可能となる。
【００５８】
本装置においては、前述種々なる態様の未探索ノード保持部と未探索ノード追加部を選択可能に構成してもよい。これにより、本装置による検索を要求する者のニーズ（検索速度、検索精度など）に応じた検索を行うことが可能となる。
【００５９】
本実施形態のグラフインデックス探索装置は、実施形態１のグラフインデックス探索装置に係るハードウェア構成に準じて構成することができる。例えば、上述したように未探索ノード保持部をスタック構造にて構成し、近傍ノードから近い順または遠い順に未探索ノードを追加する未探索ノード追加プログラムをＣＰＵが実行することなどにより構成される。
【００６０】
また、本実施形態のグラフインデックス探索装置における処理についても、実施形態１のグラフインデックス探索装置における処理の流れに準じたものとなり、前述の通り、本実施形態に特有の未探索ノードの追加を行う処理を含むものとなる。
＜効果＞
【００６１】
本実施形態のグラフインデックス探索装置により、未探索ノード保持部をスタック構造とすることで、ソートなどの処理を排除することで検索速度の向上を実現するとともに、未探索ノードの追加において所定の順序付けをすることで、それに応じた検索の傾向を付与することができる。
【符号の説明】
【００６２】
０１００  グラフインデックス探索装置
０１０１  グラフインデックス保持部
０１０２  未探索ノード保持部
０１０３  起点選択部
０１０４  クエリ取得部
０１０５  判断部
０１０６  未探索ノード追加部
【図１】
0006352958.tif 000002
【図２】
0006352958.tif 000003
【図３】
0006352958.tif 000004
【図４】
0006352958.tif 000005
【図５】
0006352958.tif 000006
【図６】
0006352958.tif 000007