"プロセッサとメモリとを備えた第1の計算機と、プロセッサとメモリを備えて複数の前記第1の計算機に分散処理を実行させる第2の計算機と、前記分散処理に用いる特徴量を含むデータを格納したストレージと、前記第1の計算機と第2の計算機および前記ストレージとを接続するネットワークと、を備えて、前記複数の第1の計算機で並列的に分散処理を行う分散計算機システムであって、前記第2の計算機は、学習の初期化を行う初期化部と、前記複数の第1の計算機に、学習処理を実行させる制御部と、前記学習処理の結果が収束したか否かを判定する収束判定処理部と、を備え、前記制御部は、前記複数の第1の計算機のうち所定の複数の第1の計算機に、前記学習のメタパラメータと素性インデックスの組を送信し、学習処理のMap処理部を割り当て、前記学習処理の対象となる前記ストレージのデータを割り当てて第1のワーカーとして学習処理を実行させ、前記複数の第1の計算機のうち、少なくとも1つの第1の計算機に、前記Map処理部の出力を受信してモデルパラメータを更新するReduce処理部を割り当てて第2のワーカーとして学習処理を実行させ、前記第1のワーカーは、前記Map処理部が、前記メタパラメータと素性インデックスとの組を複数モデル管理部に保持し、ひとつの特徴量が前記ストレージから読み込まれるごとに、前記複数モデル管理部に存在するすべてのメタパラメータと素性インデックスに対して、素性選択とMap関数を実行して中間結果を算出し、当該中間結果を前記第2のワーカーに送信し、前記第2のワーカーは、前記中間結果を受け付けて、前記Reduce処理部がReduce関数を実行して前記中間結果から学習結果を生成し、前記第2の計算機の収束判定部は、前記生成された学習結果が所定の基準を満たすか否かを判定し、前記生成された学習結果が所定の基準を満たしていない場合には、前記第2のワーカーへ前記学習結果を送信して、学習処理を指令し、前記学習結果が所定の基準を満たす場合には、処理を完了することを特徴とする分散計算機システム。請求項1に記載の分散計算機システムであって、前記Map処理部は、前記第2のワーカーへ中間結果を送信する際に、中間結果に対応するモデルの情報をキーとして記録し、前記Reduce処理部は、前記中間結果を受け取った際に、前記キーを参照することで当該中間結果に対応するモデルを判別することを特徴とする分散計算機システム。請求項1に記載の分散計算機システムであって、前記複数モデル管理部は、前記メタパラメータと素性インデックスとを前記メモリ上に保持することを特徴とする分散計算機システム。請求項1に記載の分散計算機システムであって、前記素性インデックスが1種類であり、かつ全ての素性を用いる場合、前記Map処理部は、前記複数モデル管理部に存在するすべてのメタパラメータに対して、前記ストレージの特徴量を共用し、Map関数を実行して中間結果を算出することを特徴とする分散計算機システム。請求項3に記載の分散計算機システムであって、前記メタパラメータがすべてのモデルで共通する場合に、複数モデル管理部内でメタパラメータのインスタンスをすべてのモデルで共用することを特徴とする分散計算機システム。請求項1に記載の分散計算機システムであって、前記第1のワーカーが、Map関数内で学習が完了するアルゴリズムを実行する場合には、前記Reduce処理部の処理を省略し、学習の結果を前記ストレージに格納することを特徴とする分散計算機システム。請求項1に記載の分散計算機システムであって、前記第1のワーカーが、Map関数内で学習が完了するアルゴリズムを実行する場合には、前記Reduce処理部の処理を省略し、前記Map処理部で学習結果の統計情報を計算することを特徴とする分散計算機システム。プロセッサとメモリとを備えた第1の計算機と、プロセッサとメモリを備えて複数の前記第1の計算機に分散処理を実行させる第2の計算機と、前記分散処理に用いる特徴量を含むデータを格納したストレージと、前記第1の計算機と第2の計算機および前記ストレージとを接続するネットワークと、を備えて、前記複数の第1の計算機で並列的に分散処理を行う分散計算機システムの制御方法であって、前記第2の計算機が、学習の初期化を行う第1のステップと、前記第2の計算機が、前記複数の第1の計算機のうち所定の複数の第1の計算機に、前記学習のメタパラメータと素性インデックスの組を送信し、学習処理のMap処理部を割り当て、前記学習処理の対象となる前記ストレージのデータを割り当てて第1のワーカーとして学習処理を実行させる第2のステップと、前記第2の計算機が、前記複数の第1の計算機のうち、少なくとも1つの第1の計算機に、前記Map処理部の出力を受信してモデルパラメータを更新するReduce処理部を割り当てて第2のワーカーとして学習処理を実行させる第3のステップと、前記第1のワーカーは、前記Map処理部が、前記メタパラメータと素性インデックスとの組を複数モデル管理部に保持し、ひとつの特徴量が前記ストレージから読み込まれるごとに、前記複数モデル管理部に存在するすべてのメタパラメータと素性インデックスに対して、素性選択とMap関数を実行して中間結果を算出し、当該中間結果を前記第2のワーカーに送信する第4のステップと、前記第2のワーカーが、前記中間結果を受け付けて、前記Reduce処理部がReduce関数を実行して前記中間結果から学習結果を生成する第5のステップと、前記第2の計算機が、前記生成された学習結果が所定の基準を満たすか否かを判定し、前記生成された学習結果が所定の基準を満たしていない場合には、前記第2のワーカーへ前記学習結果を送信して、学習処理を指令し、前記学習結果が所定の基準を満たす場合には、処理を完了する第6のステップと、を含むことを特徴とする分散計算機システムの制御方法。請求項8に記載の分散計算機システムの制御方法であって、前記第4のステップは、前記第1のワーカーが、前記第2のワーカーへ中間結果を送信する際に、中間結果に対応するモデルの情報をキーとして記録し、前記第5のステップは、前記第2のワーカーが、前記中間結果を受け取った際に、前記キーを参照することで当該中間結果に対応するモデルを判別することを特徴とする分散計算機システムの制御方法。請求項8に記載の分散計算機システムの制御方法であって、前記第4のステップは、前記複数モデル管理部が、前記メタパラメータと素性インデックスとを前記メモリ上に保持することを特徴とする分散計算機システムの制御方法。請求項8に記載の分散計算機システムの制御方法であって、前記第4のステップは、前記素性インデックスが1種類であり、かつ全ての素性を用いる場合、前記Map処理部は、前記複数モデル管理部に存在するすべてのメタパラメータに対して、前記ストレージの特徴量を共用し、Map関数を実行して中間結果を算出することを特徴とする分散計算機システムの制御方法。請求項10に記載の分散計算機システムの制御方法であって、前記第4のステップは、前記メタパラメータがすべてのモデルで共通する場合に、複数モデル管理部内でメタパラメータのインスタンスをすべてのモデルで共用することを特徴とする分散計算機システムの制御方法。請求項8に記載の分散計算機システムの制御方法であって、前記第4のステップは、前記第1のワーカーが、Map関数内で学習が完了するアルゴリズムを実行する場合には、前記Reduce処理部の処理を省略し、学習の結果を前記ストレージに格納することを特徴とする分散計算機システムの制御方法。請求項8に記載の分散計算機システムの制御方法であって、前記第4のステップは、前記第1のワーカーが、Map関数内で学習が完了するアルゴリズムを実行する場合には、前記Reduce処理部の処理を省略し、前記Map処理部で学習結果の統計情報を計算することを特徴とする分散計算機システムの制御方法。上記従来例では、一個の計算機クラスタにおいて、複数のモデルを並列機械学習するには、複数回の学習を実行することが必要であり、モデル数に比例して学習時間が増大する。複数のモデルを、並行して学習するためには、複数個の計算機クラスタが必要になる。複数の計算機クラスタを使用すると装置の導入コストや運用コストが過大になるという問題が生じる。上記従来例の技術では、これらの問題を解決できない。そこで本発明は、上記問題点に鑑みてなされたもので、計算機クラスタを増やすことなく、機械学習を低コストで実現することを目的とする。本発明は、プロセッサとメモリとを備えた第1の計算機と、プロセッサとメモリを備えて複数の前記第1の計算機に分散処理を実行させる第2の計算機と、前記分散処理に用いる特徴量を含むデータを格納したストレージと、前記第1の計算機と第2の計算機および前記ストレージとを接続するネットワークと、を備えて、前記複数の第1の計算機で並列的に分散処理を行う分散計算機システムであって、前記第2の計算機は、学習の初期化を行う初期化部と、前記複数の第1の計算機に、学習処理を実行させる制御部と、前記学習処理の結果が収束したか否かを判定する収束判定処理部と、を備え、前記制御部は、前記複数の第1の計算機のうち所定の複数の第1の計算機に、前記学習のメタパラメータと素性インデックスの組を送信し、学習処理のMap処理部を割り当て、前記学習処理の対象となる前記ストレージのデータを割り当てて第1のワーカーとして学習処理を実行させ、前記複数の第1の計算機のうち、少なくとも1つの第1の計算機に、前記Map処理部の出力を受信してモデルパラメータを更新するReduce処理部を割り当てて第2のワーカーとして学習処理を実行させ、前記第1のワーカーは、前記Map処理部が、前記メタパラメータと素性インデックスとの組を複数モデル管理部に保持し、ひとつの特徴量が前記ストレージから読み込まれるごとに、前記複数モデル管理部に存在するすべてのメタパラメータと素性インデックスに対して、素性選択とMap関数を実行して中間結果を算出し、当該中間結果を前記第2のワーカーに送信し、前記第2のワーカーは、前記中間結果を受け付けて、前記Reduce処理部がReduce関数を実行して前記中間結果から学習結果を生成し、前記第2の計算機の収束判定部は、前記生成された学習結果が所定の基準を満たすか否かを判定し、前記生成された学習結果が所定の基準を満たしていない場合には、前記第2のワーカーへ前記学習結果を送信して、学習処理を指令し、前記学習結果が所定の基準を満たす場合には、処理を完了する。本発明の分散計算機システムは、複数の第1の計算機で例えば、一個の計算機クラスタを構成し、複数のモデルを並行して学習することができる。Map処理部とストレージの特徴量データの通信量を前記従来例の1/モデル数に削減して、Reduce処理部をモデル数倍に並列化することで、学習時間を短縮することができる。さらに、本発明では、従来例と同一時間でより多くのモデルが学習できるので、計算機クラスタの数を削減し、計算機クラスタの導入コストや運用コストを減らすことができる。以下、本発明の一実施形態を添付図面に基づいて説明する。以下の実施の形態において、要素の数等に言及する場合、特に指定された場合および原理的に明らかに特定される場合を除き、その特定の数に限定されることはなく、特定の数以上でも以下でもよい。さらに、以下の実施の形態において、その構成要素は、特に指定された場合および原理的に明らかに必要とされる場合を除き、必ずしも必須のものではないということは明らかである。また、同様に以下の実施の形態において、構成要素の形状や位置関係について言及するときは、特に明示する場合や原理的に明らかにそうでないと考えられる場合を除き、実質的にその形状等に近似または類似するものを含むものとする。このことは上記数値および範囲に関しても同様である。<第1実施形態>図1は、本発明の分散計算機システムで使用する計算機100のブロック図である。分散計算機システムで使用する計算機100は図1に示すような汎用の計算機100を想定しており、具体的にはPCサーバで構成されている。PCサーバで構成される計算機100は、中央演算装置CentralProcessingUnitCPU110とメモリ120とローカルファイルシステム130と入力装置140と出力装置150とネットワークデバイス160とバス170を有する。110から160までの装置はバスまたはインターコネクト170によって接続されている。ネットワークを介してリモートから計算機100を操作する場合、入力装置と出力装置については省略可能である。また、ローカルファイルシステムとは、計算機100に内蔵ないし外部に接続された書き換え可能な記憶領域を指し、具体的には、ハードディスクドライブやソリッドステートドライブ、RAMディスクなどの記憶装置である。以下簡単に、本発明の適応対象となる機械学習アルゴリズムを説明する。機械学習では、特徴量データに表れる共通のパターンを抽出することを目的とする。機械学習アルゴリズムの例として、線形回帰やk-meansJ.McQueenSomemethodsforclassificationandanalysisofmultivariateobservationsInProceedingsoftheFifthBerkeleySymposiumonMathematicalStatisticsandProbability、pp.281-297、1967やSupportVectorMachineSVMSupportVectorMachineChapelle、OlivierTrainingaSupportVectorMachineinthePrimal、NeuralComputation、Vol.19、No.5、pp.1155-1178、2007が知られている。機械学習アルゴリズムで扱うデータの種類は、大きく三つに分けられる。一つ目はパターンを抽出する対象となる特徴量データであり、二つ目は、学習対象となるモデルパラメータであり、三つ目は、学習の条件を設定するメタパラメータである。機械学習では、予め、モデルとメタパラメータを決定しておき、特徴量データがよく当てはまるようにモデルパラメータを決定する。例えば、特徴量データ{x1,y1,x2,y2,...}における線形回帰では、モデルは、fx=w,xbという関数fで表される。ここでiを特徴量データの番号とすると、xiは実数値ベクトルでありyiは実数である。また、w,xは実数値ベクトルwとxの内積を表す。常識のwとbがモデルパラメータである。yi=fxiが小さい誤差で成り立つようにwとbを決めることが、線形回帰の目的である。以下では、特徴量データを用いて、モデルパラメータを推定することを学習と呼ぶ。上記の線形回帰やk-means、SVMなどの機械学習アルゴリズムは、データに対して現在のモデルを適用する部分と、その結果をもとにモデルパラメータを更新する部分とを繰り返し実行することにより学習を行う。この繰り返しは、アルゴリズムごとに設定されたモデルパラメータの収束判定基準を満たすまで実行される。例えば、上記の線形回帰モデルであれば、データに対するモデルの適用では、特徴量データxi,yiに対して現在のwとbをもって関数fを計算し、誤差を算出する。モデルパラメータの更新では、誤差を小さくするようにモデルパラメータwとbを再計算する。データに対するモデルの適用と、モデルパラメータの更新を繰り返すことにより、モデルパラメータの推定精度が高くなっていく。図2は本発明の分散計算機システムを構成する計算機のブロック図である。本発明に使用する計算機は、図2のように一台のユーザ端末用計算機200と一台のマスタ用計算機210と一台以上のワーカー用計算機220-1、220-2、220-3、220-4がネットワーク230LANを介して接続される。ユーザ端末用計算機200とマスタ用計算機210と複数のワーカー用計算機220-1、220-2、220-3、220-4は、上述した図1の計算機100で構成される。なお、以下では、ワーカー用計算機の総称をワーカー用計算機220とする。尚、その他の構成要素についても同様であり、符号の添え字を除いたものが総称を示す。ユーザ端末用計算機200は、初期化部250と収束判定部255と機械学習指令部260を有する。マスタ用計算機210はジョブ管理部265を有する。ワーカー用計算機220はタスク管理部270とMap処理部275もしくはReduce処理部280を有する。ワーカー用計算機220のタスク管理部270は、Map処理部275もしくはReduce処理部280を実行する。また、Map処理部275とReduce処理部280は一台の計算機に共存させることも可能である。Map処理部275は、素性選択部278とMap関数計算部285と複数モデル管理部295を有する。Reduce処理部290はReduce関数処理部290と複数モデル管理部295を有する。ユーザ端末用計算機200とマスタ用計算機210とワーカー用計算機220は、一般的なLAN230によって接続されており、具体的にはLANで接続されている。分散ファイルシステム240は、分散記憶装置として機能し、複数の計算機からなっており、具体的にはHadoopDistributedFileSystemHDFSを用いている。HDFSはNameNodeとSecondaryNameNodeとDataNodeからなっている。NameNodeは分散ノードにどのようにデータを配置するかを管理する。SecondaryNameNodeはNameNodeをバックアップする。DataNodeは各ノードで動作し、データの実体を管理する。分散ファイルシステムとマスタとワーカーは前記のネットワークによって接続されている。タスク管理部270とDataNodeを一台の計算機に共存することも可能である。マスタ用計算機210とワーカー用計算機220は、分散ファイルシステムを構成する要素を兼務することができる。マスタ用計算機210はワーカー用計算機220のIPアドレスまたはホスト名のリストを保持している。ワーカー用計算機220の利用可能な計算資源はマスタ用計算機210が把握している。ワーカー用計算機220の利用可能な計算資源とは、同時に実行できるスレッド数、使用可能なメモリ量の最大値、使用可能なローカルファイルシステムの領域を指す。ワーカー用計算機220を追加する場合、ワーカー側の設定として、分散ファイルシステムと通信するためのエージェントと、タスク管理部270をインストールする必要がある。また、マスタ側の設定として、ワーカー用計算機のIPアドレスやホスト名、さらに計算機資源の情報を追加する。ユーザ端末用計算機200とマスタ用計算機210とワーカー用計算機220と分散ファイルシステムをつなぐネットワークは速度が求められるため、一つのデータセンタ内に存在している。それぞれの構成要素を別のデータセンタに置くことも可能であるが、ネットワークの帯域や遅延などの問題があるため、その場合はデータ転送の速度が低下する。図3に示すように、機械学習はCPU110で実行可能なソフトウェアとして実装されている。機械学習のソフトウェアはユーザ端末用とマスタ用とワーカー用が存在している。各ソフトウェアは、記憶媒体としてのローカルファイルシステム130等に格納することができる。ユーザ端末用計算機200で実行されるソフトウェアは、機械学習の初期化部250と収束判定部255と機械学習指令部260図2参照である。初期化部250はモデルパラメータ300の初期化を行う。収束判定部255は、機械学習の結果であるモデルパラメータ310が収束しているか否かを判定する。機械学習指令部260はユーザ端末用計算機200の入出力の管理と、初期化部250と収束判定部255の呼び出しと、マスタ用計算機210への分散計算実行の指示を行う。マスタ用計算機210で動作するソフトウェアは、ジョブ管理部265図2参照であり、各ワーカー用計算機220のタスク管理部270へのMap処理部275とReduce処理部280の割り当てと、特徴量データ245の割り当てを行う。なお、ジョブ管理部265のMap処理部275の割り当ては、Map処理プログラムMap処理部テンプレート740図7B参照とMap関数730をワーカー用計算機220へ送信送信することで行う。また、ジョブ管理部265のReduce処理部280の割り当ては、Reduce処理プログラムReduce処理部テンプレート760図7C参照とReduce関数750とをワーカー用計算機220を送信することで行うようにしても良い。この他、ワーカー用計算機220上で動作するソフトウェアとして、マスタ用計算機210のジョブ管理部265とデータ通信を行うタスク管理部270がある。ワーカー用計算機220のタスク管理部270が呼び出す処理部は2種類存在する。一つ目は分散ファイルシステム240からのデータの取得と、複数モデル管理部295の実行とMap関数計算部285の実行と素性選択部278の実行とを行うMap処理部275である。複数モデル管理部295は全てのモデルパラメータ300をユーザ端末用計算機200から受け取り、保存する。Map処理部275は、分散ファイルシステム240から特徴量データ245を1つ読み出すと、複数モデル管理部295内に存在するメタパラメータ、素性インデックス、モデルパラメータの組に対して、素性選択278とMap関数計算部285を実行し、中間出力データ320を出力する。全てのモデルパラメータに対する計算が終わると、Map処理部275は次の特徴量データを読み出し、全てのモデルパラメータに対するMap関数の計算を繰り返す。特徴量データ245がなくなると、Map処理部275は処理を終了する。ワーカー用計算機220のタスク管理部270が呼び出すもうひとつの処理部は、機械学習のMap関数の結果の統合を行うReduce処理部である。Reduce処理部はMap処理部から中間出力データ320を受け取る。Reduce処理部280は、中間出力データ320に対応するメタパラメータを複数モデル管理部295から取得し、Reduce関数計算部290を実行し、システムの出力となるモデルパラメータ310をユーザ端末用計算機200へ返す。その後、ユーザ端末用計算機200では、収束判定部255が学習結果であるモデルパラメータ310の収束判定を行う。あるモデル識別子に属するモデルパラメータ310が収束条件を満たす場合には、次回の計算対象から除外する。全てのモデル識別子に属するモデルパラメータが収束した場合、システムの処理を終了する。ユーザ端末用計算機200では、収束条件を満たさないモデルパラメータについて、出力データ310を入力データ300とし、ワーカー用計算機220に再度処理を実行させる。次に、分散計算機システムの起動手順について説明する。分散計算機システムの使用者または管理者はユーザ端末用計算機200の電源を投入し、OSオペレーティングシステムを立ち上げる。同様にマスタ用計算機210とすべてのワーカー用計算機220の電源を投入してOSを立ち上げる。ユーザ端末用計算機200とマスタ用計算機21とワーカー用計算機220のすべてが起動し、分散ファイルシステム240にアクセス可能な状態へ移行する。次にマスタ用計算機210でジョブ管理部265を起動させる。そしてワーカー用計算機220ではそれぞれタスク管理部270を起動させる。マスタ用計算機210ではジョブ管理部265が、ワーカー用計算機220のタスク管理部270と通信可能であることを確認する。また、ユーザ端末用計算機200はマスタ用計算機210のジョブ管理部265と通信可能であることを確認する。マスタ用計算機210が保持する設定ファイル図示省略に機械学習で使用するワーカー用計算機220のIPアドレスやホスト名をすべて追加する。設定ファイルへの情報の追加は、ユーザ端末用計算機200が行うことができる。以降、各計算機の各管理部と各処理部は、マスタ用計算機210に保持されたIPアドレス及びホスト名をもとに通信を行う。また、図3において、Reduce処理はひとつのワーカー用計算機220-4上で並列化されることを示し、図中220-4’で示す。Reduce処理の並列化については後述する。図4は分散計算機システムで実行するデータ処理の一例を示すフローチャートである。図中ステップ400でユーザ端末用計算機200の初期化部250は、全てのメタパラメータLと素性インデックスFに対応するモデルパラメータMを初期化する。ステップ410では、ユーザ端末用計算機200の初期化部250が、各ワーカーのタスク管理部270に、メタパラメータL,素性インデックスF,モデルパラメータMのリストと、Map処理部275とReduce処理部280を配布する。各ワーカー220では、Map処理部275とReduce処理部280が初期化される。ステップ420で各Map処理部275はデータxを分散ファイルシステム240から取得する。ステップ430で各Map処理部275はデータxが空nullならばMap処理部275を終了する。このとき処理はステップ470に移行する。データxが空でない場合、ステップ440に移る。ステップ440で各Map処理部275は複数モデル管理部295からメタパラメータL,素性インデックスF,モデルパラメータMの組を取得する。以下では、このデータの組をL,F,Mで示す。ステップ450で各Map処理部275はL,F,Mが空nullならばMap関数計算部285を終了し、ステップ420に戻る。一方、L,F,Mが空nullでない場合は、ステップ455に進む。ステップ455で各素性選択部278は、データxから素性インデクスFに記述されている素性のみを抽出しデータx’を生成する。ステップ460で各Map処理部275はデータx’とモデルパラメータMとメタパラメータLに対してMap関数計算部285を実行し、計算結果をReduce処理部280に送信する。送信後は440に戻る。ステップ470で、Reduce処理部280は、各Map関数計算部285の計算結果と、この計算結果に対応するメタパラメータLをもとにReduce関数計算部290を実行し、新たなモデルパラメータを生成してから、分散ファイルシステム240に生成したモデルパラメータMを書き込む。ステップ480で、収束判定部255は分散ファイルシステム240から各メタパラメータLに対応するモデルパラメータMを読み込み、それぞれ収束条件を計算する。収束条件を満たしているモデルパラメータMに関しては、次回の計算対象から外す。全てのモデルパラメータMが収束条件を満たしている場合には処理を終了する。そうでない場合にはステップ410に戻って、収束条件を満たしたモデルパラメータMを除いて上記処理を繰り返す。なお、ステップ470でReduce処理部280は、学習結果である新たなモデルパラメータをユーザ端末用計算機200へ送信し、ステップ480では、収束判定部255が受信した新たなモデルパラメータについて収束条件の判定を行うようにしても良い。以上のフローチャートを、1回行う場合について具体的に記述したものが図5である。図5は、図4の処理を1回行うときのシーケンスを示す。Loop[L,F,M]510内においてMap関数計算部285では、分散ファイルシステム240へのアクセスが起こっていないことが分かる。また、モデルパラメータMの数が増えているが、Reduce関数は異なるモデルパラメータMを独立して計算することができる。この特性によってReduce処理部280の並列数が増加する。これにより、本発明では分散ファイルシステム240へのアクセスを削減し、図3で示した220-4、220-4’のようにReduce処理の並列数を上げることで、複数モデルの学習を高速化している。なお、本実施形態では、Map関数を実行するごとに中間結果320がReduce処理部280に転送される。つまり、データの個数は中間結果の個数と比例する。多くのMapReduceプログラムでは、Reduce関数の一部をMap処理部で行うCombinerを利用することで、Map処理部とReduce処理部との間のデータ通信量を減らしている。Combinerを用いた場合、Reduce処理部に転送されるデータ数は、モデル数と比例する。このように、大量のデータを扱う場合には、Combinerを導入すると、処理が高速化される。本発明においても、k-meansや線形SVMなどの多くのアルゴリズムでCombinerを用いることが可能である。この処理によって多くの機械学習アルゴリズムは、いかなる並列数にでも並列化することができる。本発明により並列化される機械学習は、以下の3つの特徴を持つ。1分類モデルや識別モデル、回帰モデルをもつ。2学習データをモデルに適用することでモデルパラメータを決定する。3モデルパラメータの妥当性をフィードバックとしてパラメータに修正をかける。上記のうち、2の手順で学習データを走査する部分をMap関数計算部285として分散し、Reduce関数計算部290での統合処理を行うことで、本発明は機械学習アルゴリズムを並列化している。そのため、2の手順で学習データを並列的に読み込むことができる学習モデルが本発明に適する。そのようなアルゴリズムとして、k-means、線形SVMなどがあり、代表的な機械学習手法に対して発明を適用することが可能である。例えば、k-meansの場合、1のモデルパラメータとして、各クラスタの重心ベクトルを持つ。2のモデルパラメータの決定は、学習データがどのクラスタに属するかの判定と、クラスタに属する学習データから新たなクラスタ重心の計算する手続きである。3のパラメータの妥当性の検証では、以前のクラスタ重心との距離を検証する。そして、基準を満たす場合、つまり学習前後での重心の移動量が閾値よりも小さい場合、学習を終了する。基準を満たさない場合は、新しく計算された重心ベクトルを用いて再度、上記2の手順を実行する。ここで、上記2の学習データがどのクラスタに属するかの判定と、新しいクラスタ重心の計算で総和をとる部分を並列化することができる。以下では、図6をもとに具体例としてk-meansによる数値ベクトルのクラスタリングを本分散計算機システム上で実行する手順を説明する。ステップ600で、ユーザ端末用計算機200で初期化を行う。ステップ600は図4のステップ400の処理に相当する。はじめに、ユーザはメタパラメータLと素性インデックスFをm組準備する。ユーザ端末用計算機100において機械学習指令部260が、m組のメタパラメータと素性インデックスに対して、m個のモデルパラメータの初期化を行う。ここで、それぞれのモデルに割り当てられたモデル識別子をMIDと表記する。k-meansクラスタリングにおけるメタパラメータとは、クラスタの数kである。また、素性インデックスとは、特徴量データのうち、解析対象とする次元を列挙したリストFである。モデルパラメータとは、クラスタの重心ベクトルCであり、クラスタ数kに伴いk個存在する。モデルパラメータの初期化とは、クラスタの重心ベクトルCをランダムに決定することである。今、学習対象のモデルはm個であるため、重心ベクトルCもm組存在する。ステップ610で、マスタ用計算機210のジョブ管理部265に対してクラスタ数kと、リストFと重心ベクトルCの組をm個とMap処理部275とReduce処理部290を各ワーカー用計算機220に送信する。ステップ620で、各Map処理部275が分散ファイルシステム240から特徴量データxを読み出す。xは数値ベクトルである。ステップ630で各Map処理部275はデータxが空nullならばMap処理部を終了する。このとき処理は670に移行する。特徴量データxが空でない場合、ステップ640に移る。ステップ640で各Map処理部275は複数モデル管理部295からk,F,Cの組を取得する。ステップ650で各Map処理部275はk,F,Cが空ならばMap関数計算部285を終了し、ステップ620に戻る。そうでないならば、ステップ655に移る。ステップ655で各ワーカー用計算機220の素性選択部275は、数値ベクトルxからリストFに記述されている次元の数値のみを抽出し数値ベクトルx’を生成する。ステップ660で各Map処理部275は数値ベクトルx’がk個の重心ベクトルCのうち、どれに最も近いかを計算し、帰属する重心ベクトルを決定する。数値ベクトルx’の値と帰属先のラベルt,{t|1<=t<=k,t∈Z}をReduce処理部280に送信する。ただし、Zは自然数の集合を表す。ステップ670で、各Reduce処理部280は、各Map関数計算部285の結果を受け取る。Reduce処理部280はラベルtごとに数値ベクトルx’の重心ベクトルを計算し、k個の重心ベクトルを計算し、分散ファイルシステム240に書き込む。ステップ680で、ユーザ端末用計算機200の収束判定部255は分散ファイルシステム240からクラスタ数kに対応する重心ベクトルCを読み込み、それぞれ収束条件を計算する。具体的には、新しい重心ベクトルCと従来の重心ベクトルCとの差ΔCを計算し、差ΔCが所定の閾値以内なら収束と判定し、そうでなければ未収束と判定する。収束している重心ベクトルCに関しては、次回の計算対象から外す。そうでない場合には重心ベクトルCを計算対象に追加する。全ての重心ベクトルCが収束している場合には処理を終了する。そうでない場合、ステップ610に戻る。なお、収束判定の方式はこれ以外にも、あらかじめ決められた数の反復を行うなどの方法が考えられる。k-meansクラスタリングにおいて、Combinerを用いる場合について説明する。上記図6のステップ660で、Map関数計算部285が出力した数値ベクトルxx’とラベルtをCombinerが受け取る。Combinerはラベルtごとに数値ベクトルx’の総和Sと数値ベクトルx’の数nを計算する。ステップ630で、Map処理部275が終了する際に、Combinerは数値ベクトルx’の総和Sと数値ベクトルx’の数nとをReduce処理部280に送信する。ステップ670で、Reduce関数計算部290はラベルtごとに各数値ベクトルx’の総和Sの総和S’と各nの総和n’を計算する。そして、ラベルtに相当する重心ベクトルを総和S’/総和n’として更新する。図7A~図7Cは、機械学習指令部260とMap処理部275とReduce処理部280のソフトウェアの概要を示すブロック図である。これらの各部は、共通部分と学習手法依存の部分に分けられている。図7Aは、機械学習指令部260のソフトウェア構成を示すブロック図で、図7Bは、Map処理部275のソフトウェア構成を示すブロック図で、図7Cは、Reduce処理部280のソフトウェア構成を示すブロック図である。図7Aに示すようにユーザ端末用計算機200の機械学習指令部260においては、利用者はk-means用初期化部700とk-means用収束判定処理部710を作成するだけでよい。そのほかの、ジョブ管理部265や分散ファイルシステム240との通信、コマンドライン引数等の処理は機械学習指令部テンプレート720に実装されている。図7Bに示すようにMap処理部275において、利用者はk-means用Map関数730を作成するだけでよい。Map処理部275の共通部分とは、タスク管理部270やReduce処理部280、分散ファイルシステム240との通信や、素性選択部278、複数モデル管理部295などであり、Map処理部テンプレート740に実装されている。図7Cに示すようにReduce処理部280において、利用者はk-means用のReduce関数750を作成するだけでよい。Reduce処理部280の共通部分とは、タスク管理部270や、Map処理部275、分散ファイルシステム240との通信や、Reduce関数計算部290の呼び出しであり、Reduce処理部テンプレート760に実装されている。このように、本発明では機械学習に共通する部分はテンプレートとして用意されているため、利用者が作成するプログラムの量を減らすことができ、開発を効率的にすることが可能である。図8は、本発明におけるk-meansのモデルパラメータのデータ構造800を示す。図8は、key-value形式のデータであり、keyとしてモデル識別子とクラスタ識別子の組MID_CIDを持ち、Valueとして重心ベクトルの座標を持つ。2行目のkeyの1_2とはモデル識別子が1、クラスタIDが2であることを示しており、複数個存在するモデルのうち1つ目のモデルであり、2番目のクラスタの重心ベクトルであることを意味している。keyにモデル識別子が含まれているため、単一のリストに全てのモデルのモデルパラメータを格納しても、どのモデルに属するモデルパラメータかを容易に判別することができる。このモデルパラメータは、図2のMap処理部275がReduce処理部280へ中間結果320を送信する際に、中間結果に対応するモデルの情報をキーとして記録しておくことで、Reduce処理部280では、中間結果を受け取った際に、キーを参照すれば中間結果に対応するモデルを判別することができる。図9A、図9Bは機械学習に用いる特徴量データを示す。自然言語の文書や、画像データなどの様々な形式のデータを機械学習で扱いやすいように変換したデータが特徴量データである。図9Bのテーブル910で示すように、特徴量データはラベルと数値ベクトルの組からなる。一行に一つのラベルと数値ベクトルが記されている。特徴量データでの必須項目は数値ベクトルであり、場合によりラベルは省略される。例えば、学習時で用いられる特徴量データにはラベルが付与されているが、テストで用いられる場合はラベルが付与されていない。また、図9Aのテーブル900のように教師なし学習の場合には、学習で用いられる特徴量にもラベルが付与されない。本発明は、上記のような実施形態の構成にすることにより、以下の2つの機能と効果を奏することができる。1Map処理部275が分散ファイルシステム240へのアクセス頻度を削減し、データアクセス速度を改善する2モデル個数分だけキーの種類が増加し、Reduce処理の並列度が増加する前記従来例に示したMapReduceを機械学習に用いる場合の例を図10と図11に示す。MapReduceを用いてm回のモデル学習を行ったとすると、図11の全体がm回繰り返されるので、分散ファイルシステムへのアクセス回数がm倍になる。一方で本発明では、図5のLOOP[データ]に示すように、Map処理部275が分散ファイルシステム240から特徴量データを読み出すのは、モデル数にかかわらず1度である。そのため、本発明では、前記従来例に比して分散ファイルシステム240へのアクセス頻度がm分の1になる。分散ファイルシステム240へのアクセスは、転送速度、遅延の点でメモリに劣る場合が一般的であり、データアクセス速度が改善される。また、本発明ではm個のモデルを並行して学習しているため、Map処理部275の部分出力のキーの種類は前記従来例のm倍になり、これによってReduce処理部280の並列数もm倍になる。ここで、1回のモデル学習にN回の反復処理が必要であるとする。前記従来例のMapReduceではm個のモデル学習でMap処理及びReduce処理の起動及び終了がm×N回行われる。一方で本発明では、1度の学習処理の中でm個のモデルを学習するため、Map処理及びReduce処理の起動及び終了回数はN回である。学習処理の前に、素性選択のみを行った場合には、前記従来例の場合、元の特徴量データのファイルサイズと、素性選択で選択される次元数とに比例したサイズのファイルが生成され、分散ファイルシステムの容量が圧迫される。これに対して、本発明では素性選択をMap処理の中で行っている。そのため、必要とする分散ファイルシステム240の容量が小さくなるという効果もある。以上のように、分散処理環境において機械学習を実行する上で本発明はネットワークの通信量と、CPU資源と、分散ファイルシステム240の使用量を削減することができる。また、Map処理部275が特徴量データを保持するため、Map関数計算部285においてメモリ上のデータを再利用することも可能である。本発明によって並列化したk-means法の実行時間を計測した実験結果を以下に示す。実験には、ユーザ端末用計算機200とマスタ用計算機210を兼務する計算機1台と、ワーカー用計算機220を12台と1つの分散ファイルシステム240と1GbpsのLAN230を用いた。特徴量データとして、2000次元の数値ベクトル500,000点を用いた。なお、図2では、ユーザ端末用計算機200とマスタ用計算機210を異なる計算機で提供する例を示したが、図示はしないが単一の計算機が初期化部250、収束判定部255、機械学習指令部260、ジョブ管理部265を備える構成であっても良い。ユーザ端末兼マスタ用計算機はCPUを8個持ち、メモリを2GB備え、ローカルファイルシステムを250GB持つ。12台のワーカーは、それぞれCPUを8個持つ。12台のワーカーのうち4台はメモリを4GB持ち、ローカルファイルシステムを1TB持つ。残りの8台のワーカーは、8GBのメモリを持ち、2TBのローカルファイルシステムを持つ。各ワーカーには、1個のタスク管理部270を実行させた。タスク管理部270は、ワーカー用計算機220の負荷に合わせ最大8個のMap処理部275と8個のReduce処理部280を実行する。素性の数とメタパラメータkの組を200,2,500,3,1000,5,1500,7,1700,11,200,11,500,7,1000,5,1500,3,1700,2の10種類とした。1000,5は二回出現するが、別のモデルとして扱われる。それぞれの素性は、全2000次元の素性から、ランダムに選択した。なお、kはクラスタ数を表す。試行は1モデルの場合からはじめ、学習するモデルをひとつずつ追加した。このため、1回目の試行は1モデル、2回目の2モデル、10回目の試行は10モデルの学習を行う。比較する従来例として、Hadoopを用いたオープンソースの並列機械学習ソフトウェアMahout0.4を用いた。Mahoutには、複数のモデルパラメータを並行して学習する機構は実装されていないため、単一のモデルパラメータ学習を複数回繰り返した。それぞれのモデル数について、6試行の学習を行い、実行時間を測定した。6試行のうち、平均実行時間から最も離れた試行を除外した5試行について、平均と標準偏差を計算した。図12に学習するモデル数に対する平均実行時間を示す。横軸は、同時に探索するモデル数を表し、縦軸は本発明とMahoutの実行時間[s]を表す。本発明の結果を実線で示し、前記従来例の結果を破線で示す。1モデルのみを探索した場合には、本発明は従来例に比して1.10倍の速度を示している。従来例のMahoutでは、k-means法の実行に先立って、分散ファイルシステムから元データを読み、素性選択を行い、分散ファイルシステムに書き出すという操作が必要である。そのため、本発明と比較して、分散ファイルシステムからの読み込みが1回、書き出しが1回多くなる。このような理由で1モデルのみの学習でも、実行速度が向上したと考えられる。2モデルを学習する場合には本発明は従来例に比して1.90倍の速度を示し、5モデルを学習する場合には3.66倍、10モデルの場合には5.53倍の速度を示している。同時に学習するモデル数が多いほど、本発明は従来例に比して速度向上率は大きくなる。また、10モデルの場合の実行時間を1モデルの場合と比較すると、従来例のMahoutの場合は9.80倍であるのに対し、本発明の場合は1.94倍と小さい。実時間で比較すると、Mahoutが2個のモデルを学習する時間内に、本発明は10個のモデルを学習することが可能である。以上のように、従来例のMahoutがk-meansの処理全体をモデル数回だけ繰り返しているのに対し、本発明は複数モデル学習の共通部分を共用化することで、実行時間を短縮していることがわかる。<第2実施形態>次に、本発明の第2の実施の形態について説明する。第2実施形態で用いる分散計算機システムの構成は、前記第1実施形態と同一である。本第2実施形態では、図2に示した初期化部250とMap処理部275における素性選択部278が第1実施形態とは異なる。本第2実施形態例において、利用者は特徴量データの全ての素性を用いて分析を行う。そのため、ユーザが設定する素性は1種類である。初期化部250では、全てのメタパラメータLに対応するモデルパラメータMを初期化する。初期化部250はタスク処理部270にL,MのリストとMap処理部275とReduce処理部280を送信する。Map処理部275は、特徴量データxに対し、複数モデル管理部295からL,Mを取得し、データx,モデルパラメータM,メタパラメータLに対してmap関数を計算し、Reduce処理部280に出力する。素性選択は行われないため、素性選択部278はシステムから削除してもよい。第2の実施形態では、素性選択を行わないため、第1の実施形態と比べて計算が少なくなる。また、素性選択部278が必要ないため、実行に必要なワーカーのメモリ量も削減されると考えられる。第2の実施の形態によって並列化したk-means法の実行時間を計測した。実験に用いた計算機環境とデータは実施例1の実験と同様である。学習には2000次元すべての素性を用いた。学習に用いたメタパラメータkは、a2、b3、c5、d7、e11の5種類である。実験はaのみの場合からはじめ、b、cと学習するモデルをひとつずつ追加した。このため、1回目の試行は1モデル、2回目の2モデル、5回目の試行は5モデルの学習を行う。それぞれのモデル数について、6試行の学習を行い、実行時間を測定した。6試行のうち、平均実行時間から最も離れた試行を除外した5試行について、平均と標準偏差を計算した。図13に学習するモデル数に対する平均実行時間を示す。横軸は、同時に学習するモデル数を表し、縦軸は本発明と従来例のMahoutの実行時間[s]を表す。本発明の結果を実線で示し、前記従来例の結果を破線で示す。2モデルを学習する場合には、本発明は従来例に比して1.73倍の速度を示し、5モデルを学習する場合には、3.02倍の速度を示している。同時に学習するモデル数が多いほど、本発明の速度向上率は大きくなるという傾向が、第1の実施形態と同様に見られる。一方で、従来例のMahout、本発明とも素性選択を行わないため、第1の実施形態と比べて速度差が小さくなっている。<第3実施形態>次に、本発明の第3の実施の形態について説明する。第3実施形態で用いる分散計算機システムの構成は、前記第1実施形態と同一である。前記図2に示した初期化部250とMap処理部275におけるメタパラメータが1種類に固定されている点が第1実施形態とは異なる。本第3実施形態例において、メタパラメータLのインスタンスは全てのモデルで共通であるため、メタパラメータLを素性インデックスF,モデルパラメータMとは別に管理することができる。初期化部250では、ひとつのメタパラメータLを用いて、素性インデックスFの個数だけモデルパラメータMを初期化する。初期化部はタスク処理部にF,MのリストとひとつのメタパラメータLとMap処理部275とReduce処理部280を送信する。Map処理部275は、メタパラメータLをあらかじめ複数モデル管理部295から読み出しておく。その後、Map処理部275は、特徴量データxに対し、複数モデル管理部295からF,Mを取得する。素性インデックスFに基づきデータxを素性選択し、数値ベクトルx’を作成する。数値ベクトルx’,モデルパラメータM,メタパラメータLに対してmap関数を計算し、Reduce処理部280に出力する。全モデルにおいて共通するメタパラメータLを共用することでマスタ用計算機210とワーカー世220間の通信量を削減することができる。また、複数モデル管理部295がメタパラメータL,素性インデックスF,モデルパラメータMの管理に要するメモリ量を削減することができる。第3の実施の形態によって並列化したk-means法の実行時間を計測した。実験に用いた計算機環境とデータは実施例1の実験と同様である。学習に用いる素性を、a200次元、b500次元、c1000次元、d1500次元、e1700次元の5種類とした。それぞれの素性は、全2000次元の素性から、ランダムに選択した。aからeのデータに対して、メタパラメータkを5と定めた。実験はaのみの場合からはじめ、b、cと学習するモデルをひとつずつ追加した。このため、1回目の試行は1モデル、2回目の2モデル、5回目の試行は5モデルの学習を行う。それぞれのモデル数について、6試行の学習を行い、実行時間を測定した。6試行のうち、平均実行時間から最も離れた試行を除外した5試行について、平均と標準偏差を求めた。図14に学習するモデル数に対する実行時間を示す。横軸は、同時に学習するモデル数を表し、縦軸は本発明とMahoutの平均実行時間[s]を表す。本発明の結果を実線で示し、前記従来例の結果を破線で示す。2モデルを学習する場合には、本発明は従来例に比して1.95倍の速度を示し、5モデルを学習する場合には、3.71倍の速度を示している。同時に学習するモデル数が多いほど、本発明の速度向上率は大きくなるという傾向が、第1、第2の実施形態と同様に見られる。また、クラスタリングに先立って素性選択が行われるため、第1の実施形態と近い速度向上率を示している。<第4実施形態>次に、本発明の第4の実施の形態について説明する。第4実施の形態で用いる分散計算機システムの構成は、前記第1実施形態と同一である。メタパラメータLと素性インデックスFの配布方法、Map処理部275における特徴量データの読み出し方法と保持方法、Reduce処理部が無い点が第1実施形態とは異なる。機械学習アルゴリズムには、オンライン学習の一種であるonlineEMなどMapReduceで並列化できないアルゴリズムが存在する。このようなアルゴリズムは特徴量データに対して並列に学習可能なステップを持たず、特徴量データ読み出しの並列化ができないためである。このようなアルゴリズムに対して、複数モデル学習を行う場合、Map関数のみで学習が完結する。このようなアルゴリズムでは、特徴量データの読み出しを並列化することができないため、大量のデータを扱うことが難しい。そのため、メモリに乗り切る程度の量の特徴量データを扱うと仮定する。本実施形態において、Map関数は学習アルゴリズムを実装したプログラムであり、メタパラメータLと特徴量データDとを受け取り、モデルパラメータを出力する。第1実施形態において、各Map処理部はそれぞれ共通のL,Fを保持していたが、本実施形態において、各Map処理部で計算されるそれぞれ別のL,Fを保持する。初期化では、メタパラメータLと素性インデックスFを準備する。初期モデルパラメータはMap関数内で生成されるため、ここでは計算されない。そして、L,Fを分散ファイルシステムに記録する。複数のL,Fをひとつのファイルに保存することも可能である。Map処理部の数は、L,Fを記録したファイルの数に比例する。各タスク管理部にMap処理部を配布し、各複数モデル管理部にL,Fのパスを配布する。Map処理部はL,Fのパスをもとに分散ファイルシステムからL,Fを読み出す。次に特徴量データDを分散ファイルシステム240から取得する。このとき、全ての行のデータDを読み出す。Map処理部275は複数モデル管理部295からL,Fを取得する。L,Fが空nullの場合、Map処理部275を終了する。そうでない場合、素性インデックスFに基づきデータDの素性を選択し、D’を生成する。Map関数計算部285はデータD’、素性インデックスLに対してmap関数を計算し、結果を分散ファイルシステム240に記述する。この際のデータ構造は第1実施形態の場合と同様に、key-value形式である。keyにはモデル識別子を記録する。valueにはモデルパラメータを記録する。ユーザ端末用計算機200の収束判定部255は全てのモデルパラメータが計算されると収束と判定し、結果をユーザに提示する。第2実施例のように、メタパラメータのみを変化させる場合には、図2に示した素性選択部278は必要とされない。第3実施例のように、素性インデックスのみを変化させる場合には、メタパラメータMは共通である。アルゴリズムを並列化できない場合でも、個々の学習を並列に実施することでモデルパラメータを高速に学習できる。また、同一のファイル内に存在する複数のL,Mについて学習をするとき、分散ファイルシステムからの読み出しが1度で複数のモデルパラメータを学習することができる。このため、単にMapReduceによって並列化した場合と比べて、分散ファイルシステムからのデータの読み出し回数を削減し、高速化できる。<第5実施形態>次に、本発明の第5の実施の形態について説明する。第5実施形態で用いる分散計算機システムの構成は、前記第4実施形態と同一である。学習用の特徴量データの他、評価用の特徴量データが与えられている点、Map関数が学習器のほか識別器と精度評価器を持つ点、収束判定部255が優劣判定を行う点が異なる。ここで、学習器、識別器、精度評価器の役割を説明する。学習器は、メタパラメータLと、正解ラベル付きの特徴量データから、モデルパラメータMを決定する。識別器は、モデルパラメータMを元に、入力される特徴量データのラベルを決定する。また、精度評価器は、識別器の出力するラベル列と正解ラベル列を比較し、識別精度を評価する。Map処理部275はL,Fのパスをもとに分散ファイルシステムからL,Fを読み出す。次に学習用の特徴量データDを分散ファイルシステムから取得する。このとき、全ての行のデータDを読み出す。次に評価用の特徴量データTを分散ファイルシステム240から取得する。評価用の特徴量データTも、学習用の特徴量データDと同様に全ての行のデータを読み出す。Map処理部275は複数モデル管理部からL,Fを取得する。L,Fが空nullの場合、Map処理部275を終了する。そうでない場合、素性インデックスFに基づきデータDの素性を選択し、データD’を生成する。同様に素性インデックスFに基づき評価用の特徴量データTの素性を選択し、評価用の特徴量データT’を生成する。Map関数計算部285はデータD’、メタパラメータLに対してmap関数の学習器を実行し、モデルパラメータMを生成する。次に、評価用の特徴量データT’、メタパラメータL、モデルパラメータMに対してmap関数の識別器を実行し、結果を精度評価器で評価する。精度評価には、正答率や、誤答率、再現率、適合率、F値などの公知または周知の統計情報が用いられる。そして、Map関数計算部285は演算結果を分散ファイルシステム240に格納する。この際のデータ構造は第1実施形態の場合と同様に、key-value形式である。keyには前記第1実施形態と同様にモデル識別子を記録する。valueにはモデルパラメータと精度評価の結果を記録する。ユーザ端末用計算機200の収束判定部255は全てのモデルパラメータが計算されると収束と判断し、精度評価の結果とともにモデルパラメータをユーザに提示する。以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。"