(58)【調査した分野】(Int.Cl.,DB名)
前記所定条件は、ある多次元ベクトルデータに接続された複数のエッジの中で、接続する多次元ベクトルデータ間の距離が短い順にランク付けした場合に、所定順位以下であることである、
請求項1または2記載の検索データ管理装置。
前記削除処理部は、前記代替パスを探索する際に、前記被抽出エッジにより接続された多次元ベクトルデータのうち一方の多次元ベクトルデータに接続された多次元ベクトルデータの中で、前記被抽出エッジにより接続された多次元ベクトルデータのうち他方の多次元ベクトルデータに最も近い多次元ベクトルデータを、探索開始ベクトルとする、
請求項1から3のうちいずれか1項記載の検索データ管理装置。
前記削除処理部は、前記代替パスを探索する際に、前記被抽出エッジにより接続された多次元ベクトルデータのうち一方の多次元ベクトルデータに接続された多次元ベクトルデータの中で、前記一方の多次元ベクトルデータよりも、前記被抽出エッジにより接続された多次元ベクトルデータのうち他方の多次元ベクトルデータに近い多次元ベクトルデータを、探索開始ベクトルとする、
請求項1から3のうちいずれか1項記載の検索データ管理装置。
複数の多次元ベクトル間の距離に基づいて、着目する多次元ベクトルにエッジを介して接続された他の多次元ベクトルの数を所定数に制限する手法により、前記グラフ構造のデータを作成する作成部を更に備える、
請求項1から5のうちいずれか1項記載の検索データ管理装置。
【発明を実施するための形態】
【0010】
以下、図面を参照し、本発明の検索データ管理装置、検索データ管理方法、および検索データ管理プログラムの実施形態について説明する。なお、以下の説明において「ベクトル間の距離が短い」と「ベクトル同士が近い」、および「ベクトル間の距離が長い」と「ベクトルが遠い」は同じ意味である。
【0011】
[全体構成]
図1は、実施形態の検索データ管理装置1を中心とした構成図である。検索データ管理装置1は、一以上のクライアント端末CLとネットワークNWを介して接続される。クライアント端末は、パーソナルコンピュータ、スマートフォンなどの携帯電話、タブレット端末、その他の端末装置である。ネットワークNWは、無線基地局、公衆回線、専用回線、プロバイダ端末、インターネットなどを含む。検索データ管理装置1は、クライアント端末CLからクエリデータを受信すると、クエリデータに類似するデータを検索し、検索結果をクライアント端末CLに返信する。検索データ管理装置1が返信するデータは、データそのもの(例えばjpgなどで生成された画像データ)であってもよいし、データを参照するための識別子(URLなど)であってもよい。また、クエリデータや検索対象のデータは、画像、音声、テキストデータなど、如何なる種類のデータであってもよい。以下の説明では、検索データ管理装置1が画像を検索するものとして説明する。
【0012】
検索データ管理装置1は、例えば、ネットワークインターフェース10と、制御部20と、入出力装置30と、データサーバ40とを備える。ネットワークインターフェース10は、例えば、NIC(Network Interface Card)である。
【0013】
制御部20は、例えば、ベクトルデータ生成部22と、インデックス検索部24と、グラフインデックス編集部26とを備える。グラフインデックス編集部26は、新規作成・追加処理部26Aと、削除処理部26Bとを備える。これらの制御部20の構成要素は、例えば、CPU(Central Processing Unit)などのプロセッサがプログラムを実行することにより実現される。また、これらの機能部のうち一部または全部は、LSI(Large Scale Integration)やASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)などのハードウェアによって実現されてもよいし、ソフトウェアとハードウェアが協働して実現されてもよい。これらの機能部による処理の内容については後述する。
【0014】
図2は、制御部20のハードウェア構成の一例を示す図である。制御部20は、例えば、CPU20Aと、RAM(Random Access Memory)20Bと、プログラムメモリ20Cとが内部バスによって接続された構成を有する。内部バスには、ネットワークインターフェース10、入出力インターフェース、メモリインターフェースなどの各種インターフェースが接続される。RAM20Bには、CPU20Aによる処理対象のデータ、或いは処理結果のデータなどが格納される。プログラムメモリ20Cは、ROM(Read Only Memory)、HDD(Hard Disk Drive)、フラッシュメモリなどの記憶装置のうち一部または全部を含む。プログラムメモリ20Cには、ベクトルデータ生成プログラム20Ca、インデックス検索プログラム20Cb、グラフインデックス編集プログラム20Ccなどのプログラムが格納される。これらのプログラムは明確に分離されている必要はなく、一部または全部が共通化されてもよい。
【0015】
図1に戻り、入出力装置30は、検索データ管理装置1の管理者による入力操作を受け付けるマウスやキーボード、タッチパネルなどの入力装置と、LCD(Liquid Crystal Display)や有機EL(Electroluminescence)表示装置、スピーカなどの出力装置とを含む。
【0016】
データサーバ40は、HDDやフラッシュメモリなどの記憶装置により実現される。データサーバ40は、制御部20のプログラムメモリ20Cと共通化されてもよいし、プログラムメモリ20Cとは別体の記憶装置により実現されてもよい。また、データサーバ40は、検索データ管理装置1から各種ネットワークを介してアクセス可能なNAS(Network Attached Storage)装置などの外部記憶装置により実現されてもよい。この場合、特許請求の範囲における「記憶部」は、データサーバ40から取得したデータが一時的に格納されるRAM20Bを指すものと解釈してもよい。
【0017】
[制御部]
以下、制御部20の各機能部による処理の内容について説明する。なお、制御部20は、一つのプロセッサにより実現される必要はなく、機能ごとに分散処理を行ってもよい。例えば、ベクトルデータ生成部22およびインデックス検索部24と、グラフインデックス編集部26とは、それぞれ別体のプロセッサにより実現されてもよい。
【0018】
ベクトルデータ生成部22は、クライアント端末CLなどから受信した入力データに基づいて、入力データの特徴量である多次元ベクトルデータを生成する。入力データが画像である場合、多次元ベクトルデータは、例えば、局所特徴量やBoF(Bag of Features)、色のヒストグラムなど、或いはこれらの組み合わせである。また、入力データがテキストデータである場合、多次元ベクトルデータは、例えば、単語の出現頻度のベクトルデータ、ニューラルネットワークを用いて抽出した意味ベクトルなどである。
【0019】
インデックス検索部24は、ベクトルデータ生成部22により生成された多次元ベクトルデータ(以下、新規ベクトルデータと称する)をクエリとしてデータサーバ40を検索し、新規ベクトルデータに類似する既存ベクトルデータ42を抽出する。データサーバ40には、例えば、既存ベクトルデータ42と、グラフインデックス44とが格納される。
【0020】
既存ベクトルデータ42は、検索対象となるデータから生成された多次元ベクトルデータである。既存ベクトルデータ42には、その既存ベクトルデータ42を生成する元となったデータ、或いはデータを参照する識別子が対応付けられている。検索データ管理装置1は、新規ベクトルデータをクエリとして得られた既存ベクトルデータ42、すなわち新規ベクトルデータに類似する既存ベクトルデータ42に対応付けられたデータ、或いはデータを参照する識別子をクライアント端末CLに送信する。
図3は、既存ベクトルデータ42の内容の一例を示す図である。図示するように、既存ベクトルデータ42は、多次元ベクトルデータの識別情報(図中、ベクトルID)に対して、多次元ベクトルデータ、およびその多次元ベクトルデータを生成する元となったデータ、或いはデータを参照する識別子が対応付けられたデータである。
【0021】
グラフインデックス44は、複数の既存ベクトルデータ42を接続するエッジに関する情報であり、既存ベクトルデータ42のうち任意の二つを接続する複数のエッジにより形成されるグラフ構造のデータである。本実施例におけるグラフインデックス44に含まれるエッジは、双方向のエッジである。
図4は、グラフインデックス44の内容の一例を示す図である。図示するように、グラフインデックス44は、各エッジの識別情報であるエッジIDに対して、そのエッジが接続する両端の既存ベクトルデータのベクトルIDが対応付けられたデータである。なお、
図3および
図4に示すデータ構造は、あくまで一例であり、例えば、ベクトルIDに対して、接続されているエッジのエッジIDが対応付けられたデータが、グラフインデックス44としてデータサーバ40に格納されてもよい。すなわち、本実施形態においてデータ構造の形式は本質的な問題ではなく、要求される性質を満たす限り、如何なるデータ構造のデータがデータサーバ40に格納されてもよい。
【0022】
インデックス検索部24は、グラフインデックス44により規定されたエッジによって辿ることのできる既存ベクトルデータ42のうち、新規ベクトルデータに対して既定の距離以内にある既存ベクトルデータ42を、新規ベクトルデータに類似する既存ベクトルデータとして抽出する。ベクトル間の距離とは、例えば、ベクトル要素間の差分についてLpノルムを求めたものと定義される(p=1、2、…)。また、インデックス検索部24は、グラフインデックス44により規定されたエッジによって辿ることのできる既存ベクトルデータ42のうち、新規ベクトルデータに対する距離が短いものから順に所定数の既存ベクトルデータ42を、新規ベクトルデータに類似する既存ベクトルデータとして抽出してもよい。そして、インデックス検索部24は、抽出した既存ベクトルデータ42を、ネットワークインターフェース10およびネットワークNWを介してクライアント端末CLに送信する。
【0023】
なお、インデックス検索部24による検索処理は、例えば、後述する
図8のフローチャートの処理を用いて実現される。
図8のフローチャートにおいて、新規ベクトルデータをベクトルyとして得られるベクトル集合Rが、インデックス検索部24による検索結果の一例である。この場合、所定数ksを所望の値に調整することで、検索結果に含まれるベクトルの数を調整することができる。
【0024】
ベクトルデータ生成部22およびインデックス検索部24の機能によって、クライアント端末CLは、送信したデータに類似するデータを検索データ管理装置1から取得することができる。なお、検索データ管理装置1の役割は、新規ベクトルデータに類似する既存ベクトルデータ42を抽出するところまでであってもよく、その場合、抽出した既存ベクトルデータ42に対応したデータ、或いはデータを参照する識別子をクライアント端末CLに送信する機能は、検索データ管理装置1とは異なる装置が有してもよい。
【0025】
グラフインデックス編集部26の新規作成・追加処理部26Aは、グラフインデックス44を新規作成し、または追加処理する。この処理について、例えば以下に説明する二つの手法のうちいずれかを採用することができる。以下の説明では、多次元ベクトルを単にベクトルと称することがある。
【0026】
(新規作成・追加手法1)
図5は、新規作成・追加処理部26Aによる処理の流れの一例を示すフローチャートである。このフローチャートの処理は、グラフインデックス44を新規に作成する場合に使用可能であると共に、新たな多次元ベクトルデータが追加された場合に、既にグラフインデックス44に対応付けられた多次元ベクトルデータと新たな多次元ベクトルデータとに対して実行することで、新たな多次元ベクトルデータを追加する処理にも使用することができる。本フローチャートの処理の前提として、既存ベクトルデータ42に含まれる多次元ベクトルデータには、1からnまでのベクトルIDが付与されているものとする。フローチャートの中で使用する引数iおよびjは、1からnまで順に選択されて処理が実行される。すなわち、新規作成・追加処理部26Aは、まず、引数iを1に設定すると共に、引数jを1から一つずつインクリメントしながら引数jがnに至るまで繰り返しS100〜S106の処理を行う。次に、新規作成・追加処理部26Aは、引数iを2に設定すると共に、引数jを1から一つずつインクリメントしながら引数jがnに至るまで繰り返しS100〜S106の処理を行う。これを、引数iがnに至るまで繰り返し実行する。
【0027】
新規作成・追加処理部26Aは、ベクトルi(ベクトルIDがiであるベクトル;以下同様)が、ベクトルjの近傍ベクトルN(G,j)の要素である、またはi=jであるか否かを判定する(S100)。ベクトルjの近傍ベクトルN(G,j)とは、ベクトルjから見て距離が短い方から順に所定数kpだけ選択されるベクトルの集合である。「G」は、グラフ構造のデータを示す符号である。ベクトルjの近傍ベクトルN(G,j)の要素であるベクトルのそれぞれと、ベクトルjとの間は、エッジによって接続される。従って、少なくともベクトルjの近傍ベクトルN(G,j)の要素であるベクトルは、ベクトルjから一つのエッジを介して辿ることのできるベクトルである。なお、ベクトルjが、ベクトルjの近傍ベクトルN(G,j)の要素でない他のベクトルの近傍ベクトルの要素である場合もある。以下、このことを前提として説明する。ベクトルiがベクトルjの近傍ベクトルN(G,j)の要素である場合、またはi=jである場合、S102〜S106の処理がスキップされる。
【0028】
ベクトルiがベクトルjの近傍ベクトルN(G,j)の要素でなく、且つi=jでない場合、新規作成・追加処理部26Aは、ベクトルiをベクトルjの近傍ベクトルN(G,j)の要素に追加する(S102)。次に、新規作成・追加処理部26Aは、ベクトルjの近傍ベクトルN(G,j)の要素であるベクトルの数が所定数kpを超えるか否かを判定する(S104)。所定数kpは、任意に定められる自然数である。例えば、kp=3である。ベクトルjの近傍ベクトルN(G,j)の要素であるベクトルの数が所定数kpを超える場合、新規作成・追加処理部26Aは、ベクトルjの近傍ベクトルN(G,j)から、ベクトルjとの距離が最も長い(ベクトルjから最も遠い)ベクトルを除外する(S106)。
【0029】
図6は、近傍ベクトルが更新される様子を示す図である。図示の例では、元々、ベクトルjの近傍ベクトルN(G,j)にベクトル(1)〜(3)が設定されていたところ、ベクトルiが追加されると共にベクトル(3)が除外された。この結果、ベクトルjの近傍ベクトルN(G,j)がN(G,j)*に更新された。このような処理を繰り返すことで、ベクトルx=1〜nの全てについて、近傍ベクトルN(G,x)が設定される。これによって、グラフインデックス44が作成される。
【0030】
(新規作成・追加手法2)
図7および
図8は、新規作成・追加処理部26Aによる処理の流れの他の一例を示すフローチャートである。本フローチャートの処理の前提として、既存ベクトルデータ42において1からnまでのベクトルIDが付与され、グラフインデックス44が作成されたn個の多次元ベクトルデータが既に存在し、新たにm−n個の多次元ベクトルデータが追加されたものとする(m>n)。フローチャートの中で使用する引数yは、(n+1)からmまで順に選択されて処理が実行される。
【0031】
新規作成・追加処理部26Aは、K近傍検索処理を実行する(S200)。K近傍検索処理については
図8を用いて説明する。
図8に示すように、新規作成・追加処理部26Aは、超球の半径rを∞(無限大)に設定し(S300)、既存のベクトル集合からベクトル集合Sを抽出する(S302)。超球とは、検索範囲(その範囲に入っていれば入力ベクトルyの近傍ベクトルN(G,y)の要素に含められる可能性がある範囲)を示す仮想的な球である。なお、ステップS302で抽出されたベクトル集合Sに含まれるベクトルは、同時にベクトル集合Rの初期集合にも含められてもよい。
【0032】
次に、新規作成・追加処理部26Aは、ベクトル集合Sに含まれるベクトルの中で、ベクトルyとの距離が最も短いベクトルを抽出し、ベクトルsとする(S304)。次に、新規作成・追加処理部26Aは、ベクトルsをベクトル集合Sから除外する(S306)。
図9は、ベクトル集合Sから、ベクトルyとの距離が最も短いベクトルが抽出され、ベクトル集合Sから除外される様子を概念的に示す図である。
【0033】
次に、新規作成・追加処理部26Aは、ベクトルsとベクトルyとの距離d(s,y)がr(1+ε)を超えるか否かを判定する(S308)。ここで、εは拡張要素であり、r(1+ε)は、探索範囲(その範囲にあるベクトルの近傍ベクトルについて、入力ベクトルyの近傍ベクトルN(G,y)の要素に含められるか否かを判定する範囲)の半径を示す値である。ベクトルsとベクトルyとの距離d(s,y)がr(1+ε)を超える場合、新規作成・追加処理部26Aは、ベクトル集合Rをベクトルyの近傍ベクトルN(G,y)として出力し、
図8のフローチャートの処理を終了する。
【0034】
ベクトルsとベクトルyとの距離d(s,y)がr(1+ε)を超えない場合、新規作成・追加処理部26Aは、ベクトルsの近傍ベクトルN(G,s)の要素であるベクトルの中からベクトル集合Cに含まれないベクトルを一つ選択し、選択したベクトルuを、ベクトル集合Cに格納する(S312)。
図10は、ベクトルsの近傍ベクトルN(G,s)を概念的に示す図である。ベクトル集合Cは、重複検索を回避するために便宜上設けられるものであり、
図8のフローチャートが開始されるときにリセットされて空集合とされる。
【0035】
次に、新規作成・追加処理部26Aは、ベクトルuとベクトルyとの距離d(u,y)がr(1+ε)以下であるか否かを判定する(S314)。ベクトルuとベクトルyとの距離d(u,y)がr(1+ε)以下である場合、新規作成・追加処理部26Aは、ベクトルuをベクトル集合Sに追加する(S316)。
【0036】
次に、新規作成・追加処理部26Aは、ベクトルuとベクトルyとの距離d(u,y)がr以下であるか否かを判定する(S318)。ベクトルuとベクトルyとの距離d(u,y)がrを超える場合、S330に処理が進められる。
【0037】
ベクトルuとベクトルyとの距離d(u,y)がr以下である場合、新規作成・追加処理部26Aは、ベクトルuをベクトル集合Rに追加する(S320)。
図11は、ベクトルがベクトル集合Sまたはベクトル集合Rに追加される様子を概念的に示す図である。図示の例では、ベクトルyとの距離がr以下であるベクトル(4)および(5)がベクトル集合Rに追加され、ベクトルyとの距離がrを超えr(1+ε)以下であるベクトル(6)がベクトル集合Sに追加される。
【0038】
そして、新規作成・追加処理部26Aは、ベクトル集合Rに含まれるベクトル数がksを超えるか否かを判定する(S322)。所定数ksは、任意に定められる自然数である。例えば、ks=3である。
【0039】
ベクトル集合Rに含まれるベクトル数がksを超える場合、新規作成・追加処理部26Aは、ベクトル集合Rに含まれるベクトルの中でベクトルyとの距離が最も長いベクトルを、ベクトル集合Rから除外する(S324)。
【0040】
次に、新規作成・追加処理部26Aは、ベクトル集合Rに含まれるベクトル数がksと一致するか否かを判定する(S326)。ベクトル集合Rに含まれるベクトル数がksと一致する場合、新規作成・追加処理部26Aは、ベクトル集合Rに含まれるベクトルの中でベクトルyとの距離が最も長いベクトルと、ベクトルyとの距離を、新たなrに設定する(S328)。
【0041】
図12は、ベクトル集合Rに含まれるベクトルから、ベクトルyとの距離が最も長いベクトルが除外され、rが再設定される様子を概念的に示す図である。
図12の例では、
図11でRに追加されたベクトルs、(4)、および(5)の他、前回以前のループ処理の結果、ベクトル(7)がRに含まれていたものとする。この場合、ベクトルyとの距離が最も長いベクトル(5)がRから除外され、残ったベクトルの中でベクトルyとの距離が最も長いベクトル(7)とベクトルyとの距離が、rに設定される。
【0042】
そして、新規作成・追加処理部26Aは、ベクトルsの近傍ベクトルN(G,s)の要素であるベクトルから全てのベクトルを選択してベクトル集合Cに格納し終えたか否かを判定する(S330)。ベクトルsの近傍ベクトルN(G,s)の要素であるベクトルから全てのベクトルを選択してベクトル集合Cに格納し終えていない場合、S312に処理が戻される。
【0043】
ベクトルsの近傍ベクトルN(G,s)の要素であるベクトルから全てのベクトルを選択してベクトル集合Cに格納し終えた場合、新規作成・追加処理部26Aは、ベクトル集合Sが空集合であるか否かを判定する(S330)。ベクトル集合Sが空集合でない場合、S304に処理が戻され、ベクトル集合Sが空集合である場合、新規作成・追加処理部26Aは、ベクトル集合Rをベクトルyの近傍ベクトルN(G,y)として出力し、
図8のフローチャートの処理を終了する(S332)。
【0044】
図8に示す処理を行うことで、全てのベクトルを網羅的に処理する場合に比して、メモリ領域の消費を抑制しつつ、高速処理を実現することができる。すなわち、
図8に示す処理は、主としてグラフインデックス44により規定されるエッジを辿ることで進行するため、既存ベクトルデータ42を網羅的に検索するよりも処理工数が少なくて済む。また、既存のベクトル群に必要なメモリ領域の他、シードとなるベクトル集合S、重複検索を回避するためのベクトル集合C、および、最大のベクトル数がksに制限されるベクトル集合Rに関するデータを管理すればよいため、メモリ領域の消費を抑制することができる。更に、入力データであるベクトルyから十分に遠いベクトルは、処理によってベクトル集合Sに追加される可能性が低く、仮にS302でベクトル集合Sに含められたとしても、探索順位が低いことにより処理対象とされない可能性が高くなるため、処理工数を更に低減することができる。
【0045】
図7に戻る。ベクトルyの近傍ベクトルN(G,y)が求められると、新規作成・追加処理部26Aは、ベクトルyの近傍ベクトルN(G,y)の要素であるベクトルを一つ選択し、ベクトルzとする(S202)。次に、新規作成・追加処理部26Aは、ベクトルzの近傍ベクトルN(G,z)の要素としてベクトルyを追加する(S204)。
【0046】
次に、新規作成・追加処理部26Aは、ベクトルzの近傍ベクトルN(G,z)の要素であるベクトルの数がkpを超えるか否かを判定する(S206)。ベクトルzの近傍ベクトルN(G,z)の要素であるベクトルの数が所定数kpを超える場合、新規作成・追加処理部26Aは、ベクトルzの近傍ベクトルN(G,z)から、ベクトルzとの距離が最も長い(ベクトルjから最も遠い)ベクトルを除外する(S208)。
【0047】
そして、新規作成・追加処理部26Aは、ベクトルyの近傍ベクトルN(G,y)の要素であるベクトルzを全て選択したか否かを判定する(S210)。ベクトルyの近傍ベクトルN(G,y)の要素であるベクトルzを全て選択していない場合はS202に処理が戻され、ベクトルyの近傍ベクトルN(G,y)の要素であるベクトルzを全て選択した場合はS200〜S208のループ処理の1回分が終了する。これによって、グラフインデックス44が作成される。
【0048】
ここで、(新規作成・追加手法1)と(新規作成・追加手法2)の処理は、組み合わせて使用されてもよい。すなわち、最初にベクトル群が与えられてグラフインデックス44を作成する際に(新規作成・追加手法1)の処理を行い、その後、ベクトル群が追加される際に(新規作成・追加手法2)の処理を行ってもよい。その場合、kpとksは同じでもよいし、異なってもよい。また、ベクトル群が追加される度に(新規作成・追加手法1)の処理を行うものとしてもよい。
【0049】
(削除処理)
削除処理部26Bは、新規作成・追加処理部26Aによって作成されたグラフインデックス44から、所定条件を満たすエッジを抽出し、抽出したエッジ(被抽出エッジ)と同じベクトルを異なる経路で接続する代替パスであって、エッジ数が所定数p以下の代替パスが存在する場合に、抽出したエッジを削除する処理を行う。所定条件とは、例えば、以下に説明する
図13のS402の判定条件である。
【0050】
図13は、削除処理部26Bにより実行される処理の流れの一例を示すフローチャートである。本フローチャートの処理の前提として、既存ベクトルデータ42に含まれる多次元ベクトルデータには、1からnまでのベクトルIDが付与されているものとする(
図7および
図8のフローチャートが実行された後であれば、1〜mまでのベクトルIDが付与されてもよい)。フローチャートの中で使用する引数eは、1からnまで順に選択されて処理が実行される。
【0051】
まず、削除処理部26Bは、ベクトルeの近傍ベクトルN(G,e)の要素であるベクトルの中からベクトルを一つ選択し、ベクトルfとする(S400)。次に、削除処理部26Bは、Rank{N(G,e),f}が所定数krを超えるか否かを判定する(S402)。Rank{N(G,e),f}とは、ベクトルfが、ベクトルeの近傍ベクトルN(G,e)の要素であるベクトルの中で、何番目にベクトルeに近いかを示す指標値である。また、所定数krは、例えば、所定数kp未満の値である。従って、「Rank{N(G,e),f}が所定数krを超えるか否かを判定する」処理は、ベクトルeの近傍ベクトルN(G,e)の要素であるベクトルから、ベクトルeとの距離が他のベクトルとの比較において長いベクトルを抽出する処理である。Rank{N(G,e),f}が所定数krを超えない場合、S404〜S410の処理がスキップされる。
【0052】
Rank{N(G,e),f}が所定数krを超える場合、削除処理部26Bは、代替パスの探索開始ベクトルを選択し(S404)、探索開始ベクトルから先のパスを探索する(S406)。
【0053】
次に、削除処理部26Bは、エッジ数がp以下の代替パスが存在するか否かを判定する(S408)。エッジ数がp以下の代替パスが存在する場合、削除処理部26Bは、ベクトルeとベクトルfを接続するエッジ(e,f)をグラフインデックス44から削除する(S410)。
【0054】
図14は、エッジ数がp以下の代替パスが削除される様子を概念的に示す図である。図示の例では、ベクトルeとf(1)を接続するエッジ(e,f(1))、および、ベクトルeとf(2)を接続するエッジ(e,f(2))には、共に代替パスが存在する。エッジ(e,f(1))の代替パスのエッジ数は3であるのに対し、エッジ(e,f(2))の代替パスのエッジ数は4である。ここで、p=3とすると、エッジ(e,f(1))は削除可能、エッジ(e,f(2))は削除不可として扱われる。
【0055】
次に、削除処理部26Bは、ベクトルeの近傍ベクトルN(G,e)の要素であるベクトルから全てのベクトルを選択したか否かを判定する(S412)。ベクトルeの近傍ベクトルN(G,e)の要素であるベクトルから全てのベクトルを選択していない場合、S400に処理が戻される。一方、ベクトルeの近傍ベクトルN(G,e)の要素であるベクトルから全てのベクトルを選択した場合、
図13のフローチャートの処理が終了する。
【0056】
係る処理によって、探索性能を考慮したエッジの削減をすることができる。この種の技術では、ベクトルにエッジが大量に付与されていると、かえって検索性能が低下してしまう。従って、比較的距離の長いエッジを優先的に削除することで、局所的な検索回数を低減し、検索処理を効率化することができる。ところが、距離の長いエッジを無制限に削除すると、迂回する経路が長くなることで、むしろ検索処理が非効率になってしまう場合がある。また、迂回する経路が存在しなくなり、検索できないベクトルが生じる場合もある。
【0057】
係る事情に鑑み、本実施形態の検索データ管理装置1では、そのエッジを削除した後に、同じベクトルに対して比較的少ないエッジ数で到達することができる場合にのみ、エッジを削除することとした。これによって、探索性能を考慮したエッジの削減をすることができ、エッジの数を適度に維持することができる。
【0058】
ここで、
図13のフローチャートにおけるS404の処理において、探索開始ベクトルを選択する手法としては、以下のような手法が挙げられる。
【0059】
(探索対象ノード選択手法1)
削除処理部26Bは、ベクトルeにエッジを介して接続されている全てのベクトルを、探索開始ベクトルとして網羅的に選択してもよい。これによって、エッジ数がp以下の代替パスを確実に発見することができる。
【0060】
(探索対象ノード選択手法2)
削除処理部26Bは、ベクトルeにエッジを介して接続されているベクトルのうち、ベクトルfに最も近いベクトルを探索開始ベクトルとして、代替パスの探索を開始してもよい。これによって、代替パスの探索処理の負荷を最も軽減することができる。
【0061】
(探索対象ノード選択手法3)
削除処理部26Bは、ベクトルeにエッジを介して接続されているベクトルのうち、そのベクトルとベクトルfとの距離が、ベクトルeとベクトルfとの距離よりも短いベクトルを探索開始ベクトルとして、代替パスの探索を開始してもよい。これによって、代替パスの探索処理の負荷を軽減すると共に、(探索対象ノード選択手法2)よりも確実にエッジ数がp以下の代替パスを確実に発見することができる。
【0062】
なお、いずれの手法においても、ベクトルeに付与されているエッジの中で、短いものから順にランクkrまでのエッジのみを使用してグラフの探索を行う(短いものから順にランクkrまでのエッジのみを探索開始ベクトルとする)。なぜなら、ランクkrよりも大きいエッジを含む代替パスが見つかったとしても、それ以降の削除処理により代替パス上の当該エッジが削除されてしまう可能性があるからである。
【0063】
図15は、探索開始ベクトルを選択する手法を例示した図である。本図において、(探索対象ノード選択手法2)を採用する場合、ベクトル(8)のみが探索開始ベクトルとして選択される。一方、(探索対象ノード選択手法3)を採用する場合、ベクトル(8)、(9)、(10)が探索開始ベクトルとして選択される。
【0064】
いずれの場合にも、エッジ数がpに至った時点で、その経路の探索を終了することにより、処理負荷の増大を抑制することができる。削除処理部26Bは、探索開始ベクトルを起点として、その先のベクトルを網羅的に探索し、エッジ数がpに至るまでにベクトルfに到達できなかった場合、その探索開始ベクトルを起点としてエッジ数がp以下の代替パスを発見できなかったと判断し、その探索開始ベクトルからの探索を終了する。
【0065】
以上説明した実施形態の検索データ管理装置1によれば、検索対象の多次元ベクトルデータがエッジにより接続されたグラフ構造のデータ(42、44)を記憶する記憶部(40)と、記憶部に記憶されたグラフ構造のデータから所定条件を満たす被抽出エッジを抽出し(
図13のS402;エッジ(e,f))、被抽出エッジと同じ多次元ベクトルデータ同士(e、f)を、被抽出エッジとは異なる経路で接続すると共に、エッジ数が所定数(p)以下である代替パスが存在するか否かを判定し、存在すると判定した場合に、被抽出エッジをグラフ構造のデータから削除する削除処理部(26B)と、を備えることにより、探索性能を考慮したエッジの削減をすることができる。
【0066】
以上、本発明を実施するための形態について実施形態を用いて説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。