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