(57)【要約】【課題】所定の対象に関する効率的な検索を可能にするグラフ情報を生成する。【解決手段】本願に係る生成装置は、取得部と、選択部と、生成部とを有する。取得部は、データ検索における検索対象の各々に対応する複数のノードを含むノード群を取得する。選択部は、取得部により取得されたノード群のうち、所定のノードを検索時に最初の起点として用いるルートノードとして選択する。生成部は、ノード群のうち、ルートノード、及びルートノードから有向エッジを辿ることにより到達可能なノードを含む処理済ノード群以外のノードを対象ノードとして選択し、処理済ノード群のうち、所定数のノードからの有向エッジを対象ノードに連結する連結処理により、グラフ情報を生成する。【選択図】図２
2018156458.tif 000002
【特許請求の範囲】
【請求項１】
データ検索における検索対象の各々に対応する複数のノードを含むノード群を取得する取得部と、
前記取得部により取得されたノード群のうち、所定のノードを検索時に最初の起点として用いるルートノードとして選択する選択部と、
前記ノード群のうち、前記ルートノード、及び前記ルートノードから有向エッジを辿ることにより到達可能なノードを含む処理済ノード群以外のノードを対象ノードとして選択し、前記処理済ノード群のうち、所定数のノードからの有向エッジを前記対象ノードに連結する連結処理により、グラフ情報を生成する生成部と、
を備えることを特徴とする生成装置。
【請求項２】
前記生成部は、
前記処理済ノード群のうち、前記対象ノードからの距離に応じて選択される所定数のノードからの有向エッジを前記対象ノードに連結する連結処理により、前記グラフ情報を生成する
ことを特徴とする請求項１に記載の生成装置。
【請求項３】
前記生成部は、
前記処理済ノード群のうち、前記対象ノードとの間の距離が近い方から所定数のノードからの有向エッジを前記対象ノードに連結する連結処理により、前記グラフ情報を生成する
ことを特徴とする請求項２に記載の生成装置。
【請求項４】
前記生成部は、
前記連結処理の繰り返しにおいて、前記連結処理の回数に応じて増加する階層に属するノードとして、前記対象ノードに前記有向エッジを連結する連結処理により、前記グラフ情報を生成する
ことを特徴とする請求項１〜３のいずれか１項に記載の生成装置。
【請求項５】
前記生成部は、
前記ルートノードを最上位の階層のノードとし、前記対象ノードの階層を前記処理済ノード群のノードの階層よりも下位の階層のノードとする前記連結処理により、前記グラフ情報を生成する
ことを特徴とする請求項４に記載の生成装置。
【請求項６】
前記生成部は、
前記階層数が所定の閾値以下となるように、前記連結処理を行うことにより、前記グラフ情報を生成する
ことを特徴とする請求項４または請求項５に記載の生成装置。
【請求項７】
前記生成部は、
前記階層数が所定の閾値以下となるように各連結処理において前記対象ノードの数を決定することにより、前記グラフ情報を生成する
ことを特徴とする請求項６に記載の生成装置。
【請求項８】
前記生成部は、
前記階層の各々に含まれるノードの数が変動するように前記グラフ情報を生成する
ことを特徴とする請求項４〜７のいずれか１項に記載の生成装置。
【請求項９】
前記生成部は、
前記対象ノードが属する階層よりも上位の階層に属するノードからの有向エッジを前記対象ノードに連結することにより、前記グラフ情報を生成する
ことを特徴とする請求項４〜８のいずれか１項に記載の生成装置。
【請求項１０】
前記生成部は、
前記対象ノードが属する階層の直近の上位の階層に属するノードからの有向エッジを前記対象ノードに連結することにより、前記グラフ情報を生成する
ことを特徴とする請求項９に記載の生成装置。
【請求項１１】
前記生成部は、
前記連結処理を、前記ノード群において他のノードに連結されていない未処理ノードがなくなるまで繰り返すことにより、前記グラフ情報を生成する
ことを特徴とする請求項１〜１０のいずれか１項に記載の生成装置。
【請求項１２】
前記選択部は、
前記ノード群のうち、一のノードを前記ルートノードとして選択する
ことを特徴とする請求項１〜１１のいずれか１項に記載の生成装置。
【請求項１３】
前記選択部は、
前記ノード群のうち、複数のノードを前記ルートノードとして選択する
ことを特徴とする請求項１〜１１のいずれか１項に記載の生成装置。
【請求項１４】
前記生成部は、
前記対象ノードが複数のルートノードの各々に対応する複数のグラフ情報のいずれかに含まれるように連結処理を行うことにより、前記複数のルートノードの各々に対応する前記複数のグラフ情報を生成する
ことを特徴とする請求項１３に記載の生成装置。
【請求項１５】
前記生成部は、
前記処理済ノード群以外のノードのうち、一の連結処理の直前の連結処理における対象ノードに対して最も近いノード、または、前記一の連結処理の直前の連結処理における対象ノードに対して最も遠いノードを、前記一の連結処理における対象ノードとして選択する
ことを特徴とする請求項１〜１４のいずれか１項に記載の生成装置。
【請求項１６】
前記生成部は、
前記処理済ノード群に関するインデックス情報を用いて前記対象ノードの近傍検索を行うことにより、前記グラフ情報を生成する
ことを特徴とする請求項１〜１５のいずれか１項に記載の生成装置。
【請求項１７】
コンピュータが実行する生成方法であって、
データ検索における検索対象の各々に対応する複数のノードを含むノード群を取得する取得工程と、
前記取得工程により取得されたノード群のうち、所定のノードを検索時に最初の起点として用いるルートノードとして選択する選択工程と、
前記ノード群のうち、前記ルートノード、及び前記ルートノードから有向エッジを辿ることにより到達可能なノードを含む処理済ノード群以外のノードを対象ノードとして選択し、前記処理済ノード群のうち、所定数のノードからの有向エッジを前記対象ノードに連結する連結処理により、グラフ情報を生成する生成工程と、
を含むことを特徴とする生成方法。
【請求項１８】
データ検索における検索対象の各々に対応する複数のノードを含むノード群を取得する取得手順と、
前記取得手順により取得されたノード群のうち、所定のノードを検索時に最初の起点として用いるルートノードとして選択する選択手順と、
前記ノード群のうち、前記ルートノード、及び前記ルートノードから有向エッジを辿ることにより到達可能なノードを含む処理済ノード群以外のノードを対象ノードとして選択し、前記処理済ノード群のうち、所定数のノードからの有向エッジを前記対象ノードに連結する連結処理により、グラフ情報を生成する生成手順と、
をコンピュータに実行させることを特徴とする生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生成装置、生成方法、及び生成プログラムに関する。
【背景技術】
【０００２】
従来、種々の情報を検索する技術が提供されている。例えば、無向エッジによって生成されたグラフ情報を用いて検索を行う技術が開示されている技術が提供されている。また、このような技術は、例えば画像検索等に用いられる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第５２０８００１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記の従来技術では、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することが難しい場合がある。例えば、各対象に対応する各ノードが無向エッジにより連結されたグラフ情報を用いて検索を行う場合、重複した経路の探索が生じる等により、処理時間等のコストを抑制することが難しい。
【０００５】
本願は、上記に鑑みてなされたものであって、所定の対象に関する効率的な検索を可能にするグラフ情報を生成する生成装置、生成方法、及び生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本願に係る生成装置は、データ検索における検索対象の各々に対応する複数のノードを含むノード群を取得する取得部と、前記取得部により取得されたノード群のうち、所定のノードを検索時に最初の起点として用いるルートノードとして選択する選択部と、前記ノード群のうち、前記ルートノード、及び前記ルートノードから有向エッジを辿ることにより到達可能なノードを含む処理済ノード群以外のノードを対象ノードとして選択し、前記処理済ノード群のうち、所定数のノードからの有向エッジを前記対象ノードに連結する連結処理により、グラフ情報を生成する生成部と、を備えたことを特徴とする。
【発明の効果】
【０００７】
実施形態の一態様によれば、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施形態に係る生成装置が発揮する作用効果の一例を説明するための図である。
【図２】図２は、実施形態に係る生成装置が有する機能構成の一例を説明する図である。
【図３】図３は、実施形態に係るオブジェクト情報記憶部の一例を示す図である。
【図４】図４は、実施形態に係るグラフ情報記憶部の一例を示す図である。
【図５】図５は、実施形態に係る生成処理の一例を示すフローチャートである。
【図６】図６は、複数のルートノードを含むグラフ情報の一例を示す図である。
【図７】図７は、複数のグラフ情報の生成の一例を示す図である。
【図８】図８は、階層構造を有するグラフ情報の一例を示す図である。
【図９】図９は、階層構造を有するグラフ情報に係る生成処理の一例を示すフローチャートである。
【図１０】図１０は、階層構造を有するグラフ情報の生成過程の一例を示す図である。
【図１１】図１１は、グラフ情報を用いた検索処理の一例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下に、本願に係る生成装置、生成方法、及び生成プログラムを実施するための形態（以下、「実施形態」と呼ぶ）について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る生成装置、生成方法、及び生成プログラムが限定されるものではない。また、以下の各実施形態において同一の部位には同一の符号を付し、重複する説明は省略される。
【００１０】
〔１．生成処理の概念〕
まず、図１を用いて、生成装置１００が実行する生成処理の概念について説明する。図１は、実施形態に係る生成装置が発揮する作用効果の一例を説明するための図である。例えば、生成装置１００は、サーバ装置やクラウドシステム等、単数または複数の生成装置により実現され、移動通信網や無線ＬＡＮ（Local  Area  Network）等のネットワークＮ（図２参照）を介して、検索を行うユーザ等が使用する端末装置（図示省略）と通信可能な情報処理装置である。
【００１１】
例えば、生成装置１００は、端末装置からクエリ情報（以下、単に「クエリ」ともいう）を受信すると、クエリに類似する対象（ベクトル情報等）を検索し、検索結果を端末装置に提供する。また、例えば、生成装置１００が端末装置に提供するデータは、画像情報等のデータ自体であってもよいし、ＵＲＬ（Uniform  Resource  Locator）等の対応するデータを参照するための情報であってもよい。また、クエリや検索対象のデータは、画像、音声、テキストデータなど、如何なる種類のデータであってもよい。以下では、生成装置１００が画像を検索するものとして説明する。
【００１２】
また、生成装置１００は、図１に示すように、グラフ情報を生成する。ここでいう、有向エッジとは、一方向にしかデータを辿れないエッジを意味する。以下では、エッジにより辿る元、すなわち始点となるノードを参照元とし、エッジにより辿る先、すなわち終点となるノードを参照先とする。例えば、所定のノード「Ａ」から所定のノード「Ｂ」に連結される有向エッジとは、参照元をノード「Ａ」とし、参照先をノード「Ｂ」とするエッジであることを示す。ここでいう、各ノードは、各オブジェクトに対応する。例えば、画像から抽出された複数の局所特徴量のそれぞれがオブジェクトであってもよい。また、例えば、オブジェクト間の距離が定義された種々のデータがオブジェクトであってもよい。
【００１３】
生成装置１００は、数百万〜数億単位の画像情報に対応するノードを対象に処理を行うが、図面においてはその一部のみを図示する。図１の例では、説明を簡単にするために、９個のノードを図示して処理の概要を説明する。例えば、生成装置１００は、図１中のノードＮ１〜Ｎ９に示すような複数のノードを含むノード群を取得し、各ノードを有向エッジで連結したグラフ情報ＧＲ１１を生成する。
【００１４】
また、このように「ノードＮ＊（＊は任意の数値）」と記載した場合、そのノードはノードＩＤ「Ｎ＊」により識別されるノードであることを示す。例えば、「ノードＮ１」と記載した場合、そのノードはノードＩＤ「Ｎ１」により識別されるノードである。
【００１５】
なお、図１中の空間情報ＶＳ１−１〜ＶＳ１−６は、ユークリッド空間であってもよい。また、図１に示す空間情報ＶＳ１−１〜ＶＳ１−６は、各ベクトル間の距離等の説明のための概念的な図である。多次元空間となる。なお、例えば、図１に示す空間情報ＶＳ１−１〜ＶＳ１−６は、平面上に図示するため２次元の態様にて図示されるが、例えば１００次元や１０００次元等の多次元空間であるものとする。
【００１６】
また、図１に示す空間情報ＶＳ１−１〜ＶＳ１−６は、グラフ情報の生成過程を模式的に示す図であり、空間情報ＶＳ１−１〜ＶＳ１−６に示す空間は、同一の空間である。また、以下では、空間情報ＶＳ１−１〜ＶＳ１−６について、特に区別なく説明する場合には、空間情報ＶＳ１と記載する。
【００１７】
また、図１に示す例においては、空間情報ＶＳ１−１及び空間情報ＶＳ１−６以外の空間情報ＶＳ１においては、「ノードＮ＊（＊は任意の数値）」の図示を省略し、取得した各ノードを「○」内に「ノードＮ＊（＊は任意の数値）」の「＊」の値を付すことにより表現する。例えば、空間情報ＶＳ１−２中の左上の「○」であって、内部に「２」が付された「○」は、ノードＩＤ「Ｎ２」により識別されるノードに対応する。例えば、図１に示す例において、各ノードに対応するベクトルデータは、Ｎ次元の実数値ベクトルであってもよい。
【００１８】
本実施形態においては、空間情報ＶＳ１における各ノードの距離を対応する各オブジェクト間の類似度とする。ここで、図１に示す例においては、空間情報ＶＳ１における各ノード間の距離が小さいオブジェクト同士の類似度が高く、空間情報ＶＳ１における各ノード間の距離が大きいオブジェクト同士の類似度が低い。例えば、図１中の空間情報ＶＳ１において、ノードＩＤ「Ｎ６」により識別されるノードと、ノードＩＤ「Ｎ７」により識別されるノードとは近接している、すなわち距離が小さい。そのため、ノードＩＤ「Ｎ６」により識別されるノードに対応するオブジェクトと、ノードＩＤ「Ｎ７」により識別されるノードに対応するオブジェクトとは類似度が高いことを示す。
【００１９】
また、例えば、図１中の空間情報ＶＳ１において、ノードＩＤ「Ｎ６」により識別されるノードと、ノードＩＤ「Ｎ２」により識別されるノードとは遠隔にある、すなわち距離が大きい。そのため、ノードＩＤ「Ｎ６」により識別されるノードに対応するオブジェクトと、ノードＩＤ「Ｎ２」により識別されるノードに対応するオブジェクトとは類似度が低いことを示す。
【００２０】
また、図１の例では、生成装置１００は、後述する生成処理により、ノードを有向エッジで連結することにより、グラフ情報ＧＲ１１を生成する。例えば、グラフ情報ＧＲ１１を用いた検索においては、検索時はグラフ構造型インデックスと同様の処理を行うが、開始位置（起点）は本インデックス（グラフ情報ＧＲ１１）のルートからスタートする。例えば、生成装置１００が生成したグラフ情報ＧＲ１１を用いて検索を行う場合、ルートノードであるノードＮ１を起点として検索を行う。例えば、検索時においては、ルートノードであるノードＮ１から有向エッジを辿ることにより、ノードＮ２〜Ｎ９等を順次検索してもよい。
【００２１】
〔２．実施形態に係る生成装置が実行する生成処理について〕
例えば、生成装置１００は、ノード群のうち、所定のノードを検索時に最初の起点として用いるルートノードとして選択し、ノード群のうち、ルートノード、及びルートノードから有向エッジを辿ることにより到達可能なノードを含む処理済ノード群以外のノードを対象ノードとして選択し、処理済ノード群のうち、所定数のノードからの有向エッジを対象ノードに連結する連結処理により、グラフ情報を生成する情報処理装置である。例えば、生成装置１００は、上述した連結処理を、ノード群において他のノードに連結されていない未処理ノードがなくなるまで繰り返すことにより、グラフ情報を生成する。以下、図を用いて、生成処理を実現する生成装置１００の機能構成及び作用効果の一例を説明する。
【００２２】
〔２−１．機能構成の一例〕
まず、図２を用いて、実施形態に係る生成装置１００の構成について説明する。図２は、実施形態に係る情報処理装置が有する機能構成の一例を説明する図である。図２は、実施形態に係る生成装置が有する機能構成の一例を説明する図である。図２に示すように、生成装置１００は、通信部１１０と、記憶部１２０と、制御部１３０とを有する。なお、生成装置１００は、生成装置１００の管理者等から各種操作を受け付ける入力部（例えば、キーボードやマウス等）や、各種情報を表示するための表示部（例えば、液晶ディスプレイ等）を有してもよい。通信部１１０は、例えば、ＮＩＣ（Network  Interface  Card）等によって実現される。そして、通信部１１０は、ネットワークＮと有線または無線で接続され、端末装置との間で、検索クエリや検索結果等の種々の情報の送受信を行う。
【００２３】
記憶部１２０は、例えば、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。実施形態に係る記憶部１２０は、図２に示すように、オブジェクト情報記憶部１２１と、グラフ情報記憶部１２２とを有する。以下、図３および図４を用いて、オブジェクト情報記憶部１２１、およびグラフ情報記憶部１２２に登録される情報の一例を説明する。
【００２４】
オブジェクト情報記憶部１２１には、検索対象（オブジェクト）に関する情報が登録されている。例えば、オブジェクト情報記憶部１２１には、オブジェクトを識別するための識別情報や、オブジェクトに対応するベクトルデータ（ベクトル情報）が登録されている。
【００２５】
例えば、図３は、実施形態に係るオブジェクト情報記憶部の一例を示す図である。図３に示すように、オブジェクト情報記憶部１２１には、「オブジェクトＩＤ」、および「ベクトル情報」といった項目を有する情報が登録される。「オブジェクトＩＤ」とは、オブジェクトを識別するための識別情報である。また、「ベクトル情報」とは、オブジェクトＩＤにより識別されるオブジェクトに対応するベクトル情報である。すなわち、図３の例では、オブジェクトを識別するオブジェクトＩＤに対して、オブジェクトに対応するベクトルデータ（ベクトル情報）が対応付けられて登録されている。
【００２６】
グラフ情報記憶部１２２は、後述する生成処理により生成されるグラフ情報が登録されている。例えば、グラフ情報記憶部１２２には、複数のオブジェクトを接続するエッジに関する情報であり、参照元のオブジェクトと参照先のオブジェクトとを接続する有向エッジに関する情報が登録されている。
【００２７】
例えば、図４は、実施形態に係るグラフ情報記憶部の一例を示す図である。図４に示すように、グラフ情報記憶部１２２には、「ノードＩＤ」、「オブジェクトＩＤ」、および「有向エッジ情報」といった項目を有する情報が登録される。「ノードＩＤ」とは、グラフ情報における各ノード（対象）を識別するための識別情報である。また、「オブジェクトＩＤ」とは、オブジェクトを識別するための識別情報である。また、「有向エッジ情報」には、「エッジＩＤ」や「参照先」といった情報が含まれる。「エッジＩＤ」とは、ノード間を連結するエッジを識別するための識別情報である。「参照先」は、エッジにより連結された参照先（ノード）を示す情報である。すなわち、図４の例では、ノードを識別するノードＩＤに対して、そのノードに対応するオブジェクト（対象）を識別する情報やそのノードからの有向エッジが連結される参照先（ノード）が対応付けられて登録されている。
【００２８】
例えば、図４の例では、ノードＩＤ「Ｎ１」により識別されるノードは、オブジェクトＩＤ「ＯＢ１」により識別されるオブジェクト（対象）に対応することを示す。また、ノードＩＤ「Ｎ１」により識別されるノードからは、エッジＩＤ「Ｅ１１」により識別されるエッジが、ノードＩＤ「Ｎ２」により識別されるノードに連結されることを示す。すなわち、図４の例では、ノードＩＤ「Ｎ１」により識別されるノードからはノードＩＤ「Ｎ２」により識別されるノードに辿ることができることを示す。
【００２９】
図２に戻り、説明を続ける。制御部１３０は、例えば、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等によって、生成装置１００内部の記憶装置に記憶されている各種プログラムが、ＲＡＭ等の記憶領域を作業領域として実行されることにより実現される。図２に示す例では、制御部１３０は、取得部１３１と、選択部１３２と、生成部１３３と、提供部１３４（以下、総称して各処理部１３１〜１３４と記載する場合がある。）を有する。
【００３０】
なお、制御部１３０が有する各処理部１３１〜１３４の接続関係は、図２に示した接続関係に限られず、他の接続関係であってもよい。また、各処理部１３１〜１３４は、以下に説明するような生成処理の機能・作用（例えば図１）を実現・実行するものであるが、これらは説明のために整理した機能単位であり、実際のハードウェア要素やソフトウェアモジュールとの一致は問わない。すなわち、以下の生成処理の機能・作用を実現・実行することができるのであれば、生成装置１００は、任意の機能単位で案内処理を実現・実行して良い。
【００３１】
〔２−２．生成処理における作用効果の一例〕
以下、図５に示すフローチャートを用いて、各処理部１３１〜１３４が実行・実現する生成処理の内容について説明する。図５は、実施形態に係る生成処理の一例を示すフローチャートである。
【００３２】
まず、取得部１３１は、ノード群を取得する（ステップＳ１０１）。例えば、生成装置１００は、生成処理の対象となるノード群を外部の情報処理装置から取得したり、記憶部１２０から取得したりする。例えば、生成装置１００は、オブジェクト情報記憶部１２１に記憶された各オブジェクトに対応するノード群を取得する。図１の例では、生成装置１００は、ノードＮ１〜Ｎ９に示すようなノード群を取得する。
【００３３】
そして、選択部１３２は、ルートノードを選択する（ステップＳ１０２）。ここでいう、ルートノードとは、検索時に最初の起点として用いるノードを意味するものとする。なお、生成装置１００は、種々の基準を適宜用いてルートノードを選択してもよい。例えば、生成装置１００は、ノード群の平均に近いノードをルートノードとして選択してもよい。例えば、生成装置１００は、空間情報ＶＳ１の中央部に位置するノードをルートノードとして選択してもよい。例えば、生成装置１００は、ノード群を所定のクラスタリング手法によりクラスタリングし、最も要素（ノード）数の多いクラスタからルートノードを選択してもよい。例えば、生成装置１００は、最も要素（ノード）数の多いクラスタのうち、平均に近いノードをルートノードとして選択してもよい。
【００３４】
図１の例では、生成装置１００は、ルートノードをランダムに選択するものとする。例えば、生成装置１００は、図１中ステップＳ１１に示すように、ノードＮ１をルートノードとして選択する。なお、図１の例では、ノードＮ１にハッチングを付して、他のノードＮ２〜Ｎ９と異なる態様で図示することにより、ノードＮ１がルートノードであることを示す。
【００３５】
そして、生成部１３３は、未処理ノードから対象ノードを選択する（ステップＳ１０３）。ここでいう、未処理ノードとは、ノード群のうち、ルートノード、及びルートノードから有向エッジを辿ることにより到達可能なノードを含む処理済ノード群以外のノードを意味する。図１の例では、ノードＮ１をルートノードに選択後においては、ノードＮ２〜Ｎ９のノードが未処理ノードとなる。また、ここでいう、対象ノードとは、有向エッジを連結する処理を行う対象となるノードを意味する。また、上述のように、処理済ノード群は、ルートノード、及びルートノードから有向エッジを辿ることにより到達可能なノードを含むものとする。
【００３６】
図１の例では、生成装置１００は、対象ノードをランダムに選択するものとする。例えば、生成装置１００は、図１中ステップＳ１２に示すように、ノードＮ２を対象ノードとして選択する。なお、生成装置１００は、対象ノードをランダムに限らず、種々の基準に基づいて選択してもよい。例えば、生成装置１００は、ルートノードに近接しているノードを対象ノードとして選択してもよい。この場合、生成装置１００により生成されるグラフ情報を用いた検索では、検索の網羅性が向上するため、高精度な検索が可能となる。例えば、生成装置１００は、ルートノードから遠隔にあるノードを対象ノードとして選択してもよい。この場合、生成装置１００により生成されるグラフ情報を用いた検索では、１つのエッジを辿ることにより空間内においてより遠方へ移るため、例えば、１つのエッジを辿ることによる空間内の移動距離が長くすることができる等により、検索処理の高速化が期待できる。また、生成装置１００は、ルートノードではなく、前回登録ノードに対して最も近いノード、及び、前回登録ノードに対して最も遠いノード、を選択して登録しても良い。この場合、それぞれ上記と同様の効果が期待できる。例えば、生成装置１００は、ルートノードではなく、前回処理対象としたノードに対して最も近いノード、または、前回処理対象としたノードに対して最も遠いノードを、対象ノードとして選択してもよい。例えば、生成装置１００は、処理済ノード群以外のノードのうち、一の連結処理の直前の連結処理における対象ノードに対して最も近いノード、または、一の連結処理の直前の連結処理における対象ノードに対して最も遠いノードを、一の連結処理における対象ノードとして選択してもよい。
【００３７】
そして、生成部１３３は、処理済ノード群のうち、対象ノードとの間の距離が近い方から所定数のノードからの有向エッジを対象ノードに連結する（ステップＳ１０４）。このように、生成部１３３は、処理済ノード群のうち、対象ノードからの距離に応じて選択される所定数のノードからの有向エッジを対象ノードに連結する。
【００３８】
図１の例では、生成装置１００は、所定数を「２」とし、処理済ノード群のうち、対象ノードとの間の距離が近い方から２つのノードからの有向エッジを対象ノードに連結する場合を示す。なお、所定数「２」は一例であり、ノード群に含まれるノード数等に応じて、種々の値（例えば、５や１０等）であってもよい。例えば、生成装置１００は、次元数の多いデータを扱う場合には、所定数を「１００以上」としてもよい。これにより、検索性能が向上させることが期待できる場合がある。
【００３９】
ここで、図１中の空間情報ＶＳ１−２に示すように、ルートノード選択後においては処理済ノード群にはルートノードであるノードＮ１のみが含まれる。この場合、生成装置１００は、図１中ステップＳ１３に示すように、ノードＮ１からの有向エッジであるエッジＥ１１をノードＮ２に連結する。
【００４０】
図１中のエッジＥ１１等に示す各ノード間を連結する矢印線は、連結されるノードが参照元と参照先との関係があることを示す。具体的には、矢印線の始点側のノードが参照元であり、矢先側のノードが参照先であることを示す。例えば、エッジＥ１１は、ノードＮ１が参照元であり、ノードＮ２が参照先である有向エッジであることを示す。
【００４１】
このように、生成装置１００は、処理済ノード群のうち、所定数のノードからの有向エッジを対象ノードに連結する連結処理を行う。なお、生成装置１００は、処理済ノード群に含まれるノード数が、所定数に達しない場合、処理済ノード群の全ノードからの有向エッジを対象ノードに連結してもよい。
【００４２】
また、このように「エッジＥ＊（＊は任意の数値）」と記載した場合、そのエッジはエッジＩＤ「Ｅ＊」により識別されるエッジであることを示す。例えば、「エッジＥ１１」と記載した場合、そのエッジはエッジＩＤ「Ｅ１１」により識別されるエッジである。上述のように、ノードＮ１からのエッジＥ１１をノードＮ２に連結することにより、検索時において起点となるノードＮ１からノードＮ２に辿ることが可能となる。また、ノードＮ２は未処理ノード群ではなくなり、処理済ノード群に含まれる。
【００４３】
そして、生成部１３３は、未処理ノードが有る場合（ステップＳ１０５：Ｙｅｓ）、ステップＳ１０３に戻って処理を繰り返す。
【００４４】
例えば、ノードＮ２を対象ノードとして連結処理後において、生成装置１００は、図１中ステップＳ１４に示すように、ノードＮ３を対象ノードとして選択する。ここで、図１中の空間情報ＶＳ１−３に示すように、ノードＮ２の連結処理後においては処理済ノード群にはノードＮ１及びノードＮ２の２つが含まれる。この場合、生成装置１００は、図１中ステップＳ１５に示すように、ノードＮ１からの有向エッジであるエッジＥ１２をノードＮ３に連結し、ノードＮ２からの有向エッジであるエッジＥ２１をノードＮ３に連結する。このように、生成装置１００は、ノードＮ３を対象ノードとして連結処理を行う。
【００４５】
そして、生成部１３３は、未処理ノードが有る場合（ステップＳ１０５：Ｙｅｓ）、ステップＳ１０３に戻って処理を繰り返す。
【００４６】
例えば、ノードＮ３を対象ノードとして連結処理後において、生成装置１００は、図１中ステップＳ１６に示すように、ノードＮ４を対象ノードとして選択する。ここで、図１中の空間情報ＶＳ１−４に示すように、ノードＮ３の連結処理後においては処理済ノード群にはノードＮ１〜Ｎ３の３つが含まれる。この場合、生成装置１００は、ノードＮ１〜Ｎ３のうち、ノードＮ４との間の距離が近い方から２つのノードからの有向エッジを対象ノードに連結する。図１の例では、空間情報ＶＳ１に示すように、ノードＮ４との間の距離は、ノードＮ１、Ｎ３が近く、ノードＮ２が遠い。そのため、生成装置１００は、図１中ステップＳ１７に示すように、ノードＮ１からの有向エッジであるエッジＥ１３をノードＮ４に連結し、ノードＮ３からの有向エッジであるエッジＥ３１をノードＮ４に連結する。このように、生成装置１００は、ノードＮ４を対象ノードとして連結処理を行う。
【００４７】
なお、生成装置１００は、生成途中におけるインデックス情報等のグラフ情報を用いて、対象ノードの近接検索を行うことにより、対象ノードに連結するノードを決定してもよい。例えば、生成装置１００は、処理済ノード群のうち対象ノードに近接するノードを決定する際には、検索時と同様の近傍検索の処理を行うことにより、高速化してもよい。すなわち、生成装置１００は、対象ノードをクエリとみなして、その対象ノードに近接するノードを検索することにより、対象ノードに連結するノードを決定してもよい。
【００４８】
例えば、生成装置１００は、対象ノードに対して、処理済ノード群の中での近傍する上位ｋ個（ｋは「２」等の任意の数）のノードを近傍検索し、ｋ個の近傍のノードから対象ノードへ有向エッジ（リンク）を設定する。
【００４９】
そして、生成部１３３は、未処理ノードが有る場合（ステップＳ１０５：Ｙｅｓ）、ステップＳ１０３に戻って処理を繰り返す。
【００５０】
例えば、ノードＮ４を対象ノードとして連結処理後において、生成装置１００は、図１中ステップＳ１８に示すように、ノードＮ５を対象ノードとして選択する。ここで、図１中の空間情報ＶＳ１−５に示すように、ノードＮ４の連結処理後においては処理済ノード群にはノードＮ１〜Ｎ４の４つが含まれる。この場合、生成装置１００は、ノードＮ１〜Ｎ４のうち、ノードＮ５との間の距離が近い方から２つのノードからの有向エッジを対象ノードに連結する。図１の例では、空間情報ＶＳ１に示すように、ノードＮ５との間の距離は、ノードＮ１、Ｎ２、Ｎ４、Ｎ３の順で近い。そのため、生成装置１００は、図１中ステップＳ１９に示すように、ノードＮ１からの有向エッジであるエッジＥ１４をノードＮ５に連結し、ノードＮ２からの有向エッジであるエッジＥ２２をノードＮ５に連結する。このように、生成装置１００は、ノードＮ５を対象ノードとして連結処理を行う。
【００５１】
そして、生成部１３３は、未処理ノードが有る場合（ステップＳ１０５：Ｙｅｓ）、ステップＳ１０３に戻って処理を繰り返す。図１中ステップＳ２０に示すように、生成装置１００は、ノードＮ５を対象ノードとして連結処理後において、未処理ノードであるノードＮ６〜Ｎ９を対象ノードとして、順次連結処理を行う。例えば、図１中の空間情報ＶＳ１−６に示すように、生成装置１００は、ノードＮ６、Ｎ７、Ｎ８、Ｎ９の順に対象ノードとして連結処理を行うことにより、グラフ情報ＧＲ１１を生成する。
【００５２】
そして、生成部１３３は、未処理ノードが無い場合（ステップＳ１０５：Ｎｏ）、処理を終了する。
【００５３】
例えば、生成装置１００は、以下のような処理行う。例えば、生成装置１００は、登録するオブジェクトに対応するノード集合（以下、「集合Ｓ」ともいう）から任意のノードを選択してルートノードとし、集合Ｓから除外する。そして、生成装置１００は、集合Ｓから任意のノードを選択肢し、集合Ｓから除外する。そして、生成装置１００は、選択したノードに対して、ツリー上のノード（処理済ノード群）の中での近傍する上位ｋ個のノードを近傍検索し、ｋ個の検索されたノードから当該のノードへエッジ（リンク）を設定する。生成装置１００は、上述した処理を、集合Ｓが空になるまで、繰り返す。なお、図１の例では、グラフ情報の生成までを示したが、生成装置１００は、生成したグラフ情報を用いて種々のサービスを提供してもよい。例えば、提供部１３４は、生成部１３３により生成されたグラフ情報を外部の情報処理装置へ提供してもよい。例えば、提供部１３４は、グラフ情報ＧＲ１１を所定の検索サービスを提供する情報処理装置へ提供してもよい。また、生成装置１００が検索サービスを提供する場合、提供部１３４は、取得部１３１により端末装置から取得された検索クエリに対応する検索結果を、端末装置へ提供してもよい。
【００５４】
〔３．変形例〕
上述した実施形態に係る生成装置１００は、上記実施形態以外にも種々の異なる形態にて実施されてよい。そこで、以下では、上記の生成装置１００の他の実施形態について説明する。なお、以下では、実施形態と同様の点については適宜説明を省略する。
【００５５】
〔３−１．複数のルートノード〕
上述した例では、１つのノードをルートノードとして選択する場合を示したが、ルートノードの数が１つに限らず、複数であってもよい。例えば、生成装置１００は、複数のルートノードとして、互いに遠いノードを選択しても良い。また、例えば、生成装置１００は、所定のクラスタリングを行い、各クラスタの中心に最も近いノードをルートノードとしても良い。すなわち、生成装置１００は、ノード群のうち、複数のノードをルートノードとして選択してもよい。この点について、図６を用いて説明する。図６は、複数のルートノードを含むグラフ情報の一例を示す図である。
【００５６】
図６中の空間情報ＶＳ１−６は、図１中の空間情報ＶＳ１−６に対応し、１つのノードＮ１をルートノードとして選択した場合を示す。一方、図６中の空間情報ＶＳ１−２１は、ノードＮ１、及びノードＮ１０の２つのノードをルートノードとして選択した場合を示す。すなわち、図６中の空間情報ＶＳ１−２１は、ノードＮ１０を含む点で、図６中の空間情報ＶＳ１−６と相違する。
【００５７】
このように、生成装置１００は、複数のルートノードを選択してもよい。これにより、複数のルートノードが選択されることにより、各ノードにおけるエッジの連結関係が変更される。図６の示す例では、グラフ情報ＧＲ１１がグラフ情報ＧＲ２１に変更される。例えば、空間情報ＶＳ１−２１においては、空間情報ＶＳ１−６中のノードＮ３からノードＮ４への有向エッジに変えて、ノードＮ１０からノードＮ３への有向エッジが連結される。このように複数のルートノードを含むグラフ情報ＧＲ２１を用いて検索を行う場合、複数の起点から並列して検索を行うことができるため、検索処理の高速化を図ることが可能となる。
【００５８】
〔３−２．複数のルートノード〕
また、図６の例では、複数のルートノードについて共通のグラフ情報ＧＲ２１を生成する場合を示したが、各ルートノードについてグラフ情報を生成してもよい。すなわち、生成装置１００は、各ルートノードを起点として検索可能な複数のグラフ情報を生成してもよい。この点について、図７を用いて説明する。図７は、複数のグラフ情報の生成の一例を示す図である。
【００５９】
図７中の空間情報ＶＳ１−３１には、ノードＮ１〜Ｎ１０が含まれる。すなわち、図７中の空間情報ＶＳ１−３１は、ノードＮ１０を含む点で、図１中の空間情報ＶＳ１−６と相違する。また、図７中の空間情報ＶＳ１−３１は、ノードＮ１、及びノードＮ１０の２つのノードをルートノードとして選択した場合を示す。
【００６０】
ここで、生成装置１００は、各ルートノードを対象としてグラフ情報を生成する。図７の例では、生成装置１００は、ルートノードであるノードＮ１、Ｎ１０をそれぞれ対象としてグラフ情報を生成する。
【００６１】
図７に示す例では、生成装置１００は、ルートノードであるノードＮ１を対象として連結処理を行うことにより、空間情報ＶＳ１−６に示すグラフ情報ＧＲ１１を生成する。例えば、生成装置１００は、他のルートノードであるノードＮ１０を除いたノードＮ２〜Ｎ９を未処理ノードとして、未処理ノードが無くなるまで連結処理を行うことにより、グラフ情報ＧＲ１１を生成する。なお、図７中の空間情報ＶＳ１−６は、図１中の空間情報ＶＳ１−６に対応する。
【００６２】
また、図７に示す例では、生成装置１００は、ルートノードであるノードＮ１０を対象として連結処理を行うことにより、空間情報ＶＳ１−３２に示すグラフ情報ＧＲ３１を生成する。例えば、生成装置１００は、他のルートノードであるノードＮ１を除いたノードＮ２〜Ｎ９を未処理ノードとして、未処理ノードが無くなるまで連結処理を行うことにより、グラフ情報ＧＲ３１を生成する。
【００６３】
このように、生成装置１００は、複数のルートノードの各々を対象として、グラフ情報を生成してもよい。このように複数のルートノードの各々を対象として生成されたグラフ情報ＧＲ１１、ＧＲ３１を用いて検索を行う場合、複数の起点から並列して検索を行うことができるため、検索精度の向上を図ることが可能となる。なお、各ノードをGR11、GR31の両者に登録する例を示したが、登録対象ノードを交互、ランダム、または、ルートノードとの距離を算出し、最も近いグラフのみに登録しても良い。例えば、生成装置１００は、対象ノードが複数のルートノードＮ１、Ｎ１０の各々に対応する複数のグラフ情報のいずれかに含まれるように連結処理を行うことにより、複数のルートノードＮ１、Ｎ１０の各々に対応する複数のグラフ情報を生成してもよい。
【００６４】
〔３−３．階層構造を有するグラフ情報〕
なお、生成装置１００は、階層構造を有するグラフ情報を生成してもよい。この点について、図８〜１０を用いて説明する。図８は、階層構造を有するグラフ情報の一例を示す図である。
【００６５】
例えば、生成装置１００は、図８に示すような、階層構造を有するグラフ情報ＧＲ４１を生成する。また、図８に示す例においては、グラフ情報ＧＲ４１においては、「ノードＮ＊（＊は任意の数値）」の図示を省略し、取得した各ノードを「○」内に「ノードＮ＊（＊は任意の数値）」の「＊」の値を付すことにより表現する。例えば、グラフ情報ＧＲ４１中の最上部の「○」であって、内部に「１」が付された「○」は、ノードＩＤ「Ｎ１」により識別されるノードに対応する。また、例えば、グラフ情報ＧＲ４１中の第５階層の最左部「○」であって、内部に「１６」が付された「○」は、ノードＩＤ「Ｎ１６」により識別されるノードに対応する。
【００６６】
また、図８の例では、説明を簡単にするために、１８個のノードを図示して処理の概要を説明する。例えば、生成装置１００は、図１中のノードＮ１〜Ｎ１８に示すような複数のノードを含むノード群を取得し、階層構造を有し、有向エッジでノードを連結したグラフ情報ＧＲ４１を生成する。例えば、グラフ情報ＧＲ４１を用いた検索においては、検索時はグラフ構造型インデックスと同様の処理を行うが、開始位置（起点）は本インデックス（グラフ情報ＧＲ４１）のルートからスタートする。例えば、生成装置１００が生成したグラフ情報ＧＲ４１を用いて検索を行う場合、ルートノードであるノードＮ１を起点として検索を行う。例えば、検索時においては、ルートノードであるノードＮ１から有向エッジを辿ることにより、第２階層以降のノードＮ２〜Ｎ１８等を順次検索してもよい。
【００６７】
〔３−３−１．階層構造を有するグラフ情報生成の一例〕
以下、図９に示すフローチャートを用いて、階層構造を有するグラフ情報生成の一例について説明する。図９は、階層構造を有するグラフ情報に係る生成処理の一例を示すフローチャートである。また、図９の説明においては、図８及び図１０を適宜参照して、グラフ情報ＧＲ４１の生成過程について詳述する。図１０は、階層構造を有するグラフ情報の生成過程の一例を示す図である。
【００６８】
また、図１０に示すグラフ情報ＧＲ４１−１、ＧＲ４１−２は、グラフ情報ＧＲ４１の生成過程を模式的に示す図であり、グラフ情報ＧＲ４１−１、ＧＲ４１−２に示すグラフ情報は、グラフ情報ＧＲ４１の生成途中の状態を示す。また、以下では、グラフ情報ＧＲ４１−１、ＧＲ４１−２について、生成過程であることを特に区別なく説明する場合には、グラフ情報ＧＲ４１と記載する。
【００６９】
図８及び図１０中の各ノード間を連結する矢印線は、連結されるノードが参照元と参照先との関係があることを示す。具体的には、矢印線の始点側のノードが参照元であり、矢先側のノードが参照先であることを示す。例えば、ノードＮ１を矢元とし、ノードＮ３を矢先とするエッジ（矢印線）は、ノードＮ１が参照元であり、ノードＮ３が参照先である有向エッジであることを示す。
【００７０】
まず、取得部１３１は、ノード群を取得する（ステップＳ２０１）。例えば、生成装置１００は、生成処理の対象となるノード群を外部の情報処理装置から取得したり、記憶部１２０から取得したりする。例えば、生成装置１００は、オブジェクト情報記憶部１２１に記憶された各オブジェクトに対応するノード群を取得する。図８の例では、生成装置１００は、ノードＮ１〜Ｎ１８に示すようなノード群を取得する。
【００７１】
そして、選択部１３２は、ルートノードを選択する（ステップＳ２０２）。また、生成装置１００は、ルートノードの階層を第１階層に設定する。図１０の例では、生成装置１００は、ルートノードをランダムに選択するものとする。例えば、生成装置１００は、図１０中ステップＳ４１に示すように、ノードＮ１をルートノードとして選択する。なお、図８及び図１０の例では、ノードＮ１にハッチングを付して、他のノードＮ２〜Ｎ１８と異なる態様で図示することにより、ノードＮ１がルートノードであることを示す。生成装置１００は、第１階層にルートノードであるノードＮ１を属させる。
【００７２】
そして、生成部１３３は、階層をルートノードの階層の直下に設定する（ステップＳ２０３）。ここでいう、階層の直下とは、その階層の下位の階層であり、その階層に連続する次の階層であってもよい。例えば、第１階層の直下の階層は、第２階層となる。図１０の例では、生成装置１００は、ルートノードの第１階層の下の階層を第２階層に設定する。
【００７３】
そして、生成部１３３は、未処理ノードから設定中の階層に属する対象ノードを選択する（ステップＳ２０４）。図１０の例では、ノードＮ１をルートノードに選択後においては、ノードＮ２〜Ｎ１８のノードが未処理ノードとなる。
【００７４】
ここで、生成装置１００は、階層に属するノード数を所定の基準に基づいて決定する。図１０の例では、生成装置１００は、その階層に直近の上位階層に属するノード数の２倍をその階層に属するノード数に決定する。図１０の例では、生成装置１００は、第２階層の直近の上位の第１階層のノード数が「１」であるため、第２階層に属するノード数を「２（＝１×２）」に決定する。この場合、階層番号をＬとすると階層に属するノード数を2の（Ｌ−１）乗とする場合を一例として示すが、Ｌ×２、Ｌ×３、Ｌの２乗、ｌｏｇ（Ｌ）などいずれでも良い。なお、生成装置１００は、種々の基準を適宜用いて階層に属するノード数を決定してもよい。
【００７５】
例えば、生成装置１００は、階層数が所定の閾値以下となるように、各階層に属するノードの数を決定してもよい。例えば、生成装置１００は、対象となるオブジェクト数（ノード数）が１００万であり、階層数の閾値が「５」である場合、各階層に属するノード数の平均が「２０万（＝１００万／５）」になるように、各階層に属するノードの数を決定してもよい。なお、生成装置１００は、階層が下位になるほど属するノード数が多くなるように各階層のノード数を決定してもよいし、階層が下位になるほど属するノード数が少なくなるように各階層のノード数を決定してもよい。
【００７６】
そして、生成装置１００は、階層に属するノード数のノードを選択する。図１０の例では、生成装置１００は、階層に属するノード数のノードをランダムに選択するものとする。なお、生成装置１００は、階層に属するノード数のノードをランダムに選択した後、ノード間の距離が予め規定された距離よりも近い場合には、一方を再度ランダムに選択し直しても良い。また、生成装置１００は、各ノードがそれぞれ最も遠くなるように選択しても良い。また、生成装置１００は、クラスタリングを行い各クラスタの中心に最も近いノードを選択しても良い。例えば、生成装置１００は、図１０中ステップＳ４２に示すように、ノードＮ２、Ｎ３の２つのノードを第２階層に属する対象ノードとして選択する。
【００７７】
そして、生成部１３３は、設定中の階層よりも上位の階層に属するノード群のうち、対象ノードとの間の距離が近い方から所定数のノードからの有向エッジを対象ノードに連結する（ステップＳ２０５）。図１０の例では、生成装置１００は、所定数を「２」とし、設定中の階層よりも上位の階層に属するノード群のうち、対象ノードとの間の距離が近い方から２つのノードからの有向エッジを対象ノードに連結する場合を示す。
【００７８】
ここで、図１０中のグラフ情報ＧＲ４１−１に示すように、第２階層よりも上位の階層（第１階層）に属するノード群にはルートノードであるノードＮ１のみが含まれる。この場合、生成装置１００は、図１０中ステップＳ４３に示すように、ノードＮ１からの有向エッジをノードＮ２に連結すると決定し、ノードＮ１からの有向エッジをノードＮ３に連結すると決定する。例えば、生成装置１００は、生成途中におけるインデックス情報等のグラフ情報を用いて、対象ノードの近接検索を行うことにより、対象ノードに連結するノードを決定してもよい。
【００７９】
このように、生成装置１００は、処理対象となっている階層よりも上位の階層に属するノードのうち、所定数のノードからの有向エッジを対象ノードに連結する連結処理を行う。なお、生成装置１００は、処理対象となっている階層よりも上位の階層に属するノード数が、所定数に達しない場合、処理対象となっている階層よりも上位の階層に属する全ノードからの有向エッジを対象ノードに連結してもよい。図１０の例では、第２階層よりも上位の階層に１つのノードＮ１のみしか属しないため、第２の階層のノードＮ２、Ｎ３には、ノードＮ１からの有向エッジを連結すると決定する。
【００８０】
そして、生成装置１００は、図１０中ステップＳ４４に示すように、ノードＮ１からの有向エッジをノードＮ２に連結し、ノードＮ１からの有向エッジをノードＮ３に連結する。このように、生成装置１００は、同じ階層のノードに関する連結処理を一括して行うことにより、処理の高速化を図ることができる。
【００８１】
そして、生成部１３３は、未処理ノードが有る場合（ステップＳ２０６：Ｙｅｓ）、設定中の階層をその直下の階層に更新し（ステップＳ２０７）、ステップＳ２０３に戻って処理を繰り返す。例えば、第２階層に属するノードＮ２、Ｎ３を対象ノードとして連結処理後において、生成装置１００は、設定中の階層を第２階層の直下の第３階層に更新する。
【００８２】
そして、生成部１３３は、未処理ノードから設定中の階層に属する対象ノードを選択する（ステップＳ２０４）。図１０の例では、第２階層に属するノードＮ２、Ｎ３の連結処理後において、ノードＮ４〜Ｎ１８のノードが未処理ノードとなる。
【００８３】
図１０の例では、生成装置１００は、第３階層の直近の上位の第２階層のノード数が「２」であるため、第３階層に属するノード数を「４（＝２×２）」に決定する。例えば、生成装置１００は、図１中ステップＳ４５に示すように、ノードＮ４、Ｎ５、Ｎ６、Ｎ７の４つのノードを第３階層に属するノードとして選択する。
【００８４】
そして、生成部１３３は、設定中の階層よりも上位の階層に属するノード群のうち、対象ノードとの間の距離が近い方から所定数のノードからの有向エッジを対象ノードに連結する（ステップＳ２０５）。図１０の例では、生成装置１００は、所定数を「２」とし、設定中の階層よりも上位の階層に属するノード群のうち、対象ノードとの間の距離が近い方から２つのノードからの有向エッジを対象ノードに連結する場合を示す。
【００８５】
ここで、図１０中のグラフ情報ＧＲ４１−２に示すように、第３階層よりも上位の階層（第１階層、第２階層）に属するノード群にはノードＮ１〜Ｎ３の３つが含まれる。この場合、生成装置１００は、ノードＮ１〜Ｎ３のうち、ノードＮ４〜Ｎ７の各々との間の距離が近い方から２つのノードからの有向エッジを各対象ノードに連結すると決定する。例えば、生成装置１００は、図１０中ステップＳ４６に示すように、ノードＮ２からの有向エッジをノードＮ４に連結すると決定し、ノードＮ１からの有向エッジをノードＮ５に連結すると決定する。また、生成装置１００は、ノードＮ３からの有向エッジをノードＮ４に連結すると決定し、ノードＮ２からの有向エッジをノードＮ５に連結すると決定する。また、生成装置１００は、ノードＮ２、Ｎ３からの有向エッジをノードＮ６に連結すると決定し、ノードＮ１、Ｎ３からの有向エッジをノードＮ７に連結すると決定する。
【００８６】
そして、生成装置１００は、図１０中ステップＳ４７に示すように、ステップＳ４６で決定した有向エッジにより各ノード間を連結する。
【００８７】
なお、生成装置１００は、対象ノードが属する階層の直近の上位の階層のみに属するノードからの有向エッジを対象ノードに連結してもよい。例えば、生成装置１００は、第３階層のノードＮ４〜Ｎ７が対象ノードである場合、第３階層の直近の上位の階層である第２階層に属するノードＮ２、Ｎ３からの有向エッジを対象ノードに連結してもよい。すなわち、生成装置１００は、第３階層のノードＮ４〜Ｎ７が対象ノードである場合、第１階層に属するノードＮ１を対象から除いてもよい。
【００８８】
そして、生成部１３３は、未処理ノードが有る場合（ステップＳ２０６：Ｙｅｓ）、設定中の階層をその直下の階層に更新し（ステップＳ２０７）、ステップＳ２０３に戻って処理を繰り返す。例えば、第３階層に属するノードＮ４〜Ｎ７を対象ノードとして連結処理後において、生成装置１００は、設定中の階層を第３階層の直下の第４階層に更新する。そして、生成装置１００は、第３階層に属するノードＮ４〜Ｎ７を対象ノードとして連結処理後において、未処理ノードであるノードＮ８〜Ｎ１８を対象ノードとして、順次連結処理を行う。このように、階層ごとに連結処理を繰り返すことにより、生成装置１００は、グラフ情報ＧＲ４１を生成する。
【００８９】
そして、生成部１３３は、未処理ノードが無い場合（ステップＳ２０６：Ｎｏ）、処理を終了する。例えば、生成装置１００は、生成したグラフ情報を用いて種々のサービスを提供してもよい。例えば、提供部１３４は、生成部１３３により生成されたグラフ情報を外部の情報処理装置へ提供してもよい。例えば、提供部１３４は、グラフ情報ＧＲ４１を所定の検索サービスを提供する情報処理装置へ提供してもよい。また、生成装置１００が検索サービスを提供する場合、提供部１３４は、取得部１３１により端末装置から取得された検索クエリに対応する検索結果を、端末装置へ提供してもよい。
【００９０】
例えば、生成装置１００は、以下のような処理行う。例えば、生成装置１００は、登録するオブジェクトに対応するノード集合（以下、「集合Ｓ」ともいう）から任意のノードを選択してルートノードとし、集合Ｓから除外する。そして、生成装置１００は、上位層のノード数ｎ（ｉ−１）から当該層のノード数ｎ（ｉ）を算出する。ここでいう、「ノード数ｎ（＊）」の「関数ｎ（）」は「＊（任意の数値）」の階層に対応するノード数を出力する関数を意味する。例えば、「ｎ（２）」は、第２階層のノード数（図８の例では、「２」）に対応する。例えば、生成装置１００は、「ｎ（ｉ）＝ｎ（ｉ−１）×２」の関係を満たすような「関数ｎ（）」を用いてもよい。
【００９１】
そして、生成装置１００は、ｎ（ｉ）個のオブジェクトを集合Ｓから任意に選択して、サブ集合Ｌとし、当該層のノードとした上で、集合Ｓからサブ集合Ｌに属するノードを除外する。そして、生成装置１００は、サブ集合Ｌから任意の１オブジェクト（ノード）を取得する。当該層のノードを除外した、すなわち、上位層以上ノードからｋ個のノードを近傍検索し、ｋ個の検索されたノードから当該のノードへエッジ（リンク）をこの時点では設定せずに、設定情報として記録する。
【００９２】
そして、生成装置１００は、サブ集合Ｌが空でなければサブ集合Ｌから任意の１ノードを取得し、上述した設定情報を記憶する処理を繰り返す。また、生成装置１００は、サブ集合Ｌが空であれば記録されたエッジの設定情報を元に１階層分のエッジを設定する。
【００９３】
そして、生成装置１００は、集合Ｓが空でなければ１階層くだった上で、新たにサブ集合Ｌを選択する処理から処理を、集合Ｓが空になるまで、繰り返す。このように、生成装置１００は、階層を１階層ずつ追加するため、生成されるグラフ情報における最大深さが保証される。
【００９４】
〔４．検索例〕
ここで、上述したグラフ情報を用いた検索の一例を示す。なお、生成したグラフ情報を用いた検索は下記に限らず、種々の手順により行われてもよい。この点について、図１１を一例として説明する。図１１は、グラフ情報を用いた検索処理の一例を示すフローチャートである。また、以下でいうオブジェクトは、ノードと読み替えてもよい。なお、以下では、生成装置１００が検索処理を行うものとして説明するが、検索処理は他の装置により行われてもよい。
【００９５】
ここでは、近傍オブジェクト集合Ｎ（Ｇ，ｙ）は、ノードｙに付与されているエッジにより関連付けられている近傍のオブジェクトの集合である。「Ｇ」は、所定のグラフ情報（例えば、グラフ情報ＧＲ１１やグラフ情報ＧＲ４１等）であってもよい。例えば、生成装置１００は、ｋ近傍検索処理を実行する。
【００９６】
例えば、生成装置１００は、超球の半径ｒを∞（無限大）に設定し（ステップＳ３００）、既存のオブジェクト集合から部分集合Ｓを抽出する（ステップＳ３０１）。例えば、生成装置１００は、ルートノードとして選択されたオブジェクト（ノード）を部分集合Ｓとして抽出してもよい。また、例えば、超球とは、検索範囲を示す仮想的な球である。なお、ステップＳ３０１において抽出されたオブジェクト集合Ｓに含まれるオブジェクトは、同時に検索結果のオブジェクト集合Ｒの初期集合にも含められる。
【００９７】
次に、生成装置１００は、オブジェクト集合Ｓに含まれるオブジェクトの中で、検索クエリオブジェクトをｙとするとオブジェクトｙとの距離が最も短いオブジェクトを抽出し、オブジェクトｓとする（ステップＳ３０２）。例えば、生成装置１００は、ルートノードとして選択されたオブジェクト（ノード）のみがSの要素の場合には、結果的にルートノードがオブジェクトｓとして抽出される。次に、生成装置１００は、オブジェクトｓをオブジェクト集合Ｓから除外する（ステップＳ３０３）。
【００９８】
次に、生成装置１００は、オブジェクトｓとオブジェクトｙとの距離ｄ（ｓ，ｙ）がｒ（１＋ε）を超えるか否かを判定する（ステップＳ３０４）。ここで、εは拡張要素であり、ｒ（１＋ε）は、探索範囲（この範囲内のノードのみを探索する。検索範囲よりも大きくすることで精度を高めることができる）の半径を示す値である。オブジェクトｓとオブジェクトｙとの距離ｄ（ｓ，ｙ）がｒ（１＋ε）を超える場合（ステップＳ３０４：Ｙｅｓ）、生成装置１００は、オブジェクト集合Ｒをオブジェクトｙの近傍オブジェクト集合として出力し（ステップＳ３０５）、処理を終了する。
【００９９】
オブジェクトｓと検索クエリオブジェクトｙとの距離ｄ（ｓ，ｙ）がｒ（１＋ε）を超えない場合（ステップＳ３０４：Ｎｏ）、生成装置１００は、オブジェクトｓの近傍オブジェクト集合Ｎ（Ｇ，ｓ）の要素であるオブジェクトの中からオブジェクト集合Ｃに含まれないオブジェクトを一つ選択し、選択したオブジェクトｕを、オブジェクト集合Ｃに格納する（ステップＳ３０６）。オブジェクト集合Ｃは、重複検索を回避するために便宜上設けられるものであり、処理開始時には空集合に設定される。
【０１００】
次に、生成装置１００は、オブジェクトｕとオブジェクトｙとの距離ｄ（ｕ，ｙ）がｒ（１＋ε）以下であるか否かを判定する（ステップＳ３０７）。オブジェクトｕとオブジェクトｙとの距離ｄ（ｕ，ｙ）がｒ（１＋ε）以下である場合（ステップ３０７：Ｙｅｓ）、生成装置１００は、オブジェクトｕをオブジェクト集合Ｓに追加する（ステップＳ３０８）。
【０１０１】
次に、生成装置１００は、オブジェクトｕとオブジェクトｙとの距離ｄ（ｕ，ｙ）がｒ以下であるか否かを判定する（ステップＳ３０９）。オブジェクトｕとオブジェクトｙとの距離ｄ（ｕ，ｙ）がｒを超える場合（ステップＳ３０９：Ｎｏ）、生成装置１００は、ステップＳ３１５の判定（処理）を行う。
【０１０２】
オブジェクトｕとオブジェクトｙとの距離ｄ（ｕ，ｙ）がｒ以下である場合（ステップＳ３０９：Ｙｅｓ）、生成装置１００は、オブジェクトｕをオブジェクト集合Ｒに追加する（ステップＳ３１０）。そして、生成装置１００は、オブジェクト集合Ｒに含まれるオブジェクト数がｋｓを超えるか否かを判定する（ステップＳ３１１）。所定数ｋｓは、任意に定められる自然数である。例えば、ｋｓ＝２であってもよい。
【０１０３】
オブジェクト集合Ｒに含まれるオブジェクト数がｋｓを超える場合（ステップＳ３１１：Ｙｅｓ）、生成装置１００は、オブジェクト集合Ｒに含まれるオブジェクトの中でオブジェクトｙとの距離が最も長いオブジェクトを、オブジェクト集合Ｒから除外する（ステップＳ３１２）。
【０１０４】
次に、生成装置１００は、オブジェクト集合Ｒに含まれるオブジェクト数がｋｓと一致するか否かを判定する（ステップＳ３１３）。オブジェクト集合Ｒに含まれるオブジェクト数がｋｓと一致する場合（ステップＳ３１３：Ｙｅｓ）、生成装置１００は、オブジェクト集合Ｒに含まれるオブジェクトの中でオブジェクトｙとの距離が最も長いオブジェクトと、オブジェクトｙとの距離を、新たなｒに設定する（ステップＳ３１４）。
【０１０５】
そして、生成装置１００は、オブジェクトｓの近傍オブジェクト集合Ｎ（Ｇ，ｓ）の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Ｃに格納し終えたか否かを判定する（ステップＳ３１５）。オブジェクトｓの近傍オブジェクト集合Ｎ（Ｇ，ｓ）の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Ｃに格納し終えていない場合、生成装置１００は、ステップＳ３０６に戻って処理を繰り返す。
【０１０６】
オブジェクトｓの近傍オブジェクト集合Ｎ（Ｇ，ｓ）の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Ｃに格納し終えた場合生成装置１００は、オブジェクト集合Ｓが空集合であるか否かを判定する（ステップＳ３１６）。オブジェクト集合Ｓが空集合でない場合、生成装置１００は、ステップＳ３０２に戻って処理を繰り返す。また、オブジェクト集合Ｓが空集合である場合（ステップＳ３１６：Ｙｅｓ）、生成装置１００は、オブジェクト集合Ｒを出力し、処理を終了する（ステップＳ３１７）。例えば、生成装置１００は、オブジェクト集合Rに含まれるオブジェクト（ノード）を検索クエリ（入力オブジェクトｙ）に対応する検索結果として、検索を行った端末装置等へ提供してもよい。
【０１０７】
〔５．効果〕
上述したように、生成装置１００は、データ検索における検索対象の各々に対応する複数のノードを含むノード群を取得する。そして、生成装置１００は、取得したノード群のうち、所定のノードを検索時に最初の起点として用いるルートノードとして選択する。そして、生成装置１００は、ノード群のうち、ルートノード、及びルートノードから有向エッジを辿ることにより到達可能なノードを含む処理済ノード群以外のノードを対象ノードとして選択し、処理済ノード群のうち、所定数のノードからの有向エッジを対象ノードに連結する連結処理により、グラフ情報を生成する。このため、生成装置１００は、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
【０１０８】
また、生成装置１００は、処理済ノード群のうち、対象ノードからの距離に応じて選択される所定数のノードからの有向エッジを対象ノードに連結する連結処理により、グラフ情報を生成する。このため、生成装置１００は、ノード間の距離に応じて有向エッジを連結することにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
【０１０９】
また、生成装置１００は、処理済ノード群のうち、対象ノードとの間の距離が近い方から所定数のノードからの有向エッジを対象ノードに連結する連結処理により、グラフ情報を生成する。このため、生成装置１００は、距離が近いエッジ間を有向エッジで連結することにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
【０１１０】
また、生成装置１００は、連結処理の繰り返しにおいて、連結処理の回数に応じて増加する階層に属するノードとして、対象ノードに有向エッジを連結する連結処理により、グラフ情報を生成する。このため、生成装置１００は、階層構造を有するグラフ情報を生成することにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
【０１１１】
また、生成装置１００は、ルートノードを最上位の階層のノードとし、対象ノードの階層を処理済ノード群のノードの階層よりも下位の階層のノードとする連結処理により、グラフ情報を生成する。このため、生成装置１００は、階層構造に基づいてエッジの連結を行うことにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
【０１１２】
また、生成装置１００は、階層数が所定の閾値以下となるように、連結処理を行うことにより、グラフ情報を生成する。このため、生成装置１００は、階層数が所定の範囲内に収まるように生成処理を行うことにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
【０１１３】
また、生成装置１００は、階層数が所定の閾値以下となるように各連結処理において対象ノードの数を決定することにより、グラフ情報を生成する。このため、生成装置１００は、階層数が所定の範囲内に収まるように各階層のノード数を決定することにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
【０１１４】
また、生成装置１００は、階層の各々に含まれるノードの数が変動するようにグラフ情報を生成する。このため、生成装置１００は、階層の各々に含まれるノードの数が変動させることにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
【０１１５】
また、生成装置１００は、対象ノードが属する階層よりも上位の階層に属するノードからの有向エッジを対象ノードに連結することにより、グラフ情報を生成する。このため、生成装置１００は、階層構造に基づいてエッジの連結を行うことにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
【０１１６】
また、生成装置１００は、対象ノードが属する階層の直近の上位の階層に属するノードからの有向エッジを対象ノードに連結することにより、グラフ情報を生成する。このため、生成装置１００は、階層構造に基づいてエッジの連結を行うことにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
【０１１７】
また、生成装置１００は、連結処理を、ノード群において他のノードに連結されていない未処理ノードがなくなるまで繰り返すことにより、グラフ情報を生成する。このため、生成装置１００は、エッジによりルートノードから全ノードへ到達可能なグラフ情報を生成することができる。
【０１１８】
また、生成装置１００は、ノード群のうち、一のノードをルートノードとして選択する。このため、生成装置１００は、ルートノードを１つにすることにより、データ量の増大を抑制しつつ、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。
【０１１９】
また、生成装置１００は、ノード群のうち、複数のノードをルートノードとして選択する。このため、生成装置１００は、ルートノードを複数にすることにより、所定の対象に関する効率的な検索を可能にするグラフ情報を生成することができる。例えば、生成装置１００は、複数の起点から並列して検索を行うことができるため、検索精度の向上を図ることが可能となる。
【０１２０】
また、生成装置１００は、対象ノードが複数のルートノードの各々に対応する複数のグラフ情報のいずれかに含まれるように連結処理を行うことにより、複数のルートノードの各々に対応する複数のグラフ情報を生成することにより、検索精度の向上を図ることが可能となる。
【０１２１】
また、生成装置１００は、処理済ノード群以外のノードのうち、一の連結処理の直前の連結処理における対象ノードに対して最も近いノード、または、一の連結処理の直前の連結処理における対象ノードに対して最も遠いノードを、一の連結処理における対象ノードとして選択することにより、検索処理の高速化が期待できる。
【０１２２】
また、生成装置１００は、処理済ノード群に関するインデックス情報を用いて対象ノードの近傍検索を行うことにより、グラフ情報を生成することにより、検索時と同様の近傍検索の処理を行うことにより、高速化することができる。
【０１２３】
また、上記実施形態及び変形例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、各図に示した各種情報は、図示した情報に限られない。
【０１２４】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【０１２５】
また、上述してきた実施形態及び変形例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【０１２６】
また、上述してきた「部（section、module、unit）」は、「手段」や「回路」などに読み替えることができる。例えば、取得部は、取得手段や取得回路に読み替えることができる。
【符号の説明】
【０１２７】
１  情報処理システム
１００  生成装置
１２１  オブジェクト情報記憶部
１２２  グラフ情報記憶部
１３０  制御部
１３１  取得部
１３２  選択部
１３３  生成部
１３４  提供部
Ｎ  ネットワーク
【図１】
2018156458.tif 000003
【図２】
2018156458.tif 000004
【図３】
2018156458.tif 000005
【図４】
2018156458.tif 000006
【図５】
2018156458.tif 000007
【図６】
2018156458.tif 000008
【図７】
2018156458.tif 000009
【図８】
2018156458.tif 000010
【図９】
2018156458.tif 000011
【図１０】
2018156458.tif 000012
【図１１】
2018156458.tif 000013