(57)【特許請求の範囲】
【請求項１】
検索対象の多次元ベクトルデータがエッジにより接続されたグラフ構造のデータを記憶する記憶部と、
前記記憶部に記憶されたグラフ構造のデータから、所定条件を満たすエッジである被抽出エッジを抽出し、
前記被抽出エッジにより接続された多次元ベクトルデータ同士を、前記被抽出エッジとは異なる経路で接続すると共に、エッジ数が所定数以下である代替パスが存在するか否かを判定し、
存在すると判定した場合に、前記被抽出エッジを前記グラフ構造のデータから削除する削除処理部と、
を備える検索データ管理装置。
【請求項２】
前記所定条件は、ある多次元ベクトルデータに接続された複数のエッジの中で、接続する多次元ベクトルデータ間の距離が、他のエッジとの比較において長いことである、
請求項１記載の検索データ管理装置。
【請求項３】
前記所定条件は、ある多次元ベクトルデータに接続された複数のエッジの中で、接続する多次元ベクトルデータ間の距離が短い順にランク付けした場合に、所定順位以下であることである、
請求項１または２記載の検索データ管理装置。
【請求項４】
前記削除処理部は、前記代替パスを探索する際に、前記被抽出エッジにより接続された多次元ベクトルデータのうち一方の多次元ベクトルデータに接続された多次元ベクトルデータの中で、前記被抽出エッジにより接続された多次元ベクトルデータのうち他方の多次元ベクトルデータに最も近い多次元ベクトルデータを、探索開始ベクトルとする、
請求項１から３のうちいずれか１項記載の検索データ管理装置。
【請求項５】
前記削除処理部は、前記代替パスを探索する際に、前記被抽出エッジにより接続された多次元ベクトルデータのうち一方の多次元ベクトルデータに接続された多次元ベクトルデータの中で、前記一方の多次元ベクトルデータよりも、前記被抽出エッジにより接続された多次元ベクトルデータのうち他方の多次元ベクトルデータに近い多次元ベクトルデータを、探索開始ベクトルとする、
請求項１から３のうちいずれか１項記載の検索データ管理装置。
【請求項６】
複数の多次元ベクトル間の距離に基づいて、着目する多次元ベクトルにエッジを介して接続された他の多次元ベクトルの数を所定数に制限する手法により、前記グラフ構造のデータを作成する作成部を更に備える、
請求項１から５のうちいずれか１項記載の検索データ管理装置。
【請求項７】
他装置から受信したクエリデータの特徴データとして多次元ベクトルデータを生成する生成部と、
前記生成部により生成された多次元ベクトルデータと、前記グラフ構造のデータとに基づいて、前記生成部により生成された多次元ベクトルデータに類似する多次元ベクトルデータを抽出し、前記他装置に返信する検索部を更に備える、
請求項１から６のうちいずれか１項記載の検索データ管理装置。
【請求項８】
コンピュータが、
検索対象の多次元ベクトルデータがエッジにより接続されたグラフ構造のデータから、所定条件を満たすエッジである被抽出エッジを抽出し、
前記被抽出エッジにより接続された多次元ベクトルデータ同士を、前記被抽出エッジとは異なる経路で接続すると共に、エッジ数が所定数以下である代替パスが存在するか否かを判定し、
存在すると判定した場合に、前記被抽出エッジを前記グラフ構造のデータから削除する、
検索データ管理方法。
【請求項９】
コンピュータに、
検索対象の多次元ベクトルデータがエッジにより接続されたグラフ構造のデータから、所定条件を満たすエッジである被抽出エッジを抽出させ、
前記被抽出エッジにより接続された多次元ベクトルデータ同士を、前記被抽出エッジとは異なる経路で接続すると共に、エッジ数が所定数以下である代替パスが存在するか否かを判定させ、
存在すると判定した場合に、前記被抽出エッジを前記グラフ構造のデータから削除させる、
検索データ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索データ管理装置、検索データ管理方法、および検索データ管理プログラムに関する。
【背景技術】
【０００２】
画像検索などのデータ検索の分野において、検索対象のデータ同士を仮想的に接続要素によって接続したグラフ構造のデータを構築しておき、接続要素を辿ることでデータ検索を行うことが行われている。接続要素とは、二つのデータが接続されていることを示す情報であり、エッジ、リンクなどと称される（以下ではエッジと称する）。エッジの設定は、まず検索対象のデータの特徴量を求め、特徴量が近いデータ同士を接続するといった規則に従って行われる。特徴量は、典型的には多次元ベクトルデータで表され、特徴量が近いとは、例えば、多次元ベクトルデータ間の距離が短いことと定義される。多次元ベクトルデータ同士の距離としては、例えば、ベクトル要素間の差分についてＬｐノルムを求めたものが使用される（ｐ＝１、２、…）。
【０００３】
また、エッジには、有向エッジと無向エッジが存在する。有向エッジとは、一方向にしかデータを辿れないエッジであり、無向エッジとは、双方向にデータを辿ることができるエッジである。無向エッジを設定した方が検索経路のパターンが多くなるため、高速かつ高精度に検索を行うことができる場合がある。ところが、例えば有向エッジを設定したグラフ構造に対して機械的に無向エッジに変更した場合、特定のデータに対して多くのエッジが設定されることがある。エッジの数が過剰になると、検索処理の工数が増加し、かえって性能が低下する場合もある。
【０００４】
こうした点に鑑み、ある着目データに接続されているデータのうち、着目データとの距離が短いものから所定数のデータを残し、残りのデータとの接続を解除する技術が開示されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−０９０３５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来の技術では、エッジを効果的に削減可能である反面、探索性能（検索時間）を考慮していないために探索性能が低下する傾向がある。
本発明は、このような事情を考慮してなされたものであり、探索性能を考慮したエッジの削減が可能な検索データ管理装置、検索データ管理方法、および検索データ管理プログラムを提供することを目的の一つとする。
【課題を解決するための手段】
【０００７】
本発明の一態様は、検索対象の多次元ベクトルデータがエッジにより接続されたグラフ構造のデータを記憶する記憶部と、前記記憶部に記憶されたグラフ構造のデータから、所定条件を満たすエッジである被抽出エッジを抽出し、前記被抽出エッジと同じ多次元ベクトルデータ同士を、前記被抽出エッジとは異なる経路で接続すると共に、エッジ数が所定数以下である代替パスが存在するか否かを判定し、存在すると判定した場合に、前記被抽出エッジを前記グラフ構造のデータから削除する削除処理部と、を備える検索データ管理装置である。
【発明の効果】
【０００８】
本発明の一態様によれば、探索性能を考慮したエッジの削減をすることができる。
【図面の簡単な説明】
【０００９】
【図１】実施形態の検索データ管理装置１を中心とした構成図である。
【図２】制御部２０のハードウェア構成の一例を示す図である。
【図３】既存ベクトルデータ４２の内容の一例を示す図である。
【図４】グラフインデックス４４の内容の一例を示す図である。
【図５】新規作成・追加処理部２６Ａによる処理の流れの一例を示すフローチャートである。
【図６】近傍ベクトルが更新される様子を示す図である。
【図７】新規作成・追加処理部２６Ａによる処理の流れの他の一例を示すフローチャートである。
【図８】新規作成・追加処理部２６Ａによる処理の流れの他の一例を示すフローチャートである。
【図９】ベクトル集合Ｓから、ベクトルｙとの距離が最も短いベクトルが抽出され、ベクトル集合Ｓから除外される様子を概念的に示す図である。
【図１０】ベクトルｓの近傍ベクトルＮ（Ｇ，ｓ）を概念的に示す図である。
【図１１】ベクトルがベクトル集合Ｓまたはベクトル集合Ｒに追加される様子を概念的に示す図である。
【図１２】ベクトル集合Ｒに含まれるベクトルから、ベクトルｙとの距離が最も長いベクトルが削除され、ｒが再設定される様子を概念的に示す図である。
【図１３】削除処理部２６Ｂにより実行される処理の流れの一例を示すフローチャートである。
【図１４】エッジ数がｐ以下の代替パスが削除される様子を概念的に示す図である。
【図１５】探索開始ベクトルを選択する手法を例示した図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照し、本発明の検索データ管理装置、検索データ管理方法、および検索データ管理プログラムの実施形態について説明する。なお、以下の説明において「ベクトル間の距離が短い」と「ベクトル同士が近い」、および「ベクトル間の距離が長い」と「ベクトルが遠い」は同じ意味である。
【００１１】
［全体構成］
図１は、実施形態の検索データ管理装置１を中心とした構成図である。検索データ管理装置１は、一以上のクライアント端末ＣＬとネットワークＮＷを介して接続される。クライアント端末は、パーソナルコンピュータ、スマートフォンなどの携帯電話、タブレット端末、その他の端末装置である。ネットワークＮＷは、無線基地局、公衆回線、専用回線、プロバイダ端末、インターネットなどを含む。検索データ管理装置１は、クライアント端末ＣＬからクエリデータを受信すると、クエリデータに類似するデータを検索し、検索結果をクライアント端末ＣＬに返信する。検索データ管理装置１が返信するデータは、データそのもの（例えばｊｐｇなどで生成された画像データ）であってもよいし、データを参照するための識別子（ＵＲＬなど）であってもよい。また、クエリデータや検索対象のデータは、画像、音声、テキストデータなど、如何なる種類のデータであってもよい。以下の説明では、検索データ管理装置１が画像を検索するものとして説明する。
【００１２】
検索データ管理装置１は、例えば、ネットワークインターフェース１０と、制御部２０と、入出力装置３０と、データサーバ４０とを備える。ネットワークインターフェース１０は、例えば、ＮＩＣ（Network Interface Card）である。
【００１３】
制御部２０は、例えば、ベクトルデータ生成部２２と、インデックス検索部２４と、グラフインデックス編集部２６とを備える。グラフインデックス編集部２６は、新規作成・追加処理部２６Ａと、削除処理部２６Ｂとを備える。これらの制御部２０の構成要素は、例えば、ＣＰＵ（Central Processing Unit）などのプロセッサがプログラムを実行することにより実現される。また、これらの機能部のうち一部または全部は、ＬＳＩ（Large Scale Integration）やＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field-Programmable Gate Array）などのハードウェアによって実現されてもよいし、ソフトウェアとハードウェアが協働して実現されてもよい。これらの機能部による処理の内容については後述する。
【００１４】
図２は、制御部２０のハードウェア構成の一例を示す図である。制御部２０は、例えば、ＣＰＵ２０Ａと、ＲＡＭ（Random Access Memory）２０Ｂと、プログラムメモリ２０Ｃとが内部バスによって接続された構成を有する。内部バスには、ネットワークインターフェース１０、入出力インターフェース、メモリインターフェースなどの各種インターフェースが接続される。ＲＡＭ２０Ｂには、ＣＰＵ２０Ａによる処理対象のデータ、或いは処理結果のデータなどが格納される。プログラムメモリ２０Ｃは、ＲＯＭ（Read Only Memory）、ＨＤＤ（Hard Disk Drive）、フラッシュメモリなどの記憶装置のうち一部または全部を含む。プログラムメモリ２０Ｃには、ベクトルデータ生成プログラム２０Ｃａ、インデックス検索プログラム２０Ｃｂ、グラフインデックス編集プログラム２０Ｃｃなどのプログラムが格納される。これらのプログラムは明確に分離されている必要はなく、一部または全部が共通化されてもよい。
【００１５】
図１に戻り、入出力装置３０は、検索データ管理装置１の管理者による入力操作を受け付けるマウスやキーボード、タッチパネルなどの入力装置と、ＬＣＤ（Liquid Crystal Display）や有機ＥＬ（Electroluminescence）表示装置、スピーカなどの出力装置とを含む。
【００１６】
データサーバ４０は、ＨＤＤやフラッシュメモリなどの記憶装置により実現される。データサーバ４０は、制御部２０のプログラムメモリ２０Ｃと共通化されてもよいし、プログラムメモリ２０Ｃとは別体の記憶装置により実現されてもよい。また、データサーバ４０は、検索データ管理装置１から各種ネットワークを介してアクセス可能なＮＡＳ（Network Attached Storage）装置などの外部記憶装置により実現されてもよい。この場合、特許請求の範囲における「記憶部」は、データサーバ４０から取得したデータが一時的に格納されるＲＡＭ２０Ｂを指すものと解釈してもよい。
【００１７】
［制御部］
以下、制御部２０の各機能部による処理の内容について説明する。なお、制御部２０は、一つのプロセッサにより実現される必要はなく、機能ごとに分散処理を行ってもよい。例えば、ベクトルデータ生成部２２およびインデックス検索部２４と、グラフインデックス編集部２６とは、それぞれ別体のプロセッサにより実現されてもよい。
【００１８】
ベクトルデータ生成部２２は、クライアント端末ＣＬなどから受信した入力データに基づいて、入力データの特徴量である多次元ベクトルデータを生成する。入力データが画像である場合、多次元ベクトルデータは、例えば、局所特徴量やＢｏＦ（Bag of Features）、色のヒストグラムなど、或いはこれらの組み合わせである。また、入力データがテキストデータである場合、多次元ベクトルデータは、例えば、単語の出現頻度のベクトルデータ、ニューラルネットワークを用いて抽出した意味ベクトルなどである。
【００１９】
インデックス検索部２４は、ベクトルデータ生成部２２により生成された多次元ベクトルデータ（以下、新規ベクトルデータと称する）をクエリとしてデータサーバ４０を検索し、新規ベクトルデータに類似する既存ベクトルデータ４２を抽出する。データサーバ４０には、例えば、既存ベクトルデータ４２と、グラフインデックス４４とが格納される。
【００２０】
既存ベクトルデータ４２は、検索対象となるデータから生成された多次元ベクトルデータである。既存ベクトルデータ４２には、その既存ベクトルデータ４２を生成する元となったデータ、或いはデータを参照する識別子が対応付けられている。検索データ管理装置１は、新規ベクトルデータをクエリとして得られた既存ベクトルデータ４２、すなわち新規ベクトルデータに類似する既存ベクトルデータ４２に対応付けられたデータ、或いはデータを参照する識別子をクライアント端末ＣＬに送信する。図３は、既存ベクトルデータ４２の内容の一例を示す図である。図示するように、既存ベクトルデータ４２は、多次元ベクトルデータの識別情報（図中、ベクトルＩＤ）に対して、多次元ベクトルデータ、およびその多次元ベクトルデータを生成する元となったデータ、或いはデータを参照する識別子が対応付けられたデータである。
【００２１】
グラフインデックス４４は、複数の既存ベクトルデータ４２を接続するエッジに関する情報であり、既存ベクトルデータ４２のうち任意の二つを接続する複数のエッジにより形成されるグラフ構造のデータである。本実施例におけるグラフインデックス４４に含まれるエッジは、双方向のエッジである。図４は、グラフインデックス４４の内容の一例を示す図である。図示するように、グラフインデックス４４は、各エッジの識別情報であるエッジＩＤに対して、そのエッジが接続する両端の既存ベクトルデータのベクトルＩＤが対応付けられたデータである。なお、図３および図４に示すデータ構造は、あくまで一例であり、例えば、ベクトルＩＤに対して、接続されているエッジのエッジＩＤが対応付けられたデータが、グラフインデックス４４としてデータサーバ４０に格納されてもよい。すなわち、本実施形態においてデータ構造の形式は本質的な問題ではなく、要求される性質を満たす限り、如何なるデータ構造のデータがデータサーバ４０に格納されてもよい。
【００２２】
インデックス検索部２４は、グラフインデックス４４により規定されたエッジによって辿ることのできる既存ベクトルデータ４２のうち、新規ベクトルデータに対して既定の距離以内にある既存ベクトルデータ４２を、新規ベクトルデータに類似する既存ベクトルデータとして抽出する。ベクトル間の距離とは、例えば、ベクトル要素間の差分についてＬｐノルムを求めたものと定義される（ｐ＝１、２、…）。また、インデックス検索部２４は、グラフインデックス４４により規定されたエッジによって辿ることのできる既存ベクトルデータ４２のうち、新規ベクトルデータに対する距離が短いものから順に所定数の既存ベクトルデータ４２を、新規ベクトルデータに類似する既存ベクトルデータとして抽出してもよい。そして、インデックス検索部２４は、抽出した既存ベクトルデータ４２を、ネットワークインターフェース１０およびネットワークＮＷを介してクライアント端末ＣＬに送信する。
【００２３】
なお、インデックス検索部２４による検索処理は、例えば、後述する図８のフローチャートの処理を用いて実現される。図８のフローチャートにおいて、新規ベクトルデータをベクトルｙとして得られるベクトル集合Ｒが、インデックス検索部２４による検索結果の一例である。この場合、所定数ｋｓを所望の値に調整することで、検索結果に含まれるベクトルの数を調整することができる。
【００２４】
ベクトルデータ生成部２２およびインデックス検索部２４の機能によって、クライアント端末ＣＬは、送信したデータに類似するデータを検索データ管理装置１から取得することができる。なお、検索データ管理装置１の役割は、新規ベクトルデータに類似する既存ベクトルデータ４２を抽出するところまでであってもよく、その場合、抽出した既存ベクトルデータ４２に対応したデータ、或いはデータを参照する識別子をクライアント端末ＣＬに送信する機能は、検索データ管理装置１とは異なる装置が有してもよい。
【００２５】
グラフインデックス編集部２６の新規作成・追加処理部２６Ａは、グラフインデックス４４を新規作成し、または追加処理する。この処理について、例えば以下に説明する二つの手法のうちいずれかを採用することができる。以下の説明では、多次元ベクトルを単にベクトルと称することがある。
【００２６】
（新規作成・追加手法１）
図５は、新規作成・追加処理部２６Ａによる処理の流れの一例を示すフローチャートである。このフローチャートの処理は、グラフインデックス４４を新規に作成する場合に使用可能であると共に、新たな多次元ベクトルデータが追加された場合に、既にグラフインデックス４４に対応付けられた多次元ベクトルデータと新たな多次元ベクトルデータとに対して実行することで、新たな多次元ベクトルデータを追加する処理にも使用することができる。本フローチャートの処理の前提として、既存ベクトルデータ４２に含まれる多次元ベクトルデータには、１からｎまでのベクトルＩＤが付与されているものとする。フローチャートの中で使用する引数ｉおよびｊは、１からｎまで順に選択されて処理が実行される。すなわち、新規作成・追加処理部２６Ａは、まず、引数ｉを１に設定すると共に、引数ｊを１から一つずつインクリメントしながら引数ｊがｎに至るまで繰り返しＳ１００〜Ｓ１０６の処理を行う。次に、新規作成・追加処理部２６Ａは、引数ｉを２に設定すると共に、引数ｊを１から一つずつインクリメントしながら引数ｊがｎに至るまで繰り返しＳ１００〜Ｓ１０６の処理を行う。これを、引数ｉがｎに至るまで繰り返し実行する。
【００２７】
新規作成・追加処理部２６Ａは、ベクトルｉ（ベクトルＩＤがｉであるベクトル；以下同様）が、ベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）の要素である、またはｉ＝ｊであるか否かを判定する（Ｓ１００）。ベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）とは、ベクトルｊから見て距離が短い方から順に所定数ｋｐだけ選択されるベクトルの集合である。「Ｇ」は、グラフ構造のデータを示す符号である。ベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）の要素であるベクトルのそれぞれと、ベクトルｊとの間は、エッジによって接続される。従って、少なくともベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）の要素であるベクトルは、ベクトルｊから一つのエッジを介して辿ることのできるベクトルである。なお、ベクトルｊが、ベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）の要素でない他のベクトルの近傍ベクトルの要素である場合もある。以下、このことを前提として説明する。ベクトルｉがベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）の要素である場合、またはｉ＝ｊである場合、Ｓ１０２〜Ｓ１０６の処理がスキップされる。
【００２８】
ベクトルｉがベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）の要素でなく、且つｉ＝ｊでない場合、新規作成・追加処理部２６Ａは、ベクトルｉをベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）の要素に追加する（Ｓ１０２）。次に、新規作成・追加処理部２６Ａは、ベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）の要素であるベクトルの数が所定数ｋｐを超えるか否かを判定する（Ｓ１０４）。所定数ｋｐは、任意に定められる自然数である。例えば、ｋｐ＝３である。ベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）の要素であるベクトルの数が所定数ｋｐを超える場合、新規作成・追加処理部２６Ａは、ベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）から、ベクトルｊとの距離が最も長い（ベクトルｊから最も遠い）ベクトルを除外する（Ｓ１０６）。
【００２９】
図６は、近傍ベクトルが更新される様子を示す図である。図示の例では、元々、ベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）にベクトル（１）〜（３）が設定されていたところ、ベクトルｉが追加されると共にベクトル（３）が除外された。この結果、ベクトルｊの近傍ベクトルＮ（Ｇ，ｊ）がＮ（Ｇ，ｊ）＊に更新された。このような処理を繰り返すことで、ベクトルｘ＝１〜ｎの全てについて、近傍ベクトルＮ（Ｇ，ｘ）が設定される。これによって、グラフインデックス４４が作成される。
【００３０】
（新規作成・追加手法２）
図７および図８は、新規作成・追加処理部２６Ａによる処理の流れの他の一例を示すフローチャートである。本フローチャートの処理の前提として、既存ベクトルデータ４２において１からｎまでのベクトルＩＤが付与され、グラフインデックス４４が作成されたｎ個の多次元ベクトルデータが既に存在し、新たにｍ−ｎ個の多次元ベクトルデータが追加されたものとする（ｍ＞ｎ）。フローチャートの中で使用する引数ｙは、（ｎ＋１）からｍまで順に選択されて処理が実行される。
【００３１】
新規作成・追加処理部２６Ａは、Ｋ近傍検索処理を実行する（Ｓ２００）。Ｋ近傍検索処理については図８を用いて説明する。図８に示すように、新規作成・追加処理部２６Ａは、超球の半径ｒを∞（無限大）に設定し（Ｓ３００）、既存のベクトル集合からベクトル集合Ｓを抽出する（Ｓ３０２）。超球とは、検索範囲（その範囲に入っていれば入力ベクトルｙの近傍ベクトルＮ（Ｇ，ｙ）の要素に含められる可能性がある範囲）を示す仮想的な球である。なお、ステップＳ３０２で抽出されたベクトル集合Ｓに含まれるベクトルは、同時にベクトル集合Ｒの初期集合にも含められてもよい。
【００３２】
次に、新規作成・追加処理部２６Ａは、ベクトル集合Ｓに含まれるベクトルの中で、ベクトルｙとの距離が最も短いベクトルを抽出し、ベクトルｓとする（Ｓ３０４）。次に、新規作成・追加処理部２６Ａは、ベクトルｓをベクトル集合Ｓから除外する（Ｓ３０６）。図９は、ベクトル集合Ｓから、ベクトルｙとの距離が最も短いベクトルが抽出され、ベクトル集合Ｓから除外される様子を概念的に示す図である。
【００３３】
次に、新規作成・追加処理部２６Ａは、ベクトルｓとベクトルｙとの距離ｄ（ｓ，ｙ）がｒ（１＋ε）を超えるか否かを判定する（Ｓ３０８）。ここで、εは拡張要素であり、ｒ（１＋ε）は、探索範囲（その範囲にあるベクトルの近傍ベクトルについて、入力ベクトルｙの近傍ベクトルＮ（Ｇ，ｙ）の要素に含められるか否かを判定する範囲）の半径を示す値である。ベクトルｓとベクトルｙとの距離ｄ（ｓ，ｙ）がｒ（１＋ε）を超える場合、新規作成・追加処理部２６Ａは、ベクトル集合Ｒをベクトルｙの近傍ベクトルＮ（Ｇ，ｙ）として出力し、図８のフローチャートの処理を終了する。
【００３４】
ベクトルｓとベクトルｙとの距離ｄ（ｓ，ｙ）がｒ（１＋ε）を超えない場合、新規作成・追加処理部２６Ａは、ベクトルｓの近傍ベクトルＮ（Ｇ，ｓ）の要素であるベクトルの中からベクトル集合Ｃに含まれないベクトルを一つ選択し、選択したベクトルｕを、ベクトル集合Ｃに格納する（Ｓ３１２）。図１０は、ベクトルｓの近傍ベクトルＮ（Ｇ，ｓ）を概念的に示す図である。ベクトル集合Ｃは、重複検索を回避するために便宜上設けられるものであり、図８のフローチャートが開始されるときにリセットされて空集合とされる。
【００３５】
次に、新規作成・追加処理部２６Ａは、ベクトルｕとベクトルｙとの距離ｄ（ｕ，ｙ）がｒ（１＋ε）以下であるか否かを判定する（Ｓ３１４）。ベクトルｕとベクトルｙとの距離ｄ（ｕ，ｙ）がｒ（１＋ε）以下である場合、新規作成・追加処理部２６Ａは、ベクトルｕをベクトル集合Ｓに追加する（Ｓ３１６）。
【００３６】
次に、新規作成・追加処理部２６Ａは、ベクトルｕとベクトルｙとの距離ｄ（ｕ，ｙ）がｒ以下であるか否かを判定する（Ｓ３１８）。ベクトルｕとベクトルｙとの距離ｄ（ｕ，ｙ）がｒを超える場合、Ｓ３３０に処理が進められる。
【００３７】
ベクトルｕとベクトルｙとの距離ｄ（ｕ，ｙ）がｒ以下である場合、新規作成・追加処理部２６Ａは、ベクトルｕをベクトル集合Ｒに追加する（Ｓ３２０）。図１１は、ベクトルがベクトル集合Ｓまたはベクトル集合Ｒに追加される様子を概念的に示す図である。図示の例では、ベクトルｙとの距離がｒ以下であるベクトル（４）および（５）がベクトル集合Ｒに追加され、ベクトルｙとの距離がｒを超えｒ（１＋ε）以下であるベクトル（６）がベクトル集合Ｓに追加される。
【００３８】
そして、新規作成・追加処理部２６Ａは、ベクトル集合Ｒに含まれるベクトル数がｋｓを超えるか否かを判定する（Ｓ３２２）。所定数ｋｓは、任意に定められる自然数である。例えば、ｋｓ＝３である。
【００３９】
ベクトル集合Ｒに含まれるベクトル数がｋｓを超える場合、新規作成・追加処理部２６Ａは、ベクトル集合Ｒに含まれるベクトルの中でベクトルｙとの距離が最も長いベクトルを、ベクトル集合Ｒから除外する（Ｓ３２４）。
【００４０】
次に、新規作成・追加処理部２６Ａは、ベクトル集合Ｒに含まれるベクトル数がｋｓと一致するか否かを判定する（Ｓ３２６）。ベクトル集合Ｒに含まれるベクトル数がｋｓと一致する場合、新規作成・追加処理部２６Ａは、ベクトル集合Ｒに含まれるベクトルの中でベクトルｙとの距離が最も長いベクトルと、ベクトルｙとの距離を、新たなｒに設定する（Ｓ３２８）。
【００４１】
図１２は、ベクトル集合Ｒに含まれるベクトルから、ベクトルｙとの距離が最も長いベクトルが除外され、ｒが再設定される様子を概念的に示す図である。図１２の例では、図１１でＲに追加されたベクトルｓ、（４）、および（５）の他、前回以前のループ処理の結果、ベクトル（７）がＲに含まれていたものとする。この場合、ベクトルｙとの距離が最も長いベクトル（５）がＲから除外され、残ったベクトルの中でベクトルｙとの距離が最も長いベクトル（７）とベクトルｙとの距離が、ｒに設定される。
【００４２】
そして、新規作成・追加処理部２６Ａは、ベクトルｓの近傍ベクトルＮ（Ｇ，ｓ）の要素であるベクトルから全てのベクトルを選択してベクトル集合Ｃに格納し終えたか否かを判定する（Ｓ３３０）。ベクトルｓの近傍ベクトルＮ（Ｇ，ｓ）の要素であるベクトルから全てのベクトルを選択してベクトル集合Ｃに格納し終えていない場合、Ｓ３１２に処理が戻される。
【００４３】
ベクトルｓの近傍ベクトルＮ（Ｇ，ｓ）の要素であるベクトルから全てのベクトルを選択してベクトル集合Ｃに格納し終えた場合、新規作成・追加処理部２６Ａは、ベクトル集合Ｓが空集合であるか否かを判定する（Ｓ３３０）。ベクトル集合Ｓが空集合でない場合、Ｓ３０４に処理が戻され、ベクトル集合Ｓが空集合である場合、新規作成・追加処理部２６Ａは、ベクトル集合Ｒをベクトルｙの近傍ベクトルＮ（Ｇ，ｙ）として出力し、図８のフローチャートの処理を終了する（Ｓ３３２）。
【００４４】
図８に示す処理を行うことで、全てのベクトルを網羅的に処理する場合に比して、メモリ領域の消費を抑制しつつ、高速処理を実現することができる。すなわち、図８に示す処理は、主としてグラフインデックス４４により規定されるエッジを辿ることで進行するため、既存ベクトルデータ４２を網羅的に検索するよりも処理工数が少なくて済む。また、既存のベクトル群に必要なメモリ領域の他、シードとなるベクトル集合Ｓ、重複検索を回避するためのベクトル集合Ｃ、および、最大のベクトル数がｋｓに制限されるベクトル集合Ｒに関するデータを管理すればよいため、メモリ領域の消費を抑制することができる。更に、入力データであるベクトルｙから十分に遠いベクトルは、処理によってベクトル集合Ｓに追加される可能性が低く、仮にＳ３０２でベクトル集合Ｓに含められたとしても、探索順位が低いことにより処理対象とされない可能性が高くなるため、処理工数を更に低減することができる。
【００４５】
図７に戻る。ベクトルｙの近傍ベクトルＮ（Ｇ，ｙ）が求められると、新規作成・追加処理部２６Ａは、ベクトルｙの近傍ベクトルＮ（Ｇ，ｙ）の要素であるベクトルを一つ選択し、ベクトルｚとする（Ｓ２０２）。次に、新規作成・追加処理部２６Ａは、ベクトルｚの近傍ベクトルＮ（Ｇ，ｚ）の要素としてベクトルｙを追加する（Ｓ２０４）。
【００４６】
次に、新規作成・追加処理部２６Ａは、ベクトルｚの近傍ベクトルＮ（Ｇ，ｚ）の要素であるベクトルの数がｋｐを超えるか否かを判定する（Ｓ２０６）。ベクトルｚの近傍ベクトルＮ（Ｇ，ｚ）の要素であるベクトルの数が所定数ｋｐを超える場合、新規作成・追加処理部２６Ａは、ベクトルｚの近傍ベクトルＮ（Ｇ，ｚ）から、ベクトルｚとの距離が最も長い（ベクトルｊから最も遠い）ベクトルを除外する（Ｓ２０８）。
【００４７】
そして、新規作成・追加処理部２６Ａは、ベクトルｙの近傍ベクトルＮ（Ｇ，ｙ）の要素であるベクトルｚを全て選択したか否かを判定する（Ｓ２１０）。ベクトルｙの近傍ベクトルＮ（Ｇ，ｙ）の要素であるベクトルｚを全て選択していない場合はＳ２０２に処理が戻され、ベクトルｙの近傍ベクトルＮ（Ｇ，ｙ）の要素であるベクトルｚを全て選択した場合はＳ２００〜Ｓ２０８のループ処理の１回分が終了する。これによって、グラフインデックス４４が作成される。
【００４８】
ここで、（新規作成・追加手法１）と（新規作成・追加手法２）の処理は、組み合わせて使用されてもよい。すなわち、最初にベクトル群が与えられてグラフインデックス４４を作成する際に（新規作成・追加手法１）の処理を行い、その後、ベクトル群が追加される際に（新規作成・追加手法２）の処理を行ってもよい。その場合、ｋｐとｋｓは同じでもよいし、異なってもよい。また、ベクトル群が追加される度に（新規作成・追加手法１）の処理を行うものとしてもよい。
【００４９】
（削除処理）
削除処理部２６Ｂは、新規作成・追加処理部２６Ａによって作成されたグラフインデックス４４から、所定条件を満たすエッジを抽出し、抽出したエッジ（被抽出エッジ）と同じベクトルを異なる経路で接続する代替パスであって、エッジ数が所定数ｐ以下の代替パスが存在する場合に、抽出したエッジを削除する処理を行う。所定条件とは、例えば、以下に説明する図１３のＳ４０２の判定条件である。
【００５０】
図１３は、削除処理部２６Ｂにより実行される処理の流れの一例を示すフローチャートである。本フローチャートの処理の前提として、既存ベクトルデータ４２に含まれる多次元ベクトルデータには、１からｎまでのベクトルＩＤが付与されているものとする（図７および図８のフローチャートが実行された後であれば、１〜ｍまでのベクトルＩＤが付与されてもよい）。フローチャートの中で使用する引数ｅは、１からｎまで順に選択されて処理が実行される。
【００５１】
まず、削除処理部２６Ｂは、ベクトルｅの近傍ベクトルＮ（Ｇ，ｅ）の要素であるベクトルの中からベクトルを一つ選択し、ベクトルｆとする（Ｓ４００）。次に、削除処理部２６Ｂは、Ｒａｎｋ｛Ｎ（Ｇ，ｅ），ｆ｝が所定数ｋｒを超えるか否かを判定する（Ｓ４０２）。Ｒａｎｋ｛Ｎ（Ｇ，ｅ），ｆ｝とは、ベクトルｆが、ベクトルｅの近傍ベクトルＮ（Ｇ，ｅ）の要素であるベクトルの中で、何番目にベクトルｅに近いかを示す指標値である。また、所定数ｋｒは、例えば、所定数ｋｐ未満の値である。従って、「Ｒａｎｋ｛Ｎ（Ｇ，ｅ），ｆ｝が所定数ｋｒを超えるか否かを判定する」処理は、ベクトルｅの近傍ベクトルＮ（Ｇ，ｅ）の要素であるベクトルから、ベクトルｅとの距離が他のベクトルとの比較において長いベクトルを抽出する処理である。Ｒａｎｋ｛Ｎ（Ｇ，ｅ），ｆ｝が所定数ｋｒを超えない場合、Ｓ４０４〜Ｓ４１０の処理がスキップされる。
【００５２】
Ｒａｎｋ｛Ｎ（Ｇ，ｅ），ｆ｝が所定数ｋｒを超える場合、削除処理部２６Ｂは、代替パスの探索開始ベクトルを選択し（Ｓ４０４）、探索開始ベクトルから先のパスを探索する（Ｓ４０６）。
【００５３】
次に、削除処理部２６Ｂは、エッジ数がｐ以下の代替パスが存在するか否かを判定する（Ｓ４０８）。エッジ数がｐ以下の代替パスが存在する場合、削除処理部２６Ｂは、ベクトルｅとベクトルｆを接続するエッジ（ｅ，ｆ）をグラフインデックス４４から削除する（Ｓ４１０）。
【００５４】
図１４は、エッジ数がｐ以下の代替パスが削除される様子を概念的に示す図である。図示の例では、ベクトルｅとｆ（１）を接続するエッジ（ｅ，ｆ（１））、および、ベクトルｅとｆ（２）を接続するエッジ（ｅ，ｆ（２））には、共に代替パスが存在する。エッジ（ｅ，ｆ（１））の代替パスのエッジ数は３であるのに対し、エッジ（ｅ，ｆ（２））の代替パスのエッジ数は４である。ここで、ｐ＝３とすると、エッジ（ｅ，ｆ（１））は削除可能、エッジ（ｅ，ｆ（２））は削除不可として扱われる。
【００５５】
次に、削除処理部２６Ｂは、ベクトルｅの近傍ベクトルＮ（Ｇ，ｅ）の要素であるベクトルから全てのベクトルを選択したか否かを判定する（Ｓ４１２）。ベクトルｅの近傍ベクトルＮ（Ｇ，ｅ）の要素であるベクトルから全てのベクトルを選択していない場合、Ｓ４００に処理が戻される。一方、ベクトルｅの近傍ベクトルＮ（Ｇ，ｅ）の要素であるベクトルから全てのベクトルを選択した場合、図１３のフローチャートの処理が終了する。
【００５６】
係る処理によって、探索性能を考慮したエッジの削減をすることができる。この種の技術では、ベクトルにエッジが大量に付与されていると、かえって検索性能が低下してしまう。従って、比較的距離の長いエッジを優先的に削除することで、局所的な検索回数を低減し、検索処理を効率化することができる。ところが、距離の長いエッジを無制限に削除すると、迂回する経路が長くなることで、むしろ検索処理が非効率になってしまう場合がある。また、迂回する経路が存在しなくなり、検索できないベクトルが生じる場合もある。
【００５７】
係る事情に鑑み、本実施形態の検索データ管理装置１では、そのエッジを削除した後に、同じベクトルに対して比較的少ないエッジ数で到達することができる場合にのみ、エッジを削除することとした。これによって、探索性能を考慮したエッジの削減をすることができ、エッジの数を適度に維持することができる。
【００５８】
ここで、図１３のフローチャートにおけるＳ４０４の処理において、探索開始ベクトルを選択する手法としては、以下のような手法が挙げられる。
【００５９】
（探索対象ノード選択手法１）
削除処理部２６Ｂは、ベクトルｅにエッジを介して接続されている全てのベクトルを、探索開始ベクトルとして網羅的に選択してもよい。これによって、エッジ数がｐ以下の代替パスを確実に発見することができる。
【００６０】
（探索対象ノード選択手法２）
削除処理部２６Ｂは、ベクトルｅにエッジを介して接続されているベクトルのうち、ベクトルｆに最も近いベクトルを探索開始ベクトルとして、代替パスの探索を開始してもよい。これによって、代替パスの探索処理の負荷を最も軽減することができる。
【００６１】
（探索対象ノード選択手法３）
削除処理部２６Ｂは、ベクトルｅにエッジを介して接続されているベクトルのうち、そのベクトルとベクトルｆとの距離が、ベクトルｅとベクトルｆとの距離よりも短いベクトルを探索開始ベクトルとして、代替パスの探索を開始してもよい。これによって、代替パスの探索処理の負荷を軽減すると共に、（探索対象ノード選択手法２）よりも確実にエッジ数がｐ以下の代替パスを確実に発見することができる。
【００６２】
なお、いずれの手法においても、ベクトルｅに付与されているエッジの中で、短いものから順にランクｋｒまでのエッジのみを使用してグラフの探索を行う（短いものから順にランクｋｒまでのエッジのみを探索開始ベクトルとする）。なぜなら、ランクｋｒよりも大きいエッジを含む代替パスが見つかったとしても、それ以降の削除処理により代替パス上の当該エッジが削除されてしまう可能性があるからである。
【００６３】
図１５は、探索開始ベクトルを選択する手法を例示した図である。本図において、（探索対象ノード選択手法２）を採用する場合、ベクトル（８）のみが探索開始ベクトルとして選択される。一方、（探索対象ノード選択手法３）を採用する場合、ベクトル（８）、（９）、（１０）が探索開始ベクトルとして選択される。
【００６４】
いずれの場合にも、エッジ数がｐに至った時点で、その経路の探索を終了することにより、処理負荷の増大を抑制することができる。削除処理部２６Ｂは、探索開始ベクトルを起点として、その先のベクトルを網羅的に探索し、エッジ数がｐに至るまでにベクトルｆに到達できなかった場合、その探索開始ベクトルを起点としてエッジ数がｐ以下の代替パスを発見できなかったと判断し、その探索開始ベクトルからの探索を終了する。
【００６５】
以上説明した実施形態の検索データ管理装置１によれば、検索対象の多次元ベクトルデータがエッジにより接続されたグラフ構造のデータ（４２、４４）を記憶する記憶部（４０）と、記憶部に記憶されたグラフ構造のデータから所定条件を満たす被抽出エッジを抽出し（図１３のＳ４０２；エッジ（ｅ，ｆ））、被抽出エッジと同じ多次元ベクトルデータ同士（ｅ、ｆ）を、被抽出エッジとは異なる経路で接続すると共に、エッジ数が所定数（ｐ）以下である代替パスが存在するか否かを判定し、存在すると判定した場合に、被抽出エッジをグラフ構造のデータから削除する削除処理部（２６Ｂ）と、を備えることにより、探索性能を考慮したエッジの削減をすることができる。
【００６６】
以上、本発明を実施するための形態について実施形態を用いて説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【符号の説明】
【００６７】
１…検索データ管理装置、１０…ネットワークインターフェース、２０…制御部、２２…ベクトルデータ生成部、２４…インデックス検索部、２６…グラフインデックス編集部、２６Ａ…新規作成・追加処理部、２６Ｂ…削除処理部、３０…入出力装置、４０…データサーバ、４２…既存ベクトルデータ、４４…グラフインデックス
【図１】
0006333306.tif 000002
【図２】
0006333306.tif 000003
【図３】
0006333306.tif 000004
【図４】
0006333306.tif 000005
【図５】
0006333306.tif 000006
【図６】
0006333306.tif 000007
【図７】
0006333306.tif 000008
【図８】
0006333306.tif 000009
【図９】
0006333306.tif 000010
【図１０】
0006333306.tif 000011
【図１１】
0006333306.tif 000012
【図１２】
0006333306.tif 000013
【図１３】
0006333306.tif 000014
【図１４】
0006333306.tif 000015
【図１５】
0006333306.tif 000016