以下、図面と共に本発明に係るクラスタリング装置及びクラスタリング方法の実施形態について詳細に説明する。なお、図面の説明においては同一要素には同一符号を付し、重複する説明を省略する。
図1に本実施形態に係るクラスタリング装置100の機能構成を示す。クラスタリング装置100は、複数のベクトルを示すベクトルデータを入力して、入力したベクトルデータのそれぞれを複数のクラスタの何れかに分類する装置である。クラスタリング装置100は、具体的には、ワークステーションやPC(Personal Computer)等の装置に相当する。
図1に示すようにクラスタリング装置100は、入力部101と、クラスタリング実行部102と、ハッシュ値算出部103と、LSH算出用正規乱数ベクトル記憶部104と、LSH算出用切片記憶部105と、LSH算出用一様乱数ベクトル記憶部106と、LSHパラメータ記憶部107と、クラスタ候補絞込部108と、LSHテーブル作成部109とを備えて構成されている。
入力部101は、クラスタリング対象の複数の対象ベクトルのベクトルデータを入力する入力手段である。入力部101は、例えば、クラスタリング装置100に接続されると共にベクトルデータを格納した装置200から、ベクトルデータを取得することでベクトルデータの入力を行う。なお、ベクトルデータの入力は、上記以外でも外部入力(例えば、運用者による入力)等の任意の方法で行うこととしてもよい。クラスタリング対象のベクトルデータを図2に示す。図2において1つの行のデータが1つのベクトルデータに相当する。図2における「1:12.4」との記載は、ベクトルの1つ目の属性(要素)の値が12.4であることを示す(本実施形態におけるベクトル表記は、全てこの表記である)。入力部101に入力される複数のベクトルデータは、全て同じ次元数のものである。例えば、図2に示すベクトルデータは1000次元のベクトルである。入力部101は、入力したベクトルデータをクラスタリング実行部102に出力する。
クラスタリング実行部102は、入力部101によって入力された複数のベクトルデータそれぞれを予め設定された数のクラスタの何れかに分類する分類手段である。即ち、クラスタリング実行部102は、ベクトルデータにクラスタを設定する。具体的には、クラスタリング実行部102は、分類を行うため以下の機能を有している。ここで、対象ベクトルを分類するクラスタの数は、設定ファイル又は外部入力等によって予め最大クラスタ数として設定されており、クラスタリング実行部102に記憶されている。最大クラスタ数は、1以上の整数が指定される。各クラスタには、0〜(最大クラスタ数−1)の整数がIDとして付与されている。
クラスタリング実行部102は、入力部101から複数のベクトルデータが入力されると、各ベクトルデータを任意の方法で各クラスタの何れかに分類する。例えば、クラスタリング実行部102は、ベクトルデータ毎に0〜(最大クラスタ数−1)のランダムな整数を選択し、選択した整数がクラスタIDとなるクラスタに当該ベクトルデータを分類する。
また、クラスタリング実行部102は、分類されたベクトルデータに基づいて、各クラスタを代表する代表ベクトルを算出する代表ベクトル算出手段である。具体的には、クラスタリング実行部102は、代表ベクトルとして各クラスタの中心ベクトルを計算する。ここで、クラスタのIDがiであるクラスタをC
i、当該クラスタの中心ベクトルをc
i、対象ベクトルのk番目の成分(要素値)をv
kとする。クラスタリング実行部102は、当該クラスタの中心ベクトルc
iのk番目の成分(要素値)c
i,kは下式に基づいて計算する。
なお、中心ベクトルは、上記以外の式によって算出されてもよい。例えば、クラスタに属する対象ベクトルの平均としてもよい。
クラスタリング実行部102は、最初の対象ベクトルのクラスタへの分類に基づいて上記の中心ベクトルの算出を行う。また、対象ベクトルのクラスタへの分類は、後述するように繰り返し行われる。クラスタリング実行部102は、対象ベクトルのクラスタへの再分類が行われた後にも中心ベクトルの算出を行う。
クラスタリング実行部102は、入力部101によって入力された複数の対象ベクトルに対してハッシュ値を算出させるため、対象ベクトルのベクトルデータをハッシュ値算出部103に出力する。また、クラスタリング実行部102は、算出した中心ベクトルに対してハッシュ値を算出させるため、中心ベクトルのベクトルデータをハッシュ値算出部103に出力する。その際、クラスタリング実行部102は、最大クラスタ数をハッシュ値算出部103に通知する。クラスタリング実行部102は、ハッシュ値算出部103によって算出されたハッシュ値を受け取る。クラスタリング実行部102は、当該ハッシュ値に基づいた処理を行うが、それについてはハッシュ値の算出の説明の後に説明する。
ハッシュ値算出部103は、クラスタリング実行部102から入力されたベクトルに対してハッシュ値を算出する(ベクトルをハッシュ値に変換する)手段である。具体的には、ハッシュ値算出部103は、複数の対象ベクトルそれぞれに対してハッシュ値を算出する第1ハッシュ値算出手段である。また、ハッシュ値算出部103は、各クラスタの中心ベクトルそれぞれに対してハッシュ値を算出する第2ハッシュ値算出手段である。ここで算出されるハッシュ値は、ベクトルが類似していると類似の値となるハッシュ値である。また、このハッシュ値は、ベクトルの方向が類似していると類似の値となるハッシュ値となるものであってもよい。
この際、ハッシュ値算出部103は、1つのベクトルに対して、互いに異なる系列の(後述するようにテーブルID毎の)複数のハッシュ値を算出することとしてもよい。また、ハッシュ値算出部103は、1つのベクトルに対して、(後述するようにコードID毎の)複数の乱数ベクトルとの類似度を算出して、当該類似度に基づいて1つのハッシュ値を算出してもよい。
具体的には、ハッシュ値算出部103は、LSH(Locality Sensitive Hashing)アルゴリズムに準じて以下のようにハッシュ値を算出する。また、ハッシュ値の算出には、LSH算出用正規乱数ベクトル記憶部104、LSH算出用切片記憶部105、LSH算出用一様乱数ベクトル記憶部106及びLSHパラメータ記憶部107に予め記憶されている情報が用いられる。
LSH算出用正規乱数ベクトル記憶部104は、ハッシュ値を算出するための正規乱数ベクトルを記憶する手段である。LSH算出用正規乱数ベクトル記憶部104に記憶されている情報を図3に示す。正規乱数ベクトルは、要素値(ベクトルの各成分)を正規乱数としたベクトルである。要素値は、例えば、平均0、分散1の乱数とされる。また、正規乱数ベクトルの次元数は、対象ベクトルの次元数と同じにされる。図3に示すように正規乱数ベクトルには、テーブルIDとコードIDとが対応付けられる。
テーブルIDは、算出されるハッシュ値の系列を示すものである。1つのテーブルIDに対応付けられた正規乱数ベクトルは、1つのLSHテーブルを構成する。これにより、テーブルIDの数(LSHテーブルの数)のハッシュ値が算出されえる。テーブルIDは、1からテーブルIDの数までの整数値とされる。コードIDは、全てのテーブルIDに対して同じ数だけ対応付けられる。即ち、1つのテーブルIDに対して、コードIDの数だけ正規乱数ベクトルが対応付けられる。コードIDは、複数であってもよい。この場合、1つのハッシュ値を算出するのに複数の正規乱数ベクトルが用いられる。コードIDは、1からコードIDの数までの整数値とされる。テーブルID及びコードIDの数は、予め設定されている。LSH算出用正規乱数ベクトル記憶部104は、その数に応じたテーブルID及びコードID、並びにそれらに対応付けられる正規乱数ベクトルを予め(ハッシュ値算出の段階で)記憶している。
LSH算出用切片記憶部105は、ハッシュ値を算出するための切片の値を記憶する手段である。LSH算出用切片記憶部105に記憶されている情報を図4に示す。切片の値は、0以上で、後述するLSHパラメータの値未満の少数乱数である。図4に示すように切片の値には、テーブルIDとコードIDとが対応付けられる。LSH算出用切片記憶部105は、各テーブルID及び各コードID、並びにそれらに対応付けられる切片の値を予め(ハッシュ値算出の段階で)記憶している。
LSH算出用一様乱数ベクトル記憶部106は、ハッシュ値を算出するための一様乱数ベクトルを記憶する手段である。LSH算出用一様乱数ベクトル記憶部106に記憶されている情報を図5に示す。一様乱数ベクトルは、要素値(ベクトルの各成分)を一様乱数としたベクトルである。要素値は、例えば、整数の乱数とされる。また、一様乱数ベクトルの次元数は、コードIDの数と同じにされる。本実施形態の例では、コードIDの数及び一様乱数ベクトルの次元数は10である。図5に示すように正規乱数ベクトルには、テーブルIDが対応付けられる。LSH算出用一様乱数ベクトル記憶部106は、各テーブルID、及び各テーブルIDに対応付けられる一様乱数ベクトルを予め(ハッシュ値算出の段階で)記憶している。
LSHパラメータ記憶部107は、ハッシュ値を算出するためのLSHパラメータを記憶する手段である。LSHパラメータ記憶部107に記憶されている情報を図6に示す。LSHパラメータは、予め設定される正の値である。
ハッシュ値算出部103によるハッシュ値の算出について説明する。ハッシュ値算出部103は、クラスタリング実行部102から、ハッシュ値の算出対象のベクトルデータと最大クラスタ数を入力する。当該入力が行われるとハッシュ値算出部103は、ハッシュ値の算出を開始する。ハッシュ値算出部103は、ハッシュ値を算出する際に、LSH算出用正規乱数ベクトル記憶部104、LSH算出用切片記憶部105、LSH算出用一様乱数ベクトル記憶部106及びLSHパラメータ記憶部107に記憶されている上記の情報を読み出す。
ハッシュ値算出部103は、ハッシュ値の算出対象のベクトルと、正規乱数ベクトルとのコサイン類似度を算出する。ハッシュ値算出部103は、2つのベクトルv
1,v
2のコサイン類似度cos(v
1,v
2)を下式に基づいて計算する。
ここでkはベクトルの各成分の属性(添え字)、Dはベクトルの次元数、v
i,kはベクトルv
iの成分kの値を表す。次に、ハッシュ値算出部103は、算出したコサイン類似度と指定された定数Aとの積を求める。定数Aは、1以上の値で予め設定される。指定された定数Aは、設定ファイル又は外部入力等によって予めハッシュ値算出部103に記憶されている。
次に、ハッシュ値算出部103は、コサイン類似度の算出に用いた正規乱数ベクトルに係るテーブルID及びコードIDに対応付けられた切片の値と、上記で算出した積との和を求める。次に、ハッシュ値算出部103は、算出した和のLSHパラメータによる商を求める。即ち、ハッシュ値算出部103は、以下の式により上記の値を算出する。
(cos(v1,v2)×A+切片)/LSHパラメータ
ハッシュ値算出部103は、1つのテーブルIDに対応付けられた全てのコードIDに対して上記の値であるLSHコードを求める(LSHコードへの変換を行う)。ハッシュ値算出部103は、求められたLSHコードからコードベクトルを構成する。コードベクトルは、その属性(添え字)がコードIDである成分を上記の算出した値として設定されたベクトルである。例えば、コードIDが1の正規乱数ベクトルが用いられて算出された値は、コードベクトルの1番目の成分(要素)の値となる。従って、コードベクトルの次元数は、コードIDの数となる。
ハッシュ値算出部103は、得られたコードベクトルと一様乱数ベクトルとのコサイン類似度を算出する。この算出にも、上記の式が用いられる。また、ここで用いられる一様乱数ベクトルは、コードベクトルの算出に用いた正規乱数ベクトルに係るテーブルIDに対応付けられたものである。次に、ハッシュ値算出部103は、算出したコサイン類似度と最大クラスタ数との積を算出する。次に、ハッシュ値算出部103は、算出した積の小数点以下を切り捨てて整数値とし、当該整数値をハッシュ値とする。なお、積を整数値とする処理は、必ずしも切り捨てでなくてもよく、切り上げや四捨五入等でもよい。
上記のように得られたハッシュ値は、テーブルIDに対応するものである。ハッシュ値算出部103は、全てのテーブルIDに対してハッシュ値を求める。但し、必ずしも全てのテーブルIDに対してハッシュ値を求める必要はなく、予め指定(設定)されたテーブルID(1つでも複数でもよい)に対してのみハッシュ値を求めることとしてもよい。
上記のようにして求められたハッシュ値は、異なるベクトルの入力に対して同じハッシュ値を出力することがある。更に、類似したベクトルを入力すると同じハッシュ値あるいは近い値のハッシュ値を出力する可能性が高い。なお、上述したコサイン類似度を用いてハッシュ値を算出する場合には、ベクトルの方向が類似している場合に同じハッシュ値あるいは近い値のハッシュ値を出力する可能性が高い。即ち、この場合、類似したベクトルとは、ベクトルの方向が類似していることを指す。なお、ハッシュ値の算出方法を変えることで、ベクトルの方向以外の類似関係(例えば、ベクトルの大きさも加味した類似関係)を反映したハッシュ値とすることができる。ハッシュ値算出部103は、算出したハッシュ値をクラスタリング実行部102に出力する。
クラスタリング実行部102は、対象ベクトルのハッシュ値と、各クラスタの中心ベクトルのハッシュ値とをハッシュ値算出部103から入力する。上述したようにこのハッシュ値は、例えば、テーブルIDの数(LSHテーブル数)個ある。クラスタリング実行部102は、各対象ベクトルが分類されるべきクラスタの候補を特定するため、対象ベクトルのハッシュ値と、各クラスタの中心ベクトルのハッシュ値とをクラスタ候補絞込部108に出力する。なお、各クラスタの中心ベクトルのハッシュ値は、クラスタIDが対応付けられている。また、各ハッシュ値にはテーブルIDが対応付けられており、何れのLSHテーブルによるハッシュ値か把握できるようになっている。
クラスタ候補絞込部108は、クラスタリング実行部102から入力された対象ベクトルのハッシュ値と、各クラスタの中心ベクトルのハッシュ値とを比較して、当該対象ベクトルが分類される候補となるクラスタを特定する候補特定手段である。即ち、クラスタ候補絞込部108は、各対象ベクトルについて、分類されるべきクラスタの候補の絞込みを行う。
クラスタ候補の絞込みは、対象ベクトル毎に行われる。クラスタ候補絞込部108は、対象ベクトルのクラスタ候補集合を空集合に設定する。次に、クラスタ候補絞込部108は、以下のように、LSHテーブルによるハッシュ値に基づきクラスタ候補集合にクラスタ候補を追加する。なお、以下の処理は、テーブルID(LSHテーブル)毎に行われる。
まず、クラスタ候補絞込部108は、対象ベクトルのハッシュ値と中心ベクトルのハッシュ値とを比較し、ハッシュ値が同じ中心ベクトルがあるか否か(ハッシュ値が同じクラスタが存在するか否か)を判定する。ハッシュ値が同じ中心ベクトルがある(ハッシュ値が同じクラスタが存在する)と判定された場合、クラスタ候補絞込部108は、当該中心ベクトルに係るクラスタを全てクラスタ候補集合に追加する。具体的には、クラスタIDをクラスタ候補集合に追加する。
ハッシュ値が同じ中心ベクトルがない(ハッシュ値が同じクラスタが存在しない)と判定された場合、クラスタ候補絞込部108は、中心ベクトルのハッシュ値から、対象ベクトルのハッシュ値と最も近いハッシュ値を探索する。この探索は、例えば中心ベクトルのハッシュ値一覧から二分探索を行うことで行われる。クラスタ候補絞込部108は、探索したハッシュ値の中心ベクトルに係るクラスタをクラスタ候補集合に追加する。
クラスタ候補絞込部108は、上記の処理をハッシュ値が算出されている全てのテーブルIDについて行う。即ち、クラスタ候補絞込部108は、同一の系列の対象ベクトルのハッシュ値と中心ベクトルのハッシュ値とを比較する。また、クラスタ候補絞込部108は、上記の処理を全ての対象ベクトルについて行う。クラスタ候補絞込部108は、対象ベクトル毎のクラスタ候補集合をクラスタリング実行部102に出力する。
クラスタリング実行部102は、クラスタ候補絞込部108から入力されたクラスタ候補集合に含まれるクラスタのうちの何れかに、対象ベクトルを再分類する再分類手段である。即ち、クラスタリング実行部102は、ベクトルデータにクラスタを再設定する。具体的には、クラスタリング実行部102は、クラスタ候補集合に含まれるクラスタの中心ベクトルと対象ベクトルとの類似度を算出して、当該類似度に基づいて対象ベクトルを再分類する。類似度としては、例えば上述したコサイン類似度を用いることができる。例えば、クラスタリング実行部102は、算出した類似度が最も高くなる中心ベクトルを当該対象ベクトルが再分類されるクラスタとして設定する。なお、クラスタ候補集合に含まれるクラスタが1つのみである場合には、中心ベクトルと対象ベクトルとの類似度の算出は行わずにそのクラスタに対象ベクトルを分類させることとしてもよい。
クラスタリング実行部102は、当該再分類を実行すると対象ベクトルが再分類されたクラスタの中心ベクトルを再度、計算する。計算した中心ベクトルに基づいて、クラスタリング実行部102、ハッシュ値算出部103及びクラスタ候補絞込部108は、上述した処理(中心ベクトルの計算、クラスタ候補の絞込、対象ベクトルのクラスタの再分類)を行う。この繰り返しは、回数が予め設定されている。繰り返しの回数は、設定ファイル又は外部入力等によって予めクラスタリング実行部102に記憶されている。クラスタリング実行部102は、上記の処理が設定された回数の繰り返されたと判断するとその時点での対象ベクトルが分類されているクラスタを示す情報を出力する。出力される情報は、例えば、図7に示すように対象ベクトルに分類されたクラスタを示すクラスタIDが対応付けられた情報である。また、出力される情報には、上記の情報に加えて各クラスタの中心ベクトルの情報が含まれていてもよい。この出力としては、例えば、運用者が認識できるように表示出力を行うこととしてもよいし、別の装置やモジュールに送信することとしてもよい。
なお、上記では、予め設定された回数繰り返すとしているが、例えば、繰り返しを行ってもクラスタに分類される対象ベクトルに変化がない場合には、その時点でクラスタへの分類を終了してクラスタリングの結果を出力することとしてもよい。
LSHテーブル作成部109は、ハッシュ値を生成するために用いられるLSH算出用正規乱数ベクトル記憶部104、LSH算出用切片記憶部105、LSH算出用一様乱数ベクトル記憶部106及びLSHパラメータ記憶部107に記憶されている情報を取得又は生成する手段である。
LSHテーブル作成部109は、例えば、クラスタリング装置100に接続されると共にLSHパラメータを格納した装置300から、LSHパラメータを取得する。なお、LSHパラメータの取得は、上記以外でも外部入力(例えば、運用者による入力)等の任意の方法で行うこととしてもよい。LSHテーブル作成部109は、取得したLSHパラメータをLSHパラメータ記憶部107に格納する。
LSHテーブル作成部109は、対象ベクトルの次元数と同じ次元数の正規乱数ベクトルを生成する。生成する正規乱数ベクトルの個数は、LSHテーブルの数(テーブルIDの数)及びLSHコードの数(コードIDの数)に応じたものであり、具体的には、LSHテーブルの数とLSHコードの積である。正規乱数の次元数、LSHテーブルの数及びLSHコードの数は、設定ファイル又は外部入力等によって予め設定されており、LSHテーブル作成部109に記憶されている。具体的には、LSHテーブル作成部109は、平均0、分散1の正規乱数を生成して、生成した値を正規乱数ベクトルの各成分に設定する。LSHテーブル作成部109は、生成した正規乱数ベクトルをテーブルID及びコードIDの組に対応付けてLSH算出用正規乱数ベクトル記憶部104に格納する。
LSHテーブル作成部109は、切片の値を生成する。生成する切片の値の個数は、LSHテーブルの数(テーブルIDの数)及びLSHコードの数(コードIDの数)に応じたものであり、具体的には、LSHテーブルの数とLSHコードの積である。具体的には、LSHテーブル作成部109は、切片の値として、0以上かつLSHパラメータの値未満の少数乱数を生成する。LSHテーブル作成部109は、生成した切片の値をテーブルID及びコードIDの組に対応付けてLSH算出用切片記憶部105に格納する。
LSHテーブル作成部109は、次元数がLSHコードの数である一様乱数ベクトルを生成する。生成する一様乱数ベクトルの個数は、LSHテーブルの数(テーブルIDの数)である。具体的には、LSHテーブル作成部109は、整数の乱数を生成して、生成した値を一様乱数ベクトルの各成分に設定する。LSHテーブル作成部109は、生成した一様乱数ベクトルをテーブルIDに対応付けてLSH算出用一様乱数ベクトル記憶部106に格納する。
なお、LSHテーブル作成部109による上記の処理は、対象ベクトルのクラスタリングの処理以前に行われる。以上が、本実施形態に係るクラスタリング装置100の機能構成である。
図8に本実施形態に係るクラスタリング装置100のハードウェア構成を示す。図8に示すようにクラスタリング装置100は、CPU(Central Processing Unit)1001、主記憶装置であるRAM(RandomAccess Memory)1002及びROM(Read Only Memory)1003、通信を行うための通信モジュール1004、並びにハードディスク等の補助記憶装置1005等のハードウェアを備えるコンピュータを含むものとして構成される。これらの構成要素がプログラム等により動作することにより、上述したクラスタリング装置100の機能が発揮される。以上が、本実施形態に係るクラスタリング装置100の構成である。
引き続いて、図9〜図12のフローチャートを用いて、本実施形態に係るクラスタリング装置100で実行される処理を説明する。まず、図9のフローチャートを用いて、クラスタリング装置100の動作方法である、対象ベクトルをクラスタリングするクラスタリング方法全体の処理について説明する。
本処理では、まず、入力部101によって、クラスタリング対象の複数の対象ベクトルのベクトルデータが入力(取得)される(S01、入力ステップ)。入力されたベクトルデータは、入力部101からクラスタリング実行部102に出力される。続いて、クラスタリング実行部102によって、予め設定される最大クラスタ数のクラスタの何れかに各対象ベクトルが分類される(S02、分類ステップ)。続いて、クラスタリング実行部102によって、分類されたベクトルデータに基づいて各クラスタの中心ベクトルが算出される(S03、代表ベクトル算出ステップ)。
続いて、対象ベクトルのベクトルデータが、クラスタリング実行部102からハッシュ値算出部103に出力される。また、最大クラスタ数が、クラスタリング実行部102からハッシュ値算出部103に通知される。続いて、ハッシュ値算出部103によって、クラスタリング実行部102から入力された対象ベクトルに対してハッシュ値が算出される(S04、第1ハッシュ値算出ステップ)。このハッシュ値は、上述したようにLSHテーブル(テーブルID)毎に算出される。算出されたハッシュ値は、ハッシュ値算出部103からクラスタリング実行部102に入力される。
続いて、中心ベクトルのベクトルデータが、クラスタリング実行部102からハッシュ値算出部103に出力される。続いて、ハッシュ値算出部103によって、クラスタリング実行部102から入力された中心ベクトルに対してハッシュ値が算出される(S05、第2ハッシュ値算出ステップ)。算出されたハッシュ値は、ハッシュ値算出部103からクラスタリング実行部102に入力される。
続いて、対象ベクトルのハッシュ値と、各クラスタの中心ベクトルのハッシュ値とが、クラスタリング実行部102からクラスタ候補絞込部108に出力される。続いて、クラスタ候補絞込部108によって、対象ベクトルのハッシュ値と、各クラスタの中心ベクトルのハッシュ値とが比較されて、当該比較に基づき当該対象ベクトルが分類される候補となるクラスタが特定される(S06、候補特定ステップ)。特定されたクラスタの情報は、対象ベクトル毎のクラスタ候補集合としてクラスタ候補絞込部108からクラスタリング実行部102に出力される。
続いて、クラスタリング実行部102によって、クラスタ候補集合に含まれるクラスタの中心ベクトルと対象ベクトルとの類似度に基づいて、対象ベクトルが当該クラスタのうちの何れかに再分類される(S07、再分類ステップ)。続いて、クラスタリング実行部102によって、再分類されたクラスタの中心ベクトルが再度、計算される(S08、代表ベクトル算出ステップ)。続いて、S05〜S08の処理が一定回数繰り返される。ここで、S05における中心ベクトルのハッシュ値は、繰り返しの前のS08において計算されたものが用いられて算出される。
一定回数の繰り返しが終了すると、クラスタリング実行部102によって、その時点での対象ベクトルが分類されているクラスタを示す情報、及び各クラスタの中心ベクトルの情報が出力される(S09)。以上が、対象ベクトルをクラスタリングするクラスタリング方法全体の処理である。
引き続いて、図10のフローチャートを用いて、ハッシュ値算出部103によるベクトルのハッシュ値を算出する処理(図9のS04又はS05の処理に相当)について説明する。以下のハッシュ値の算出はテーブルID毎に行われる。即ち、テーブルID毎に以下の処理が繰り返され、テーブルID毎のハッシュ値が算出される。なお、上述したように予め指定されたテーブルIDについてのみハッシュ値が算出されてもよい。
まず、クラスタリング実行部102からハッシュ値算出部103に、ハッシュ値の算出対象のベクトルデータ(対象ベクトル又は中心ベクトル)と最大クラスタ数が入力される(S11)。これ以降の処理は、全てハッシュ値算出部103によるものである。続いて、LSH算出用正規乱数ベクトル記憶部104、LSH算出用切片記憶部105、LSH算出用一様乱数ベクトル記憶部106及びLSHパラメータ記憶部107に記憶されている、乱数ベクトル、切片の値、一様乱数ベクトル及びLSHパラメータが取得される(S12)。
以下のS13〜S16の計算は、テーブルIDに対応付けられた全てのコードIDに対して行われる。即ち、S13〜S16の計算は、コードIDが変更されて繰り返し行われる。続いて、ハッシュ値の算出対象のベクトルと、正規乱数ベクトルとのコサイン類似度が算出される(S13)。この際、コサイン類似度算出対象のテーブルID及びコードIDは、上記の算出の前に予め特定されている。続いて、算出されたコサイン類似度と指定された定数との積が算出される(S14)。続いて、上記で算出した積と、コサイン類似度の算出に用いられた正規乱数ベクトルに係るテーブルID及びコードIDに対応付けられた切片の値との和が算出される(S15)。続いて、算出された和のLSHパラメータによる商が算出される(S16)。
全てのコードIDに対して上記の値(LSHコード)が算出されると、その属性(添え字)がコードIDである成分を、当該値を要素としたベクトルであるコードベクトルが生成される。続いて、コードベクトルと一様乱数ベクトルとのコサイン類似度が算出される(S17)。続いて、算出されたコサイン類似度と最大クラスタ数との積が算出される(S18)。続いて、算出された値の小数点以下が切り捨てられて整数値とされ、当該整数値がハッシュ値とされる。得られたハッシュ値は、ハッシュ値算出部103からクラスタリング実行部102に出力される(S19)。以上が、ハッシュ値算出部103によるベクトルのハッシュ値を算出する処理である。
引き続いて、図11のフローチャートを用いて、クラスタ候補絞込部108による対象ベクトルが分類される候補となるクラスタを特定する処理(分類されるべきクラスタの候補の絞込みの処理、図9のS06の処理に相当)について説明する。
まず、クラスタリング実行部102からクラスタ候補絞込部108に、対象ベクトルのハッシュ値と、各クラスタの中心ベクトルのハッシュ値とが入力される(S21)。なお、各クラスタの中心ベクトルのハッシュ値は、クラスタIDが対応付けられている。これ以降の処理は、全てクラスタ候補絞込部108によるものである。以下のハッシュ値の算出は対象ベクトル毎に行われる。即ち、対象ベクトル毎に以下の処理が繰り返され、対象ベクトル毎のクラスタ候補集合が特定される。
続いて、対象ベクトルのクラスタ候補集合が空集合に設定される(S22)。以下のS23〜S26の計算は、ハッシュ値が算出されている全てのテーブルID(LSHテーブル)に対して行われる。即ち、S23〜S26の計算は、テーブルIDが変更されて繰り返し行われる。続いて、対象ベクトルのハッシュ値と中心ベクトルのハッシュ値とが比較され、ハッシュ値が同じ中心ベクトルがあるか否か(ハッシュ値が同じクラスタが存在するか否か)が判定される(S23)。ハッシュ値が同じ中心ベクトルがある(ハッシュ値が同じクラスタが存在する)と判定された場合(S23のYes)、当該中心ベクトルに係るクラスタが全てクラスタ候補集合に追加される(S24)。
ハッシュ値が同じ中心ベクトルがない(ハッシュ値が同じクラスタが存在しない)と判定された場合(S23のNo)、中心ベクトルのハッシュ値から、対象ベクトルのハッシュ値と最も近いハッシュ値が探索される(S25)。探索されたハッシュ値(近傍ハッシュ値)の中心ベクトルに係るクラスタがクラスタ候補集合に追加される(S26)。
ハッシュ値が算出されている全てのテーブルID(LSHテーブル)に対して上記の処理が終了すると、対象ベクトルが分類される候補となるクラスタを示す情報としてクラスタ候補集合が、クラスタ候補絞込部108からクラスタリング実行部102に出力される(S27)。以上が、クラスタ候補絞込部108による対象ベクトルが分類される候補となるクラスタを特定する処理である。
引き続いて、図12のフローチャートを用いて、LSHテーブル作成部109によるハッシュ値を生成するために用いられる情報を取得又は生成する処理について説明する。本処理は、対象ベクトルのクラスタリングの処理以前に行われる。
本処理では、まず、LSHパラメータが取得されてLSHパラメータ記憶部107に登録(格納)される(S31)。以下のS32〜S36の処理は、予め設定されたLSHテーブルの数(テーブルIDの数)、繰り返し行われる。また、S32〜S34の処理は、予め設定されたLSHコードの数(コードIDの数)、繰り返し行われる。
続いて、平均0、分散1の正規乱数が生成されて、生成された値が正規乱数ベクトルの各成分に設定される(S32)。続いて、切片の値として、0以上かつLSHパラメータの値未満の少数乱数が生成される(S33)。生成された正規乱数ベクトル及び切片の値は、それぞれテーブルID及びコードIDの組に対応付けられてLSH算出用正規乱数ベクトル記憶部104及びLSH算出用切片記憶部105に登録(格納)される(S34)。テーブルID及びコードIDは、1から開始され繰り返し毎に1増加した値とされる。コードIDは、テーブルIDが更新されると1から開始される。
続いて、整数の乱数が生成して、生成された値が一様乱数ベクトルの各成分に設定される(S35)。生成した一様乱数ベクトルは、テーブルIDに対応付けられてLSH算出用一様乱数ベクトル記憶部106に登録(格納)される(S36)。以上が、LSHテーブル作成部109によるハッシュ値を生成するために用いられる情報を取得又は生成する処理である。また、以上が、本実施形態に係るクラスタリング装置100で実行される処理である。
上述したように、本実施形態では、ハッシュ値の比較に基づいて対象ベクトルが分類される候補となるクラスタが特定される。従って、対象ベクトルをクラスタに分類する際に全てのクラスタの中心ベクトルとのベクトル同志の比較を行う必要がなく、従来のクラスタリングに比べてベクトル同志の比較を減らすことができる。即ち、ハッシュ値を用いたクラスタの絞込みによって計算時間の高速化を行うことができる。これにより、本実施形態によれば、ベクトル集合の要素数やクラスタ数が多くなった場合でもベクトル集合のクラスタリングの計算を効率的に行うことができる。具体的には、クラスタ数に依存しない、ベクトル集合の要素数に比例した計算時間でクラスタリングすることが可能になる。
また、本実施形態のようにハッシュ値は、例えば、コサイン類似度を用いた、ベクトルの方向が類似していると類似の値となるものとすることができる。この構成によれば、ベクトルの方向の類似関係に基づくクラスタリングを行う際に、ベクトル集合の要素数やクラスタ数が多くなった場合でもベクトル集合のクラスタリングの計算を効率的に行うことができる。但し、ハッシュ値は、必ずしもベクトルの方向の類似関係を反映するものでなくてもよく、何らかの観点においてのベクトルの類似関係を反映するものであってもおい。
本実施形態のように、対象ベクトルのクラスタの再分類は、例えば、コサイン類似度等のようなクラスタの中心ベクトルと対象ベクトルとの類似度に基づいて行われてもよい。この構成によれば、クラスタの再分類を適切に行うことができる。
本実施形態のように、複数のLSHテーブル(テーブルID)に応じた複数のハッシュ値を用いてクラスタ候補の絞込みを行うこととしてもよい。この構成によれば、複数のハッシュ値から絞込みが行われるのでクラスタ候補の絞込みの段階で対象ベクトルが分類されるべきクラスタを除外することを防ぐことができ、適切に対象ベクトルが分類される候補となるクラスタを特定することができる。但し、テーブルIDは必ずしも複数である必要はなく、1つであってもよい(その場合、テーブルIDを設ける必要はない)。
本実施形態のように、複数のLSHコード(コードID)に応じた複数の一様乱数ベクトルを用いてハッシュ値を算出することとしてもよい。この構成によれば、偏りがないより適切なハッシュ値を求めることができ、より適切に本発明に係るクラスタリングを行うことができる。但し、コードIDは必ずしも複数である必要はなく、1つであってもよい(その場合、コードIDを設ける必要はない)。