(57)【要約】【課題】本発明の課題は、複数の処理で構成され、ある処理の出力結果が他の処理に使われるデータ処理において、再利用効率の高いデータを蓄積することを目的とする。【解決手段】上記課題は、コンピュータに、対象データから複数の処理を経て最終結果を求める過程で生成される、複数の出力データそれぞれについて、記憶部から前記複数の処理を経て最終結果を求める処理に関する処理内容を参照して、出力データのレポジトリに蓄積した場合の第１コストと出力データのレポジトリに蓄積しなかった場合の第２コストを生成し、前記複数の出力データそれぞれの蓄積有無を、前記第１のコストと第２のコストに基づき判定する処理を行わせるデータ蓄積判定プログラムにより達成される。【選択図】図５
2017162342.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
対象データから複数の処理を経て最終結果を求める過程で生成される、複数の出力データそれぞれについて、記憶部に蓄積された前記複数の処理を経て最終結果を求める処理に関する処理内容を参照して、出力データのレポジトリに蓄積した場合の第１コストと出力データのレポジトリに蓄積しなかった場合の第２コストを生成し、
前記複数の出力データそれぞれの蓄積有無を、前記第１コストと前記第２コストに基づき判定する
処理を行わせるデータ蓄積判定プログラム。
【請求項２】
前記コンピュータに、
前記複数の出力データのそれぞれが生成されたタイミングで、前記蓄積有無を判定させる
ことを特徴とする請求項１記載のデータ蓄積判定プログラム。
【請求項３】
前記コンピュータに、
前記対象データに対して第１の種類の処理の複数回の実行毎に、第２の種類の処理を実行する試行を複数回行わせ、前記第１の種類の処理の複数回の実行後で、該第１の種類の処理の複数回の実行で生成された前記複数の出力データのそれぞれの蓄積有無を判定させる
ことを特徴とする請求項１記載のデータ蓄積判定プログラム。
【請求項４】
前記コンピュータに、
前段の処理で生成された前記出力データを入力とする処理間の構造において、処理の段階の終了時で、該段階で生成された該出力データのそれぞれの蓄積有無を判定させる
ことを特徴とする請求項１記載のデータ蓄積判定プログラム。
【請求項５】
前記コンピュータに、
第１の種類の処理の複数回の実行毎に、第２の種類の処理を実行する試行をある一定回数行わせ、該試行の一定回数の実行後で、該第１の種類の処理の複数回の実行で生成された該出力データのそれぞれの蓄積有無を判定させる
ことを特徴とする請求項１記載のデータ蓄積判定プログラム。
【請求項６】
前記処理内容は、前段の処理で生成された前記出力データを入力とする処理間の構造において、該出力データの生成過程で得られた処理内容を包含し、
前記コンピュータに、
前記処理内容の包含関係に基づいて、前記処理の複雑さを算出し、
算出した前記複雑さが大きい程小さくなる、前記出力データが再利用される利用期待値を算出する
処理を行わせる請求項１乃至５のいずれかに記載のデータ蓄積判定プログラム。
【請求項７】
前記コンピュータに、
前記処理の実行で測定した実行時間と、前記出力データの再利用に係る再利用時間と、算出した前記利用期待値とを少なくとも用いて、該出力データのレポジトリに蓄積した場合の前記第１コストを算出し、
前記処理の実行で測定した実行時間と、算出した前記利用期待値とを用いて、該出力データのレポジトリに蓄積しなかった場合の前記第２コストを算出し、
前記第１コストが前記第２コスト以下の場合に、前記出力データを前記レポジトリに蓄積すると判定する
処理を行わせる請求項６記載のデータ蓄積判定プログラム。
【請求項８】
コンピュータが、
対象データから複数の処理を経て最終結果を求める過程で生成される、複数の出力データそれぞれについて、記憶部に蓄積された前記複数の処理を経て最終結果を求める処理に関する処理内容を参照して、出力データのレポジトリに蓄積した場合の第１コストと出力データのレポジトリに蓄積しなかった場合の第２コストを生成し、
前記複数の出力データそれぞれの蓄積有無を、前記第１コストと前記第２コストに基づき判定する
処理を行うデータ蓄積判定方法。
【請求項９】
対象データから複数の処理を経て最終結果を求める過程で生成される、複数の出力データそれぞれについて、記憶部に蓄積された前記複数の処理を経て最終結果を求める処理に関する処理内容を参照して、出力データのレポジトリに蓄積した場合の第１コストと出力データのレポジトリに蓄積しなかった場合の第２コストを生成する生成部と、
前記複数の出力データそれぞれの蓄積有無を、前記第１コストと前記第２コストに基づき判定する判定部と
を有するデータ蓄積判定装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ蓄積判定プログラム、データ蓄積判定方法、及びデータ蓄積判定装置に関する。
【背景技術】
【０００２】
近年、様々なシーンで生成され蓄積される大量のデータ（ビッグデータ）から、価値ある情報を抽出してビジネスに活用するため、機械学習などの高度な分析技術が盛んに使われている。この機械学習は、データ処理を繰り返すために大容量の保存領域が必要とされる。
【０００３】
大規模データ分析において、分析の中間段階で生成され保存されたデータに対するフィードバック情報を定量化して評価値として受け付け、評価値が与えられなかったデータについては優先的に削除する等の技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−２９１１号公報
【特許文献２】特開２０１４−１７４７２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述した技術では、蓄積したデータのうち評価値が与えられなかったデータを優先的に削除するため、以降の処理において実際には再利用価値の低いデータが保存され続けると言った問題がある。
【０００６】
したがって、１つの側面では、本発明は、複数の処理で構成され、ある処理の出力結果が他の処理に使われるデータ処理において、再利用効率の高いデータを蓄積することを目的とする。
【課題を解決するための手段】
【０００７】
一態様によれば、コンピュータに、対象データから複数の処理を経て最終結果を求める過程で生成される、複数の出力データそれぞれについて、記憶部に蓄積された前記複数の処理を経て最終結果を求める処理に関する処理内容を参照して、出力データのレポジトリに蓄積した場合の第１コストと出力データのレポジトリに蓄積しなかった場合の第２コストを生成し、前記複数の出力データそれぞれの蓄積有無を、前記第１のコストと第２のコストに基づき判定する処理を行わせるデータ蓄積判定プログラムが提供される。
【０００８】
また、上記課題を解決するための手段として、データ蓄積判定方法、及び、データ蓄積判定装置とすることもできる。
【発明の効果】
【０００９】
複数の処理で構成され、ある処理の出力結果が他の処理に使われるデータ処理において、再利用効率の高いデータを蓄積できる。
【図面の簡単な説明】
【００１０】
【図１】１つのモデルを生成・評価する処理を説明するための図である。
【図２】遺伝的アルゴリズムを用いた逐次的な特徴抽出処理の例を説明するための図である。
【図３】本実施例における蓄積要否判定処理の概要を説明するための図である。
【図４】蓄積要否判定処理を行わない場合の一例を説明するための図である。
【図５】情報処理装置の機能構成の一例を示す図である。
【図６】情報処理装置のハードウェア構成を示す図である。
【図７】蓄積要否判定処理の第一例を説明するためのフローチャート図である。
【図８】図７のステップＳ４０２における、処理内容を生成する方法を説明するための図である。
【図９】図７のステップＳ４０８における、利用期待値を算出する方法を説明するための図である。
【図１０】図７のステップＳ４０９及びＳ４１０における、コスト算出及び蓄積要否判定の処理を説明するための図である。
【図１１】メタ情報テーブルの第一のデータ例を示す図である。
【図１２】メタ情報テーブルの第二のデータ例を示す図である。
【図１３】蓄積要否判定処理の第二例を説明するためのフローチャート図（続く）である。
【図１４】蓄積要否判定処理の第二例を説明するためのフローチャート図（続き）である。
【図１５】蓄積要否判定処理の第三例を説明するためのフローチャート図（続く）である。
【図１６】蓄積要否判定処理の第三例を説明するためのフローチャート図（続き）である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態を図面に基づいて説明する。機械学習による分析では、事前に予測や分類を行うモデルを生成し、そのモデルに実データを適用することで分析結果を得ることができる。
【００１２】
最適なモデルを生成するため、元データから特徴的なデータを抽出して学習用データを生成する特徴抽出処理、モデルを生成する学習処理、及び、生成されたモデルを評価する評価処理をモデルの精度が良くなるまで繰り返す方法が取られることがある。この繰り返し１回の処理について図１で説明する。
【００１３】
図１は、１つのモデルを生成・評価する処理を説明するための図である。図１において、繰り返し１回の処理は、上述したように、特徴抽出処理４０と、学習処理５０と、評価処理６０とによって行われる。
【００１４】
特徴抽出処理４０は、元データ３から予測や分類に効果的な、即ち、特徴的な情報を示した学習用データ９を抽出し、学習処理５０は、特徴抽出処理４０によって得られた学習用データ９からモデルを学習し、評価処理６０は、学習処理５０によって生成されたモデルに評価データを適用し、そのモデルの精度を評価する。
【００１５】
特徴抽出処理４０は、元データ３の種々の値を用いて得られる、元データ３から予測や分類に効果的な、即ち、特徴的な情報を抽出する。特徴的な情報は学習用データ９に相当する。
【００１６】
従来は、分析者が経験に基づいて、元データ３の種々の値を用いて特徴的なデータを抽出していたが、元データ３から抽出する特徴の数（対象データの次元数）が膨大になる場合も出てきているため、人手で有用な特徴を抽出することが難しくなっている。
【００１７】
そこで、あらゆる特徴を抽出して様々な学習用データ９を生成し、様々な学習用データ９の全てを学習しその結果を評価することで有用な特徴を最終的に見つけるという特徴抽出方法が考えられる。しかし、特徴抽出処理４０は時間が掛ることがあるため、現実的な処理時間内において、特徴数が膨大な場合は全てを抽出し、学習・評価することができない。
【００１８】
そこで、特徴の全候補の中から少量の特徴を抽出して学習及び評価を行い、良い評価結果を示した特徴は可能な限り残して一部を入れ替えることを繰り返す、逐次的な特徴抽出方法がある。このように、試行（特徴抽出処理４０、学習処理５０、そして、評価処理６０の繰り返し）の度にどの特徴を抽出するかを決定する方法として、遺伝的アルゴリズム（ＧＡ）が知られている。
【００１９】
このような逐次的な特徴抽出では、良い評価結果を示した特徴が残り続ける傾向があるため、複数の試行での特徴抽出において、何度も同じ特徴が抽出される。つまり、時間の掛る処理が何度も実行される。
【００２０】
一方、特徴抽出処理４０は、元データ３からの特徴抽出処理、結合処理等を含む複数の処理７から構成されることが多いため、ある処理７の出力データ８を一旦保存し、次の処理７の入力とすることが多い。
【００２１】
例えば、電力データ、気象データ等を含む元データ３から、学習用データ９を生成する場合、種々の処理７として、特徴ｂ抽出処理、特徴ｇ抽出処理、特徴ｈ抽出処理、・・・、特徴ｙ抽出処理、１以上の結合処理等が行われるとする。
【００２２】
特徴ｂ抽出処理では、気温の１日平均が計算され、特徴ｇ抽出処理では、気圧の月の分散が計算される、特徴ｈ抽出処理では、風力の１週間の最大値が計算される等が、元データ３から得られる値（生データ）を用いて行う初期処理段階となる。結合処理では、初期処理段階で得た出力データ８の２以上を結合、初期処理段階で得た出力データ８と結合処理後に得た出力データ８を含む２以上を結合、又は結合処理後に得た出力データ８を２以上を結合する等が行われる。
【００２３】
特徴抽出処理４０の処理７の構成を変えて、何度も繰り返される。つまり、何度も実行される処理の出力データ８を再利用できると、時間の掛る同じ処理を繰り返す必要がなく、機械学習に係る全体の処理時間を大幅に短縮できる。出力データ８は、特徴抽出処理４０における中間データに相当する。遺伝子アルゴリズムを用いた逐次的な特徴抽出処理４０の例を図２に示す。
【００２４】
図２は、遺伝的アルゴリズムを用いた逐次的な特徴抽出処理の例を説明するための図である。図２では、第１世代と第２世代での特徴抽出処理の例を示している。
【００２５】
第１世代において、異なる特徴の組み合せを抽出する特徴抽出処理４１１、４１２、・・・４１ｍ（総称して、特徴抽出処理４０という）の各々において、得られた学習用データ９を用いて学習処理５０によってモデルが生成され、そのモデルが評価処理６０によって評価される。
【００２６】
評価処理６０は、学習処理５０によって生成されたモデルが、新たな評価データからある事項をどの程度予測もしくは分類できるかなどを評価する。遺伝的アルゴリズムを用いた逐次的な特徴抽出処理では、この評価結果を遺伝的アルゴリズムにおける適応度として採用する。この例では、各個体（特徴の組み合せ）が目的の予測に適応しているか否かを丸印「○」又は×印「×」で示す。丸印「○」は、予測精度が閾値以上であることを示し、×印「×」は、予測精度が閾値未満であり予測に相応しい学習用データ９を得られなかったことを示している。
【００２７】
第１世代では、複数の特徴抽出処理４０によって、予め定めた組み合せ個数の範囲において、ランダムに特徴を組み合せる。
【００２８】
適応度「×」の評価となった学習用データ９のために抽出・組み合せられた特徴は以降の世代における特徴抽出処理４０において採用される確率が低い。この第１世代の例では、適応度「×」の評価となった特徴抽出処理４１２において抽出された特徴ａ、特徴ｃ、・・・、特徴ｐの組み合せは、第２世代以降において採用される確率が低い。
【００２９】
この例では、第１世代において、適応度「○」の評価となった特徴抽出処理４１１及び特徴抽出処理４１ｍにおいて組み合せた特徴ｂ、ｇ、・・・、ｙ及び特徴ｆ、ｌ、・・・、ｒが、第２世代において採用されている。
【００３０】
第２世代では、第１世代と同様の特徴を組み合せるのではなく、第１世代における組み合せ同士で特徴を交叉させる。即ち、適応度「○」の組み合せの中から２つの組み合せを予測精度に応じた確率で選択し、選択した２つの組み合せ間で特徴を入れ替える。
【００３１】
具体的には、特徴抽出処理４１１の特徴の組み合せ（ｂ、ｇ、・・・、ｙ）と、特徴抽出処理４１ｍの特徴の組み合せ（ｆ、ｌ、・・・、ｒ）とにおいて、特徴ｙを特徴ｒと入れ替える。従って、特徴抽出処理４２１では、組み合せ（ｂ、ｇ、・・・、ｒ）で特徴を抽出して様々な処理を行って得たデータを学習用データ９として取得する。
【００３２】
また、特徴抽出処理４２２では、組み合せ（ｆ、ｌ、・・・、ｙ）で特徴を抽出して種々の処理７を行い、学習用データ９を取得する。このように、１以上の組み合せのペアで特徴を交叉させ、特徴抽出処理４２１から特徴抽出処理４２ｎまでが行われる。
【００３３】
第１世代と同様に、第２世代においても、適応度「×」の評価となった特徴の組み合せは、次の第３世代において採用される確率が低くなる。一方で、第２世代以降において、元データ３から未だ抽出されていない特徴を抽出して、新たな組み合せで機械学習を行ってもよい。
【００３４】
このように、元データ３から初期に抽出する特徴の組み合せを変えて得た学習用データ９で学習処理５０を行い、評価処理６０が評価することを繰り返すことで、精度の高い予測を行える最良の特徴の組み合せを得ることができる。
【００３５】
一方で、複数の特徴抽出処理４０の各々における種々の処理７のうち、前の世代で行われた処理７と同様である場合がある。このような場合には、過去の出力データ８を再利用することが考えられる。
【００３６】
本実施例では、出力データ８が将来再利用されるであろう利用期待値や、出力データ８を生成するまでの処理の実行時間、出力データ８を再利用するのにかかる再利用時間に基づいて、出力データ８をレポジトリ９００に蓄積した場合と蓄積しなかった場合のコストが算出され、処理７で得られる出力データ８のレポジトリ９００への蓄積が判断される。
【００３７】
処理７の実行前に、過去に同様の処理７によって出力データ８がレポジトリ９００に蓄積されている場合には、処理７の実行は抑止される。レポジトリ９００に蓄積されていない場合には、処理７を実行し、出力データ８をレポジトリ９００に蓄積した場合と蓄積しなかった場合のコストが条件を満たす場合に、得られた出力データ８をレポジトリ９００に蓄積する。出力データ８をレポジトリ９００に蓄積した場合と蓄積しなかった場合のコストが条件を満たさない場合には、処理７を実行するのみとし、実行した結果得られた出力データ８をレポジトリ９００に蓄積しない。
【００３８】
本実施例では、処理７の実行によって得られる出力データ８に対する利用期待値や、出力データ８を生成するまでの処理の実行時間、出力データ８を再利用するのにかかる再利用時間に基づいて、蓄積要否を判定することで、機械学習中に生成される出力データ８の蓄積量の増加を抑止することができる。レポジトリ９００に要求される記憶容量を低減させることができる。
【００３９】
図２の例において、処理７を実行する際に、処理７によって得られる出力データ８の蓄積要否を判定する蓄積要否判定処理１４９を行う。蓄積要否判定処理１４９によって蓄積要と判定された出力データ８をレポジトリ９００に蓄積し、それ以外は蓄積しない。
【００４０】
図３は、本実施例における蓄積要否判定処理の概要を説明するための図である。図３において、特徴抽出処理４０として、特徴抽出処理Ａ及び特徴抽出処理Ｂを示す。特徴抽出処理Ａでは、種々の処理７として、処理ｂ、処理ｇ、処理ｈ、処理ｍ、及び処理ｐを示す。特徴抽出処理Ｂでは、種々の処理７として、処理ｂ、処理ｅ、処理ｑ、処理ｍ、及び処理ｐを示す。同一処理名は、同一の処理プログラムが使われることを表わす。ただし、同一処理名であっても入力データが異なる場合は、それらの処理の出力データは異なる。世代を問わず、特徴抽出処理Ａの後に、特徴抽出処理Ｂが行われるとする。
【００４１】
また、学習処理５０及び評価処理６０は、特徴抽出処理Ａに対して学習処理Ａ及び評価処理Ａが示され、特徴抽出処理Ｂに対して学習処理Ｂ及び評価処理Ｂが示される。
【００４２】
更に、各出力データ８の図形内には、生成順の例が示される。本実施例における蓄積要否判定処理１４９によって、レポジトリ９００に蓄積される出力データ８は、実線で示され、レポジトリ９００に蓄積される出力データ８は、点線で表される。
【００４３】
特徴抽出処理Ａにおいて、元データ３に対して最初に実施される処理７は、処理ｂ、処理ｇ、及び処理ｈである。夫々の処理７に対して、「Ｎｏ．１」、「Ｎｏ．２」、そして「Ｎｏ．３」の順に出力データ８が生成される。
【００４４】
次に行われる処理７は、「Ｎｏ．１」及び「Ｎｏ．２」の出力データ８を入力とする処理ｍである。処理ｍから「Ｎｏ．４」の出力データ８が生成される。そして、「Ｎｏ．３」及び「Ｎｏ．４」の出力データ８が、更に行われる処理ｐに入力され、「Ｎｏ．５」の出力データ８が生成される。この「Ｎｏ．５」の出力データ８は、特徴抽出処理Ａで得られた学習用データ９に相当する。
【００４５】
特徴抽出処理Ｂにおいて、元データ３に対して最初に実施される処理７は、処理ｂ、処理ｅ、及び処理ｑである。夫々の処理７に対して、「Ｎｏ．１」、「Ｎｏ．６」、そして「Ｎｏ．７」の順に出力データ８が生成される。「Ｎｏ．１」の出力データ８は、特徴抽出処理Ａと同様である。即ち、特徴抽出処理Ａで１回生成されればよい。
【００４６】
次に、処理ｍが行われるが、特徴抽出処理Ｂでは、「Ｎｏ．１」及び「Ｎｏ．６」の出力データ８が入力され、「Ｎｏ．８」の出力データ８が生成される。そして、「Ｎｏ．８」及び「Ｎｏ．７」の出力データ８が、更に行われる処理ｐに入力され、「Ｎｏ．９」の出力データ８が生成される。この「Ｎｏ．９」の出力データ８は、特徴抽出処理Ｂで得られた学習用データ９に相当する。
【００４７】
このようにして生成された出力データ８の特性について説明する。特徴抽出処理Ａ及びＢにおいて、初期処理段階で生成される「Ｎｏ．１」、「Ｎｏ．２」、「Ｎｏ．３」、「Ｎｏ．６」、及び「Ｎｏ．７」の出力データ８は、１つの処理７から生成されるデータであるため、複数の処理を経て生成されるデータに比べて再利用の可能性が高いと考えられる。
【００４８】
特に、この例では処理ｂが繰り返される可能性が高く、「Ｎｏ．１」の出力データ８の利用期待値は「大」である。更に、処理ｂの実行時間が「大」（長い）場合、「Ｎｏ．１」の出力データ８は、蓄積要否判定処理１４９によってレポジトリ９００に蓄積する必要があると判定する（蓄積要否：○）。
【００４９】
一方で、実行時間の短い「Ｎｏ．７」の出力データ８は、再実行されたとしても機械学習の全体に影響しない場合、レポジトリ９００に蓄積せず、再実行する方が良いと判定する。
【００５０】
初期処理段階で生成された出力データ８以外の出力データ８は、２以上の処理７を経て生成されている。出力データ８を生成するまでに実行された処理７の数が多い程、つまり、処理のネストが深い程、再利用の可能性は低くなると判定する。特に、最終処理段階で生成された、学習用データ９に相当する「Ｎｏ．５」及び「Ｎｏ．９」の出力データ８の蓄積は不要と判定する（蓄積要否：×）。
【００５１】
ここで、本実施例における、処理構造を表わす記述形式について、「Ｎｏ．５」の出力データ８の生成に至るまでの処理構造を例として、
ｐ｛ｍ｛ｂ｝｛ｇ｝｝｛ｈ｝
で示す。「Ｎｏ．５」の出力データ８を生成した直前の処理ｐを最初に定義し、処理ｐから遡って特定した処理７毎に｛  ｝で処理名等の処理の識別子を示した形式である。処理ｐの直前には、処理ｍ及び処理ｈが行われており、更に、処理ｍの直前には、処理ｂ及び処理ｇが行われたことを示している。
【００５２】
本実施例では、このような処理構造は後述されるメタ情報テーブル２３０で管理され、メタ情報テーブル２３０を参照することで蓄積要否を判定する。
【００５３】
図４は、蓄積要否判定処理を行わない場合の一例を説明するための図である。図４では、図３と同様の特徴抽出処理Ａ及び特徴抽出処理Ｂを行った場合において、出力データ８へのアクセス頻度等に基づいてレポジトリ９００に蓄積された出力データ８を削除する場合で説明する。図４の例では、出力データ８は、一旦全てレポジトリ９００に格納される。従って、「Ｎｏ．１」〜「Ｎｏ．９」の出力データ８の領域がレポジトリ９００に必要となる。
【００５４】
図３では、「Ｎｏ．１」、「Ｎｏ．２」、「Ｎｏ．３」、及び「Ｎｏ．６」の出力データ８のみがレポジトリ９００に格納されるのに対して、図４では、これら出力データ８に加えて、「Ｎｏ．４」、「Ｎｏ．５」、「Ｎｏ．７」、「Ｎｏ．８」、及び「Ｎｏ．９」の出力データ８が更に格納される。
【００５５】
このように、本実施例における出力データ８の再利用の可能性は、出力データ８の蓄積時点での使用実績とは必ずしも一致しない。また、本実施例における蓄積要否判定処理１４９を行うことで、図４の例と比べて、出力データ８の蓄積時のレポジトリ９００の容量の増加を抑止することができる。
【００５６】
本実施例における蓄積要否判定処理１４９を行う情報処理装置１００の機能構成例について図５で説明する。図５は、情報処理装置の機能構成の一例を示す図である。図５において、情報処理装置１００は、モデルを生成する装置であって、特徴抽出処理部４００と、学習処理部５００と、評価処理部６００と、処理部１９０とを有する。
【００５７】
特徴抽出処理部４００と、学習処理部５００と、評価処理部６００と、処理部１９０の各々は、情報処理装置１００にインストールされたプログラムが、情報処理装置１００のＣＰＵ１１に実行させる処理により実現される。
【００５８】
また、情報処理装置１００の記憶部２００には、シンボルテーブル２１０、元データ３、メタ情報テーブル２３０、記憶資源性能値２４０、及びレポジトリ９００等が記憶される。
【００５９】
特徴抽出処理部４００は、特徴抽出処理４０を行う。学習処理部５００は、学習処理５０を行う。評価処理部６００は、評価処理６０を行う。
【００６０】
処理部１９０は、特徴抽出処理部４００と、学習処理部５００と、評価処理部６００の各々から処理命令３９を受信し、処理命令３９に従った処理７の実行有無、及び、処理７の実行によって生成された出力データ８のレポジトリ９００への蓄積有無を判定する。
【００６１】
処理部１９０は、処理命令パース部１１０と、出力データ検索部１２０と、処理実行部１３０と、蓄積要否判定部１４０と、出力データ蓄積部１５０とを有する。
【００６２】
処理命令パース部１１０は、処理命令３９を受信すると、処理命令３９をパース（解析）して、処理コマンド、入力名、及び出力名に分解する。処理命令３９は、実行する処理のプログラム名又はコマンド、引数、入力名、及び出力名の情報を含む。プログラム名又はコマンド、及び引数をまとめて、処理コマンドという。
【００６３】
処理命令パース部１１０は、処理命令３９の解析結果及びシンボルテーブル２１０を参照して処理内容を作成し、出力名と作成した処理内容とをシンボルテーブル２１０に格納する。シンボルテーブル２１０に、既に同一の出力名が存在する場合、シンボルテーブル２１０へは新たに記憶しない。
【００６４】
出力データ検索部１２０は、シンボルテーブル２１０を参照して出力名から処理内容を取得し、メタ情報テーブル２３０から処理内容に対応付けられた出力ＩＤを用いて、レポジトリ９００を検索する。
【００６５】
レポジトリ９００に出力データ８が存在する場合、処理命令３９で指定された処理７の実行を完了したものとする。処理実行部１３０による処理７の実行は行われない。一方、レポジトリ９００に出力データ８が存在しない場合、処理実行部１３０によって処理７が実行される。
【００６６】
処理実行部１３０は、レポジトリ９００に出力データ８が存在しない場合に、処理命令３９で指定された処理７を実行する。処理実行部１３０は、処理７の実行により生成された出力データ８に対して、レポジトリ９００において一意に特定する出力ＩＤを付与し、処理７を実行して得られる、実行時間、再利用時間等を、処理内容と対応付けてメタ情報テーブル２３０に追加する。
【００６７】
実行時間は、処理７の開始から終了までの時間である。再利用時間は、生成された出力データ８をレポジトリ９００に記憶した場合、再利用時に読み出しを完了するまでの時間であり、出力データ８のサイズと記憶資源性能値２４０から計算される。
【００６８】
蓄積要否判定部１４０は、メタ情報テーブル２３０を参照して、生成された出力データ８をレポジトリ９００に蓄積した場合と蓄積しなかった場合のコストを算出し、出力データ８の蓄積要否を判定する。判定結果が蓄積否である場合、出力データ８をレポジトリ９００に格納することなく、受信した処理命令３９に対する処理を終了する。蓄積要否判定部１４０は、蓄積要否判定プログラムをＣＰＵ１１（図６）が実行することにより実現される。
【００６９】
出力データ蓄積部１５０は、判定結果が蓄積要の場合、処理実行部１３０によって生成された出力データ８をレポジトリ９００に蓄積する。
【００７０】
シンボルテーブル２１０は、出力名毎に処理内容を対応付けて記憶したテーブルである。レポジトリ９００は、出力データ８を、メタ情報テーブル２３０の出力ＩＤと関連付けて蓄積する記憶領域である。メタ情報テーブル２３０は、処理内容毎に、実行時間、再利用時間、利用期待値、コスト、蓄積要否等を記憶したテーブルである。メタ情報テーブル２３０については、後述される。記憶資源性能値２４０は、レポジトリ９００のスループット性能（ＭＢ／ｓ）等を示す。スループット性能は、予め測定し設定されてもよいし、運用中に測定した値を設定してもよい。
【００７１】
図５において、特徴抽出処理部４００、学習処理部５００、及び評価処理部６００は、情報処理装置１００とネットワークで接続される端末で実装されてもよい。また、元データ３とレポジトリ９００とは、夫々個別のデータを管理するサーバ等で保持及び管理されていてもよい。また、蓄積要否判定部１４０を、個別の蓄積要否判定装置に構成してもよい。
【００７２】
本実施例における情報処理装置１００は、図６に示すようなハードウェア構成を有する。図６は、情報処理装置のハードウェア構成を示す図である。図６において、情報処理装置１００は、コンピュータによって制御される装置であって、ＣＰＵ（Central  Processing  Unit）１１と、主記憶装置１２と、補助記憶装置１３と、入力装置１４と、表示装置１５と、通信Ｉ／Ｆ（インターフェース）１７と、ドライブ装置１８とを有し、バスＢに接続される。
【００７３】
ＣＰＵ１１は、主記憶装置１２に格納されたプログラムに従って情報処理装置１００を制御するプロセッサに相当する。主記憶装置１２には、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）等が用いられ、ＣＰＵ１１にて実行されるプログラム、ＣＰＵ１１での処理に必要なデータ、ＣＰＵ１１での処理にて得られたデータ等を記憶又は一時保存する。
【００７４】
補助記憶装置１３には、ＨＤＤ（Hard  Disk  Drive）等が用いられ、各種処理を実行するためのプログラム等のデータを格納する。補助記憶装置１３に格納されているプログラムの一部が主記憶装置１２にロードされ、ＣＰＵ１１に実行されることによって、各種処理が実現される。主記憶装置１２及び補助記憶装置１３が、記憶部２００に相当する。
【００７５】
入力装置１４は、マウス、キーボード等を有し、分析者が情報処理装置１００による処理に必要な各種情報を入力するために用いられる。表示装置１５は、ＣＰＵ１１の制御のもとに必要な各種情報を表示する。入力装置１４と表示装置１５とは、一体化したタッチパネル等によるユーザインタフェースであってもよい。通信Ｉ／Ｆ１７は、有線又は無線などのネットワークを通じて通信を行う。通信Ｉ／Ｆ１７による通信は無線又は有線に限定されるものではない。
【００７６】
情報処理装置１００によって行われる処理を実現するプログラムは、例えば、ＣＤ−ＲＯＭ（Compact  Disc  Read‐Only  Memory）等の記憶媒体１９によって情報処理装置１００に提供される。
【００７７】
ドライブ装置１８は、ドライブ装置１８にセットされた記憶媒体１９（例えば、ＣＤ−ＲＯＭ等）と情報処理装置１００とのインターフェースを行う。
【００７８】
また、記憶媒体１９に、後述される本実施の形態に係る種々の処理を実現するプログラムを格納し、この記憶媒体１９に格納されたプログラムは、ドライブ装置１８を介して情報処理装置１００にインストールされる。インストールされたプログラムは、情報処理装置１００により実行可能となる。
【００７９】
尚、プログラムを格納する記憶媒体１９はＣＤ−ＲＯＭに限定されず、コンピュータが読み取り可能な、構造（structure）を有する１つ以上の非一時的（non‐transitory）な、有形（tangible）な媒体であればよい。コンピュータ読取可能な記憶媒体として、ＣＤ−ＲＯＭの他に、ＤＶＤディスク、ＵＳＢメモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリであっても良い
次に、情報処理装置１００による出力データ８の蓄積要否判定処理の第一例を説明する。図７は、蓄積要否判定処理の第一例を説明するためのフローチャート図である。図７において、処理命令３９を受信すると、処理命令パース部１１０は、処理命令３９をパースして、処理のプログラム名又はコマンド及び引数を含む処理コマンドと、入力名と、出力名とに分解する（ステップＳ４０１）。
【００８０】
処理命令パース部１１０は、出力名毎に処理内容を記憶したシンボルテーブル２１０を参照して、処理コマンドと入力名とから、受信した処理命令３９の処理内容を生成し、シンボルテーブル２１０に記憶する（ステップＳ４０２）。処理内容は、過去に遡ってなされた処理内容を含むように生成される。
【００８１】
次に、出力データ検索部１２０が、メタ情報テーブル２３０を参照し、レポジトリ９００内に生成した処理内容の出力データ８を検索する（ステップＳ４０３）。メタ情報テーブル２３０に生成した処理内容が存在するか否かが検索される。生成した処理内容が存在する場合、出力データ８があると判断する。
【００８２】
出力データ検索部１２０は、出力データ８が存在するか否かを判断する（ステップＳ４０４）。出力データ８が存在する場合（ステップＳ４０４のＹＥＳ）、蓄積要否判定処理は終了する。
【００８３】
一方、出力データ８が存在しない場合（ステップＳ４０４のＮＯ）、処理実行部１３０が、処理命令パース部１１０が生成した処理内容を用いて、レポジトリ９００から、必要な入力データを読み出し、処理コマンドを実行する（ステップＳ４０５）。処理内容に含まれる過去の処理内容の出力データ８が、入力データとなる。
【００８４】
処理実行部１３０は、処理コマンドの実行時の実行時間と、実行により生成された出力データ８のサイズを測定し（ステップＳ４０６）、蓄積資源性能値２４０を参照し、出力データ８のサイズに基づいて、出力データ８の再利用時間を算出する（ステップＳ４０７）。測定した実行時間と、算出した再利用時間とがメタ情報テーブル２３０に記憶される。
【００８５】
そして、蓄積要否判定部１４０は、処理内容に基づいて、出力データ８の利用期待値を算出する（ステップＳ４０８）。
【００８６】
次に、蓄積要否判定部１４０は、処理実行部１３０によって得られた実行時間及び再利用時間と、蓄積要否判定部１４０が算出した利用期待値とを用いて、出力データ８をレポジトリ９００に蓄積した場合のコストＣ１と蓄積しなかった場合のコストＣ２とを算出し、処理対象の処理内容に対応付けてメタ情報テーブル２３０に記録する（ステップＳ４０９）。
【００８７】
蓄積要否判定部１４０は、メタ情報テーブル２３０を参照して、処理対象の処理内容の２つのコストＣ１とコストＣ２とを比較し、出力データ８の蓄積要否を判定し（ステップＳ４１０）、蓄積要であるか否かを判断する（ステップＳ４１１）。蓄積否の場合（ステップＳ４１１のＮＯ）、蓄積要否判定処理は終了する。
【００８８】
一方、蓄積要の場合（ステップＳ４１１のＹＥＳ）、出力データ蓄積部１５０は、出力データ８をレポジトリ９００に蓄積する（ステップＳ４１２）。その後、蓄積要否判定処理は終了する。
【００８９】
図７のステップＳ４０２にて、処理命令パース部１１０による処理内容を生成する方法について説明する。図８は、図７のステップＳ４０２における、処理内容を生成する方法を説明するための図である。
【００９０】
図８（Ａ）の処理構造を例として、処理内容を生成する方法について説明する。図８（Ａ）では、処理７ａ及び処理７ｂが元データ３の値を用いて特徴を抽出する初期処理段階に相当し、処理７ｃは、学習用データ９に相当する出力データ８ｃを生成する最終処理段階に相当する。処理７ａ〜処理７ｃの記載例において、ｃｍｄはコマンドを表し、ａｒｇは引数を示す。従って、処理７ａの記載
ｃｍｄ−Ａ
ａｒｇ＝１０
は、ｃｍｄ−Ａでコマンドが特定され、ａｒｇ＝１０で引数「１０」が指定されていることを示す。処理ｂでは「ｃｍｄ−Ｂ」が指定され、処理ｃでは「ｃｍｄ−Ｃ」が指定されている。また、出力データ８ａ、８ｂ、及び８ｃは、夫々、ｆ０、ｆ１、及びｏｕｔ１で特定されるものとする。
【００９１】
次に、図８（Ｂ）及び図８（Ｃ）で、処理内容の生成例を説明する。図８（Ｂ）では、処理命令３９を受信した順に、処理命令パース部１１０が解析した結果を例示している。図８（Ｃ）では、シンボルテーブル２１０の状態遷移を示している。
【００９２】
先ず、「cmd‐A  arg=10  output=f0」の処理命令３９を受信すると、処理命令パース部１１０は、処理命令３９を、処理コマンド「cmd‐A  arg=10」、及び出力名「f0」に分解する。この例では、入力名が含まれていなかったため、入力名「なし」と判定される。
【００９３】
処理命令３９には、入力名が存在しないため、シンボルテーブル２１０を検索することなく、処理命令パース部１１０は、処理コマンド「cmd‐A  arg=10」を処理内容とし、解析結果の出力名「f0」に処理内容「cmd‐A  arg=10」を対応づけたレコードをシンボルテーブル２１０に追加する。
【００９４】
初期状態、即ち、空の状態であったシンボルテーブル２１０に、出力名「f0」に処理内容「cmd‐A  arg=10」を対応づけたレコードが追加される。
【００９５】
次に、「cmd‐B  output=f1」の処理命令３９を受信すると、処理命令パース部１１０は、処理命令３９を、処理コマンド「cmd‐B」、及び出力名「f1」に分解する。この例においても、入力名が含まれていなかったため、入力名「なし」と判定される。
【００９６】
処理命令３９には、入力名が存在しないため、シンボルテーブル２１０を検索することなく、処理命令パース部１１０は、処理コマンド「cmd‐B」を処理内容とし、解析結果の出力名「f1」に処理内容「cmd‐B」を対応づけたレコードをシンボルテーブル２１０に追加する。
【００９７】
更に、「cmd‐C  input=f0,f1  output=out1」の処理命令３９を受信すると、処理命令パース部１１０は、処理命令３９を、処理コマンド「cmd‐C」、入力名「f0,f1」、出力名「out1」、及び処理内容「cmd‐B」に分解する。
【００９８】
処理命令パース部１１０は、処理命令３９で指定された入力名「f0」及び入力名「f1」の各々で、シンボルテーブル２１０の出力名を検索する。処理命令パース部１１０は、入力名「f0」でシンボルテーブル２１０から検索した出力名「f0」のレコードから、処理内容「cmd‐A  arg=10」を取得する。また、処理命令パース部１１０は、入力名「f1」でシンボルテーブル２１０から検索した出力名「f1」のレコードから、処理内容「cmd‐B」を取得する。
【００９９】
そして、処理命令パース部１１０は、前述した記述形式に従って、現在の処理７ｃから過去の処理７ａ及び処理７ｂまでを含めた処理構造を表わす処理内容「cmd‐C  {cmd‐A  arg=10}  {cmd‐B}」を生成し、解析結果の出力名「out1」に生成した処理内容cmd‐C  {cmd‐A  arg=10}  {cmd‐B}」を対応づけたレコードをシンボルテーブル２１０に追加する。
【０１００】
以降、処理命令３９を受信する毎に、処理命令パース部１１０は、解析して得た入力名でシンボルテーブル２１０の出力名を検索して過去の処理内容を取得して、受信した処理命令３９の処理内容を予め定めた記述形式で生成する。また、処理命令パース部１１０は、解析して得た出力名に生成した処理内容を対応付けたレコードをシンボルテーブル２１０に追加する。
【０１０１】
次に、図７のステップＳ４０８にて、蓄積要否判定部１４０による利用期待値を算出する方法について説明する。図９は、図７のステップＳ４０８における、利用期待値を算出する方法を説明するための図である。
【０１０２】
図９（Ａ）の処理構造を例として、利用期待値を算出する方法について説明する。図９（Ａ）では、各処理７には処理名が示され、各出力データ８には生成順が示されている。「Ｎｏ．１」の出力データ８は処理ｂで生成され、「Ｎｏ．２」の出力データ８は処理ｇで生成され、「Ｎｏ．３」の出力データ８は処理ｍで生成され、「Ｎｏ．４」の出力データ８は処理ｐで生成される。
【０１０３】
処理構造の複雑さは、幅Ｗが大きい程大きく、深さＤが深い程大きくなるように算出される。出力データ８の利用期待値は、複雑さが大きい程小さくなるように算出される。
【０１０４】
処理構造の複雑さを、
複雑さ  ＝  Ｗ  ×  （Ｄ＋１）
で算出する。幅Ｗは、出力データ８を生成する処理７への入力数を示し、深さＤは、現在の処理７までの処理の段数を示す。
【０１０５】
また、出力データ８の利用期待値を、
利用期待値  ＝  ｎ０／（複雑さ）２  ＝  ｎ０／（Ｗ×（Ｄ＋１））２
によって算出する。ｎ０は予め決められたデフォルトの利用期待値である。以下、ｎ０＝１００として説明する。
【０１０６】
図９（Ｂ）では、「Ｎｏ．１」の出力データ８の利用期待値について説明する。「Ｎｏ．２」の出力データ８の利用期待値についても同様である。「Ｎｏ．１」の出力データ８を生成する処理７は処理ｂであり、処理ｂより前に実施される処理７は存在しない。従って、幅Ｗ＝１、及び、深さＤ＝０となり、
複雑さ  ＝  １  ×  （０＋１）  ＝  １
を得る。よって、
利用期待値  ＝  １００／（１）２  ＝  １００
を得る。「Ｎｏ．２」の出力データ８の利用期待値も「１００」である。
【０１０７】
図９（Ｃ）では、「Ｎｏ．３」の出力データ８の利用期待値について説明する。「Ｎｏ．３」の出力データ８を生成する処理７は処理ｍであり、処理ｍより前に処理ｇが実施されている。処理ｍへの入力数は１である。従って、幅Ｗ＝１、及び、深さＤ＝１となり、
複雑さ  ＝  １  ×  （１＋１）  ＝  ２
を得る。よって、
利用期待値  ＝  １００／（２）２  ＝  １００／４  ＝  ２５
を得る。
【０１０８】
図９（Ｄ）では、「Ｎｏ．４」の出力データ８の利用期待値について説明する。「Ｎｏ．４」の出力データ８を生成する処理７は処理ｐであり、処理ｐより前に処理ｂ及び処理ｍが実施されている。処理ｐへの入力数は２である。上述したように、処理ｍより前には処理ｇが実施されている。従って、幅Ｗ＝２、及び、深さＤ＝２となり、
複雑さ  ＝  ２  ×  （２＋１）  ＝  ６
を得る。よって、
利用期待値  ＝  １００／（６）２  ＝  １００／３６  ＝  ３
を得る。
【０１０９】
「Ｎｏ．４」の出力データ８を生成する処理ｐの処理内容は、
cmd_p｛cmd_b｝｛cmd_m｛cmd_g｝｝
で表される。この処理内容の記述を用いることで、上述と同様に利用期待値を計算できる。cmd_pに続いて記述される大カッコ数（つまり、最も外側のカッコ数）が幅Ｗに相当し、大カッコに包含されるカッコ数のうち最大のカッコ数が深さＤに相当する。従って、処理ｐの処理内容から、幅Ｗ（大カッコ数）＝２、及び、深さＤ（最大のカッコ数）＝２を得る。即ち、処理ｐの処理内容のカッコの数をカウントすればよい。
【０１１０】
次に、図７のステップＳ４０９及びＳ４１０にて、蓄積要否判定部１４０によるコストＣ１及びコストＣ２を算出して蓄積要否を判定する処理を詳述する。図１０は、図７のステップＳ４０９及びＳ４１０における、コスト算出及び蓄積要否判定の処理を説明するための図である。
【０１１１】
図１０において、蓄積要否判定部１４０は、出力データ８をレポジトリ９００に蓄積した場合のコストＣ１を、実行時間Ｔｅ、再利用時間Ｔｒ、及び利用期待値ｎを用いて計算する（ステップＳ４２１）。コストＣ１は、
コストＣ１  ＝  実行時間Ｔｅ  ×  再利用時間Ｔｒ  ×  （利用期待値ｎ−１）
によって算出される。コストＣ１の計算では、利用期待値ｎから１減算される。
【０１１２】
また、蓄積要否判定部１４０は、出力データ８をレポジトリ９００に蓄積しなかった場合のコストＣ２を、実行時間Ｔｅ及び利用期待値ｎを用いて計算する（ステップＳ４２２）。コストＣ２は、
コストＣ２  ＝  実行時間Ｔｅ  ×  利用期待値ｎ
によって算出される。コストＣ２の算出後にコストＣ１を算出してもよい。コストＣ１及びＣ２の算出順は問わない。
【０１１３】
そして、蓄積要否判定部１４０は、コストＣ１に定数ｋを乗算した値がコストＣ２より小さいか否かを判定する（ステップＳ４２３）。コストＣ１に係る値がコストＣ２がより小さい場合（ステップＳ４２３のＹＥＳ）、蓄積要否判定部１４０は、蓄積要を要否判定結果とし（ステップＳ４２４）、コスト算出及び蓄積要否判定の処理を終了する。
【０１１４】
一方、蓄積要否判定部１４０は、コストＣ１に係る値がコストＣ２以上の場合（ステップＳ４２３のＮＯ）、蓄積要否判定部１４０は、蓄積否を要否判定結果とし（ステップＳ４２５）、コスト算出及び蓄積要否判定の処理を終了する。
【０１１５】
定数ｋの決め方について説明する。第１の方法として、蓄積資源であるレポジトリ９００の容量が比較的小さい場合は、蓄積する出力データ８の数が多いとすぐに蓄積資源の容量が不足するため、定数ｋを大きめの値に設定する。一例として、定数ｋを「３」に設定する。
【０１１６】
第２の方法として、蓄積資源であるレポジトリ９００の利用状況を監視し、レポジトリ９００の残り容量に応じて変更してもよい。一例として、残り容量が全容量の１０％〜５０％の範囲内である場合は、定数ｋ＝１．５に設定し、残り容量が全容量の１０％未満の時は、定数ｋ＝２としてもよい。
【０１１７】
図１１は、メタ情報テーブルの第一のデータ例を示す図である。図１１において、メタ情報テーブル２３０は、処理内容毎に、出力データ８の蓄積要否の判定に用いる情報と蓄積要否の判定結果とを記憶し管理するテーブルであり、処理内容、出力ＩＤ、実行時間Ｔｅ、再利用時間Ｔｒ、複雑さ、利用期待値ｎ、コストＣ１、コストＣ２、蓄積要否等の項目を有する。
【０１１８】
処理内容は、処理命令パース部１１０によって生成された処理内容を示す。出力ＩＤは、出力データ８を特定する番号を示す。出力データ８は、出力ＩＤをファイル名として記憶部２００に保持されることで、再利用時の特定が容易となる。
【０１１９】
実行時間Ｔｅは、処理実行部１３０が実行した処理７の開始から終了までの時間を秒単位で示す。再利用時間Ｔｒは、処理実行部１３０が算出した出力データ８が再利用される際に掛る時間を秒単位で示す。
【０１２０】
複雑さは、蓄積要否判定部１４０によって算出された処理構造の複雑さの度合を示す。利用期待値ｎは、複雑さに基づいて、蓄積要否判定部１４０によって算出された、出力データ８の利用され得る確からしさを示す。
【０１２１】
コストＣ１は、蓄積要否判定部１４０によって算出された、出力データ８をレポジトリ９００に蓄積した場合のコストを示す。コストＣ２は、蓄積要否判定部１４０によって算出された、出力データ８をレポジトリ９００に蓄積せず、再度同様の処理を実行して同様の出力データ８を生成する場合のコストを示す。
【０１２２】
蓄積要否は、蓄積要否判定部１４０による判定結果を示す。丸印「○」は、蓄積要否判定部１４０が出力データ８を蓄積すると判断したことを示し、×印「×」は、蓄積要否判定部１４０が出力データ８を蓄積しないと判断したことを示す。
【０１２３】
メタ情報テーブル２３０における、処理内容の値は、複雑さを算出するために参照される。複雑さは、利用期待値ｎを算出するために参照される。実行時間Ｔｅ、再利用時間Ｔｒ、及び利用期待値ｎは、コストＣ１を算出するために参照される。また、実行時間Ｔｅ、及び利用期待値ｎは、コストＣ２を算出するために参照される。そして、コストＣ１及びコストＣ２が、蓄積要否の判定に用いられる。
【０１２４】
図１１では、デフォルトの利用期待値ｎ０＝１００、コスト比較時の定数ｋ＝５とした場合で、図３に示す処理構造におけるデータ例を示している。
【０１２５】
処理内容「ｂ」によって出力ＩＤ「１」の出力データ８が生成され、その時の実行時間Ｔｅは「３０」秒、及び、再利用時間Ｔｒは「０．０１」秒であったことが示されている。これらの情報に基づいて、複雑さ「１」、利用期待値ｎ「１００」、コストＣ１、及びコストＣ２が得られる。従って、蓄積要否は、５×コストＣ１「３１」の値「１５５」は、コストＣ２「３０００」より小さいため、蓄積要の丸印「○」が記録されている。
【０１２６】
処理命令３９を順次受信し、解析して得られた処理内容「ｇ」、「ｈ」、「m  {b}  [g]」、及び「p  {m  {b}  {g}}  {h}」に対して、出力データ８の蓄積要否「○」、「○」、「×」、及び「×」が判定される。これらの蓄積要否の判定結果より、図３の処理構造の特徴抽出処理Ａでは、「Ｎｏ．１」、「Ｎｏ．２」、及び「Ｎｏ．３」の出力データ８がレポジトリ９００に蓄積され保持され、「Ｎｏ．４」、及び「Ｎｏ．５」の出力データ８がレポジトリ９００に蓄積されない。
【０１２７】
特徴抽出処理Ｂが行われることにより、「Ｎｏ．６」の出力データ８がレポジトリ９００に蓄積され保持され、「Ｎｏ．７」、「Ｎｏ．８」、及び「Ｎｏ．９」の出力データ８がレポジトリ９００に蓄積されない。特徴抽出処理Ｂにて、新たに蓄積される出力データ８は、「Ｎｏ．６」のみである。
【０１２８】
本実施例では、処理７の実行によって生成された処理データ８の蓄積要否を判定することによって、レポジトリ９００の蓄積容量の増加を抑制することができる。
【０１２９】
ここで、図３の処理構造を参照して、メタ情報テーブル２３０の処理内容に基づく、蓄積要否判定のタイミングのバリエーションについて説明する。第１のタイミング６１ｔは、出力データ８が生成されたタイミングである。図７のフローチャートで説明したように、出力データ８が生成される毎に蓄積要否判定が行われる。
【０１３０】
次に、逐次的な特徴抽出の例において、学習する度に蓄積要否判定を行う第２のタイミング６２ｔで蓄積要否判定を行う場合を説明する。逐次的な特徴抽出の例は、図３の処理構造に基づくものとする。
【０１３１】
学習毎の蓄積要否判定では、複数の特徴抽出処理４０を行う場合、各特徴抽出処理４０に対する学習処理５０が実行毎に、特徴抽出処理４０で生成された複数の出力データ８をまとめて蓄積要否判定が行われる。
【０１３２】
図１２は、メタ情報テーブルの第二のデータ例を示す図である。図１２において、メタ情報テーブル２３０−２の項目は、図１１に示すメタ情報テーブル２３０の項目と同様であるため、その説明を省略する。
【０１３３】
第２のタイミング６２ｔは、特徴抽出処理４０の終了時である。特徴抽出処理４０の終了時に、即ち、学習用データ９の生成後に、特徴抽出処理４０において生成された複数の出力データ８をまとめて、蓄積要否判定を行う。コマンドが処理命令３９で指定される場合で説明するが、プログラム名であっても同様である。
【０１３４】
処理命令３９で指定されるコマンドに処理種別を示すようにし、処理種別と、処理種別を区別するための定義ルールが定められる。一例として、
処理種別：「特徴抽出処理」と「学習処理」の２種類を区別可能にする。
【０１３５】
定義ルール：「特徴抽出処理」における接頭辞＝“fs_”
「学習処理」における接頭辞＝“ml_”
のように定める。
【０１３６】
図１２の第二のデータ例において、処理内容にコマンドml_Aを検知すると、蓄積要否判定部１４０は、メタ情報テーブル２３０−２内の、蓄積要否がまだ判定されていない処理内容に対して、蓄積要否判定を行う。図３の特徴抽出処理Ａで生成された「Ｎｏ．１」から「Ｎｏ．５」までの複数の出力データの各々に対して蓄積要否判定が行われる。
【０１３７】
次に、処理内容にコマンドml_Bを検知すると、蓄積要否判定部１４０は、メタ情報テーブル２３０−２内の、蓄積要否がまだ判定されていない処理内容に対して、蓄積要否判定を行う。図３の特徴抽出処理Ｂで生成された「Ｎｏ．６」から「Ｎｏ．９」までの複数の出力データの各々に対して蓄積要否判定が行われる。
【０１３８】
また、第３のタイミング６３ｔは、各処理段階の終了時である。処理段階の終了時に、出力データ８の蓄積要否判定を行う。第３のタイミング６３ｔでは、“_1”、“_e”等の接尾辞を同一段階の最後のコマンドに付加するようにし、蓄積要否判定部１４０は、接頭辞を検知する毎に、蓄積要否判定を行う。第３のタイミング６３ｔでは、図１５及び図１６で説明する。
【０１３９】
更に、第４のタイミング６４ｔは、世代の終了時である。世代の終了時に、出力データ８の蓄積要否判定を行う。第４のタイミング６３ｔでは、“_1”、“_e”等の接尾辞を世代の最後の学習処理５０のコマンド（“ml_”を示すコマンド）に付加するようにし、蓄積要否判定部１４０は、“ml_”で始まるコマンドの接尾辞を検知する毎に、蓄積要否判定を行う。
【０１４０】
少なくとも、第３のタイミング６３ｔ及び第４のタイミング６４ｔの蓄積要否判定では、接尾辞の有無によらず、処理実行部１３０は、コマンドを同一の命令と見なして実行する。
【０１４１】
次に、蓄積要否判定処理におけるメタ情報テーブル２３０のデータ内容の変化の具体例を説明する。以下の説明では、図１２のメタ情報テーブル２３０の変化を示した蓄積要否判定処理の第二例を説明する。蓄積要否判定処理の第二例では、第２のタイミング６２ｔによる出力データ８の蓄積要否判定について説明する。
【０１４２】
図１３及び図１４は、蓄積要否判定処理の第二例を説明するためのフローチャート図である。図１３において、処理命令３９を受信すると、処理命令パース部１１０は、処理命令３９をパースして、処理のプログラム名又はコマンド及び引数を含む処理コマンドと、入力名と、出力名とに分解する（ステップＳ４５１）。
【０１４３】
処理命令パース部１１０は、入力名があるか否かを判断する（ステップＳ４５２）。入力名がない場合（ステップＳ４５２のＮＯ）、処理命令パース部１１０は、処理コマンドから処理内容を生成し、出力名に対応付けたレコードをシンボルテーブル２１０−２に追加する（ステップＳ４５３）。
【０１４４】
一方、入力名がある場合（ステップＳ４５２のＹＥＳ）、処理命令パース部１１０は、入力名でシンボルテーブル２１０−２の出力名を検索して、過去の処理内容を取得する（ステップＳ４５４）。そして、処理命令パース部１１０は、処理コマンドと、取得した過去の処理内容とから新たな処理内容を生成し、出力名に対応付けたレコードをシンボルテーブル２１０−２に追加する（ステップＳ４５５）。
【０１４５】
ステップＳ４５３又はＳ４５５の処理後、出力データ検索部１２０は、メタ情報テーブル２３０を参照し、生成した処理内容の出力データ８を検索する（ステップＳ４５６）。メタ情報テーブル２３０に生成した処理内容が存在するか否かが検索される。生成した処理内容が存在する場合、出力データ８があると判断する。
【０１４６】
出力データ検索部１２０は、出力データ８が存在するか否かを判断する（ステップＳ４５７）。出力データ８が存在する場合（ステップＳ４５７のＹＥＳ）、蓄積要否判定処理は終了する。
【０１４７】
一方、出力データ８が存在しない場合（ステップＳ４５７のＮＯ）、処理実行部１３０が、処理命令パース部１１０が生成した処理内容を用いて、レポジトリ９００から、必要な入力データを読み出し、処理コマンドを実行する（ステップＳ４５８）。処理内容に含まれる過去の処理内容の出力データ８が、入力データとなる。
【０１４８】
処理実行部１３０は、処理コマンドの実行時の実行時間と、実行により生成された出力データ８のサイズを測定し（ステップＳ４５９）、蓄積資源性能値２４０を参照し、出力データ８のサイズに基づいて、出力データ８の再利用時間を算出する（ステップＳ４６０）。そして、処理実行部１３０は、測定した実行時間と、算出した再利用時間とをメタ情報テーブル２３０−２に記憶する（ステップＳ４６１）。
【０１４９】
図１４において、蓄積要否判定部１４０は、処理内容に基づいて、出力データ８の利用期待値を算出し、メタ情報テーブル２３０−２に記憶する（ステップＳ４６２）。
【０１５０】
蓄積要否判定部１４０は、処理内容の先頭のコマンドの接頭辞が“fs_”か“ml_”かを判定する（ステップＳ４６３）。接頭辞が“fs_”の場合（ステップＳ４６３の“fs_”）、出力データ８の要否判定は行わずに、蓄積要否判定処理は終了し、次の処理命令３９の受信を待つ。
【０１５１】
図１３のステップＳ４５１から図１４のＳ４６３の処理が繰り返されることにより、処理内容「fs_b」から処理内容「fs_p  {fs_m  {fs_b}  {fs_g}}  {fs_h}」までが蓄積要否が未判定のままである。処理内容「fs_b」から「fs_p  {fs_m  {fs_b}  {fs_g}}  {fs_h}」までの出力データ８は、レポジトリ９００に未だ格納されていない。更に、処理が繰り返され、処理内容「ml_A  {fs_p  {fs_m  {fs_b}  {fs_g}}  {fs_h}}」について、実行時間と再利用時間がメタ情報テーブル２３０−２に記憶される。
【０１５２】
この場合、接頭辞が“ml_”の場合（ステップＳ４６３の“ml_”）の処理が行われる。つまり、蓄積要否判定部１４０は、処理内容「fs_b」から処理内容「ml_A  {fs_p  {fs_m  {fs_b}  {fs_g}}  {fs_h}}」までの出力データ８について、各々の蓄積判定を行う。次の処理単位となる、処理内容「fs_e」から処理内容「ml_B  {fs_p  {fs_m  {fs_b}  {fs_g}}  {fs_h}}」までの出力データ８についても同様である。
【０１５３】
先ず、蓄積要否判定部１４０は、蓄積要否が未判定の出力データ８の各々に対して、ステップＳ４６４からＳ４６７を行う。
【０１５４】
蓄積要否判定部１４０は、実行時間、再利用時間、及び利用期待値を用いて、出力データ８をレポジトリ９００に蓄積した場合のコストＣ１と、蓄積しなかった場合のコストＣ２とを算出する（ステップＳ４６４）。
【０１５５】
次に、蓄積要否判定部１４０は、コストＣ１とコストＣ２とを比較して、出力データ８の蓄積要否を判定し（ステップＳ４６５）蓄積要であるか否かを判断する（ステップＳ４６６）。蓄積否の場合（ステップＳ４６６のＮＯ）、未判定の出力データ８がまだある場合、ステップＳ４６４から同様の処理が繰り返される。全ての未判定の出力データ８に対して蓄積要否の判定を完了したら、蓄積要否判定処理は終了し、次の処理命令３９の受信を待つ。
【０１５６】
一方、蓄積要否判定部１４０が蓄積要である場合（ステップＳ４６６のＹＥＳ）、出力データ蓄積部１５０は、出力データ８をレポジトリ９００に蓄積する（ステップＳ４６７）。未判定の出力データ８がまだある場合、ステップＳ４６４から同様の処理が繰り返される。全ての未判定の出力データ８に対して蓄積要否の判定を完了したら、蓄積要否判定処理は終了し、次の処理命令３９の受信を待つ。
【０１５７】
図１５及び図１６は、蓄積要否判定処理の第三例を説明するためのフローチャート図である。図１５及び図１６では、第３のタイミングで複数の出力データの蓄積要否判定処理が行われる場合の例である。
【０１５８】
図１５のフローチャートは、第２のタイミングでの蓄積要否判定処理を説明した図１３のフローチャートと同様であるため、その説明を省略する。しかし、図１５及び図１６では、シンボルテーブル２１０−３及びメタ情報テーブル２３０−３に、処理段階毎の蓄積要否判定におけるデータ例を示している。
【０１５９】
図１５において、シンボルテーブル２１０−３は、図３の特徴抽出処理Ａにおける初期処理段階の処理ｂ、処理ｇ、及び処理ｈが記憶された状態を示している。処理ｈには、接頭辞“fs_”及び接尾辞“_1”が付加されている。
【０１６０】
また、メタ情報テーブル２３０−３では、生成された処理内容毎に、実行時間、再利用時間、及び利用期待値が記憶されている。しかし、いずれの処理内容に対して蓄積要否は未判定の状態である。
【０１６１】
図１６のフローチャートにおいて、第２のタイミングでの蓄積要否判定処理を説明した図１４のフローチャートとの違いは、ステップＳ４６３がステップＳ４６３−３に置き換わっている。それ以外は同様であるため、その説明を省略する。
【０１６２】
蓄積要否判定部は、受信した処理命令３９に基づいて生成した処理内容の最初のコマンドの接頭辞が“fs_”でありかつ最初のコマンドに接尾辞ある、又は、接尾辞が“ml_”である判断条件を満たすか否かを判断する（ステップＳ４６３−３）。判断条件を満たさない場合（ステップＳ４６３−３のＮＯ）、出力データ８の要否判定は行わずに、蓄積要否判定処理は終了し、次の処理命令３９の受信を待つ。
【０１６３】
図１５のステップＳ４５１から図１６のステップＳ４６３−３の処理が繰り返されることにより、処理内容「fs_b」から処理内容「fs_h_1」までが蓄積要否が未判定のままである。処理内容「fs_b」から処理内容「fs_h_1」までの出力データ８は、レポジトリ９００に未だ格納されていない。更に、処理が繰り返され、処理内容「fs_h_1」について、実行時間と再利用時間がメタ情報テーブル２３０−３に記憶される。
【０１６４】
この場合、判断条件を満たす場合（ステップＳ４６３−３のＹＥＳ）の処理が行われる。つまり、蓄積要否判定部１４０は、処理内容「fs_b」から処理内容「fs_h_1」までの出力データ８について、各々の蓄積判定を行う。以降は、処理内容「fs_m_1  {fs_b}  {fs_g}」、処理内容「fs_p_1  {fs_m_1  {fs_b}  {fs_g}}  {fs_h_1}」、そして処理内容「ml_A  {fs_p_1  {fs_m_1  {fs_b}  {fs_g}}  {fs_h_1}}」の出力データの生成毎に行われる。
【０１６５】
上述において、第１〜第３のタイミングにおける出力データ８の蓄積要否判定処理について説明したが、遺伝的アルゴリズムにおいては、世代の終了時の第４のタイミングで蓄積要否判定処理を行ってもよい。同一世代内で生成された複数の出力データ８の各々に対して、蓄積要否判定が行われる。
【０１６６】
第４のタイミング６４ｔによる蓄積要否判定は、図１６のステップＳ４６３−３での判断条件を、接尾辞が“ml_”でありかつ接尾辞があることに置き換えればよい。従って、その詳細な説明を省略する。
【０１６７】
上述したように、本実施例では、将来的に、出力データ８の再利用の可能性が見込める、複数の処理を経て最終結果を求める処理において、再利用効率の高いデータ蓄積を行える。
【０１６８】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、主々の変形や変更が可能である。
【０１６９】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
コンピュータに、
対象データから複数の処理を経て最終結果を求める過程で生成される、複数の出力データそれぞれについて、記憶部に蓄積された前記複数の処理を経て最終結果を求める処理に関する処理内容を参照して、出力データのレポジトリに蓄積した場合の第１コストと出力データのレポジトリに蓄積しなかった場合の第２コストを生成し、
前記複数の出力データそれぞれの蓄積有無を、前記第１コストと前記第２コストに基づき判定する
処理を行わせるデータ蓄積判定プログラム。
（付記２）
前記コンピュータに、
前記複数の出力データのそれぞれが生成されたタイミングで、前記蓄積有無を判定させる
ことを特徴とする付記１記載のデータ蓄積判定プログラム。
（付記３）
前記コンピュータに、
前記対象データに対して第１の種類の処理の複数回の実行毎に、第２の種類の処理を実行する試行を複数回行わせ、前記第１の種類の処理の複数回の実行後で、該第１の種類の処理の複数回の実行で生成された前記複数の出力データのそれぞれの蓄積有無を判定させる
ことを特徴とする付記１記載のデータ蓄積判定プログラム。
（付記４）
前記処理は、処理種別を有し、
前記コンピュータに、
前記処理種別が前記特徴抽出処理に続いて行われる学習処理を示す場合に、該特徴抽出処理で生成された前記複数の出力データのそれぞれの蓄積有無を判定させる
ことを特徴とする付記３記載のデータ蓄積判定プログラム。
（付記５）
前記コンピュータに、
前段の処理で生成された前記出力データを入力とする処理間の構造において、処理の段階の終了時で、該段階で生成された該出力データのそれぞれの蓄積有無を判定させる
ことを特徴とする付記１記載のデータ蓄積判定プログラム。
（付記６）
前記コンピュータに、
第１の種類の処理の複数回の実行毎に、第２の種類の処理を実行する試行をある一定回数行わせ、該試行の一定回数の実行後で、該第１の種類の処理の複数回の実行で生成された該出力データのそれぞれの蓄積有無を判定させる
ことを特徴とする付記１記載のデータ蓄積判定プログラム。
（付記７）
前記処理内容は、前段の処理で生成された前記出力データを入力とする処理間の構造において、該出力データの生成過程で得られた処理内容を包含し、
前記コンピュータに、
前記処理内容の包含関係に基づいて、前記処理の複雑さを算出し、
算出した前記複雑さが大きい程小さくなる、前記出力データが再利用される利用期待値を算出する
処理を行わせる付記１乃至６のいずれかに記載のデータ蓄積判定プログラム。
（付記８）
前記コンピュータに、
前記処理の実行で測定した実行時間と、前記出力データの再利用に係る再利用時間と、算出した前記利用期待値とを少なくとも用いて、該出力データのレポジトリに蓄積した場合の前記第１コストを算出し、
前記処理の実行で測定した実行時間と、算出した前記利用期待値とを用いて、該出力データのレポジトリに蓄積しなかった場合の前記第２コストを算出し、
前記第１コストが前記第２コスト以下の場合に、前記出力データを前記レポジトリに蓄積すると判定する
処理を行わせる付記６記載のデータ蓄積判定プログラム。
（付記９）
コンピュータが、
対象データから複数の処理を経て最終結果を求める過程で生成される、複数の出力データそれぞれについて、記憶部に蓄積された前記複数の処理を経て最終結果を求める処理に関する処理内容を参照して、出力データのレポジトリに蓄積した場合の第１コスト出力データのレポジトリに蓄積しなかった場合の第２コストを生成し、
前記複数の出力データそれぞれの蓄積有無を、前記第１コストと前記第２コストに基づき判定する
処理を行うデータ蓄積判定方法。
（付記１０）
対象データから複数の処理を経て最終結果を求める過程で生成される、複数の出力データそれぞれについて、記憶部に蓄積された前記複数の処理を経て最終結果を求める処理に関する処理内容を参照して、出力データのレポジトリに蓄積した場合の第１コスト出力データのレポジトリに蓄積しなかった場合の第２コストを生成する生成部と、
前記複数の出力データそれぞれの蓄積有無を、前記第１コストと前記第２コストに基づき判定する判定部と
を有するデータ蓄積判定装置。
【符号の説明】
【０１７０】
３          元データ
７          処理
８          出力データ
３９        処理命令
４０        特徴抽出処理
５０        学習処理
６０        評価処理
１００      情報処理装置
１１０      処理命令パース部
１２０      出力データ検索部
１３０      処理実行部
１４０      蓄積要否判定部
１５０      出力データ蓄積部
２００      記憶部
２１０      シンボルテーブル
２３０      メタ情報テーブル
２４０      記憶資源性能値
４００      特徴抽出処理部
５００      学習処理部
６００      評価処理部
９００      レポジトリ
【図１】
2017162342.tif 000003
【図２】
2017162342.tif 000004
【図３】
2017162342.tif 000005
【図４】
2017162342.tif 000006
【図５】
2017162342.tif 000007
【図６】
2017162342.tif 000008
【図７】
2017162342.tif 000009
【図８】
2017162342.tif 000010
【図９】
2017162342.tif 000011
【図１０】
2017162342.tif 000012
【図１１】
2017162342.tif 000013
【図１２】
2017162342.tif 000014
【図１３】
2017162342.tif 000015
【図１４】
2017162342.tif 000016
【図１５】
2017162342.tif 000017
【図１６】
2017162342.tif 000018