以下に、本願に係る生成装置、生成方法、及び生成プログラムを実施するための形態(以下、「実施形態」と呼ぶ)について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る生成装置、生成方法、及び生成プログラムが限定されるものではない。また、以下の各実施形態において同一の部位には同一の符号を付し、重複する説明は省略される。
(実施形態)
〔1.生成処理〕
図1を用いて、実施形態に係る生成処理の一例について説明する。図1は、実施形態に係る生成処理の一例を示す図である。図1では、生成装置100(図3参照)が与えられたグラフデータ(以下、「第1グラフデータ」ともいう)に基づいて、新たなグラフデータ(以下、「第2グラフデータ」ともいう)を生成する場合を示す。なお、図1の例では、生成装置100は、所定のグラフデータ(以下、「基グラフデータ」ともいう)から第1グラフデータを生成するが詳細は後述する。また、以下では、グラフデータを単にグラフと記載する場合がある。例えば、第1グラフデータを第1グラフと記載し、第2グラフデータを第2グラフとを記載する場合がある。すなわち、図1では、生成装置100が、基グラフデータから第1グラフデータを生成し、生成した第1グラフデータから第2グラフデータを生成する場合を示す。なお、対象とする情報(オブジェクト)は、ベクトルとして表現可能であれば、どのような情報であってもよい。なお、以下では、画像情報を対象としたベクトル情報について説明するが、ベクトル情報の対象は、動画情報や音声情報等の他の対象であってもよい。
また、生成装置100は、図1に示すように、グラフデータを対象に生成処理を行う。なお、ここでいう、有向エッジとは、一方向にしかデータを辿れないエッジを意味する。以下では、エッジにより辿る元、すなわち始点となるノードを参照元とし、エッジにより辿る先、すなわち終点となるノードを参照先とする。例えば、所定のノード「A」から所定のノード「B」に連結される有向エッジとは、参照元をノード「A」とし、参照先をノード「B」とするエッジであることを示す。
以下では、このようにノード「A」を参照元とするエッジをノード「A」の出力エッジという。また、以下では、このようにノード「B」を参照先とするエッジをノード「B」の入力エッジという。すなわち、ここでいう出力エッジ及び入力エッジとは、一の有向エッジをその有向エッジが連結する2つのノードのうち、いずれのノードを中心として捉えるかの相違であり、一の有向エッジが出力エッジ及び入力エッジになる。すなわち、出力エッジ及び入力エッジは、相対的な概念であって、一の有向エッジについて、参照元となるノードを中心として捉えた場合に出力エッジとなり、参照先となるノードを中心として捉えた場合に入力エッジとなる。なお、本実施形態においては、エッジについては、出力エッジや入力エッジ等の有向エッジを対象とするため、以下では、有向エッジを単に「エッジ」と記載する場合がある。
また、ここでいう、各ノードは、各オブジェクトに対応する。例えば、画像から抽出された複数の局所特徴量のそれぞれがオブジェクトであってもよい。また、例えば、オブジェクト間の距離が定義された種々のデータがオブジェクトであってもよい。
生成装置100は、例えば数百万〜数億単位の膨大な画像情報に対応するノードを対象に処理を行うが、図面においてはその一部のみを図示する。図1の例では、説明を簡単にするために、12個のノードのみを図示して処理の概要を説明する。例えば、生成装置100は、図1中のノードN1〜N12に示すような複数のノードを含み、エッジを含まない第2グラフデータGR12−1から開始し、順次エッジを追加することにより第2グラフデータGR12を生成する。
また、このように「ノードN*(*は任意の数値)」と記載した場合、そのノードはノードID「N*」により識別されるノードであることを示す。例えば、「ノードN1」と記載した場合、そのノードはノードID「N1」により識別されるノードである。
また、このように「エッジE*(*は任意の数値)」と記載した場合、そのエッジはエッジID「E*」により識別されるエッジであることを示す。例えば、「エッジE2」と記載した場合、そのエッジはエッジID「E2」により識別されるエッジである。例えば、ノードN1を参照元とし、ノードN2を参照先として連結されるエッジE2により、ノードN1からノードN2に辿ることが可能となる。この場合、有向エッジであるエッジE2は、ノードN1を中心として識別される場合、出力エッジとなり、ノードN2を中心として識別される場合、入力エッジとなる。言い換えると、有向エッジであるエッジE2は、ノードN1側からの視点でとらえた場合、自身から他のエッジへ矢印が向いているエッジ、すなわち外向きエッジとなり、ノードN2側からの視点でとらえた場合、自身の方に矢印が向いているエッジ、すなわち内向きエッジとなる。つまり、ここでいう出力エッジは、外向きエッジと読み替えることができ、入力エッジは、内向きエッジと読み替えることができる。
また、図1に示す空間情報VS1−1〜VS1−6は、グラフデータの生成過程を模式的に示す図であり、空間情報VS1−1〜VS1−6に示す空間は、同一の空間であってもよい。また、以下では、空間情報VS1−1〜VS1−6について、特に区別なく説明する場合には、空間情報VS1と記載する。
また、図1中の空間情報VS1は、ユークリッド空間であってもよい。また、図1に示す空間情報VS1は、各ベクトル間の距離等の説明のための概念的な図であり、空間情報VS1は、多次元空間である。例えば、図1に示す空間情報VS1は、平面上に図示するため2次元の態様にて図示されるが、例えば100次元や1000次元等の多次元空間であるものとする。
また、図1に示す第2グラフデータGR12−1〜GR12−4は、グラフデータの生成過程を模式的に示す図であり、第2グラフデータGR12−1〜GR12−4は、生成処理により生成される同一のグラフデータである。また、以下では、第2グラフデータGR12−1〜GR12−4について、特に区別なく説明する場合には、第2グラフデータGR12と記載する。
また、図1に示す例においては、基グラフデータGR10、第1グラフデータGR11及び第2グラフデータGR12−1〜GR12−4においては、適宜「ノードN*(*は任意の数値)」の図示を省略し、取得した各ノードを「○」内に「ノードN*」の「*」の値を付すことにより表現する。すなわち、「ノードN*」の部分の「*」が一致するノードに対応する。例えば、空間情報VS1中の左上の「○」であって、内部に「2」が付された「○」は、ノードID「N2」により識別されるノードに対応する。例えば、図1に示す例において、各ノードに対応するベクトルデータは、N次元の実数値ベクトルであってもよい。
本実施形態においては、空間情報VS1における各ノードの距離を対応する各オブジェクト間の類似度とする。例えば、各ノードに対応する対象(画像情報)の類似性が、空間情報VS1内におけるノード間の距離として写像されているものとする。例えば、各ノードに対応する概念間の類似度が各ノード間の距離に写像されているものとする。ここで、図1に示す例においては、空間情報VS1における各ノード間の距離が短いオブジェクト同士の類似度が高く、空間情報VS1における各ノード間の距離が長いオブジェクト同士の類似度が低い。例えば、図1中の空間情報VS1において、ノードID「N5」により識別されるノードと、ノードID「N8」により識別されるノードとは近接している、すなわち距離が短い。そのため、ノードID「N5」により識別されるノードに対応するオブジェクトと、ノードID「N8」により識別されるノードに対応するオブジェクトとは類似度が高いことを示す。
また、例えば、図1中の空間情報VS1において、ノードID「N8」により識別されるノードと、ノードID「N12」により識別されるノードとは遠隔にある、すなわち距離が長い。そのため、ノードID「N8」により識別されるノードに対応するオブジェクトと、ノードID「N12」により識別されるノードに対応するオブジェクトとは類似度が低いことを示す。なお、類似度を示す指標としての距離は、ベクトル(N次元ベクトル)間の距離として適用可能であれば、どのような距離であってもよく、例えば、ユークリッド距離やマハラノビス距離やコサイン距離等の種々の距離が用いられてもよい。
また、図1の例では、生成装置100は、後述する更新処理により、ノードを有向エッジで連結することにより、グラフデータGR12を生成する。例えば、グラフデータGR12を用いた検索においては、検索時はグラフ構造型インデックスと同様の処理を行うが、開始位置(起点)は所定のインデックスを用いて決定した起点ノードからスタートしてもよい。また、例えば、生成装置100が生成したグラフデータGR12を用いて検索を行う場合、予め決定された起点ノードを起点として検索を行ってもよい。例えば、検索時においては、起点ノードがノードN1である場合、ノードN1から有向エッジを辿ることにより、ノードN2〜N12等を検索してもよい。なお、生成装置100は、検索時において図13に示すような処理手順により検索を行ってもよいが、詳細は後述する。
ここから、図1を用いて生成処理の詳細を説明する。なお、図1に示す各ステップは、第2グラフデータの生成を説明するための便宜的なステップであり、実際の処理はより詳細な処理ステップにより行われてもよい。なお、生成装置100が行う生成処理は、図1中の第2グラフデータGR12−4に示すような第2グラフデータGR12が生成されれば、どのような処理フローであってもよい。
まず、生成装置100は、基グラフデータを取得する(ステップS10)。例えば、生成装置100は、基グラフデータ記憶部122から基グラフデータを取得する。図1の例では、生成装置100は、空間情報VS1−1に示すような基グラフデータGR10を取得する。例えば、基グラフデータGR10は、所定の基準に基づいて生成された近傍グラフであってもよい。例えば、基グラフデータGR10は、k近傍(k-nearest neighbor)グラフデータである。図1の例では、基グラフデータGR10は、kが「10」であり、各ノードから近傍の410個のノードに出力エッジが連結されたグラフデータである場合を例に説明する。なお、kは「200」等の種々の値であってもよい。
なお、基グラフデータは、k近傍グラフデータに限らず、近似k近傍グラフデータ等、複数のノードが有向エッジに連結されたグラフであればどのようなグラフデータであってもよい。また、図1では、処理の説明に必要なノード及びエッジのみを図示し、他のノードやエッジについては図示を省略する。例えば、基グラフデータGR10におけるノードN2〜N4、N6〜N8等からの出力エッジについては図示を省略する。
そして、生成装置100は、基グラフデータから第1グラフデータを生成する(ステップS11)。例えば、生成装置100は、基グラフデータ中のエッジの向きを反転させることにより、基グラフデータのエッジの向きが逆となった第1グラフデータを生成する。すなわち、生成装置100は、各ノード等間の距離を変えずに、エッジの向きだけを反転させた第1グラフデータを生成する。例えば、生成装置100は、基グラフデータにおける一のノードの入力エッジを出力エッジとし、一のノードの出力エッジを入力エッジとすることにより、エッジの向きだけを反転させた第1グラフデータを生成する。
図1の例では、生成装置100は、基グラフデータGR10から空間情報VS1−2に示すような第1グラフデータGR11を生成する。生成装置100は、基グラフデータGR1の転置グラフである第1グラフデータGR11を生成する。例えば、生成装置100は、図5中の基グラフデータ記憶部122に示す各ノードの参照先を始点とし、各ノードを終点として、各エッジの始点と終点を入れ替えることにより、図6中の第1グラフデータ記憶部123に示す第1グラフデータを生成する。例えば、生成装置100は、ノードN1を始点とし、ノードN2を終点とするエッジE2を反転させることにより、空間情報VS1−2に示すように、ノードN2を始点とし、ノードN1を終点とするするエッジE2−1を含む第1グラフデータGR11を生成する。例えば、生成装置100は、種々の従来技術を適宜用いて、グラフデータの転置グラフを生成してもよい。なお、生成装置100は、基グラフデータGR10の第1グラフデータGR11を生成できれば、どのような処理により第1グラフデータGR11を生成してもよい。
そして、生成装置100は、第1グラフデータから第2グラフデータを生成する(ステップS12)。まず、生成装置100は、第1グラフデータからエッジ(第1エッジ)を除いた第2グラフデータを生成する。例えば、生成装置100は、第1グラフデータからエッジ群(第1エッジ群)を除くことにより、ノードのみを有する第2グラフデータを生成する。図1の例では、生成装置100は、空間情報VS1−3に示すように、第1グラフデータGR11からノードのみを有する第2グラフデータGR12−1を生成する。生成装置100は、ノードのみを有する第2グラフデータGR12−1から開始して、第2グラフデータに条件を満たすエッジ(以下、「第2エッジ」ともいう)を順次追加する。これにより、生成装置100は、第2エッジ群を含む第2グラフデータを生成する。
そして、生成装置100は、第2グラフデータにおけるノードのうち、第1グラフデータにおける出力エッジの数に基づいてノード(以下、「第1選択ノード」ともいう)を選択する。そして、生成装置100は、第1選択ノードからの出力エッジが連結されたノード(以下、「対象ノード」ともいう)のうち、出力エッジの短さ、すなわち第1選択ノードとの距離の近さに基づいて、ノード(以下、「第2選択ノード」ともいう)を選択する。
そして、生成装置100は、第2グラフにおいて、第2選択ノードを終点とする入力エッジの数が他の閾値(以下、「第1閾値」ともいう)未満であり、第1選択ノードを始点とする出力エッジの数が所定の閾値(以下、「第2閾値」ともいう)未満である場合、第1選択ノードを始点とし第2選択ノードを終点とする出力エッジを第2グラフに追加する。生成装置100は、上記の更新処理を第1選択ノード毎に繰り返すことにより、第2グラフデータを生成する。図1の例では、閾値一覧TL11に示すように、第1閾値「4」未満であり、第2閾値「3」未満である場合を一例として説明する。
例えば、生成装置100は、第2グラフデータにおけるノードのうち、第1グラフデータにおける出力エッジが少ない方から順に第1選択ノードを選択する。図1の例では、生成装置100は、一覧情報LT11に示すような各ノードN1〜N12の出力エッジ数に基づいて、第1選択ノードを選択する。
生成装置100は、最も出力エッジ数が少ない(0本である)ノードN1を第1選択ノードとして選択し、更新処理を行う。そして、生成装置100は、ノードN1の次に出力エッジ数が少ない(1本である)ノードN2を第1選択ノードとして選択し、更新処理を行う。また、生成装置100は、ノードN1の次に出力エッジ数が少ない(1本である)ノードN2を第1選択ノードとして選択し、更新処理を行う。また、生成装置100は、ノードN1の次に出力エッジ数が少ない(1本である)ノードN3を第1選択ノードとして選択し、更新処理を行う。このように、図1の例では、生成装置100は、ノードN1〜N4を順次第1選択ノードとして、更新処理を行うことにより第2エッジが追加された第2グラフデータを生成する(ステップS13)。すなわち、生成装置100は、更新処理を行うことにより、第2グラフデータに含まれるエッジ(第2エッジ)を更新(追加)することにより、第2エッジが追加された第2グラフデータを生成する。
生成装置100は、第1グラフデータGR11中のノードN1を始点とする出力エッジは0本であるため、第2選択ノードとして選択される対象ノードがないため、第2グラフデータGR12−1にエッジ(第2エッジ)を追加することなく、ノードN1を第1選択ノードとする更新処理を終了する。
また、生成装置100は、ノードN2を第1選択ノードとする更新処理においては、第1グラフデータGR11中のノードN2を始点とする出力エッジは1本であるため、その終点であるノードN1を第2選択ノードとして選択する。そして、生成装置100は、第2グラフデータGR12−1において、第2選択ノードであるノードN1を終点とする入力エッジの数が第1閾値「4」未満の0本であり、第1選択ノードであるノードN2を始点とする出力エッジの数が第2閾値「3」未満の1本であるため、ノードN2を始点としノードN1を終点とするエッジE2−1を第2グラフデータGR12に追加する。このように、生成装置100は、エッジの本数と第1閾値及び第2閾値との比較に基づく条件を満たすかどうかを判定する。そして、生成装置100は、条件を満たすと判定した場合、その判定対象のノードに対応するエッジを第2グラフデータに追加する。
また、生成装置100は、ノードN3を第1選択ノードとする更新処理においては、第1グラフデータGR11中のノードN3を始点とする出力エッジは1本であるため、その終点であるノードN1を第2選択ノードとして選択する。そして、生成装置100は、エッジE2−1追加後の第2グラフデータGR12において、第2選択ノードであるノードN1を終点とする入力エッジの数が第1閾値「4」未満の1本であり、第1選択ノードであるノードN3を始点とする出力エッジの数が第2閾値「3」未満の0本である。そのため、生成装置100は、第1閾値及び第2閾値に基づく条件を満たすと判定し、ノードN3を始点としノードN1を終点とするエッジE3−1を第2グラフデータGR12に追加する。
また、生成装置100は、ノードN4を第1選択ノードとする更新処理においては、第1グラフデータGR11中のノードN4を始点とする出力エッジは1本であるため、その終点であるノードN1を第2選択ノードとして選択する。そして、生成装置100は、エッジE2−1、E3−1追加後の第2グラフデータGR12において、第2選択ノードであるノードN1を終点とする入力エッジの数が第1閾値「4」未満の2本であり、第1選択ノードであるノードN4を始点とする出力エッジの数が第2閾値「3」未満の0本である。そのため、生成装置100は、第1閾値及び第2閾値に基づく条件を満たすと判定し、ノードN4を始点としノードN1を終点とするエッジE4−1を第2グラフデータGR12に追加する。これにより、生成装置100は、空間情報VS1−4に示すように、エッジE2−1、E3−1、E4−1の3本のエッジ(第2エッジ)が追加された第2グラフデータGR12−2を生成する。
そして、生成装置100は、一覧情報LT11に示すように、ノードN2〜N4の次に出力エッジ数が少ない(3本である)ノードN10を第1選択ノードとして選択する(ステップS14)。
そして、生成装置100は、第1グラフにおいて第1選択ノードを始点とする出力エッジが連結される対象ノードのうち、出力エッジの長さに基づいて、第2選択ノードを順次選択することにより、第2グラフデータを生成する(ステップS15)。図1の例では、生成装置100は、ノードN10からの出力エッジが連結されるノードN1、N11、N12の3つのノードを対象ノードとして、第2選択ノードを選択する。例えば、生成装置100は、第1グラフデータGR11においてノードN10を始点とするエッジE10−1、E11−1、E12−1のうち、長さが短いエッジが連結されるノードから順に、第2選択ノードとして選択する。
図1の例では、生成装置100は、一覧情報LT12に示すように、各エッジE10−1、E11−1、E12−1の長さ、すなわちノードN10と、ノードN1、N11、N12の3つのノードとの間の距離を算出する。例えば、生成装置100は、2つのノードのベクトルを用いて2つのノード間の距離を算出する。例えば、生成装置100は、ノードN10のベクトルとノードN1のベクトルとを用いて、エッジE10−1の長さ、すなわちノードN10とノードN1との間の距離を算出する。なお、生成装置100が算出するエッジの長さ、すなわちノード間の距離は、どのような距離であってもよく、例えば、ユークリッド距離やマハラノビス距離やコサイン距離等であってもよい。
図1の例では、生成装置100は、一覧情報LT12に示すように、ノードN10と、ノードN1、N11、N12の3つのノードとの間の距離を各々距離D10、D11、D12と算出する。すなわち、生成装置100は、エッジE10−1の長さを、距離D10と算出し、エッジE11−1の長さを距離D11と算出し、エッジE12−1の長さを距離D12と算出する。また、図1中の一覧情報LT12に示すように、距離D10、D11、D12のうち、距離D11が最も小さく、距離D10が最も大きいものとする。
そして、生成装置100は、一覧情報LT12に示す順位1位から順に参照先に示す各ノードを第2選択ノードとして選択し、エッジを追加するかを判定する。図1の例では、生成装置100は、順位1位の参照先であるノードN11を第2選択ノードとして選択し、エッジを追加するかを判定する。
第1選択ノードがノードN10であり、ノードN11を第2選択ノードとする場合、生成装置100は、第2選択ノードであるノードN11を終点とする入力エッジの数が第1閾値「4」未満の0本であり、第1選択ノードであるノードN10を始点とする出力エッジの数が第2閾値「3」未満の0本である。そのため、生成装置100は、第1閾値及び第2閾値に基づく条件を満たすと判定し、ノードN10を始点としノードN11を終点とするエッジE11−1を第2グラフデータGR12に追加する。
次に、第1選択ノードがノードN10であり、ノードN12を第2選択ノードとする場合、生成装置100は、第2選択ノードであるノードN12を終点とする入力エッジの数が第1閾値「4」未満の0本であり、第1選択ノードであるノードN10を始点とする出力エッジの数がエッジE11−1の1本であり、第2閾値「3」未満である。そのため、生成装置100は、第1閾値及び第2閾値に基づく条件を満たすと判定し、ノードN10を始点としノードN12を終点とするエッジE12−1を第2グラフデータGR12に追加する。
次に、第1選択ノードがノードN10であり、ノードN1を第2選択ノードとする場合、生成装置100は、第2選択ノードであるノードN1を終点とする入力エッジの数がエッジE2−1、E3−1、E4−1の3本であり、第1閾値「4」未満であり、第1選択ノードであるノードN10を始点とする出力エッジの数がエッジE11−1、E12−1の2本であり、第2閾値「3」未満である。そのため、生成装置100は、第1閾値及び第2閾値に基づく条件を満たすと判定し、ノードN10を始点としノードN1を終点とするエッジE10−1を第2グラフデータGR12に追加する。これにより、生成装置100は、空間情報VS1−5に示すように、エッジE10−1、E11−1、E12−1の3本のエッジ(第2エッジ)が追加された第2グラフデータGR12−3を生成する。
そして、生成装置100は、一覧情報LT11に示すように、ノードN10の次に出力エッジ数が少ない(5本である)ノードN5を第1選択ノードとして選択する(ステップS16)。
そして、生成装置100は、第1グラフにおいて第1選択ノードを始点とする出力エッジが連結される対象ノードのうち、出力エッジの長さに基づいて、第2選択ノードを順次選択することにより、第2グラフデータを生成する(ステップS17)。図1の例では、生成装置100は、ノードN5からの出力エッジが連結されるノードN1、N6〜N9の5つのノードを対象ノードとして、第2選択ノードを選択する。例えば、生成装置100は、第1グラフデータGR11においてノードN5を始点とするエッジE5−1〜E9−1のうち、長さが短いエッジが連結されるノードから順に、第2選択ノードとして選択する。
図1の例では、生成装置100は、一覧情報LT13に示すように、各エッジE5−1〜E9−1の長さ、すなわちノードN5と、ノードN1、N6〜N9の5つのノードとの間の距離を算出する。図1の例では、生成装置100は、一覧情報LT13に示すように、ノードN5と、ノードN1、N6〜N9の5つのノードとの間の距離を各々距離D5〜D9と算出する。すなわち、生成装置100は、エッジE10−1の長さを、距離D10と算出し、エッジE11−1の長さを距離D11と算出し、エッジE12−1の長さを距離D12と算出する。また、図1中の一覧情報LT12に示すように、距離D5〜D9のうち、距離D8が最も小さく、距離D9が最も大きいものとする。また、距離D8、D6、D5、D7、D9の順で小さいものとする。
そして、生成装置100は、一覧情報LT13に示す順位1位から順に参照先に示す各ノードを第2選択ノードとして選択し、エッジを追加するかを判定する。図1の例では、生成装置100は、順位1位の参照先であるノードN8を第2選択ノードとして選択し、エッジを追加するかを判定する。
まず、第1選択ノードがノードN5であり、ノードN8を第2選択ノードとする場合、生成装置100は、第2選択ノードであるノードN8を終点とする入力エッジの数が第1閾値「4」未満の0本であり、第1選択ノードであるノードN5を始点とする出力エッジの数が第2閾値「3」未満の0本である。そのため、生成装置100は、第1閾値及び第2閾値に基づく条件を満たすと判定し、ノードN5を始点としノードN8を終点とするエッジE8−1を第2グラフデータGR12に追加する。
次に、第1選択ノードがノードN5であり、ノードN6を第2選択ノードとする場合、生成装置100は、第2選択ノードであるノードN6を終点とする入力エッジの数が第1閾値「4」未満の0本であり、第1選択ノードであるノードN5を始点とする出力エッジの数がエッジE8−1の1本であり、第2閾値「3」未満である。そのため、生成装置100は、第1閾値及び第2閾値に基づく条件を満たすと判定し、ノードN5を始点としノードN6を終点とするエッジE6−1を第2グラフデータGR12に追加する。
次に、第1選択ノードがノードN5であり、ノードN1を第2選択ノードとする場合、生成装置100は、第2選択ノードであるノードN1を終点とする入力エッジの数がエッジE2−1、E3−1、E4−1、E10−1の4本であり、第1閾値「4」未満ではない。そのため、生成装置100は、第1選択ノードがノードN5であり、ノードN1を第2選択ノードである組合せが第1閾値に基づく条件を満たさないと判定し、ノードN5を始点としノードN1を終点とするエッジE5−1を第2グラフデータGR12に追加しない。これにより、生成装置100は、特定のノードに入力エッジが集中することを抑制することができる。
次に、第1選択ノードがノードN5であり、ノードN7を第2選択ノードとする場合、生成装置100は、第2選択ノードであるノードN7を終点とする入力エッジの数が第1閾値「4」未満の0本であり、第1選択ノードであるノードN5を始点とする出力エッジの数がエッジE8−1、E6−1の2本であり、第2閾値「3」未満である。そのため、生成装置100は、第1閾値及び第2閾値に基づく条件を満たすと判定し、ノードN5を始点としノードN7を終点とするエッジE7−1を第2グラフデータGR12に追加する。
次に、第1選択ノードがノードN5であり、ノードN9を第2選択ノードとする場合、生成装置100は、第2選択ノードであるノードN9を終点とする入力エッジの数が第1閾値「4」未満の0本であるため、第1閾値の条件を満たすと判定する。一方、生成装置100は、第1選択ノードであるノードN5を始点とする出力エッジの数がエッジE6−1〜E8−1の3本であり、第2閾値「3」未満ではないため、第2閾値の条件を満たさないと判定する。そのため、生成装置100は、ノードN5を始点としノードN9を終点とするエッジE9−1を第2グラフデータGR12に追加しない。これにより、生成装置100は、特定のノードの出力エッジの増大を抑制することにより、処理時間や処理負荷が増大することを抑制することができる。これにより、生成装置100は、空間情報VS1−6に示すように、エッジE6−1〜E8−1の3本のエッジ(第2エッジ)が追加された第2グラフデータGR12−4を生成する。
上述したように、生成装置100は、第1グラフデータGR11中の第1エッジ群のうち、第1閾値及び第2閾値に基づく条件を満たすと判定されたエッジのみを第2エッジとして、第2グラフデータに追加することにより、特定のノードに入力エッジや出力エッジが集中することが抑制された第2グラフデータを生成することができる。これにより、生成装置100は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
このように、生成装置100は、適宜設定可能な第1閾値と第2閾値との2つの閾値を用いて、エッジを追加するかどうか判定する。これにより、生成装置100は、出力エッジや入力エッジの本数について所望の第2グラフを生成することができる。したがって、生成装置100は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
従来から、グラフ構造において各ノードが近傍ノードに有向エッジで接続されている近傍グラフ(k近傍グラフ等を含む)が近傍検索に利用されている。このような、有向エッジを含む近傍グラフを用いた検索においては、入力エッジが少なすぎるノードは、そのノードへ到達する可能性を低め、検索精度の低下につながる。また、出力エッジが多すぎる大きすぎるノードは、距離計算回数を増大させ、検索時間の増加につながる。そこで、生成装置100は、入力エッジ及び出力エッジの各々に対応する閾値(第1閾値、第2閾値)を用いて、入力エッジの数が小さいノードや出力エッジの数が大きいノードをグラフ生成時に減らす。言い換えると、生成装置100は、入力エッジの数が小さいノードや出力エッジの数が大きいノードが含まれる第2グラフが生成されることを抑制するように、第2グラフを生成する。これにより、生成装置100は、所望の第2グラフを生成し、第2グラフによる検索性能の向上を可能にする。
また、例えば、グラフデータ中に多数(例えば1000個、1万個等)の出力エッジを含むノードが含まれる場合、そのノードを辿る検索の処理負荷が増大する。また、例えば、グラフデータ中に少数(例えば0個や1個等)の入力エッジを含むノードが含まれる場合、そのノードが検索される可能性が低くなる。このように、生成装置100は、各ノードについて、出力エッジや入力エッジに偏りが生じないよう、特に特定のノードの出力エッジが増大しないようにエッジを調整することにより、処理負荷が増大するノードや、検索される可能性が低いノードが含まれる可能性を低減することができる。したがって、生成装置100は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。また、生成装置100により生成されたグラフデータは、エッジの数の増大を抑制しつつ、所定の対象に関する効率的な検索を可能にすることができる。
〔1−1.第1グラフデータ〕
図1の例では、生成装置100が与えられた第1グラフデータGR11から第2グラフデータGR12を生成する場合を示したが、生成装置100は、第1グラフデータを用いることなく第2グラフデータを生成してもよい。例えば、生成装置100は、エッジが連結されていない複数のノードから第2グラフデータを生成してもよい。
例えば、生成装置100は、各ノードから他の全ノードまでの距離に基づく順位に基づいて、第2グラフデータを生成してもよい。例えば、生成装置100は、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第1閾値の数の他のノードを終点ノードとする出力エッジと、各ノードを終点ノードとし、各ノードとの距離が短い方から順に第2閾値の数の他のノードを始点ノードとする入力エッジとを、各ノードに連結することによりグラフデータを生成する。この場合、生成装置100は、各ノードから他の全ノードに出力エッジが連結されたグラフデータを対象とする場合を同様の処理となる。このように、生成装置100は、エッジが連結されていない複数のノードから第2グラフデータを生成してもよい。
〔1−2.第1閾値、第2閾値〕
図1の例では、第1閾値を「4」とし、第2閾値を「3」とする場合を示したが、第1閾値や第2閾値には種々の値が選択されてもよい。例えば、第1閾値と第2閾値とは同じ値であってもよい。例えば、第1閾値は、第2閾値よりも小さい値であってもよい。
〔1−3.インデックスデータ〕
また、生成装置100は、検索時に用いるインデックスデータを生成してもよい。例えば、生成装置100は、高次元ベクトルを検索する検索インデックスをインデックスデータとして生成する。ここでいう高次元ベクトルとは、例えば、数百次元から数千次元のベクトルであってもよいし、それ以上の次元のベクトルであってもよい。
例えば、生成装置100は、ツリー構造(木構造)に関する検索インデックスをインデックスデータとして生成してもよい。例えば、生成装置100は、kd木(k-dimensional tree)に関する検索インデックスをインデックスデータとして生成してもよい。例えば、生成装置100は、VP木(Vantage-Point tree)に関する検索インデックスをインデックスデータとして生成してもよい。
また、例えば、生成装置100は、その他の木構造を有するインデックスデータとして生成してもよい。例えば、生成装置100は、木構造のインデックスデータのリーフがグラフデータに接続する種々のインデックスデータを生成してもよい。例えば、生成装置100は、木構造のインデックスデータのリーフが第2グラフデータ中のノードに対応する種々のインデックスデータを生成してもよい。また、生成装置100は、このようなインデックスデータを用いて検索を行う場合、インデックスデータを辿って到達したリーフ(ノード)からグラフデータを探索してもよい。
なお、上述したようなインデックスデータは一例であり、生成装置100は、グラフデータ中のクエリを高速に特定することが可能であれば、どのようなデータ構造のインデックスデータを生成してもよい。例えば、生成装置100は、クエリに対応するセントロイド情報を高速に特定することが可能であれば、バイナリ空間分割に関する技術等の種々の従来技術を適宜用いて、インデックスデータを生成してもよい。例えば、生成装置100は、高次元ベクトルの検索に対応可能なインデックスであれば、どのようなデータ構造のインデックスデータを生成してもよい。生成装置100は、上述のようなインデックスデータと第2グラフデータとを用いることにより、所定の対象に関するより効率的な検索を可能にすることができる。
〔2.生成システムの構成〕
図2に示すように、生成システム1は、端末装置10と、情報提供装置50と、生成装置100とが含まれる。端末装置10と、情報提供装置50と、生成装置100とは所定のネットワークNを介して、有線または無線により通信可能に接続される。図2は、実施形態に係る生成システムの構成例を示す図である。なお、図2に示した生成システム1には、複数台の端末装置10や、複数台の情報提供装置50や、複数台の生成装置100が含まれてもよい。
端末装置10は、ユーザによって利用される情報処理装置である。端末装置10は、ユーザによる種々の操作を受け付ける。なお、以下では、端末装置10をユーザと表記する場合がある。すなわち、以下では、ユーザを端末装置10と読み替えることもできる。なお、上述した端末装置10は、例えば、スマートフォンや、タブレット型端末や、ノート型PC(Personal Computer)や、デスクトップPCや、携帯電話機や、PDA(Personal Digital Assistant)等により実現される。
情報提供装置50は、ユーザ等に種々の情報提供を行うための情報が格納された情報処理装置である。例えば、情報提供装置50は、ウェブサーバ等の種々の外部装置から収集した文字情報等に基づくオブジェクトIDが格納される。例えば、情報提供装置50は、ユーザ等に画像検索サービスを提供する情報処理装置である。例えば、情報提供装置50は、画像検索サービスを提供するための各情報が格納される。例えば、情報提供装置50は、画像検索サービスの対象となる画像に対応するベクトル情報を生成装置100に提供する。また、情報提供装置50は、クエリを生成装置100に送信することにより、生成装置100からクエリに対応する画像を示すオブジェクトID等を受信する。
生成装置100は、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第1閾値の数の他のノードを終点ノードとする出力エッジと、各ノードを終点ノードとし、各ノードとの距離が短い方から順に第2閾値の数の他のノードを始点ノードとする入力エッジとを、第1グラフデータから第2グラフデータを生成各ノードに連結することによりグラフデータを生成する。例えば、生成装置100は、第1グラフデータから第2グラフデータを生成する。
例えば、生成装置100は、端末装置からクエリ情報(以下、単に「クエリ」ともいう)を受信すると、クエリに類似する対象(ベクトル情報等)を検索し、検索結果を端末装置に提供する。また、例えば、生成装置100が端末装置に提供するデータは、画像情報等のデータ自体であってもよいし、URL(Uniform Resource Locator)等の対応するデータを参照するための情報であってもよい。また、クエリや検索対象のデータは、画像、音声、テキストデータなど、如何なる種類のデータであってもよい。本実施形態において、生成装置100が画像を検索する場合を一例として説明する。
〔3.生成装置の構成〕
次に、図3を用いて、実施形態に係る生成装置100の構成について説明する。図3は、実施形態に係る生成装置100の構成例を示す図である。図3に示すように、生成装置100は、通信部110と、記憶部120と、制御部130とを有する。なお、生成装置100は、生成装置100の管理者等から各種操作を受け付ける入力部(例えば、キーボードやマウス等)や、各種情報を表示するための表示部(例えば、液晶ディスプレイ等)を有してもよい。
(通信部110)
通信部110は、例えば、NIC(Network Interface Card)等によって実現される。そして、通信部110は、ネットワーク(例えば図2中のネットワークN)と有線または無線で接続され、端末装置10や情報提供装置50との間で情報の送受信を行う。
(記憶部120)
記憶部120は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。実施形態に係る記憶部120は、図3に示すように、オブジェクト情報記憶部121と、基グラフデータ記憶部122と、第1グラフデータ記憶部123と、閾値情報記憶部124と、第2グラフデータ記憶部125とを有する。
(オブジェクト情報記憶部121)
実施形態に係るオブジェクト情報記憶部121は、オブジェクトに関する各種情報を記憶する。例えば、オブジェクト情報記憶部121は、オブジェクトIDやベクトルデータを記憶する。図4は、実施形態に係るオブジェクト情報記憶部の一例を示す図である。図4に示すオブジェクト情報記憶部121は、「オブジェクトID」、「ベクトル情報」といった項目が含まれる。
「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。また、「ベクトル情報」は、オブジェクトIDにより識別されるオブジェクトに対応するベクトル情報を示す。すなわち、図4の例では、オブジェクトを識別するオブジェクトIDに対して、オブジェクトに対応するベクトルデータ(ベクトル情報)が対応付けられて登録されている。
例えば、図4の例では、ID「OB1」により識別されるオブジェクト(対象)は、「10,24,51,2...」の多次元のベクトル情報が対応付けられることを示す。
なお、オブジェクト情報記憶部121は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(基グラフデータ記憶部122)
実施形態に係る基グラフデータ記憶部122は、グラフデータに関する各種情報を記憶する。例えば、基グラフデータ記憶部122は、第1グラフデータを生成する基となるグラフデータを記憶する。図5の例は、基グラフデータ記憶部122は、近傍グラフデータを記憶する。図5は、実施形態に係る基グラフデータ記憶部の一例を示す図である。図5に示す基グラフデータ記憶部122は、「ノードID」、「オブジェクトID」、および「有向エッジ情報」といった項目を有する。また、「有向エッジ情報」には、「エッジID」や「参照先」といった情報が含まれる。
「ノードID」は、グラフデータにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。
また、「有向エッジ情報」は、対応するノードに接続されるエッジに関する情報を示す。図5の例では、「有向エッジ情報」は、対応するノードから出力される出力エッジに関する情報を示す。また、「エッジID」は、ノード間を連結するエッジを識別するための識別情報を示す。また、「参照先」は、エッジにより連結された参照先(ノード)を示す情報を示す。すなわち、図5の例では、ノードを識別するノードIDに対して、そのノードに対応するオブジェクト(対象)を識別する情報やそのノードからの有向エッジ(出力エッジ)が連結される参照先(ノード)が対応付けられて登録されている。
例えば、図5の例では、ノードID「N1」により識別されるノード(ノードN1)は、オブジェクトID「OB1」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN1からは、エッジID「E2」により識別されるエッジ(エッジE2)が、ノードID「N2」により識別されるノード(ノードN1)に連結されることを示す。すなわち、図5の例では、基グラフデータにおけるノードN1からはエッジE2によりノードN2へ辿ることができることを示す。
なお、基グラフデータ記憶部122は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、基グラフデータ記憶部122は、各ノード(ベクトル)間を連結するエッジの長さが記憶されてもよい。すなわち、基グラフデータ記憶部122は、各ノード(ベクトル)間の距離を示す情報が記憶されてもよい。
(第1グラフデータ記憶部123)
実施形態に係る第1グラフデータ記憶部123は、第1グラフデータに関する各種情報を記憶する。例えば、第1グラフデータ記憶部123は、第2グラフデータを生成する基となる第1グラフデータを記憶する。図6は、実施形態に係る第1グラフデータ記憶部の一例を示す図である。図6に示す第1グラフデータ記憶部123は、「ノードID」、「オブジェクトID」、および「有向エッジ情報」といった項目を有する。また、「有向エッジ情報」には、「エッジID」や「参照先」といった情報が含まれる。
「ノードID」は、グラフデータにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。
また、「有向エッジ情報」は、対応するノードに接続されるエッジに関する情報を示す。図6の例では、「有向エッジ情報」は、対応するノードから出力される出力エッジに関する情報を示す。また、「エッジID」は、ノード間を連結するエッジを識別するための識別情報を示す。また、「参照先」は、エッジにより連結された参照先(ノード)を示す情報を示す。すなわち、図6の例では、ノードを識別するノードIDに対して、そのノードに対応するオブジェクト(対象)を識別する情報やそのノードからの有向エッジ(出力エッジ)が連結される参照先(ノード)が対応付けられて登録されている。
例えば、図6の例では、ノードID「N1」により識別されるノードは、オブジェクトID「OB1」により識別されるオブジェクト(対象)に対応することを示す。
なお、ノードID中の括弧内は、各グラフデータ間のノードIDを識別可能にする場合のIDを示す。図6の例では、第1グラフデータ記憶部123の各ノードIDには、基グラフデータ記憶部122において対応するノードIDに「−1」が追加されたIDが記憶される。この場合、参照先にも対応するノードIDが記憶される。具体的には、参照先には、図6中のノードIDの末尾に「−1」が追加されたノードIDが記憶されてもよい。例えば、エッジE2−1に対応する参照先には、ノードID「N1−1」が記憶される。
図6の例では、ノードID「N1」により識別されるノードからは、出力エッジがないことを示す。また、ノードID「N2」により識別されるノード(ノードN2)からは、エッジID「E2−1」により識別されるエッジ(エッジE2−1)が、ノードID「N1」により識別されるノード(ノードN1)に連結されることを示す。すなわち、図6の例では、第1グラフデータにおけるノードN2からはエッジE2−1によりノードN1へ辿ることができることを示す。
なお、第1グラフデータ記憶部123は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、第1グラフデータ記憶部123は、各ノード(ベクトル)間を連結するエッジの長さが記憶されてもよい。すなわち、第1グラフデータ記憶部123は、各ノード(ベクトル)間の距離を示す情報が記憶されてもよい。
(閾値情報記憶部124)
実施形態に係る閾値情報記憶部124は、閾値に関する各種情報を記憶する。例えば、閾値情報記憶部124は、第1閾値や第2閾値を記憶する。図7は、実施形態に係る閾値記憶部の一例を示す図である。図7に示す閾値情報記憶部124は、「閾値名」、「値」、「対象ノード」、「対象エッジ」といった項目が含まれる。
「閾値名」は、閾値を識別するための情報(名称)を示す。また、「値」は、対応する閾値の具体的な値を示す。「対象ノード」は、対応する閾値が用いられる対象となるノードを示す。また、「対象エッジ」は、対応する閾値が用いられる対象となるエッジを示す。
図7の例では、閾値名「第1閾値」の値は、「4」であることを示す。第1閾値の対象ノードは、第2選択ノードであり、対象エッジは入力エッジであることを示す。また、閾値名「第2閾値」の値は、「3」であることを示す。第2閾値の対象ノードは、第1選択ノードであり、対象エッジは出力エッジであることを示す。
なお、閾値情報記憶部124は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(第2グラフデータ記憶部125)
実施形態に係る第2グラフデータ記憶部125は、第2グラフデータに関する各種情報を記憶する。図8は、実施形態に係る第2グラフデータ記憶部の一例を示す図である。図8の例では、第2グラフデータ記憶部125は、「ノードID」、「オブジェクトID」、および「有向エッジ情報」といった項目を有する。また、「有向エッジ情報」には、「エッジID」や「参照先」といった情報が含まれる。
「ノードID」は、グラフデータにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。
また、「有向エッジ情報」は、対応するノードに接続されるエッジに関する情報を示す。図8の例では、「有向エッジ情報」は、対応するノードから出力される出力エッジに関する情報を示す。また、「エッジID」は、ノード間を連結するエッジを識別するための識別情報を示す。また、「参照先」は、エッジにより連結された参照先(ノード)を示す情報を示す。すなわち、図8の例では、ノードを識別するノードIDに対して、そのノードに対応するオブジェクト(対象)を識別する情報やそのノードからの有向エッジ(出力エッジ)が連結される参照先(ノード)が対応付けられて登録されている。
例えば、図8の例では、ノードID「N2」により識別されるノードは、オブジェクトID「OB2」により識別されるオブジェクト(対象)に対応することを示す。
なお、ノードID中の括弧内は、各グラフデータ間のノードIDを識別可能にする場合のIDを示す。図8の例では、第2グラフデータ記憶部125の各ノードIDには、基グラフデータ記憶部122において対応するノードIDに「−2」が追加されたIDが記憶される。この場合、参照先にも対応するノードIDが記憶される。具体的には、参照先には、図8中のノードIDの末尾に「−2」が追加されたノードIDが記憶されてもよい。例えば、エッジE6−1に対応する参照先には、ノードID「N6−2」が記憶される。
図8の例では、ノードID「N1」により識別されるノードからは、出力エッジがないことを示す。また、ノードID「N2」により識別されるノード(ノードN2)からは、エッジID「E2−1」により識別されるエッジ(エッジE2−1)が、ノードID「N1」により識別されるノード(ノードN1)に連結されることを示す。すなわち、図8の例では、第1グラフデータにおけるノードN2からはエッジE2−1によりノードN1へ辿ることができることを示す。すなわち、図8の例では、第1グラフデータにおけるエッジE2−1が条件を満たしたため、第2グラフデータにも追加されたことを示す。
なお、第2グラフデータ記憶部125は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、第2グラフデータ記憶部125は、各ノード(ベクトル)間を連結するエッジの長さが記憶されてもよい。すなわち、第2グラフデータ記憶部125は、各ノード(ベクトル)間の距離を示す情報が記憶されてもよい。例えば、第2グラフデータ記憶部125は、各ノードへの入力エッジの数を示す情報が記憶されてもよい。また、第2グラフデータは、クエリを入力とし、グラフデータ中のエッジを辿ることによりノードを探索し、クエリに類似するノードを抽出し出力するプログラムモジュールを含んでもよい。すなわち、第2グラフデータは、第2グラフを用いて検索処理を行うプログラムモジュールとしての利用が想定されるものであってもよい。例えば、第2グラフデータGR12は、クエリとしてベクトルデータが入力された場合に、そのベクトルデータに類似するベクトルデータに対応するノードを第2グラフ中から抽出し、出力するプログラムであってもよい。例えば、第2グラフデータGR12は、クエリ画像に対応する類似画像を検索するプログラムモジュールとして利用されるデータであってもよい。例えば、第2グラフデータGR12は、入力されたクエリに基づいて、第2グラフにおいてそのクエリに類似するノードを抽出し、出力するよう、コンピュータを機能させる。
(制御部130)
図3の説明に戻って、制御部130は、コントローラ(controller)であり、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)等によって、生成装置100内部の記憶装置に記憶されている各種プログラム(生成プログラムの一例に相当)がRAMを作業領域として実行されることにより実現される。また、制御部130は、コントローラであり、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積回路により実現される。
図3に示すように、制御部130は、取得部131と、第1選択部及び第2選択部としての選択部132と、生成部133と、生成部134と、提供部135とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部130の内部構成は、図3に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
(取得部131)
取得部131は、各種情報を取得する。例えば、取得部131は、記憶部120から各種情報を取得する。例えば、取得部131は、オブジェクト情報記憶部121や、基グラフデータ記憶部122や、第1グラフデータ記憶部123や、閾値情報記憶部124や、第2グラフデータ記憶部125等から各種情報を取得する。また、取得部131は、各種情報を外部の情報処理装置から取得する。
取得部131は、データ検索の対象となる複数のノードの情報と、当該複数のノード間を連結する有向エッジ群である第1エッジ群の情報とを含む第1グラフ(第1グラフデータGR11)と、複数のノードの情報を含む第2グラフデータGR12−1を取得する。
例えば、取得部131は、第1グラフデータGR11を第1グラフデータ記憶部123から取得する。また、例えば、取得部131は、第2グラフデータGR12−1を第2グラフデータ記憶部125から取得する。取得部131は、所定の基準に基づいて生成された近傍グラフ(基グラフデータGR10)であって、複数のノード間を連結する有向エッジ群である所定のエッジ群で連結された近傍グラフのうち、所定のエッジ群の各エッジの向きを反転させた第1エッジ群の情報を含む転置グラフである第1グラフを取得する。
例えば、取得部131は、基グラフデータを取得する。図1の例では、生成装置100は、基グラフデータGR10を取得する。例えば、取得部131は、第1グラフデータを取得してもよい。例えば、生成装置100は、情報提供装置50等の外部装置から第1グラフデータGR11を取得してもよい。
例えば、取得部131は、検索クエリに関する情報を取得する。例えば、取得部131は、画像検索に関する検索クエリを取得する。例えば、取得部131は、利用する端末装置10からクエリを受け付けた情報提供装置50からクエリを取得する。
(選択部132)
選択部132は、各種情報を選択する。なお、図3では、第1選択部と第2選択部とを併せて選択部132とする構成を示すが、第1選択部と第2選択部とは各々異なる部(第1選択部及び第2選択部)として構成されてもよい。すなわち、選択部132の処理として説明する各処理は、個別に構成された第1選択部や第2選択部により実行されてもよい。
選択部132は、更新処理においてノードを選択する。選択部132は、複数のノードのうち、第1グラフにおいて他のノードを終点とする出力エッジの数に基づいて第1選択ノードを選択する。選択部132は、1グラフにおいて第1選択ノードを始点とする出力エッジが連結される対象ノードのうち、当該出力エッジの長さに基づいて第2選択ノードを選択する。
選択部132は、出力エッジの数に基づいて第1選択ノードを選択する。選択部132は、複数のノードのうち、第1グラフにおいて他のノードを終点とする出力エッジの数が少ないノードから順に第1選択ノードとして選択する。選択部132は、出力エッジの長さに基づいて第2選択ノードを選択する。選択部132は、対象ノードのうち、各ノードから第1選択ノードを始点とする出力エッジが短いノードから順に第2選択ノードとして選択する。
図1の例では、選択部132は、第2グラフデータにおけるノードのうち、第1グラフデータにおける出力エッジが少ない方から順に第1選択ノードを選択する。選択部132は、一覧情報LT11に示すような各ノードN1〜N12の出力エッジ数に基づいて、第1選択ノードを選択する。
図1の例では、選択部132は、ノードN2を第1選択ノードとする更新処理においては、第1グラフデータGR11中のノードN2を始点とする出力エッジは1本であるため、その終点であるノードN1を第2選択ノードとして選択する。選択部132は、ノードN3を第1選択ノードとする更新処理においては、第1グラフデータGR11中のノードN3を始点とする出力エッジは1本であるため、その終点であるノードN1を第2選択ノードとして選択する。選択部132は、ノードN4を第1選択ノードとする更新処理においては、第1グラフデータGR11中のノードN4を始点とする出力エッジは1本であるため、その終点であるノードN1を第2選択ノードとして選択する。
図1の例では、選択部132は、一覧情報LT11に示すように、ノードN2〜N4の次に出力エッジ数が少ない(3本である)ノードN10を第1選択ノードとして選択する。選択部132は、ノードN10からの出力エッジが連結されるノードN1、N11、N12の3つのノードを対象ノードとして、第2選択ノードを選択する。選択部132は、第1グラフデータGR11においてノードN10を始点とするエッジE10−1、E11−1、E12−1のうち、長さが短いエッジが連結されるノードから順に、第2選択ノードとして選択する。
図1の例では、選択部132は、一覧情報LT11に示すように、ノードN10の次に出力エッジ数が少ない(5本である)ノードN5を第1選択ノードとして選択する。選択部132は、ノードN5からの出力エッジが連結されるノードN1、N6〜N9の5つのノードを対象ノードとして、第2選択ノードを選択する。選択部132は、第1グラフデータGR11においてノードN5を始点とするエッジE5−1〜E9−1のうち、長さが短いエッジが連結されるノードから順に、第2選択ノードとして選択する。
(生成部133)
生成部133は、各種情報を生成する。例えば、生成部133は、記憶部120に記憶された情報(データ)から各種情報(データ)を生成する。例えば、生成部133は、オブジェクト情報記憶部121や、基グラフデータ記憶部122や、第1グラフデータ記憶部123や、閾値情報記憶部124から各種情報を生成する。例えば、生成部133は、基グラフデータから第1グラフデータを生成する。例えば、生成部133は、第1グラフデータから第2グラフデータを生成する。
例えば、生成部133は、第1グラフデータGR11を生成する。生成部133は、所定の基準に基づいて生成された近傍グラフ(基グラフデータGR10)であって、複数のノード間を連結する有向エッジ群である所定のエッジ群で連結された近傍グラフから第1グラフデータGR11を生成する。生成部133は、基グラフデータGR10うち、各エッジの向きを反転させることにより、基グラフデータGR10の転置グラフである第1グラフデータGR11を生成する。
また、生成部133は、第1グラフデータGR11のエッジを削除することにより、ノードのみが含まれる第2グラフを生成する。例えば、生成部133は、第1グラフデータGR11のエッジを削除することにより、第2グラフデータGR12−1を生成する。生成部133は、近傍グラフの各エッジの向きを反転させた転置グラフである第1グラフデータを用いて第2グラフデータを生成する。
生成部133は、第2グラフにおいて、第1選択ノードを始点とする出力エッジの数が所定の閾値(第2閾値)未満である場合、第1エッジ群において第1選択ノードを始点とし第2選択ノードを終点とする出力エッジを第2グラフに第2エッジの情報として追加する更新処理により、第2グラフを生成する。生成部133は、第2グラフにおいて、第2選択ノードを終点とする入力エッジの数が他の閾値(第1閾値)未満であり、第1選択ノードを始点とする出力エッジの数が所定の閾値未満である場合、更新処理により、第2エッジが追加された第2グラフを生成する。生成部133は、第2グラフにおいて、第2選択ノードを終点とする入力エッジの数が第1閾値未満であり、第1選択ノードを始点とする出力エッジの数が第2閾値未満である場合、第1エッジ群において第1選択ノードを始点とし第2選択ノードを終点とする出力エッジを第2グラフに第2エッジの情報として追加する更新処理により、第2グラフ(第2グラフデータGR12−4)を生成する。生成部133は、例えば第2グラフデータGR12−1〜GR12−3等において、第2選択ノードを終点とする入力エッジの数が第1閾値「4」未満であり、第1選択ノードを始点とする出力エッジの数が第2閾値記「3」未満である場合、第1グラフデータGR11において第1選択ノードを始点とし第2選択ノードを終点とする出力エッジを第2グラフデータGR12−1〜GR12−3等に追加する更新処理により、第2グラフデータGR12−4を生成する。
生成部133は、第2選択ノードを終点とする入力エッジの数が第1閾値未満であり、第1選択ノードを始点とする出力エッジの数が第2閾値未満である場合、第1選択ノードから第2選択ノードへの出力エッジを第2グラフデータに追加する更新処理により、第2グラフデータGR12を生成する。生成部133は、選択された第1選択ノードと第2選択ノードとの組合せごとに更新処理を繰り返す。
生成部133は、第1選択部としての選択部132により選択される第1選択ノードと、第2選択部としての選択部132により選択される第2選択ノードとの組合せごとに更新処理を繰り返すことにより、第2エッジが追加された第2グラフを生成する。生成部133は、更新処理時の第2グラフに含まれる第2エッジの情報を対象として、更新処理を繰り返すことにより、第2エッジが追加された第2グラフを生成する。
生成部133は、第2グラフにおける複数のノードのうち、入力エッジが連結されていないノードである入力無ノードがある場合、第1グラフにおいて当該ノードに連結される入力エッジのうち、長さが所定の基準を満たすエッジを、当該ノードの入力エッジとして第2エッジに追加する入力追加処理により、第2エッジが追加された第2グラフを生成する。生成部133は、第2グラフにおける複数のノードのうち、入力エッジが連結されていないノードである入力無ノードがある場合、入力追加処理により入力エッジが0本である、すなわち入力エッジが無いノードを無くすために、第2グラフに入力無エッジの入力エッジを追加する。生成部133は、各ノードに少なくとも1本以上の入力エッジが連結された第2グラフを生成する。生成部133は、検索時にエッジを辿って到達できないノードを無くし、エッジを辿ることにより各ノードに到達可能な第2エッジが追加された第2グラフを生成する。
生成部133は、第1グラフにおいて入力無ノードに対応するノードに連結される入力エッジのうち、長さが最も短いエッジを、当該ノードの入力エッジとして第2エッジに追加する入力追加処理により、第2エッジが追加された第2グラフを生成する。生成部133は、入力追加処理において、第1グラフにおいて当該ノードに連結される入力エッジのうち、長さが最も短いエッジ、すなわち類似性の高いノード間のエッジを追加することができる。これにより、生成装置100は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
生成部133は、更新処理時において入力追加処理を行うことにより、第2エッジが追加された第2グラフを生成する。生成部133は、更新処理の中で各ノードに少なくとも1本以上の入力エッジが連結された第2グラフを生成する。生成部133は、更新処理の繰り返し終了後において入力追加処理を行うことにより、第2エッジが追加された第2グラフを生成する。例えば、生成部133は、各ノードを第1選択ノードとして選択した更新処理の繰り返し終了後において、入力追加処理を行うことにより、第2エッジが追加された第2グラフを生成する。例えば、生成部133は、第1選択ノードの選択候補となる全ノードが第1選択ノードとして選択された全更新処理の終了後において、入力追加処理を行うことにより、第2エッジが追加された第2グラフを生成する。生成部133は、更新処理の繰り返し終了後において、入力エッジが0本となっているノード(入力無ノード)のみを対象として入力追加処理を行う。生成部133は、全ノードを第1選択ノードとして繰り返した更新処理後において入力エッジが0本であるノードのみを対象として、入力追加処理を行う。
図1の例では、生成部133は、更新処理により、ノードを有向エッジで連結することにより、グラフデータGR12を生成する。生成部133は、図1に示すように、第1閾値及び第2閾値に基づく条件を満たすと判定されたエッジのみを第2エッジとして、第2グラフデータに追加することにより、第2グラフデータを生成する。
また、図1の例では、生成部133は、基グラフデータから第1グラフデータを生成する。生成部133は、基グラフデータ中のエッジの向きを反転させることにより、基グラフデータのエッジの向きが逆となった第1グラフデータを生成す。生成部133は、各ノード等間の距離を変えずに、エッジの向きだけを反転させた第1グラフデータを生成する。生成部133は、基グラフデータにおける一のノードの入力エッジを出力エッジとし、一のノードの出力エッジを入力エッジとすることにより、エッジの向きだけを反転させた第1グラフデータを生成する。
図1の例では、生成部133は、基グラフデータGR10から空間情報VS1−2に示すような第1グラフデータGR11を生成する。生成部133は、基グラフデータGR1の転置グラフである第1グラフデータGR11を生成する。例えば、生成部133は、図5中の基グラフデータ記憶部122に示す各ノードの参照先を始点とし、各ノードを終点として、各エッジの始点と終点を入れ替えることにより、図6中の第1グラフデータ記憶部123に示す第1グラフデータを生成する。例えば、生成部133は、ノードN1を始点とし、ノードN2を終点とするエッジE2を反転させることにより、空間情報VS1−2に示すように、ノードN2を始点とし、ノードN1を終点とするするエッジE2−1を含む第1グラフデータGR11を生成する。例えば、生成部133は、種々の従来技術を適宜用いて、グラフデータの転置グラフを生成してもよい。なお、生成部133は、基グラフデータGR10の第1グラフデータGR11を生成できれば、どのような処理により第1グラフデータGR11を生成してもよい。
図1の例では、生成部133は、第1グラフデータから第2グラフデータを生成する。まず、生成部133は、第1グラフデータからエッジ(第1エッジ)を除いた第2グラフデータを生成する。例えば、生成部133は、第1グラフデータからエッジ群(第1エッジ群)を除くことにより、ノードのみを有する第2グラフデータを生成する。生成部133は、空間情報VS1−3に示すように、第1グラフデータGR11からノードのみを有する第2グラフデータGR12−1を生成する。生成部133は、ノードのみを有する第2グラフデータGR12−1から開始して、第2グラフデータに条件を満たすエッジ(第2エッジ)を順次追加する。生成部133は、第2エッジ群を含む第2グラフデータを生成する。
また、生成部133は、第2グラフにおいて、第2選択ノードを終点とする入力エッジの数が第1閾値未満であり、第1選択ノードを始点とする出力エッジの数が第2閾値未満である場合、第1選択ノードを始点とし第2選択ノードを終点とする出力エッジを第2グラフに追加する。生成部133は、更新処理を第1選択ノード毎に繰り返すことにより、第2グラフデータを生成する。
図1の例では、生成部133は、第2グラフデータGR12−1において、第2選択ノードであるノードN1を終点とする入力エッジの数が第1閾値「4」未満の0本であり、第1選択ノードであるノードN2を始点とする出力エッジの数が第2閾値「3」未満の1本であると判定する。生成部133は、エッジの本数と第1閾値及び第2閾値との比較に基づく条件を満たすかどうかを判定する。そして、生成部133は、条件を満たすと判定した場合、その判定対象のノードに対応するエッジを第2グラフデータに追加する。図1の例では、生成部133は、第1選択ノードがノードN2であり、第2選択ノードがノードN1である組合せについて、第1閾値及び第2閾値との比較に基づく条件を満たすと判定し、ノードN2を始点としノードN1を終点とするエッジE2−1を第2グラフデータGR12に追加する。
図1の例では、生成部133は、空間情報VS1−4に示すように、エッジE2−1、E3−1、E4−1の3本のエッジ(第2エッジ)が追加された第2グラフデータGR12−2を生成する。また、生成部133は、空間情報VS1−5に示すように、エッジE10−1、E11−1、E12−1の3本のエッジ(第2エッジ)が追加された第2グラフデータGR12−3を生成する。
図1の例では、生成部133は、第2選択ノードであるノードN1の入力エッジの数がエッジE2−1、E3−1、E4−1、E10−1の4本であり、第1閾値「4」未満ではないと判定する。生成部133は、第1選択ノードがノードN5であり、ノードN1を第2選択ノードである組合せが第1閾値に基づく条件を満たさないと判定する。この場合、生成部133は、ノードN5を始点としノードN1を終点とするエッジE5−1を第2グラフデータGR12に追加しない。
図1の例では、生成部133は、第2選択ノードであるノードN9を終点とする入力エッジの数が第1閾値「4」未満の0本であるため、第1閾値の条件を満たすと判定する。一方、生成部133は、第1選択ノードであるノードN5を始点とする出力エッジの数がエッジE6−1〜E8−1の3本であり、第2閾値「3」未満ではないため、第2閾値の条件を満たさないと判定する。この場合、生成部133は、ノードN5を始点としノードN9を終点とするエッジE9−1を第2グラフデータGR12に追加しない。
(検索部134)
検索部134は、各種情報を検索する。例えば、検索部134は、グラフデータを探索することにより、オブジェクトを検索する。例えば、検索部134は、取得部131により取得されたクエリが取得された場合、グラフデータを探索することにより、クエリに類似するオブジェクトを検索する。例えば、検索部134は、グラフデータを探索することにより、クエリに類似するオブジェクトを抽出する。例えば、検索部134は、図13に示すような処理手順に基づいて、グラフデータを探索することにより、クエリに類似するオブジェクトを抽出する。なお、検索部134は、検索サービスを提供しない場合、検索部134を有しなくてもよい。
(提供部135)
提供部135は、各種情報を提供する。例えば、提供部135は、端末装置10や情報提供装置50に各種情報を提供する。例えば、提供部135は、クエリに対応するオブジェクトIDを検索結果として提供する。例えば、提供部135は、検索部134により検索されたオブジェクトIDを情報提供装置50へ提供する。例えば、提供部135は、検索部134が検索により抽出したオブジェクトIDを情報提供装置50へ提供する。提供部135は、検索部134により抽出されたオブジェクトIDをクエリに対応するベクトルを示す情報として情報提供装置50に提供する。
また、提供部135は、生成部133により生成された第2グラフデータを外部の情報処理装置へ提供してもよい。例えば、提供部135は、生成部133により生成された第2グラフデータGR12を情報提供装置50に送信してもよい。
〔4.生成処理のフロー〕
次に、図9を用いて、実施形態に係る生成システム1による生成処理の手順について説明する。図9は、実施形態に係る生成処理の一例を示すフローチャートである。
図9に示すように、生成装置100は、基グラフデータを取得する(ステップS101)。例えば、生成装置100は、基グラフデータ記憶部122から基グラフデータを取得する。図1の例では、生成装置100は、基グラフデータGR10を取得する。
そして、生成装置100は、基グラフデータから第1グラフデータを生成する(ステップS102)。例えば、生成装置100は、基グラフデータ中のエッジの向きを反転させることにより、基グラフデータのエッジの向きが逆となった第1グラフデータを生成する。図1の例では、生成装置100は、基グラフデータGR10から基グラフデータGR1の転置グラフである第1グラフデータGR11を生成する。
そして、生成装置100は、第1グラフデータからエッジを除いた第2グラフデータを生成する(ステップS103)。例えば、生成装置100は、第1グラフデータからエッジを除くことにより、ノードのみを有する第2グラフデータを生成する。図1の例では、生成装置100は、第1グラフデータGR11からノードのみを有する第2グラフデータGR12−1を生成する。
そして、生成装置100は、第2グラフデータにおいて第1選択ノードとして選択前のノード(第1未選択ノード)のうち、第1グラフデータにおける出力エッジの数に基づいて、第1選択ノードを選択する(ステップS104)。例えば、生成装置100は、第2グラフデータGR12−1における第1未選択ノード(ノードN5〜N11)うち、第1グラフデータGR11において最も出力エッジが少ない(3本である)ノードN10を、第1選択ノードとして選択する。
そして、生成装置100は、第1グラフにおいて第1選択ノードを始点とする出力エッジが連結される対象ノードのうち、出力エッジの長さに基づいて、第2選択ノードを選択する(ステップS105)。例えば、生成装置100は、第1選択ノードがノードN10である場合、ノードN10からの出力エッジが連結されるノードN1、N11、N12の3つのノードを対象ノードとして、第2選択ノードを選択する。例えば、生成装置100は、第1グラフデータGR11においてノードN10を始点とするエッジE10−1、E11−1、E12−1のうち、長さが最も短いエッジ(例えば、エッジE10−1)が連結されるエッジ(例えば、ノードN1)を、第2選択ノードとして選択する。
そして、生成装置100は、第2グラフにおいて、第2選択ノードを終点とする入力エッジの数が第1閾値未満であり、第1選択ノードを始点とする出力エッジの数が第2閾値未満である場合、第1選択ノードを始点とし第2選択ノードを終点とする出力エッジを第2グラフに追加する(ステップS106)。例えば、生成装置100は、第2グラフデータGR12−2において、第2選択ノードを終点とする入力エッジの数が第1閾値「4」未満であり、第1選択ノードを始点とする出力エッジの数が第2閾値「3」未満である場合、第1選択ノードを始点とし第2選択ノードを終点とする出力エッジを第2グラフに追加する。図1の例では、生成装置100は、第2グラフデータGR12−2において、第2選択ノードであるノードN1を終点とする入力エッジの数が第1閾値「4」未満の3本であり、第1選択ノードであるノードN10を始点とする出力エッジの数が第2閾値「3」未満の0本である。そのため、生成装置100は、第1閾値及び第2閾値に基づく条件を満たすと判定し、ノードN10を始点としノードN1を終点とするエッジE10−1を第2グラフデータGR12に追加する。
そして、生成装置100は、第2選択ノードとして未選択の対象ノードが有るかどうかを判定する(ステップS107)。具体的には、生成装置100は、選択中の第1選択ノードに対する第2選択ノードとして未選択の対象ノードが有るかどうかを判定する。すなわち、各ノードは、異なる第1選択ノードに対する第2選択ノードとして複数回選択され得る。例えば、生成装置100は、一のノードを異なる第1選択ノードに対する第2選択ノードとして複数回選択する。例えば第1グラフデータGR11における入力エッジの本数が5本であるノードN1の場合、生成装置100は、ノードN1を異なる5個の第1選択ノード(ノードN2〜5、N10)に対する第2選択ノードとして5回選択する。
生成装置100は、第2選択ノードとして未選択の対象ノードが有ると判定した場合(ステップS107:Yes)、ステップS105に戻って、ステップS105において第2選択ノードとして未選択の対象ノードから第2選択ノードを選択し、以降の処理を繰り返す。また、生成装置100は、第2選択ノードとして未選択の対象ノードが無いと判定した場合(ステップS107:No)、第1選択ノードとして未選択のノードが有るかどうかを判定する(ステップS108)。
生成装置100は、第1選択ノードとして未選択の対象ノードが有ると判定した場合(ステップS108:Yes)、ステップS104に戻って、処理を繰り返す。また、生成装置100は、第1選択ノードとして未選択の対象ノードが無いと判定した場合(ステップS108:No)、処理を終了する。
〔5.入力エッジが無い場合〕
次に、図10を用いて、実施形態に係る生成システム1による入力追加処理の手順について説明する。図10は、実施形態に係る入力追加処理の一例を示すフローチャートである。
図10に示すように、生成装置100は、入力エッジの数が0であるノードを処理ノードとして選択する(ステップS201)。例えば、生成装置100は、あるノードが最初に第1選択ノードとして行われた更新処理終了後において、そのノードの入力エッジの数が0本である場合、そのノードを処理ノードとして選択する。また。例えば、生成装置100は、更新処理の繰返し終了後の第2グラフデータ中のノードのうち、入力エッジの数が0本であるノードを処理ノードとして選択する。図11の例では、生成装置100は、更新処理の繰返し終了後の第2グラフデータGR12−21中のノードのうち、入力エッジの数が0本であるノードN5を処理ノードとして選択する。例えば、生成装置100は、第2グラフ中の全ノード(ノードN1〜N12等)の各々が第1選択ノードとして選択された更新処理の繰返し終了後の第2グラフデータGR12−21中のノードのうち、入力エッジの数が0本であるノードN5を処理ノードとして選択する。
そして、生成装置100は、第1グラフデータにおいて処理ノードに連結される入力エッジのうち、長さが所定の条件を満たす入力エッジを第2グラフデータに追加する(ステップS202)。例えば、生成装置100は、第1グラフデータにおいて処理ノードに連結される入力エッジのうち、長さが最も短い入力エッジを第2グラフデータに追加する。図11の例では、生成装置100は、第1グラフデータGR11中においてノードN5を終点とするエッジE51−1、E52−1のうち、最も短いエッジE51−1を追加した第2グラフデータGR12−22を生成する。また、図1の例では、更新処理中に入力追加処理を行う場合、生成装置100は、ノードN1を第1選択ノードとする更新処理更新処理後において、ノードN1の入力エッジは0本であるため、グラフデータGR11中においてノードN1を終点とするエッジE2−1〜E5−1のうち、最も短いエッジE2−1を追加する。
〔6.入力追加処理の例〕
ここで、図11を用いて、入力追加処理を行う場合を説明する。図11は、実施形態に係る入力追加処理の一例を示す図である。具体的には、図11は、入力エッジが無い(0本である)ノードについて、入力エッジを追加する処理を示す。なお、図1と同様の点については適宜説明を省略する。例えば、図11に示すベクトル空間である空間情報VS1は、図1の空間情報VS1と同様である。また、例えば、図11に示す第1グラフデータGR11は、図1に示す第1グラフデータGR11と同様である。
なお、図11の例では、説明を簡単にするために、空間情報VS1−22中の第2グラフデータGR12−21においては、ノードN5を除く全てのノードに少なくとも1本の入力エッジが連結されている場合を示す。
まず、生成装置100は、入力エッジの数が0であるノードを処理ノードとして選択する(ステップS21)。図11の例では、生成装置100は、更新処理の繰返し終了後の第2グラフデータGR12−21中のノードのうち、入力エッジの数が0本であるノードN5を処理ノードとして選択する。
そして、生成装置100は、第1グラフデータにおいて処理ノードに連結される入力エッジのうち、長さが所定の条件を満たす入力エッジを第2グラフデータに追加する(ステップS22)。例えば、生成装置100は、第1グラフデータにおいて処理ノードに連結される入力エッジのうち、長さが最も短い入力エッジを第2グラフデータに追加する。図11の例では、一覧情報LT21に示すように、距離D51、D52のうち、距離D51が最も小さく、距離D52が最も大きいものとする。
そのため、生成装置100は、一覧情報LT21に示すように、第1グラフデータGR11中においてノードN5を終点とするエッジE51−1、E52−1のうち、最も短いエッジE51−1を追加する。これにより、生成装置100は、空間情報VS1−22に示すように、エッジE51−1が追加され入力エッジが0本となるノードがない第2グラフデータGR12−22を生成する。このように、生成装置100は、他のノードから到達することができないノードを無くすことにより、第2グラフを用いた検索処理時において検索されないノード(対象)が生じることを抑制することにより、所定の対象に関する効率的な検索を可能にすることができる。
〔7.比較例〕
ここで、第1選択ノードの選択順序が異なる場合における結果との比較を示す。図12は、実施形態に係る比較例を示す図である。なお、図1と同様の点については適宜説明を省略する。例えば、図12に示すベクトル空間である空間情報VS1は、図1の空間情報VS1と同様である。また、例えば、図12に示す第2グラフデータGR12−4は、図2に示す第2グラフデータGR12−4と同様であり、第1選択ノードを出力エッジが少ない方から順に選択した場合の結果である。
一方、図12に示す第2グラフデータGR31は、第1選択ノードをノードIDが小さい方から順に選択した場合の結果である。図12に示す第2グラフデータGR31は、「ノードN*(*は任意の数値)」の「*」が小さい方から順に第1選択ノードを選択した場合に生成される第2グラフデータを示す。
第2グラフデータGR31に示すように、ノードIDが小さい方から順に選択した場合、ノードN10よりも先にノードN5が第1選択ノードとして選択される。そのため、第2グラフデータにエッジE5−1が追加される。これにより、第2グラフデータGR12−4において追加されたエッジE10−1やエッジE7−1が追加されないこととなる。このように、第2グラフデータGR31においては、エッジE7−1が追加されなくなるため、各ノードの入力エッジ(内向きエッジ)を多くすることが難しい場合がある。
一方で、図12に示す第2グラフデータGR12−4は、ノードN7にも内向きエッジであるエッジE7−1が連結されており、できるだけ多くのノードに内向きエッジを連結させることができる。
〔8.検索例〕
ここで、上述したグラフデータを用いた検索の一例を示す。なお、生成したグラフデータを用いた検索は下記に限らず、種々の手順により行われてもよい。この点について、図13を一例として説明する。図13は、グラフデータを用いた検索処理の一例を示すフローチャートである。以下に説明する検索処理は、生成装置100の検索部134によって行われる。また、以下でいうオブジェクトは、ノードと読み替えてもよい。なお、以下では、生成装置100(検索部134)が検索処理を行うものとして説明するが、検索処理は他の装置により行われてもよい。この場合、生成装置100は検索部134を有しなくてもよい。
ここでは、近傍オブジェクト集合N(G,y)は、ノードyに付与されているエッジにより関連付けられている近傍のオブジェクトの集合である。「G」は、所定のグラフデータ(例えば、第2グラフデータGR12等)であってもよい。例えば、生成装置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+ε)以下である場合(ステップS307:Yes)、生成装置100は、オブジェクトuをオブジェクト集合Sに追加する(ステップS308)。また、オブジェクトuとオブジェクトyとの距離d(u,y)がr(1+ε)以下ではない場合(ステップS307:No)、生成装置100は、ステップS309の判定(処理)を行う。
次に、生成装置100は、オブジェクトuとオブジェクトyとの距離d(u,y)がr以下であるか否かを判定する(ステップS309)。オブジェクトuとオブジェクトyとの距離d(u,y)がrを超える場合、生成装置100は、ステップS315の判定(処理)を行う。また、オブジェクト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:No)、生成装置100は、ステップS313の判定(処理)を行う。
オブジェクト集合Rに含まれるオブジェクト数がksを超える場合(ステップS311:Yes)、生成装置100は、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長い(遠い)オブジェクトを、オブジェクト集合Rから除外する(ステップS312)。
次に、生成装置100は、オブジェクト集合Rに含まれるオブジェクト数がksと一致するか否かを判定する(ステップS313)。オブジェクト集合Rに含まれるオブジェクト数がksと一致しない場合(ステップS313:No)、生成装置100は、ステップS315の判定(処理)を行う。また、オブジェクト集合Rに含まれるオブジェクト数がksと一致する場合(ステップS313:Yes)、生成装置100は、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長い(遠い)オブジェクトと、オブジェクトyとの距離を、新たなrに設定する(ステップS314)。
そして、生成装置100は、オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えたか否かを判定する(ステップS315)。オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えていない場合(ステップS315:No)、生成装置100は、ステップS306に戻って処理を繰り返す。
オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えた場合(ステップS315:Yes)、生成装置100は、オブジェクト集合Sが空集合であるか否かを判定する(ステップS316)。オブジェクト集合Sが空集合でない場合(ステップS316:No)、生成装置100は、ステップS302に戻って処理を繰り返す。また、オブジェクト集合Sが空集合である場合(ステップS316:Yes)、生成装置100は、オブジェクト集合Rを出力し、処理を終了する(ステップS317)。例えば、生成装置100は、オブジェクト集合Rに含まれるオブジェクト(ノード)を検索クエリ(入力オブジェクトy)に対応する検索結果として、検索を行った端末装置等へ提供してもよい。
〔9.効果〕
上述してきたように、実施形態に係る生成装置100は、取得部131と、第1選択部(実施形態では選択部132)と、第2選択部(実施形態では選択部132)と、生成部133とを有する。取得部131は、データ検索の対象となる複数のノードの情報と、当該複数のノード間を連結する有向エッジ群である第1エッジ群の情報とを含む第1グラフ(実施形態では、「第1グラフデータGR11」。以下同じ)と、複数のノードの情報を含む第2グラフ(実施形態では、「第2グラフデータGR12−1」)を取得する。第1選択部としての選択部132は、複数のノードのうち、第1グラフにおいて他のノードを終点とする出力エッジの数に基づいて第1選択ノードを選択する。第2選択部としての選択部132は、1グラフにおいて第1選択ノードを始点とする出力エッジが連結される対象ノードのうち、当該出力エッジの長さに基づいて第2選択ノードを選択する。生成部133は、第2グラフにおいて、第1選択ノードを始点とする出力エッジの数が所定の閾値(実施形態では「第2閾値」。以下同じ)未満である場合、第1エッジ群において第1選択ノードを始点とし第2選択ノードを終点とする出力エッジを第2グラフに第2エッジの情報として追加する更新処理により、第2グラフ(実施形態では、「第2グラフデータGR12−4」)を生成する。
このように、実施形態に係る生成装置100は、出力エッジの数に基づいて第1選択ノードを選択し、出力エッジの長さに基づいて第2選択ノードを選択し、第1選択ノードを始点とする出力エッジの数が第2閾値(実施形態では「3」)未満である場合、第1選択ノードから第2選択ノードへの出力エッジを第2グラフデータに追加する更新処理により、第2グラフデータGR12を生成することができる。したがって、生成装置100は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、第2グラフにおいて、第2選択ノードを終点とする入力エッジの数が他の閾値(実施形態では「第1閾値」。以下同じ)未満であり、第1選択ノードを始点とする出力エッジの数が所定の閾値未満である場合、更新処理により、第2エッジが追加された第2グラフを生成する。
このように、実施形態に係る生成装置100は、第2選択ノードを終点とする入力エッジの数が第1閾値(実施形態では「4」)未満であり、第1選択ノードを始点とする出力エッジの数が第2閾値未満である場合、第1選択ノードから第2選択ノードへの出力エッジを第2グラフデータに追加する更新処理により、第2グラフデータGR12を生成することができる。したがって、生成装置100は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、取得部131は、所定の基準に基づいて生成された近傍グラフ(実施形態では、「基グラフデータGR10」)であって、複数のノード間を連結する有向エッジ群である所定のエッジ群で連結された近傍グラフのうち、所定のエッジ群の各エッジの向きを反転させた第1エッジ群の情報を含む転置グラフである第1グラフを取得する。
このように、実施形態に係る生成装置100は、近傍グラフの各エッジの向きを反転させた転置グラフである第1グラフデータを用いて第2グラフデータを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、第1選択部としての選択部132は、複数のノードのうち、第1グラフにおいて他のノードを終点とする出力エッジの数が少ないノードから順に第1選択ノードとして選択する。
このように、実施形態に係る生成装置100は、複数のノードのうち、第1グラフにおいて他のノードを終点とする出力エッジの数が少ないノードから順に第1選択ノードとして選択することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、第2選択部としての選択部132は、対象ノードのうち、各ノードから第1選択ノードを始点とする出力エッジが短いノードから順に第2選択ノードとして選択する。
このように、実施形態に係る生成装置100は、対象ノードのうち、各ノードから第1選択ノードを始点とする出力エッジが短いノードから順に第2選択ノードとして選択することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、第1選択部としての選択部132により選択される第1選択ノードと、第2選択部としての選択部132により選択される第2選択ノードとの組合せごとに更新処理を繰り返すことにより、第2エッジが追加された第2グラフを生成する。
このように、実施形態に係る生成装置100は、選択された第1選択ノードと第2選択ノードとの組合せごとに更新処理を繰り返すことにより、第2グラフを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、更新処理時の第2グラフに含まれる第2エッジの情報を対象として、更新処理を繰り返すことにより、第2エッジが追加された第2グラフを生成する。
このように、実施形態に係る生成装置100は、更新処理時の第2グラフに含まれる第2エッジの情報を対象として、生成処理を繰り返すことにより、第2エッジが追加された第2グラフを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、第2グラフにおける複数のノードのうち、入力エッジが連結されていないノードである入力無ノードがある場合、第1グラフにおいて当該ノードに連結される入力エッジのうち、長さが所定の基準を満たすエッジを、当該ノードの入力エッジとして第2エッジに追加する入力追加処理により、第2エッジが追加された第2グラフを生成する。
このように、実施形態に係る生成装置100は、第2グラフにおける複数のノードのうち、入力無ノードがある場合、入力追加処理により入力エッジが0本である、すなわち入力エッジが無いノードを無くす。すなわち、生成装置100は、各ノードに少なくとも1本以上の入力エッジが連結された第2グラフを生成することができ、検索時にエッジを辿って到達できないノードを無くし、エッジを辿ることにより各ノードに到達可能とする。これにより、生成装置100は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、第1グラフにおいて当該ノードに連結される入力エッジのうち、長さが最も短いエッジを、当該ノードの入力エッジとして第2エッジに追加する入力追加処理により、第2エッジが追加された第2グラフを生成する。
このように、実施形態に係る生成装置100は、入力追加処理において、第1グラフにおいて当該ノードに連結される入力エッジのうち、長さが最も短いエッジを、当該ノードの入力エッジとして第2エッジに追加することにより、類似性の高いノード間のエッジを追加することができる。これにより、生成装置100は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、更新処理時において入力追加処理を行うことにより、第2エッジが追加された第2グラフを生成する。
このように、実施形態に係る生成装置100は、更新処理時において入力追加処理を行うことにより、各ノードが更新処理の対象となった際に入力エッジが0本となるノードが残る可能性を無くすことにより、第2エッジが追加された第2グラフを生成する。すなわち、生成装置100は、更新処理の中で各ノードに少なくとも1本以上の入力エッジが連結された第2グラフを生成することができ、検索時にエッジを辿って到達できないノードを無くし、エッジを辿ることにより各ノードに到達可能とする。これにより、生成装置100は、第2グラフ生成の処理時間の増大を抑制しつつ、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、更新処理の繰り返し終了後において入力追加処理を行うことにより、第2グラフを生成する。
このように、実施形態に係る生成装置100は、更新処理の繰り返し終了後において入力追加処理を行うことにより、各ノードを対象とした更新処理が行われた後に、入力エッジが0本となっているノードのみを対象として入力追加処理を行う。したがって、生成装置100は、入力追加処理を行う対象を更新処理後において入力エッジが0本であるノードのみを対象とすることができるため、入力追加処理により追加されるエッジの本数を少なくすることができる。すなわち、生成装置100は、入力追加処理により追加されるエッジの本数を少なくしつつ、各ノードに少なくとも1本以上の入力エッジが連結された第2グラフを生成することができ、検索時にエッジを辿って到達できないノードを無くし、エッジを辿ることにより各ノードに到達可能とする。これにより、生成装置100は、エッジの本数の増大を抑制しつつ、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
〔10.ハードウェア構成〕
上述してきた実施形態に係る生成装置100は、例えば図14に示すような構成のコンピュータ1000によって実現される。図14は、生成装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。コンピュータ1000は、CPU1100、RAM1200、ROM(Read Only Memory)1300、HDD(Hard Disk Drive)1400、通信インターフェイス(I/F)1500、入出力インターフェイス(I/F)1600、及びメディアインターフェイス(I/F)1700を有する。
CPU1100は、ROM1300またはHDD1400に格納されたプログラムに基づいて動作し、各部の制御を行う。ROM1300は、コンピュータ1000の起動時にCPU1100によって実行されるブートプログラムや、コンピュータ1000のハードウェアに依存するプログラム等を格納する。
HDD1400は、CPU1100によって実行されるプログラム、及び、かかるプログラムによって使用されるデータ等を格納する。通信インターフェイス1500は、ネットワークNを介して他の機器からデータを受信してCPU1100へ送り、CPU1100が生成したデータをネットワークNを介して他の機器へ送信する。
CPU1100は、入出力インターフェイス1600を介して、ディスプレイやプリンタ等の出力装置、及び、キーボードやマウス等の入力装置を制御する。CPU1100は、入出力インターフェイス1600を介して、入力装置からデータを取得する。また、CPU1100は、生成したデータを入出力インターフェイス1600を介して出力装置へ出力する。
メディアインターフェイス1700は、記録媒体1800に格納されたプログラムまたはデータを読み取り、RAM1200を介してCPU1100に提供する。CPU1100は、かかるプログラムを、メディアインターフェイス1700を介して記録媒体1800からRAM1200上にロードし、ロードしたプログラムを実行する。記録媒体1800は、例えばDVD(Digital Versatile Disc)、PD(Phase change rewritable Disk)等の光学記録媒体、MO(Magneto-Optical disk)等の光磁気記録媒体、テープ媒体、磁気記録媒体、または半導体メモリ等である。
例えば、コンピュータ1000が実施形態に係る生成装置100として機能する場合、コンピュータ1000のCPU1100は、RAM1200上にロードされたプログラムを実行することにより、制御部130の機能を実現する。コンピュータ1000のCPU1100は、これらのプログラムを記録媒体1800から読み取って実行するが、他の例として、他の装置からネットワークNを介してこれらのプログラムを取得してもよい。
以上、本願の実施形態のいくつかを図面に基づいて詳細に説明したが、これらは例示であり、発明の開示の行に記載の態様を始めとして、当業者の知識に基づいて種々の変形、改良を施した他の形態で本発明を実施することが可能である。
〔11.その他〕
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、各図に示した各種情報は、図示した情報に限られない。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
また、上述してきた各実施形態に記載された各処理は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
また、上述してきた「部(section、module、unit)」は、「手段」や「回路」などに読み替えることができる。例えば、取得部は、取得手段や取得回路に読み替えることができる。