以下に、本願に係る情報処理装置、情報処理方法、及び情報処理プログラムを実施するための形態(以下、「実施形態」と呼ぶ)について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る情報処理装置、情報処理方法、及び情報処理プログラムが限定されるものではない。また、以下の各実施形態において同一の部位には同一の符号を付し、重複する説明は省略される。
(実施形態)
〔1.情報処理〕
図1及び図2を用いて、実施形態に係る情報処理の一例について説明する。図1及び図2は、実施形態に係る情報処理の一例を示す図である。まず、図1を用いて、後述する精製処理によりエッジを追加する対象となるグラフデータ(「第1グラフ」ともいう)の生成の一例を説明する。具体的には、図1では、情報処理装置100(図6参照)がオブジェクトの追加に応じて、追加されたオブジェクトに対応するノード(以下「追加ノード」ともいう)を順次グラフデータ(グラフ情報)に追加し、グラフデータを生成する処理(「逐次登録処理」ともいう)を行う場合を示す。そして、図2では、図1で示す逐次登録処理により生成された第1グラフ中の各ノードを順次対象ノードとして精製処理を行い第1グラフにエッジを追加したグラフデータ(「第2グラフ」ともいう)を生成する場合を示す。なお、以下に示す例では、逐次登録処理により生成されたグラフ(第1グラフ)を対象として精製処理を実行しグラフ(第2グラフ)を生成する場合を示すが、第1グラフは、逐次登録処理により生成されたグラフに限らず、どのようなグラフであってもよい。
なお、ここでいう第1グラフ及び第2グラフは、精製処理によるエッジ追加前後のグラフを明示的に説明するための用語に過ぎず、第1グラフ及び第2グラフは、相対的な概念であって、生成した第2グラフが次のノード追加時には第1グラフになる。例えば、一のノードを対象ノードとして精製処理を行った後の第2グラフは、その次に新たなノードを対象ノードとして精製処理を行う際に第1グラフとして用いられる。このように、ある時点での精製処理により生成された第2グラフがその後の時点での精製処理における第1グラフとなる。すなわち、ここでいう第1グラフ及び第2グラフとは、ある精製処理前後のグラフを区別して表現可能にするための名称である。
また、図1及び図2では、対象とする情報(オブジェクト)がベクトル化され、ベクトル化されたオブジェクトを対象としてグラフ(グラフインデックス)を生成する場合を示す。すなわち、図1及び図2では、情報処理装置100がベクトルをオブジェクトに対応するオブジェクト値として処理を行う場合を示す。
なお、情報処理装置100が用いる情報は、ベクトルに限らず、各対象の類似性を表現可能な情報であれば、どのような形式の情報であってもよい。例えば、情報処理装置100は、各対象に対応する所定のデータや値を用いてもよい。例えば、情報処理装置100は、各対象から生成された所定の数値(例えば2進数の値や16進数の値)を用いてもよい。例えば、情報処理装置100は、ベクトルに限らず、データ間の距離(類似度)が定義されていれば任意の形態のデータを用いてもよい。また、以下では、画像情報をオブジェクトとした場合を一例として説明するが、オブジェクトは、動画情報や音声情報等の種々の対象であってもよい。
また、ここでいうオブジェクトの追加は、オブジェクトの登録と読み換えてもよい。情報処理装置100が行うオブジェクトの追加とは、オブジェクトをオブジェクト情報記憶部121(図7参照)に登録(格納)することであってもよい。また、ここでいうノードの追加は、ノードの登録と読み換えてもよい。情報処理装置100が行うノードの追加とは、ノードを第1グラフ情報記憶部123(図9参照)に登録(格納)することであってもよい。
図1及び図2では、情報処理装置100が、データ検索の対象(オブジェクト)がベクトル化された各ベクトルに対応する情報(ノード)を対象としてグラフ情報を生成する場合を示す。すなわち、図1及び図2では、情報処理装置100がベクトルをノードに対応するノード値として処理を行う場合を示す。各ノードは、各オブジェクトに対応する。例えば、画像から抽出された複数の局所特徴量のそれぞれがオブジェクトであってもよい。また、例えば、オブジェクト間の距離が定義された種々のデータがオブジェクトであってもよい。
情報処理装置100は、例えば情報処理装置100が処理可能な範囲で(例えば数百万~数十億等)の膨大な画像情報に対応するノードを対象にグラフの生成処理を行うが、図面においてはその一部のみを図示する。図1及び図2では、説明を簡単にするために、最大9個のノードを図示して処理の概要を説明する。図1では、情報処理装置100は、何もない状態、すなわちノードが0個、エッジも0本である状態から、オブジェクトの追加に応じてノードN1等やエッジE1等を順次追加し、グラフGR11を生成する逐次登録処理を実行する。このように「ノードN*(*は任意の数値)」と記載した場合、そのノードはノードID「N*」により識別されるノードであることを示す。例えば、「ノードN1」と記載した場合、そのノードはノードID「N1」により識別されるノードである。
また、上記のように「エッジE*(*は任意の数値)」と記載した場合、そのエッジはエッジID「E*」により識別されるエッジであることを示す。例えば、「エッジE1」と記載した場合、そのエッジはエッジID「E1」により識別されるエッジである。図1及び図2では、情報処理装置100は、ノードを無向エッジ(単に「エッジ」ともいう)により連結させることにより、グラフ情報を生成する。なお、ここでいう無向エッジとは、連結されたノード間を双方向にデータを辿ることができるエッジを意味する。例えば、ノードN1とノードN2とを連結するエッジE1により、ノードN1とノードN2との間を双方向に辿ることが可能となる。すなわち、エッジE1により、ノードN1からノードN2へ辿ることができ、かつエッジE1により、ノードN2からノードN1へ辿ることができる。
また、図1及び図2に示す空間情報VS1-1~VS1-7は、グラフデータの生成過程を模式的に示す図であり、空間情報VS1-1~VS1-7に示す空間は、同一の空間であってもよい。また、以下では、空間情報VS1-1~VS1-7について、特に区別なく説明する場合には、空間情報VS1と記載する。
また、図1及び図2中の空間情報VS1は、ユークリッド空間であってもよい。また、図1及び図2に示す空間情報VS1は、各ベクトル間の距離等の説明のための概念的な図であり、空間情報VS1は、多次元空間である。例えば、図1及び図2に示す空間情報VS1は、平面上に図示するため2次元の態様にて図示されるが、例えば100次元や1000次元等の多次元空間であるものとする。
また、図1及び図2に示すグラフGR11-1~GR11-7は、グラフデータの生成過程を模式的に示す図であり、グラフGR11-1~GR11-7は、情報処理により生成される同一のグラフデータである。また、以下では、グラフGR11-1~GR11-7について、特に区別なく説明する場合には、グラフGR11と記載する。
また、図1及び図2に示す例においては、グラフGR11-1~GR11-7においては、適宜「ノードN*(*は任意の数値)」の図示を省略し、取得した各ノードを「○」内に「ノードN*」の「*」の値を付すことにより表現する。すなわち、「ノードN*」の部分の「*」が一致するノードに対応する。例えば、空間情報VS1中の左下の「○」であって、内部に「5」が付された「○」は、ノードID「N5」により識別されるノード(ノードN5)に対応する。例えば、図1及び図2に示す例において、各ノードに対応するベクトルデータは、N次元の実数値ベクトルであってもよい。
本実施形態においては、空間情報VS1における各ノードの距離を対応する各オブジェクト間の類似度とする。例えば、各ノードに対応する対象(画像情報)の類似性が、空間情報VS1内におけるノード間の距離として写像されているものとする。例えば、各ノードに対応する概念間の類似度が各ノード間の距離に写像されているものとする。ここで、図1及び図2に示す例においては、空間情報VS1における各ノード間の距離が短いオブジェクト同士の類似度が高く、空間情報VS1における各ノード間の距離が長いオブジェクト同士の類似度が低い。例えば、図1及び図2中の空間情報VS1において、ノードID「N1」により識別されるノード(ノードN1)と、ノードID「N72」により識別されるノード(ノードN72)とは近接している、すなわち距離が短い。そのため、ノードID「N1」により識別されるノードに対応するオブジェクトと、ノードID「N72」により識別されるノードに対応するオブジェクトとは類似度が高いことを示す。
また、例えば、図1及び図2中の空間情報VS1において、ノードID「N3」により識別されるノードと、ノードID「N5」により識別されるノードとは遠隔にある、すなわち距離が長い。そのため、ノードID「N3」により識別されるノードに対応するオブジェクトと、ノードID「N5」により識別されるノードに対応するオブジェクトとは類似度が低いことを示す。なお、類似度を示す指標としての距離は、ベクトル(N次元ベクトル)間の距離として適用可能であれば、どのような距離であってもよく、例えば、ユークリッド距離やマハラノビス距離やコサイン距離等の種々の距離が用いられてもよい。
また、図1では、情報処理装置100は、逐次登録処理により、新規追加のノードをグラフGR11に追加し、ノードをエッジで連結することにより、グラフGR11を生成する。例えば、グラフGR11の生成時やグラフGR11を用いた検索時においては、グラフ構造型インデックスと同様の処理を行うが、開始位置(起点)は所定の起点用情報(以下「起点用インデックス」ともいう)を用いて決定したノード(以下「起点ノード」ともいう)からスタートしてもよい。また、例えば、情報処理装置100が生成したグラフGR11を用いて検索を行う場合、予め決定された起点ノードを起点として検索を行ってもよい。例えば、生成時や検索時においては、起点ノードがノードN1である場合、ノードN1からエッジを辿ることにより、ノードN2~N8等を検索してもよい。なお、起点用インデックスや起点ノードを用いた処理についての例は、後述する。
〔1-1.逐次登録処理による生成〕
ここから、図1を用いて逐次登録処理によるグラフの生成の一例を説明する。なお、図1に示す各ステップは、グラフの生成を説明するための便宜的なステップであり、実際の処理はより詳細な処理ステップにより行われてもよい。なお、情報処理装置100が行う情報処理は、図1中のグラフGR11-6に示すようなグラフGR11が生成されれば、どのような処理フローであってもよい。
また、図1では、追加ノードの追加時に、追加ノードに連結されるエッジ数が「2」である場合を示す。すなわち、図1では、情報処理装置100は、追加された追加ノードについて、2つのノードとの間を連結するエッジを追加する連結処理により、追加ノードを含むグラフを生成する。例えば、情報処理装置100は、追加ノードに連結するノードの数を示す検索数が「2」であり、その情報を基に追加ノードについて、検索処理を行って抽出した2つのノードと追加ノードとの間を連結するための2つのエッジを追加する。なお、検索数は「2」に限らず、「3」や「10」等種々の値であってもよい。
情報処理装置100は、逐次登録処理により生成中のグラフを用いて、追加ノードの近傍に位置するノード(「近傍ノード」ともいう)をグラフから抽出する処理(「検索処理」ともいう)を実行する。例えば、情報処理装置100は、k近傍検索を検索処理として行う。情報処理装置100は、検索数k個のノードを近傍ノードとして抽出する検索処理を行う。情報処理装置100は、検索処理により抽出した近傍ノードと、追加ノードとの間をエッジで連結する処理(「連結処理」ともいう)により、グラフを生成(更新)する。
まず、情報処理装置100は、ノードN1を新規追加する(ステップS11)。例えば、情報処理装置100は、ノードN1をグラフに追加する。図1では、情報処理装置100は、ノードN1が最初のノードであるため、ノードN1を含むグラフGR11を新規に生成する。また、情報処理装置100は、ステップS11後においてグラフGR11には、ノードがノードN1の1個のみであるため、グラフGR11にエッジを追加しない。
例えば、情報処理装置100は、検索対象として新たに追加されたオブジェクトを取得し、追加されたオブジェクトに対応するノードを新規追加する。例えば、情報処理装置100は、新たに追加されたオブジェクトをオブジェクト情報記憶部121(図7参照)に記憶し、新たに追加されたオブジェクトに対応付けたノードを第1グラフ情報記憶部123に記憶する。情報処理装置100は、オブジェクトID「OB1」により識別されるオブジェクト(図7参照)に対応するノードN1をグラフGR11に追加する。情報処理装置100は、ノードN1がグラフGR11に追加された順序(「登録順」ともいう)が「1」であることを示す情報をノードN1に対応付けて第1グラフ情報記憶部123に記憶する。このように、情報処理装置100は、各ノード(オブジェクト)がグラフに追加された順序を示す情報(「順序情報」ともいう)を第1グラフ情報記憶部123に記憶する。
そして、情報処理装置100は、ノードN2を新規追加する(ステップS12)。図1では、例えば、情報処理装置100は、ノードN2をグラフGR11に追加する。情報処理装置100は、オブジェクトID「OB2」により識別されるオブジェクト(図7参照)に対応するノードN2をグラフGR11に追加する。情報処理装置100は、ノードN2がグラフGR11に追加された順番が「2」であることを示す情報をノードN2に対応付けて第1グラフ情報記憶部123に記憶する。
そして、情報処理装置100は、グラフを生成する(ステップS13)。情報処理装置100は、検索数情報THL1に基づいて、追加したノードN2に2本のエッジが連結されるようにグラフを生成する。情報処理装置100は、空間情報VS1-1に示すように追加したノードN2に連結するエッジを追加することにより、グラフGR11-1を生成する。図1では、情報処理装置100は、グラフGR11中のノードN2以外にはノードN1のみしかないため、ノードN1とノードN2との間を連結するエッジE1を追加することにより、グラフGR11-1を生成する。そして、情報処理装置100は、グラフGR11-1には、ノードN1以外に、ノードN2との間にエッジを接続するノードが無いため、ノードN2にエッジを連結する処理(連結処理)を終了する。なお、情報処理装置100は、グラフGR11を探索し、ノードN2の近傍ノードとしてノードN1を選択し、ノードN1との間にエッジE1を追加することにより、グラフGR11-1を生成してもよい。
そして、情報処理装置100は、ノードN3を新規追加する(ステップS14-1)。図1では、例えば、情報処理装置100は、追加されたオブジェクトに対応するノードN3をグラフGR11に追加する。情報処理装置100は、ノードN3がグラフGR11に追加された順番が「3」であることを示す情報をノードN3に対応付けて第1グラフ情報記憶部123に記憶する。
そして、情報処理装置100は、グラフを探索する(ステップS14-2)。情報処理装置100は、生成中のグラフGR11を用いて検索数k個の近傍ノードを抽出する検索処理を行う。例えば、情報処理装置100は、図14に示すような処理手順により、追加ノードの近傍に位置するノード(近傍ノード)の探索(検索)を行う。例えば、情報処理装置100は、図14に示すような処理手順によりグラフを探索することにより、検索数「2」に対応する2つの近傍ノードを抽出する。例えば、情報処理装置100は、「100」個等の種々の値を検索数に決定してもよい。例えば、情報処理装置100は、種々の情報を適宜用いて、検索数を決定してもよい。例えば、情報処理装置100は、生成後のグラフの検索の性能に基づいて、検索数(近傍ノード数)を決定してもよい。
情報処理装置100は、追加ノードであるノードN3をクエリとして、図14に示すような処理手順によりグラフGR11-1を探索し、ノードN3の近傍ノードとして、検索数「2」に対応する2個のノードN1、N2を抽出する。
そして、情報処理装置100は、近傍ノードと追加ノードとの間をエッジで連結する連結処理を行う(ステップS14-3)。図1では、情報処理装置100は、ノードN3と近傍ノードであるノードN1、N2との間を連結するエッジをグラフGR11-1に追加することによりグラフGR11-2を生成する。具体的には、情報処理装置100は、空間情報VS1-2に示すように、追加ノードであるノードN3とノードN1との間をエッジE2により連結し、ノードN3とノードN2との間をエッジE3により連結することにより、グラフGR11-2を生成する。
そして、情報処理装置100は、ノードN4を新規追加する(ステップS15-1)。図1では、例えば、情報処理装置100は、追加されたオブジェクトに対応するノードN4をグラフGR11に追加する。情報処理装置100は、ノードN4がグラフGR11に追加された順番が「4」であることを示す情報をノードN4に対応付けて第1グラフ情報記憶部123に記憶する。
そして、情報処理装置100は、グラフを探索する(ステップS15-2)。情報処理装置100は、生成中のグラフGR11を用いて検索数k個の近傍ノードを抽出する検索処理を行う。例えば、情報処理装置100は、追加ノードであるノードN4をクエリとして、図14に示すような処理手順によりグラフGR11-2を探索し、ノードN4の近傍ノードとして、検索数「2」に対応する2個のノードN1、N3を抽出する。
そして、情報処理装置100は、近傍ノードと追加ノードとの間をエッジで連結する連結処理を行う(ステップS15-3)。図1では、情報処理装置100は、ノードN4と近傍ノードであるノードN1、N3との間を連結するエッジをグラフGR11-2に追加することによりグラフGR11-3を生成する。具体的には、情報処理装置100は、空間情報VS1-3に示すように、追加ノードであるノードN4とノードN1との間をエッジE4により連結し、ノードN4とノードN3との間をエッジE5により連結することにより、グラフGR11-3を生成する。
そして、情報処理装置100は、ノードN5を新規追加する(ステップS16-1)。図1では、例えば、情報処理装置100は、追加されたオブジェクトに対応するノードN5をグラフGR11に追加する。情報処理装置100は、ノードN5がグラフGR11に追加された順番が「5」であることを示す情報をノードN5に対応付けて第1グラフ情報記憶部123に記憶する。
そして、情報処理装置100は、グラフを探索する(ステップS16-2)。情報処理装置100は、生成中のグラフGR11を用いて検索数k個の近傍ノードを抽出する検索処理を行う。例えば、情報処理装置100は、追加ノードであるノードN5をクエリとして、図14に示すような処理手順によりグラフGR11-3を探索し、ノードN5の近傍ノードとして、検索数「2」に対応する2個のノードN1、N2を抽出する。
そして、情報処理装置100は、近傍ノードと追加ノードとの間をエッジで連結する連結処理を行う(ステップS16-3)。図1では、情報処理装置100は、ノードN5と近傍ノードであるノードN1、N2との間を連結するエッジをグラフGR11-3に追加することによりグラフGR11-4を生成する。具体的には、情報処理装置100は、空間情報VS1-4に示すように、追加ノードであるノードN5とノードN1との間をエッジE6により連結し、ノードN5とノードN2との間をエッジE7により連結することにより、グラフGR11-4を生成する。
そして、情報処理装置100は、ノードN6を新規追加する(ステップS17-1)。図1では、例えば、情報処理装置100は、追加されたオブジェクトに対応するノードN6をグラフGR11に追加する。情報処理装置100は、ノードN6がグラフGR11に追加された順番が「6」であることを示す情報をノードN6に対応付けて第1グラフ情報記憶部123に記憶する。
そして、情報処理装置100は、グラフを探索する(ステップS17-2)。情報処理装置100は、生成中のグラフGR11を用いて検索数k個の近傍ノードを抽出する検索処理を行う。例えば、情報処理装置100は、追加ノードであるノードN6をクエリとして、図14に示すような処理手順によりグラフGR11-4を探索し、ノードN6の近傍ノードとして、検索数「2」に対応する2個のノードN1、N5を抽出する。
そして、情報処理装置100は、近傍ノードと追加ノードとの間をエッジで連結する連結処理を行う(ステップS17-3)。図1では、情報処理装置100は、ノードN6と近傍ノードであるノードN1、N5との間を連結するエッジをグラフGR11-4に追加することによりグラフGR11-5を生成する。具体的には、情報処理装置100は、空間情報VS1-5に示すように、追加ノードであるノードN6とノードN1との間をエッジE8により連結し、ノードN6とノードN5との間をエッジE9により連結することにより、グラフGR11-5を生成する。
そして、情報処理装置100は、逐次登録処理の実行を継続する(ステップS18)。図1では、情報処理装置100は、他のノードN7以降のノードについての順次追加して、エッジを連結することにより、空間情報VS1-6に示すようなグラフGR11-6を生成する。情報処理装置100は、ノードN7以降の各ノードがグラフGR11に追加された順番を各ノードに対応付けて第1グラフ情報記憶部123に記憶する。
このように、情報処理装置100は、追加されたノードを対象に順次処理を行う逐次登録処理によりグラフGR11-6のような第1グラフを生成する。また、情報処理装置100は、各ノードが追加された順番(順序)を各ノードに対応付けて第1グラフ情報記憶部123に記憶することにより、グラフGR11についての順序情報を生成する。このように、情報処理装置100は、逐次登録処理によりグラフGR11を生成し、その生成におけるノードの順序を示す情報(順序情報)を生成することにより、グラフGR11について適切な順序で精製処理を実行することができる。
なお、図1では、逐次登録処理によるグラフ生成について説明するために、情報処理装置100が逐次登録処理を行い、グラフGR11を生成する場合を一例として説明したが、逐次登録処理によるグラフ生成は、情報処理装置100以外の外部装置が行ってもよい。この場合、情報処理装置100は、外部装置から逐次登録処理により生成されたグラフ、及びそのグラフの順序情報を受信し、受信したグラフを対象として図2に示す精製処理を実行してもよい。
〔1-2.精製処理による生成〕
ここから、図2を用いて精製処理によるグラフの生成(更新)の一例を説明する。まず、図2に示す精製処理の流れを説明する前に、精製処理を行う背景等について説明する。検索のインデックスに用いるグラフでは、通常、各ノードの近傍のノードにエッジにより接続される。接続されるべき近傍のノードに漏れがある場合、検索精度(性能)が低下する。
また、近傍ノードに接続されたグラフを生成するときに、短時間で生成することを重視する場合、近傍ノードへのエッジの接続漏れが発生し得る。また、上記のように逐次ノードを追加してグラフを生成する逐次登録処理を行う場合には、必然的に近傍ノードへのエッジが欠如し得る。
上述のように、逐次登録処理の場合、必然的に、登録初期のノードのエッジが多くなるが、その一方で、そのノードを登録した時には最終的にそのノードの近傍となるべきノードのほとんどは、まだ登録されていないので、接続されない。近傍ノードとなるべきノードが登録される時に、接続される可能性はあるが、例えば極めて密度変化の大きいデータセットの場合には、接続されない場合が頻出し得る。簡単な説明すると、一のノードの追加後に、その一のノードの近傍に位置する他のノードが追加される可能性があるが、他のノードには一のノードよりも近いノードが検索数(接続数)以上ある場合、一のノードと他のノードとの間にはエッジが接続されないケースが生じ得る。
そこで、情報処理システム1では、一旦グラフを生成した後に、その近傍ノードの漏れを減らすために以下の精製処理を行う。この精製処理は、グラフの精製(refine)するために実行される。以下、図2を参照して精製処理によるグラフの生成の一例を説明する。なお、図1と同様の点については、同様の符号を付すなどにより適宜説明を省略する。
情報処理装置100は、逐次登録処理により生成されたグラフGR11を第1グラフとして第1グラフ情報記憶部123から取得する。情報処理装置100は、グラフGR11の順序情報を参照して、グラフGR11への登録順に沿って一のノードを対象ノードとして選択し、選択した対象ノードについて順次精製処理を行う。図2では、グラフGR11への登録順が最初(すなわち「1」)であるノードN1を対象ノードとした精製処理によるグラフの変化を示すが、情報処理装置100は、グラフGR11の順序情報を用いて、ノードN1を対象ノードとする精製処理を行う後、ノードN2、N3、N4…と登録順に精製処理を行う。
まず、情報処理装置100は、グラフGR11の順序情報を参照して、ノードN1を対象ノードに選択する(ステップS21-1)。情報処理装置100は、グラフGR11の順序情報を参照して、グラフGR11への登録順が「1」であるノードN1を対象ノードに選択する。
そして、情報処理装置100は、グラフを探索する(ステップS21-2)。情報処理装置100は、グラフGR11を用いて検索数k個の近傍ノードを抽出する検索処理を行う。図2では、情報処理装置100は、対象ノードであるノードN1をクエリとして、図14に示すような処理手順によりグラフGR11-6を探索し、ノードN1の近傍ノードとして、検索数「2」に対応する2個のノードN72、N4を抽出する。なお、情報処理装置100は、ノードN1をシード(検索の起点)として、検索処理を行ってもよい。また、図2では、精製処理での検索処理での検索数kを、図1でのグラフ生成(第1グラフ生成)時の検索処理での検索数と同じ「2」とする場合を説明するが、検索数は第1グラフ生成時の検索数と異なってもよいが、この点については後述する。
情報処理装置100は、検索処理の結果を用いてグラフGR11にエッジを追加する(ステップS21-3)。情報処理装置100は、検索処理により抽出した対象ノードの近傍ノード(「第1ノード」ともいう)と、グラフGR11において対象ノードからのエッジが連結(接続)されたノード(「第2ノード」ともいう)とに基づいて、エッジをグラフに追加する。例えば、情報処理装置100は、対象ノードについて抽出された近傍ノード(抽出ノード)である第1ノードのうち、対象ノードからのエッジが接続されたノード(接続ノード)である第2ノードに該当しないノードと、対象ノードとの間を連結するエッジをグラフに追加する。
図2では、情報処理装置100は、検索処理により抽出したノードN1の第1ノード(近傍ノード)と、グラフGR11においてノードN1からのエッジが連結(接続)された第2ノード(接続ノード)とに基づいて、グラフGR11にエッジをグラフに追加する。具体的には、情報処理装置100は、ノードN1の第1ノードであるノードN72、N4と、ノードN1の第2ノードであるノードN6、N4、N3、N5、N2とを比較し、ノードN1の第1ノードのうち、ノードN1の第2ノードに該当しないノードと、ノードN1との間を連結するエッジをグラフに追加する。
例えば、情報処理装置100は、ノードN1との間の距離が短い方から順にノードN1の第1ノードを並べた第1ノード一覧RS1と、ノードN1との間の距離(エッジの長さ)が短い方から順にノードN1の第2ノードを並べた第2ノード一覧CN1を用いる。第1ノード一覧RS1は、ノードN1の第1ノードのうち、ノードN72が最もノードN1からの距離が短く、ノードN4がノードN72の次にノードN1からの距離が短いことを示す。また、第2ノード一覧CN1は、ノードN6、N4、N3、N5、N2の順でノードN1からの距離が短いことを示す。例えば、第2ノード一覧CN1は、ノードN1の第2ノードのうち、ノードN6が最もノードN1からの距離が短く、ノードN4がノードN6の次にノードN1からの距離が短いことを示す。
例えば、情報処理装置100は、第1ノード一覧RS1及び第2ノード一覧CN1を生成し、生成した第1ノード一覧RS1及び第2ノード一覧CN1を用いて処理を行ってもよい。なお、情報処理装置100は、第1ノード一覧RS1及び第2ノード一覧CN1を生成せずに、記憶部120中の第1ノード一覧RS1及び第2ノード一覧CN1に対応する情報を参照し、処理を行ってもよい。
情報処理装置100は、第1ノード一覧RS1及び第2ノード一覧CN1の情報を参照し、ノードN1の第1ノードと、ノードN1の第2ノードとを比較し、比較結果を基に、グラフGR11にエッジを追加する。図2では、情報処理装置100は、ノードN1の第1ノードのうちノードN72がノードN1の第2ノードに含まれないため、ノードN72をノードN1との間をエッジで接続する接続候補ノードに決定する。そして、情報処理装置100は、ノードN1とノードN72との間を連結するエッジをグラフGR11に追加すると決定する。そして、情報処理装置100は、ノードN1とノードN72との間を連結(接続)するエッジをグラフGR11-6に追加することによりグラフGR11-7を生成する。具体的には、情報処理装置100は、空間情報VS1-7に示すように、対象ノードであるノードN1とノードN72との間をエッジE100により連結することにより、グラフGR11-7を生成する。情報処理装置100は、グラフGR11-6にエッジE100が追加されたグラフGR11-7を示す情報を第2グラフ情報記憶部125(図11参照)に記憶する。
情報処理装置100は、他のノードN2、N3等を対象ノードとして精製処理を行う(ステップS22)。情報処理装置100は、ノードN1を対象ノードとする精製処理を行った後、グラフGR11の順序情報を用いて、ノードN1の次の登録順であるノードN2、その次の登録順であるノードN3等、登録順に従って各ノードを対象ノードとして、上述した精製処理をする。これにより、情報処理装置100は、各ノードを対象ノードとして、接続候補ノードを決定し、対象ノードと接続候補ノードとをエッジで連結することによりグラフG11を生成(更新)する。
上述したように、情報処理装置100は、精製処理を行うことにより、グラフにおいて近傍ノードへの接続が漏れていたエッジを追加することができる。例えば、図2に示す例のように、逐次登録処理で生成されたグラフGR11の場合、初期段階で追加(登録)されたノードN1については、近傍ノードであるノードN72とのエッジが接続されないケースが生じている。そこで、情報処理装置100は、ノードN1を対象ノードとして精製処理を行うことにより、逐次登録処理では追加されなかったノードN1の近傍ノードであるN72とノードN1との間を接続するエッジE100を追加することができる。このように、情報処理装置100は、精製処理を行うことにより、グラフにエッジを追加することによりグラフを適切に生成することができる。
〔1-2-1.精製処理に要する時間の短縮〕
情報処理システム1では、上述のような精製処理を実行することにより、グラフが精製されグラフの検索精度(性能)を向上させることができる。そのため、精製処理は、グラフ中のすべてのノードを対象ノードとして精製処理を行い、近傍ノードを検索して漏れていたノードをエッジで接続することも考えられるが、すべてのノードを対象ノードとして精製処理を行い、検索処理を実行する場合は処理時間を要するという課題がある。例えば、グラフGR11中のすべてのノードの各々を対象ノードとして精製処理を行った場合、グラフGR11の検索精度(性能)を向上させることができるが、処理時間の増大を抑制することが難しい。
そこで、上記のような逐次登録処理では登録初期のノードほど近傍ノードへの接続漏れが多い傾向があることから、情報処理システム1では、検索パラメータの調整または処理の中断等を実行することにより時間短縮を行ってもよい。以下、この点についての例を説明する。
例えば、情報処理装置100は、精製処理に要する時間の短縮するために、以下のような処理を実行する。以下の処理では、区間数及び区間精度合計を用いる。例えば、区間数は、一のノードが対象ノードとして精製処理が実行される度に「1」加算される変数である。区間数は、精製処理の繰り返しの回数を示す。また、以下の処理では、区間数の閾値である区間閾値を用いる。区間閾値は、1000や10000等の任意の値が設定される。例えば、区間閾値は、終了条件を満たすかを判定するまでに精製処理を繰り返す回数を示し、区間閾値が1000に設定された場合、情報処理装置100は、1000個のノードを対象ノードとして精製処理を行うたびに、終了条件を満たすかを判定する。また、例えば、区間精度合計は、区間閾値に対応する数のノードを対象ノードとする処理の間の各対象ノードの精度の合計を示す。
例えば、情報処理装置100は、区間数および区間精度合計を0に設定する。また、情報処理装置100は、検索数kを設定値k0に設定する。例えば、設定値k0は、通常グラフ生成時に用いた検索数(通常検索数ともいう)であってもよいが、通常検索数に定数をかけた値であってもよい。
情報処理装置100は、終了条件を満たして終了しない場合、グラフ中のすべてのノードを、登録順に順次対象ノード(以下「ノードN」とする)として、以下の処理を行う。
まず、情報処理装置100は、ノードNのオブジェクトを用いてk近傍検索を行う。例えば、kは検索結果である近傍ノード数である。情報処理装置100は、検索のシードとなるノードとしてノードNを用いてもよい。情報処理装置100は、検索されたノード(第1ノード)のうち、ノードNの接続ノード(第2ノード)に重複しないノードを無向エッジでノードNに接続する。なお、この処理については、図2で説明した処理と同様であるため、詳細な説明は省略する。
そして、情報処理装置100は、検索されたノード(第1ノード)に対して既にノードNに接続されているノード(第2ノード)の割合(近傍ノード精度)を算出する。そして、情報処理装置100は、区間精度合計に近傍ノード精度を加算し、区間数に1を加算する。情報処理装置100は、登録順に順次対象ノード(ノードN)を変更して、上述した処理を繰り返す。
情報処理装置100は、区間数が予め決められた数(区間閾値)を超えたら、区間平均精度を算出する。情報処理装置100は、区間精度合計を区画数で除することにより、区間平均精度を算出する。情報処理装置100は、式「区間精度合計/区間数」により区間平均精度を算出する。
そして、情報処理装置100は、検索数kを式「k=k0×(1.0-区間平均精度)」により算出される値に更新する。また、情報処理装置100は、区間数および区間精度合計を0に更新(初期化)する。なお、情報処理装置100は、検索数kを正の整数に調整する。例えば、情報処理装置100は、算出した値が小数点を含む場合は、切り下げてもよいし、四捨五入してもよい。例えば、情報処理装置100は、上記式により算出した値が小数点以下の値を含む場合、小数点以下の値の切り下げ(切り捨て)を行い、切り下げ後の値(整数)に検索数kを更新する。
情報処理装置100は、終了判定を行う。例えば、情報処理装置100は、検索数kが「0」になった場合、終了条件を満たすとして処理を終了する。例えば、情報処理装置100は、上述した区画平均精度を用いて算出した検索数kが「0」になった場合、終了条件を満たすとして処理を終了する。なお、情報処理装置100は、早期終了のために0より大きな閾値(例えば、1.1等)を用いてもよい。この場合、情報処理装置100は、検索数kが閾値以下になった場合、終了条件を満たすとして処理を終了してもよい。
なお、情報処理装置100は、検索数kに限らず、終了判定に様々な情報を用いてもよい。例えば、情報処理装置100は、区間平均精度を用いて、終了判定を行ってもよい。例えば、情報処理装置100は、区間平均精度が所定の閾値以上である場合、終了条件を満たすとして処理を終了してもよい。
また、情報処理装置100は、検索数kを更新しなくてもよい。この場合、情報処理装置100は、「k0×(1.0-区間平均精度)」により算出される値(「終了判定用値」ともいう)を、検索数kの更新には用いずに、終了判定のみに用いてもよい。情報処理装置100は、終了判定用値が0となった場合、終了条件を満たすとして処理を終了してもよい。この場合、情報処理装置100は、常に設定値k0で検索することになるのでエッジの精度を向上させることができる。
上述のように、情報処理装置100は、対象ノードについて精製処理を行うごとに、その対象ノードについて精度を算出する。例えば、情報処理装置100は、対象ノードの第1ノード(近傍ノード)と、対象ノードの第2ノード(接続ノード)とに基づいて、精度を算出する。例えば、情報処理装置100は、第1ノードに対する第2ノードの割合を対象ノードの精度として算出してもよい。例えば、情報処理装置100は、対象ノードの第1ノードのうち対象ノードの第2ノードに該当するノードの割合により対象ノードの精度を算出してもよい。なお、情報処理装置100は、精度の最大値を「1」として対象ノードの精度を算出してもよい。例えば、情報処理装置100は、第1ノードの全てが第2ノードに含まれる場合、精度を「1」として算出してもよい。なお、精度は上記に限らず種々の情報を適宜用いて算出してもよい。
情報処理装置100は、算出した精度に応じた終了条件を満たすまで、対象ノードを対象とする精製処理を繰り返す。例えば、情報処理装置100は、所定数(区間数)のノードを対象ノードとして精製処理を行うごとに終了条件を満たすかを判定してもよい。例えば、情報処理装置100は、区間数のノードを対象ノードとして精製処理を行うごとに、その区間での精度の平均である平均精度(「区間平均精度」ともいう)を算出し、算出した区間平均精度を用いて終了条件を満たすかを判定してもよい。
〔1-2-2.検索数の算出の他の例〕
なお、上述した検索数の設定例は一例に過ぎず、情報処理装置100は、様々な情報を適宜用いて検索数を算出してもよい。この点について図3及び図4を用いて説明する。図3は、処理結果の一例を示す図である。図4は、処理結果に応じた検索数の一例を示す図である。なお、上述した点と同様の点については適宜説明を省略する。
図3及び図4に示す棒グラフBG1は、縦軸が正解確率(エッジが存在する確率)であり、横軸が検索結果の各ランクである。例えば、縦軸の正解確率は、正解の近傍ノードが既存の設定値k0以下のエッジ(で接続されたノード)のいずれかに一致する確率を示す。例えば、正解確率は、対象ノードの第1ノードが、対象ノードの第2ノードに一致する確率を示す。
また、例えば、横軸のランクは、対象ノードからの距離が近い順の検索結果のランクを示す。棒グラフBG1では、ランク#1~ランク#8の8番目までのランクに対応する正解確率を示す。例えば、棒グラフBG1中のランク#1が対象ノードから一番近いランク(ノード)の正解確率を示す。また、例えば、棒グラフBG1中のランク#8が対象ノードから8番目に近いランク(ノード)の正解確率を示す。
このように、図3及び図4に示す棒グラフBG1は、ランクごとの正解確率を示す。なお、棒グラフの総和は1ではなく、各棒グラフの最大値が1である。すなわち、縦軸の正解確率の最大値は1となる。
情報処理装置100は、図3及び図4に示す棒グラフBG1の情報を用いて、検索数を算出(決定)してもよい。例えば、情報処理装置100は、期待精度を予め設定し、エッジの長い方(すなわち、ランクの下)から順に不正解率(=1-正解確率)を加算し、それが「k0×(1-期待精度)」により算出される値(算出値)を上回らない最大のランクを検索数としてもよい。
図4では、k=8、期待精度を「0.80(80%)」とした場合の一例を示す。このように、図4では、検索数kが8であり、期待精度が「0.80(80%)」であるため、取得したい許容され得る不正解数(「許容数」ともいう)は「1.6(=8×(1-0.80))」となる。そのため、情報処理装置100は、算出処理RV1~RV4を順次行って、その算出値を基に検索数を決定する。具体的には、情報処理装置100は、算出処理RV4における算出値「1.8」が許容数「1.6」を超えたため、算出処理RV4でのランク#5の前のランク#6、すなわち「6」を検索数kに決定する。
なお、情報処理装置100は、上記に限らず、様々な情報を適宜用いて検索数を算出してもよい。
〔1-3.グラフデータ〕
なお、図1では、情報処理装置100が最初(ノード数が0個の状態)からグラフGR11を生成する場合、すなわちグラフを新規に生成する場合を示したが、情報処理装置100は、新規生成に限らず、種々のグラフを生成してもよい。例えば、情報処理装置100は、ノードやエッジが含まれるグラフに、新たに追加されたオブジェクトに対応するノードを追加することにより、グラフを生成してもよい。例えば、情報処理装置100は、エッジが調整され再構築されたグラフに、新たに追加されたオブジェクトに対応するノードを追加することにより、グラフを生成してもよい。
〔1-4.起点用情報〕
例えば、情報処理装置100は、図13に示すようなツリー構造(木構造)に関する起点用情報IND11を起点用情報(起点用インデックス)として用いてもよい。図13は、実施形態に係る情報処理に用いる起点用情報の一例を示す図である。例えば、起点用情報IND11は、グラフGR11中のノードに到達可能なツリー構造を有するインデックスである。図13では説明を簡単にするために、起点用情報IND11は、ノードN1~N5の5個のノードに到達するルートのみを図示するが、多数(例えば500や1000等)の他のノードへ到達するルートが含まれてもよい。例えば、起点用情報IND11は、グラフGR11中の全ノードに到達可能であってもよい。
なお、起点用情報IND11のような起点用情報は、情報処理装置100が生成してもよいし、情報処理装置100は、起点用情報を情報提供装置50等の他の外部装置から取得してもよい。例えば、情報処理装置100は、起点用情報を生成する場合は、木構造に関する種々の従来技術を適宜用いて、グラフ(例えばグラフGR11)に含まれるノードをリーフとする木構造の起点用情報(例えば起点用情報IND11)を生成する。また、情報処理装置100は、新たなノードがグラフ(例えばグラフGR11)に追加された場合、新たに追加されたオブジェクトに対応するノード(「追加ノード」ともいう)をリーフとして木構造の起点用情報(例えば起点用情報IND11)に追加する。これにより、情報処理装置100は、新たなノードがグラフに追加された場合、起点用情報を更新する。すなわち、情報処理装置100は、新たなノードがグラフに追加された場合、新たなノードをリーフとして追加した起点用情報を生成する。
上記のように、情報処理装置100は、木構造に関する種々の従来技術を適宜用いて、起点用情報記憶部124(図10参照)に記憶された起点用情報IND11のような、起点用インデックスを生成する。例えば、情報処理装置100は、新たにオブジェクトが追加された場合、新たに追加されたオブジェクトに対応するノードをリーフとして追加することにより、起点用情報IND11を更新してもよい。図1及び図2では、情報処理装置100は、ノードN3やノードN4等が追加される毎に、ノードN3やノードN4等をリーフとして追加することにより、起点用情報IND11を更新してもよい。
また、情報処理装置100は、他の外部装置から起点用情報を取得する場合は、他の外部装置へグラフを提供する。そして、情報処理装置100は、グラフを受信した他の外部装置が生成した起点用情報を、他の外部装置から取得する。例えば、情報処理装置100は、情報提供装置50から起点用情報IND11を取得する場合は、情報提供装置50へグラフGR11を送信する。そして、情報処理装置100は、グラフGR11を受信した情報提供装置50が生成した起点用情報IND11を、情報提供装置50から取得する。例えば、情報処理装置100は、起点用情報IND11と追加ノードに関する情報とを情報提供装置50へ提供することにより、情報提供装置50から追加ノードにより更新された起点用情報IND11を取得してもよい。なお、上記は一例であり、情報提供装置50は、起点用情報IND11を取得可能であれば、どのような手段により起点用情報IND11を取得してもよい。
また、情報処理装置100は、図13中のインデックス情報群GINF11に示すような起点用情報IND11を用いて起点ノードを決定してもよい。図13では、情報処理装置100は、起点用情報IND11に基づいて、クエリQE1に対応する起点ノードを決定する。クエリQE1は、新たに追加するオブジェクトに対応するノードやグラフGR11を用いた検索を行う対象等であってもよい。すなわち、情報処理装置100は、グラフ生成時や検索時において、起点用情報IND11を用いて、起点ノードを決定する。
具体的には、情報処理装置100は、起点用情報記憶部に記憶された起点用情報IND11を用いて、起点ノードを決定する。図13中の起点用情報IND11は、図10中の起点用情報記憶部124に示す階層構造を有する。例えば、起点用情報IND11は、ルートRTの直下に位置する第1階層のノード(ベクトル)が、節点VT1、VT2、VT3等であることを示す。また、例えば、起点用情報IND11は、節点VT2の直下の第2階層のノードが、節点VT2-1~VT2-4(図示せず)であることを示す。例えば、起点用情報IND11は、節点VT2-1の直下の第3階層のノードが、ノードN2、N5、すなわちグラフGR11中のノード(ベクトル)であることを示す。また、起点用情報IND11は、節点VT2-2の直下の第3階層のノードが、ノードN1、N3、N4、すなわちグラフGR11中のノード(ベクトル)であることを示す。
例えば、情報処理装置100は、図13中の起点用情報IND11に示すような木構造型の起点用インデックス情報を用いて、グラフGR11における起点ノードを決定する。図13では、情報処理装置100は、クエリQE1に基づいて、起点用情報IND11を上(ルートRT)から下へ辿ることにより、起点用情報IND11の近傍候補となる起点ノードを決定(特定)する。これにより、情報処理装置100は、効率的に検索クエリ(クエリQE1)に対応する起点ノードを決定することができる。例えば、情報処理装置100は、追加ノードであるクエリQE1に対応する適切な起点ノードを高速に決定することができる。
なお、情報処理装置100は、上記に限らず、種々の起点用インデックスを用いてもよい。すなわち、図13の例に示す起点用情報(起点用インデックス)は一例であり、情報処理装置100は、種々の起点用情報を用いて、グラフ情報を検索してもよい。情報処理装置100は、検索時の起点ノードの決定に用いる起点用インデックスを生成してもよい。例えば、情報処理装置100は、高次元ベクトルを高速に検索するための検索インデックス(起点用情報)を生成する。ここでいう高次元ベクトルとは、例えば、数百次元から数千次元のベクトルであってもよいし、それ以上の次元のベクトルであってもよい。
例えば、情報処理装置100は、kd木(k-dimensional tree)に関する検索インデックスを起点用インデックスとして生成してもよい。例えば、情報処理装置100は、VP木(Vantage-Point tree)に関する検索インデックスを起点用インデックスとして生成してもよい。
また、例えば、情報処理装置100は、その他の木構造を有する起点用インデックスとして生成してもよい。例えば、情報処理装置100は、木構造の起点用インデックスのリーフがグラフに接続する種々の起点用インデックスを生成してもよい。例えば、情報処理装置100は、木構造の起点用インデックスのリーフがグラフ中のノードに対応する種々の起点用インデックスを生成してもよい。また、情報処理装置100は、このような起点用インデックスを用いて検索を行う場合、起点用インデックスを辿って到達したリーフ(ノード)からグラフを探索してもよい。
なお、上述したような起点用インデックスは一例であり、情報処理装置100は、グラフ中のクエリを高速に特定することが可能であれば、どのようなデータ構造の起点用インデックスを生成してもよい。例えば、情報処理装置100は、クエリに対応するグラフ情報中のノードを高速に特定することが可能であれば、バイナリ空間分割に関する技術等の種々の従来技術を適宜用いて、起点用インデックスを生成してもよい。例えば、情報処理装置100は、高次元ベクトルの検索に対応可能な起点用インデックスであれば、どのようなデータ構造の起点用インデックスを生成してもよい。情報処理装置100は、上述のような起点用インデックスとグラフとを用いることにより、所定の対象に関してより効率的な検索を可能にすることができる。すなわち、情報処理装置100は、上述のような起点用インデックスとグラフとを用いることにより、所定の対象に関する検索をより高速に実行可能にすることができる。
〔2.情報処理システムの構成〕
図5に示すように、情報処理システム1は、端末装置10と、情報提供装置50と、情報処理装置100とが含まれる。端末装置10と、情報提供装置50と、情報処理装置100とは所定のネットワークNを介して、有線または無線により通信可能に接続される。図5は、実施形態に係る情報処理システムの構成例を示す図である。なお、図5に示した情報処理システム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グラフを生成する情報処理装置である。例えば、情報処理装置100は、対象ノードの第1ノードのうち、対象ノードの第2ノードに該当しないノードと、対象ノードとの間を連結するエッジを第1グラフに追加する精製処理により第2グラフを生成する。なお、精製処理は、グラフからエッジを削除する処理であってもよい。例えば、情報処理装置100は、対象ノードに連結されたエッジを第1グラフから削除する精製処理により第2グラフを生成する。例えば、情報処理装置100は、第1グラフにおいて所定数を超えるエッジが連結されたノード(エッジ過多ノード)がある場合、そのエッジ過多ノードに連結されたエッジが所定数になるまで、そのエッジ過多ノードに連結されたエッジを削除することにより第2グラフを生成してもよい。例えば、情報処理装置100は、エッジ過多ノードに連結されたエッジが所定数になるまで、そのエッジ過多ノードに連結されたエッジのうち、距離が長い方から順にエッジを第1グラフから削除する精製処理により第2グラフを生成する。
例えば、情報処理装置100は、端末装置からクエリ情報(以下、単に「クエリ」ともいう)を受信すると、クエリに類似する対象(ベクトル情報等)を検索し、検索結果を端末装置に提供する。また、例えば、情報処理装置100が端末装置に提供するデータは、画像情報等のデータ自体であってもよいし、URL(Uniform Resource Locator)等の対応するデータを参照するための情報であってもよい。また、クエリや検索対象のデータは、画像、音声、テキストデータなど、如何なる種類のデータであってもよい。本実施形態において、情報処理装置100が画像を検索する場合を一例として説明する。
〔3.情報処理装置の構成〕
次に、図6を用いて、実施形態に係る情報処理装置100の構成について説明する。図6は、実施形態に係る情報処理装置100の構成例を示す図である。図6に示すように、情報処理装置100は、通信部110と、記憶部120と、制御部130とを有する。なお、情報処理装置100は、情報処理装置100の管理者等から各種操作を受け付ける入力部(例えば、キーボードやマウス等)や、各種情報を表示するための表示部(例えば、液晶ディスプレイ等)を有してもよい。
(通信部110)
通信部110は、例えば、NIC(Network Interface Card)等によって実現される。そして、通信部110は、ネットワーク(例えば図5中のネットワークN)と有線または無線で接続され、端末装置10や情報提供装置50との間で情報の送受信を行う。
(記憶部120)
記憶部120は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、または、ハードディスク、光ディスク等の記憶装置によって実現される。実施形態に係る記憶部120は、図6に示すように、オブジェクト情報記憶部121と、条件情報記憶部122と、第1グラフ情報記憶部123と、起点用情報記憶部124と、第2グラフ情報記憶部125とを有する。なお、記憶部120は、様々な情報を記憶する。例えば、記憶部120は、各ノードがグラフに追加された順番を各ノード(オブジェクト)に対応付けて記憶する。記憶部120の第1グラフ情報記憶部123は、各ノードがグラフに追加された順番を各ノード(オブジェクト)に対応付けて記憶する。
(オブジェクト情報記憶部121)
実施形態に係るオブジェクト情報記憶部121は、オブジェクトに関する各種情報を記憶する。例えば、オブジェクト情報記憶部121は、オブジェクトIDやベクトルデータを記憶する。図7は、実施形態に係るオブジェクト情報記憶部の一例を示す図である。図7に示すオブジェクト情報記憶部121は、「オブジェクトID」、「ベクトル情報」といった項目が含まれる。
「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。また、「ベクトル情報」は、オブジェクトIDにより識別されるオブジェクトに対応するベクトル情報を示す。すなわち、図7では、オブジェクトを識別するオブジェクトIDに対して、オブジェクトに対応するベクトルデータ(ベクトル情報)が対応付けられて登録されている。
例えば、図7では、ID「OB1」により識別されるオブジェクト(対象)は、「10,24,51,2...」の多次元のベクトル情報が対応付けられることを示す。
なお、オブジェクト情報記憶部121は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(条件情報記憶部122)
実施形態に係る条件情報記憶部122は、処理の条件に関する各種情報を記憶する。図8は、実施形態に係る条件情報記憶部の一例を示す図である。図8に示す条件情報記憶部122は、「検索数」、「区間閾値」、「終了条件」といった項目が含まれる。
「検索数」は、対応する検索数の具体的な値を示す。例えば、「検索数」は、検索処理で選択するノードの数を示す。なお、図7では、検索数を「NM1」等と抽象的に示するが、検索数は、例えば「2」、「100」等の具体的な数値である。
「区間閾値」は、区間の閾値を示す。例えば、「区間閾値」は、平均精度を算出するノードの数を示す。なお、図7では、区間閾値を「IN1」等と抽象的に示するが、区間閾値は、例えば「1000」、「10000」等の具体的な数値である。例えば、区間閾値が「1000」である場合、1000個のノードの精度の平均を算出することを示す。
「終了条件」は、処理の終了条件を示す。例えば、「終了条件」は、精製処理を終了する条件を示す。なお、図7では、終了条件を「TC1」等と抽象的に示するが、終了条件は、例えば「区間平均精度が1になること」、「区間平均精度が期待精度以上であること」等の具体的な条件である。例えば、終了条件が「区間平均精度が1になること」である場合、区間平均精度が1になった場合に、精製処理が終了することを示す。
図7では、検索数がNM1であり、区間閾値がIN1であり、区間閾値を「TC1であることを示す。
なお、条件情報記憶部122は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(第1グラフ情報記憶部123)
実施形態に係る第1グラフ情報記憶部123は、第1グラフ情報に関する各種情報を記憶する。例えば、第1グラフ情報記憶部123は、第1グラフ情報を記憶する。図9は、実施形態に係る第1グラフ情報記憶部の一例を示す図である。図9に示す第1グラフ情報記憶部123は、「ノードID」、「オブジェクトID」、および「エッジ情報」といった項目を有する。また、「エッジ情報」には、「エッジID」や「参照先」といった情報が含まれる。
「ノードID」は、グラフデータにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。
また、「エッジ情報」は、対応するノードに接続されるエッジに関する情報を示す。図9では、「エッジ情報」は、対応するノードに連結されるエッジに関する情報を示す。また、「エッジID」は、ノード間を連結するエッジを識別するための識別情報を示す。また、「参照先」は、エッジにより連結された参照先(ノード)を示す情報を示す。すなわち、図9では、ノードを識別するノードIDに対して、そのノードに対応するオブジェクト(対象)を識別する情報やそのノードからのエッジが連結される参照先(ノード)が対応付けられて登録されている。
図9では、ノードID「N1」により識別されるノード(ノードN1)は、オブジェクトID「OB1」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN1からは、エッジID「E1」により識別されるエッジ(エッジE1)が、ノードID「N2」により識別されるノード(ノードN2)に連結されることを示す。すなわち、図9では、グラフデータにおけるノードN1からはエッジE1によりノードN2へ辿ることができることを示す。また、ノードN1からは、エッジID「E4」により識別されるエッジ(エッジE4)が、ノードID「N4」により識別されるノード(ノードN4)に連結されることを示す。すなわち、図9では、グラフデータにおけるノードN1からはエッジE4によりノードN4へ辿ることができることを示す。
また、ノードID「N2」により識別されるノード(ノードN2)は、オブジェクトID「OB2」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN2からは、エッジID「E1」により識別されるエッジ(エッジE1)が、ノードID「N1」により識別されるノード(ノードN1)に連結されることを示す。すなわち、図9では、グラフデータにおけるノードN2からはエッジE1によりノードN1へ辿ることができることを示す。図9に示す第1グラフ情報記憶部123は、グラフGR11-6に対応するグラフ情報を記憶する場合を示す。
なお、第1グラフ情報記憶部123は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、第1グラフ情報記憶部123は、各ノード(ベクトル)間を連結するエッジの長さが記憶されてもよい。すなわち、第1グラフ情報記憶部123は、各ノード(ベクトル)間の距離を示す情報が記憶されてもよい。また、例えば、第1グラフ情報記憶部123は、各ノードへの入力エッジの数を示す情報が記憶されてもよい。
また、グラフデータは、クエリを入力とし、グラフデータ中のエッジを辿ることによりノードを探索し、クエリに類似するノードを抽出し出力するプログラムモジュールを含んでもよい。すなわち、グラフデータは、グラフを用いて検索処理を行うプログラムモジュールとしての利用が想定されるものであってもよい。例えば、グラフデータGR11は、クエリとしてベクトルデータが入力された場合に、そのベクトルデータに類似するベクトルデータに対応するノードをグラフ中から抽出し、出力するプログラムであってもよい。例えば、グラフデータGR11は、クエリ画像に対応する類似画像を検索するプログラムモジュールとして利用されるデータであってもよい。例えば、グラフデータGR11は、入力されたクエリに基づいて、グラフにおいてそのクエリに類似するノードを抽出し、出力するよう、コンピュータを機能させる。
(起点用情報記憶部124)
実施形態に係る起点用情報記憶部124は、起点用情報に関する各種情報を記憶する。図10は、実施形態に係る起点用情報記憶部の一例を示す図である。具体的には、図10では、起点用情報記憶部124は、ツリー構造の起点用インデックス情報を示す。図10では、起点用情報記憶部124は、「ルート階層」、「第1階層」、「第2階層」、「第3階層」等といった項目が含まれる。なお、「第1階層」~「第3階層」に限らず、インデックスの階層数に応じて、「第4階層」、「第5階層」、「第6階層」等が含まれてもよい。
「ルート階層」は、インデックスを用いた起点ノードの決定の開始点となるルート(最上位)の階層を示す。「第1階層」は、インデックスの第1階層に属するノード(節点またはグラフ情報中のベクトル)を識別(特定)する情報が格納される。「第1階層」に格納されるノードは、インデックスの根(ルート)に直接結ばれる階層に対応するノードとなる。
「第2階層」は、インデックスの第2階層に属するノード(節点またはグラフ情報中のベクトル)を識別(特定)する情報が格納される。「第2階層」に格納されるノードは、第1階層のノードに結ばれる直下の階層に対応するノードとなる。「第3階層」は、インデックスの第3階層に属するノード(節点またはグラフ情報中のベクトル)を識別(特定)する情報が格納される。「第3階層」に格納されるノードは、第2階層のノードに結ばれる直下の階層に対応するノードとなる。
図10に示す例においては、起点用情報記憶部124には、図1中の起点用情報IND11に対応する情報が記憶される。例えば、起点用情報記憶部124は、第1階層のノードが、節点VT1~VT3等であることを示す。また、各節点の下の括弧内の数値は、各節点に対応するベクトルの値を示す。
また、起点用情報記憶部124は、節点VT2の直下の第2階層のノードが、節点VT2-1~VT2-4であることを示す。また、起点用情報記憶部124は、節点VT2-1の直下の第3階層のノードが、ノードN2、ノードN5のグラフGR11中のノード(ベクトル)であることを示す。起点用情報記憶部124は、節点VT2-2の直下の第3階層のノードが、ノードN1、ノードN3、ノードN4のグラフGR11中のノード(ベクトル)であることを示す。
なお、起点用情報記憶部124は、上記に限らず、目的に応じて種々の情報を記憶してもよい。
(第2グラフ情報記憶部125)
実施形態に係る第2グラフ情報記憶部125は、第2グラフ情報に関する各種情報を記憶する。例えば、第2グラフ情報記憶部125は、第2グラフ情報を記憶する。図11は、実施形態に係る第2グラフ情報記憶部の一例を示す図である。図11に示す第2グラフ情報記憶部125は、「ノードID」、「オブジェクトID」、および「エッジ情報」といった項目を有する。また、「エッジ情報」には、「エッジID」や「参照先」といった情報が含まれる。
「ノードID」は、グラフデータにおける各ノード(対象)を識別するための識別情報を示す。また、「オブジェクトID」は、オブジェクトを識別するための識別情報を示す。
また、「エッジ情報」は、対応するノードに接続されるエッジに関する情報を示す。図11では、「エッジ情報」は、対応するノードに連結されるエッジに関する情報を示す。また、「エッジID」は、ノード間を連結するエッジを識別するための識別情報を示す。また、「参照先」は、エッジにより連結された参照先(ノード)を示す情報を示す。すなわち、図11では、ノードを識別するノードIDに対して、そのノードに対応するオブジェクト(対象)を識別する情報やそのノードからのエッジが連結される参照先(ノード)が対応付けられて登録されている。
図11では、ノードID「N1」により識別されるノード(ノードN1)は、オブジェクトID「OB1」により識別されるオブジェクト(対象)に対応することを示す。また、ノードN1からは、エッジID「E100」により識別されるエッジ(エッジE100)が、ノードID「N72」により識別されるノード(ノードN72)に連結されることを示す。すなわち、図11では、グラフデータにおけるノードN1からはエッジE100によりノードN72へ辿ることができることを示す。
このように、図11に示す第2グラフ情報記憶部125は、グラフGR11-7に対応するグラフ情報を記憶する場合を示す。すなわち、図11では、図9に示すグラフにエッジE100が追加されたグラフの情報が記憶された状態を示す。図11に示す第2グラフ情報記憶部125は、図9に対応するグラフGR11-6にエッジE100が追加されたグラフGR11-7に対応するグラフ情報を記憶する場合を示す。
なお、第2グラフ情報記憶部125は、上記に限らず、目的に応じて種々の情報を記憶してもよい。例えば、第2グラフ情報記憶部125は、各ノード(ベクトル)間を連結するエッジの長さが記憶されてもよい。すなわち、第2グラフ情報記憶部125は、各ノード(ベクトル)間の距離を示す情報が記憶されてもよい。また、例えば、第2グラフ情報記憶部125は、各ノードへの入力エッジの数を示す情報が記憶されてもよい。
また、グラフデータは、クエリを入力とし、グラフデータ中のエッジを辿ることによりノードを探索し、クエリに類似するノードを抽出し出力するプログラムモジュールを含んでもよい。すなわち、グラフデータは、グラフを用いて検索処理を行うプログラムモジュールとしての利用が想定されるものであってもよい。例えば、グラフデータGR11は、クエリとしてベクトルデータが入力された場合に、そのベクトルデータに類似するベクトルデータに対応するノードをグラフ中から抽出し、出力するプログラムであってもよい。例えば、グラフデータGR11は、クエリ画像に対応する類似画像を検索するプログラムモジュールとして利用されるデータであってもよい。例えば、グラフデータGR11は、入力されたクエリに基づいて、グラフにおいてそのクエリに類似するノードを抽出し、出力するよう、コンピュータを機能させる。
また、図11では、精製処理後のグラフデータを示すために第2グラフ情報記憶部125に記憶する場合を図示するが、精製処理後のグラフデータは、第1グラフ情報記憶部123に記憶されてもよい。例えば、情報処理装置100は、第2グラフ情報記憶部125に、精製処理中のグラフデータを記憶し、精製処理完了後において、精製処理完了後のグラフデータにより、第1グラフ情報記憶部123を更新する。例えば、情報処理装置100は、精製処理完了後において、第2グラフ情報記憶部125に記憶されたグラフデータを、第1グラフ情報記憶部123に格納することにより、第1グラフ情報記憶部123を更新する。なお、上記は一例であり、第1グラフ情報記憶部123に精製処理後のグラフデータが記憶されれば、どのような方法により、第1グラフ情報記憶部123を更新してもよい。情報処理装置100が第2グラフ情報記憶部125を用いることなく、第1グラフ情報記憶部123を更新する場合は、情報処理装置100は、第2グラフ情報記憶部125を有しなくてもよい。
(制御部130)
図6の説明に戻って、制御部130は、コントローラ(controller)であり、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)やGPU(Graphics Processing Unit)等によって、情報処理装置100内部の記憶装置に記憶されている各種プログラム(情報処理プログラムの一例に相当)がRAMを作業領域として実行されることにより実現される。また、制御部130は、コントローラであり、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積回路により実現される。
図6に示すように、制御部130は、取得部131と、抽出部132と、第1生成部133と、算出部134と、第2生成部135と、提供部136とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部130の内部構成は、図6に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
(取得部131)
取得部131は、各種情報を取得する。例えば、取得部131は、記憶部120から各種情報を取得する。例えば、取得部131は、オブジェクト情報記憶部121や、条件情報記憶部122や、第1グラフ情報記憶部123や、起点用情報記憶部124や、第2グラフ情報記憶部125等から各種情報を取得する。また、取得部131は、各種情報を外部の情報処理装置から受信する。
取得部131は、検索対象となる複数のオブジェクトの各々に対応する複数のノードがエッジで連結されたグラフを第1グラフとして取得する。取得部131は、複数のノードを所定の順序で追加し、追加済みのノードを対象としてエッジを連結する逐次登録処理により生成されたグラフを取得する。取得部131は、第1生成部133が実行する逐次登録処理により生成されたグラフを第1グラフとして取得する。
取得部131は、複数のノードがエッジで連結された第1グラフと、追加ノードとを取得する。取得部131は、所定数の追加ノードを取得する。取得部131は、第1グラフに追加される一のノードである追加ノードを取得する。
取得部131は、データ検索の対象となる一のオブジェクトと、一のオブジェクトとは異なる他のオブジェクトの各々に対応する複数のノード、及びノード間を連結するエッジを含む第1グラフとを取得する。取得部131は、データ検索の対象となる一のオブジェクトに対応する一の追加ノードを取得する。
また、取得部131は、グラフデータを取得してもよい。例えば、情報処理装置100は、図1中のグラフGR11-1を取得してもよい。例えば、情報処理装置100は、情報提供装置50等の外部装置からグラフデータを取得してもよい。
例えば、取得部131は、検索クエリに関する情報を取得する。例えば、取得部131は、画像検索に関する検索クエリを取得する。例えば、取得部131は、利用する端末装置10からクエリを取得する。例えば、取得部131は、利用する端末装置10からクエリを受け付けた情報提供装置50からクエリを取得する。
(抽出部132)
抽出部132は、種々の情報を抽出する。抽出部132は、各種情報を検索する検索部として機能する。例えば、抽出部132は、オブジェクトに関する検索サービスを提供する検索部として機能する。抽出部132は、各種情報を探索する。抽出部132は、各種情報を検索する。例えば、抽出部132は、グラフデータを探索することにより、オブジェクトを検索する。例えば、抽出部132は、第1生成部133からの指示に応じて、グラフを検索する検索処理を実行する。例えば、抽出部132は、第2生成部135からの指示に応じて、グラフを検索する検索処理を実行する。例えば、抽出部132は、処理対象となるノードを示す情報が与えられた場合、図14に示すような処理手順に基づいて、グラフを探索することにより、対象となるノード(オブジェクト)に類似するノード(オブジェクト)を抽出する。抽出部132は、複数のノードのうち一のノードを対象ノードとして、グラフを検索する検索処理により、対象ノードの近傍ノードを抽出する。
例えば、抽出部132は、オブジェクト情報記憶部121や、条件情報記憶部122や、第1グラフ情報記憶部123や、起点用情報記憶部124や、第2グラフ情報記憶部125等から各種情報を抽出する。例えば、抽出部132は、取得部131により取得された情報に基づいて、各種情報を抽出する。
抽出部132は、複数のノードから所定の数(例えば検索数等)のノードを近傍ノードとして抽出する。抽出部132は、第1グラフを探索することにより、近傍ノードを抽出する検索処理を行う。抽出部132は、複数のノードのうち、追加ノードとの関係に基づいて、所定の数のノードを近傍ノードとして抽出する検索処理を行う。抽出部132は、複数のノードの各々と、追加ノードとの間の距離に基づいて、所定の数のノードを近傍ノードとして抽出する検索処理を行う。
例えば、抽出部132は、取得部131により取得されたクエリが取得された場合、グラフデータを探索することにより、クエリに類似するオブジェクトを検索する。例えば、抽出部132は、グラフデータを探索することにより、クエリに類似するオブジェクトを抽出する。例えば、抽出部132は、図14に示すような処理手順に基づいて、グラフデータを探索することにより、クエリに類似するオブジェクトを抽出する。
抽出部132は、第1グラフを探索することにより、近傍ノードを抽出する。抽出部132は、追加ノードをクエリとして、第1グラフを探索することにより、所定数(図1の場合2個)の近傍ノードを抽出する。抽出部132は、図14に示すような検索処理により、第1グラフを探索することにより、近傍ノードを抽出する。
図1では、抽出部132は、生成中のグラフGR11を用いて、追加ノードの近傍ノードをグラフGR11から抽出する検索処理を実行する。抽出部132は、追加ノードであるノードN3をクエリとして、図14に示すような処理手順によりグラフGR11-1を探索し、ノードN3の近傍ノードとして、検索数「2」に対応する2個のノードN1、N2を抽出する。抽出部132は、追加ノードであるノードN7をクエリとして、図14に示すような処理手順によりグラフGR11-6を探索し、ノードN7の近傍ノードとして、検索数「2」に対応する2個のノードN1、N6を抽出する。
(第1生成部133)
第1生成部133は、各種情報を生成する。例えば、第1生成部133は、記憶部120に記憶された情報(データ)から各種情報(データ)を生成する。例えば、第1生成部133は、オブジェクト情報記憶部121や、条件情報記憶部122や、第1グラフ情報記憶部123や、起点用情報記憶部124や、第2グラフ情報記憶部125等から各種情報を生成する。
例えば、第1生成部133は、取得部131により取得された情報に基づいて、各種情報を生成する。第1生成部133は、抽出部132により抽出された情報に基づいて、各種情報を生成する。第1生成部133は、逐次登録処理によりグラフを生成する。第1生成部133は、図1に示すような逐次登録処理によりグラフ(第1グラフデータ等)を生成する。なお、情報処理装置100は、第1グラフを外部装置から取得する場合、第1生成部133を有しなくてもよい。
(算出部134)
算出部134は、各種情報を算出する。算出部134は、各種情報を選択する。算出部134は、記憶部120に記憶された各種情報に基づいて、種々の情報を算出する。算出部134は、記憶部120に記憶された各種情報に基づいて、種々の情報を選択する。例えば、算出部134は、オブジェクト情報記憶部121や、条件情報記憶部122や、第1グラフ情報記憶部123や、起点用情報記憶部124や、第2グラフ情報記憶部125等から各種情報を算出する。算出部134は、精度を算出する。例えば、算出部134は、取得部131により取得された情報に基づいて、各種情報を算出する。算出部134は、抽出部132により抽出された情報に基づいて、各種情報を算出する。
算出部134は、複数のノードのうち一のノードを対象ノードとして、グラフを検索する検索処理により、対象ノードの近傍ノードとして抽出された第1ノードと、グラフにおいて対象ノードとの間がエッジで連結されたノードである第2ノードとに基づいて、グラフに関する精度を算出する。算出部134は、第1ノードに対する第2ノードの割合により精度を算出する。算出部134は、第1ノードのうち第2ノードに該当するノードの割合により精度を算出する。
算出部134は、複数のノードから順次選択される一のノードを対象ノードとして、精度を算出する。算出部134は、複数のノードのうち、所定数のノードの精度の平均である平均精度を算出する。算出部134は、複数のノードの処理順序に対応する一の区間に対応する所定数のノードの平均精度である区間平均精度を算出する。
算出部134は、一の区間の区間平均精度を基に終了条件を満たさない場合、一の区間の次の区間に対応する所定数のノードの区間平均精度を算出する。算出部134は、前の区間における区間平均精度に応じて決定される検索数による検索処理により抽出された第1ノードと、第2ノードとに基づいて、精度を算出する。算出部134は、期待精度を示す所定の値と、前の区間における検索結果に応じて決定される検索数による検索処理により抽出された第1ノードと、第2ノードとに基づいて、精度を算出する。
(第2生成部135)
第2生成部135は、各種情報を生成する。例えば、第2生成部135は、記憶部120に記憶された情報(データ)から各種情報(データ)を生成する。例えば、第2生成部135は、オブジェクト情報記憶部121や、条件情報記憶部122や、第1グラフ情報記憶部123や、起点用情報記憶部124や、第2グラフ情報記憶部125等から各種情報を生成する。例えば、第2生成部135は、精製処理により第1グラフに新たなエッジを追加した第2グラフを生成する。第2生成部135は、グラフの順序情報を用いて、対象ノードを選択し、選択した対象ノードについて精製処理を行う。第2生成部135は、グラフGR11の順序情報を用いて、ノードN1、N2、N3の順で各ノードを対象ノードを選択し、選択した対象ノードについて精製処理を行いグラフGR11を更新する。
例えば、第2生成部135は、取得部131により取得された情報に基づいて、各種情報を生成する。第2生成部135は、抽出部132により抽出された情報に基づいて、各種情報を生成する。第2生成部135は、第1生成部133により生成された情報に基づいて、各種情報を生成する。第2生成部135は、算出部134により算出された情報に基づいて、各種情報を生成する。第2生成部135は、エッジに対して削除処理を行うかどうかを決定する。第2生成部135は、エッジが削除処理を行う対象かどうかを判定する。
第2生成部135は、複数のノードのうち一のノードを対象ノードとして、グラフを検索する検索処理により、対象ノードの近傍ノードとして抽出された第1ノードと、グラフにおいて対象ノードとの間がエッジで連結されたノードである第2ノードとに基づいて、第1ノードのうち、第2ノードに該当しないノードと、対象ノードとの間を連結するエッジをグラフに追加する精製処理を実行する。第2生成部135は、抽出部132により抽出された第1ノードと、第2ノードとに基づいて、第1ノードのうち、第2ノードに該当しないノードと、対象ノードとの間を連結するエッジをグラフに追加する精製処理を実行する。
第2生成部135は、算出部134による処理結果に応じて、処理を実行する。第2生成部135は、逐次登録処理で追加された順序で選択される一のノードを対象ノードとする検索処理により抽出された第1ノードと、第2ノードとに基づいて、精製処理を実行する。第2生成部135は、対象ノードを起点とする検索処理により抽出された第1ノードと、第2ノードとに基づいて、対象ノードを対象とする精製処理を実行する。第2生成部135は、複数のノードから順次選択される一のノードを対象ノードとして、精製処理を繰り返す。
第2生成部135は、算出部134により算出される精度に応じた終了条件を満たすまで、対象ノードを対象とする精製処理を繰り返す。第2生成部135は、複数のノードの全てを対象ノードとして精製処理を行う前に、終了条件を満たす場合、複数のノードのうち一部を対象ノードとする精製処理を行わない。第2生成部135は、平均精度を基に終了条件を満たすかを判定する。第2生成部135は、区間平均精度を基に終了条件を満たすかを判定する。第2生成部135は、終了条件を満たすと判定した場合、精製処理を終了する。
(提供部136)
提供部136は、各種情報を提供する。例えば、提供部136は、端末装置10や情報提供装置50に各種情報を送信する。例えば、提供部136は、クエリに対応するオブジェクトIDを検索結果として提供する。例えば、提供部136は、抽出部132により検索されたオブジェクトIDを情報提供装置50へ提供する。例えば、提供部136は、抽出部132が検索により抽出したオブジェクトIDを情報提供装置50へ提供する。提供部136は、抽出部132により抽出されたオブジェクトIDをクエリに対応するベクトルを示す情報として情報提供装置50に提供する。
また、提供部136は、第2生成部135により生成された第2グラフデータ(第2グラフ情報)を外部の情報処理装置へ提供してもよい。例えば、提供部136は、第2生成部135により生成されたグラフGR11を情報提供装置50に送信してもよい。
〔4.情報処理のフロー〕
次に、図12を用いて、実施形態に係る情報処理システム1による情報処理の手順について説明する。図12は、実施形態に係る情報処理の一例を示すフローチャートである。
図12に示すように、情報処理装置100は、検索対象となる複数のオブジェクトの各々に対応する複数のノードがエッジで連結された第1グラフを取得する(ステップS101)。例えば、情報処理装置100は、第1グラフ情報記憶部123(図9参照)に記憶されたグラフを第1グラフとして取得する。
そして、情報処理装置100は、第1グラフ中の一のノードを対象ノードとして、第1グラフを検索する検索処理により、対象ノードの近傍ノードとして抽出された第1ノードと、第1グラフにおいて対象ノードとの間がエッジで連結されたノードである第2ノードとの比較に基づいて、第1ノードのうち、第2ノードに該当しないノードと、対象ノードとの間を連結するエッジを第1グラフに追加する追加処理により、第2グラフを生成
する(ステップS102)。例えば、情報処理装置100は、第1ノードのうち、第2ノードに該当しないノードと、対象ノードとの間を連結するエッジを第1グラフに追加する追加処理により、第2グラフを生成することでグラフを更新する。
〔5.検索例〕
ここで、上述したグラフデータを用いた検索の一例を示す。なお、生成したグラフデータを用いた検索は下記に限らず、種々の手順により行われてもよい。この点について、図14を一例として説明する。図14は、グラフデータを用いた検索処理の一例を示すフローチャートである。以下に説明する検索処理は、情報処理装置100の抽出部132によって行われる。また、以下でいうオブジェクトは、ノードと読み替えてもよい。なお、以下では、情報処理装置100(の抽出部132等)が検索処理を行う。以下で説明する処理の検索クエリは、追加ノードや対象ノードやユーザが指定したオブジェクト等であってもよい。
ここでは、近傍オブジェクト集合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は、検索数であってもよい。例えば、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)に対応する近傍ノードとして選択してもよい。例えば、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクト(ノード)を対象ノード(入力オブジェクトy)に対応する近傍ノードとして選択してもよい。また、例えば、情報処理装置100は、オブジェクト集合Rに含まれるオブジェクト(ノード)を検索クエリ(入力オブジェクトy)に対応する検索結果として、検索を行った端末装置等へ提供してもよい。
〔6.効果〕
上述してきたように、実施形態に係る情報処理装置(実施形態では「情報処理装置100」に対応)は、取得部(実施形態では「取得部131」に対応)と、生成部(実施形態では「第2生成部135」に対応)とを有する。取得部は、検索対象となる複数のオブジェクトの各々に対応する複数のノードがエッジで連結されたグラフを取得する。生成部は、複数のノードのうち一のノードを対象ノードとして、グラフを検索する検索処理により、対象ノードの近傍ノードとして抽出された第1ノードと、グラフにおいて対象ノードとの間がエッジで連結されたノードである第2ノードとに基づいて、第1ノードのうち、第2ノードに該当しないノードと、対象ノードとの間を連結するエッジをグラフに追加する精製処理を実行する。
このように、実施形態に係る情報処理装置は、グラフを検索する検索処理により、対象ノードの近傍ノードとして抽出された第1ノードと、グラフにおいて対象ノードとの間がエッジで連結された第2ノードとに基づいて、第1ノードのうち、第2ノードに該当しないノードと、対象ノードとの間を連結するエッジをグラフに追加する精製処理を実行する。これにより、情報処理装置は、グラフにエッジを追加することによりグラフを適切に生成することができる。
また、実施形態に係る情報処理装置において、取得部は、複数のノードを所定の順序で追加し、追加済みのノードを対象としてエッジを連結する逐次登録処理により生成されたグラフを取得する。
これにより、実施形態に係る情報処理装置は、逐次登録処理により生成されたグラフを対象として、そのグラフにエッジを追加することができる。そのため、情報処理装置は、グラフにエッジを追加することによりグラフを適切に生成することができる。
また、実施形態に係る情報処理装置において、生成部は、逐次登録処理で追加された順序で選択される一のノードを対象ノードとする検索処理により抽出された第1ノードと、第2ノードとに基づいて、精製処理を実行する。
これにより、実施形態に係る情報処理装置は、逐次登録処理で追加されたノードの順序で精製処理を実行することにより、近傍ノードにエッジが接続されていない可能性が高いノードから順に対象として、グラフにエッジを追加することができる。そのため、情報処理装置は、グラフにエッジを追加することによりグラフを適切に生成することができる。
また、実施形態に係る情報処理装置において、生成部は、対象ノードを起点とする検索処理により抽出された第1ノードと、第2ノードとに基づいて、対象ノードを対象とする精製処理を実行する。
これにより、実施形態に係る情報処理装置は、対象ノードを起点として検索処理を行って第1ノードが抽出されることにより、効率的に抽出された第1ノードを用いて処理を行うことができる。そのため、情報処理装置は、グラフにエッジを追加することによりグラフを適切に生成することができる。
また、実施形態に係る情報処理装置は、算出部(実施形態では「算出部134」に対応)を有する。算出部は、第1ノードと、第2ノードとに基づいて、グラフに関する精度を算出する。
これにより、実施形態に係る情報処理装置は、算出した精度を用いた処理が可能となる。
また、実施形態に係る情報処理装置において、算出部は、第1ノードに対する第2ノードの割合により精度を算出する。
これにより、実施形態に係る情報処理装置は、第1ノードと第2ノードとの関係を基に算出した精度を用いた処理が可能となる。
また、実施形態に係る情報処理装置において、算出部は、第1ノードのうち第2ノードに該当するノードの割合により精度を算出する。
これにより、実施形態に係る情報処理装置は、第1ノードと第2ノードとの関係を基に算出した精度を用いた処理が可能となる。
また、実施形態に係る情報処理装置において、算出部は、複数のノードから順次選択される一のノードを対象ノードとして、精度を算出する。生成部は、複数のノードから順次選択される一のノードを対象ノードとして、精製処理を繰り返す。
このように、実施形態に係る情報処理装置は、順次選択されたノードを対象として、精度の算出及び精製処理を行う。これにより、情報処理装置は、精度を用いた処理が可能となるとともに、グラフにエッジを追加することによりグラフを適切に生成することができる。
また、実施形態に係る情報処理装置において、生成部は、算出部により算出される精度に応じた終了条件を満たすまで、対象ノードを対象とする精製処理を繰り返す。
このように、実施形態に係る情報処理装置は、算出した精度に応じた終了条件を満たすまで、対象ノードを対象とする精製処理を繰り返すことにより、適切に精製処理を繰り返し実行することができる。そのため、情報処理装置は、グラフにエッジを追加することによりグラフを適切に生成することができる。
また、実施形態に係る情報処理装置において、生成部は、複数のノードの全てを対象ノードとして精製処理を行う前に、終了条件を満たす場合、複数のノードのうち一部を対象ノードとする精製処理を行わない。
このように、実施形態に係る情報処理装置は、全てのノードについて精製処理を実行する前に終了条件を満たした場合は、そこで処理を終了する。これにより、情報処理装置は、適切なタイミングで処理を終了することができる。
また、実施形態に係る情報処理装置において、算出部は、複数のノードのうち、所定数のノードの精度の平均である平均精度を算出する。生成部は、平均精度を基に終了条件を満たすかを判定する。
このように、実施形態に係る情報処理装置は、所定数のノードの平均精度を基に終了条件を満たすかを判定するすることにより、適切に終了を判定することができる。
また、実施形態に係る情報処理装置において、算出部は、複数のノードの処理順序に対応する一の区間に対応する所定数のノードの平均精度である区間平均精度を算出する。生成部は、区間平均精度を基に終了条件を満たすかを判定する。
このように、実施形態に係る情報処理装置は、複数のノードの処理順序に対応する一の区間に対応する区間平均精度を基に終了条件を満たすかを判定するすることにより、適切に終了を判定することができる。
また、実施形態に係る情報処理装置において、算出部は、一の区間の区間平均精度を基に終了条件を満たさない場合、一の区間の次の区間に対応する所定数のノードの区間平均精度を算出する。
このように、実施形態に係る情報処理装置は、一の区間の区間平均精度を基に終了条件を満たさず、処理を継続する場合、一の区間の次の区間に対応する所定数のノードの区間平均精度を算出する。これにより、情報処理装置は、終了条件を満たすか否かに応じて、適切に処理を行うことができる。
また、実施形態に係る情報処理装置において、算出部は、前の区間における区間平均精度に応じて決定される検索数による検索処理により抽出された第1ノードと、第2ノードとに基づいて、精度を算出する。
このように、実施形態に係る情報処理装置は、前の区間における区間平均精度に応じて決定される検索数を用いて抽出された第1ノードと、第2ノードとに基づいて、精度を算出することで、適切に算出された精度を用いることができる。
また、実施形態に係る情報処理装置において、算出部は、期待精度を示す所定の値と、前の区間における検索結果に応じて決定される検索数による検索処理により抽出された第1ノードと、第2ノードとに基づいて、精度を算出する。
このように、実施形態に係る情報処理装置は、期待精度を示す所定の値と、前の区間における検索結果に応じて決定される検索数を用いて抽出された第1ノードと、第2ノードとに基づいて、精度を算出することで、適切に算出された精度を用いることができる。
〔7.ハードウェア構成〕
上述してきた実施形態に係る情報処理装置100は、例えば図15に示すような構成のコンピュータ1000によって実現される。図15は、情報処理装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。コンピュータ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を介してこれらのプログラムを取得してもよい。
以上、本願の実施形態のいくつかを図面に基づいて詳細に説明したが、これらは例示であり、発明の開示の行に記載の態様を始めとして、当業者の知識に基づいて種々の変形、改良を施した他の形態で本発明を実施することが可能である。
〔8.その他〕
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、各図に示した各種情報は、図示した情報に限られない。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
また、上述してきた各実施形態に記載された各処理は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
また、上述してきた「部(section、module、unit)」は、「手段」や「回路」などに読み替えることができる。例えば、取得部は、取得手段や取得回路に読み替えることができる。