(57)【要約】【課題】グラフデータのクラスタリング処理時間を低減する。【解決手段】複数のＣＰＵ（Central  Processing  Unit）または複数コアのＣＰＵを有する制御部を備え、制御部は、グラフデータが入力されると、ＣＰＵが利用可能なＮ個のスレッドを起動し、入力されたグラフデータからＮ個の部分グラフを抽出し、抽出したＮ個の部分グラフをＮ個のスレッドそれぞれに割り当て、それぞれのスレッドにおいてクラスタリング処理を行うクラスタリング装置とした。【選択図】図６
2014160336.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵ（Central  Processing  Unit）または複数コアのＣＰＵを有する制御部を備え、
前記制御部は、
グラフデータが入力されると、前記ＣＰＵが利用可能なＮ個のスレッドを起動し、
前記入力されたグラフデータから前記Ｎ個の部分グラフを抽出し、
前記抽出したＮ個の部分グラフを前記Ｎ個のスレッドそれぞれに割り当て、前記Ｎ個のスレッドそれぞれにおいて前記部分グラフに対するクラスタリング処理を行い、同じクラスタに属するノードを１ノードに集約し、
前記集約されたノードからなるグラフデータに対し、前記Ｎ個の部分グラフの抽出、前記部分グラフのスレッドへの割り当て、前記部分グラフに対するクラスタリング処理および前記同じグラスタに属するノードの１ノードへの集約を、隣接する前記ノード同士のペアでクラスタリング精度向上量が最大となるペアを発見するまで繰り返すことを特徴とするクラスタリング装置。
但し、Ｎは２以上の整数とする。
【請求項２】
前記制御部は、
前記Ｎ個の部分グラフを抽出するとき、
前記入力されたグラフデータを、前記Ｎ個の部分グラフに分割することにより、前記部分グラフを抽出することを特徴とする請求項１に記載のクラスタリング装置。
【請求項３】
前記制御部は、
前記Ｎ個の部分グラフを抽出するとき、
前記入力されたグラフデータの中から、前記クラスタリング処理対象ノードを選択し、前記選択したクラスタリング処理対象ノードから深さが所定のホップ数ｄまでの範囲のノード群を幅優先探索により切り出す処理を前記Ｎ回実行することにより、前記部分グラフを抽出することを特徴とする請求項１に記載のクラスタリング装置。
【請求項４】
前記制御部は、
前記Ｎ個の部分グラフを抽出するとき、
前記入力されたグラフデータの中から、前記クラスタリング処理対象ノードを選択し、前記選択したクラスタリング処理対象ノードから１ホップまでの範囲のノード群の部分グラフを切り出す処理を、前記Ｎ回実行することにより、前記部分グラフを抽出すること特徴とする請求項１に記載のクラスタリング装置。
【請求項５】
前記Ｎ個の部分グラフを抽出するとき、
前記入力されたグラフデータの中から、前記クラスタリング処理対象ノードを選択し、前記選択したクラスタリング処理対象ノードから１ホップまでの範囲のノード群を部分グラフとして切り出す処理を、前記部分グラフが、前記入力されたグラフデータすべてを網羅するまで実行することにより、前記部分グラフを抽出し、
前記部分グラフを前記Ｎ個のスレッドそれぞれに割り当てるとき、
前記Ｎ個のスレッドそれぞれに前記切り出した部分グラフを１以上割り当てることを特徴とする請求項１に記載のクラスタリング装置。
【請求項６】
複数のＣＰＵまたは複数コアのＣＰＵを備える制御部が、
グラフデータが入力されると、前記ＣＰＵが利用可能なＮ個のスレッドを起動するステップと、
前記入力されたグラフデータから前記Ｎ個の部分グラフを抽出する部分グラフ抽出ステップと、
前記抽出したＮ個の部分グラフを前記Ｎ個のスレッドそれぞれに割り当てるスレッド割り当てステップと、
前記Ｎ個のスレッドそれぞれにおいて前記部分グラフに対するクラスタリング処理を行い、同じクラスタに属するノードを１ノードに集約するノード集約ステップとを実行し、
前記部分グラフ抽出ステップと、前記スレッド割り当てステップと、前記ノード集約ステップとを、隣接する前記ノード同士のペアでクラスタリング精度向上量が最大となるペアを発見するまで繰り返し実行することを特徴とするクラスタリング処理方法。
但し、Ｎは２以上の整数とする。
【請求項７】
複数のＣＰＵまたは複数コアのＣＰＵを備える制御部に、
グラフデータが入力されると、前記ＣＰＵが利用可能なＮ個のスレッドを起動するステップと、
前記入力されたグラフデータから前記Ｎ個の部分グラフを抽出する部分グラフ抽出ステップと、
前記抽出したＮ個の部分グラフを前記Ｎ個のスレッドそれぞれに割り当てるスレッド割り当てステップと、
前記Ｎ個のスレッドそれぞれにおいて前記部分グラフに対するクラスタリング処理を行い、同じクラスタに属するノードを１ノードに集約するノード集約ステップとを実行させ、
前記部分グラフ抽出ステップと、前記スレッド割り当てステップと、前記ノード集約ステップとを、隣接する前記ノード同士のペアでクラスタリング精度向上量が最大となるペアを発見するまで繰り返し実行させることを特徴とするプログラム。
但し、Ｎは２以上の整数とする。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラスタリング装置、クラスタリング処理方法およびそのプログラムに関する。
【背景技術】
【０００２】
従来のグラフデータのクラスタリング技術として、クラスタリング装置（コンピュータ）が、入力されたグラフデータに含まれるすべてのエッジデータを用いてクラスタリング処理対象ノードを任意の順番で選択し、クラスタリングの中間結果を生成し、集約する。さらに、このクラスタリング装置が、集約されたクラスタに対して繰り返しクラスタリング処理を行うことにより、クラスタサイズの均一化および処理対象ノードの削減を行う技術がある（例えば、非特許文献１参照）。
【０００３】
図１に示すように、クラスタリング装置２１０は、入力部２１１、制御部２１２および出力部２１３から構成される。入力部２１１は、グラフデータ記憶装置２００から読み込んだグラフデータを、クラスタリング装置２１０の備える主記憶装置（図４参照）上に展開し、制御部２１２は、図２に示すフローの処理を行い、出力部２１３に渡す。出力部２１３は、制御部２１２により得られたクラスタリング結果を任意の装置、例えば、クラスタリング結果記憶装置２２０等に出力する。
【０００４】
以下に制御部２１２における処理について説明する。
【０００５】
まず、制御部２１２は、図３（Ａ）に示すようなグラフデータが入力されると、乱数を用いてグラフデータから任意のノードを１つ選択し、その選択したノードに隣接するノードの一覧を主記憶装置上の隣接ノードキューに挿入する（Ｓ１００）。
【０００６】
次に、制御部２１２は、隣接ノードキューの中から乱数を用いて隣接ノードを選択し、当該隣接ノードキューから当該ノードを削除する（Ｓ１１０）。
【０００７】
制御部２１２は、Ｓ１００で選択されたノードとＳ１１０において選択された隣接ノードの２つのノードを同じクラスタに分類した際のクラスタリング精度向上量を計算し、隣接ノードとクラスタリング精度向上量とからなる組（｛隣接ノード：クラスタリング精度向上量｝）を生成し、主記憶装置上の処理済キューに挿入する（Ｓ１２０）。クラスタリング精度向上量は、非特許文献１に示されるように、以下の式で求められる。
【０００８】
［定義１］クラスタリング精度向上量ΔＱを以下のように計算する。
【０００９】
【数１】
2014160336.tif 000003
【００１０】
ただし、ΔＱはクラスタリング精度向上量、eijはクラスタｉとクラスタjの間に存在するエッジの数、ｍはグラフ内に存在する全エッジ数、Ｃはクラスタの集合である。
【００１１】
隣接ノードキューに隣接ノードが存在する場合、つまり、ノードの持つ隣接ノードにまだ処理していないノードがあれば（Ｓ１３０のＮｏ）、Ｓ１１０の処理に戻る。一方、隣接ノードキューに隣接ノードが存在しない場合、つまり、制御部２１２が、ノードの持つ隣接ノードをすべて処理した場合（Ｓ１３０のＹｅｓ）、クラスタリング精度向上量が最大となる隣接ノードを主記憶装置上の処理済キューから選択し、ノードと隣接ノードに対して同一のクラスタラベルを付与し、主記憶装置上のクラスタ対応表に格納する。つまり、制御部２１２は、ノードを最もクラスタリング精度向上量の高い隣接ノードと同じクラスタに分類するようにラベル付けを行う（Ｓ１４０）。なお、クラスタラベル名については任意のクラスタラベルを付与するものとする。主記憶装置上のクラスタ対応表には、ノードａの隣接ノードｂであった場合は、ハッシュマップの形式で｛クラスタラベル：ノードａ，ノードｂ｝の組が格納される。
【００１２】
次に、制御部２１２は、ノード同士のペアでクラスタリング精度向上の余地があるか否かを判定する（Ｓ１５０）、つまり、まず、制御部２１２は、主記憶装置上に展開していたグラフデータを取得し、主記憶装置上のクラスタ対応表を読み込み、ノード同士のペアでグラフデータ全体のクラスタリング精度を計算する。グラフデータ全体のクラスタリング精度は、非特許文献１に示されるように、以下の式で求められる。
【００１３】
［定義２］クラスタリング精度Ｑを以下のように計算する。
【００１４】
【数２】
2014160336.tif 000004
【００１５】
そして、制御部２１２は、前回当該処理を実行したときのクラスタリング精度との差分を求める。なお、初回実行時は前回のクラスタリング精度を０とみなして判定するものとする。上記のＳ１００からＳ１５０の処理イメージを図３（Ｂ）に示す。差分がある場合、つまり、ノード同士のペアでクラスタリング精度向上の余地がある場合は（Ｓ１５０のＮｏ）、Ｓ１００に戻る。一方、当該差分がない場合、つまり、ノード同士のペアでクラスタリング精度向上の余地がない場合には（Ｓ１５０のＹｅｓ）、制御部２１２は、各クラスタに対して、図３（Ｃ）に示すように、クラスタに含まれるノードとエッジを１ノードに集約し、主記憶装置のグラフデータを更新する（Ｓ１６０）。さらに、制御部２１２は、クラスタ（つまり集約されたノード）同士のペアでグラフデータ全体のクラスタリング精度を計算し、前回の当該処理を実行した時の差分を判定する。つまり、制御部２１２は、クラスタ同士のペアでクラスタリング精度向上の余地があるか否かを判定する（Ｓ１７０）。なお、制御部２１２は、初回実行時においては前回のクラスタリング精度を０とみなして判定するものとする。差分がある場合は（Ｓ１７０のＮｏ）、Ｓ１００に戻り、差分がない場合は（Ｓ１７０のＹｅｓ）、制御部２１２は、最終的なクラスタ対応表をクラスタリング結果記憶装置２２０に出力して当該処理を終了する。
【００１６】
上記の従来の技術は、クラスタサイズの均一化と、処理に利用するエッジ数・ノード数
の削減により、中間結果の集約による処理量を削減することが可能であり、１億ノード規
模のグラフデータのクラスタリング処理を２時間半程度で実行可能である。
【先行技術文献】
【非特許文献】
【００１７】
【非特許文献１】Louvain  method  [Vincent  D  Blondel,  Journal  of  Statistical  Mechanics:  Theory  and  Experiment,  2008年10月9日]
【発明の概要】
【発明が解決しようとする課題】
【００１８】
しかし、前記した従来技術には次のような問題点がある。すなわち、従来のクラスタリング装置は、大量のグラフデータを１つのＣＰＵ（Central  Processing  Unit）の１スレッド上の非並列環境下でクラスタリング処理を実行するため、すべてのデータを順に処理する必要がある。このため、グラフデータが増加するにつれてクラスタリング処理時間が激増する。例えば、クラスタリング処理時間は、グラフのノード数に対して指数関数的に増加し、グラフのエッジ数に対しては線形的に増加する。そこで、本発明は、前記した問題を解決し、グラフデータのクラスタリング処理時間を低減することを目的とする。
【課題を解決するための手段】
【００１９】
前記した課題を解決するため、本発明は、複数のＣＰＵ（Central  Processing  Unit）または複数コアのＣＰＵを有する制御部を備え、前記制御部は、グラフデータが入力されると、前記ＣＰＵが利用可能なＮ個のスレッドを起動し、前記入力されたグラフデータから前記Ｎ個の部分グラフを抽出し、前記抽出したＮ個の部分グラフを前記Ｎ個のスレッドそれぞれに割り当て、前記Ｎ個のスレッドそれぞれにおいて前記部分グラフに対するクラスタリング処理を行い、同じクラスタに属するノードを１ノードに集約し、前記集約されたノードからなるグラフデータに対し、前記Ｎ個の部分グラフの抽出、前記部分グラフのスレッドへの割り当て、前記部分グラフに対するクラスタリング処理および前記同じグラスタに属するノードの１ノードへの集約を、隣接する前記ノード同士のペアでクラスタリング精度向上量が最大となるペアを発見するまで繰り返すことを特徴とするクラスタリング装置とした。但し、Ｎは２以上の整数とする。なお、クラスタリング精度向上量は、[定義１]に記載した数式により計算される。
【発明の効果】
【００２０】
本発明によれば、クラスタリング装置におけるグラフデータのクラスタリング処理時間を低減することができる。
【図面の簡単な説明】
【００２１】
【図１】図１は、従来のクラスタリング装置の構成を示す図である。
【図２】図２は、従来のクラスタリング装置におけるクラスタリングの処理手順を示すフローチャートである。
【図３】図３は、従来のクラスタリングにおける集約イメージである。
【図４】図４は、本実施の形態のクラスタリング装置のハードウェア構成図である。
【図５】図５は、図４のクラスタリング装置の処理手順を示すフローチャートである。
【図６】図６は、図４のＳ２１０におけるグラフデータの分割例を示す図である。
【図７】図７は、図５のＳ２２０の処理の詳細を示すフローチャートである。
【図８】図８は、図４のＳ２１０におけるグラフデータの分割例（幅優先探索に基づく方法）を示す図である。
【図９】図９は、図４のＳ２１０におけるグラフデータの分割例（部分グラフを起点ノードから１ホップの範囲とする方法）を示す図である。
【図１０】図１０は、図４のＳ２１０におけるグラフデータの分割例（１ホップの範囲の部分グラフをまとめてスレッドに割り当てる方法）を示す図である。
【発明を実施するための形態】
【００２２】
以下、図面を参照しながら、本発明の実施の形態を説明する。以下に説明する実施の形態はあくまで一例であり、本発明は、他のさまざまな形態でも実施が可能である。以下、前記した図１の構成および図２のフローチャートをベースとして説明する。
【００２３】
クラスタリング装置２１０として用いられるコンピュータは、ＣＰＵ（Central  Processing  Unit）１００、主記憶装置１１０（メモリ）、二次記憶装置１２０（ＨＤＤ（Hard  Disk  Drive）、ＳＳＤ（Solid  State  Drive）等）および入出力装置１３０から構成される。なお、図１における制御部２１２は、ＣＰＵ１００によって実現される。また、入力部２１１により入力されたグラフデータ内の隣接ノードは主記憶装置１１０上の隣接ノードキューに展開される。さらに、処理済みキューも主記憶装置１１０上に配置される。グラフデータ記憶装置２００およびクラスタリング結果記憶装置２２０は、二次記憶装置１２０に含まれるＨＤＤやＳＳＤ等の記録媒体である。また、入力部２１１および出力部２１３は、入出力装置１３０に含まれる。
【００２４】
以下の実施の形態におけるクラスタリング装置２１０の構成は、図１と同様であるが、制御部２１２に用いられるＣＰＵ１００が、複数のＣＰＵまたはマルチコアのＣＰＵであることを特徴とする。
【００２５】
このクラスタリング装置２１０の機能を実現するプログラムは、入出力装置１３０から二次記憶装置１２０にインストールされ、起動されると、ＣＰＵ１００により複数のスレッド上で並列に実行される。クラスタリング装置２１０は、二次記憶装置１２０に格納されたグラフデータを主記憶装置上１１０に展開し、ＣＰＵ１００によりクラスタリング処理を実行する。
【００２６】
なお、クラスタリング装置２１０の機能を実現するためのプログラムに係るプログラムモジュールやプログラムデータは、プログラムに係るプログラムモジュールやプログラムデータは、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶され、ネットワークインタフェースを介してＣＰＵ１００によって読み出されてもよい。
【００２７】
以下に制御部２１２（ＣＰＵ１００）における処理について図５のフローチャートにて説明する。なお、以下の説明において、クラスタリング精度向上量は、前記した[定義１]で説明した計算式により計算されるものとする。
【００２８】
まず、ＣＰＵ１００は、図３（Ａ）に示すようなグラフデータが入力されると、Ｎ個のスレッドを起動する（Ｓ２００）。そして、ＣＰＵ１００は、グラフデータを分割し、各スレッドへの割り当てを行う（Ｓ２１０）。ここでのグラフデータの分割は、さまざまな方法が考えられるが、例えば、図６に示すように、グラフデータをランダムにＮ個のグラフ（部分グラフ）に分割する（ランダム分割方式）。
【００２９】
図５の説明に戻る。Ｓ２１０の後、ＣＰＵ１００は、分割したグラフ（部分グラフ）を各スレッドに割り当てた後、各スレッド内で並列にクラスタリング処理を実行する（Ｓ２２０）。Ｓ２２０の詳細は後記する。
【００３０】
Ｓ２２０の後、ＣＰＵ１００は、グラフデータにスレッド未割り当てのノードが存在するか否かを確認する（Ｓ２３０）。存在する場合には（Ｓ２３０のＮｏ）、Ｓ２１０に戻り、グラフデータのノードの各スレッドへの割り当てを行う。一方、スレッド未割り当てのノードが存在しない場合（Ｓ２３０のＹｅｓ）、ＣＰＵ１００は、同じクラスタに属するノードを１ノードに集約する（Ｓ２４０）。そして、最後に、クラスタ同士のペアでクラスタリング精度の向上の余地がないことが確認されると（Ｓ２５０のＹｅｓ）、つまり、隣接するノード同士のペアでクラスタリング精度向上量が最大となるペアを発見すると、ＣＰＵ１００は、処理を終了する。一方、クラスタリング精度の向上の余地がまだある場合（Ｓ２５０のＮｏ）、Ｓ２１０へ戻る。
【００３１】
このようにクラスタリング装置２１０は、グラフデータの分割とマルチスレッド化とにより、クラスタリング処理を並列に実行することで、クラスタリング処理時間を低減することができる。
【００３２】
次に、図７を用いて、図５のＳ２２０を詳細に説明する。
【００３３】
まず、ＣＰＵ１００は、各スレッドに割り当てられた部分グラフから、任意のノードuを選択する（Ｓ２２１）。そして、ＣＰＵ１００は、ノードｕの隣接ノードの中から任意の隣接ノードｖを選択し（Ｓ２２２）、ノードｕ，ｖ間でクラスタリング精度向上量を計算する（Ｓ２２３）。その後、ＣＰＵ１００は、ノードｕの隣接ノードをすべて処理したと判定すると（Ｓ２２４のＹｅｓ）、クラスタリング精度向上量が最大の隣接ノードｖをノードｕと同じクラスタにラベル付けする（Ｓ２２５）。そして、スレッドに割り当てられた部分グラフに未処理のノードがなければ（Ｓ２２６のＹｅｓ）、ＣＰＵ１００は、処理を終了する。
【００３４】
なお、Ｓ２２４において、ノードｕの隣接ノードに未処理のものがある場合（Ｓ２２４のＮｏ）、Ｓ２２２へ戻る。また、スレッドに割り当てられた部分グラフに未処理のノードがあれば（Ｓ２２６のＮｏ）、Ｓ２２２へ戻る。
【００３５】
なお、図５のＳ２１０において、ＣＰＵ１００は、入力されたグラフデータをランダムに分割するものとしたが、以下の方法により分割（抽出）し、各スレッドに割り当てるようにしてもよい。
【００３６】
（幅優先探索に基づく方法）
例えば、ＣＰＵ１００は、図８に示すように、グラフデータの中から起点ノード（クラスタリング処理対象ノード）を選択し、幅優先探索により、起点ノードから深さｄ（ｄは２以上の整数。図８の例ではｄ＝２）ホップ分の部分グラフを選択して切り出す。そして、切り出した部分グラフをスレッドに割り当てる。その後、ＣＰＵ１００は、部分グラフを切り出した残りのグラフデータの中から、再度起点ノードを選択し、この起点ノードから深さｄホップの部分グラフを幅優先探索により選択して切り出す。そして、切り出した部分グラフを別のスレッドに割り当てる。このような処理を、Ｎ個のスレッドそれぞれに対し実行する。このようにグラフデータからの抽出する部分グラフを、起点ノードから２ホップ以上の深さとすることで、クラスタリング処理において、ランダム分割方式よりも効率的にデータの割り当てを決定することができる。これにより、各スレッド間で、処理対象の部分グラフのデータサイズの偏りを低減できるので、クラスタリング装置における、グラフデータ全体のクラスタリング処理時間を低減できる。
【００３７】
（部分グラフを起点ノードから１ホップの範囲とする方法）
例えば、ＣＰＵ１００は、図９に例示するように、グラフデータの中から切り出した１ホップ分の部分グラフを各スレッドに割り当てる。つまり、ＣＰＵ１００は、グラフデータの中から起点ノードを選択し、この起点ノードから１ホップの範囲内の部分グラフを切り取り、切り出した部分グラフをスレッドに割り当てる。そして、ＣＰＵ１００は、部分グラフを切り出した残りのグラフデータの中から、再度起点ノードを選択し、この起点ノードから１ホップの範囲の部分グラフを切り取り、切り出した部分グラフを別のスレッドに割り当てる。ＣＰＵ１００は、このような処理を、グラフデータのノードすべてに対して実行する。つまり、ＣＰＵ１００は、グラフデータから抽出する部分グラフを、クラスタリング精度向上量の計算に必要な最小限の範囲である１ホップの範囲とする。よって、グラフデータから抽出される部分グラフの数は、前記した幅優先探索の場合に比べて多数となる。よって、ＣＰＵ１００が多数のスレッドを用いる場合に、クラスタリング処理時間をより低減できる。
【００３８】
（１ホップの範囲の部分グラフをまとめてスレッドに割り当てる方法）
例えば、ＣＰＵ１００は、図１０に例示するように、グラフデータを1ホップ単位で分割する。つまり、ＣＰＵ１００は、グラフデータの中から起点ノードを選択し、この起点ノードから１ホップの範囲内の部分データを切り出す処理を、グラフデータすべてを網羅するまで実行する。そして、ＣＰＵ１００は分割後、１以上の部分グラフをまとめて各スレッドに割り当てる。このように、ＣＰＵ１００は、グラフデータをすべて分割してから、つまり、グラフデータすべてを網羅するような部分グラフを抽出してから、各スレッドへの割り当てを行うので、クラスタリング処理時間をさらに低減することができる。例えば、図１０のスレッドＡにおいて、部分グラフａのクラスタリング処理を実行した後、すぐに次の部分グラフ（部分グラフｂ）のクラスタリング処理に取りかかることができるので、クラスタリング処理時間をさらに低減することができる。
【符号の説明】
【００３９】
１００  ＣＰＵ
１１０  主記憶装置
１２０  二次記憶装置
１３０  入出力装置
２００  グラフデータ記憶装置
２１０  クラスタリング装置
２１１  入力部
２１２  制御部
２１３  出力部
２２０  クラスタリング結果記憶装置
【図１】
2014160336.tif 000005
【図２】
2014160336.tif 000006
【図３】
2014160336.tif 000007
【図４】
2014160336.tif 000008
【図５】
2014160336.tif 000009
【図６】
2014160336.tif 000010
【図７】
2014160336.tif 000011
【図８】
2014160336.tif 000012
【図９】
2014160336.tif 000013
【図１０】
2014160336.tif 000014