以下に、本願に係る生成装置、生成方法、生成プログラム、及びグラフデータを実施するための形態(以下、「実施形態」と呼ぶ)について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る生成装置、生成方法、生成プログラム、及びグラフデータが限定されるものではない。また、以下の各実施形態において同一の部位には同一の符号を付し、重複する説明は省略される。
(実施形態)
〔1.生成処理〕
図1を用いて、実施形態に係る生成処理の一例について説明する。図1は、実施形態に係る生成処理の一例を示す図である。図1では、生成装置100(図3参照)が与えられたグラフデータ(以下、「第1グラフデータ」ともいう)に基づいて、新たなグラフデータ(以下、「第2グラフデータ」ともいう)を生成する場合を示す。すなわち、図1では、生成装置100が第1グラフデータから第2グラフデータを生成する場合を示す。なお、対象とする情報(オブジェクト)は、ベクトルとして表現可能であれば、どのような情報であってもよい。なお、以下では、画像情報を対象としたベクトル情報について説明するが、ベクトル情報の対象は、動画情報や音声情報等の他の対象であってもよい。
また、生成装置100は、図1に示すように、グラフデータを対象に生成処理を行う。なお、ここでいう、有向エッジとは、一方向にしかデータを辿れないエッジを意味する。以下では、エッジにより辿る元、すなわち始点となるノードを参照元とし、エッジにより辿る先、すなわち終点となるノードを参照先とする。例えば、所定のノード「A」から所定のノード「B」に連結される有向エッジとは、参照元をノード「A」とし、参照先をノード「B」とするエッジであることを示す。
以下では、このようにノード「A」を参照元とするエッジをノード「A」の出力エッジという。また、以下では、このようにノード「B」を参照先とするエッジをノード「B」の入力エッジという。すなわち、ここでいう出力エッジ及び入力エッジとは、一の有向エッジをその有効エッジが連結する2つのノードのうち、いずれのノードを中心として捉えるかの相違であり、一の有向エッジが出力エッジ及び入力エッジになる。すなわち、出力エッジ及び入力エッジは、相対的な概念であって、一の有向エッジについて、参照元となるノードを中心として捉えた場合に出力エッジとなり、参照先となるノードを中心として捉えた場合に入力エッジとなる。なお、本実施形態においては、エッジについては、出力エッジや入力エッジ等の有向エッジを対象とするため、以下では、有向エッジを単に「エッジ」と記載する場合がある。
また、ここでいう、各ノードは、各オブジェクトに対応する。例えば、画像から抽出された複数の局所特徴量のそれぞれがオブジェクトであってもよい。また、例えば、オブジェクト間の距離が定義された種々のデータがオブジェクトであってもよい。
生成装置100は、数百万〜数億単位の画像情報に対応するノードを対象に処理を行うが、図面においてはその一部のみを図示する。図1の例では、説明を簡単にするために、8個のノードを図示して処理の概要を説明する。例えば、生成装置100は、図1中のノードN1〜N8に示すような複数のノードを含むノード群を取得し、各ノードをエッジで連結した第2グラフデータGR12を生成する。
また、このように「ノードN*(*は任意の数値)」と記載した場合、そのノードはノードID「N*」により識別されるノードであることを示す。例えば、「ノードN1」と記載した場合、そのノードはノードID「N1」により識別されるノードである。
また、このように「エッジE*(*は任意の数値)」と記載した場合、そのエッジはエッジID「E*」により識別されるエッジであることを示す。例えば、「エッジE11」と記載した場合、そのエッジはエッジID「E11」により識別されるエッジである。例えば、ノードN1を参照元とし、ノードN2を参照先として連結されるエッジE11により、ノードN1からノードN2に辿ることが可能となる。この場合、有向エッジであるエッジE11は、ノードN1を中心として識別される場合、出力エッジとなり、ノードN2を中心として識別される場合、入力エッジとなる。
また、図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に示す例においては、第1グラフデータGR11及び第2グラフデータGR12−1〜GR12−4においては、適宜「ノードN*(*は任意の数値)」の図示を省略し、取得した各ノードを「○」内に「ノードN*(*は任意の数値)」の「*」の値を付すことにより表現する。例えば、空間情報VS1中の左上の「○」であって、内部に「2」が付された「○」は、ノードID「N2」により識別されるノードに対応する。例えば、図1に示す例において、各ノードに対応するベクトルデータは、N次元の実数値ベクトルであってもよい。また、図1に示す例においては、第2グラフデータGR12−1〜GR12−4においては、第1グラフデータGR11において符号を図示済みのエッジについては、適宜「エッジE*(*は任意の数値)」の図示を省略する場合がある。
本実施形態においては、空間情報VS1における各ノードの距離を対応する各オブジェクト間の類似度とする。例えば、各ノードに対応する対象(画像情報)の類似性が、空間情報VS1内におけるノード間の距離として写像されているものとする。例えば、各ノードに対応する概念間の類似度が各ノード間の距離に写像されているものとする。ここで、図1に示す例においては、空間情報VS1における各ノード間の距離が短いオブジェクト同士の類似度が高く、空間情報VS1における各ノード間の距離が長いオブジェクト同士の類似度が低い。例えば、図1中の空間情報VS1において、ノードID「N6」により識別されるノードと、ノードID「N8」により識別されるノードとは近接している、すなわち距離が短い。そのため、ノードID「N6」により識別されるノードに対応するオブジェクトと、ノードID「N8」により識別されるノードに対応するオブジェクトとは類似度が高いことを示す。
また、例えば、図1中の空間情報VS1において、ノードID「N6」により識別されるノードと、ノードID「N2」により識別されるノードとは遠隔にある、すなわち距離が長い。そのため、ノードID「N6」により識別されるノードに対応するオブジェクトと、ノードID「N2」により識別されるノードに対応するオブジェクトとは類似度が低いことを示す。
また、図1の例では、生成装置100は、後述する生成処理により、ノードを有向エッジで連結することにより、グラフデータGR11を生成する。例えば、グラフデータGR11を用いた検索においては、検索時はグラフ構造型インデックスと同様の処理を行うが、開始位置(起点)は本インデックス(グラフデータGR11)のルートからスタートする。例えば、生成装置100が生成したグラフデータGR11を用いて検索を行う場合、ルートノードであるノードN1を起点として検索を行う。例えば、検索時においては、ルートノードであるノードN1から有向エッジを辿ることにより、ノードN2〜N8等を順次検索してもよい。
ここから、図1を用いて生成処理の詳細を説明する。なお、図1に示す各ステップは、第2グラフデータの生成を説明するための便宜的なステップであり、実際の処理はより詳細な処理ステップにより行われてもよい。なお、生成装置100が行う生成処理は、図1中の第2グラフデータGR12−4に示すような第2グラフデータGR12が生成されれば、どのような処理フローであってもよい。
まず、生成装置100は、第1グラフデータを取得する(ステップS11)。例えば、生成装置100は、第1グラフデータ記憶部122から第1グラフデータを取得する。図1の例では、生成装置100は、第1グラフデータGR11を取得する。例えば、第1グラフデータGR11は、k近傍(k-nearest neighbor)グラフデータである。図1の例では、第1グラフデータGR11は、kが「4」であり、各ノードから近傍の4個のノードに出力エッジが連結されたグラフデータである場合を例に説明する。
なお、第1グラフデータは、k近傍グラフデータに限らず、近似k近傍グラフデータ等、複数のノードが有向エッジに連結されたグラフであればどのようなグラフデータであってもよい。また、図1では、ノードN1及びノードN2の出力エッジを対象にする場合の処理を説明するため、ノードN1の出力エッジであるエッジE11〜E14及びノードN2の出力エッジであるエッジE21〜E24のみを図示し、他のノードN3〜N8の出力エッジについては図示を省略する。例えば、ノードN6から近傍の4個のノードにノードN2やノードN8が含まれる場合であっても、ノードN6からノードN2やノードN8への出力エッジは図示を省略する。
そして、生成装置100は、第1グラフデータに含まれるノードを有する第2グラフデータを生成する(ステップS12)。例えば、生成装置100は、第1グラフデータからエッジを除くことにより、ノードN1〜N8に示すような複数のノードのみを有する第2グラフデータGR12を生成する。図1の例では、生成装置100は、第1グラフデータGR11からノードのみを有する第2グラフデータGR12−1を生成する。
そして、生成装置100は、第1グラフデータに含まれるノードのうち、一の未処理ノードを対象ノード(処理ノード)として選択する(ステップS13)。図1の例では、生成装置100は、「ノードN*(*は任意の数値)」の「*」が小さい方から順に対象ノードを選択するものとする。この場合、生成装置100は、ノードN1、ノードN2、ノードN3等の順序で対象ノードを選択する。なお、生成装置100は、選択するノードが未処理のノードであれば、どのような順序でノードを選択してもよい。
図1の例では、生成装置100は、第1グラフデータGR11からノードN1を対象ノードとして選択する。
そして、生成装置100は、処理ノードを始点とする出力エッジのうち、距離が短い方から第1閾値の数のエッジを選択する(ステップS14)。図1の例では、生成装置100は、第1閾値を「2」として生成処理を行うものとする。このように、図1では第1閾値を「2」とする場合を例に説明するが、第1閾値には種々の値が選択されてもよい。
例えば、生成装置100は、ノードN1を始点とする出力エッジのうち、距離(長さ)が短い方から第1閾値の数(2本)のエッジを選択する。例えば、生成装置100は、図4中の第1グラフデータ記憶部122に記憶されたグラフデータに基づいて、ノードN1を始点とする出力エッジのうち、距離が短い方から第1閾値の数(2本)のエッジを選択する。ここで、図1中のエッジ一覧EL11−1は、ノードN1からの出力エッジを距離(長さ)が短い方から順に並べた一覧を示す。なお、エッジ一覧EL11−1は、距離に基づくエッジの選択の説明のために示す一覧である。例えば、生成装置100は、図5中の第1グラフデータ記憶部122に記憶された情報(データ)に基づいて処理可能であるため、エッジ一覧EL11−1を有しなくてもよい。
図1中のエッジ一覧EL11−1に示すように、生成装置100は、距離が短い方から第1閾値「2」個のエッジ、すなわち順位が1位及び2位のエッジを選択する。具体的には、生成装置100は、ノードN1の出力エッジのうち、最短のエッジE12と、エッジE12の次に距離が短いエッジE11とを選択する。
そして、生成装置100は、選択したエッジを第2グラフデータに追加する(ステップS15)。図1の例では、生成装置100は、エッジE12、E11を第2グラフデータに追加する。すなわち、生成装置100は、ノードN1からの出力エッジであるエッジE12、E11を第2グラフデータに追加する。言い換えると、生成装置100は、ノードN3への入力エッジであるエッジE12と、ノードN2への入力エッジであるエッジE11とを第2グラフデータに追加する。これにより、生成装置100は、第2グラフデータGR12−2を生成する。
また、生成装置100は、処理ノードを始点とする出力エッジのうち、距離が短い方から第2閾値の数のエッジを選択する(ステップS16)。図1の例では、生成装置100は、第2閾値を「3」として生成処理を行うものとする。このように、図1では第2閾値を「3」とする場合を例に説明するが、第2閾値には種々の値が選択されてもよい。
例えば、生成装置100は、ノードN1を始点とする出力エッジのうち、距離が短い方から第2閾値の数(3本)のエッジを選択する。例えば、生成装置100は、図5中の第1グラフデータ記憶部122に記憶されたグラフデータに基づいて、ノードN1を始点とする出力エッジのうち、距離が短い方から第2閾値の数(3本)のエッジを選択する。ここで、図1中のエッジ一覧EL11−2は、ノードN1からの出力エッジを距離(長さ)が短い方から順に並べた一覧を示す。なお、エッジ一覧EL11−2は、エッジ一覧EL11−1と同様の情報であり、選択されるエッジ数が異なることを示すための一覧である。
図1中のエッジ一覧EL11−2に示すように、生成装置100は、距離が短い方から第2閾値「3」個のエッジ、すなわち順位が1位〜3位のエッジを選択する。具体的には、生成装置100は、ノードN1の出力エッジのうち、最短のエッジE12と、エッジE12の次に距離が短いエッジE11と、エッジE11の次に距離が短いエッジE13とを選択する。
そして、生成装置100は、選択したエッジの向きを反転したエッジを第2グラフデータに追加する(ステップS17)。図1の例では、生成装置100は、エッジE12、E11、E13の向きを反転したエッジE15、E16、E17を第2グラフデータに追加する。すなわち、生成装置100は、ノードN1への入力エッジであるエッジE15、E16、E17を第2グラフデータに追加する。言い換えると、生成装置100は、ノードN3からの出力エッジであるエッジE15と、ノードN2からの出力エッジであるエッジE16と、ノードN4からの出力エッジであるエッジE17とを第2グラフデータに追加する。これにより、生成装置100は、第2グラフデータGR12−3を生成する。
そして、生成装置100は、第1グラフデータに含まれるノードのうち、一の未処理ノードを対象ノード(処理ノード)として選択する(ステップS18)。例えば、生成装置100は、ステップS13で選択した処理を行ったノードN1(処理済みノード)以外のノードを対象ノードとして選択する。図1の例では、生成装置100は、第1グラフデータGR11からノードN2を対象ノードとして選択する。
そして、生成装置100は、処理ノードを始点とする出力エッジのうち、距離が短い方から第1閾値の数のエッジを選択する(ステップS19−1)。例えば、生成装置100は、ノードN2を始点とする出力エッジのうち、距離が短い方から第1閾値の数(2本)のエッジを選択する。ここで、図1中のエッジ一覧EL12−1は、ノードN2からの出力エッジを距離(長さ)が短い方から順に並べた一覧を示す。なお、エッジ一覧EL12−1は、距離に基づくエッジの選択の説明のために示す一覧である。例えば、生成装置100は、図5中の第1グラフデータ記憶部122に記憶された情報(データ)に基づいて処理可能であるため、エッジ一覧EL12−1を有しなくてもよい。
図1中のエッジ一覧EL12−1に示すように、生成装置100は、距離が短い方から第1閾値「2」個のエッジ、すなわち順位が1位及び2位のエッジを選択する。具体的には、生成装置100は、ノードN2の出力エッジのうち、最短のエッジE22と、エッジE22の次に距離が短いエッジE24とを選択する。
また、生成装置100は、処理ノードを始点とする出力エッジのうち、距離が短い方から第2閾値の数のエッジを選択する(ステップS19−2)。
例えば、生成装置100は、ノードN2を始点とする出力エッジのうち、距離が短い方から第2閾値の数(3本)のエッジを選択する。例えば、生成装置100は、図5中の第1グラフデータ記憶部122に記憶されたグラフデータに基づいて、ノードN2を始点とする出力エッジのうち、距離が短い方から第2閾値の数(3本)のエッジを選択する。ここで、図1中のエッジ一覧EL12−2は、ノードN2からの出力エッジを距離(長さ)が短い方から順に並べた一覧を示す。なお、エッジ一覧EL12−2は、エッジ一覧EL12−1と同様の情報であり、選択されるエッジ数が異なることを示すための一覧である。
図1中のエッジ一覧EL12−2に示すように、生成装置100は、距離が短い方から第2閾値「3」個のエッジ、すなわち順位が1位〜3位のエッジを選択する。具体的には、生成装置100は、ノードN2の出力エッジのうち、最短のエッジE22と、エッジE22の次に距離が短いエッジE24と、エッジE24の次に距離が短いエッジE21とを選択する。
そして、生成装置100は、選択したエッジを第2グラフデータに追加する(ステップS20)。図1の例では、生成装置100は、ステップS19−1で選択したエッジE22、E24を第2グラフデータに追加する。すなわち、生成装置100は、ノードN2からの出力エッジであるエッジE22、E24を第2グラフデータに追加する。
図1の例では、生成装置100は、ステップS19−2で選択したエッジの向きを反転したエッジを第2グラフデータに追加する。例えば、生成装置100は、エッジE22、E24、E21の向きを反転したエッジE25、E26、E27を第2グラフデータに追加する。すなわち、生成装置100は、ノードN2への入力エッジであるエッジE25、E26、E27を第2グラフデータに追加する。これにより、生成装置100は、第2グラフデータGR12−4を生成する。
上述したように、生成装置100は、第1グラフデータGR11中の各ノードの出力エッジのうち、第1閾値の数の出力エッジを第2グラフデータGR12においてそのまま連結する。また、生成装置100は、第1グラフデータGR11中の各ノードの出力エッジのうち、第2閾値の数の出力エッジを反転したエッジ第2グラフデータGR12において連結する。これにより、生成装置100は、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
例えば、グラフデータ中に多数(例えば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閾値を「2」とし、第2閾値を「3」とする場合を示したが、第1閾値や第2閾値には種々の値が選択されてもよい。例えば、第1閾値と第2閾値とは同じ値であってもよい。また、生成装置100は、第1閾値や第2閾値を、生成した第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と、第1グラフデータ記憶部122と、第2グラフデータ記憶部123とを有する。
(オブジェクト情報記憶部121)
実施形態に係るオブジェクト情報記憶部121は、オブジェクトに関する各種情報を記憶する。例えば、オブジェクト情報記憶部121は、オブジェクトIDやベクトルデータを記憶する。図4は、実施形態に係るオブジェクト記憶部の一例を示す図である。図4に示すオブジェクト情報記憶部121は、「オブジェクトID」、「ベクトル情報」といった項目が含まれる。
「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。また、「ベクトル情報」とは、オブジェクトIDにより識別されるオブジェクトに対応するベクトル情報を示す。すなわち、図4の例では、オブジェクトを識別するオブジェクトIDに対して、オブジェクトに対応するベクトルデータ(ベクトル情報)が対応付けられて登録されている。
例えば、図4の例では、ID「OB1」により識別されるオブジェクト(対象)は、「10,24,51,2...」の多次元のベクトル情報が対応付けられることを示す。
なお、オブジェクト情報記憶部121は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(第1グラフデータ記憶部122)
実施形態に係る第1グラフデータ記憶部122は、第1グラフデータに関する各種情報を記憶する。例えば、第1グラフデータ記憶部122は、第2グラフデータを生成する基となる第1グラフデータを記憶する。図5は、実施形態に係る第1グラフデータ記憶部の一例を示す図である。図5に示す第1グラフデータ記憶部122は、「ノードID」、「オブジェクトID」、および「有向エッジ情報」といった項目を有する。また、「有向エッジ情報」には、「エッジID」や「参照先」や「距離」といった情報が含まれる。
「ノードID」は、グラフデータにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。
また、「有向エッジ情報」は、対応するノードに接続されるエッジに関する情報を示す。図5の例では、「有向エッジ情報」は、対応するノードから出力される出力エッジに関する情報を示す。また、「エッジID」は、ノード間を連結するエッジを識別するための識別情報を示す。また、「参照先」は、エッジにより連結された参照先(ノード)を示す情報を示す。また、「距離」は、エッジにより連結された参照先(ノード)との間の距離を示す。例えば、「距離」は、エッジの長さを示す。すなわち、図5の例では、ノードを識別するノードIDに対して、そのノードに対応するオブジェクト(対象)を識別する情報やそのノードからの有向エッジ(出力エッジ)が連結される参照先(ノード)が対応付けられて登録されている。
例えば、図5の例では、ノードID「N1」により識別されるノードは、オブジェクトID「OB1」により識別されるオブジェクト(対象)に対応することを示す。また、ノードID「N1」により識別されるノードからは、エッジID「E11」により識別されるエッジが、ノードID「N2」により識別されるノードに連結されることを示す。すなわち、図5の例では、ノードID「N1」により識別されるノードからはノードID「N2」により識別されるノードに辿ることができることを示す。また、ノードID「N1」により識別されるノードと、ノードID「N2」により識別されるノードとの間の距離が
「D11」であることを示す。すなわち、ノードN1とノードN2とを間の距離が「D11」であることを示す。言い換えると、ノードN1とノードN2とを連結するエッジE11の長さが「D11」であることを示す。
なお、第1グラフデータ記憶部122は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(第2グラフデータ記憶部123)
実施形態に係る第2グラフデータ記憶部123は、第2グラフデータに関する各種情報を記憶する。図6は、実施形態に係る第2グラフデータ記憶部の一例を示す図である。図6の例では、第2グラフデータ記憶部123は、「ノードID」、「オブジェクトID」、および「有向エッジ情報」といった項目を有する。また、「有向エッジ情報」には、「エッジID」や「参照先」や「距離」といった情報が含まれる。
「ノードID」は、グラフデータにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。
また、「有向エッジ情報」は、対応するノードに接続されるエッジに関する情報を示す。図6の例では、「有向エッジ情報」は、対応するノードから出力される出力エッジに関する情報を示す。また、「エッジID」は、ノード間を連結するエッジを識別するための識別情報を示す。また、「参照先」は、エッジにより連結された参照先(ノード)を示す情報を示す。また、「距離」は、エッジにより連結された参照先(ノード)との間の距離を示す。例えば、「距離」は、エッジの長さを示す。すなわち、図6の例では、ノードを識別するノードIDに対して、そのノードに対応するオブジェクト(対象)を識別する情報やそのノードからの有向エッジ(出力エッジ)が連結される参照先(ノード)が対応付けられて登録されている。
例えば、図6の例では、ノードID「N2」により識別されるノードは、オブジェクトID「OB2」により識別されるオブジェクト(対象)に対応することを示す。また、ノードID「N2」により識別されるノードからは、エッジID「E16」により識別されるエッジが、ノードID「N1」により識別されるノードに連結されることを示す。すなわち、図6の例では、ノードID「N2」により識別されるノードからはノードID「N1」により識別されるノードに辿ることができることを示す。また、ノードID「N2」により識別されるノードと、ノードID「N1」により識別されるノードとの間の距離が
「D11」であることを示す。すなわち、ノードN2とノードN1とを間の距離が「D11」であることを示す。言い換えると、ノードN2とノードN1とを連結するエッジE16の長さが「D11」であることを示す。
なお、第2グラフデータ記憶部123は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(制御部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)等の集積回路により実現される。例えば、制御部130(CPUやMPU等のコントローラ)は、グラフデータにより検索の処理を行う。例えば、制御部130は、グラフデータの指令に従って、与えられたクエリに対応する検索の処理を行う。
図3に示すように、制御部130は、取得部131と、選択部132と、生成部133と、提供部134とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部130の内部構成は、図3に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
(取得部131)
取得部131は、各種情報を取得する。例えば、取得部131は、記憶部120から各種情報を取得する。例えば、取得部131は、オブジェクト情報記憶部121や、第1グラフデータ記憶部122や、第2グラフデータ記憶部123等から各種情報を取得する。また、取得部131は、各種情報を外部の情報処理装置から取得する。
例えば、取得部131は、データ検索の対象となる複数のノードを取得する。例えば、取得部131は、複数のノードと、複数のノードの各々を連結する複数の有向エッジを含む有向エッジ群を取得する。例えば、取得部131は、外部の情報処理装置から第1グラフデータを取得する。例えば、取得部131は、第1グラフデータ記憶部122から第1グラフデータを取得する。
例えば、取得部131は、第1グラフデータを取得する。図1の例では、生成装置100は、第1グラフデータGR11を取得する。
例えば、取得部131は、検索クエリに関する情報を取得する。例えば、取得部131は、画像検索に関する検索クエリを取得する。取得部131は、ユーザU1が利用する端末装置10からクエリを受け付けた情報提供装置50からクエリを取得する。
(選択部132)
選択部132は、各種情報を選択する。例えば、選択部132は、処理の対象となる対象ノード(処理ノード)を選択する。
図1の例では、選択部132は、第1グラフデータに含まれるノードのうち、一の未処理ノードを対象ノード(処理ノード)として選択する。例えば、選択部132は、第1グラフデータGR11からノードN1を対象ノードとして選択する。例えば、選択部132は、処理ノードを始点とする出力エッジのうち、距離が短い方から第1閾値の数のエッジを選択する。
例えば、選択部132は、ノードN1を始点とする出力エッジのうち、距離(長さ)が短い方から第1閾値の数(2本)のエッジを選択する。例えば、選択部132は、図5中の第1グラフデータ記憶部122に記憶されたグラフデータに基づいて、ノードN1を始点とする出力エッジのうち、距離が短い方から第1閾値の数(2本)のエッジを選択する。例えば、選択部132は、距離が短い方から第1閾値「2」個のエッジ、すなわち順位が1位及び2位のエッジを選択する。例えば、選択部132は、ノードN1の出力エッジのうち、最短のエッジE12と、エッジE12の次に距離が短いエッジE11とを選択する。
選択部132は、処理ノードを始点とする出力エッジのうち、距離が短い方から第2閾値の数のエッジを選択する。例えば、選択部132は、ノードN1を始点とする出力エッジのうち、距離が短い方から第2閾値の数(3本)のエッジを選択する。例えば、選択部132は、図5中の第1グラフデータ記憶部122に記憶されたグラフデータに基づいて、ノードN1を始点とする出力エッジのうち、距離が短い方から第2閾値の数(3本)のエッジを選択する。例えば、選択部132は、距離が短い方から第2閾値「3」個のエッジ、すなわち順位が1位〜3位のエッジを選択する。例えば、選択部132は、ノードN1の出力エッジのうち、最短のエッジE12と、エッジE12の次に距離が短いエッジE11と、エッジE11の次に距離が短いエッジE13とを選択する。
図1の例では、選択部132は、第1グラフデータGR11からノードN2を対象ノードとして選択する。例えば、選択部132は、ノードN2を始点とする出力エッジのうち、距離が短い方から第1閾値の数(2本)のエッジを選択する。例えば、選択部132は、距離が短い方から第1閾値「2」個のエッジ、すなわち順位が1位及び2位のエッジを選択する。例えば、選択部132は、ノードN2の出力エッジのうち、最短のエッジE22と、エッジE22の次に距離が短いエッジE24とを選択する。
例えば、選択部132は、ノードN2を始点とする出力エッジのうち、距離が短い方から第2閾値の数(3本)のエッジを選択する。例えば、選択部132は、図5中の第1グラフデータ記憶部122に記憶されたグラフデータに基づいて、ノードN2を始点とする出力エッジのうち、距離が短い方から第2閾値の数(3本)のエッジを選択する。例えば、選択部132は、距離が短い方から第2閾値「3」個のエッジ、すなわち順位が1位〜3位のエッジを選択する。例えば、選択部132は、ノードN2の出力エッジのうち、最短のエッジE22と、エッジE22の次に距離が短いエッジE24と、エッジE24の次に距離が短いエッジE21とを選択する。
(生成部133)
生成部133は、各種情報を生成する。例えば、生成部133は、記憶部120に記憶された情報(データ)から各種情報(データ)を生成する。例えば、生成部133は、オブジェクト情報記憶部121と、第1グラフデータ記憶部122から各種情報を生成する。例えば、生成部133は、第1グラフデータから第2グラフデータを生成する。
例えば、生成部133は、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第1閾値の数の他のノードを終点ノードとする出力エッジと、各ノードを終点ノードとし、各ノードとの距離が短い方から順に第2閾値の数の他のノードを始点ノードとする入力エッジとを、各ノードに連結することによりグラフデータを生成する。例えば、生成部133は、一のノードから対象ノードへ他のノードを経由することにより到達可能なルートであって、ルートに含まれる他のノードの数、または、対象ノードと一のノードとの距離と、他のノードと一のノードとの距離との比較が所定の条件を満たすルートがある場合、一のノードを始点ノードとし、対象ノードを終点ノードとする一のノードの出力エッジを削除することにより、グラフデータを生成する。
例えば、生成部133は、有向エッジ群に基づいて、出力エッジと入力エッジとを含むグラフデータを生成する。例えば、生成部133は、有向エッジ群から各有向エッジが連結するノード間の距離に基づいて、有向エッジを出力エッジとして選択することにより、グラフデータを生成する。例えば、生成部133は、有向エッジ群のうち、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第1閾値の数の他のノードを終点ノードとする有向エッジを出力エッジとして選択することによりグラフデータを生成する。
例えば、生成部133は、有向エッジ群から各有向エッジが連結するノード間の距離に基づいて選択した有向エッジの向きを反転させた入力エッジを生成することにより、グラフデータを生成する。例えば、生成部133は、有向エッジ群のうち、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第2閾値の数の他のノードを終点ノードとする有向エッジを選択し、選択した有向エッジの向きを反転させた入力エッジを生成することにより、グラフデータを生成する。
例えば、生成部133は、一のノードから対象ノードへ他のノードを経由することにより到達可能な第1ルートであって、第1ルートに含まれる他のノードの数、または、対象ノードと一のノードとの距離と、他のノードと一のノードとの距離との比較が所定の条件を満たす第1ルートがある場合、一のノードを始点ノードとし、対象ノードを終点ノードとする第2ルートであって、一のノードから対象ノードへ直接到達可能な第2ルートを含まない枝刈後有向エッジに基づいて、出力エッジと入力エッジとを含むグラフデータを生成する。
例えば、生成部133は、有向エッジのうち、第2ルートに対応する有向エッジを削除することにより枝刈後有向エッジを生成する。例えば、生成部133は、第1閾値及び第2閾値を変動させた各組合せの検索結果に基づいて決定される第1閾値及び第2閾値を用いて、グラフデータを生成する。
例えば、生成部133は、各組合せにおける適合率を含む検索結果に基づいて決定される第1閾値及び第2閾値を用いて、グラフデータを生成する。例えば、生成部133は、各組合せにおける検索時間を含む検索結果に基づいて決定される第1閾値及び第2閾値を用いて、グラフデータを生成する。例えば、生成装置100は、図1中のノードN1〜N8に示すような複数のノードを含むノード群を取得し、各ノードをエッジで連結した第2グラフデータGR12を生成する。
図1の例では、生成部133は、第1グラフデータに含まれるノードを有する第2グラフデータを生成する。例えば、生成部133は、第1グラフデータからエッジを除くことにより、ノードN1〜N8に示すような複数のノードのみを有する第2グラフデータGR12を生成する。例えば、生成部133は、第1グラフデータGR11からノードのみを有する第2グラフデータGR12−1を生成する。
例えば、生成部133は、選択したエッジを第2グラフデータに追加する。図1の例では、生成部133は、エッジE12、E11を第2グラフデータに追加する。例えば、生成部133は、ノードN1からの出力エッジであるエッジE12、E11を第2グラフデータに追加する。例えば、生成部133は、ノードN3への入力エッジであるエッジE12と、ノードN2への入力エッジであるエッジE11とを第2グラフデータに追加する。図1の例では、生成部133は、第2グラフデータGR12−2を生成する。
例えば、生成部133は、選択したエッジの向きを反転したエッジを第2グラフデータに追加する。図1の例では、生成部133は、エッジE12、E11、E13の向きを反転したエッジE15、E16、E17を第2グラフデータに追加する。例えば、生成部133は、ノードN1への入力エッジであるエッジE15、E16、E17を第2グラフデータに追加する。例えば、生成部133は、ノードN3からの出力エッジであるエッジE15と、ノードN2からの出力エッジであるエッジE16と、ノードN4からの出力エッジであるエッジE17とを第2グラフデータに追加する。図1の例では、生成部133は、第2グラフデータGR12−3を生成する。
例えば、生成部133は、選択したエッジを第2グラフデータに追加する。図1の例では、生成部133は、第1閾値に基づいて選択したエッジE22、E24を第2グラフデータに追加する。例えば、生成部133は、ノードN2からの出力エッジであるエッジE22、E24を第2グラフデータに追加する。
例えば、生成部133は、第2閾値に基づいて選択したエッジの向きを反転したエッジを第2グラフデータに追加する。図1の例では、生成装置100は、エッジE22、E24、E21の向きを反転したエッジE25、E26、E27を第2グラフデータに追加する。例えば、生成部133は、ノードN2への入力エッジであるエッジE25、E26、E27を第2グラフデータに追加する。図1の例では、生成部133は、第2グラフデータGR12−4を生成する。
(提供部134)
提供部134は、各種情報を提供する。例えば、提供部134は、端末装置10や情報提供装置50に各種情報を提供する。例えば、提供部134は、クエリに対応するオブジェクトIDを検索結果として提供する。例えば、提供部134は、選択部132により選択されたオブジェクトIDを情報提供装置50へ提供する。提供部134は、選択部132により選択されたオブジェクトIDをクエリに対応するベクトルを示す情報として情報提供装置50に提供する。
また、提供部134は、生成部133により生成された第2グラフデータを外部の情報処理装置へ提供してもよい。
〔4.生成処理のフロー〕
次に、図7を用いて、実施形態に係る生成システム1による生成処理の手順について説明する。図7は、実施形態に係る生成処理の一例を示すフローチャートである。
図7に示すように、生成装置100は、第1グラフデータを取得する(ステップS101)。例えば、生成装置100は、第1グラフデータ記憶部122から第1グラフデータを取得する。図1の例では、生成装置100は、第1グラフデータGR11を取得する。
そして、生成装置100は、第1グラフデータに含まれるノードを有する第2グラフデータを生成する(ステップS102)。例えば、生成装置100は、第1グラフデータからエッジを除くことにより、ノードのみを有する第2グラフデータを生成する。図1の例では、生成装置100は、第1グラフデータGR11からノードのみを有する第2グラフデータGR12−1を生成する。
そして、生成装置100は、第1グラフデータに含まれるノードのうち、一の未処理ノードを処理ノードとして選択する(ステップS103)。例えば、生成装置100は、第1グラフデータGR11からノードN1を処理ノード(対象ノード)として選択する。
そして、生成装置100は、処理ノードを始点とする出力エッジのうち、距離が短い方から第1閾値の数の出力エッジを第2グラフデータに追加する(ステップS104)。例えば、生成装置100は、ノードN1を始点とする出力エッジのうち、距離が短い方から第1閾値の数(2本)の出力エッジであるエッジE12、E11を第2グラフデータに追加する。
そして、生成装置100は、処理ノードを始点とする出力エッジのうち、距離が短い方から第2閾値の数の出力エッジの向きを反転した入力エッジを第2グラフデータに追加する(ステップS105)。例えば、生成装置100は、ノードN1を始点とする出力エッジのうち、距離が短い方から第2閾値の数(3本)の出力エッジであるエッジE12、E11、E13の向きを反転した入力エッジであるエッジE15、E16、E17を第2グラフデータに追加する。
そして、生成装置100は、未処理ノードが有る場合(ステップS106:Yes)、ステップS103に戻って処理を繰り返す。また、生成部133は、未処理ノードが無い場合(ステップS106:No)、処理を終了する。
〔5.ショートカットエッジ削除〕
次に、図8を用いて、実施形態に係る生成システム1によるショートカットエッジの削除に関する生成処理の手順について説明する。図8は、実施形態に係る生成処理の一例を示すフローチャートである。
図8に示すように、生成装置100は、グラフデータを取得する(ステップS201)。例えば、生成装置100は、第2グラフデータを取得する。また、例えば、生成装置100は、第1グラフデータを取得する。
そして、生成装置100は、グラフデータ内の所定の条件を満たすショートカットエッジを削除する(ステップS202)。例えば、生成装置100は、第2グラフデータ内の所定の条件を満たすショートカットエッジを削除する。また、例えば、生成装置100は、第1グラフデータ内の所定の条件を満たすショートカットエッジを削除する。例えば、生成装置100は、全エッジを対象として、ショットカットエッジの条件を満たすかどうかの判定をすることにより、ショットカットエッジの削除に関する処理を行う。例えば、生成装置100は、短いエッジ順に全ノードに対して、ショットカットエッジの削除に関する処理を行ってもよい。例えば、生成装置100は、全ノードのうち、より短いエッジを有するノードから順にショットカットエッジの削除に関する処理を行ってもよい。例えば、生成装置100は、全ノードのうち、最も短いエッジを有するノードを対象としてショットカットエッジの削除に関する処理を行い、次に全ノードのうち、2番目に短いエッジを有するノードを対象としてショットカットエッジの削除に関する処理を行ってもよい。このようなショットカットエッジの削除に関する処理により、生成装置100は、検索の性能を維持しつつ、ショットカットエッジの条件を満たすエッジを削除し、エッジ数を適切に削減することができる。このように、生成装置100は、ショートカットエッジの条件を満たすエッジを含まないグラフデータを生成することができる。すなわち、上述した生成装置100によるショートカットエッジの削除に関する生成処理は、処理対象となったグラフデータから、ショートカットエッジの条件を満たすエッジを含まない新たなグラフデータを生成する処理であるとも言える。例えば、生成装置100は、第1グラフデータから、ショートカットエッジの条件を満たすエッジを含まない新たな第1グラフデータを生成してもよい。また、例えば、生成装置100は、第2グラフデータから、ショートカットエッジの条件を満たすエッジを含まない新たな第2グラフデータを生成してもよい。
〔6.ショートカットエッジ削除の例〕
ここで、図9及び図10を用いて、グラフデータからショートカットエッジを削除する場合を説明する。なお、図1と同様の点については適宜説明を省略する。例えば、図9及び図10に示すベクトル空間である空間情報VS1は、図1の空間情報VS1と同様である。また、例えば、図9に示す第2グラフデータGR12は、図1に示す第2グラフデータGR12と同様であり、図10に示す第1グラフデータGR11は、図1に示す第1グラフデータGR11と同様である。
また、図9及び図10において、ショートカットエッジを削除する条件は、一のノードから対象ノードへ他のノードを経由することにより到達可能なルート(以下、「第1ルート」ともいう)において、他のノードの数が「1」であることを条件(以下、「第1条件」ともいう)とするものとする。すなわち、第1条件は、第1ルートに含まれる他のノードの数が2以上でないことを示す条件である。
また、図9及び図10において、ショートカットエッジを削除する条件は、一のノードから対象ノードへ直接到達可能なルート(以下、「第2ルート」ともいう)の距離が、第1ルート中の他のノードから連結される対象ノードへの距離よりも長いことを条件(以下、「第2条件」ともいう)とするものとする。すなわち、第2条件は、第2ルート、すなわち一のノードから対象ノードへの出力エッジの距離(長さ)が、第1ルートに含まれる他のノードから対象ノードへの出力エッジの距離(長さ)よりも長いことを示す条件である。以下では、上記の第1条件及び第2条件を満たすことを、ショートカットエッジの削除の条件とするものとする。以下、第1条件及び第2条件を併せて「ショートカット条件」と記載する場合がある。
図9は、実施形態に係る第2グラフデータのエッジの削除の一例を示す図である。図10は、実施形態に係る第1グラフデータのエッジの削除の一例を示す図である。すなわち、図9では、第2グラフデータを対象として、ショートカットエッジの削除を行い、図10では、第1グラフデータを対象として、ショートカットエッジの削除を行う。このように、ショートカットエッジは、第2グラフデータ及び第1グラフデータのいずれにおいて削除を行ってもよい。なお、ショートカットエッジの削除後のグラフデータを「枝刈後グラフデータ」と記載し、ショートカットエッジの削除後のエッジを「枝刈後エッジ」と記載する場合がある。
まず、図9を用いて第2グラフデータを対象としたショートカットエッジの削除について説明する。まず、一のノードがノードN10であり対象ノードがノードN13である場合を説明する。図9において、ノードN10は、ノードN13への出力エッジであるエッジE100が連結される。また、ノードN10は、ノードN11への出力エッジであるエッジE101が連結される。また、ノードN11は、ノードN12への出力エッジであるエッジE102が連結される。また、ノードN12は、ノードN13への出力エッジであるエッジE103が連結される。
このように、第2グラフデータGR12は、ノードN10からノードN13へ直接到達可能な第2ルート(エッジE100)を含む。また、第2グラフデータGR12においては、ノードN10から、ノードN11、ノードN12と辿ることにより、ノードN13へ到達可能な第1ルート(エッジE101→エッジE102→エッジE103)を含む。
生成装置100は、ショートカット条件を判定する(ステップS21)。具体的には、生成装置100は、ノードN10についてショートカット条件を判定する。ここで、上述したように、ノードN10からの第1ルートは、2以上の他のノード(ノードN11、ノードN12)を含むため、第1条件を満たさない。そのため、生成装置100は、ノードN10についてショートカット条件を満たさないと判定し、ショートカットエッジの削除無と判定する。
次に、一のノードがノードN14であり対象ノードがノードN16である場合を説明する。図9において、ノードN14は、ノードN16への出力エッジであるエッジE104が連結される。また、ノードN14は、ノードN15への出力エッジであるエッジE105が連結される。また、ノードN15は、ノードN16への出力エッジであるエッジE106が連結される。また、図9中のエッジ一覧EL21に示すように、エッジE104〜E106の距離(長さ)は、距離D104〜D106であるものとする。
このように、第2グラフデータGR12は、ノードN14からノードN16へ直接到達可能な第2ルート(エッジE104)を含む。また、第2グラフデータGR12においては、ノードN14から、ノードN15を辿ることにより、ノードN16へ到達可能な第1ルート(エッジE105→エッジE106)を含む。
生成装置100は、ショートカット条件を判定する(ステップS22)。具体的には、生成装置100は、ノードN14についてショートカット条件を判定する。ここで、上述したように、ノードN14からの第1ルートは、1個の他のノード(ノードN15)のみを含むため、第1条件を満たす。また、図9に示すように、ノードN14からノードN16への出力エッジであるエッジE104の距離D104が、第1ルートに含まれる他のノードN15からノードN16への出力エッジであるエッジE106の距離D106も長いため、第2条件を満たす。そのため、生成装置100は、ノードN14についてショートカット条件を満たすと判定し、ショートカットエッジであるエッジE104を削除する(ステップS23)。例えば、生成装置100は、第2グラフデータ記憶部123に記憶された第2グラフデータからエッジE104を削除する。図9の例では、生成装置100は、エッジE104が削除された枝刈後エッジを含む第2グラフデータG12−5のような枝刈後グラフデータを生成する。これにより、生成装置100は、エッジ数の増大を抑制することができる。
次に、一のノードがノードN17であり対象ノードがノードN19である場合を説明する。図9において、ノードN17は、ノードN19への出力エッジであるエッジE107が連結される。また、ノードN17は、ノードN18への出力エッジであるエッジE108が連結される。また、ノードN18は、ノードN19への出力エッジであるエッジE109が連結される。また、図9中のエッジ一覧EL22に示すように、エッジE107〜E109の距離(長さ)は、距離D107〜D109であるものとする。
このように、第2グラフデータGR12は、ノードN17からノードN19へ直接到達可能な第2ルート(エッジE107)を含む。また、第2グラフデータGR12においては、ノードN17から、ノードN18を辿ることにより、ノードN19へ到達可能な第1ルート(エッジE108→エッジE109)を含む。
生成装置100は、ショートカット条件を判定する(ステップS24)。具体的には、生成装置100は、ノードN17についてショートカット条件を判定する。ここで、上述したように、ノードN17からの第1ルートは、1個の他のノード(ノードN18)のみを含むため、第1条件を満たす。また、図9に示すように、ノードN17からノードN19への出力エッジであるエッジE107の距離D107が、第1ルートに含まれる他のノードN18からノードN19への出力エッジであるエッジE109の距離D109も短いため、第2条件を満たさない。そのため、生成装置100は、ノードN17についてショートカット条件を満たさないと判定し、ショートカットエッジの削除無と判定する。
次に、図10を用いて第1グラフデータを対象としたショートカットエッジの削除について説明する。例えば、一のノードがノードN1であり対象ノードがノードN3である場合のショートカットエッジの削除について説明する。
なお、図10に示す第1グラフデータGR11−1、GR11−2は、グラフデータの生成過程を模式的に示す図であり、第1グラフデータGR11−1、GR11−2は、ショートカットエッジの削除の前後の状態の第1グラフデータGR11を示す。また、以下では、第1グラフデータGR11−1、GR11−2について、特に区別なく説明する場合には、第1グラフデータGR11と記載する。
図10において、ノードN1は、ノードN3への出力エッジであるエッジE12が連結される。また、ノードN1は、ノードN2への出力エッジであるエッジE11が連結される。また、ノードN2は、ノードN3への出力エッジであるエッジE21が連結される。また、図10中のエッジ一覧EL31に示すように、エッジE11〜E14、E21、E22の距離(長さ)は、距離D11〜D14、D21、D22であるものとする。
このように、第1グラフデータGR11−1は、ノードN1からノードN3へ直接到達可能な第2ルート(エッジE12)を含む。また、第1グラフデータGR11−1においては、ノードN1から、ノードN2を辿ることにより、ノードN3へ到達可能な第1ルート(エッジE11→エッジE21)を含む。
生成装置100は、ショートカット条件を判定する(ステップS31)。具体的には、生成装置100は、ノードN1についてショートカット条件を判定する。ここで、上述したように、ノードN1からの第1ルートは、1個の他のノード(ノードN2)のみを含むため、第1条件を満たす。また、図10に示すように、ノードN1からノードN3への出力エッジであるエッジE12の距離D12が、第1ルートに含まれる他のノードN2からノードN3への出力エッジであるエッジE21の距離D21も長いため、第2条件を満たす。そのため、生成装置100は、ノードN1についてショートカット条件を満たすと判定し、ショートカットエッジであるエッジE12を削除する(ステップS32)。例えば、生成装置100は、第1グラフデータ記憶部122に記憶された第1グラフデータからエッジE12を削除する。図10の例では、生成装置100は、エッジE12が削除された枝刈後エッジを含む第1グラフデータG11−2のような枝刈後グラフデータを生成する。これにより、生成装置100は、エッジ数の増大を抑制した第1グラフデータを生成し、その第1グラフデータを対象として第2グラフデータを生成することができる。
〔7.第1閾値、第2閾値の選択〕
図1の例では、第1閾値を「2」とし、第2閾値を「3」とする場合を示したが、第1閾値や第2閾値には種々の値が選択されてもよい。例えば、生成装置100は、第1閾値や第2閾値を、生成した第2グラフデータによる検索の性能に基づいて選択してもよい。この点について図11を用いて説明する。図11は、実施形態に係る閾値の選択に用いる情報を示す図である。
図11は、横軸を検索の適合率(precision)とし、縦軸を検索時間(query time)とした場合のグラフを示す。このように、グラフデータを用いた検索においては、適合率を高めると、検索時間が増大する関係となる。例えば、生成装置100は、所定の第1値p1と所定の第2値p2との間の検索時間の平均の大小に基づいて、第1閾値及び第2閾値を決定してもよい。なお、第1値p1と所定の第2値p2は、検索において要求される精度等に応じて適宜設定されてもよい。
例えば、生成装置100は、第1値p1と所定の第2値p2間の領域AR11のサイズ(面積)を第2値p2と第1値p1との差分で除算することにより算出してもよい。例えば、生成装置100は、台形公式等の種々の従来技術を適宜用いて、検索時間の平均を算出してもよい。例えば、生成装置100は、種々の値を第1閾値とし、種々の値を第2閾値とした場合の各組み合わせにおいて生成した第2グラフデータを用いて検索を行った場合の検索時間の平均を比較し、最も検索時間の平均が小さくなる第1閾値と第2閾値との組み合わせを用いた第2グラフデータを、検索に用いる第2グラフデータに決定してもよい。
〔8.検索例〕
ここで、上述したグラフデータを用いた検索の一例を示す。なお、生成したグラフデータを用いた検索は下記に限らず、種々の手順により行われてもよい。この点について、図12を一例として説明する。図12は、グラフデータを用いた検索処理の一例を示すフローチャートである。また、以下でいうオブジェクトは、ノードと読み替えてもよい。なお、以下では、生成装置100が検索処理を行うものとして説明するが、検索処理は他の装置により行われてもよい。
ここでは、近傍オブジェクト集合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+ε)を超える場合、生成装置100は、オブジェクト集合Rをオブジェクトyの近傍オブジェクト集合として出力し(ステップS305)、処理を終了する。
オブジェクトsと検索クエリオブジェクトyとの距離d(s,y)がr(1+ε)を超えない場合、生成装置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+ε)以下である場合、生成装置100は、オブジェクトuをオブジェクト集合Sに追加する(ステップS308)。
次に、生成装置100は、オブジェクトuとオブジェクトyとの距離d(u,y)がr以下であるか否かを判定する(ステップS309)。オブジェクトuとオブジェクトyとの距離d(u,y)がrを超える場合、生成装置100は、ステップS315の判定(処理)を行う。
オブジェクトuとオブジェクトyとの距離d(u,y)がr以下である場合、生成装置100は、オブジェクトuをオブジェクト集合Rに追加する(ステップS310)。そして、生成装置100は、オブジェクト集合Rに含まれるオブジェクト数がksを超えるか否かを判定する(ステップS311)。所定数ksは、任意に定められる自然数である。例えば、ks=2であってもよい。
オブジェクト集合Rに含まれるオブジェクト数がksを超える場合、生成装置100は、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長い(遠い)オブジェクトを、オブジェクト集合Rから除外する(ステップS312)。
次に、生成装置100は、オブジェクト集合Rに含まれるオブジェクト数がksと一致するか否かを判定する(ステップS313)。オブジェクト集合Rに含まれるオブジェクト数がksと一致する場合、生成装置100は、オブジェクト集合Rに含まれるオブジェクトの中でオブジェクトyとの距離が最も長い(遠い)オブジェクトと、オブジェクトyとの距離を、新たなrに設定する(ステップS314)。
そして、生成装置100は、オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えたか否かを判定する(ステップS315)。オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えていない場合、生成装置100は、ステップS306に戻って処理を繰り返す。
オブジェクトsの近傍オブジェクト集合N(G,s)の要素であるオブジェクトから全てのオブジェクトを選択してオブジェクト集合Cに格納し終えた場合生成装置100は、オブジェクト集合Sが空集合であるか否かを判定する(ステップS316)。オブジェクト集合Sが空集合でない場合、生成装置100は、ステップS302に戻って処理を繰り返す。また、オブジェクト集合Sが空集合である場合、生成装置100は、オブジェクト集合Rを出力し、処理を終了する(ステップS317)。例えば、生成装置100は、オブジェクト集合Rに含まれるオブジェクト(ノード)を検索クエリ(入力オブジェクトy)に対応する検索結果として、検索を行った端末装置等へ提供してもよい。
〔9.効果〕
上述してきたように、実施形態に係る生成装置100は、取得部131と、生成部133とを有する。取得部131は、データ検索の対象となる複数のノードを取得する。生成部133は、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第1閾値の数の他のノードを終点ノードとする出力エッジと、各ノードを終点ノードとし、各ノードとの距離が短い方から順に第2閾値の数の他のノードを始点ノードとする入力エッジとを、各ノードに連結することによりグラフデータ(実施形態においては「第2グラフデータGR12」。以下同じ)を生成する。
このように、実施形態に係る生成装置100は、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第1閾値の数の他のノードを終点ノードとする出力エッジと、各ノードを終点ノードとし、各ノードとの距離が短い方から順に第2閾値の数の他のノードを始点ノードとする入力エッジとを、各ノードに連結することにより第2グラフデータGR12を生成することができ、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、一のノードから対象ノードへ他のノードを経由することにより到達可能なルートであって、ルートに含まれる他のノードの数、または、対象ノードと一のノードとの距離と、他のノードと一のノードとの距離との比較が所定の条件を満たすルートがある場合、一のノードを始点ノードとし、対象ノードを終点ノードとする一のノードの出力エッジを削除することにより、グラフデータを生成する。
このように、実施形態に係る生成装置100は、ショートカットエッジの条件を満たすルートがある場合、一のノードを始点ノードとし、対象ノードを終点ノードとする一のノードの出力エッジを削除することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、取得部131は、複数のノードの各々を連結する複数の有向エッジを含む有向エッジ群(実施形態においては「第1グラフデータGR11の有向エッジ群」。以下同じ)を取得する。生成部133は、有向エッジ群に基づいて、出力エッジと入力エッジとを含むグラフデータを生成する。
このように、実施形態に係る生成装置100は、有向エッジ群に基づいて、出力エッジと入力エッジとを含むグラフデータを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、有向エッジ群から各有向エッジが連結するノード間の距離に基づいて、有向エッジを出力エッジとして選択することにより、グラフデータを生成する。
このように、実施形態に係る生成装置100は、有向エッジ群から各有向エッジが連結するノード間の距離に基づいて、有向エッジを出力エッジとして選択して、グラフデータを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、有向エッジ群のうち、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第1閾値の数の他のノードを終点ノードとする有向エッジを出力エッジとして選択することによりグラフデータを生成する。
このように、実施形態に係る生成装置100は、有向エッジ群のうち、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第1閾値の数の他のノードを終点ノードとする有向エッジを出力エッジとして選択してグラフデータを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、有向エッジ群から各有向エッジが連結するノード間の距離に基づいて選択した有向エッジの向きを反転させた入力エッジを生成することにより、グラフデータを生成する。
このように、実施形態に係る生成装置100は、有向エッジ群から各有向エッジが連結するノード間の距離に基づいて選択した有向エッジの向きを反転させた入力エッジを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、有向エッジ群のうち、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第2閾値の数の他のノードを終点ノードとする有向エッジを選択し、選択した有向エッジの向きを反転させた入力エッジを生成することにより、グラフデータを生成する。
このように、実施形態に係る生成装置100は、有向エッジ群のうち、各ノードを始点ノードとし、各ノードとの距離が短い方から順に第2閾値の数の他のノードを終点ノードとする有向エッジを選択し、選択した有向エッジの向きを反転させた入力エッジを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、一のノードから対象ノードへ他のノードを経由することにより到達可能な第1ルートであって、第1ルートに含まれる他のノードの数、または、対象ノードと一のノードとの距離と、他のノードと一のノードとの距離との比較が所定の条件を満たす第1ルートがある場合、一のノードを始点ノードとし、対象ノードを終点ノードとする第2ルートであって、一のノードから対象ノードへ直接到達可能な第2ルートを含まない枝刈後有向エッジ(実施形態においては「枝刈後エッジ」。以下同じ)に基づいて、出力エッジと入力エッジとを含むグラフデータを生成する。
このように、実施形態に係る生成装置100は、一のノードから対象ノードへ他のノードを経由することにより到達可能な第1ルートであって、第1ルートに含まれる他のノードの数、または、対象ノードと一のノードとの距離と、他のノードと一のノードとの距離との比較が所定の条件を満たす第1ルートがある場合、一のノードを始点ノードとし、対象ノードを終点ノードとする第2ルートであって、一のノードから対象ノードへ直接到達可能な第2ルートを含まない枝刈後有向エッジに基づいて、出力エッジと入力エッジとを含むグラフデータを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、有向エッジのうち、第2ルートに対応する有向エッジを削除することにより枝刈後有向エッジを生成する。
このように、実施形態に係る生成装置100は、有向エッジのうち、第2ルートに対応する有向エッジを削除することにより枝刈後有向エッジを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、第1閾値及び第2閾値を変動させた各組合せの検索結果に基づいて決定される第1閾値及び第2閾値を用いて、グラフデータを生成する。
このように、実施形態に係る生成装置100は、第1閾値及び第2閾値を変動させた各組合せの検索結果に基づいて決定される第1閾値及び第2閾値を用いて、グラフデータを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、各組合せにおける適合率を含む検索結果に基づいて決定される第1閾値及び第2閾値を用いて、グラフデータを生成する。
このように、実施形態に係る生成装置100は、各組合せにおける適合率を含む検索結果に基づいて決定される第1閾値及び第2閾値を用いて、グラフデータを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
また、実施形態に係る生成装置100において、生成部133は、各組合せにおける検索時間を含む検索結果に基づいて決定される第1閾値及び第2閾値を用いて、グラフデータを生成する。
このように、実施形態に係る生成装置100は、各組合せにおける検索時間を含む検索結果に基づいて決定される第1閾値及び第2閾値を用いて、グラフデータを生成することにより、所定の対象に関する効率的な検索を可能にするグラフデータを生成することができる。
〔10.ハードウェア構成〕
上述してきた実施形態に係る生成装置100は、例えば図13に示すような構成のコンピュータ1000によって実現される。図13は、生成装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。コンピュータ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)」は、「手段」や「回路」などに読み替えることができる。例えば、取得部は、取得手段や取得回路に読み替えることができる。