以下に、本願に係る生成装置、生成方法、及び生成プログラムを実施するための形態(以下、「実施形態」と呼ぶ)について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る生成装置、生成方法、及び生成プログラムが限定されるものではない。また、以下の各実施形態において同一の部位には同一の符号を付し、重複する説明は省略される。
〔1.生成処理の概念〕
まず、図1を用いて、生成装置100が実行する生成処理の概念について説明する。図1は、実施形態に係る生成装置が発揮する作用効果の一例を説明するための図である。例えば、生成装置100は、サーバ装置やクラウドシステム等、単数または複数の生成装置により実現され、移動通信網や無線LAN(Local Area Network)等のネットワークN(図2参照)を介して、検索を行うユーザ等が使用する端末装置(図示省略)と通信可能な情報処理装置である。
例えば、生成装置100は、端末装置からクエリ情報(以下、単に「クエリ」ともいう)を受信すると、クエリに類似する対象(ベクトル情報等)を検索し、検索結果を端末装置に提供する。また、例えば、生成装置100が端末装置に提供するデータは、画像情報等のデータ自体であってもよいし、URL(Uniform Resource Locator)等の対応するデータを参照するための情報であってもよい。また、クエリや検索対象のデータは、画像、音声、テキストデータなど、如何なる種類のデータであってもよい。以下では、生成装置100が画像を検索するものとして説明する。
また、生成装置100は、図1に示すように、グラフ情報を生成する。ここでいう、有向エッジとは、一方向にしかデータを辿れないエッジを意味する。以下では、エッジにより辿る元、すなわち始点となるノードを参照元とし、エッジにより辿る先、すなわち終点となるノードを参照先とする。例えば、所定のノード「A」から所定のノード「B」に連結される有向エッジとは、参照元をノード「A」とし、参照先をノード「B」とするエッジであることを示す。ここでいう、各ノードは、各オブジェクトに対応する。例えば、画像から抽出された複数の局所特徴量のそれぞれがオブジェクトであってもよい。また、例えば、オブジェクト間の距離が定義された種々のデータがオブジェクトであってもよい。
生成装置100は、数百万〜数億単位の画像情報に対応するノードを対象に処理を行うが、図面においてはその一部のみを図示する。図1の例では、説明を簡単にするために、9個のノードを図示して処理の概要を説明する。例えば、生成装置100は、図1中のノードN1〜N9に示すような複数のノードを含むノード群を取得し、各ノードを有向エッジで連結したグラフ情報GR11を生成する。
また、このように「ノードN*(*は任意の数値)」と記載した場合、そのノードはノードID「N*」により識別されるノードであることを示す。例えば、「ノードN1」と記載した場合、そのノードはノードID「N1」により識別されるノードである。
なお、図1中の空間情報VS1−1〜VS1−6は、ユークリッド空間であってもよい。また、図1に示す空間情報VS1−1〜VS1−6は、各ベクトル間の距離等の説明のための概念的な図である。多次元空間となる。なお、例えば、図1に示す空間情報VS1−1〜VS1−6は、平面上に図示するため2次元の態様にて図示されるが、例えば100次元や1000次元等の多次元空間であるものとする。
また、図1に示す空間情報VS1−1〜VS1−6は、グラフ情報の生成過程を模式的に示す図であり、空間情報VS1−1〜VS1−6に示す空間は、同一の空間である。また、以下では、空間情報VS1−1〜VS1−6について、特に区別なく説明する場合には、空間情報VS1と記載する。
また、図1に示す例においては、空間情報VS1−1及び空間情報VS1−6以外の空間情報VS1においては、「ノードN*(*は任意の数値)」の図示を省略し、取得した各ノードを「○」内に「ノードN*(*は任意の数値)」の「*」の値を付すことにより表現する。例えば、空間情報VS1−2中の左上の「○」であって、内部に「2」が付された「○」は、ノードID「N2」により識別されるノードに対応する。例えば、図1に示す例において、各ノードに対応するベクトルデータは、N次元の実数値ベクトルであってもよい。
本実施形態においては、空間情報VS1における各ノードの距離を対応する各オブジェクト間の類似度とする。ここで、図1に示す例においては、空間情報VS1における各ノード間の距離が小さいオブジェクト同士の類似度が高く、空間情報VS1における各ノード間の距離が大きいオブジェクト同士の類似度が低い。例えば、図1中の空間情報VS1において、ノードID「N6」により識別されるノードと、ノードID「N7」により識別されるノードとは近接している、すなわち距離が小さい。そのため、ノードID「N6」により識別されるノードに対応するオブジェクトと、ノードID「N7」により識別されるノードに対応するオブジェクトとは類似度が高いことを示す。
また、例えば、図1中の空間情報VS1において、ノードID「N6」により識別されるノードと、ノードID「N2」により識別されるノードとは遠隔にある、すなわち距離が大きい。そのため、ノードID「N6」により識別されるノードに対応するオブジェクトと、ノードID「N2」により識別されるノードに対応するオブジェクトとは類似度が低いことを示す。
また、図1の例では、生成装置100は、後述する生成処理により、ノードを有向エッジで連結することにより、グラフ情報GR11を生成する。例えば、グラフ情報GR11を用いた検索においては、検索時はグラフ構造型インデックスと同様の処理を行うが、開始位置(起点)は本インデックス(グラフ情報GR11)のルートからスタートする。例えば、生成装置100が生成したグラフ情報GR11を用いて検索を行う場合、ルートノードであるノードN1を起点として検索を行う。例えば、検索時においては、ルートノードであるノードN1から有向エッジを辿ることにより、ノードN2〜N9等を順次検索してもよい。
〔2.実施形態に係る生成装置が実行する生成処理について〕
例えば、生成装置100は、ノード群のうち、所定のノードを検索時に最初の起点として用いるルートノードとして選択し、ノード群のうち、ルートノード、及びルートノードから有向エッジを辿ることにより到達可能なノードを含む処理済ノード群以外のノードを対象ノードとして選択し、処理済ノード群のうち、所定数のノードからの有向エッジを対象ノードに連結する連結処理により、グラフ情報を生成する情報処理装置である。例えば、生成装置100は、上述した連結処理を、ノード群において他のノードに連結されていない未処理ノードがなくなるまで繰り返すことにより、グラフ情報を生成する。以下、図を用いて、生成処理を実現する生成装置100の機能構成及び作用効果の一例を説明する。
〔2−1.機能構成の一例〕
まず、図2を用いて、実施形態に係る生成装置100の構成について説明する。図2は、実施形態に係る情報処理装置が有する機能構成の一例を説明する図である。図2は、実施形態に係る生成装置が有する機能構成の一例を説明する図である。図2に示すように、生成装置100は、通信部110と、記憶部120と、制御部130とを有する。なお、生成装置100は、生成装置100の管理者等から各種操作を受け付ける入力部(例えば、キーボードやマウス等)や、各種情報を表示するための表示部(例えば、液晶ディスプレイ等)を有してもよい。通信部110は、例えば、NIC(Network Interface Card)等によって実現される。そして、通信部110は、ネットワークNと有線または無線で接続され、端末装置との間で、検索クエリや検索結果等の種々の情報の送受信を行う。
記憶部120は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。実施形態に係る記憶部120は、図2に示すように、オブジェクト情報記憶部121と、グラフ情報記憶部122とを有する。以下、図3および図4を用いて、オブジェクト情報記憶部121、およびグラフ情報記憶部122に登録される情報の一例を説明する。
オブジェクト情報記憶部121には、検索対象(オブジェクト)に関する情報が登録されている。例えば、オブジェクト情報記憶部121には、オブジェクトを識別するための識別情報や、オブジェクトに対応するベクトルデータ(ベクトル情報)が登録されている。
例えば、図3は、実施形態に係るオブジェクト情報記憶部の一例を示す図である。図3に示すように、オブジェクト情報記憶部121には、「オブジェクトID」、および「ベクトル情報」といった項目を有する情報が登録される。「オブジェクトID」とは、オブジェクトを識別するための識別情報である。また、「ベクトル情報」とは、オブジェクトIDにより識別されるオブジェクトに対応するベクトル情報である。すなわち、図3の例では、オブジェクトを識別するオブジェクトIDに対して、オブジェクトに対応するベクトルデータ(ベクトル情報)が対応付けられて登録されている。
グラフ情報記憶部122は、後述する生成処理により生成されるグラフ情報が登録されている。例えば、グラフ情報記憶部122には、複数のオブジェクトを接続するエッジに関する情報であり、参照元のオブジェクトと参照先のオブジェクトとを接続する有向エッジに関する情報が登録されている。
例えば、図4は、実施形態に係るグラフ情報記憶部の一例を示す図である。図4に示すように、グラフ情報記憶部122には、「ノードID」、「オブジェクトID」、および「有向エッジ情報」といった項目を有する情報が登録される。「ノードID」とは、グラフ情報における各ノード(対象)を識別するための識別情報である。また、「オブジェクトID」とは、オブジェクトを識別するための識別情報である。また、「有向エッジ情報」には、「エッジID」や「参照先」といった情報が含まれる。「エッジID」とは、ノード間を連結するエッジを識別するための識別情報である。「参照先」は、エッジにより連結された参照先(ノード)を示す情報である。すなわち、図4の例では、ノードを識別するノードIDに対して、そのノードに対応するオブジェクト(対象)を識別する情報やそのノードからの有向エッジが連結される参照先(ノード)が対応付けられて登録されている。
例えば、図4の例では、ノードID「N1」により識別されるノードは、オブジェクトID「OB1」により識別されるオブジェクト(対象)に対応することを示す。また、ノードID「N1」により識別されるノードからは、エッジID「E11」により識別されるエッジが、ノードID「N2」により識別されるノードに連結されることを示す。すなわち、図4の例では、ノードID「N1」により識別されるノードからはノードID「N2」により識別されるノードに辿ることができることを示す。
図2に戻り、説明を続ける。制御部130は、例えば、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等によって、生成装置100内部の記憶装置に記憶されている各種プログラムが、RAM等の記憶領域を作業領域として実行されることにより実現される。図2に示す例では、制御部130は、取得部131と、選択部132と、生成部133と、提供部134(以下、総称して各処理部131〜134と記載する場合がある。)を有する。
なお、制御部130が有する各処理部131〜134の接続関係は、図2に示した接続関係に限られず、他の接続関係であってもよい。また、各処理部131〜134は、以下に説明するような生成処理の機能・作用(例えば図1)を実現・実行するものであるが、これらは説明のために整理した機能単位であり、実際のハードウェア要素やソフトウェアモジュールとの一致は問わない。すなわち、以下の生成処理の機能・作用を実現・実行することができるのであれば、生成装置100は、任意の機能単位で案内処理を実現・実行して良い。
〔2−2.生成処理における作用効果の一例〕
以下、図5に示すフローチャートを用いて、各処理部131〜134が実行・実現する生成処理の内容について説明する。図5は、実施形態に係る生成処理の一例を示すフローチャートである。
まず、取得部131は、ノード群を取得する(ステップS101)。例えば、生成装置100は、生成処理の対象となるノード群を外部の情報処理装置から取得したり、記憶部120から取得したりする。例えば、生成装置100は、オブジェクト情報記憶部121に記憶された各オブジェクトに対応するノード群を取得する。図1の例では、生成装置100は、ノードN1〜N9に示すようなノード群を取得する。
そして、選択部132は、ルートノードを選択する(ステップS102)。ここでいう、ルートノードとは、検索時に最初の起点として用いるノードを意味するものとする。なお、生成装置100は、種々の基準を適宜用いてルートノードを選択してもよい。例えば、生成装置100は、ノード群の平均に近いノードをルートノードとして選択してもよい。例えば、生成装置100は、空間情報VS1の中央部に位置するノードをルートノードとして選択してもよい。例えば、生成装置100は、ノード群を所定のクラスタリング手法によりクラスタリングし、最も要素(ノード)数の多いクラスタからルートノードを選択してもよい。例えば、生成装置100は、最も要素(ノード)数の多いクラスタのうち、平均に近いノードをルートノードとして選択してもよい。
図1の例では、生成装置100は、ルートノードをランダムに選択するものとする。例えば、生成装置100は、図1中ステップS11に示すように、ノードN1をルートノードとして選択する。なお、図1の例では、ノードN1にハッチングを付して、他のノードN2〜N9と異なる態様で図示することにより、ノードN1がルートノードであることを示す。
そして、生成部133は、未処理ノードから対象ノードを選択する(ステップS103)。ここでいう、未処理ノードとは、ノード群のうち、ルートノード、及びルートノードから有向エッジを辿ることにより到達可能なノードを含む処理済ノード群以外のノードを意味する。図1の例では、ノードN1をルートノードに選択後においては、ノードN2〜N9のノードが未処理ノードとなる。また、ここでいう、対象ノードとは、有向エッジを連結する処理を行う対象となるノードを意味する。また、上述のように、処理済ノード群は、ルートノード、及びルートノードから有向エッジを辿ることにより到達可能なノードを含むものとする。
図1の例では、生成装置100は、対象ノードをランダムに選択するものとする。例えば、生成装置100は、図1中ステップS12に示すように、ノードN2を対象ノードとして選択する。なお、生成装置100は、対象ノードをランダムに限らず、種々の基準に基づいて選択してもよい。例えば、生成装置100は、ルートノードに近接しているノードを対象ノードとして選択してもよい。この場合、生成装置100により生成されるグラフ情報を用いた検索では、検索の網羅性が向上するため、高精度な検索が可能となる。例えば、生成装置100は、ルートノードから遠隔にあるノードを対象ノードとして選択してもよい。この場合、生成装置100により生成されるグラフ情報を用いた検索では、1つのエッジを辿ることにより空間内においてより遠方へ移るため、例えば、1つのエッジを辿ることによる空間内の移動距離が長くすることができる等により、検索処理の高速化が期待できる。また、生成装置100は、ルートノードではなく、前回登録ノードに対して最も近いノード、及び、前回登録ノードに対して最も遠いノード、を選択して登録しても良い。この場合、それぞれ上記と同様の効果が期待できる。例えば、生成装置100は、ルートノードではなく、前回処理対象としたノードに対して最も近いノード、または、前回処理対象としたノードに対して最も遠いノードを、対象ノードとして選択してもよい。例えば、生成装置100は、処理済ノード群以外のノードのうち、一の連結処理の直前の連結処理における対象ノードに対して最も近いノード、または、一の連結処理の直前の連結処理における対象ノードに対して最も遠いノードを、一の連結処理における対象ノードとして選択してもよい。
そして、生成部133は、処理済ノード群のうち、対象ノードとの間の距離が近い方から所定数のノードからの有向エッジを対象ノードに連結する(ステップS104)。このように、生成部133は、処理済ノード群のうち、対象ノードからの距離に応じて選択される所定数のノードからの有向エッジを対象ノードに連結する。
図1の例では、生成装置100は、所定数を「2」とし、処理済ノード群のうち、対象ノードとの間の距離が近い方から2つのノードからの有向エッジを対象ノードに連結する場合を示す。なお、所定数「2」は一例であり、ノード群に含まれるノード数等に応じて、種々の値(例えば、5や10等)であってもよい。例えば、生成装置100は、次元数の多いデータを扱う場合には、所定数を「100以上」としてもよい。これにより、検索性能が向上させることが期待できる場合がある。
ここで、図1中の空間情報VS1−2に示すように、ルートノード選択後においては処理済ノード群にはルートノードであるノードN1のみが含まれる。この場合、生成装置100は、図1中ステップS13に示すように、ノードN1からの有向エッジであるエッジE11をノードN2に連結する。
図1中のエッジE11等に示す各ノード間を連結する矢印線は、連結されるノードが参照元と参照先との関係があることを示す。具体的には、矢印線の始点側のノードが参照元であり、矢先側のノードが参照先であることを示す。例えば、エッジE11は、ノードN1が参照元であり、ノードN2が参照先である有向エッジであることを示す。
このように、生成装置100は、処理済ノード群のうち、所定数のノードからの有向エッジを対象ノードに連結する連結処理を行う。なお、生成装置100は、処理済ノード群に含まれるノード数が、所定数に達しない場合、処理済ノード群の全ノードからの有向エッジを対象ノードに連結してもよい。
また、このように「エッジE*(*は任意の数値)」と記載した場合、そのエッジはエッジID「E*」により識別されるエッジであることを示す。例えば、「エッジE11」と記載した場合、そのエッジはエッジID「E11」により識別されるエッジである。上述のように、ノードN1からのエッジE11をノードN2に連結することにより、検索時において起点となるノードN1からノードN2に辿ることが可能となる。また、ノードN2は未処理ノード群ではなくなり、処理済ノード群に含まれる。
そして、生成部133は、未処理ノードが有る場合(ステップS105:Yes)、ステップS103に戻って処理を繰り返す。
例えば、ノードN2を対象ノードとして連結処理後において、生成装置100は、図1中ステップS14に示すように、ノードN3を対象ノードとして選択する。ここで、図1中の空間情報VS1−3に示すように、ノードN2の連結処理後においては処理済ノード群にはノードN1及びノードN2の2つが含まれる。この場合、生成装置100は、図1中ステップS15に示すように、ノードN1からの有向エッジであるエッジE12をノードN3に連結し、ノードN2からの有向エッジであるエッジE21をノードN3に連結する。このように、生成装置100は、ノードN3を対象ノードとして連結処理を行う。
そして、生成部133は、未処理ノードが有る場合(ステップS105:Yes)、ステップS103に戻って処理を繰り返す。
例えば、ノードN3を対象ノードとして連結処理後において、生成装置100は、図1中ステップS16に示すように、ノードN4を対象ノードとして選択する。ここで、図1中の空間情報VS1−4に示すように、ノードN3の連結処理後においては処理済ノード群にはノードN1〜N3の3つが含まれる。この場合、生成装置100は、ノードN1〜N3のうち、ノードN4との間の距離が近い方から2つのノードからの有向エッジを対象ノードに連結する。図1の例では、空間情報VS1に示すように、ノードN4との間の距離は、ノードN1、N3が近く、ノードN2が遠い。そのため、生成装置100は、図1中ステップS17に示すように、ノードN1からの有向エッジであるエッジE13をノードN4に連結し、ノードN3からの有向エッジであるエッジE31をノードN4に連結する。このように、生成装置100は、ノードN4を対象ノードとして連結処理を行う。
なお、生成装置100は、生成途中におけるインデックス情報等のグラフ情報を用いて、対象ノードの近接検索を行うことにより、対象ノードに連結するノードを決定してもよい。例えば、生成装置100は、処理済ノード群のうち対象ノードに近接するノードを決定する際には、検索時と同様の近傍検索の処理を行うことにより、高速化してもよい。すなわち、生成装置100は、対象ノードをクエリとみなして、その対象ノードに近接するノードを検索することにより、対象ノードに連結するノードを決定してもよい。
例えば、生成装置100は、対象ノードに対して、処理済ノード群の中での近傍する上位k個(kは「2」等の任意の数)のノードを近傍検索し、k個の近傍のノードから対象ノードへ有向エッジ(リンク)を設定する。
そして、生成部133は、未処理ノードが有る場合(ステップS105:Yes)、ステップS103に戻って処理を繰り返す。
例えば、ノードN4を対象ノードとして連結処理後において、生成装置100は、図1中ステップS18に示すように、ノードN5を対象ノードとして選択する。ここで、図1中の空間情報VS1−5に示すように、ノードN4の連結処理後においては処理済ノード群にはノードN1〜N4の4つが含まれる。この場合、生成装置100は、ノードN1〜N4のうち、ノードN5との間の距離が近い方から2つのノードからの有向エッジを対象ノードに連結する。図1の例では、空間情報VS1に示すように、ノードN5との間の距離は、ノードN1、N2、N4、N3の順で近い。そのため、生成装置100は、図1中ステップS19に示すように、ノードN1からの有向エッジであるエッジE14をノードN5に連結し、ノードN2からの有向エッジであるエッジE22をノードN5に連結する。このように、生成装置100は、ノードN5を対象ノードとして連結処理を行う。
そして、生成部133は、未処理ノードが有る場合(ステップS105:Yes)、ステップS103に戻って処理を繰り返す。図1中ステップS20に示すように、生成装置100は、ノードN5を対象ノードとして連結処理後において、未処理ノードであるノードN6〜N9を対象ノードとして、順次連結処理を行う。例えば、図1中の空間情報VS1−6に示すように、生成装置100は、ノードN6、N7、N8、N9の順に対象ノードとして連結処理を行うことにより、グラフ情報GR11を生成する。
そして、生成部133は、未処理ノードが無い場合(ステップS105:No)、処理を終了する。
例えば、生成装置100は、以下のような処理行う。例えば、生成装置100は、登録するオブジェクトに対応するノード集合(以下、「集合S」ともいう)から任意のノードを選択してルートノードとし、集合Sから除外する。そして、生成装置100は、集合Sから任意のノードを選択肢し、集合Sから除外する。そして、生成装置100は、選択したノードに対して、ツリー上のノード(処理済ノード群)の中での近傍する上位k個のノードを近傍検索し、k個の検索されたノードから当該のノードへエッジ(リンク)を設定する。生成装置100は、上述した処理を、集合Sが空になるまで、繰り返す。なお、図1の例では、グラフ情報の生成までを示したが、生成装置100は、生成したグラフ情報を用いて種々のサービスを提供してもよい。例えば、提供部134は、生成部133により生成されたグラフ情報を外部の情報処理装置へ提供してもよい。例えば、提供部134は、グラフ情報GR11を所定の検索サービスを提供する情報処理装置へ提供してもよい。また、生成装置100が検索サービスを提供する場合、提供部134は、取得部131により端末装置から取得された検索クエリに対応する検索結果を、端末装置へ提供してもよい。
〔3.変形例〕
上述した実施形態に係る生成装置100は、上記実施形態以外にも種々の異なる形態にて実施されてよい。そこで、以下では、上記の生成装置100の他の実施形態について説明する。なお、以下では、実施形態と同様の点については適宜説明を省略する。
〔3−1.複数のルートノード〕
上述した例では、1つのノードをルートノードとして選択する場合を示したが、ルートノードの数が1つに限らず、複数であってもよい。例えば、生成装置100は、複数のルートノードとして、互いに遠いノードを選択しても良い。また、例えば、生成装置100は、所定のクラスタリングを行い、各クラスタの中心に最も近いノードをルートノードとしても良い。すなわち、生成装置100は、ノード群のうち、複数のノードをルートノードとして選択してもよい。この点について、図6を用いて説明する。図6は、複数のルートノードを含むグラフ情報の一例を示す図である。
図6中の空間情報VS1−6は、図1中の空間情報VS1−6に対応し、1つのノードN1をルートノードとして選択した場合を示す。一方、図6中の空間情報VS1−21は、ノードN1、及びノードN10の2つのノードをルートノードとして選択した場合を示す。すなわち、図6中の空間情報VS1−21は、ノードN10を含む点で、図6中の空間情報VS1−6と相違する。
このように、生成装置100は、複数のルートノードを選択してもよい。これにより、複数のルートノードが選択されることにより、各ノードにおけるエッジの連結関係が変更される。図6の示す例では、グラフ情報GR11がグラフ情報GR21に変更される。例えば、空間情報VS1−21においては、空間情報VS1−6中のノードN3からノードN4への有向エッジに変えて、ノードN10からノードN3への有向エッジが連結される。このように複数のルートノードを含むグラフ情報GR21を用いて検索を行う場合、複数の起点から並列して検索を行うことができるため、検索処理の高速化を図ることが可能となる。
〔3−2.複数のルートノード〕
また、図6の例では、複数のルートノードについて共通のグラフ情報GR21を生成する場合を示したが、各ルートノードについてグラフ情報を生成してもよい。すなわち、生成装置100は、各ルートノードを起点として検索可能な複数のグラフ情報を生成してもよい。この点について、図7を用いて説明する。図7は、複数のグラフ情報の生成の一例を示す図である。
図7中の空間情報VS1−31には、ノードN1〜N10が含まれる。すなわち、図7中の空間情報VS1−31は、ノードN10を含む点で、図1中の空間情報VS1−6と相違する。また、図7中の空間情報VS1−31は、ノードN1、及びノードN10の2つのノードをルートノードとして選択した場合を示す。
ここで、生成装置100は、各ルートノードを対象としてグラフ情報を生成する。図7の例では、生成装置100は、ルートノードであるノードN1、N10をそれぞれ対象としてグラフ情報を生成する。
図7に示す例では、生成装置100は、ルートノードであるノードN1を対象として連結処理を行うことにより、空間情報VS1−6に示すグラフ情報GR11を生成する。例えば、生成装置100は、他のルートノードであるノードN10を除いたノードN2〜N9を未処理ノードとして、未処理ノードが無くなるまで連結処理を行うことにより、グラフ情報GR11を生成する。なお、図7中の空間情報VS1−6は、図1中の空間情報VS1−6に対応する。
また、図7に示す例では、生成装置100は、ルートノードであるノードN10を対象として連結処理を行うことにより、空間情報VS1−32に示すグラフ情報GR31を生成する。例えば、生成装置100は、他のルートノードであるノードN1を除いたノードN2〜N9を未処理ノードとして、未処理ノードが無くなるまで連結処理を行うことにより、グラフ情報GR31を生成する。
このように、生成装置100は、複数のルートノードの各々を対象として、グラフ情報を生成してもよい。このように複数のルートノードの各々を対象として生成されたグラフ情報GR11、GR31を用いて検索を行う場合、複数の起点から並列して検索を行うことができるため、検索精度の向上を図ることが可能となる。なお、各ノードをGR11、GR31の両者に登録する例を示したが、登録対象ノードを交互、ランダム、または、ルートノードとの距離を算出し、最も近いグラフのみに登録しても良い。例えば、生成装置100は、対象ノードが複数のルートノードN1、N10の各々に対応する複数のグラフ情報のいずれかに含まれるように連結処理を行うことにより、複数のルートノードN1、N10の各々に対応する複数のグラフ情報を生成してもよい。
〔3−3.階層構造を有するグラフ情報〕
なお、生成装置100は、階層構造を有するグラフ情報を生成してもよい。この点について、図8〜10を用いて説明する。図8は、階層構造を有するグラフ情報の一例を示す図である。
例えば、生成装置100は、図8に示すような、階層構造を有するグラフ情報GR41を生成する。また、図8に示す例においては、グラフ情報GR41においては、「ノードN*(*は任意の数値)」の図示を省略し、取得した各ノードを「○」内に「ノードN*(*は任意の数値)」の「*」の値を付すことにより表現する。例えば、グラフ情報GR41中の最上部の「○」であって、内部に「1」が付された「○」は、ノードID「N1」により識別されるノードに対応する。また、例えば、グラフ情報GR41中の第5階層の最左部「○」であって、内部に「16」が付された「○」は、ノードID「N16」により識別されるノードに対応する。
また、図8の例では、説明を簡単にするために、18個のノードを図示して処理の概要を説明する。例えば、生成装置100は、図1中のノードN1〜N18に示すような複数のノードを含むノード群を取得し、階層構造を有し、有向エッジでノードを連結したグラフ情報GR41を生成する。例えば、グラフ情報GR41を用いた検索においては、検索時はグラフ構造型インデックスと同様の処理を行うが、開始位置(起点)は本インデックス(グラフ情報GR41)のルートからスタートする。例えば、生成装置100が生成したグラフ情報GR41を用いて検索を行う場合、ルートノードであるノードN1を起点として検索を行う。例えば、検索時においては、ルートノードであるノードN1から有向エッジを辿ることにより、第2階層以降のノードN2〜N18等を順次検索してもよい。
〔3−3−1.階層構造を有するグラフ情報生成の一例〕
以下、図9に示すフローチャートを用いて、階層構造を有するグラフ情報生成の一例について説明する。図9は、階層構造を有するグラフ情報に係る生成処理の一例を示すフローチャートである。また、図9の説明においては、図8及び図10を適宜参照して、グラフ情報GR41の生成過程について詳述する。図10は、階層構造を有するグラフ情報の生成過程の一例を示す図である。
また、図10に示すグラフ情報GR41−1、GR41−2は、グラフ情報GR41の生成過程を模式的に示す図であり、グラフ情報GR41−1、GR41−2に示すグラフ情報は、グラフ情報GR41の生成途中の状態を示す。また、以下では、グラフ情報GR41−1、GR41−2について、生成過程であることを特に区別なく説明する場合には、グラフ情報GR41と記載する。
図8及び図10中の各ノード間を連結する矢印線は、連結されるノードが参照元と参照先との関係があることを示す。具体的には、矢印線の始点側のノードが参照元であり、矢先側のノードが参照先であることを示す。例えば、ノードN1を矢元とし、ノードN3を矢先とするエッジ(矢印線)は、ノードN1が参照元であり、ノードN3が参照先である有向エッジであることを示す。
まず、取得部131は、ノード群を取得する(ステップS201)。例えば、生成装置100は、生成処理の対象となるノード群を外部の情報処理装置から取得したり、記憶部120から取得したりする。例えば、生成装置100は、オブジェクト情報記憶部121に記憶された各オブジェクトに対応するノード群を取得する。図8の例では、生成装置100は、ノードN1〜N18に示すようなノード群を取得する。
そして、選択部132は、ルートノードを選択する(ステップS202)。また、生成装置100は、ルートノードの階層を第1階層に設定する。図10の例では、生成装置100は、ルートノードをランダムに選択するものとする。例えば、生成装置100は、図10中ステップS41に示すように、ノードN1をルートノードとして選択する。なお、図8及び図10の例では、ノードN1にハッチングを付して、他のノードN2〜N18と異なる態様で図示することにより、ノードN1がルートノードであることを示す。生成装置100は、第1階層にルートノードであるノードN1を属させる。
そして、生成部133は、階層をルートノードの階層の直下に設定する(ステップS203)。ここでいう、階層の直下とは、その階層の下位の階層であり、その階層に連続する次の階層であってもよい。例えば、第1階層の直下の階層は、第2階層となる。図10の例では、生成装置100は、ルートノードの第1階層の下の階層を第2階層に設定する。
そして、生成部133は、未処理ノードから設定中の階層に属する対象ノードを選択する(ステップS204)。図10の例では、ノードN1をルートノードに選択後においては、ノードN2〜N18のノードが未処理ノードとなる。
ここで、生成装置100は、階層に属するノード数を所定の基準に基づいて決定する。図10の例では、生成装置100は、その階層に直近の上位階層に属するノード数の2倍をその階層に属するノード数に決定する。図10の例では、生成装置100は、第2階層の直近の上位の第1階層のノード数が「1」であるため、第2階層に属するノード数を「2(=1×2)」に決定する。この場合、階層番号をLとすると階層に属するノード数を2の(L−1)乗とする場合を一例として示すが、L×2、L×3、Lの2乗、log(L)などいずれでも良い。なお、生成装置100は、種々の基準を適宜用いて階層に属するノード数を決定してもよい。
例えば、生成装置100は、階層数が所定の閾値以下となるように、各階層に属するノードの数を決定してもよい。例えば、生成装置100は、対象となるオブジェクト数(ノード数)が100万であり、階層数の閾値が「5」である場合、各階層に属するノード数の平均が「20万(=100万/5)」になるように、各階層に属するノードの数を決定してもよい。なお、生成装置100は、階層が下位になるほど属するノード数が多くなるように各階層のノード数を決定してもよいし、階層が下位になるほど属するノード数が少なくなるように各階層のノード数を決定してもよい。
そして、生成装置100は、階層に属するノード数のノードを選択する。図10の例では、生成装置100は、階層に属するノード数のノードをランダムに選択するものとする。なお、生成装置100は、階層に属するノード数のノードをランダムに選択した後、ノード間の距離が予め規定された距離よりも近い場合には、一方を再度ランダムに選択し直しても良い。また、生成装置100は、各ノードがそれぞれ最も遠くなるように選択しても良い。また、生成装置100は、クラスタリングを行い各クラスタの中心に最も近いノードを選択しても良い。例えば、生成装置100は、図10中ステップS42に示すように、ノードN2、N3の2つのノードを第2階層に属する対象ノードとして選択する。
そして、生成部133は、設定中の階層よりも上位の階層に属するノード群のうち、対象ノードとの間の距離が近い方から所定数のノードからの有向エッジを対象ノードに連結する(ステップS205)。図10の例では、生成装置100は、所定数を「2」とし、設定中の階層よりも上位の階層に属するノード群のうち、対象ノードとの間の距離が近い方から2つのノードからの有向エッジを対象ノードに連結する場合を示す。
ここで、図10中のグラフ情報GR41−1に示すように、第2階層よりも上位の階層(第1階層)に属するノード群にはルートノードであるノードN1のみが含まれる。この場合、生成装置100は、図10中ステップS43に示すように、ノードN1からの有向エッジをノードN2に連結すると決定し、ノードN1からの有向エッジをノードN3に連結すると決定する。例えば、生成装置100は、生成途中におけるインデックス情報等のグラフ情報を用いて、対象ノードの近接検索を行うことにより、対象ノードに連結するノードを決定してもよい。
このように、生成装置100は、処理対象となっている階層よりも上位の階層に属するノードのうち、所定数のノードからの有向エッジを対象ノードに連結する連結処理を行う。なお、生成装置100は、処理対象となっている階層よりも上位の階層に属するノード数が、所定数に達しない場合、処理対象となっている階層よりも上位の階層に属する全ノードからの有向エッジを対象ノードに連結してもよい。図10の例では、第2階層よりも上位の階層に1つのノードN1のみしか属しないため、第2の階層のノードN2、N3には、ノードN1からの有向エッジを連結すると決定する。
そして、生成装置100は、図10中ステップS44に示すように、ノードN1からの有向エッジをノードN2に連結し、ノードN1からの有向エッジをノードN3に連結する。このように、生成装置100は、同じ階層のノードに関する連結処理を一括して行うことにより、処理の高速化を図ることができる。
そして、生成部133は、未処理ノードが有る場合(ステップS206:Yes)、設定中の階層をその直下の階層に更新し(ステップS207)、ステップS203に戻って処理を繰り返す。例えば、第2階層に属するノードN2、N3を対象ノードとして連結処理後において、生成装置100は、設定中の階層を第2階層の直下の第3階層に更新する。
そして、生成部133は、未処理ノードから設定中の階層に属する対象ノードを選択する(ステップS204)。図10の例では、第2階層に属するノードN2、N3の連結処理後において、ノードN4〜N18のノードが未処理ノードとなる。
図10の例では、生成装置100は、第3階層の直近の上位の第2階層のノード数が「2」であるため、第3階層に属するノード数を「4(=2×2)」に決定する。例えば、生成装置100は、図1中ステップS45に示すように、ノードN4、N5、N6、N7の4つのノードを第3階層に属するノードとして選択する。
そして、生成部133は、設定中の階層よりも上位の階層に属するノード群のうち、対象ノードとの間の距離が近い方から所定数のノードからの有向エッジを対象ノードに連結する(ステップS205)。図10の例では、生成装置100は、所定数を「2」とし、設定中の階層よりも上位の階層に属するノード群のうち、対象ノードとの間の距離が近い方から2つのノードからの有向エッジを対象ノードに連結する場合を示す。
ここで、図10中のグラフ情報GR41−2に示すように、第3階層よりも上位の階層(第1階層、第2階層)に属するノード群にはノードN1〜N3の3つが含まれる。この場合、生成装置100は、ノードN1〜N3のうち、ノードN4〜N7の各々との間の距離が近い方から2つのノードからの有向エッジを各対象ノードに連結すると決定する。例えば、生成装置100は、図10中ステップS46に示すように、ノードN2からの有向エッジをノードN4に連結すると決定し、ノードN1からの有向エッジをノードN5に連結すると決定する。また、生成装置100は、ノードN3からの有向エッジをノードN4に連結すると決定し、ノードN2からの有向エッジをノードN5に連結すると決定する。また、生成装置100は、ノードN2、N3からの有向エッジをノードN6に連結すると決定し、ノードN1、N3からの有向エッジをノードN7に連結すると決定する。
そして、生成装置100は、図10中ステップS47に示すように、ステップS46で決定した有向エッジにより各ノード間を連結する。
なお、生成装置100は、対象ノードが属する階層の直近の上位の階層のみに属するノードからの有向エッジを対象ノードに連結してもよい。例えば、生成装置100は、第3階層のノードN4〜N7が対象ノードである場合、第3階層の直近の上位の階層である第2階層に属するノードN2、N3からの有向エッジを対象ノードに連結してもよい。すなわち、生成装置100は、第3階層のノードN4〜N7が対象ノードである場合、第1階層に属するノードN1を対象から除いてもよい。
そして、生成部133は、未処理ノードが有る場合(ステップS206:Yes)、設定中の階層をその直下の階層に更新し(ステップS207)、ステップS203に戻って処理を繰り返す。例えば、第3階層に属するノードN4〜N7を対象ノードとして連結処理後において、生成装置100は、設定中の階層を第3階層の直下の第4階層に更新する。そして、生成装置100は、第3階層に属するノードN4〜N7を対象ノードとして連結処理後において、未処理ノードであるノードN8〜N18を対象ノードとして、順次連結処理を行う。このように、階層ごとに連結処理を繰り返すことにより、生成装置100は、グラフ情報GR41を生成する。
そして、生成部133は、未処理ノードが無い場合(ステップS206:No)、処理を終了する。例えば、生成装置100は、生成したグラフ情報を用いて種々のサービスを提供してもよい。例えば、提供部134は、生成部133により生成されたグラフ情報を外部の情報処理装置へ提供してもよい。例えば、提供部134は、グラフ情報GR41を所定の検索サービスを提供する情報処理装置へ提供してもよい。また、生成装置100が検索サービスを提供する場合、提供部134は、取得部131により端末装置から取得された検索クエリに対応する検索結果を、端末装置へ提供してもよい。
例えば、生成装置100は、以下のような処理行う。例えば、生成装置100は、登録するオブジェクトに対応するノード集合(以下、「集合S」ともいう)から任意のノードを選択してルートノードとし、集合Sから除外する。そして、生成装置100は、上位層のノード数n(i−1)から当該層のノード数n(i)を算出する。ここでいう、「ノード数n(*)」の「関数n()」は「*(任意の数値)」の階層に対応するノード数を出力する関数を意味する。例えば、「n(2)」は、第2階層のノード数(図8の例では、「2」)に対応する。例えば、生成装置100は、「n(i)=n(i−1)×2」の関係を満たすような「関数n()」を用いてもよい。
そして、生成装置100は、n(i)個のオブジェクトを集合Sから任意に選択して、サブ集合Lとし、当該層のノードとした上で、集合Sからサブ集合Lに属するノードを除外する。そして、生成装置100は、サブ集合Lから任意の1オブジェクト(ノード)を取得する。当該層のノードを除外した、すなわち、上位層以上ノードからk個のノードを近傍検索し、k個の検索されたノードから当該のノードへエッジ(リンク)をこの時点では設定せずに、設定情報として記録する。
そして、生成装置100は、サブ集合Lが空でなければサブ集合Lから任意の1ノードを取得し、上述した設定情報を記憶する処理を繰り返す。また、生成装置100は、サブ集合Lが空であれば記録されたエッジの設定情報を元に1階層分のエッジを設定する。
そして、生成装置100は、集合Sが空でなければ1階層くだった上で、新たにサブ集合Lを選択する処理から処理を、集合Sが空になるまで、繰り返す。このように、生成装置100は、階層を1階層ずつ追加するため、生成されるグラフ情報における最大深さが保証される。
〔4.検索例〕
ここで、上述したグラフ情報を用いた検索の一例を示す。なお、生成したグラフ情報を用いた検索は下記に限らず、種々の手順により行われてもよい。この点について、図11を一例として説明する。図11は、グラフ情報を用いた検索処理の一例を示すフローチャートである。また、以下でいうオブジェクトは、ノードと読み替えてもよい。なお、以下では、生成装置100が検索処理を行うものとして説明するが、検索処理は他の装置により行われてもよい。
ここでは、近傍オブジェクト集合N(G,y)は、ノードyに付与されているエッジにより関連付けられている近傍のオブジェクトの集合である。「G」は、所定のグラフ情報(例えば、グラフ情報GR11やグラフ情報GR41等)であってもよい。例えば、生成装置100は、k近傍検索処理を実行する。
例えば、生成装置100は、超球の半径rを∞(無限大)に設定し(ステップS300)、既存のオブジェクト集合から部分集合Sを抽出する(ステップS301)。例えば、生成装置100は、ルートノードとして選択されたオブジェクト(ノード)を部分集合Sとして抽出してもよい。また、例えば、超球とは、検索範囲を示す仮想的な球である。なお、ステップS301において抽出されたオブジェクト集合Sに含まれるオブジェクトは、同時に検索結果のオブジェクト集合Rの初期集合にも含められる。
次に、生成装置100は、オブジェクト集合Sに含まれるオブジェクトの中で、検索クエリオブジェクトをyとするとオブジェクトyとの距離が最も短いオブジェクトを抽出し、オブジェクトsとする(ステップS302)。例えば、生成装置100は、ルートノードとして選択されたオブジェクト(ノード)のみがSの要素の場合には、結果的にルートノードがオブジェクトsとして抽出される。次に、生成装置100は、オブジェクトsをオブジェクト集合Sから除外する(ステップS303)。
次に、生成装置100は、オブジェクトsとオブジェクトyとの距離d(s,y)がr(1+ε)を超えるか否かを判定する(ステップS304)。ここで、εは拡張要素であり、r(1+ε)は、探索範囲(この範囲内のノードのみを探索する。検索範囲よりも大きくすることで精度を高めることができる)の半径を示す値である。オブジェクトsとオブジェクトyとの距離d(s,y)がr(1+ε)を超える場合(ステップS304:Yes)、生成装置100は、オブジェクト集合Rをオブジェクトyの近傍オブジェクト集合として出力し(ステップS305)、処理を終了する。
オブジェクトsと検索クエリオブジェクトyとの距離d(s,y)がr(1+ε)を超えない場合(ステップS304:No)、生成装置100は、オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトの中からオブジェクト集合Cに含まれないオブジェクトを一つ選択し、選択したオブジェクトuを、オブジェクト集合Cに格納する(ステップS306)。オブジェクト集合Cは、重複検索を回避するために便宜上設けられるものであり、処理開始時には空集合に設定される。
次に、生成装置100は、オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下であるか否かを判定する(ステップS307)。オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下である場合(ステップ307:Yes)、生成装置100は、オブジェクトuをオブジェクト集合Sに追加する(ステップS308)。
次に、生成装置100は、オブジェクトuとオブジェクトyとの距離d(u,y)がr以下であるか否かを判定する(ステップS309)。オブジェクトuとオブジェクトyとの距離d(u,y)がrを超える場合(ステップS309:No)、生成装置100は、ステップS315の判定(処理)を行う。
オブジェクトuとオブジェクトyとの距離d(u,y)がr以下である場合(ステップS309:Yes)、生成装置100は、オブジェクトuをオブジェクト集合Rに追加する(ステップS310)。そして、生成装置100は、オブジェクト集合Rに含まれるオブジェクト数がksを超えるか否かを判定する(ステップS311)。所定数ksは、任意に定められる自然数である。例えば、ks=2であってもよい。
オブジェクト集合Rに含まれるオブジェクト数がksを超える場合(ステップS311:Yes)、生成装置100は、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長いオブジェクトを、オブジェクト集合Rから除外する(ステップS312)。
次に、生成装置100は、オブジェクト集合Rに含まれるオブジェクト数がksと一致するか否かを判定する(ステップS313)。オブジェクト集合Rに含まれるオブジェクト数がksと一致する場合(ステップS313:Yes)、生成装置100は、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長いオブジェクトと、オブジェクトyとの距離を、新たなrに設定する(ステップS314)。
そして、生成装置100は、オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えたか否かを判定する(ステップS315)。オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えていない場合、生成装置100は、ステップS306に戻って処理を繰り返す。
オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えた場合生成装置100は、オブジェクト集合Sが空集合であるか否かを判定する(ステップS316)。オブジェクト集合Sが空集合でない場合、生成装置100は、ステップS302に戻って処理を繰り返す。また、オブジェクト集合Sが空集合である場合(ステップS316:Yes)、生成装置100は、オブジェクト集合Rを出力し、処理を終了する(ステップS317)。例えば、生成装置100は、オブジェクト集合Rに含まれるオブジェクト(ノード)を検索クエリ(入力オブジェクトy)に対応する検索結果として、検索を行った端末装置等へ提供してもよい。
〔5.効果〕
上述したように、生成装置100は、データ検索における検索対象の各々に対応する複数のノードを含むノード群を取得する。そして、生成装置100は、取得したノード群のうち、所定のノードを検索時に最初の起点として用いるルートノードとして選択する。そして、生成装置100は、ノード群のうち、ルートノード、及びルートノードから有向エッジを辿ることにより到達可能なノードを含む処理済ノード群以外のノードを対象ノードとして選択し、処理済ノード群のうち、所定数のノードからの有向エッジを対象ノードに連結する連結処理により、グラフ情報を生成する。このため、生成装置100は、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
また、生成装置100は、処理済ノード群のうち、対象ノードからの距離に応じて選択される所定数のノードからの有向エッジを対象ノードに連結する連結処理により、グラフ情報を生成する。このため、生成装置100は、ノード間の距離に応じて有向エッジを連結することにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
また、生成装置100は、処理済ノード群のうち、対象ノードとの間の距離が近い方から所定数のノードからの有向エッジを対象ノードに連結する連結処理により、グラフ情報を生成する。このため、生成装置100は、距離が近いエッジ間を有向エッジで連結することにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
また、生成装置100は、連結処理の繰り返しにおいて、連結処理の回数に応じて増加する階層に属するノードとして、対象ノードに有向エッジを連結する連結処理により、グラフ情報を生成する。このため、生成装置100は、階層構造を有するグラフ情報を生成することにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
また、生成装置100は、ルートノードを最上位の階層のノードとし、対象ノードの階層を処理済ノード群のノードの階層よりも下位の階層のノードとする連結処理により、グラフ情報を生成する。このため、生成装置100は、階層構造に基づいてエッジの連結を行うことにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
また、生成装置100は、階層数が所定の閾値以下となるように、連結処理を行うことにより、グラフ情報を生成する。このため、生成装置100は、階層数が所定の範囲内に収まるように生成処理を行うことにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
また、生成装置100は、階層数が所定の閾値以下となるように各連結処理において対象ノードの数を決定することにより、グラフ情報を生成する。このため、生成装置100は、階層数が所定の範囲内に収まるように各階層のノード数を決定することにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
また、生成装置100は、階層の各々に含まれるノードの数が変動するようにグラフ情報を生成する。このため、生成装置100は、階層の各々に含まれるノードの数が変動させることにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
また、生成装置100は、対象ノードが属する階層よりも上位の階層に属するノードからの有向エッジを対象ノードに連結することにより、グラフ情報を生成する。このため、生成装置100は、階層構造に基づいてエッジの連結を行うことにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
また、生成装置100は、対象ノードが属する階層の直近の上位の階層に属するノードからの有向エッジを対象ノードに連結することにより、グラフ情報を生成する。このため、生成装置100は、階層構造に基づいてエッジの連結を行うことにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
また、生成装置100は、連結処理を、ノード群において他のノードに連結されていない未処理ノードがなくなるまで繰り返すことにより、グラフ情報を生成する。このため、生成装置100は、エッジによりルートノードから全ノードへ到達可能なグラフ情報を生成することができる。
また、生成装置100は、ノード群のうち、一のノードをルートノードとして選択する。このため、生成装置100は、ルートノードを1つにすることにより、データ量の増大を抑制しつつ、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
また、生成装置100は、ノード群のうち、複数のノードをルートノードとして選択する。このため、生成装置100は、ルートノードを複数にすることにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。例えば、生成装置100は、複数の起点から並列して検索を行うことができるため、検索精度の向上を図ることが可能となる。
また、生成装置100は、対象ノードが複数のルートノードの各々に対応する複数のグラフ情報のいずれかに含まれるように連結処理を行うことにより、複数のルートノードの各々に対応する複数のグラフ情報を生成することにより、検索精度の向上を図ることが可能となる。
また、生成装置100は、処理済ノード群以外のノードのうち、一の連結処理の直前の連結処理における対象ノードに対して最も近いノード、または、一の連結処理の直前の連結処理における対象ノードに対して最も遠いノードを、一の連結処理における対象ノードとして選択することにより、検索処理の高速化が期待できる。
また、生成装置100は、処理済ノード群に関するインデックス情報を用いて対象ノードの近傍検索を行うことにより、グラフ情報を生成することにより、検索時と同様の近傍検索の処理を行うことにより、高速化することができる。
また、上記実施形態及び変形例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、各図に示した各種情報は、図示した情報に限られない。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
また、上述してきた実施形態及び変形例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
また、上述してきた「部(section、module、unit)」は、「手段」や「回路」などに読み替えることができる。例えば、取得部は、取得手段や取得回路に読み替えることができる。