(57)【要約】【課題】所定の対象に関する効率的な検索を可能にする。【解決手段】本願に係る生成装置は、取得部と、第１選択部と、第２選択部と、生成部とを有する。取得部は、データ検索の対象となる複数のノードの情報と、当該複数のノード間を連結する有向エッジ群である第１エッジ群の情報とを含む第１グラフと、複数のノードの情報を含む第２グラフを取得する。第１選択部は、複数のノードのうち、第１グラフにおいて他のノードを終点とする出力エッジの数に基づいて第１選択ノードを選択する。第２選択部は、第１グラフにおいて第１選択ノードを始点とする出力エッジが連結される対象ノードのうち、当該出力エッジの長さに基づいて第２選択ノードを選択する。生成部は、第２グラフにおいて、第１選択ノードを始点とする出力エッジの数が所定の閾値未満である場合、出力エッジが第２エッジとして追加された第２グラフを生成する。【選択図】図３
2019144780.tif 000002
【特許請求の範囲】
【請求項１】
データ検索の対象となる複数のノードの情報と、当該複数のノード間を連結する有向エッジ群である第１エッジ群の情報とを含む第１グラフと、前記複数のノードの情報を含む第２グラフを取得する取得部と、
前記複数のノードのうち、前記第１グラフにおいて他のノードを終点とする出力エッジの数に基づいて第１選択ノードを選択する第１選択部と、
前記第１グラフにおいて前記第１選択ノードを始点とする出力エッジが連結される対象ノードのうち、当該出力エッジの長さに基づいて第２選択ノードを選択する第２選択部と、
前記第２グラフにおいて、前記第１選択ノードを始点とする出力エッジの数が所定の閾値未満である場合、前記第１エッジ群において前記第１選択ノードを始点とし前記第２選択ノードを終点とする出力エッジを前記第２グラフに第２エッジの情報として追加する更新処理により、前記第２エッジが追加された第２グラフを生成する生成部と、
を備えることを特徴とする生成装置。
【請求項２】
前記生成部は、
前記第２グラフにおいて、前記第２選択ノードを終点とする入力エッジの数が他の閾値未満であり、前記第１選択ノードを始点とする出力エッジの数が前記所定の閾値未満である場合、前記更新処理により、前記第２エッジが追加された第２グラフを生成する
ことを特徴とする請求項１に記載の生成装置。
【請求項３】
前記取得部は、
所定の基準に基づいて生成された近傍グラフであって、前記複数のノード間を連結する有向エッジ群である所定のエッジ群で連結された近傍グラフのうち、前記所定のエッジ群の各エッジの向きを反転させた前記第１エッジ群の情報を含む転置グラフである前記第１グラフを取得する
ことを特徴とする請求項１または請求項２に記載の生成装置。
【請求項４】
前記第１選択部は、
前記複数のノードのうち、前記第１グラフにおいて他のノードを終点とする出力エッジの数が少ないノードから順に第１選択ノードとして選択する
ことを特徴とする請求項１〜３のいずれか１項に記載の生成装置。
【請求項５】
前記第２選択部は、
前記対象ノードのうち、各ノードから前記第１選択ノードを始点とする出力エッジが短いノードから順に第２選択ノードとして選択する
ことを特徴とする請求項１〜４のいずれか１項に記載の生成装置。
【請求項６】
前記生成部は、
前記第１選択部により選択される前記第１選択ノードと、前記第２選択部により選択される前記第２選択ノードとの組合せごとに前記更新処理を繰り返すことにより、前記第２エッジが追加された第２グラフを生成する
ことを特徴とする請求項１〜５のいずれか１項に記載の生成装置。
【請求項７】
前記生成部は、
前記更新処理時の前記第２グラフに含まれる前記第２エッジの情報を対象として、前記更新処理を繰り返すことにより、前記第２エッジが追加された第２グラフを生成する
ことを特徴とする請求項６に記載の生成装置。
【請求項８】
前記生成部は、
前記第２グラフにおける前記複数のノードのうち、入力エッジが連結されていないノードである入力無ノードがある場合、前記第１グラフにおいて当該ノードに連結される入力エッジのうち、長さが所定の基準を満たすエッジを、当該ノードの入力エッジとして前記第２エッジに追加する入力追加処理により、前記第２エッジが追加された第２グラフを生成する
ことを特徴とする請求項１〜７のいずれか１項に記載の生成装置。
【請求項９】
前記生成部は、
前記第１グラフにおいて前記入力無ノードに対応するノードに連結される入力エッジのうち、長さが最も短いエッジを、当該ノードの入力エッジとして前記第２エッジに追加する入力追加処理により、前記第２エッジが追加された第２グラフを生成する
ことを特徴とする請求項８に記載の生成装置。
【請求項１０】
前記生成部は、
前記更新処理時において前記入力追加処理を行うことにより、前記第２エッジが追加された第２グラフを生成する
ことを特徴とする請求項８または請求項９に記載の生成装置。
【請求項１１】
前記生成部は、
前記更新処理の繰り返し終了後において前記入力追加処理を行うことにより、前記第２エッジが追加された第２グラフを生成する
ことを特徴とする請求項８または請求項９に記載の生成装置。
【請求項１２】
コンピュータが実行する生成方法であって、
データ検索の対象となる複数のノードの情報と、当該複数のノード間を連結する有向エッジ群である第１エッジ群の情報とを含む第１グラフと、前記複数のノードの情報を含む第２グラフを取得する取得工程と、
前記複数のノードのうち、前記第１グラフにおいて他のノードを終点とする出力エッジの数に基づいて第１選択ノードを選択する第１選択工程と、
前記第１グラフにおいて前記第１選択ノードを始点とする出力エッジが連結される対象ノードのうち、当該出力エッジの長さに基づいて第２選択ノードを選択する第２選択工程と、
前記第２グラフにおいて、前記第１選択ノードを始点とする出力エッジの数が所定の閾値未満である場合、前記第１エッジ群において前記第１選択ノードを始点とし前記第２選択ノードを終点とする出力エッジを前記第２グラフに第２エッジの情報として追加する更新処理により、前記第２グラフを生成する生成工程と、
を含むことを特徴とする生成方法。
【請求項１３】
データ検索の対象となる複数のノードの情報と、当該複数のノード間を連結する有向エッジ群である第１エッジ群の情報とを含む第１グラフと、前記複数のノードの情報を含む第２グラフを取得する取得手順と、
前記複数のノードのうち、前記第１グラフにおいて他のノードを終点とする出力エッジの数に基づいて第１選択ノードを選択する第１選択手順と、
前記第１グラフにおいて前記第１選択ノードを始点とする出力エッジが連結される対象ノードのうち、当該出力エッジの長さに基づいて第２選択ノードを選択する第２選択手順と、
前記第２グラフにおいて、前記第１選択ノードを始点とする出力エッジの数が所定の閾値未満である場合、前記第１エッジ群において前記第１選択ノードを始点とし前記第２選択ノードを終点とする出力エッジを前記第２グラフに第２エッジの情報として追加する更新処理により、前記第２グラフを生成する生成手順と、
をコンピュータに実行させることを特徴とする生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生成装置、生成方法、及び生成プログラムに関する。
【背景技術】
【０００２】
従来、種々の情報を検索する技術が提供されている。例えば、無向エッジによって生成されたグラフデータを用いて検索を行う技術が提供されている。また、このような技術は、例えば画像検索等に用いられる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−０９０３５１号公報
【特許文献２】特許第５２０８００１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記の従来技術では、所定の対象に関する効率的な検索を可能にすることが難しい場合がある。例えば、各対象に対応する各ノードが無向エッジにより連結されたグラフデータを用いて検索を行う場合、遠回りな経路の探索が生じる等により、処理時間等のコストを抑制することが難しい。
【０００５】
本願は、上記に鑑みてなされたものであって、所定の対象に関する効率的な検索を可能にする生成装置、生成方法、及び生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本願に係る生成装置は、データ検索の対象となる複数のノードの情報と、当該複数のノード間を連結する有向エッジ群である第１エッジ群の情報とを含む第１グラフと、前記複数のノードの情報を含む第２グラフを取得する取得部と、前記複数のノードのうち、前記第１グラフにおいて他のノードを終点とする出力エッジの数に基づいて第１選択ノードを選択する第１選択部と、前記第１グラフにおいて前記第１選択ノードを始点とする出力エッジが連結される対象ノードのうち、当該出力エッジの長さに基づいて第２選択ノードを選択する第２選択部と、前記第２グラフにおいて、前記第１選択ノードを始点とする出力エッジの数が所定の閾値未満である場合、前記第１エッジ群において前記第１選択ノードを始点とし前記第２選択ノードを終点とする出力エッジを前記第２グラフに第２エッジの情報として追加する更新処理により、前記第２エッジが追加された第２グラフを生成する生成部と、を備えたことを特徴とする。
【発明の効果】
【０００７】
実施形態の一態様によれば、所定の対象に関する効率的な検索を可能にすることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施形態に係る生成処理の一例を示す図である。
【図２】図２は、実施形態に係る生成システムの構成例を示す図である。
【図３】図３は、実施形態に係る生成装置の構成例を示す図である。
【図４】図４は、実施形態に係るオブジェクト情報記憶部の一例を示す図である。
【図５】図５は、実施形態に係る基グラフデータ記憶部の一例を示す図である。
【図６】図６は、実施形態に係る第１グラフデータ記憶部の一例を示す図である。
【図７】図７は、実施形態に係る閾値情報記憶部の一例を示す図である。
【図８】図８は、実施形態に係る第２グラフデータ記憶部の一例を示す図である。
【図９】図９は、実施形態に係る生成処理の一例を示すフローチャートである。
【図１０】図１０は、実施形態に係る入力追加処理の一例を示すフローチャートである。
【図１１】図１１は、実施形態に係る入力追加処理の一例を示す図である。
【図１２】図１２は、実施形態に係る比較例を示す図である。
【図１３】図１３は、グラフデータを用いた検索処理の一例を示すフローチャートである。
【図１４】図１４は、生成装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。
【発明を実施するための形態】
【０００９】
以下に、本願に係る生成装置、生成方法、及び生成プログラムを実施するための形態（以下、「実施形態」と呼ぶ）について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る生成装置、生成方法、及び生成プログラムが限定されるものではない。また、以下の各実施形態において同一の部位には同一の符号を付し、重複する説明は省略される。
【００１０】
（実施形態）
〔１．生成処理〕
図１を用いて、実施形態に係る生成処理の一例について説明する。図１は、実施形態に係る生成処理の一例を示す図である。図１では、生成装置１００（図３参照）が与えられたグラフデータ（以下、「第１グラフデータ」ともいう）に基づいて、新たなグラフデータ（以下、「第２グラフデータ」ともいう）を生成する場合を示す。なお、図１の例では、生成装置１００は、所定のグラフデータ（以下、「基グラフデータ」ともいう）から第１グラフデータを生成するが詳細は後述する。また、以下では、グラフデータを単にグラフと記載する場合がある。例えば、第１グラフデータを第１グラフと記載し、第２グラフデータを第２グラフとを記載する場合がある。すなわち、図１では、生成装置１００が、基グラフデータから第１グラフデータを生成し、生成した第１グラフデータから第２グラフデータを生成する場合を示す。なお、対象とする情報（オブジェクト）は、ベクトルとして表現可能であれば、どのような情報であってもよい。なお、以下では、画像情報を対象としたベクトル情報について説明するが、ベクトル情報の対象は、動画情報や音声情報等の他の対象であってもよい。
【００１１】
また、生成装置１００は、図１に示すように、グラフデータを対象に生成処理を行う。なお、ここでいう、有向エッジとは、一方向にしかデータを辿れないエッジを意味する。以下では、エッジにより辿る元、すなわち始点となるノードを参照元とし、エッジにより辿る先、すなわち終点となるノードを参照先とする。例えば、所定のノード「Ａ」から所定のノード「Ｂ」に連結される有向エッジとは、参照元をノード「Ａ」とし、参照先をノード「Ｂ」とするエッジであることを示す。
【００１２】
以下では、このようにノード「Ａ」を参照元とするエッジをノード「Ａ」の出力エッジという。また、以下では、このようにノード「Ｂ」を参照先とするエッジをノード「Ｂ」の入力エッジという。すなわち、ここでいう出力エッジ及び入力エッジとは、一の有向エッジをその有向エッジが連結する２つのノードのうち、いずれのノードを中心として捉えるかの相違であり、一の有向エッジが出力エッジ及び入力エッジになる。すなわち、出力エッジ及び入力エッジは、相対的な概念であって、一の有向エッジについて、参照元となるノードを中心として捉えた場合に出力エッジとなり、参照先となるノードを中心として捉えた場合に入力エッジとなる。なお、本実施形態においては、エッジについては、出力エッジや入力エッジ等の有向エッジを対象とするため、以下では、有向エッジを単に「エッジ」と記載する場合がある。
【００１３】
また、ここでいう、各ノードは、各オブジェクトに対応する。例えば、画像から抽出された複数の局所特徴量のそれぞれがオブジェクトであってもよい。また、例えば、オブジェクト間の距離が定義された種々のデータがオブジェクトであってもよい。
【００１４】
生成装置１００は、例えば数百万〜数億単位の膨大な画像情報に対応するノードを対象に処理を行うが、図面においてはその一部のみを図示する。図１の例では、説明を簡単にするために、１２個のノードのみを図示して処理の概要を説明する。例えば、生成装置１００は、図１中のノードＮ１〜Ｎ１２に示すような複数のノードを含み、エッジを含まない第２グラフデータＧＲ１２−１から開始し、順次エッジを追加することにより第２グラフデータＧＲ１２を生成する。
【００１５】
また、このように「ノードＮ＊（＊は任意の数値）」と記載した場合、そのノードはノードＩＤ「Ｎ＊」により識別されるノードであることを示す。例えば、「ノードＮ１」と記載した場合、そのノードはノードＩＤ「Ｎ１」により識別されるノードである。
【００１６】
また、このように「エッジＥ＊（＊は任意の数値）」と記載した場合、そのエッジはエッジＩＤ「Ｅ＊」により識別されるエッジであることを示す。例えば、「エッジＥ２」と記載した場合、そのエッジはエッジＩＤ「Ｅ２」により識別されるエッジである。例えば、ノードＮ１を参照元とし、ノードＮ２を参照先として連結されるエッジＥ２により、ノードＮ１からノードＮ２に辿ることが可能となる。この場合、有向エッジであるエッジＥ２は、ノードＮ１を中心として識別される場合、出力エッジとなり、ノードＮ２を中心として識別される場合、入力エッジとなる。言い換えると、有向エッジであるエッジＥ２は、ノードＮ１側からの視点でとらえた場合、自身から他のエッジへ矢印が向いているエッジ、すなわち外向きエッジとなり、ノードＮ２側からの視点でとらえた場合、自身の方に矢印が向いているエッジ、すなわち内向きエッジとなる。つまり、ここでいう出力エッジは、外向きエッジと読み替えることができ、入力エッジは、内向きエッジと読み替えることができる。
【００１７】
また、図１に示す空間情報ＶＳ１−１〜ＶＳ１−６は、グラフデータの生成過程を模式的に示す図であり、空間情報ＶＳ１−１〜ＶＳ１−６に示す空間は、同一の空間であってもよい。また、以下では、空間情報ＶＳ１−１〜ＶＳ１−６について、特に区別なく説明する場合には、空間情報ＶＳ１と記載する。
【００１８】
また、図１中の空間情報ＶＳ１は、ユークリッド空間であってもよい。また、図１に示す空間情報ＶＳ１は、各ベクトル間の距離等の説明のための概念的な図であり、空間情報ＶＳ１は、多次元空間である。例えば、図１に示す空間情報ＶＳ１は、平面上に図示するため２次元の態様にて図示されるが、例えば１００次元や１０００次元等の多次元空間であるものとする。
【００１９】
また、図１に示す第２グラフデータＧＲ１２−１〜ＧＲ１２−４は、グラフデータの生成過程を模式的に示す図であり、第２グラフデータＧＲ１２−１〜ＧＲ１２−４は、生成処理により生成される同一のグラフデータである。また、以下では、第２グラフデータＧＲ１２−１〜ＧＲ１２−４について、特に区別なく説明する場合には、第２グラフデータＧＲ１２と記載する。
【００２０】
また、図１に示す例においては、基グラフデータＧＲ１０、第１グラフデータＧＲ１１及び第２グラフデータＧＲ１２−１〜ＧＲ１２−４においては、適宜「ノードＮ＊（＊は任意の数値）」の図示を省略し、取得した各ノードを「○」内に「ノードＮ＊」の「＊」の値を付すことにより表現する。すなわち、「ノードＮ＊」の部分の「＊」が一致するノードに対応する。例えば、空間情報ＶＳ１中の左上の「○」であって、内部に「２」が付された「○」は、ノードＩＤ「Ｎ２」により識別されるノードに対応する。例えば、図１に示す例において、各ノードに対応するベクトルデータは、Ｎ次元の実数値ベクトルであってもよい。
【００２１】
本実施形態においては、空間情報ＶＳ１における各ノードの距離を対応する各オブジェクト間の類似度とする。例えば、各ノードに対応する対象（画像情報）の類似性が、空間情報ＶＳ１内におけるノード間の距離として写像されているものとする。例えば、各ノードに対応する概念間の類似度が各ノード間の距離に写像されているものとする。ここで、図１に示す例においては、空間情報ＶＳ１における各ノード間の距離が短いオブジェクト同士の類似度が高く、空間情報ＶＳ１における各ノード間の距離が長いオブジェクト同士の類似度が低い。例えば、図１中の空間情報ＶＳ１において、ノードＩＤ「Ｎ５」により識別されるノードと、ノードＩＤ「Ｎ８」により識別されるノードとは近接している、すなわち距離が短い。そのため、ノードＩＤ「Ｎ５」により識別されるノードに対応するオブジェクトと、ノードＩＤ「Ｎ８」により識別されるノードに対応するオブジェクトとは類似度が高いことを示す。
【００２２】
また、例えば、図１中の空間情報ＶＳ１において、ノードＩＤ「Ｎ８」により識別されるノードと、ノードＩＤ「Ｎ１２」により識別されるノードとは遠隔にある、すなわち距離が長い。そのため、ノードＩＤ「Ｎ８」により識別されるノードに対応するオブジェクトと、ノードＩＤ「Ｎ１２」により識別されるノードに対応するオブジェクトとは類似度が低いことを示す。なお、類似度を示す指標としての距離は、ベクトル（Ｎ次元ベクトル）間の距離として適用可能であれば、どのような距離であってもよく、例えば、ユークリッド距離やマハラノビス距離やコサイン距離等の種々の距離が用いられてもよい。
【００２３】
また、図１の例では、生成装置１００は、後述する更新処理により、ノードを有向エッジで連結することにより、グラフデータＧＲ１２を生成する。例えば、グラフデータＧＲ１２を用いた検索においては、検索時はグラフ構造型インデックスと同様の処理を行うが、開始位置（起点）は所定のインデックスを用いて決定した起点ノードからスタートしてもよい。また、例えば、生成装置１００が生成したグラフデータＧＲ１２を用いて検索を行う場合、予め決定された起点ノードを起点として検索を行ってもよい。例えば、検索時においては、起点ノードがノードＮ１である場合、ノードＮ１から有向エッジを辿ることにより、ノードＮ２〜Ｎ１２等を検索してもよい。なお、生成装置１００は、検索時において図１３に示すような処理手順により検索を行ってもよいが、詳細は後述する。
【００２４】
ここから、図１を用いて生成処理の詳細を説明する。なお、図１に示す各ステップは、第２グラフデータの生成を説明するための便宜的なステップであり、実際の処理はより詳細な処理ステップにより行われてもよい。なお、生成装置１００が行う生成処理は、図１中の第２グラフデータＧＲ１２−４に示すような第２グラフデータＧＲ１２が生成されれば、どのような処理フローであってもよい。
【００２５】
まず、生成装置１００は、基グラフデータを取得する（ステップＳ１０）。例えば、生成装置１００は、基グラフデータ記憶部１２２から基グラフデータを取得する。図１の例では、生成装置１００は、空間情報ＶＳ１−１に示すような基グラフデータＧＲ１０を取得する。例えば、基グラフデータＧＲ１０は、所定の基準に基づいて生成された近傍グラフであってもよい。例えば、基グラフデータＧＲ１０は、ｋ近傍（k-nearest  neighbor）グラフデータである。図１の例では、基グラフデータＧＲ１０は、ｋが「１０」であり、各ノードから近傍の４１０個のノードに出力エッジが連結されたグラフデータである場合を例に説明する。なお、ｋは「２００」等の種々の値であってもよい。
【００２６】
なお、基グラフデータは、ｋ近傍グラフデータに限らず、近似ｋ近傍グラフデータ等、複数のノードが有向エッジに連結されたグラフであればどのようなグラフデータであってもよい。また、図１では、処理の説明に必要なノード及びエッジのみを図示し、他のノードやエッジについては図示を省略する。例えば、基グラフデータＧＲ１０におけるノードＮ２〜Ｎ４、Ｎ６〜Ｎ８等からの出力エッジについては図示を省略する。
【００２７】
そして、生成装置１００は、基グラフデータから第１グラフデータを生成する（ステップＳ１１）。例えば、生成装置１００は、基グラフデータ中のエッジの向きを反転させることにより、基グラフデータのエッジの向きが逆となった第１グラフデータを生成する。すなわち、生成装置１００は、各ノード等間の距離を変えずに、エッジの向きだけを反転させた第１グラフデータを生成する。例えば、生成装置１００は、基グラフデータにおける一のノードの入力エッジを出力エッジとし、一のノードの出力エッジを入力エッジとすることにより、エッジの向きだけを反転させた第１グラフデータを生成する。
【００２８】
図１の例では、生成装置１００は、基グラフデータＧＲ１０から空間情報ＶＳ１−２に示すような第１グラフデータＧＲ１１を生成する。生成装置１００は、基グラフデータＧＲ１の転置グラフである第１グラフデータＧＲ１１を生成する。例えば、生成装置１００は、図５中の基グラフデータ記憶部１２２に示す各ノードの参照先を始点とし、各ノードを終点として、各エッジの始点と終点を入れ替えることにより、図６中の第１グラフデータ記憶部１２３に示す第１グラフデータを生成する。例えば、生成装置１００は、ノードＮ１を始点とし、ノードＮ２を終点とするエッジＥ２を反転させることにより、空間情報ＶＳ１−２に示すように、ノードＮ２を始点とし、ノードＮ１を終点とするするエッジＥ２−１を含む第１グラフデータＧＲ１１を生成する。例えば、生成装置１００は、種々の従来技術を適宜用いて、グラフデータの転置グラフを生成してもよい。なお、生成装置１００は、基グラフデータＧＲ１０の第１グラフデータＧＲ１１を生成できれば、どのような処理により第１グラフデータＧＲ１１を生成してもよい。
【００２９】
そして、生成装置１００は、第１グラフデータから第２グラフデータを生成する（ステップＳ１２）。まず、生成装置１００は、第１グラフデータからエッジ（第１エッジ）を除いた第２グラフデータを生成する。例えば、生成装置１００は、第１グラフデータからエッジ群（第１エッジ群）を除くことにより、ノードのみを有する第２グラフデータを生成する。図１の例では、生成装置１００は、空間情報ＶＳ１−３に示すように、第１グラフデータＧＲ１１からノードのみを有する第２グラフデータＧＲ１２−１を生成する。生成装置１００は、ノードのみを有する第２グラフデータＧＲ１２−１から開始して、第２グラフデータに条件を満たすエッジ（以下、「第２エッジ」ともいう）を順次追加する。これにより、生成装置１００は、第２エッジ群を含む第２グラフデータを生成する。
【００３０】
そして、生成装置１００は、第２グラフデータにおけるノードのうち、第１グラフデータにおける出力エッジの数に基づいてノード（以下、「第１選択ノード」ともいう）を選択する。そして、生成装置１００は、第１選択ノードからの出力エッジが連結されたノード（以下、「対象ノード」ともいう）のうち、出力エッジの短さ、すなわち第１選択ノードとの距離の近さに基づいて、ノード（以下、「第２選択ノード」ともいう）を選択する。
【００３１】
そして、生成装置１００は、第２グラフにおいて、第２選択ノードを終点とする入力エッジの数が他の閾値（以下、「第１閾値」ともいう）未満であり、第１選択ノードを始点とする出力エッジの数が所定の閾値（以下、「第２閾値」ともいう）未満である場合、第１選択ノードを始点とし第２選択ノードを終点とする出力エッジを第２グラフに追加する。生成装置１００は、上記の更新処理を第１選択ノード毎に繰り返すことにより、第２グラフデータを生成する。図１の例では、閾値一覧ＴＬ１１に示すように、第１閾値「４」未満であり、第２閾値「３」未満である場合を一例として説明する。
【００３２】
例えば、生成装置１００は、第２グラフデータにおけるノードのうち、第１グラフデータにおける出力エッジが少ない方から順に第１選択ノードを選択する。図１の例では、生成装置１００は、一覧情報ＬＴ１１に示すような各ノードＮ１〜Ｎ１２の出力エッジ数に基づいて、第１選択ノードを選択する。
【００３３】
生成装置１００は、最も出力エッジ数が少ない（０本である）ノードＮ１を第１選択ノードとして選択し、更新処理を行う。そして、生成装置１００は、ノードＮ１の次に出力エッジ数が少ない（１本である）ノードＮ２を第１選択ノードとして選択し、更新処理を行う。また、生成装置１００は、ノードＮ１の次に出力エッジ数が少ない（１本である）ノードＮ２を第１選択ノードとして選択し、更新処理を行う。また、生成装置１００は、ノードＮ１の次に出力エッジ数が少ない（１本である）ノードＮ３を第１選択ノードとして選択し、更新処理を行う。このように、図１の例では、生成装置１００は、ノードＮ１〜Ｎ４を順次第１選択ノードとして、更新処理を行うことにより第２エッジが追加された第２グラフデータを生成する（ステップＳ１３）。すなわち、生成装置１００は、更新処理を行うことにより、第２グラフデータに含まれるエッジ（第２エッジ）を更新（追加）することにより、第２エッジが追加された第２グラフデータを生成する。
【００３４】
生成装置１００は、第１グラフデータＧＲ１１中のノードＮ１を始点とする出力エッジは０本であるため、第２選択ノードとして選択される対象ノードがないため、第２グラフデータＧＲ１２−１にエッジ（第２エッジ）を追加することなく、ノードＮ１を第１選択ノードとする更新処理を終了する。
【００３５】
また、生成装置１００は、ノードＮ２を第１選択ノードとする更新処理においては、第１グラフデータＧＲ１１中のノードＮ２を始点とする出力エッジは１本であるため、その終点であるノードＮ１を第２選択ノードとして選択する。そして、生成装置１００は、第２グラフデータＧＲ１２−１において、第２選択ノードであるノードＮ１を終点とする入力エッジの数が第１閾値「４」未満の０本であり、第１選択ノードであるノードＮ２を始点とする出力エッジの数が第２閾値「３」未満の１本であるため、ノードＮ２を始点としノードＮ１を終点とするエッジＥ２−１を第２グラフデータＧＲ１２に追加する。このように、生成装置１００は、エッジの本数と第１閾値及び第２閾値との比較に基づく条件を満たすかどうかを判定する。そして、生成装置１００は、条件を満たすと判定した場合、その判定対象のノードに対応するエッジを第２グラフデータに追加する。
【００３６】
また、生成装置１００は、ノードＮ３を第１選択ノードとする更新処理においては、第１グラフデータＧＲ１１中のノードＮ３を始点とする出力エッジは１本であるため、その終点であるノードＮ１を第２選択ノードとして選択する。そして、生成装置１００は、エッジＥ２−１追加後の第２グラフデータＧＲ１２において、第２選択ノードであるノードＮ１を終点とする入力エッジの数が第１閾値「４」未満の１本であり、第１選択ノードであるノードＮ３を始点とする出力エッジの数が第２閾値「３」未満の０本である。そのため、生成装置１００は、第１閾値及び第２閾値に基づく条件を満たすと判定し、ノードＮ３を始点としノードＮ１を終点とするエッジＥ３−１を第２グラフデータＧＲ１２に追加する。
【００３７】
また、生成装置１００は、ノードＮ４を第１選択ノードとする更新処理においては、第１グラフデータＧＲ１１中のノードＮ４を始点とする出力エッジは１本であるため、その終点であるノードＮ１を第２選択ノードとして選択する。そして、生成装置１００は、エッジＥ２−１、Ｅ３−１追加後の第２グラフデータＧＲ１２において、第２選択ノードであるノードＮ１を終点とする入力エッジの数が第１閾値「４」未満の２本であり、第１選択ノードであるノードＮ４を始点とする出力エッジの数が第２閾値「３」未満の０本である。そのため、生成装置１００は、第１閾値及び第２閾値に基づく条件を満たすと判定し、ノードＮ４を始点としノードＮ１を終点とするエッジＥ４−１を第２グラフデータＧＲ１２に追加する。これにより、生成装置１００は、空間情報ＶＳ１−４に示すように、エッジＥ２−１、Ｅ３−１、Ｅ４−１の３本のエッジ（第２エッジ）が追加された第２グラフデータＧＲ１２−２を生成する。
【００３８】
そして、生成装置１００は、一覧情報ＬＴ１１に示すように、ノードＮ２〜Ｎ４の次に出力エッジ数が少ない（３本である）ノードＮ１０を第１選択ノードとして選択する（ステップＳ１４）。
【００３９】
そして、生成装置１００は、第１グラフにおいて第１選択ノードを始点とする出力エッジが連結される対象ノードのうち、出力エッジの長さに基づいて、第２選択ノードを順次選択することにより、第２グラフデータを生成する（ステップＳ１５）。図１の例では、生成装置１００は、ノードＮ１０からの出力エッジが連結されるノードＮ１、Ｎ１１、Ｎ１２の３つのノードを対象ノードとして、第２選択ノードを選択する。例えば、生成装置１００は、第１グラフデータＧＲ１１においてノードＮ１０を始点とするエッジＥ１０−１、Ｅ１１−１、Ｅ１２−１のうち、長さが短いエッジが連結されるノードから順に、第２選択ノードとして選択する。
【００４０】
図１の例では、生成装置１００は、一覧情報ＬＴ１２に示すように、各エッジＥ１０−１、Ｅ１１−１、Ｅ１２−１の長さ、すなわちノードＮ１０と、ノードＮ１、Ｎ１１、Ｎ１２の３つのノードとの間の距離を算出する。例えば、生成装置１００は、２つのノードのベクトルを用いて２つのノード間の距離を算出する。例えば、生成装置１００は、ノードＮ１０のベクトルとノードＮ１のベクトルとを用いて、エッジＥ１０−１の長さ、すなわちノードＮ１０とノードＮ１との間の距離を算出する。なお、生成装置１００が算出するエッジの長さ、すなわちノード間の距離は、どのような距離であってもよく、例えば、ユークリッド距離やマハラノビス距離やコサイン距離等であってもよい。
【００４１】
図１の例では、生成装置１００は、一覧情報ＬＴ１２に示すように、ノードＮ１０と、ノードＮ１、Ｎ１１、Ｎ１２の３つのノードとの間の距離を各々距離Ｄ１０、Ｄ１１、Ｄ１２と算出する。すなわち、生成装置１００は、エッジＥ１０−１の長さを、距離Ｄ１０と算出し、エッジＥ１１−１の長さを距離Ｄ１１と算出し、エッジＥ１２−１の長さを距離Ｄ１２と算出する。また、図１中の一覧情報ＬＴ１２に示すように、距離Ｄ１０、Ｄ１１、Ｄ１２のうち、距離Ｄ１１が最も小さく、距離Ｄ１０が最も大きいものとする。
【００４２】
そして、生成装置１００は、一覧情報ＬＴ１２に示す順位１位から順に参照先に示す各ノードを第２選択ノードとして選択し、エッジを追加するかを判定する。図１の例では、生成装置１００は、順位１位の参照先であるノードＮ１１を第２選択ノードとして選択し、エッジを追加するかを判定する。
【００４３】
第１選択ノードがノードＮ１０であり、ノードＮ１１を第２選択ノードとする場合、生成装置１００は、第２選択ノードであるノードＮ１１を終点とする入力エッジの数が第１閾値「４」未満の０本であり、第１選択ノードであるノードＮ１０を始点とする出力エッジの数が第２閾値「３」未満の０本である。そのため、生成装置１００は、第１閾値及び第２閾値に基づく条件を満たすと判定し、ノードＮ１０を始点としノードＮ１１を終点とするエッジＥ１１−１を第２グラフデータＧＲ１２に追加する。
【００４４】
次に、第１選択ノードがノードＮ１０であり、ノードＮ１２を第２選択ノードとする場合、生成装置１００は、第２選択ノードであるノードＮ１２を終点とする入力エッジの数が第１閾値「４」未満の０本であり、第１選択ノードであるノードＮ１０を始点とする出力エッジの数がエッジＥ１１−１の１本であり、第２閾値「３」未満である。そのため、生成装置１００は、第１閾値及び第２閾値に基づく条件を満たすと判定し、ノードＮ１０を始点としノードＮ１２を終点とするエッジＥ１２−１を第２グラフデータＧＲ１２に追加する。
【００４５】
次に、第１選択ノードがノードＮ１０であり、ノードＮ１を第２選択ノードとする場合、生成装置１００は、第２選択ノードであるノードＮ１を終点とする入力エッジの数がエッジＥ２−１、Ｅ３−１、Ｅ４−１の３本であり、第１閾値「４」未満であり、第１選択ノードであるノードＮ１０を始点とする出力エッジの数がエッジＥ１１−１、Ｅ１２−１の２本であり、第２閾値「３」未満である。そのため、生成装置１００は、第１閾値及び第２閾値に基づく条件を満たすと判定し、ノードＮ１０を始点としノードＮ１を終点とするエッジＥ１０−１を第２グラフデータＧＲ１２に追加する。これにより、生成装置１００は、空間情報ＶＳ１−５に示すように、エッジＥ１０−１、Ｅ１１−１、Ｅ１２−１の３本のエッジ（第２エッジ）が追加された第２グラフデータＧＲ１２−３を生成する。
【００４６】
そして、生成装置１００は、一覧情報ＬＴ１１に示すように、ノードＮ１０の次に出力エッジ数が少ない（５本である）ノードＮ５を第１選択ノードとして選択する（ステップＳ１６）。
【００４７】
そして、生成装置１００は、第１グラフにおいて第１選択ノードを始点とする出力エッジが連結される対象ノードのうち、出力エッジの長さに基づいて、第２選択ノードを順次選択することにより、第２グラフデータを生成する（ステップＳ１７）。図１の例では、生成装置１００は、ノードＮ５からの出力エッジが連結されるノードＮ１、Ｎ６〜Ｎ９の５つのノードを対象ノードとして、第２選択ノードを選択する。例えば、生成装置１００は、第１グラフデータＧＲ１１においてノードＮ５を始点とするエッジＥ５−１〜Ｅ９−１のうち、長さが短いエッジが連結されるノードから順に、第２選択ノードとして選択する。
【００４８】
図１の例では、生成装置１００は、一覧情報ＬＴ１３に示すように、各エッジＥ５−１〜Ｅ９−１の長さ、すなわちノードＮ５と、ノードＮ１、Ｎ６〜Ｎ９の５つのノードとの間の距離を算出する。図１の例では、生成装置１００は、一覧情報ＬＴ１３に示すように、ノードＮ５と、ノードＮ１、Ｎ６〜Ｎ９の５つのノードとの間の距離を各々距離Ｄ５〜Ｄ９と算出する。すなわち、生成装置１００は、エッジＥ１０−１の長さを、距離Ｄ１０と算出し、エッジＥ１１−１の長さを距離Ｄ１１と算出し、エッジＥ１２−１の長さを距離Ｄ１２と算出する。また、図１中の一覧情報ＬＴ１２に示すように、距離Ｄ５〜Ｄ９のうち、距離Ｄ８が最も小さく、距離Ｄ９が最も大きいものとする。また、距離Ｄ８、Ｄ６、Ｄ５、Ｄ７、Ｄ９の順で小さいものとする。
【００４９】
そして、生成装置１００は、一覧情報ＬＴ１３に示す順位１位から順に参照先に示す各ノードを第２選択ノードとして選択し、エッジを追加するかを判定する。図１の例では、生成装置１００は、順位１位の参照先であるノードＮ８を第２選択ノードとして選択し、エッジを追加するかを判定する。
【００５０】
まず、第１選択ノードがノードＮ５であり、ノードＮ８を第２選択ノードとする場合、生成装置１００は、第２選択ノードであるノードＮ８を終点とする入力エッジの数が第１閾値「４」未満の０本であり、第１選択ノードであるノードＮ５を始点とする出力エッジの数が第２閾値「３」未満の０本である。そのため、生成装置１００は、第１閾値及び第２閾値に基づく条件を満たすと判定し、ノードＮ５を始点としノードＮ８を終点とするエッジＥ８−１を第２グラフデータＧＲ１２に追加する。
【００５１】
次に、第１選択ノードがノードＮ５であり、ノードＮ６を第２選択ノードとする場合、生成装置１００は、第２選択ノードであるノードＮ６を終点とする入力エッジの数が第１閾値「４」未満の０本であり、第１選択ノードであるノードＮ５を始点とする出力エッジの数がエッジＥ８−１の１本であり、第２閾値「３」未満である。そのため、生成装置１００は、第１閾値及び第２閾値に基づく条件を満たすと判定し、ノードＮ５を始点としノードＮ６を終点とするエッジＥ６−１を第２グラフデータＧＲ１２に追加する。
【００５２】
次に、第１選択ノードがノードＮ５であり、ノードＮ１を第２選択ノードとする場合、生成装置１００は、第２選択ノードであるノードＮ１を終点とする入力エッジの数がエッジＥ２−１、Ｅ３−１、Ｅ４−１、Ｅ１０−１の４本であり、第１閾値「４」未満ではない。そのため、生成装置１００は、第１選択ノードがノードＮ５であり、ノードＮ１を第２選択ノードである組合せが第１閾値に基づく条件を満たさないと判定し、ノードＮ５を始点としノードＮ１を終点とするエッジＥ５−１を第２グラフデータＧＲ１２に追加しない。これにより、生成装置１００は、特定のノードに入力エッジが集中することを抑制することができる。
【００５３】
次に、第１選択ノードがノードＮ５であり、ノードＮ７を第２選択ノードとする場合、生成装置１００は、第２選択ノードであるノードＮ７を終点とする入力エッジの数が第１閾値「４」未満の０本であり、第１選択ノードであるノードＮ５を始点とする出力エッジの数がエッジＥ８−１、Ｅ６−１の２本であり、第２閾値「３」未満である。そのため、生成装置１００は、第１閾値及び第２閾値に基づく条件を満たすと判定し、ノードＮ５を始点としノードＮ７を終点とするエッジＥ７−１を第２グラフデータＧＲ１２に追加する。
【００５４】
次に、第１選択ノードがノードＮ５であり、ノードＮ９を第２選択ノードとする場合、生成装置１００は、第２選択ノードであるノードＮ９を終点とする入力エッジの数が第１閾値「４」未満の０本であるため、第１閾値の条件を満たすと判定する。一方、生成装置１００は、第１選択ノードであるノードＮ５を始点とする出力エッジの数がエッジＥ６−１〜Ｅ８−１の３本であり、第２閾値「３」未満ではないため、第２閾値の条件を満たさないと判定する。そのため、生成装置１００は、ノードＮ５を始点としノードＮ９を終点とするエッジＥ９−１を第２グラフデータＧＲ１２に追加しない。これにより、生成装置１００は、特定のノードの出力エッジの増大を抑制することにより、処理時間や処理負荷が増大することを抑制することができる。これにより、生成装置１００は、空間情報ＶＳ１−６に示すように、エッジＥ６−１〜Ｅ８−１の３本のエッジ（第２エッジ）が追加された第２グラフデータＧＲ１２−４を生成する。
【００５５】
上述したように、生成装置１００は、第１グラフデータＧＲ１１中の第１エッジ群のうち、第１閾値及び第２閾値に基づく条件を満たすと判定されたエッジのみを第２エッジとして、第２グラフデータに追加することにより、特定のノードに入力エッジや出力エッジが集中することが抑制された第２グラフデータを生成することができる。これにより、生成装置１００は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【００５６】
このように、生成装置１００は、適宜設定可能な第１閾値と第２閾値との２つの閾値を用いて、エッジを追加するかどうか判定する。これにより、生成装置１００は、出力エッジや入力エッジの本数について所望の第２グラフを生成することができる。したがって、生成装置１００は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【００５７】
従来から、グラフ構造において各ノードが近傍ノードに有向エッジで接続されている近傍グラフ(ｋ近傍グラフ等を含む）が近傍検索に利用されている。このような、有向エッジを含む近傍グラフを用いた検索においては、入力エッジが少なすぎるノードは、そのノードへ到達する可能性を低め、検索精度の低下につながる。また、出力エッジが多すぎる大きすぎるノードは、距離計算回数を増大させ、検索時間の増加につながる。そこで、生成装置１００は、入力エッジ及び出力エッジの各々に対応する閾値（第１閾値、第２閾値）を用いて、入力エッジの数が小さいノードや出力エッジの数が大きいノードをグラフ生成時に減らす。言い換えると、生成装置１００は、入力エッジの数が小さいノードや出力エッジの数が大きいノードが含まれる第２グラフが生成されることを抑制するように、第２グラフを生成する。これにより、生成装置１００は、所望の第２グラフを生成し、第２グラフによる検索性能の向上を可能にする。
【００５８】
また、例えば、グラフデータ中に多数（例えば１０００個、１万個等）の出力エッジを含むノードが含まれる場合、そのノードを辿る検索の処理負荷が増大する。また、例えば、グラフデータ中に少数（例えば０個や１個等）の入力エッジを含むノードが含まれる場合、そのノードが検索される可能性が低くなる。このように、生成装置１００は、各ノードについて、出力エッジや入力エッジに偏りが生じないよう、特に特定のノードの出力エッジが増大しないようにエッジを調整することにより、処理負荷が増大するノードや、検索される可能性が低いノードが含まれる可能性を低減することができる。したがって、生成装置１００は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。また、生成装置１００により生成されたグラフデータは、エッジの数の増大を抑制しつつ、所定の対象に関する効率的な検索を可能にすることができる。
【００５９】
〔１−１．第１グラフデータ〕
図１の例では、生成装置１００が与えられた第１グラフデータＧＲ１１から第２グラフデータＧＲ１２を生成する場合を示したが、生成装置１００は、第１グラフデータを用いることなく第２グラフデータを生成してもよい。例えば、生成装置１００は、エッジが連結されていない複数のノードから第２グラフデータを生成してもよい。
【００６０】
例えば、生成装置１００は、各ノードから他の全ノードまでの距離に基づく順位に基づいて、第２グラフデータを生成してもよい。例えば、生成装置１００は、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第１閾値の数の他のノードを終点ノードとする出力エッジと、各ノードを終点ノードとし、各ノードとの距離が短い方から順に第２閾値の数の他のノードを始点ノードとする入力エッジとを、各ノードに連結することによりグラフデータを生成する。この場合、生成装置１００は、各ノードから他の全ノードに出力エッジが連結されたグラフデータを対象とする場合を同様の処理となる。このように、生成装置１００は、エッジが連結されていない複数のノードから第２グラフデータを生成してもよい。
【００６１】
〔１−２．第１閾値、第２閾値〕
図１の例では、第１閾値を「４」とし、第２閾値を「３」とする場合を示したが、第１閾値や第２閾値には種々の値が選択されてもよい。例えば、第１閾値と第２閾値とは同じ値であってもよい。例えば、第１閾値は、第２閾値よりも小さい値であってもよい。
【００６２】
〔１−３．インデックスデータ〕
また、生成装置１００は、検索時に用いるインデックスデータを生成してもよい。例えば、生成装置１００は、高次元ベクトルを検索する検索インデックスをインデックスデータとして生成する。ここでいう高次元ベクトルとは、例えば、数百次元から数千次元のベクトルであってもよいし、それ以上の次元のベクトルであってもよい。
【００６３】
例えば、生成装置１００は、ツリー構造（木構造）に関する検索インデックスをインデックスデータとして生成してもよい。例えば、生成装置１００は、ｋｄ木（k-dimensional  tree）に関する検索インデックスをインデックスデータとして生成してもよい。例えば、生成装置１００は、ＶＰ木（Vantage-Point  tree）に関する検索インデックスをインデックスデータとして生成してもよい。
【００６４】
また、例えば、生成装置１００は、その他の木構造を有するインデックスデータとして生成してもよい。例えば、生成装置１００は、木構造のインデックスデータのリーフがグラフデータに接続する種々のインデックスデータを生成してもよい。例えば、生成装置１００は、木構造のインデックスデータのリーフが第２グラフデータ中のノードに対応する種々のインデックスデータを生成してもよい。また、生成装置１００は、このようなインデックスデータを用いて検索を行う場合、インデックスデータを辿って到達したリーフ（ノード）からグラフデータを探索してもよい。
【００６５】
なお、上述したようなインデックスデータは一例であり、生成装置１００は、グラフデータ中のクエリを高速に特定することが可能であれば、どのようなデータ構造のインデックスデータを生成してもよい。例えば、生成装置１００は、クエリに対応するセントロイド情報を高速に特定することが可能であれば、バイナリ空間分割に関する技術等の種々の従来技術を適宜用いて、インデックスデータを生成してもよい。例えば、生成装置１００は、高次元ベクトルの検索に対応可能なインデックスであれば、どのようなデータ構造のインデックスデータを生成してもよい。生成装置１００は、上述のようなインデックスデータと第２グラフデータとを用いることにより、所定の対象に関するより効率的な検索を可能にすることができる。
【００６６】
〔２．生成システムの構成〕
図２に示すように、生成システム１は、端末装置１０と、情報提供装置５０と、生成装置１００とが含まれる。端末装置１０と、情報提供装置５０と、生成装置１００とは所定のネットワークＮを介して、有線または無線により通信可能に接続される。図２は、実施形態に係る生成システムの構成例を示す図である。なお、図２に示した生成システム１には、複数台の端末装置１０や、複数台の情報提供装置５０や、複数台の生成装置１００が含まれてもよい。
【００６７】
端末装置１０は、ユーザによって利用される情報処理装置である。端末装置１０は、ユーザによる種々の操作を受け付ける。なお、以下では、端末装置１０をユーザと表記する場合がある。すなわち、以下では、ユーザを端末装置１０と読み替えることもできる。なお、上述した端末装置１０は、例えば、スマートフォンや、タブレット型端末や、ノート型ＰＣ（Personal  Computer）や、デスクトップＰＣや、携帯電話機や、ＰＤＡ（Personal  Digital  Assistant）等により実現される。
【００６８】
情報提供装置５０は、ユーザ等に種々の情報提供を行うための情報が格納された情報処理装置である。例えば、情報提供装置５０は、ウェブサーバ等の種々の外部装置から収集した文字情報等に基づくオブジェクトＩＤが格納される。例えば、情報提供装置５０は、ユーザ等に画像検索サービスを提供する情報処理装置である。例えば、情報提供装置５０は、画像検索サービスを提供するための各情報が格納される。例えば、情報提供装置５０は、画像検索サービスの対象となる画像に対応するベクトル情報を生成装置１００に提供する。また、情報提供装置５０は、クエリを生成装置１００に送信することにより、生成装置１００からクエリに対応する画像を示すオブジェクトＩＤ等を受信する。
【００６９】
生成装置１００は、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第１閾値の数の他のノードを終点ノードとする出力エッジと、各ノードを終点ノードとし、各ノードとの距離が短い方から順に第２閾値の数の他のノードを始点ノードとする入力エッジとを、第１グラフデータから第２グラフデータを生成各ノードに連結することによりグラフデータを生成する。例えば、生成装置１００は、第１グラフデータから第２グラフデータを生成する。
【００７０】
例えば、生成装置１００は、端末装置からクエリ情報（以下、単に「クエリ」ともいう）を受信すると、クエリに類似する対象（ベクトル情報等）を検索し、検索結果を端末装置に提供する。また、例えば、生成装置１００が端末装置に提供するデータは、画像情報等のデータ自体であってもよいし、ＵＲＬ（Uniform  Resource  Locator）等の対応するデータを参照するための情報であってもよい。また、クエリや検索対象のデータは、画像、音声、テキストデータなど、如何なる種類のデータであってもよい。本実施形態において、生成装置１００が画像を検索する場合を一例として説明する。
【００７１】
〔３．生成装置の構成〕
次に、図３を用いて、実施形態に係る生成装置１００の構成について説明する。図３は、実施形態に係る生成装置１００の構成例を示す図である。図３に示すように、生成装置１００は、通信部１１０と、記憶部１２０と、制御部１３０とを有する。なお、生成装置１００は、生成装置１００の管理者等から各種操作を受け付ける入力部（例えば、キーボードやマウス等）や、各種情報を表示するための表示部（例えば、液晶ディスプレイ等）を有してもよい。
【００７２】
（通信部１１０）
通信部１１０は、例えば、ＮＩＣ（Network  Interface  Card）等によって実現される。そして、通信部１１０は、ネットワーク（例えば図２中のネットワークＮ）と有線または無線で接続され、端末装置１０や情報提供装置５０との間で情報の送受信を行う。
【００７３】
（記憶部１２０）
記憶部１２０は、例えば、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。実施形態に係る記憶部１２０は、図３に示すように、オブジェクト情報記憶部１２１と、基グラフデータ記憶部１２２と、第１グラフデータ記憶部１２３と、閾値情報記憶部１２４と、第２グラフデータ記憶部１２５とを有する。
【００７４】
（オブジェクト情報記憶部１２１）
実施形態に係るオブジェクト情報記憶部１２１は、オブジェクトに関する各種情報を記憶する。例えば、オブジェクト情報記憶部１２１は、オブジェクトＩＤやベクトルデータを記憶する。図４は、実施形態に係るオブジェクト情報記憶部の一例を示す図である。図４に示すオブジェクト情報記憶部１２１は、「オブジェクトＩＤ」、「ベクトル情報」といった項目が含まれる。
【００７５】
「オブジェクトＩＤ」は、オブジェクトを識別するための識別情報を示す。また、「ベクトル情報」は、オブジェクトＩＤにより識別されるオブジェクトに対応するベクトル情報を示す。すなわち、図４の例では、オブジェクトを識別するオブジェクトＩＤに対して、オブジェクトに対応するベクトルデータ（ベクトル情報）が対応付けられて登録されている。
【００７６】
例えば、図４の例では、ＩＤ「ＯＢ１」により識別されるオブジェクト（対象）は、「１０，２４，５１，２．．．」の多次元のベクトル情報が対応付けられることを示す。
【００７７】
なお、オブジェクト情報記憶部１２１は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
【００７８】
（基グラフデータ記憶部１２２）
実施形態に係る基グラフデータ記憶部１２２は、グラフデータに関する各種情報を記憶する。例えば、基グラフデータ記憶部１２２は、第１グラフデータを生成する基となるグラフデータを記憶する。図５の例は、基グラフデータ記憶部１２２は、近傍グラフデータを記憶する。図５は、実施形態に係る基グラフデータ記憶部の一例を示す図である。図５に示す基グラフデータ記憶部１２２は、「ノードＩＤ」、「オブジェクトＩＤ」、および「有向エッジ情報」といった項目を有する。また、「有向エッジ情報」には、「エッジＩＤ」や「参照先」といった情報が含まれる。
【００７９】
「ノードＩＤ」は、グラフデータにおける各ノード（対象）を識別するための識別情報を示す。また、「オブジェクトＩＤ」は、オブジェクトを識別するための識別情報を示す。
【００８０】
また、「有向エッジ情報」は、対応するノードに接続されるエッジに関する情報を示す。図５の例では、「有向エッジ情報」は、対応するノードから出力される出力エッジに関する情報を示す。また、「エッジＩＤ」は、ノード間を連結するエッジを識別するための識別情報を示す。また、「参照先」は、エッジにより連結された参照先（ノード）を示す情報を示す。すなわち、図５の例では、ノードを識別するノードＩＤに対して、そのノードに対応するオブジェクト（対象）を識別する情報やそのノードからの有向エッジ（出力エッジ）が連結される参照先（ノード）が対応付けられて登録されている。
【００８１】
例えば、図５の例では、ノードＩＤ「Ｎ１」により識別されるノード（ノードＮ１）は、オブジェクトＩＤ「ＯＢ１」により識別されるオブジェクト（対象）に対応することを示す。また、ノードＮ１からは、エッジＩＤ「Ｅ２」により識別されるエッジ（エッジＥ２）が、ノードＩＤ「Ｎ２」により識別されるノード（ノードＮ１）に連結されることを示す。すなわち、図５の例では、基グラフデータにおけるノードＮ１からはエッジＥ２によりノードＮ２へ辿ることができることを示す。
【００８２】
なお、基グラフデータ記憶部１２２は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、基グラフデータ記憶部１２２は、各ノード（ベクトル）間を連結するエッジの長さが記憶されてもよい。すなわち、基グラフデータ記憶部１２２は、各ノード（ベクトル）間の距離を示す情報が記憶されてもよい。
【００８３】
（第１グラフデータ記憶部１２３）
実施形態に係る第１グラフデータ記憶部１２３は、第１グラフデータに関する各種情報を記憶する。例えば、第１グラフデータ記憶部１２３は、第２グラフデータを生成する基となる第１グラフデータを記憶する。図６は、実施形態に係る第１グラフデータ記憶部の一例を示す図である。図６に示す第１グラフデータ記憶部１２３は、「ノードＩＤ」、「オブジェクトＩＤ」、および「有向エッジ情報」といった項目を有する。また、「有向エッジ情報」には、「エッジＩＤ」や「参照先」といった情報が含まれる。
【００８４】
「ノードＩＤ」は、グラフデータにおける各ノード（対象）を識別するための識別情報を示す。また、「オブジェクトＩＤ」は、オブジェクトを識別するための識別情報を示す。
【００８５】
また、「有向エッジ情報」は、対応するノードに接続されるエッジに関する情報を示す。図６の例では、「有向エッジ情報」は、対応するノードから出力される出力エッジに関する情報を示す。また、「エッジＩＤ」は、ノード間を連結するエッジを識別するための識別情報を示す。また、「参照先」は、エッジにより連結された参照先（ノード）を示す情報を示す。すなわち、図６の例では、ノードを識別するノードＩＤに対して、そのノードに対応するオブジェクト（対象）を識別する情報やそのノードからの有向エッジ（出力エッジ）が連結される参照先（ノード）が対応付けられて登録されている。
【００８６】
例えば、図６の例では、ノードＩＤ「Ｎ１」により識別されるノードは、オブジェクトＩＤ「ＯＢ１」により識別されるオブジェクト（対象）に対応することを示す。
【００８７】
なお、ノードＩＤ中の括弧内は、各グラフデータ間のノードＩＤを識別可能にする場合のＩＤを示す。図６の例では、第１グラフデータ記憶部１２３の各ノードＩＤには、基グラフデータ記憶部１２２において対応するノードＩＤに「−１」が追加されたＩＤが記憶される。この場合、参照先にも対応するノードＩＤが記憶される。具体的には、参照先には、図６中のノードＩＤの末尾に「−１」が追加されたノードＩＤが記憶されてもよい。例えば、エッジＥ２−１に対応する参照先には、ノードＩＤ「Ｎ１−１」が記憶される。
【００８８】
図６の例では、ノードＩＤ「Ｎ１」により識別されるノードからは、出力エッジがないことを示す。また、ノードＩＤ「Ｎ２」により識別されるノード（ノードＮ２）からは、エッジＩＤ「Ｅ２−１」により識別されるエッジ（エッジＥ２−１）が、ノードＩＤ「Ｎ１」により識別されるノード（ノードＮ１）に連結されることを示す。すなわち、図６の例では、第１グラフデータにおけるノードＮ２からはエッジＥ２−１によりノードＮ１へ辿ることができることを示す。
【００８９】
なお、第１グラフデータ記憶部１２３は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、第１グラフデータ記憶部１２３は、各ノード（ベクトル）間を連結するエッジの長さが記憶されてもよい。すなわち、第１グラフデータ記憶部１２３は、各ノード（ベクトル）間の距離を示す情報が記憶されてもよい。
【００９０】
（閾値情報記憶部１２４）
実施形態に係る閾値情報記憶部１２４は、閾値に関する各種情報を記憶する。例えば、閾値情報記憶部１２４は、第１閾値や第２閾値を記憶する。図７は、実施形態に係る閾値記憶部の一例を示す図である。図７に示す閾値情報記憶部１２４は、「閾値名」、「値」、「対象ノード」、「対象エッジ」といった項目が含まれる。
【００９１】
「閾値名」は、閾値を識別するための情報（名称）を示す。また、「値」は、対応する閾値の具体的な値を示す。「対象ノード」は、対応する閾値が用いられる対象となるノードを示す。また、「対象エッジ」は、対応する閾値が用いられる対象となるエッジを示す。
【００９２】
図７の例では、閾値名「第１閾値」の値は、「４」であることを示す。第１閾値の対象ノードは、第２選択ノードであり、対象エッジは入力エッジであることを示す。また、閾値名「第２閾値」の値は、「３」であることを示す。第２閾値の対象ノードは、第１選択ノードであり、対象エッジは出力エッジであることを示す。
【００９３】
なお、閾値情報記憶部１２４は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
【００９４】
（第２グラフデータ記憶部１２５）
実施形態に係る第２グラフデータ記憶部１２５は、第２グラフデータに関する各種情報を記憶する。図８は、実施形態に係る第２グラフデータ記憶部の一例を示す図である。図８の例では、第２グラフデータ記憶部１２５は、「ノードＩＤ」、「オブジェクトＩＤ」、および「有向エッジ情報」といった項目を有する。また、「有向エッジ情報」には、「エッジＩＤ」や「参照先」といった情報が含まれる。
【００９５】
「ノードＩＤ」は、グラフデータにおける各ノード（対象）を識別するための識別情報を示す。また、「オブジェクトＩＤ」は、オブジェクトを識別するための識別情報を示す。
【００９６】
また、「有向エッジ情報」は、対応するノードに接続されるエッジに関する情報を示す。図８の例では、「有向エッジ情報」は、対応するノードから出力される出力エッジに関する情報を示す。また、「エッジＩＤ」は、ノード間を連結するエッジを識別するための識別情報を示す。また、「参照先」は、エッジにより連結された参照先（ノード）を示す情報を示す。すなわち、図８の例では、ノードを識別するノードＩＤに対して、そのノードに対応するオブジェクト（対象）を識別する情報やそのノードからの有向エッジ（出力エッジ）が連結される参照先（ノード）が対応付けられて登録されている。
【００９７】
例えば、図８の例では、ノードＩＤ「Ｎ２」により識別されるノードは、オブジェクトＩＤ「ＯＢ２」により識別されるオブジェクト（対象）に対応することを示す。
【００９８】
なお、ノードＩＤ中の括弧内は、各グラフデータ間のノードＩＤを識別可能にする場合のＩＤを示す。図８の例では、第２グラフデータ記憶部１２５の各ノードＩＤには、基グラフデータ記憶部１２２において対応するノードＩＤに「−２」が追加されたＩＤが記憶される。この場合、参照先にも対応するノードＩＤが記憶される。具体的には、参照先には、図８中のノードＩＤの末尾に「−２」が追加されたノードＩＤが記憶されてもよい。例えば、エッジＥ６−１に対応する参照先には、ノードＩＤ「Ｎ６−２」が記憶される。
【００９９】
図８の例では、ノードＩＤ「Ｎ１」により識別されるノードからは、出力エッジがないことを示す。また、ノードＩＤ「Ｎ２」により識別されるノード（ノードＮ２）からは、エッジＩＤ「Ｅ２−１」により識別されるエッジ（エッジＥ２−１）が、ノードＩＤ「Ｎ１」により識別されるノード（ノードＮ１）に連結されることを示す。すなわち、図８の例では、第１グラフデータにおけるノードＮ２からはエッジＥ２−１によりノードＮ１へ辿ることができることを示す。すなわち、図８の例では、第１グラフデータにおけるエッジＥ２−１が条件を満たしたため、第２グラフデータにも追加されたことを示す。
【０１００】
なお、第２グラフデータ記憶部１２５は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、第２グラフデータ記憶部１２５は、各ノード（ベクトル）間を連結するエッジの長さが記憶されてもよい。すなわち、第２グラフデータ記憶部１２５は、各ノード（ベクトル）間の距離を示す情報が記憶されてもよい。例えば、第２グラフデータ記憶部１２５は、各ノードへの入力エッジの数を示す情報が記憶されてもよい。また、第２グラフデータは、クエリを入力とし、グラフデータ中のエッジを辿ることによりノードを探索し、クエリに類似するノードを抽出し出力するプログラムモジュールを含んでもよい。すなわち、第２グラフデータは、第２グラフを用いて検索処理を行うプログラムモジュールとしての利用が想定されるものであってもよい。例えば、第２グラフデータＧＲ１２は、クエリとしてベクトルデータが入力された場合に、そのベクトルデータに類似するベクトルデータに対応するノードを第２グラフ中から抽出し、出力するプログラムであってもよい。例えば、第２グラフデータＧＲ１２は、クエリ画像に対応する類似画像を検索するプログラムモジュールとして利用されるデータであってもよい。例えば、第２グラフデータＧＲ１２は、入力されたクエリに基づいて、第２グラフにおいてそのクエリに類似するノードを抽出し、出力するよう、コンピュータを機能させる。
【０１０１】
（制御部１３０）
図３の説明に戻って、制御部１３０は、コントローラ（controller）であり、例えば、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等によって、生成装置１００内部の記憶装置に記憶されている各種プログラム（生成プログラムの一例に相当）がＲＡＭを作業領域として実行されることにより実現される。また、制御部１３０は、コントローラであり、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路により実現される。
【０１０２】
図３に示すように、制御部１３０は、取得部１３１と、第１選択部及び第２選択部としての選択部１３２と、生成部１３３と、生成部１３４と、提供部１３５とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部１３０の内部構成は、図３に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
【０１０３】
（取得部１３１）
取得部１３１は、各種情報を取得する。例えば、取得部１３１は、記憶部１２０から各種情報を取得する。例えば、取得部１３１は、オブジェクト情報記憶部１２１や、基グラフデータ記憶部１２２や、第１グラフデータ記憶部１２３や、閾値情報記憶部１２４や、第２グラフデータ記憶部１２５等から各種情報を取得する。また、取得部１３１は、各種情報を外部の情報処理装置から取得する。
【０１０４】
取得部１３１は、データ検索の対象となる複数のノードの情報と、当該複数のノード間を連結する有向エッジ群である第１エッジ群の情報とを含む第１グラフ（第１グラフデータＧＲ１１）と、複数のノードの情報を含む第２グラフデータＧＲ１２−１を取得する。
【０１０５】
例えば、取得部１３１は、第１グラフデータＧＲ１１を第１グラフデータ記憶部１２３から取得する。また、例えば、取得部１３１は、第２グラフデータＧＲ１２−１を第２グラフデータ記憶部１２５から取得する。取得部１３１は、所定の基準に基づいて生成された近傍グラフ（基グラフデータＧＲ１０）であって、複数のノード間を連結する有向エッジ群である所定のエッジ群で連結された近傍グラフのうち、所定のエッジ群の各エッジの向きを反転させた第１エッジ群の情報を含む転置グラフである第１グラフを取得する。
【０１０６】
例えば、取得部１３１は、基グラフデータを取得する。図１の例では、生成装置１００は、基グラフデータＧＲ１０を取得する。例えば、取得部１３１は、第１グラフデータを取得してもよい。例えば、生成装置１００は、情報提供装置５０等の外部装置から第１グラフデータＧＲ１１を取得してもよい。
【０１０７】
例えば、取得部１３１は、検索クエリに関する情報を取得する。例えば、取得部１３１は、画像検索に関する検索クエリを取得する。例えば、取得部１３１は、利用する端末装置１０からクエリを受け付けた情報提供装置５０からクエリを取得する。
【０１０８】
（選択部１３２）
選択部１３２は、各種情報を選択する。なお、図３では、第１選択部と第２選択部とを併せて選択部１３２とする構成を示すが、第１選択部と第２選択部とは各々異なる部（第１選択部及び第２選択部）として構成されてもよい。すなわち、選択部１３２の処理として説明する各処理は、個別に構成された第１選択部や第２選択部により実行されてもよい。
【０１０９】
選択部１３２は、更新処理においてノードを選択する。選択部１３２は、複数のノードのうち、第１グラフにおいて他のノードを終点とする出力エッジの数に基づいて第１選択ノードを選択する。選択部１３２は、１グラフにおいて第１選択ノードを始点とする出力エッジが連結される対象ノードのうち、当該出力エッジの長さに基づいて第２選択ノードを選択する。
【０１１０】
選択部１３２は、出力エッジの数に基づいて第１選択ノードを選択する。選択部１３２は、複数のノードのうち、第１グラフにおいて他のノードを終点とする出力エッジの数が少ないノードから順に第１選択ノードとして選択する。選択部１３２は、出力エッジの長さに基づいて第２選択ノードを選択する。選択部１３２は、対象ノードのうち、各ノードから第１選択ノードを始点とする出力エッジが短いノードから順に第２選択ノードとして選択する。
【０１１１】
図１の例では、選択部１３２は、第２グラフデータにおけるノードのうち、第１グラフデータにおける出力エッジが少ない方から順に第１選択ノードを選択する。選択部１３２は、一覧情報ＬＴ１１に示すような各ノードＮ１〜Ｎ１２の出力エッジ数に基づいて、第１選択ノードを選択する。
【０１１２】
図１の例では、選択部１３２は、ノードＮ２を第１選択ノードとする更新処理においては、第１グラフデータＧＲ１１中のノードＮ２を始点とする出力エッジは１本であるため、その終点であるノードＮ１を第２選択ノードとして選択する。選択部１３２は、ノードＮ３を第１選択ノードとする更新処理においては、第１グラフデータＧＲ１１中のノードＮ３を始点とする出力エッジは１本であるため、その終点であるノードＮ１を第２選択ノードとして選択する。選択部１３２は、ノードＮ４を第１選択ノードとする更新処理においては、第１グラフデータＧＲ１１中のノードＮ４を始点とする出力エッジは１本であるため、その終点であるノードＮ１を第２選択ノードとして選択する。
【０１１３】
図１の例では、選択部１３２は、一覧情報ＬＴ１１に示すように、ノードＮ２〜Ｎ４の次に出力エッジ数が少ない（３本である）ノードＮ１０を第１選択ノードとして選択する。選択部１３２は、ノードＮ１０からの出力エッジが連結されるノードＮ１、Ｎ１１、Ｎ１２の３つのノードを対象ノードとして、第２選択ノードを選択する。選択部１３２は、第１グラフデータＧＲ１１においてノードＮ１０を始点とするエッジＥ１０−１、Ｅ１１−１、Ｅ１２−１のうち、長さが短いエッジが連結されるノードから順に、第２選択ノードとして選択する。
【０１１４】
図１の例では、選択部１３２は、一覧情報ＬＴ１１に示すように、ノードＮ１０の次に出力エッジ数が少ない（５本である）ノードＮ５を第１選択ノードとして選択する。選択部１３２は、ノードＮ５からの出力エッジが連結されるノードＮ１、Ｎ６〜Ｎ９の５つのノードを対象ノードとして、第２選択ノードを選択する。選択部１３２は、第１グラフデータＧＲ１１においてノードＮ５を始点とするエッジＥ５−１〜Ｅ９−１のうち、長さが短いエッジが連結されるノードから順に、第２選択ノードとして選択する。
【０１１５】
（生成部１３３）
生成部１３３は、各種情報を生成する。例えば、生成部１３３は、記憶部１２０に記憶された情報（データ）から各種情報（データ）を生成する。例えば、生成部１３３は、オブジェクト情報記憶部１２１や、基グラフデータ記憶部１２２や、第１グラフデータ記憶部１２３や、閾値情報記憶部１２４から各種情報を生成する。例えば、生成部１３３は、基グラフデータから第１グラフデータを生成する。例えば、生成部１３３は、第１グラフデータから第２グラフデータを生成する。
【０１１６】
例えば、生成部１３３は、第１グラフデータＧＲ１１を生成する。生成部１３３は、所定の基準に基づいて生成された近傍グラフ（基グラフデータＧＲ１０）であって、複数のノード間を連結する有向エッジ群である所定のエッジ群で連結された近傍グラフから第１グラフデータＧＲ１１を生成する。生成部１３３は、基グラフデータＧＲ１０うち、各エッジの向きを反転させることにより、基グラフデータＧＲ１０の転置グラフである第１グラフデータＧＲ１１を生成する。
【０１１７】
また、生成部１３３は、第１グラフデータＧＲ１１のエッジを削除することにより、ノードのみが含まれる第２グラフを生成する。例えば、生成部１３３は、第１グラフデータＧＲ１１のエッジを削除することにより、第２グラフデータＧＲ１２−１を生成する。生成部１３３は、近傍グラフの各エッジの向きを反転させた転置グラフである第１グラフデータを用いて第２グラフデータを生成する。
【０１１８】
生成部１３３は、第２グラフにおいて、第１選択ノードを始点とする出力エッジの数が所定の閾値（第２閾値）未満である場合、第１エッジ群において第１選択ノードを始点とし第２選択ノードを終点とする出力エッジを第２グラフに第２エッジの情報として追加する更新処理により、第２グラフを生成する。生成部１３３は、第２グラフにおいて、第２選択ノードを終点とする入力エッジの数が他の閾値（第１閾値）未満であり、第１選択ノードを始点とする出力エッジの数が所定の閾値未満である場合、更新処理により、第２エッジが追加された第２グラフを生成する。生成部１３３は、第２グラフにおいて、第２選択ノードを終点とする入力エッジの数が第１閾値未満であり、第１選択ノードを始点とする出力エッジの数が第２閾値未満である場合、第１エッジ群において第１選択ノードを始点とし第２選択ノードを終点とする出力エッジを第２グラフに第２エッジの情報として追加する更新処理により、第２グラフ（第２グラフデータＧＲ１２−４）を生成する。生成部１３３は、例えば第２グラフデータＧＲ１２−１〜ＧＲ１２−３等において、第２選択ノードを終点とする入力エッジの数が第１閾値「４」未満であり、第１選択ノードを始点とする出力エッジの数が第２閾値記「３」未満である場合、第１グラフデータＧＲ１１において第１選択ノードを始点とし第２選択ノードを終点とする出力エッジを第２グラフデータＧＲ１２−１〜ＧＲ１２−３等に追加する更新処理により、第２グラフデータＧＲ１２−４を生成する。
【０１１９】
生成部１３３は、第２選択ノードを終点とする入力エッジの数が第１閾値未満であり、第１選択ノードを始点とする出力エッジの数が第２閾値未満である場合、第１選択ノードから第２選択ノードへの出力エッジを第２グラフデータに追加する更新処理により、第２グラフデータＧＲ１２を生成する。生成部１３３は、選択された第１選択ノードと第２選択ノードとの組合せごとに更新処理を繰り返す。
【０１２０】
生成部１３３は、第１選択部としての選択部１３２により選択される第１選択ノードと、第２選択部としての選択部１３２により選択される第２選択ノードとの組合せごとに更新処理を繰り返すことにより、第２エッジが追加された第２グラフを生成する。生成部１３３は、更新処理時の第２グラフに含まれる第２エッジの情報を対象として、更新処理を繰り返すことにより、第２エッジが追加された第２グラフを生成する。
【０１２１】
生成部１３３は、第２グラフにおける複数のノードのうち、入力エッジが連結されていないノードである入力無ノードがある場合、第１グラフにおいて当該ノードに連結される入力エッジのうち、長さが所定の基準を満たすエッジを、当該ノードの入力エッジとして第２エッジに追加する入力追加処理により、第２エッジが追加された第２グラフを生成する。生成部１３３は、第２グラフにおける複数のノードのうち、入力エッジが連結されていないノードである入力無ノードがある場合、入力追加処理により入力エッジが０本である、すなわち入力エッジが無いノードを無くすために、第２グラフに入力無エッジの入力エッジを追加する。生成部１３３は、各ノードに少なくとも１本以上の入力エッジが連結された第２グラフを生成する。生成部１３３は、検索時にエッジを辿って到達できないノードを無くし、エッジを辿ることにより各ノードに到達可能な第２エッジが追加された第２グラフを生成する。
【０１２２】
生成部１３３は、第１グラフにおいて入力無ノードに対応するノードに連結される入力エッジのうち、長さが最も短いエッジを、当該ノードの入力エッジとして第２エッジに追加する入力追加処理により、第２エッジが追加された第２グラフを生成する。生成部１３３は、入力追加処理において、第１グラフにおいて当該ノードに連結される入力エッジのうち、長さが最も短いエッジ、すなわち類似性の高いノード間のエッジを追加することができる。これにより、生成装置１００は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【０１２３】
生成部１３３は、更新処理時において入力追加処理を行うことにより、第２エッジが追加された第２グラフを生成する。生成部１３３は、更新処理の中で各ノードに少なくとも１本以上の入力エッジが連結された第２グラフを生成する。生成部１３３は、更新処理の繰り返し終了後において入力追加処理を行うことにより、第２エッジが追加された第２グラフを生成する。例えば、生成部１３３は、各ノードを第１選択ノードとして選択した更新処理の繰り返し終了後において、入力追加処理を行うことにより、第２エッジが追加された第２グラフを生成する。例えば、生成部１３３は、第１選択ノードの選択候補となる全ノードが第１選択ノードとして選択された全更新処理の終了後において、入力追加処理を行うことにより、第２エッジが追加された第２グラフを生成する。生成部１３３は、更新処理の繰り返し終了後において、入力エッジが０本となっているノード（入力無ノード）のみを対象として入力追加処理を行う。生成部１３３は、全ノードを第１選択ノードとして繰り返した更新処理後において入力エッジが０本であるノードのみを対象として、入力追加処理を行う。
【０１２４】
図１の例では、生成部１３３は、更新処理により、ノードを有向エッジで連結することにより、グラフデータＧＲ１２を生成する。生成部１３３は、図１に示すように、第１閾値及び第２閾値に基づく条件を満たすと判定されたエッジのみを第２エッジとして、第２グラフデータに追加することにより、第２グラフデータを生成する。
【０１２５】
また、図１の例では、生成部１３３は、基グラフデータから第１グラフデータを生成する。生成部１３３は、基グラフデータ中のエッジの向きを反転させることにより、基グラフデータのエッジの向きが逆となった第１グラフデータを生成す。生成部１３３は、各ノード等間の距離を変えずに、エッジの向きだけを反転させた第１グラフデータを生成する。生成部１３３は、基グラフデータにおける一のノードの入力エッジを出力エッジとし、一のノードの出力エッジを入力エッジとすることにより、エッジの向きだけを反転させた第１グラフデータを生成する。
【０１２６】
図１の例では、生成部１３３は、基グラフデータＧＲ１０から空間情報ＶＳ１−２に示すような第１グラフデータＧＲ１１を生成する。生成部１３３は、基グラフデータＧＲ１の転置グラフである第１グラフデータＧＲ１１を生成する。例えば、生成部１３３は、図５中の基グラフデータ記憶部１２２に示す各ノードの参照先を始点とし、各ノードを終点として、各エッジの始点と終点を入れ替えることにより、図６中の第１グラフデータ記憶部１２３に示す第１グラフデータを生成する。例えば、生成部１３３は、ノードＮ１を始点とし、ノードＮ２を終点とするエッジＥ２を反転させることにより、空間情報ＶＳ１−２に示すように、ノードＮ２を始点とし、ノードＮ１を終点とするするエッジＥ２−１を含む第１グラフデータＧＲ１１を生成する。例えば、生成部１３３は、種々の従来技術を適宜用いて、グラフデータの転置グラフを生成してもよい。なお、生成部１３３は、基グラフデータＧＲ１０の第１グラフデータＧＲ１１を生成できれば、どのような処理により第１グラフデータＧＲ１１を生成してもよい。
【０１２７】
図１の例では、生成部１３３は、第１グラフデータから第２グラフデータを生成する。まず、生成部１３３は、第１グラフデータからエッジ（第１エッジ）を除いた第２グラフデータを生成する。例えば、生成部１３３は、第１グラフデータからエッジ群（第１エッジ群）を除くことにより、ノードのみを有する第２グラフデータを生成する。生成部１３３は、空間情報ＶＳ１−３に示すように、第１グラフデータＧＲ１１からノードのみを有する第２グラフデータＧＲ１２−１を生成する。生成部１３３は、ノードのみを有する第２グラフデータＧＲ１２−１から開始して、第２グラフデータに条件を満たすエッジ（第２エッジ）を順次追加する。生成部１３３は、第２エッジ群を含む第２グラフデータを生成する。
【０１２８】
また、生成部１３３は、第２グラフにおいて、第２選択ノードを終点とする入力エッジの数が第１閾値未満であり、第１選択ノードを始点とする出力エッジの数が第２閾値未満である場合、第１選択ノードを始点とし第２選択ノードを終点とする出力エッジを第２グラフに追加する。生成部１３３は、更新処理を第１選択ノード毎に繰り返すことにより、第２グラフデータを生成する。
【０１２９】
図１の例では、生成部１３３は、第２グラフデータＧＲ１２−１において、第２選択ノードであるノードＮ１を終点とする入力エッジの数が第１閾値「４」未満の０本であり、第１選択ノードであるノードＮ２を始点とする出力エッジの数が第２閾値「３」未満の１本であると判定する。生成部１３３は、エッジの本数と第１閾値及び第２閾値との比較に基づく条件を満たすかどうかを判定する。そして、生成部１３３は、条件を満たすと判定した場合、その判定対象のノードに対応するエッジを第２グラフデータに追加する。図１の例では、生成部１３３は、第１選択ノードがノードＮ２であり、第２選択ノードがノードＮ１である組合せについて、第１閾値及び第２閾値との比較に基づく条件を満たすと判定し、ノードＮ２を始点としノードＮ１を終点とするエッジＥ２−１を第２グラフデータＧＲ１２に追加する。
【０１３０】
図１の例では、生成部１３３は、空間情報ＶＳ１−４に示すように、エッジＥ２−１、Ｅ３−１、Ｅ４−１の３本のエッジ（第２エッジ）が追加された第２グラフデータＧＲ１２−２を生成する。また、生成部１３３は、空間情報ＶＳ１−５に示すように、エッジＥ１０−１、Ｅ１１−１、Ｅ１２−１の３本のエッジ（第２エッジ）が追加された第２グラフデータＧＲ１２−３を生成する。
【０１３１】
図１の例では、生成部１３３は、第２選択ノードであるノードＮ１の入力エッジの数がエッジＥ２−１、Ｅ３−１、Ｅ４−１、Ｅ１０−１の４本であり、第１閾値「４」未満ではないと判定する。生成部１３３は、第１選択ノードがノードＮ５であり、ノードＮ１を第２選択ノードである組合せが第１閾値に基づく条件を満たさないと判定する。この場合、生成部１３３は、ノードＮ５を始点としノードＮ１を終点とするエッジＥ５−１を第２グラフデータＧＲ１２に追加しない。
【０１３２】
図１の例では、生成部１３３は、第２選択ノードであるノードＮ９を終点とする入力エッジの数が第１閾値「４」未満の０本であるため、第１閾値の条件を満たすと判定する。一方、生成部１３３は、第１選択ノードであるノードＮ５を始点とする出力エッジの数がエッジＥ６−１〜Ｅ８−１の３本であり、第２閾値「３」未満ではないため、第２閾値の条件を満たさないと判定する。この場合、生成部１３３は、ノードＮ５を始点としノードＮ９を終点とするエッジＥ９−１を第２グラフデータＧＲ１２に追加しない。
【０１３３】
（検索部１３４）
検索部１３４は、各種情報を検索する。例えば、検索部１３４は、グラフデータを探索することにより、オブジェクトを検索する。例えば、検索部１３４は、取得部１３１により取得されたクエリが取得された場合、グラフデータを探索することにより、クエリに類似するオブジェクトを検索する。例えば、検索部１３４は、グラフデータを探索することにより、クエリに類似するオブジェクトを抽出する。例えば、検索部１３４は、図１３に示すような処理手順に基づいて、グラフデータを探索することにより、クエリに類似するオブジェクトを抽出する。なお、検索部１３４は、検索サービスを提供しない場合、検索部１３４を有しなくてもよい。
【０１３４】
（提供部１３５）
提供部１３５は、各種情報を提供する。例えば、提供部１３５は、端末装置１０や情報提供装置５０に各種情報を提供する。例えば、提供部１３５は、クエリに対応するオブジェクトＩＤを検索結果として提供する。例えば、提供部１３５は、検索部１３４により検索されたオブジェクトＩＤを情報提供装置５０へ提供する。例えば、提供部１３５は、検索部１３４が検索により抽出したオブジェクトＩＤを情報提供装置５０へ提供する。提供部１３５は、検索部１３４により抽出されたオブジェクトＩＤをクエリに対応するベクトルを示す情報として情報提供装置５０に提供する。
【０１３５】
また、提供部１３５は、生成部１３３により生成された第２グラフデータを外部の情報処理装置へ提供してもよい。例えば、提供部１３５は、生成部１３３により生成された第２グラフデータＧＲ１２を情報提供装置５０に送信してもよい。
【０１３６】
〔４．生成処理のフロー〕
次に、図９を用いて、実施形態に係る生成システム１による生成処理の手順について説明する。図９は、実施形態に係る生成処理の一例を示すフローチャートである。
【０１３７】
図９に示すように、生成装置１００は、基グラフデータを取得する（ステップＳ１０１）。例えば、生成装置１００は、基グラフデータ記憶部１２２から基グラフデータを取得する。図１の例では、生成装置１００は、基グラフデータＧＲ１０を取得する。
【０１３８】
そして、生成装置１００は、基グラフデータから第１グラフデータを生成する（ステップＳ１０２）。例えば、生成装置１００は、基グラフデータ中のエッジの向きを反転させることにより、基グラフデータのエッジの向きが逆となった第１グラフデータを生成する。図１の例では、生成装置１００は、基グラフデータＧＲ１０から基グラフデータＧＲ１の転置グラフである第１グラフデータＧＲ１１を生成する。
【０１３９】
そして、生成装置１００は、第１グラフデータからエッジを除いた第２グラフデータを生成する（ステップＳ１０３）。例えば、生成装置１００は、第１グラフデータからエッジを除くことにより、ノードのみを有する第２グラフデータを生成する。図１の例では、生成装置１００は、第１グラフデータＧＲ１１からノードのみを有する第２グラフデータＧＲ１２−１を生成する。
【０１４０】
そして、生成装置１００は、第２グラフデータにおいて第１選択ノードとして選択前のノード（第１未選択ノード）のうち、第１グラフデータにおける出力エッジの数に基づいて、第１選択ノードを選択する（ステップＳ１０４）。例えば、生成装置１００は、第２グラフデータＧＲ１２−１における第１未選択ノード（ノードＮ５〜Ｎ１１）うち、第１グラフデータＧＲ１１において最も出力エッジが少ない（３本である）ノードＮ１０を、第１選択ノードとして選択する。
【０１４１】
そして、生成装置１００は、第１グラフにおいて第１選択ノードを始点とする出力エッジが連結される対象ノードのうち、出力エッジの長さに基づいて、第２選択ノードを選択する（ステップＳ１０５）。例えば、生成装置１００は、第１選択ノードがノードＮ１０である場合、ノードＮ１０からの出力エッジが連結されるノードＮ１、Ｎ１１、Ｎ１２の３つのノードを対象ノードとして、第２選択ノードを選択する。例えば、生成装置１００は、第１グラフデータＧＲ１１においてノードＮ１０を始点とするエッジＥ１０−１、Ｅ１１−１、Ｅ１２−１のうち、長さが最も短いエッジ（例えば、エッジＥ１０−１）が連結されるエッジ（例えば、ノードＮ１）を、第２選択ノードとして選択する。
【０１４２】
そして、生成装置１００は、第２グラフにおいて、第２選択ノードを終点とする入力エッジの数が第１閾値未満であり、第１選択ノードを始点とする出力エッジの数が第２閾値未満である場合、第１選択ノードを始点とし第２選択ノードを終点とする出力エッジを第２グラフに追加する（ステップＳ１０６）。例えば、生成装置１００は、第２グラフデータＧＲ１２−２において、第２選択ノードを終点とする入力エッジの数が第１閾値「４」未満であり、第１選択ノードを始点とする出力エッジの数が第２閾値「３」未満である場合、第１選択ノードを始点とし第２選択ノードを終点とする出力エッジを第２グラフに追加する。図１の例では、生成装置１００は、第２グラフデータＧＲ１２−２において、第２選択ノードであるノードＮ１を終点とする入力エッジの数が第１閾値「４」未満の３本であり、第１選択ノードであるノードＮ１０を始点とする出力エッジの数が第２閾値「３」未満の０本である。そのため、生成装置１００は、第１閾値及び第２閾値に基づく条件を満たすと判定し、ノードＮ１０を始点としノードＮ１を終点とするエッジＥ１０−１を第２グラフデータＧＲ１２に追加する。
【０１４３】
そして、生成装置１００は、第２選択ノードとして未選択の対象ノードが有るかどうかを判定する（ステップＳ１０７）。具体的には、生成装置１００は、選択中の第１選択ノードに対する第２選択ノードとして未選択の対象ノードが有るかどうかを判定する。すなわち、各ノードは、異なる第１選択ノードに対する第２選択ノードとして複数回選択され得る。例えば、生成装置１００は、一のノードを異なる第１選択ノードに対する第２選択ノードとして複数回選択する。例えば第１グラフデータＧＲ１１における入力エッジの本数が５本であるノードＮ１の場合、生成装置１００は、ノードＮ１を異なる５個の第１選択ノード（ノードＮ２〜５、Ｎ１０）に対する第２選択ノードとして５回選択する。
【０１４４】
生成装置１００は、第２選択ノードとして未選択の対象ノードが有ると判定した場合（ステップＳ１０７：Ｙｅｓ）、ステップＳ１０５に戻って、ステップＳ１０５において第２選択ノードとして未選択の対象ノードから第２選択ノードを選択し、以降の処理を繰り返す。また、生成装置１００は、第２選択ノードとして未選択の対象ノードが無いと判定した場合（ステップＳ１０７：Ｎｏ）、第１選択ノードとして未選択のノードが有るかどうかを判定する（ステップＳ１０８）。
【０１４５】
生成装置１００は、第１選択ノードとして未選択の対象ノードが有ると判定した場合（ステップＳ１０８：Ｙｅｓ）、ステップＳ１０４に戻って、処理を繰り返す。また、生成装置１００は、第１選択ノードとして未選択の対象ノードが無いと判定した場合（ステップＳ１０８：Ｎｏ）、処理を終了する。
【０１４６】
〔５．入力エッジが無い場合〕
次に、図１０を用いて、実施形態に係る生成システム１による入力追加処理の手順について説明する。図１０は、実施形態に係る入力追加処理の一例を示すフローチャートである。
【０１４７】
図１０に示すように、生成装置１００は、入力エッジの数が０であるノードを処理ノードとして選択する（ステップＳ２０１）。例えば、生成装置１００は、あるノードが最初に第１選択ノードとして行われた更新処理終了後において、そのノードの入力エッジの数が０本である場合、そのノードを処理ノードとして選択する。また。例えば、生成装置１００は、更新処理の繰返し終了後の第２グラフデータ中のノードのうち、入力エッジの数が０本であるノードを処理ノードとして選択する。図１１の例では、生成装置１００は、更新処理の繰返し終了後の第２グラフデータＧＲ１２−２１中のノードのうち、入力エッジの数が０本であるノードＮ５を処理ノードとして選択する。例えば、生成装置１００は、第２グラフ中の全ノード（ノードＮ１〜Ｎ１２等）の各々が第１選択ノードとして選択された更新処理の繰返し終了後の第２グラフデータＧＲ１２−２１中のノードのうち、入力エッジの数が０本であるノードＮ５を処理ノードとして選択する。
【０１４８】
そして、生成装置１００は、第１グラフデータにおいて処理ノードに連結される入力エッジのうち、長さが所定の条件を満たす入力エッジを第２グラフデータに追加する（ステップＳ２０２）。例えば、生成装置１００は、第１グラフデータにおいて処理ノードに連結される入力エッジのうち、長さが最も短い入力エッジを第２グラフデータに追加する。図１１の例では、生成装置１００は、第１グラフデータＧＲ１１中においてノードＮ５を終点とするエッジＥ５１−１、Ｅ５２−１のうち、最も短いエッジＥ５１−１を追加した第２グラフデータＧＲ１２−２２を生成する。また、図１の例では、更新処理中に入力追加処理を行う場合、生成装置１００は、ノードＮ１を第１選択ノードとする更新処理更新処理後において、ノードＮ１の入力エッジは０本であるため、グラフデータＧＲ１１中においてノードＮ１を終点とするエッジＥ２−１〜Ｅ５−１のうち、最も短いエッジＥ２−１を追加する。
【０１４９】
〔６．入力追加処理の例〕
ここで、図１１を用いて、入力追加処理を行う場合を説明する。図１１は、実施形態に係る入力追加処理の一例を示す図である。具体的には、図１１は、入力エッジが無い（０本である）ノードについて、入力エッジを追加する処理を示す。なお、図１と同様の点については適宜説明を省略する。例えば、図１１に示すベクトル空間である空間情報ＶＳ１は、図１の空間情報ＶＳ１と同様である。また、例えば、図１１に示す第１グラフデータＧＲ１１は、図１に示す第１グラフデータＧＲ１１と同様である。
【０１５０】
なお、図１１の例では、説明を簡単にするために、空間情報ＶＳ１−２２中の第２グラフデータＧＲ１２−２１においては、ノードＮ５を除く全てのノードに少なくとも１本の入力エッジが連結されている場合を示す。
【０１５１】
まず、生成装置１００は、入力エッジの数が０であるノードを処理ノードとして選択する（ステップＳ２１）。図１１の例では、生成装置１００は、更新処理の繰返し終了後の第２グラフデータＧＲ１２−２１中のノードのうち、入力エッジの数が０本であるノードＮ５を処理ノードとして選択する。
【０１５２】
そして、生成装置１００は、第１グラフデータにおいて処理ノードに連結される入力エッジのうち、長さが所定の条件を満たす入力エッジを第２グラフデータに追加する（ステップＳ２２）。例えば、生成装置１００は、第１グラフデータにおいて処理ノードに連結される入力エッジのうち、長さが最も短い入力エッジを第２グラフデータに追加する。図１１の例では、一覧情報ＬＴ２１に示すように、距離Ｄ５１、Ｄ５２のうち、距離Ｄ５１が最も小さく、距離Ｄ５２が最も大きいものとする。
【０１５３】
そのため、生成装置１００は、一覧情報ＬＴ２１に示すように、第１グラフデータＧＲ１１中においてノードＮ５を終点とするエッジＥ５１−１、Ｅ５２−１のうち、最も短いエッジＥ５１−１を追加する。これにより、生成装置１００は、空間情報ＶＳ１−２２に示すように、エッジＥ５１−１が追加され入力エッジが０本となるノードがない第２グラフデータＧＲ１２−２２を生成する。このように、生成装置１００は、他のノードから到達することができないノードを無くすことにより、第２グラフを用いた検索処理時において検索されないノード（対象）が生じることを抑制することにより、所定の対象に関する効率的な検索を可能にすることができる。
【０１５４】
〔７．比較例〕
ここで、第１選択ノードの選択順序が異なる場合における結果との比較を示す。図１２は、実施形態に係る比較例を示す図である。なお、図１と同様の点については適宜説明を省略する。例えば、図１２に示すベクトル空間である空間情報ＶＳ１は、図１の空間情報ＶＳ１と同様である。また、例えば、図１２に示す第２グラフデータＧＲ１２−４は、図２に示す第２グラフデータＧＲ１２−４と同様であり、第１選択ノードを出力エッジが少ない方から順に選択した場合の結果である。
【０１５５】
一方、図１２に示す第２グラフデータＧＲ３１は、第１選択ノードをノードＩＤが小さい方から順に選択した場合の結果である。図１２に示す第２グラフデータＧＲ３１は、「ノードＮ＊（＊は任意の数値）」の「＊」が小さい方から順に第１選択ノードを選択した場合に生成される第２グラフデータを示す。
【０１５６】
第２グラフデータＧＲ３１に示すように、ノードＩＤが小さい方から順に選択した場合、ノードＮ１０よりも先にノードＮ５が第１選択ノードとして選択される。そのため、第２グラフデータにエッジＥ５−１が追加される。これにより、第２グラフデータＧＲ１２−４において追加されたエッジＥ１０−１やエッジＥ７−１が追加されないこととなる。このように、第２グラフデータＧＲ３１においては、エッジＥ７−１が追加されなくなるため、各ノードの入力エッジ（内向きエッジ）を多くすることが難しい場合がある。
【０１５７】
一方で、図１２に示す第２グラフデータＧＲ１２−４は、ノードＮ７にも内向きエッジであるエッジＥ７−１が連結されており、できるだけ多くのノードに内向きエッジを連結させることができる。
【０１５８】
〔８．検索例〕
ここで、上述したグラフデータを用いた検索の一例を示す。なお、生成したグラフデータを用いた検索は下記に限らず、種々の手順により行われてもよい。この点について、図１３を一例として説明する。図１３は、グラフデータを用いた検索処理の一例を示すフローチャートである。以下に説明する検索処理は、生成装置１００の検索部１３４によって行われる。また、以下でいうオブジェクトは、ノードと読み替えてもよい。なお、以下では、生成装置１００（検索部１３４）が検索処理を行うものとして説明するが、検索処理は他の装置により行われてもよい。この場合、生成装置１００は検索部１３４を有しなくてもよい。
【０１５９】
ここでは、近傍オブジェクト集合Ｎ（Ｇ，ｙ）は、ノードｙに付与されているエッジにより関連付けられている近傍のオブジェクトの集合である。「Ｇ」は、所定のグラフデータ（例えば、第２グラフデータＧＲ１２等）であってもよい。例えば、生成装置１００は、ｋ近傍検索処理を実行する。
【０１６０】
例えば、生成装置１００は、超球の半径ｒを∞（無限大）に設定し（ステップＳ３００）、既存のオブジェクト集合から部分集合Ｓを抽出する（ステップＳ３０１）。例えば、生成装置１００は、ルートノードとして選択されたオブジェクト（ノード）を部分集合Ｓとして抽出してもよい。また、例えば、超球とは、検索範囲を示す仮想的な球である。なお、ステップＳ３０１において抽出されたオブジェクト集合Ｓに含まれるオブジェクトは、同時に検索結果のオブジェクト集合Ｒの初期集合にも含められる。
【０１６１】
次に、生成装置１００は、オブジェクト集合Ｓに含まれるオブジェクトの中で、検索クエリオブジェクトをｙとするとオブジェクトｙとの距離が最も短いオブジェクトを抽出し、オブジェクトｓとする（ステップＳ３０２）。例えば、生成装置１００は、ルートノードとして選択されたオブジェクト（ノード）のみがＳの要素の場合には、結果的にルートノードがオブジェクトｓとして抽出される。次に、生成装置１００は、オブジェクトｓをオブジェクト集合Ｓから除外する（ステップＳ３０３）。
【０１６２】
次に、生成装置１００は、オブジェクトｓとオブジェクトｙとの距離ｄ（ｓ，ｙ）がｒ（１＋ε）を超えるか否かを判定する（ステップＳ３０４）。ここで、εは拡張要素であり、ｒ（１＋ε）は、探索範囲（この範囲内のノードのみを探索する。検索範囲よりも大きくすることで精度を高めることができる）の半径を示す値である。オブジェクトｓとオブジェクトｙとの距離ｄ（ｓ，ｙ）がｒ（１＋ε）を超える場合（ステップＳ３０４：Ｙｅｓ）、生成装置１００は、オブジェクト集合Ｒをオブジェクトｙの近傍オブジェクト集合として出力し（ステップＳ３０５）、処理を終了する。
【０１６３】
オブジェクトｓと検索クエリオブジェクトｙとの距離ｄ（ｓ，ｙ）がｒ（１＋ε）を超えない場合（ステップＳ３０４：Ｎｏ）、生成装置１００は、オブジェクトｓの近傍オブジェクト集合Ｎ（Ｇ，ｓ）の要素であるオブジェクトの中からオブジェクト集合Ｃに含まれないオブジェクトを一つ選択し、選択したオブジェクトｕを、オブジェクト集合Ｃに格納する（ステップＳ３０６）。オブジェクト集合Ｃは、重複検索を回避するために便宜上設けられるものであり、処理開始時には空集合に設定される。
【０１６４】
次に、生成装置１００は、オブジェクトｕとオブジェクトｙとの距離ｄ（ｕ，ｙ）がｒ（１＋ε）以下であるか否かを判定する（ステップＳ３０７）。オブジェクトｕとオブジェクトｙとの距離ｄ（ｕ，ｙ）がｒ（１＋ε）以下である場合（ステップＳ３０７：Ｙｅｓ）、生成装置１００は、オブジェクトｕをオブジェクト集合Ｓに追加する（ステップＳ３０８）。また、オブジェクトｕとオブジェクトｙとの距離ｄ（ｕ，ｙ）がｒ（１＋ε）以下ではない場合（ステップＳ３０７：Ｎｏ）、生成装置１００は、ステップＳ３０９の判定（処理）を行う。
【０１６５】
次に、生成装置１００は、オブジェクトｕとオブジェクトｙとの距離ｄ（ｕ，ｙ）がｒ以下であるか否かを判定する（ステップＳ３０９）。オブジェクトｕとオブジェクトｙとの距離ｄ（ｕ，ｙ）がｒを超える場合、生成装置１００は、ステップＳ３１５の判定（処理）を行う。また、オブジェクトｕとオブジェクトｙとの距離ｄ（ｕ，ｙ）がｒ以下ではない場合（ステップＳ３０９：Ｎｏ）、生成装置１００は、ステップＳ３１５の判定（処理）を行う。
【０１６６】
オブジェクトｕとオブジェクトｙとの距離ｄ（ｕ，ｙ）がｒ以下である場合（ステップＳ３０９：Ｙｅｓ）、生成装置１００は、オブジェクトｕをオブジェクト集合Ｒに追加する（ステップＳ３１０）。そして、生成装置１００は、オブジェクト集合Ｒに含まれるオブジェクト数がｋｓを超えるか否かを判定する（ステップＳ３１１）。所定数ｋｓは、任意に定められる自然数である。例えば、ｋｓ＝２であってもよい。オブジェクト集合Ｒに含まれるオブジェクト数がｋｓを超えない場合（ステップＳ３１１：Ｎｏ）、生成装置１００は、ステップＳ３１３の判定（処理）を行う。
【０１６７】
オブジェクト集合Ｒに含まれるオブジェクト数がｋｓを超える場合（ステップＳ３１１：Ｙｅｓ）、生成装置１００は、オブジェクト集合Ｒに含まれるオブジェクトの中でオブジェクトｙとの距離が最も長い（遠い）オブジェクトを、オブジェクト集合Ｒから除外する（ステップＳ３１２）。
【０１６８】
次に、生成装置１００は、オブジェクト集合Ｒに含まれるオブジェクト数がｋｓと一致するか否かを判定する（ステップＳ３１３）。オブジェクト集合Ｒに含まれるオブジェクト数がｋｓと一致しない場合（ステップＳ３１３：Ｎｏ）、生成装置１００は、ステップＳ３１５の判定（処理）を行う。また、オブジェクト集合Ｒに含まれるオブジェクト数がｋｓと一致する場合（ステップＳ３１３：Ｙｅｓ）、生成装置１００は、オブジェクト集合Ｒに含まれるオブジェクトの中でオブジェクトｙとの距離が最も長い（遠い）オブジェクトと、オブジェクトｙとの距離を、新たなｒに設定する（ステップＳ３１４）。
【０１６９】
そして、生成装置１００は、オブジェクトｓの近傍オブジェクト集合Ｎ（Ｇ，ｓ）の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Ｃに格納し終えたか否かを判定する（ステップＳ３１５）。オブジェクトｓの近傍オブジェクト集合Ｎ（Ｇ，ｓ）の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Ｃに格納し終えていない場合（ステップＳ３１５：Ｎｏ）、生成装置１００は、ステップＳ３０６に戻って処理を繰り返す。
【０１７０】
オブジェクトｓの近傍オブジェクト集合Ｎ（Ｇ，ｓ）の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Ｃに格納し終えた場合（ステップＳ３１５：Ｙｅｓ）、生成装置１００は、オブジェクト集合Ｓが空集合であるか否かを判定する（ステップＳ３１６）。オブジェクト集合Ｓが空集合でない場合（ステップＳ３１６：Ｎｏ）、生成装置１００は、ステップＳ３０２に戻って処理を繰り返す。また、オブジェクト集合Ｓが空集合である場合（ステップＳ３１６：Ｙｅｓ）、生成装置１００は、オブジェクト集合Ｒを出力し、処理を終了する（ステップＳ３１７）。例えば、生成装置１００は、オブジェクト集合Ｒに含まれるオブジェクト（ノード）を検索クエリ（入力オブジェクトｙ）に対応する検索結果として、検索を行った端末装置等へ提供してもよい。
【０１７１】
〔９．効果〕
上述してきたように、実施形態に係る生成装置１００は、取得部１３１と、第１選択部（実施形態では選択部１３２）と、第２選択部（実施形態では選択部１３２）と、生成部１３３とを有する。取得部１３１は、データ検索の対象となる複数のノードの情報と、当該複数のノード間を連結する有向エッジ群である第１エッジ群の情報とを含む第１グラフ（実施形態では、「第１グラフデータＧＲ１１」。以下同じ）と、複数のノードの情報を含む第２グラフ（実施形態では、「第２グラフデータＧＲ１２−１」）を取得する。第１選択部としての選択部１３２は、複数のノードのうち、第１グラフにおいて他のノードを終点とする出力エッジの数に基づいて第１選択ノードを選択する。第２選択部としての選択部１３２は、１グラフにおいて第１選択ノードを始点とする出力エッジが連結される対象ノードのうち、当該出力エッジの長さに基づいて第２選択ノードを選択する。生成部１３３は、第２グラフにおいて、第１選択ノードを始点とする出力エッジの数が所定の閾値（実施形態では「第２閾値」。以下同じ）未満である場合、第１エッジ群において第１選択ノードを始点とし第２選択ノードを終点とする出力エッジを第２グラフに第２エッジの情報として追加する更新処理により、第２グラフ（実施形態では、「第２グラフデータＧＲ１２−４」）を生成する。
【０１７２】
このように、実施形態に係る生成装置１００は、出力エッジの数に基づいて第１選択ノードを選択し、出力エッジの長さに基づいて第２選択ノードを選択し、第１選択ノードを始点とする出力エッジの数が第２閾値（実施形態では「３」）未満である場合、第１選択ノードから第２選択ノードへの出力エッジを第２グラフデータに追加する更新処理により、第２グラフデータＧＲ１２を生成することができる。したがって、生成装置１００は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【０１７３】
また、実施形態に係る生成装置１００において、生成部１３３は、第２グラフにおいて、第２選択ノードを終点とする入力エッジの数が他の閾値（実施形態では「第１閾値」。以下同じ）未満であり、第１選択ノードを始点とする出力エッジの数が所定の閾値未満である場合、更新処理により、第２エッジが追加された第２グラフを生成する。
【０１７４】
このように、実施形態に係る生成装置１００は、第２選択ノードを終点とする入力エッジの数が第１閾値（実施形態では「４」）未満であり、第１選択ノードを始点とする出力エッジの数が第２閾値未満である場合、第１選択ノードから第２選択ノードへの出力エッジを第２グラフデータに追加する更新処理により、第２グラフデータＧＲ１２を生成することができる。したがって、生成装置１００は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【０１７５】
また、実施形態に係る生成装置１００において、取得部１３１は、所定の基準に基づいて生成された近傍グラフ（実施形態では、「基グラフデータＧＲ１０」）であって、複数のノード間を連結する有向エッジ群である所定のエッジ群で連結された近傍グラフのうち、所定のエッジ群の各エッジの向きを反転させた第１エッジ群の情報を含む転置グラフである第１グラフを取得する。
【０１７６】
このように、実施形態に係る生成装置１００は、近傍グラフの各エッジの向きを反転させた転置グラフである第１グラフデータを用いて第２グラフデータを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【０１７７】
また、実施形態に係る生成装置１００において、第１選択部としての選択部１３２は、複数のノードのうち、第１グラフにおいて他のノードを終点とする出力エッジの数が少ないノードから順に第１選択ノードとして選択する。
【０１７８】
このように、実施形態に係る生成装置１００は、複数のノードのうち、第１グラフにおいて他のノードを終点とする出力エッジの数が少ないノードから順に第１選択ノードとして選択することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【０１７９】
また、実施形態に係る生成装置１００において、第２選択部としての選択部１３２は、対象ノードのうち、各ノードから第１選択ノードを始点とする出力エッジが短いノードから順に第２選択ノードとして選択する。
【０１８０】
このように、実施形態に係る生成装置１００は、対象ノードのうち、各ノードから第１選択ノードを始点とする出力エッジが短いノードから順に第２選択ノードとして選択することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【０１８１】
また、実施形態に係る生成装置１００において、生成部１３３は、第１選択部としての選択部１３２により選択される第１選択ノードと、第２選択部としての選択部１３２により選択される第２選択ノードとの組合せごとに更新処理を繰り返すことにより、第２エッジが追加された第２グラフを生成する。
【０１８２】
このように、実施形態に係る生成装置１００は、選択された第１選択ノードと第２選択ノードとの組合せごとに更新処理を繰り返すことにより、第２グラフを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【０１８３】
また、実施形態に係る生成装置１００において、生成部１３３は、更新処理時の第２グラフに含まれる第２エッジの情報を対象として、更新処理を繰り返すことにより、第２エッジが追加された第２グラフを生成する。
【０１８４】
このように、実施形態に係る生成装置１００は、更新処理時の第２グラフに含まれる第２エッジの情報を対象として、生成処理を繰り返すことにより、第２エッジが追加された第２グラフを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【０１８５】
また、実施形態に係る生成装置１００において、生成部１３３は、第２グラフにおける複数のノードのうち、入力エッジが連結されていないノードである入力無ノードがある場合、第１グラフにおいて当該ノードに連結される入力エッジのうち、長さが所定の基準を満たすエッジを、当該ノードの入力エッジとして第２エッジに追加する入力追加処理により、第２エッジが追加された第２グラフを生成する。
【０１８６】
このように、実施形態に係る生成装置１００は、第２グラフにおける複数のノードのうち、入力無ノードがある場合、入力追加処理により入力エッジが０本である、すなわち入力エッジが無いノードを無くす。すなわち、生成装置１００は、各ノードに少なくとも１本以上の入力エッジが連結された第２グラフを生成することができ、検索時にエッジを辿って到達できないノードを無くし、エッジを辿ることにより各ノードに到達可能とする。これにより、生成装置１００は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【０１８７】
また、実施形態に係る生成装置１００において、生成部１３３は、第１グラフにおいて当該ノードに連結される入力エッジのうち、長さが最も短いエッジを、当該ノードの入力エッジとして第２エッジに追加する入力追加処理により、第２エッジが追加された第２グラフを生成する。
【０１８８】
このように、実施形態に係る生成装置１００は、入力追加処理において、第１グラフにおいて当該ノードに連結される入力エッジのうち、長さが最も短いエッジを、当該ノードの入力エッジとして第２エッジに追加することにより、類似性の高いノード間のエッジを追加することができる。これにより、生成装置１００は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【０１８９】
また、実施形態に係る生成装置１００において、生成部１３３は、更新処理時において入力追加処理を行うことにより、第２エッジが追加された第２グラフを生成する。
【０１９０】
このように、実施形態に係る生成装置１００は、更新処理時において入力追加処理を行うことにより、各ノードが更新処理の対象となった際に入力エッジが０本となるノードが残る可能性を無くすことにより、第２エッジが追加された第２グラフを生成する。すなわち、生成装置１００は、更新処理の中で各ノードに少なくとも１本以上の入力エッジが連結された第２グラフを生成することができ、検索時にエッジを辿って到達できないノードを無くし、エッジを辿ることにより各ノードに到達可能とする。これにより、生成装置１００は、第２グラフ生成の処理時間の増大を抑制しつつ、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【０１９１】
また、実施形態に係る生成装置１００において、生成部１３３は、更新処理の繰り返し終了後において入力追加処理を行うことにより、第２グラフを生成する。
【０１９２】
このように、実施形態に係る生成装置１００は、更新処理の繰り返し終了後において入力追加処理を行うことにより、各ノードを対象とした更新処理が行われた後に、入力エッジが０本となっているノードのみを対象として入力追加処理を行う。したがって、生成装置１００は、入力追加処理を行う対象を更新処理後において入力エッジが０本であるノードのみを対象とすることができるため、入力追加処理により追加されるエッジの本数を少なくすることができる。すなわち、生成装置１００は、入力追加処理により追加されるエッジの本数を少なくしつつ、各ノードに少なくとも１本以上の入力エッジが連結された第２グラフを生成することができ、検索時にエッジを辿って到達できないノードを無くし、エッジを辿ることにより各ノードに到達可能とする。これにより、生成装置１００は、エッジの本数の増大を抑制しつつ、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
【０１９３】
〔１０．ハードウェア構成〕
上述してきた実施形態に係る生成装置１００は、例えば図１４に示すような構成のコンピュータ１０００によって実現される。図１４は、生成装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。コンピュータ１０００は、ＣＰＵ１１００、ＲＡＭ１２００、ＲＯＭ（Read  Only  Memory）１３００、ＨＤＤ（Hard  Disk  Drive）１４００、通信インターフェイス（Ｉ／Ｆ）１５００、入出力インターフェイス（Ｉ／Ｆ）１６００、及びメディアインターフェイス（Ｉ／Ｆ）１７００を有する。
【０１９４】
ＣＰＵ１１００は、ＲＯＭ１３００またはＨＤＤ１４００に格納されたプログラムに基づいて動作し、各部の制御を行う。ＲＯＭ１３００は、コンピュータ１０００の起動時にＣＰＵ１１００によって実行されるブートプログラムや、コンピュータ１０００のハードウェアに依存するプログラム等を格納する。
【０１９５】
ＨＤＤ１４００は、ＣＰＵ１１００によって実行されるプログラム、及び、かかるプログラムによって使用されるデータ等を格納する。通信インターフェイス１５００は、ネットワークＮを介して他の機器からデータを受信してＣＰＵ１１００へ送り、ＣＰＵ１１００が生成したデータをネットワークＮを介して他の機器へ送信する。
【０１９６】
ＣＰＵ１１００は、入出力インターフェイス１６００を介して、ディスプレイやプリンタ等の出力装置、及び、キーボードやマウス等の入力装置を制御する。ＣＰＵ１１００は、入出力インターフェイス１６００を介して、入力装置からデータを取得する。また、ＣＰＵ１１００は、生成したデータを入出力インターフェイス１６００を介して出力装置へ出力する。
【０１９７】
メディアインターフェイス１７００は、記録媒体１８００に格納されたプログラムまたはデータを読み取り、ＲＡＭ１２００を介してＣＰＵ１１００に提供する。ＣＰＵ１１００は、かかるプログラムを、メディアインターフェイス１７００を介して記録媒体１８００からＲＡＭ１２００上にロードし、ロードしたプログラムを実行する。記録媒体１８００は、例えばＤＶＤ（Digital  Versatile  Disc）、ＰＤ（Phase  change  rewritable  Disk）等の光学記録媒体、ＭＯ（Magneto-Optical  disk）等の光磁気記録媒体、テープ媒体、磁気記録媒体、または半導体メモリ等である。
【０１９８】
例えば、コンピュータ１０００が実施形態に係る生成装置１００として機能する場合、コンピュータ１０００のＣＰＵ１１００は、ＲＡＭ１２００上にロードされたプログラムを実行することにより、制御部１３０の機能を実現する。コンピュータ１０００のＣＰＵ１１００は、これらのプログラムを記録媒体１８００から読み取って実行するが、他の例として、他の装置からネットワークＮを介してこれらのプログラムを取得してもよい。
【０１９９】
以上、本願の実施形態のいくつかを図面に基づいて詳細に説明したが、これらは例示であり、発明の開示の行に記載の態様を始めとして、当業者の知識に基づいて種々の変形、改良を施した他の形態で本発明を実施することが可能である。
【０２００】
〔１１．その他〕
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、各図に示した各種情報は、図示した情報に限られない。
【０２０１】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【０２０２】
また、上述してきた各実施形態に記載された各処理は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【０２０３】
また、上述してきた「部（section、module、unit）」は、「手段」や「回路」などに読み替えることができる。例えば、取得部は、取得手段や取得回路に読み替えることができる。
【符号の説明】
【０２０４】
１  生成システム
１００  生成装置
１２１  オブジェクト情報記憶部
１２２  基グラフデータ記憶部
１２３  第１グラフデータ記憶部
１２４  閾値情報記憶部
１２５  第２グラフデータ記憶部
１３０  制御部
１３１  取得部
１３２  選択部（第１選択部、第２選択部）
１３３  生成部
１３４  検索部
１３５  提供部
１０  端末装置
５０  情報提供装置
Ｎ  ネットワーク
【図１】
2019144780.tif 000003
【図２】
2019144780.tif 000004
【図３】
2019144780.tif 000005
【図４】
2019144780.tif 000006
【図５】
2019144780.tif 000007
【図６】
2019144780.tif 000008
【図７】
2019144780.tif 000009
【図８】
2019144780.tif 000010
【図９】
2019144780.tif 000011
【図１０】
2019144780.tif 000012
【図１１】
2019144780.tif 000013
【図１２】
2019144780.tif 000014
【図１３】
2019144780.tif 000015
【図１４】
2019144780.tif 000016