IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電信電話株式会社の特許一覧
特許7070093クラスタリング装置、クラスタリング方法及びプログラム
<>
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図1
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図2
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図3
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図4
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図5
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図6
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図7
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図8
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図9
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図10
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図11
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図12
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図13
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図14
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図15
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図16
  • 特許-クラスタリング装置、クラスタリング方法及びプログラム 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-05-10
(45)【発行日】2022-05-18
(54)【発明の名称】クラスタリング装置、クラスタリング方法及びプログラム
(51)【国際特許分類】
   G06F 16/906 20190101AFI20220511BHJP
   G06F 17/16 20060101ALI20220511BHJP
【FI】
G06F16/906
G06F17/16 P
【請求項の数】 7
(21)【出願番号】P 2018100870
(22)【出願日】2018-05-25
(65)【公開番号】P2019204436
(43)【公開日】2019-11-28
【審査請求日】2020-08-19
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100124844
【弁理士】
【氏名又は名称】石原 隆治
(72)【発明者】
【氏名】青山 一生
(72)【発明者】
【氏名】服部 正嗣
【審査官】甲斐 哲雄
(56)【参考文献】
【文献】特開2015-138462(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
オブジェクトの特徴を表すオブジェクト特徴ベクトルを複数のクラスタにクラスタリングするクラスタリング装置であって、
前記特徴を識別する特徴識別子毎に、前記クラスタを識別するクラスタ識別子と該クラスタに属するオブジェクト特徴ベクトルの平均を表すmean特徴ベクトルの第1の非零特徴量とを対応付けた組を格納する配列要素で構成された転置ファイルを記憶部に記憶させる記憶手段と、
前記オブジェクト特徴ベクトルの第2の非零特徴量と該第2の非零特徴量の特徴識別子とを対応付けた組で前記オブジェクト特徴ベクトルを表したスパース表現のオブジェクト特徴ベクトルと、各クラスタの前記mean特徴ベクトルとの距離を計算する計算手段と、
前記計算手段により計算された距離に基づいて前記オブジェクト特徴ベクトルを、前記複数のクラスタのうちの一のクラスタに割り当てる割当手段と、
を有し、
前記計算手段は、
前記スパース表現のオブジェクト特徴ベクトルに含まれる第2の非零特徴量と、前記転置ファイルを構成する配列要素のうち、前記第2の非零特徴量に対応する特徴識別子に基づくインデックスの配列要素に格納されている第1の非零特徴量と積を計算することで、前記距離の計算に必要な内積を計算する、
ことを特徴とするクラスタリング装置。
【請求項2】
前記計算手段は、
前記スパース表現のオブジェクト特徴ベクトルに含まれる第2の非零特徴量と、前記転置ファイルを構成する配列要素のうち、前記第2の非零特徴量に対応する特徴識別子から1を減じた値のインデックスの配列要素に格納されている第1の非零特徴量と積を計算することで、前記距離の計算に必要な内積を計算する、
ことを特徴とする請求項1に記載のクラスタリング装置。
【請求項3】
前記転置ファイルは、
前記特徴識別子毎の配列要素において、前記割当手段による割り当ての前後でクラスタに属するオブジェクト特徴ベクトルに変更あったクラスタを示す変更クラスタに対応するmean特徴ベクトルの第1の非零要素が含まれる組が格納される第1の配列要素が、前記割当手段による割り当ての前後でクラスタに属するオブジェクト特徴ベクトルが不変であったクラスタを示す不変クラスタに対応するmean特徴ベクトルの第1の非零要素が含まれる組が格納される第2の配列要素よりも前に存在し、
前記計算手段は、
前記スパース表現のオブジェクト特徴ベクトルが属するクラスタが不変クラスタであるか否かに応じて、前記スパース表現のオブジェクト特徴ベクトルに含まれる第2の非零特徴量と、前記転置ファイルを構成する配列要素のうち、前記第2の非零特徴量に対応する特徴識別子に基づくインデックスの配列要素又は該配列要素に含まれる前記第1の配列要素のいずれかに格納されている第1の非零特徴量と積を計算することで、前記距離の計算に必要な内積を計算する、ことを特徴とする請求項1又は2に記載のクラスタリング装置。
【請求項4】
前記記憶手段は、
更に、前記割当手段による割り当ての前後でクラスタに属するオブジェクト特徴ベクトルが不変であったクラスタを示す不変クラスタに対応するmean特徴ベクトルの第1の非零要素が含まれる組を前記転置ファイルから除いた変動転置ファイルを前記記憶部に記憶させ、
前記計算手段は、
前記スパース表現のオブジェクト特徴ベクトルが属するクラスタが不変クラスタであるか否かに応じて、前記スパース表現のオブジェクト特徴ベクトルに含まれる第2の非零特徴量と、前記転置ファイル又は前記変動転置ファイルを構成する配列要素のうち、前記第2の非零特徴量に対応する特徴識別子に基づくインデックスの配列要素に格納されている第1の非零特徴量と積を計算することで、前記距離の計算に必要な内積を計算する、ことを特徴とする請求項1又は2に記載のクラスタリング装置。
【請求項5】
前記計算手段は、
前記スパース表現のオブジェクト特徴ベクトルに含まれる第2の非零特徴量と、前記転置ファイルを構成する配列要素のうち、前記第2の非零特徴量に対応する特徴識別子に基づくインデックスの配列要素に格納されている第1の非零特徴量と積を計算する場合に、前記第1の非零特徴量のうち、前記割当手段による割り当ての前後でクラスタに属するオブジェクト特徴ベクトルに変更あったクラスタを示す変更クラスタのクラスタ識別子に対応付けられている第1の非特徴量との積を計算することで、前記距離の計算に必要な内積を計算する、
ことを特徴とする請求項1又は2に記載のクラスタリング装置。
【請求項6】
オブジェクトの特徴を表すオブジェクト特徴ベクトルを複数のクラスタにクラスタリングするクラスタリング装置が、
前記特徴を識別する特徴識別子毎に、前記クラスタを識別するクラスタ識別子と該クラスタに属するオブジェクト特徴ベクトルの平均を表すmean特徴ベクトルの第1の非零特徴量とを対応付けた組を格納する配列要素で構成された転置ファイルを記憶部に記憶させる記憶手順と、
前記オブジェクト特徴ベクトルの第2の非零特徴量と該第2の非零特徴量の特徴識別子とを対応付けた組で前記オブジェクト特徴ベクトルを表したスパース表現のオブジェクト特徴ベクトルと、各クラスタの前記mean特徴ベクトルとの距離を計算する計算手順と、
前記計算手順により計算された距離に基づいて前記オブジェクト特徴ベクトルを、前記複数のクラスタのうちの一のクラスタに割り当てる割当手順と、
を実行し、
前記計算手順は、
前記スパース表現のオブジェクト特徴ベクトルに含まれる第2の非零特徴量と、前記転置ファイルを構成する配列要素のうち、前記第2の非零特徴量に対応する特徴識別子に基づくインデックスの配列要素に格納されている第1の非零特徴量と積を計算することで、前記距離の計算に必要な内積を計算する、
ことを特徴とするクラスタリング方法。
【請求項7】
コンピュータを、請求項1乃至5の何れか一項に記載のクラスタリング装置における各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、クラスタリング装置、クラスタリング方法及びプログラムに関する。
【背景技術】
【0002】
膨大な量の情報(オブジェクト)をクラスタリングする手法として、k-means法が知られている。k-means法は、例えば、オブジェクトの特徴を表すベクトルデータ(以降、「オブジェクト特徴ベクトル」と表す。)をxとして、データ集合X={x,x,・・・,x}と、クラスタ数Kとが与えられた場合に、データ集合XをK個のクラスタに分割する手法である。このk-means法では、クラスタCに属する各xの平均を表すベクトルμ(以降、「mean特徴ベクトル」と表す。)と、オブジェクト特徴ベクトルxとの距離が最小になるように、各xが属するクラスタCが決定される。
【0003】
k-means法の厳密解を計算するには多くの計算量を要するため、Lloyd法と呼ばれる発見的手法がよく用いられる(非特許文献1)。
【先行技術文献】
【非特許文献】
【0004】
【文献】S. P. Lloyd, Least squares quantization in PCM, IEEE Trans. Inf. Theory, vol. 28, no. 2 (1982), pp. 129-137.
【発明の概要】
【発明が解決しようとする課題】
【0005】
ここで、Lloyd法では、各オブジェクト特徴ベクトルxと各mean特徴ベクトルμとの距離を算出するために、これらのベクトルの内積を計算する必要がある。この内積計算では、オブジェクト特徴ベクトルxとmean特徴ベクトルμとがどのようなデータ構造で表現されているかによって、必要となるメモリ容量や計算時間等が異なる。
【0006】
上述したような膨大な量のオブジェクトをクラスタリングする問題においては、オブジェクト特徴ベクトルは疎(スパース)なデータになることが多く、結果として大規模な疎データのクラスタリングを行うことになる場合が多い。これに対して、上記の非特許文献1等の従来技術では、Lloyd法を疎データのクラスタリングに適用した場合に、内積計算に必要なメモリ容量や計算時間等の効率化を図ることができなかった。
【0007】
本発明の実施の形態は、上記の点に鑑みてなされたもので、疎データを効率的にクラスタリングすることを目的とする。
【課題を解決するための手段】
【0008】
上記目的を達成するため、本発明の実施の形態では、オブジェクトの特徴を表すオブジェクト特徴ベクトルを複数のクラスタにクラスタリングするクラスタリング装置であって、前記特徴を識別する特徴識別子毎に、前記クラスタを識別するクラスタ識別子と該クラスタに属するオブジェクト特徴ベクトルの平均を表すmean特徴ベクトルの第1の非零特徴量とを対応付けた組を格納する配列要素で構成された転置ファイルを記憶部に記憶させる記憶手段と、前記オブジェクト特徴ベクトルの第2の非零特徴量と該第2の非零特徴量の特徴識別子とを対応付けた組で前記オブジェクト特徴ベクトルを表したスパース表現のオブジェクト特徴ベクトルと、各クラスタの前記mean特徴ベクトルとの距離を計算する計算手段と、前記計算手段により計算された距離に基づいて前記オブジェクト特徴ベクトルを、前記複数のクラスタのうちの一のクラスタに割り当てる割当手段と、を有し、前記計算手段は、前記スパース表現のオブジェクト特徴ベクトルに含まれる第2の非零特徴量と、前記転置ファイルを構成する配列要素のうち、前記第2の非零特徴量に対応する特徴識別子に基づくインデックスの配列要素に格納されている第1の非零特徴量と積を計算することで、前記距離の計算に必要な内積を計算する、ことを特徴とする。
【発明の効果】
【0009】
本発明の実施の形態によれば、疎データを効率的にクラスタリングすることができる。
【図面の簡単な説明】
【0010】
図1】本発明の実施の形態におけるクラスタリング装置の機能構成の一例を示す図である。
図2】本発明の実施の形態におけるクラスタリング装置のハードウェア構成の一例を示す図である。
図3】本発明の実施の形態における前処理の一例を示すフローチャートである。
図4】スパース表現のオブジェクト特徴ベクトルの一例を示す図である。
図5】本発明の実施の形態におけるクラスタリング処理の一例を示すフローチャート(実施例1)である。
図6】完全表現のmean特徴ベクトルの一例を示す図である。
図7】K個の完全表現のmean特徴ベクトルの一例を示す図である。
図8】スパース表現のオブジェクト特徴ベクトルと、完全表現のmean特徴ベクトルとの内積計算の一例を示す図(実施例1)である。
図9】スパース表現のオブジェクト特徴ベクトルと、K個の完全表現のmean特徴ベクトルとの内積計算の一例を示す図(実施例1)である。
図10】本発明の実施の形態におけるクラスタリング処理の一例を示すフローチャート(実施例2)である。
図11】スパース表現のmean特徴ベクトルの一例を示す図である。
図12】本発明の実施の形態におけるクラスタリング処理の一例を示すフローチャート(実施例3)である。
図13】mean転置ファイルの一例を示す図である。
図14】スパース表現のオブジェクト特徴ベクトルと、転置ファイル表現のmean特徴ベクトルとの内積計算の一例を示す図(実施例3)である。
図15】本発明の実施の形態におけるクラスタリング処理の一例を示すフローチャート(実施例4)である。
図16】本発明の実施の形態におけるクラスタリング処理の一例を示すフローチャート(実施例5)である。
図17】本発明の実施の形態におけるクラスタリング処理の一例を示すフローチャート(実施例6)である。
【発明を実施するための形態】
【0011】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。本発明の実施の形態では、疎データを効率的にクラスタリングすることが可能なクラスタリング装置10について説明する。
【0012】
<準備>
まず、本発明の実施の形態の準備として、クラスタリングの対象となるデータとLloyd法とについて説明する。
【0013】
(1)クラスタリングの対象となるデータ
本発明の実施の形態では、大規模な疎データをクラスタリングの対象とする。このようなデータの一例としては、文書をオブジェクトとして、大量の文書をクラスタリングする場合に、文書の特徴を表すオブジェクト特徴ベクトル等が挙げられる。
【0014】
オブジェクトが文書である場合は、bag-of-wordsモデル(以降、「BoW」と表す。)を用いて、オブジェクトを特徴空間であるユークリッド空間における点として扱うことがよく行われている。なお、文書はテキストやドキュメント等とも称されるが、これらを総称して「文書」と表す。
【0015】
BoWでは、文書をその中に出現する単語(word)に代表される一塊の文字列に分割し、各々の単語を文書の特徴の1つとする。そして、特徴に対応する或る量を特徴量として、文書をこれらの特徴量を要素するベクトルで表現する。なお、単語は語彙(vocabulary)やターム(term)等とも称されるが、以降では、単語、語彙及びタームを総称して、「単語」と表す。
【0016】
ここで、特徴量は、文書中に或る単語が出現する頻度(term frequency)と、オブジェクト集合(文書集合)の各文書に当該単語が出現する頻度(document frequency)とを入力変数とする関数の値で表される。当該関数としては、例えば、tf-idf(term-frequency-inverse document frequency)であることが多く、一般的な関数は以下である。
【0017】
tf(t,x;X):Xが与えられた場合に、xに出現するtの頻度
df(t,X):Xが与えられた場合に、tを含む文書(オブジェクト)の数n
idf(t;X)=log(n/n
tf-idf(t,x;X)=tf(t,x;X)×idf(t;X)
ここで、Xはオブジェクト集合(文書集合)に対応するオブジェクト特徴ベクトル集合X={x,x,・・・,x}であり、x(i=1,2,・・・,n)はオブジェクト特徴ベクトルである。また、オブジェクト数|X|は|X|=nであり、nは単語tを含む文書の数である。なお、idfを表す関数のlogの底は限定されない。
【0018】
この場合、特徴空間の次元数は、文書集合に含まれる全文書の異なり単語数であり、非常に大きくなる。すなわち、特徴空間は高次元空間となる。
【0019】
一方で、或るオブジェクト(文書)に出現する単語数が限られているため、オブジェクト特徴ベクトルxは、疎(スパース)なベクトルとなる。すなわち、オブジェクト特徴ベクトルxは、非零要素の数が非常に少ないベクトルとなる。
【0020】
このように、大量の文書をクラスタリングする場合、クラスタリング対象のデータ(オブジェクト特徴ベクトル)集合は大規模な集合となり、かつ、各オブジェクト特徴ベクトルは高次元で疎なベクトルとなる。以降では、このような高次元かつ疎なデータを「高次元疎データ」、これらの高次元疎データの大規模な集合を「大規模高次元疎データ集合」とも表す。本発明の実施の形態では、このような大規模高次元疎データ集合をクラスタリングの対象とする。
【0021】
なお、上記以外にも、例えば、購入者(又はユーザ)と購入品(又はアイテム)との関係を表す購買履歴、抽出される特徴がbag-of-visual wordsで表される画像等もオブジェクトとして、上記の文書と同様に扱うことができる。すなわち、大量の購買履歴の特徴ベクトルやbag-of-visual wordsで表される大量の画像の特徴ベクトル等も大規模高次元疎データ集合となる。
【0022】
(2)Lloyd法
Lloyd法の概略は以下の通りである。なお、Kは、与えられたクラスタ数である。
【0023】
S1:(初期状態設定ステップ):K個のmean特徴ベクトルμ(j=1,2,・・・,K)を適当な値に初期化する。
【0024】
S2:(割当ステップ)オブジェクト特徴ベクトルxの各々について、現在のイテレーションのmean特徴ベクトルμと、当該オブジェクト特徴ベクトルxとの距離(又はその二乗)を計算し、最も距離が近いmean特徴ベクトルμに対応するクラスタCに当該オブジェクト特徴ベクトルxを割り当てる。なお、イテレーションとは、後述するように、S2及びS3の繰り返し回数(又は反復回数)のことである。
【0025】
mean特徴ベクトルμとオブジェクト特徴ベクトルxとの距離は、例えば、以下の式(1)により計算される。
【0026】
【数1】
ここで、Tは転置を表す。上記式(1)の右辺における第1項及び第2項はそれぞれx及びμのノルムの二乗であり、第3項のx μは内積(dot product又はinner-product)を表す。
【0027】
S3:(更新ステップ)全てのオブジェクト特徴ベクトルxの割り当てが終了した後、各クラスタCに属するオブジェクト特徴ベクトルxによりmean特徴ベクトルμを計算及び更新する。
【0028】
S4:(終了判定ステップ)所定の終了条件を満たすか否かを判定し、所定の終了条件を満たすと判定された場合は処理を終了する一方で、所定の終了条件を満たさないと判定された場合は上記のS2の割当ステップに戻る。これにより、所定の終了条件を満たすまで、S2及びS3が繰り返し実行される。この繰り返しはイテレーションとも称され、現在実行中の繰り返しを「現在のイテレーション」、現在のイテレーションの1つ前に実行した繰り返しを「1つ前のイテレーション」と表す。なお、所定の終了条件としては、例えば、全てのオブジェクト特徴ベクトルxが属するクラスタCが不変になった場合等が挙げられる。
【0029】
ここで、Lloyd法は、上記のS2の割当ステップに多くの時間計算量を要する。このため、Lloyd法の高速化を図るためには、割当ステップに要する時間、すなわち、全てのオブジェクト特徴ベクトルxと全てのmean特徴ベクトルμとの距離計算に要する時間を低減することが必要となる。上述したように、距離計算では、x及びμのノルムの二乗と、x μの内積とを計算する必要がある。ノルムの二乗は予め計算することが可能であるため、距離計算に要する時間を低減するためには、内積計算に要する時間を低減することが重要となる。
【0030】
そこで、本発明の実施の形態では、少なくともオブジェクト特徴ベクトルxを所定のデータ構造で表現することにより、内積計算に要する時間を低減する方法について説明する。また、本発明の実施の形態では、少なくともオブジェクト特徴ベクトルxを所定のデータ構造で表現することにより、内積計算に必要なメモリ容量を削減する方法についても説明する。これらの方法により、本発明の実施の形態におけるクラスタリング装置10は、大規模高次元疎データ集合を効率的にクラスタリングすることが可能となる。
【0031】
<機能構成>
次に、本発明の実施の形態におけるクラスタリング装置10の機能構成について、図1を参照しながら説明する。図1は、本発明の実施の形態におけるクラスタリング装置10の機能構成の一例を示す図である。
【0032】
図1に示すように、本発明の実施の形態におけるクラスタリング装置10は、前処理部110と、クラスタリング処理部120とを有する。前処理部110とクラスタリング処理部120とは、クラスタリング装置10にインストールされた1以上のプログラムがCPU(Central Processing Unit)に実行させる処理により実現される。なお、前処理部110とクラスタリング処理部120とは、異なるプログラムがCPUに実行させる処理により実現されていても良い。
【0033】
また、本発明の実施の形態におけるクラスタリング装置10は、記憶部130を有する。記憶部130は、例えば、補助記憶装置やRAM(Random Access Memory)等を用いて実現可能である。
【0034】
前処理部110は、入力されたオブジェクト特徴ベクトル集合X={x,x,・・・,x}の各オブジェクト特徴ベクトルxを、非零要素の位置(例えば、オブジェクトが文書の場合は異なり単語の各々を一意に識別する特徴ID(又は特徴識別子))と、非零要素の値(例えば、オブジェクトが文書の場合はtf-idf値で表される特徴量)との組(タプル)の列で構成したデータ構造で表現する。なお、入力されたオブジェクト特徴ベクトル集合Xが大規模高次元疎データ集合である。
【0035】
上記のデータ構造で表現されたオブジェクト特徴ベクトルを「スパース表現のオブジェクト特徴ベクトル」と表す。一方で、スパース表現ではなく、オブジェクト特徴ベクトル集合Xに出現する全ての特徴IDを次元とするオブジェクト特徴ベクトル(すなわち、高次元であるオブジェクト特徴ベクトル)を「完全表現のオブジェクト特徴ベクトル」と表す。以降では、スパース表現のオブジェクト特徴ベクトルもx(i=1,2,・・・,n)と表す。スパース表現のオブジェクト特徴ベクトルxの集合Xは、例えば、記憶部130に格納される。
【0036】
クラスタリング処理部120は、スパース表現のオブジェクト特徴ベクトルxの集合Xと、クラスタ数Kとを入力として、スパース表現のオブジェクト特徴ベクトルxをK個のクラスタにクラスタリング(又は分割)する。ここで、クラスタリング処理部120には、入力部121と、初期設定部122と、割当部123と、更新部124と、終了判定部125と、出力部126とが含まれる。
【0037】
入力部121は、スパース表現のオブジェクト特徴ベクトルxの集合Xと、クラスタ数Kとを入力する。なお、入力部121は、例えば、記憶部130から集合X及びクラスタ数Kを入力する。ただし、入力部121は、例えば、他の装置や他のプログラム等から出力された集合Xやクラスタ数Kを入力しても良い。
【0038】
初期設定部122は、上述した初期状態設定ステップに相当する処理を行う。割当部123は、上述した割当ステップに相当する処理を行う。更新部124は、上述した更新ステップに相当する処理を行う。終了判定部125は、上述した終了判定ステップに相当する処理を行う。
【0039】
出力部126は、例えば、スパース表現のオブジェクト特徴ベクトルxのクラスタCへの割当結果(これは、オブジェクトのクラスタリング結果と同一視できる。)を出力する。なお、出力部126は、各クラスタCのmean特徴ベクトルμを出力しても良い。また、出力部126による出力先は、限定されない。出力先の具体例としては、例えば、ディスプレイ、補助記憶装置、外部記録媒体、ネットワークを介して接続される他の装置等が挙げられる。
【0040】
なお、図1では、一例として、クラスタリング装置10が前処理部110を有している場合を示したが、これに限られない。例えば、クラスタリング装置10が前処理部110を有さずに、他の装置が前処理部110を有していても良い。この場合、クラスタリング装置10のクラスタリング処理部120は、当該他の装置の前処理部110によって作成されたスパース表現のオブジェクトベクトルxの集合Xを入力すれば良い。
【0041】
<ハードウェア構成>
次に、本発明の実施の形態におけるクラスタリング装置10のハードウェア構成について、図2を参照しながら説明する。図2は、本発明の実施の形態におけるクラスタリング装置10のハードウェア構成の一例を示す図である。
【0042】
図2に示すように、本発明の実施の形態におけるクラスタリング装置10は、入力装置201と、表示装置202と、外部I/F203と、RAM204と、ROM(Read Only Memory)205と、CPU206と、通信I/F207と、補助記憶装置208とを有する。これら各ハードウェアは、それぞれがバス209を介して通信可能に接続されている。
【0043】
入力装置201は、例えばキーボードやマウス、タッチパネル等であり、ユーザが各種装置を入力するのに用いられる。表示装置202は、例えばディスプレイ等であり、クラスタリング装置10の処理結果等を表示する。なお、クラスタリング装置10は、入力装置201及び表示装置202のうちの少なくとも一方を有していなくても良い。
【0044】
外部I/F203は、外部装置とのインタフェースである。外部装置には、記録媒体203a等がある。クラスタリング装置10は、外部I/F203を介して、記録媒体203aの読み取りや書き込み等を行うことができる。記録媒体203aには、例えば、本発明の実施の形態におけるクラスタリング装置10が有する各機能部を実現する1以上のプログラムが格納されていても良い。
【0045】
記録媒体203aには、例えば、フレキシブルディスク、CD(Compact Disc)、DVD(Digital Versatile Disk)、SDメモリカード(Secure Digital memory card)、USB(Universal Serial Bus)メモリカード等がある。
【0046】
RAM204は、プログラムやデータを一時保持する揮発性の半導体メモリである。ROM205は、電源を切ってもプログラムやデータを保持することができる不揮発性の半導体メモリである。ROM205には、例えば、OS(Operating System)設定やネットワーク設定等が格納されている。CPU206は、ROM205や補助記憶装置208等からプログラムやデータをRAM204上に読み出して処理を実行する演算装置である。
【0047】
通信I/F207は、クラスタリング装置10が他の装置と通信を行うためのインタフェースである。本発明の実施の形態におけるクラスタリング装置10が有する各機能部を実現する1以上のプログラムは、例えば、通信I/F207を介して、所定のサーバ等から取得(ダウンロード)されても良い。また、本発明の実施の形態におけるクラスタリング装置10は、例えば、通信I/F207を介して、これらの各機能部を実現する1以上のプログラムを他の装置に提供しても良い。
【0048】
補助記憶装置208は、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)等であり、プログラムやデータを格納している不揮発性の記憶装置である。補助記憶装置208に格納されているプログラムやデータには、例えば、OS、当該OS上で各種機能を実現するアプリケーションプログラム、本発明の実施の形態におけるクラスタリング装置10が有する各機能部を実現する1以上のプログラム等がある。
【0049】
本発明の実施の形態におけるクラスタリング装置10は、図2に示すハードウェア構成を有することにより、後述する各種処理を実現することができる。
【0050】
<前処理>
まず、完全表現のオブジェクト特徴ベクトルxを、スパース表現のオブジェクト特徴ベクトルxに変換する前処理について、図3を参照しながら説明する。図3は、本発明の実施の形態における前処理の一例を示すフローチャートである。
【0051】
ステップS101:まず、前処理部110は、完全表現のオブジェクト特徴ベクトルxの集合X={x,x,・・・,x}を入力する。なお、オブジェクト特徴ベクトル集合Xは、大規模高次元疎データ集合である。
【0052】
ステップS102:次に、前処理部110は、完全表現の各オブジェクト特徴ベクトルxをスパース表現に変換する。ただし、入力データが予めスパース表現されている場合は、この変換を行うことなく、当該スパース表現を利用する。
【0053】
ここで、スパース表現のオブジェクト特徴ベクトルxの一例について、図4を参照しながら説明する。図4は、スパース表現のオブジェクト特徴ベクトルxの一例を示す図である。
【0054】
図4に示すように、スパース表現のオブジェクト特徴ベクトルxは、非零要素の位置を示す特徴IDと、非零要素の値を示す特徴量との組(タプル)の列で構成される。図4では、完全表現のオブジェクト特徴ベクトルxの非零要素がm個である場合に、h=1,2,・・・,mとして、これらの非零要素の特徴ID「t」と、当該特徴IDの特徴量「v」との組(タプル)の列で構成されたスパース表現を表している。なお、各特徴ID「t」及び特徴量「v」は、オブジェクト特徴ベクトルxのインデックスiに依存するため、正確にはそれぞれ「tih」及び「vih」と表されるが、本発明の実施の形態では、特に断らない限り、「t」及び「v」とインデックスiを省略して表す。
【0055】
ここで、特徴IDは、例えば、1≦t<t<・・・<t<・・・<t≦Dのように昇順にソートされていることが好ましい。Dは、各オブジェクト特徴ベクトルxが存在する特徴空間の次元数(すなわち、例えば、オブジェクトが文書である場合、文書集合に含まれる異なり単語数)である。このようにソートされていることで、後述する内積計算の計算量を小さくすることができる。以降では、スパース表現のオブジェクト特徴ベクトルxの各特徴IDは、上述のように昇順にソートされているものとする。
【0056】
スパース表現のオブジェクト特徴ベクトルxを用いることで、スパース表現のオブジェクト特徴ベクトルxの集合Xが使用するメモリサイズ(すなわち、記憶部130の記憶容量)を抑制することができる。例えば、オブジェクト数をn、各オブジェクト特徴ベクトルxが存在する特徴空間の次元数をD、オブジェクト特徴ベクトルxの疎性(スパーシティ:sparsity)をS(i)、(0≦S(i)≦1)、オブジェクト特徴ベクトルxの要素番号を整数で表現(すなわち、整数型intサイズメモリ容量を使用して表現)し、特徴量を倍精度浮動小数点で表現(すなわち、倍精度浮動小数点型doubleサイズのメモリ容量を使用して表現)する場合、完全表現とスパース表現とのメモリ使用量は以下の通りである。
【0057】
【数2】
ここで、sizeofは引数として渡された型のメモリサイズを返す関数である。
【0058】
具体的には、計算機システムに依存するが、一例として、sizeof(int)=4 bytes、sizeof(double)=8 bytesであり、全オブジェクト特徴ベクトルxの平均疎性S
【0059】
【数3】
である場合、完全表現のメモリ使用量は8×n×D bytesであり、スパース表現のメモリ使用量は1.2×n×D bytesである。ただし、タプルの要素を各々1つの配列に保持する。
【0060】
このため、各オブジェクト特徴ベクトルxをスパース表現とすることで、メモリ使用量を約1/7に抑制することができる。
【0061】
なお、完全表現の場合は、オブジェクト特徴ベクトルxの各要素を格納する配列のインデックスと、オブジェクトを一意に識別する識別子(この識別子は、「オブジェクトID」とも称される。)とが一致しているものと仮定している。すなわち、オブジェクトID「k」のオブジェクトに対応するオブジェクト特徴ベクトルxの各要素(特徴量)は、要素数がD個であるk番目の配列(具体的には、配列v[d],0≦d≦D-1)に格納されているものと仮定している。また、オブジェクト特徴ベクトルxの疎性S(i)は、S(i)=1.0-(nnz)/Dで定義される。ここで、nnzは、オブジェクト特徴ベクトルxの非零要素の数(the number of non-zero elements)である。
【0062】
例えば、大量の文書がオブジェクトである場合、平均疎性Sは非常に大きくなることが一般的であり、0.99を超えることもある。例えば、文書数が100万、異なり単語数が50万であって、1つの文書中に平均200単語程度が出現する場合、平均疎性S=1-200/5×10=0,99995である。このときのメモリ使用量は6×10-4×n×D bytesである。このように、スパース表現を用いることで、メモリを効率的に使用することができる。特に、大規模高次元疎データをクラスタリングの対象とする場合、n及びDが共に非常に大きいため、完全表現の各オブジェクト特徴ベクトルxをスパース表現にすることは空間計算量に相当するメモリの効率的利用の観点から特に効果的である。
【0063】
ステップS103:次に、前処理部110は、上記のステップS102でスパース表現に変換された各オブジェクト特徴ベクトルxを記憶部130に格納する。
【0064】
以上のように、本発明の実施の形態におけるクラスタリング装置10は、前処理として、スパース表現のオブジェクト特徴ベクトルxを作成する。これにより、上述したように、オブジェクト特徴ベクトルxに必要なメモリ使用量(すなわち、記憶部130の記憶容量)を抑制することができる。
【0065】
なお、本発明の実施の形態では、クラスタリング装置10が前処理として完全表現の各オブジェクト特徴ベクトルxをスパース表現に変換、又はスパース表現のオブジェクト特徴ベクトルxを作成したが、これに限られない。例えば、クラスタリング装置10とは異なる他の装置が上記のステップS101及びステップS102を行った上で、クラスタリング装置10は、上記のステップS103のみを行っても良い。
【0066】
<クラスタリング処理>
以降では、本発明の実施の形態におけるクラスタリング処理について説明する。
【0067】
(実施例1)
まず、クラスタリング処理の実施例1として、スパース表現のオブジェクト特徴ベクトルxをクラスタリングする場合について、図5を参照しながら説明する。図5は、本発明の実施の形態におけるクラスタリング処理の一例を示すフローチャート(実施例1)である。
【0068】
ステップS201:まず、クラスタリング処理部120の入力部121は、スパース表現のオブジェクト特徴ベクトルxの集合Xと、クラスタ数Kとを入力する。なお、|X|=n、Kは整数かつ1<K<nであるものとする。
【0069】
ステップS202:次に、クラスタリング処理部120の初期設定部122は、各mean特徴ベクトルμ(j=1,2,・・・,K)を適当な値に初期化する。初期化の方法としては、任意の方法を用いて良い。例えば、各mean特徴ベクトルμをランダムな値に初期化しても良いし、互いに異なる任意のK個のオブジェクト特徴ベクトルxをそれぞれmean特徴ベクトルμとしても良いし、スパース表現の各オブジェクト特徴ベクトルxをランダムにクラスタCに割り当てた上で、各クラスタCに属するxからmean特徴ベクトルμを計算することで初期化しても良い。なお、初期化されたmean特徴ベクトルμは、例えば、記憶部130に格納される。
【0070】
ここで、実施例1では、各mean特徴ベクトルμは完全表現であるものとする。完全表現のmean特徴ベクトルμの一例について、図6を参照しながら説明する。図6は、完全表現のmean特徴ベクトルμの一例を示す図である。
【0071】
図6に示すように、完全表現のmean特徴ベクトルμは、特徴量が零である要素u(d=1,2,・・・,D)も含めて、D次元のベクトルで表現されたデータ(高次元データ)である。
【0072】
完全表現のmean特徴ベクトルμでは、配列のd番目の要素(すなわち、配列インデックスがdである配列の要素)に、特徴IDがd+1である特徴量ud+1が格納されているものとする。以降では、ベクトルの要素と区別するため、配列の要素を「配列要素」と表す。
【0073】
具体的には、例えば、完全表現のmean特徴ベクトルμを配列w[d]、0≦d≦D-1で実現する場合、d´番目の配列要素w[d´]には、特徴IDがd´+1の特徴量ud´+1が格納されている。なお、各特徴量「u」は、mean特徴ベクトルμのインデックスjに依存するため、正確には「ujd」と表されるが、本発明の実施の形態では、特に断らない限り、「u」とインデックスjを省略して表す。
【0074】
ここで、K個の完全表現のmean特徴ベクトルμ(j=1,2,・・・,K)はK×Dの行列Aで表現することもできる。K個の完全表現のmean特徴ベクトルμをK×Dの行列Aで表現した場合の一例を図7に示す。図7に示すように、行列Aは、j行目を完全表現のmean特徴ベクトルμとする行列である。
【0075】
完全表現のmean特徴ベクトルμは、特徴量が零である要素も配列に格納されるためメモリ使用量は大きいものの、後述する内積計算で簡便な計算方法が適用することができ、時間計算量の増大を抑制することができる。なお、この計算方法は、以下の参考文献1に記載されているSparse BLAS(Basic Linear Algebra Subprograms) Libraryのlevel1のdot productの表現と同一であり、Sparse BLASのdot productの疎表現の引数をオブジェクト特徴ベクトルxとし、完全表現の引数としてmean特徴ベクトルμを用いた場合に相当する。
【0076】
[参考文献1]
D. S. Dodson, R. G. Grimes, and J. G. Lewis, "Sparse extensions to the FORTRAN Basic Linear Algebra Subprograms," ACM Trans. Mathematical Software, vol. 17, no. 2, pp. 253-263, June 1991.
以降のステップS203~ステップS206は、クラスタリング処理部120により所定の終了条件を満たすまで繰り返し実行される。
【0077】
ステップS203:クラスタリング処理部120の割当部123は、スパース表現のオブジェクト特徴ベクトルxの各々について、現在のイテレーションの完全表現のmean特徴ベクトルμとの距離を計算する。ここで、距離の定義は上記の式(1)の通りである。上述したように、ノルムの二乗は予め計算することが可能であるため、以降では、内積計算について説明する。
【0078】
従来法では、オブジェクト特徴ベクトルxが完全表現(すなわち、零要素も含めた、D次元のベクトル)であるため、内積計算において、オブジェクト特徴ベクトルxと、mean特徴ベクトルμとの同一インデックス(同一の要素インデックス)の要素同士の乗算値を求めている。すなわち、オブジェクト特徴ベクトルxの要素インデックスと、mean特徴ベクトルμの要素インデックスとが一致している。一方で、実施例1では、オブジェクト特徴ベクトルxが非零要素を含まない形に圧縮表現(スパース表現)されているため、スパース表現のオブジェクト特徴ベクトルxの要素インデックスと、完全表現のmean特徴ベクトルμの要素インデックスとは一致しない。しかしながら、図6に示すように、完全表現のmean特徴ベクトルμの配列インデックスと特徴IDとの対応関係が固定されている(図6に示す例では、特徴IDから1を減じた値が配列インデックスとなる。)。このため、スパース表現のオブジェクト特徴ベクトルxの特徴IDの値から、乗算対象となるmean特徴ベクトルμの要素インデックスを一意に特定することができる。
【0079】
そこで、実施例1では、次のようにして内積を計算する。以降では、一例として、図8に示すスパース表現のオブジェクト特徴ベクトルxと、完全表現のmean特徴ベクトルμとの内積を計算する場合について説明する。
【0080】
ステップS203-1:割当部123は、スパース表現のオブジェクト特徴ベクトルxの特徴量vに対応する特徴ID「t」を用いて、完全表現のmean特徴ベクトルμのt-1番目の配列要素にアクセスする。
【0081】
ステップS203-2:割当部123は、上記のステップS203-1でアクセスした配列要素に格納されている特徴量uthが零であるか否かを判定する。
【0082】
ステップS203-3:特徴量uthが零でないと判定した場合、割当部123は、特徴量uthと特徴量vとの乗算を計算する。一方で、特徴量uthが零であると判定した場合、割当部123は、何もしない。
【0083】
割当部123は、各h=1,2,・・・,mに対して、上記のステップS203-1~ステップS203-3を繰り返し実行する。
【0084】
ステップS203-4:割当部123は、上記のステップS203-3で各hに対して計算された乗算結果を加算する。これにより、スパース表現のオブジェクト特徴ベクトルxと、完全表現のmean特徴ベクトルμとの内積が計算される。
【0085】
以上のステップS203-1~ステップS203-4で説明した内積計算により、実施例1では、内積計算における乗算回数を削減することができ、内積計算を効率的に行うことができるようになる。例えば、図8に示す例では、完全表現のmean特徴ベクトルμの配列要素にアクセスする回数はm回(スパース表現のオブジェクト特徴ベクトルxの要素数)であり、乗算回数は、完全表現のmean特徴ベクトルμのアクセスされた要素のうちの非零の要素数α(≦m)となる。
【0086】
なお、CPUのアーキテクチャ等によっては、上記のステップS203-2で特徴量uthが零であるか否かを判定するよりも乗算処理を行った方が、計算速度が速い場合もある。このような場合、割当部123は、上記のステップS203-2の判定を行わずに(すなわち、特徴量uthが零であるか否かに関わらずに)、上記のステップS203-3で特徴量uthと特徴量vとの乗算を計算すれば良い。
【0087】
以上で説明した内積計算は、スパース表現のオブジェクト特徴ベクトルxの各々について、K個の完全表現のmean特徴ベクトルμを対象として行われる。或る1つのスパース表現のオブジェクト特徴ベクトルxと、K個の完全表現のmean特徴ベクトルμとの内積計算を図9に示す。図9に示すように、j=1,2,・・・,Kに対して、スパース表現のオブジェクト特徴ベクトルxと、完全表現の各mean特徴ベクトルμとの内積を繰り返し計算する。このとき、K個の完全表現のmean特徴ベクトルμの配列要素にアクセスする回数はm×K回であり、乗算回数は、
【0088】
【数4】
となる。ここで、α(m)は、完全表現のmean特徴ベクトルμのアクセスされた要素のうちの非零の要素数である。言い換えれば、α(m)は、集合{t,・・・,t}と、完全表現のmean特徴ベクトルμの特徴IDの集合{1,・・・,D}との共通集合の要素のうち、mean特徴ベクトルμの特徴量が非零の要素数である。
【0089】
ステップS204:クラスタリング処理部120の割当部123は、スパース表現のオブジェクト特徴ベクトルxの各々について、上記のステップS203で計算した距離が最小である完全表現のmean特徴ベクトルμに対応するクラスタCに当該オブジェクト特徴ベクトルxを割り当てる。なお、スパース表現の各オブジェクト特徴ベクトルxのクラスタCへの割当結果は、例えば、記憶部130に格納される。
【0090】
ステップS205:クラスタリング処理部120の更新部124は、各クラスタCに属するスパース表現のオブジェクト特徴ベクトルxにより、完全表現のmean特徴ベクトルμを計算及び更新する。
【0091】
例えば、更新部124は、クラスタCの各々について、当該クラスタCに属するスパース表現のオブジェクト特徴ベクトルxの平均を計算し、この平均をmean特徴ベクトルμとすれば良い。ここで、スパース表現のオブジェクト特徴ベクトルxの平均とは、同一のクラスタCに属するスパース表現のオブジェクト特徴ベクトルxについての特徴ID毎の特徴量の平均値のことである。なお、mean特徴ベクトルμの要素のうち、平均値が算出されなかった特徴IDに対応する要素の特徴量は零とすれば良い。
【0092】
ステップS206:クラスタリング処理部120の終了判定部125は、所定の終了条件を満たすか否かを判定する。そして、所定の終了条件を満たすと判定した場合、クラスタリング処理部120は、ステップS207に進む。一方で、所定の終了条件を満たさないと判定された場合、クラスタリング処理部120は、イテレーションに1を加算した上で、ステップS203に戻る。
【0093】
ステップS207:クラスタリング処理部120の出力部126は、例えば、スパース表現のオブジェクト特徴ベクトルxのクラスタCへの割当結果等を出力する。
【0094】
以上のように、本発明の実施の形態におけるクラスタリング装置10は、実施例1のクラスタリング処理により、スパース表現のオブジェクト特徴ベクトルxをクラスタリングすることができる。このとき、上述したように、オブジェクト特徴ベクトルxをスパース表現にすることで、メモリ使用量を抑制することができると共に、内積計算における乗算回数を削減することができるため、効率的なクラスタリングが可能となる。
【0095】
(実施例2)
次に、クラスタリング処理の実施例2として、mean特徴ベクトルμもスパース表現である場合について、図10を参照しながら説明する。図10は、本発明の実施の形態におけるクラスタリング処理の一例を示すフローチャート(実施例2)である。なお、図10のステップS201、ステップS204及びステップS206~ステップS207は、実施例1と同様であるため、その説明を省略する。
【0096】
ステップS301:クラスタリング処理部120の初期設定部122は、スパース表現の各mean特徴ベクトルμ(j=1,2,・・・,K)を適当な値に初期化する。初期化の方法としては、実施例1と同様の方法を用いれば良い。なお、初期化されたスパース表現のmean特徴ベクトルμは、例えば、記憶部130に格納される。
【0097】
ここで、スパース表現のmean特徴ベクトルμの一例について、図11を参照しながら説明する。図11は、スパース表現のmean特徴ベクトルμの一例を示す図である。
【0098】
図11に示すように、スパース表現のmean特徴ベクトルμは、非零要素の位置を示す特徴IDと、非零要素の値を示す特徴量との組(タプル)の列で構成される。図11では、完全表現のmean特徴ベクトルμの非零要素がs個である場合に、p=1,2,・・・,sとして、これらの非零要素の特徴ID「z」と、当該特徴IDの特徴量「u」との組(タプル)の列で構成されたスパース表現を表している。なお、各特徴ID「z」及び特徴量「u」は、mean特徴ベクトルμのインデックスjに依存するため、正確にはそれぞれ「zjp」及び「ujp」と表されるが、本発明の実施の形態では、特に断らない限り、「zjp」及び「ujp」とインデックスjを省略して表す。なお、特徴IDは、例えば、1≦z<z<・・・<z<・・・<zsj≦Dのように昇順にソートされていることが好ましい。以降では、スパース表現のmean特徴ベクトルμの各特徴IDは、上述のように昇順にソートされているものとする。
【0099】
スパース表現のmean特徴ベクトルμを用いることで、スパース表現のmean特徴ベクトルμが使用するメモリサイズ(すなわち、記憶部130の記憶容量)を抑制することができる。
【0100】
ステップS302:クラスタリング処理部120の割当部123は、スパース表現のオブジェクト特徴ベクトルxの各々について、現在のイテレーションのスパース表現のmean特徴ベクトルμとの距離を計算する。ここで、距離の定義は上記の式(1)の通りである。上述したように、ノルムの二乗は予め計算することが可能であるため、以降では、内積計算について説明する。
【0101】
実施例2では、オブジェクト特徴ベクトルxとmean特徴ベクトルμとが共にスパース表現であるため、同じ非零要素位置を探索し、各々の非零要素位置に対する特徴量を乗算することで内積を計算する。以降では、一例として、図4に示すオブジェクト特徴ベクトルxと、図11に示すmean特徴ベクトルμとの内積を計算する場合について説明する。また、スパース表現のオブジェクト特徴ベクトルxの各タプルが配列v[h],0≦h≦m-1に格納されており、スパース表現のmean特徴ベクトルμの各タプルは配列w[p],0≦p≦s-1に格納されているものとする。このとき、h及びpが配列インデックスである。
【0102】
ステップS302-1:割当部123は、内積値sumを0に初期化する。また、割当部123は、h=1及びp=1に初期化する。
【0103】
ステップS302-2:割当部123は、xの配列インデックスh-1の配列要素v[h-1]と、μの配列インデックスp-1の配列要素w[p-1]とにアクセスし、配列要素v[h-1]に格納されているtと、配列要素w[p-1]に格納されているzとの大小を比較する。
【0104】
ステップS302-3:割当部123は、上記のステップS302-2の比較結果に応じて、以下の(1)~(3)のいずれかを行う。
【0105】
(1)t=zである場合、
割当部123は、sum←sum+v×uとする。また、割当部123は、p←p+1又はh←h+1の何れか一方を行う。このとき、好ましくは、m<sならばpを更新する。なお、「←」は、左辺を右辺で更新することを表す。
【0106】
(2)t>zである場合
割当部123は、p←p+1とする。
【0107】
(3)t<zである場合
割当部123は、h←h+1とする。
【0108】
ステップS302-4:割当部123は、「t=zsj」、「h>m」及び「p>s」のいずれも満たさない場合、ステップS302-2に戻る。一方で、割当部123は、「t=zsj」、「h>m又は(h=mかつt<zs+1)」、又は「p>s又は(p=sかつz<th+1)」のいずれかを満たす場合、処理を終了する。
【0109】
以上のステップS302-1~ステップS302-4によって最終的に得られたsumが内積値となる。この内積計算では、スパース表現のmean特徴ベクトルμの配列要素へのアクセス回数は、最悪の場合(worst case)でm+s-1回(すなわち、O(m+s))である。また、乗算回数は、スパース表現のオブジェクト特徴ベクトルxの特徴IDの集合{t,・・・,t}と、スパース表現のmean特徴ベクトルμの特徴IDの集合{z,・・・,zsj}との共通集合の要素数α´(m)≦mとなる。このため、実施例1と比べて、多少計算量は増える。
【0110】
以上で説明した内積計算は、スパース表現のオブジェクト特徴ベクトルxの各々について、K個のスパース表現のmean特徴ベクトルμを対象として行われる。したがって、K個のスパース表現のmean特徴ベクトルμの配列要素へのアクセス回数は、最悪の場合で
【0111】
【数5】
である。また、乗算回数は、スパース表現のオブジェクト特徴ベクトルxの特徴IDの集合{t,・・・,t}と、スパース表現のmean特徴ベクトルμの特徴IDの集合{zj1,・・・,zj(sj)}と共通集合の要素数のj=1,2,・・・,Kに関する和である
【0112】
【数6】
となる。
【0113】
なお、上述したような同じ非零要素位置を探索する問題は、複数の集合の共通集合を求める問題(set intersection problem)と同じである。この問題の解法として、分割統治法であるマージソート(merge sort)のマージ部分で使用されている並列走査法(parallel scan)が知られている。この方法を上記のステップS302-1~ステップS302-4の内積計算に応用することもできる。
【0114】
ステップS303:クラスタリング処理部120の更新部124は、各クラスタCに属するスパース表現のオブジェクト特徴ベクトルxにより、スパース表現のmean特徴ベクトルμを計算及び更新する。
【0115】
例えば、更新部124は、クラスタCの各々について、当該クラスタCに属するスパース表現のオブジェクト特徴ベクトルxの平均を計算し、この平均をmean特徴ベクトルμとすれば良い。
【0116】
以上のように、本発明の実施の形態におけるクラスタリング装置10は、実施例2のクラスタリング処理により、スパース表現のオブジェクト特徴ベクトルxをクラスタリングすることができる。このとき、実施例2では、mean特徴ベクトルμもスパース表現とすることで、実施例1と比べて多少計算量が増えるものの、メモリ使用量を更に抑制することができため、効率的なクラスタリングが可能となる。
【0117】
(実施例3)
次に、クラスタリング処理の実施例3として、転置ファイルのデータ構造で表現したmean特徴ベクトルμ(転置ファイルのデータ構造で表現したmean特徴ベクトルを「転置ファイル表現のmean特徴ベクトル」と表す。)を用いる場合について、図12を参照しながら説明する。図12は、本発明の実施の形態におけるクラスタリング処理の一例を示すフローチャート(実施例3)である。なお、図12のステップS201、ステップS204及びステップS206~ステップS207は、実施例1と同様であるため、その説明を省略する。
【0118】
ステップS401:クラスタリング処理部120の初期設定部122は、mean転置ファイルを初期化する。mean転置ファイルとは、転置ファイル表現のmean特徴ベクトルμ(j=1,2,・・・,K)が格納されている転置ファイルのことである。なお、初期化されたmean転置ファイルは、例えば、記憶部130に格納される。
【0119】
ここで、mean転置ファイルの一例について、図13を参照しながら説明する。図13は、mean転置ファイルの一例を示す図である。
【0120】
図13に示すように、mean転置ファイルは、特徴ID「h」の非零特徴量を含むmean特徴ベクトルμのインデックスjを表すmeanID「khr」と、当該非零特徴量whrとの組(タプル)の列で構成される。ただし、各タプル列では、各タプルがkhrの昇順にソートされているものとする。ここで、1≦r≦q、qは特徴量ID「h」の特徴量が非零であるmean特徴ベクトルμの個数である。また、1≦h≦Dである。なお、meanID「khr」は、クラスタIDとも呼ばれる。
【0121】
このようなデータ構造のmean転置ファイルでは、各タプル列それぞれで同一のmeanID「khr」のタプル群によって1つのmean特徴ベクトルμが表現される。具体的には、図13に示す例で、j=k13=k22=kh4=kD1である場合、{(k13,w13),(k22,w22),(kh4,wh4),(kD1,wD1)}によって1つのmean特徴ベクトルμが表現される。このように、mean転置ファイルによりmean特徴ベクトルμを表現することで、各mean特徴ベクトルμは、スパース表現と同様に非零要素を含まない形に圧縮されるため、メモリ使用量を抑制することができる。
【0122】
ステップS402:クラスタリング処理部120の割当部123は、スパース表現のオブジェクト特徴ベクトルxの各々について、現在のイテレーションの転置ファイル表現のmean特徴ベクトルμとの距離を計算する。ここで、距離の定義は上記の式(1)の通りである。上述したように、ノルムの二乗は予め計算することが可能であるため、以降では、内積計算について説明する。
【0123】
以降では、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現の各mean特徴ベクトルμとの内積を計算する場合について、図14を参照しながら説明する。図14は、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現のmean特徴ベクトルμとの内積計算の一例を示す図(実施例3)である。なお、スパース表現のオブジェクト特徴ベクトルxの各タプルが配列v[h],0≦h≦m-1に格納されており、全てのmean特徴ベクトルμを含む転置ファイル表現では、特徴量は二次元配列w[h][r],0≦h≦D-1,0≦r≦q-1に格納されているものとする。
【0124】
ステップS402-1:割当部123は、各内積値sum(j)を0に初期化する。また、割当部123は、h=1に初期化する。なお、sum(j)は、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現のmean特徴ベクトルμとの内積値が格納される変数である。
【0125】
ステップS402-2:割当部123は、xの配列インデックスh-1の配列要素v[h-1]に格納されている特徴ID「t」を用いて、各配列要素w[t-1][r],0≦r≦qth-1(なお、この「th」のhは、正確にはtの下付き表記(すなわち、t)である。以降も同様である。)にアクセスし、各配列要素w[t-1][r]にそれぞれ格納されている特徴量wthr(0≦r≦qth-1)と、配列要素v[h-1]に格納されている特徴量vとの積をそれぞれ計算し、該当のsum(j)に加算する。すなわち、割当部123は、以下の計算を行う。
【0126】
【数7】
ステップS402-3:割当部123は、「h>m」を満たすか否かを判定する。そして、割当部123は、「h>m」を満たさないと判定した場合、h←h+1として、ステップS402-2に戻る。一方で、割当部123は、「h>m」を満たすと判定した場合、処理を終了する。
【0127】
以上のステップS402-1~ステップS402-3によって最終的に得られたsum(j)が、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現のmean特徴ベクトルμとの内積値となる。この内積計算では、mean転置ファイルの該当の特徴IDのタプルへのアクセス回数は、
【0128】
【数8】
である。すなわち、スパース表現のオブジェクト特徴ベクトルxの特徴IDの集合{t,・・・,t}と、転置ファイル表現のmean特徴ベクトルμの特徴IDの集合との共通集合のj=1,2,・・・,Kに関する和である。なお、乗算回数はアクセス回数と一致する。このように、実施例3では、内積計算における乗算回数が実施例1と同様であり、内積計算を効率的に行うことができる。なお、図14に示す例では、説明の便宜上、記載を省略しているが、配列インデックスの最大値はD-1である。
【0129】
ステップS403:クラスタリング処理部120の更新部124は、各クラスタCに属するスパース表現のオブジェクト特徴ベクトルxにより、mean転置ファイルを更新する。これにより、転置ファイル表現のmean特徴ベクトルμが更新される。
【0130】
更新部124は、例えば、mean転置ファイル用のメモリ(例えば、記憶部130の記憶領域)を確保した上で、クラスタCの各々について、当該クラスタCに属するスパース表現のオブジェクト特徴ベクトルxの平均を計算し、この平均をmean特徴ベクトルμとしてmean転置ファイルに格納すれば良い。なお、mean転置ファイル用のメモリの確保としては、例えば、各クラスタCに属するオブジェクト特徴ベクトルxの異なり単語数(異なる特徴ID数)と、当該特徴IDを使用しているクラスタCの数とを特定した上で、当該特徴IDを使用しているクラスタCのクラスタIDと、当該特徴IDの特徴量とを保持するためのメモリを確保すれば良い。
【0131】
以上のように、本発明の実施の形態におけるクラスタリング装置10は、実施例3のクラスタリング処理により、スパース表現のオブジェクト特徴ベクトルxをクラスタリングすることができる。このとき、実施例3では、mean特徴ベクトルμを転置ファイル表現とすることで、メモリ使用量を実施例2と同等にしつつ、内積計算における乗算回数を実施例1と同等とすることができ、効率的なクラスタリングが可能となる。
【0132】
(実施例4)
次に、クラスタリング処理の実施例4として、mean特徴ベクトルμの更新を効率化した場合について、図15を参照しながら説明する。図15は、本発明の実施の形態におけるクラスタリング処理の一例を示すフローチャート(実施例4)である。なお、図15のステップS201、ステップS204、ステップS206~ステップS207及びステップS403は、実施例3と同様であるため、その説明を省略する。
【0133】
ステップS501:クラスタリング処理部120の初期設定部122は、mean転置ファイルと、クラスタCが不変クラスタであるか否かを示すフラグfとを初期化する。なお、初期化されたmean転置ファイル及びフラグfは、例えば、記憶部130に格納される。
【0134】
ここで、不変クラスタとは、1つ前のイテレーションでクラスタに属するメンバ(オブジェクト特徴ベクトルx)に変更がなかったクラスタCのことである。言い換えれば、2つ前のイテレーションにおけるクラスタCに属するメンバと、1つ前のイテレーションにおけるクラスタCに属するメンバとが同一である場合、当該クラスタCは不変クラスタである。以降では、例えば、フラグf=1である場合、クラスタCは不変クラスタであり、フラグf=0である場合、クラスタCは不変クラスタでないものとする。なお、各フラグfの初期値としては、例えば、全て0とすれば良い。
【0135】
ステップS502:クラスタリング処理部120の割当部123は、スパース表現のオブジェクト特徴ベクトルxの各々について、現在のイテレーションの転置ファイル表現のmean特徴ベクトルμとの距離を計算する。ここで、距離の定義は上記の式(1)の通りである。上述したように、ノルムの二乗は予め計算することが可能であるため、以降では、内積計算について説明する。
【0136】
ところで、或るオブジェクト特徴ベクトルxが属するクラスタCが不変クラスタである場合、現在のイテレーションで、当該オブジェクト特徴ベクトルxが他の不変クラスタCj´(j´≠j)に新たに属することはない。したがって、C及びCj´が不変クラスタである場合に、(x∈C)∧(C≠Cj´)であるならば、オブジェクト特徴ベクトルxと、mean特徴ベクトルμj´との距離計算は不要である。このことは、ICP(Invariant Centroid-Pair skipping filter)とも称される。
【0137】
そこで、実施例4では、以下のステップS502-1~ステップS502-6により、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現の各mean特徴ベクトルμとの内積を計算する。なお、実施例3と同様に、スパース表現のオブジェクト特徴ベクトルxの各タプルが配列v[h],0≦h≦m-1に格納されており、全てのmean特徴ベクトルμを含む転置ファイル表現では、特徴量は二次元配列w[h][r],0≦h≦D-1,0≦r≦q-1に格納されているものとする。
【0138】
ステップS502-1:割当部123は、各内積値sum(j)を0に初期化する。また、割当部123は、h=1に初期化する。
【0139】
ステップS502-2:割当部123は、スパース表現のオブジェクト特徴ベクトルxが属するクラスタCが不変クラスタであるか否かを判定する。これは、当該オブジェクト特徴ベクトルxが属するクラスタCに対応するフラグfの値を参照することで判定すれば良い。
【0140】
ステップS502-3:割当部123は、スパース表現のオブジェクト特徴ベクトルxが属するクラスタCが不変クラスタでないと判定した場合、実施例3と同様に、ステップS402-2~ステップS402-3により、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現の各mean特徴ベクトルμとの内積を計算する。
【0141】
一方で、割当部123は、スパース表現のオブジェクト特徴ベクトルxが属するクラスタCが不変クラスタであると判定した場合、以降のステップS502-4に進む。
【0142】
ステップS502-4:割当部123は、xの配列インデックスh-1の配列要素v[h-1]に格納されている特徴ID「t」を用いて、各配列要素[t-1][r],0≦r≦qth-1(なお、この「th」のhは、正確にはtの下付き表記(すなわち、t)である。以降も同様である。)にアクセスし、各配列要素w[t-1][r]にそれぞれ格納されているmeanID(クラスタID)「kthr」(0≦r≦qth-1)に対応するクラスタが不変クラスタであるか否かを判定する。すなわち、割当部123は、クラスタC(ただし、j=kthr,0≦r≦qth-1)がそれぞれ不変クラスタであるか否かを判定する。これは、上記と同様に、クラスタCに対応するフラグfの値を参照することで判定すれば良い。
【0143】
ステップS502-5:割当部123は、各配列要素w[t-1][r]のうち、上記のステップS502-4で不変クラスタと判定されたクラスタCのクラスタID「j=kthr」が格納されている配列要素を除く配列要素wに格納されている特徴量と、配列要素v[h-1]に格納されている特徴量vとの積をそれぞれ計算し、該当のsum(j)に加算する。言い換えれば、上記の数7において、不変クラスタCに関するタプルを用いたsum(j)の更新をスキップする。
【0144】
ステップS502-6:割当部123は、「h>m」を満たすか否かを判定する。そして、割当部123は、「h>m」を満たさないと判定した場合、h←h+1として、ステップS502-4に戻る。一方で、割当部123は、「h>m」を満たすと判定した場合、処理を終了する。
【0145】
以上のステップS502-1~ステップS502-6によって最終的に得られたsum(j)が、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現のmean特徴ベクトルμとの内積値となる。このように、実施例3では、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現のmean特徴ベクトルμとがそれぞれ異なる不変クラスタCに属する場合には、これらxとμとの内積計算を省略する。これにより、内積計算の回数を削減し、計算量を更に削減することができる。
【0146】
ステップS503:クラスタリング処理部120の更新部124は、ステップS204における割当結果に応じて、フラグfを更新する。すなわち、更新部124は、上記のステップS204において、1つ前のイテレーションからクラスタCのメンバが不変である場合はフラグfを1に更新し、1つ前のイテレーションからクラスタCのメンバが変更になった場合はフラグfを0に更新する。
【0147】
以上のように、本発明の実施の形態におけるクラスタリング装置10は、実施例4のクラスタリング処理により、スパース表現のオブジェクト特徴ベクトルxをクラスタリングすることができる。このとき、実施例4では、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現のmean特徴ベクトルμとがそれぞれ異なる不変クラスタCに属する場合には、これらxとμとの内積計算を省略する。これにより、実施例3と比較して、内積計算における乗算回数を削減することができ、より効率的なクラスタリングが可能となる。
【0148】
(実施例5)
次に、クラスタリング処理の実施例5として、2種類のmean転置ファイル(すなわち、「全mean転置ファイル」及び「変動mean転置ファイル」)を用いる場合について、図16を参照しながら説明する。図16は、本発明の実施の形態におけるクラスタリング処理の一例を示すフローチャート(実施例5)である。なお、図16のステップS201、ステップS204、ステップS206~ステップS207及びステップS503は、実施例4と同様であるため、その説明を省略する。
【0149】
ステップS601:クラスタリング処理部120の初期設定部122は、全mean転置ファイルと、変動mean転置ファイルと、クラスタCが不変クラスタであるか否かを示すフラグfとを初期化する。なお、初期化された全mean転置ファイルと変動mean転置ファイルとフラグfとは、例えば、記憶部130に格納される。
【0150】
ここで、全mean転置ファイルとは、実施例3及び実施例4におけるmean転置ファイルのことである。一方で、変動mean転置ファイルとは、全mean転置ファイルから、不変クラスタCに属するmean特徴ベクトルμを除いたものである。なお、全mean転置ファイル及び変動mean転置ファイルは同じ内容に初期化される。
【0151】
ステップS602:クラスタリング処理部120の割当部123は、スパース表現のオブジェクト特徴ベクトルxの各々について、現在のイテレーションの転置ファイル表現のmean特徴ベクトルμとの距離を計算する。ここで、距離の定義は上記の式(1)の通りである。上述したように、ノルムの二乗は予め計算することが可能であるため、以降では、内積計算について説明する。
【0152】
実施例5では、以下のステップS602-1~ステップS602-3により内積計算を行う。
【0153】
ステップS602-1:割当部123は、各内積値sum(j)を0に初期化する。また、割当部123は、h=1に初期化する。
【0154】
ステップS602-2:割当部123は、スパース表現のオブジェクト特徴ベクトルxが属するクラスタCが不変クラスタであるか否かを判定する。これは、当該オブジェクト特徴ベクトルxが属するクラスタCに対応するフラグfの値を参照することで判定すれば良い。
【0155】
ステップS602-3:割当部123は、スパース表現のオブジェクト特徴ベクトルxが属するクラスタCが不変クラスタでないと判定した場合、全mean転置ファイルを用いて、上記のステップS402-2~ステップS402-3により、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現の各mean特徴ベクトルμとの内積を計算する。
【0156】
一方で、割当部123は、スパース表現のオブジェクト特徴ベクトルxが属するクラスタCが不変クラスタであると判定した場合、変動mean転置ファイルを用いて、上記のステップS402-2~ステップS402-3により、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現の各mean特徴ベクトルμとの内積を計算する。
【0157】
このように、実施例5では、スパース表現のオブジェクト特徴ベクトルxが属するクラスタCが不変クラスタであるか否かに応じて、全mean転置ファイル又は変動mean転置ファイルのいずれかを用いて、転置ファイル表現のmean特徴ベクトルμとの内積計算を計算する。
【0158】
ステップS603:クラスタリング処理部120の更新部124は、各クラスタCに属するスパース表現のオブジェクト特徴ベクトルxにより、全mean転置ファイル及び変動mean転置ファイルを更新する。ここで、更新部124は、mean特徴ベクトルμが不変クラスタCに属する場合、このmean特徴ベクトルμを全mean転置ファイルのみに格納する。一方で、更新部124は、mean特徴ベクトルμが不変クラスタCに属しない場合、このmean特徴ベクトルμを全mean転置ファイル及び変動mean転置ファイルの両方に格納する。これにより、全mean転置ファイル及び変動mean転置ファイルが更新される。
【0159】
以上のように、本発明の実施の形態におけるクラスタリング装置10は、実施例5のクラスタリング処理により、スパース表現のオブジェクト特徴ベクトルxをクラスタリングすることができる。このとき、実施例5では、全mean転置ファイルと変動mean転置ファイルとを用いることで、実施例4のステップS502-4の判定(mean特徴ベクトルμが不変クラスタCに属するか否かの判定)が不要となり、内積計算を高速に行うことができるようになる。ただし、実施例5では、全mean転置ファイルと変動mean転置ファイルとを用いるため、実施例3及び4と比べて、メモリ容量(記憶部130の記憶容量)が多く必要となる。
【0160】
なお、Lloyd法のイテレーション開始時から変動mean転置ファイルを用いた場合、最悪のケースでは全mean転置ファイルの2倍のメモリ容量が必要となる。このため、例えば、所定の或る条件を満たすまでは実施例4のクラスタリング処理を実行し、当該条件を満たした後は実施例5のクラスタリング処理を実行する等、実施例4と実施例5との併用も可能である。所定の或る条件とは、例えば、イテレーション回数が所定の回数以上となったこと、不変クラスタの割合が所定の割合以上となったこと、不変クラスタの数が所定の数以上となったこと等が挙げられる。
【0161】
(実施例6)
次に、クラスタリング処理の実施例6として、境界インデックス付きmean転置ファイルを用いる場合について、図17を参照しながら説明する。図17は、本発明の実施の形態におけるクラスタリング処理の一例を示すフローチャート(実施例6)である。なお、図17のステップS201、ステップS204、ステップS206~ステップS207及びステップS503は、実施例4と同様であるため、その説明を省略する。
【0162】
ステップS701:クラスタリング処理部120の初期設定部122は、境界インデックス付きmean転置ファイルと、クラスタCが不変クラスタであるか否かを示すフラグfとを初期化する。なお、初期化された境界インデックス付きmean転置ファイルとフラグfとは、例えば、記憶部130に格納される。
【0163】
ここで、境界インデックス付きmean転置ファイルとは、不変クラスタCに属しないmean特徴ベクトルμが前半部分に、不変クラスタCに属するmean特徴ベクトルμが後半部分に格納され、前半部分と後半部分との境界を示す境界インデックスが付与された転置ファイルのことである。境界インデックスとしては、例えば、前半部分の最後に格納されているmean特徴ベクトルμのインデックスjとすれば良い。なお、必須の要件ではないが、mean転置ファイルの各タプル列では、各タプルがmeanID「j」(クラスタID)の昇順にソートされていても良い。
【0164】
ここで、境界インデックスの初期値としては、例えば、境界インデックス付きmean転置ファイルに格納されているmean特徴ベクトルμの最大値(すなわち、最後に格納されているmean特徴ベクトルμのインデックスj)とすれば良い。
【0165】
ステップS702:クラスタリング処理部120の割当部123は、スパース表現のオブジェクト特徴ベクトルxの各々について、現在のイテレーションの転置ファイル表現のmean特徴ベクトルμとの距離を計算する。ここで、距離の定義は上記の式(1)の通りである。上述したように、ノルムの二乗は予め計算することが可能であるため、以降では、内積計算について説明する。
【0166】
実施例6では、以下のステップS702-1~ステップS702-3により内積計算を行う。
【0167】
ステップS702-1:割当部123は、各内積値sum(j)を0に初期化する。また、割当部123は、h=1に初期化する。
【0168】
ステップS702-2:割当部123は、スパース表現のオブジェクト特徴ベクトルxが属するクラスタCが不変クラスタであるか否かを判定する。これは、当該オブジェクト特徴ベクトルxが属するクラスタCに対応するフラグfの値を参照することで判定すれば良い。
【0169】
ステップS702-3:割当部123は、スパース表現のオブジェクト特徴ベクトルxが属するクラスタCが不変クラスタでないと判定した場合、境界インデックス付きmean転置ファイルに格納されている全てのmean特徴ベクトルμを用いて、上記のステップS402-2~ステップS402-3により、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現の各mean特徴ベクトルμとの内積を計算する。
【0170】
一方で、割当部123は、スパース表現のオブジェクト特徴ベクトルxが属するクラスタCが不変クラスタであると判定した場合、境界インデックス付きmean転置ファイルに格納されているmean特徴ベクトルμのうち、先頭から境界インデックスまでのmean特徴ベクトルμを用いて、上記のステップS402-2~ステップS402-3により、スパース表現のオブジェクト特徴ベクトルxと、転置ファイル表現の各mean特徴ベクトルμとの内積を計算する。
【0171】
このように、実施例6では、スパース表現のオブジェクト特徴ベクトルxが属するクラスタCが不変クラスタである場合、境界インデックス付きmean転置ファイルの前半部分に格納されているmean特徴ベクトルμとの内積を計算する。これにより、実施例4のステップS502-4の判定(mean特徴ベクトルμが不変クラスタCに属するか否かの判定)が不要になると共に、境界インデックス付きmean転置ファイルに必要なメモリ容量を抑えることができる。
【0172】
ステップS703:クラスタリング処理部120の更新部124は、各クラスタCに属するスパース表現のオブジェクト特徴ベクトルxにより、境界インデックス付きmean転置ファイルを更新する。ここで、更新部124は、mean特徴ベクトルμが不変クラスタCに属しない場合、このmean特徴ベクトルμを境界インデックス付きmean転置ファイルの前半部分に格納し、mean特徴ベクトルμが不変クラスタCに属する場合、このmean特徴ベクトルμを境界インデックス付きmean転置ファイルの後半部分に格納する。また、更新部124は、例えば、前半部分の最後に格納されているmean特徴ベクトルμのインデックスjを境界インデックスとする。
【0173】
以上のように、本発明の実施の形態におけるクラスタリング装置10は、実施例6のクラスタリング処理により、スパース表現のオブジェクト特徴ベクトルxをクラスタリングすることができる。このとき、実施例6では、境界インデックス付きmean転置ファイルを用いることで、実施例4のステップS502-4の判定(mean特徴ベクトルμが不変クラスタCに属するか否かの判定)が不要となり、内積計算を高速に行うことができるようになる。しかも、実施例6では、実施例5と比べて、より少ないメモリ容量(記憶部130の記憶容量)で効率的にクラスタリングを行うことができるようになる。
【0174】
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【0175】
10 クラスタリング装置
110 前処理部
120 クラスタリング処理部
121 入力部
122 初期設定部
123 割当部
124 更新部
125 終了判定部
126 出力部
130 記憶部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17