(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024089703
(43)【公開日】2024-07-04
(54)【発明の名称】情報処理プログラム、情報処理方法および情報処理装置
(51)【国際特許分類】
G06F 8/36 20180101AFI20240627BHJP
【FI】
G06F8/36
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022205050
(22)【出願日】2022-12-22
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】溝渕 裕司
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC05
5B376BC12
5B376BC13
5B376BC36
5B376BC38
(57)【要約】
【課題】サンプルプログラムからのソフトウェア部品の作成を効率化する。
【解決手段】コンピュータは、複数のサンプルプログラムを、記述に関する特徴量と実行性能とに基づいて2以上のクラスタに分類するクラスタリングにより、クラスタ数が異なる複数のクラスタリング結果を取得する。コンピュータは、複数のクラスタリング結果それぞれにおける2以上のクラスタそれぞれに対して、当該クラスタに含まれるサンプルプログラムの再利用性に関する指標値と実行性能とに基づいて、第1の評価値を算出する。コンピュータは、複数のクラスタリング結果それぞれに対して、2以上のクラスタに対応する2以上の第1の評価値に基づいて、第2の評価値を算出する。コンピュータは、複数のクラスタリング結果に対応する複数の第2の評価値に基づいて、何れかのクラスタリング結果を選択する。
【選択図】
図6
【特許請求の範囲】
【請求項1】
複数のサンプルプログラムを、前記複数のサンプルプログラムそれぞれの記述に関する特徴量と前記複数のサンプルプログラムそれぞれの実行性能とに基づいて、2以上のクラスタに分類するクラスタリングにより、クラスタ数が異なる複数のクラスタリング結果を取得し、
前記複数のクラスタリング結果それぞれにおける前記2以上のクラスタそれぞれに対して、当該クラスタに含まれる2以上のサンプルプログラムの再利用性に関する指標値と、前記2以上のサンプルプログラムの前記実行性能とに基づいて、第1の評価値を算出し、
前記複数のクラスタリング結果それぞれに対して、前記2以上のクラスタに対応する2以上の第1の評価値に基づいて、第2の評価値を算出し、
前記複数のクラスタリング結果に対応する複数の第2の評価値に基づいて、前記複数のクラスタリング結果のうちの何れかのクラスタリング結果を選択する、
処理をコンピュータに実行させる情報処理プログラム。
【請求項2】
前記クラスタリングは、異なるサンプルプログラムの間の前記特徴量の距離を、前記異なるサンプルプログラムそれぞれの前記実行性能を用いて修正し、前記修正された距離に基づいて前記複数のサンプルプログラムを分類する処理を含む、
請求項1記載の情報処理プログラム。
【請求項3】
前記修正された距離は、前記実行性能に反比例する、
請求項2記載の情報処理プログラム。
【請求項4】
前記クラスタリング結果の選択は、前記クラスタ数と前記第2の評価値との関係に基づいて、前記クラスタ数が異なる複数のパターン候補のうち前記複数のクラスタリング結果以外の他のクラスタリング結果に対して、前記第2の評価値の算出をスキップする処理を含む、
請求項1記載の情報処理プログラム。
【請求項5】
前記第2の評価値は、前記クラスタ数の降順または昇順で算出され、
前記クラスタリング結果の選択は、前記第2の評価値のピークを検出し、前記ピークの検出に応じて、前記降順または昇順において前記ピーク以降の順となる前記他のクラスタリング結果に対して前記第2の評価値の算出をスキップする処理を含む、
請求項4記載の情報処理プログラム。
【請求項6】
前記クラスタリングは、複数の階層を含む木構造を生成する階層的クラスタリングであり、前記クラスタリング結果の選択は、前記複数の階層のうちの何れかの階層を選択する処理を含む、
請求項1記載の情報処理プログラム。
【請求項7】
前記第1の評価値の算出は、前記2以上のクラスタそれぞれに対して、当該クラスタに含まれるサンプルプログラムの個数と、当該クラスタに含まれる前記2以上のサンプルプログラムの前記特徴量の分散に応じた凝集度と、前記実行性能の平均と、前記実行性能の分散とに基づいて、前記第1の評価値を算出する処理を含む、
請求項1記載の情報処理プログラム。
【請求項8】
複数のサンプルプログラムを、前記複数のサンプルプログラムそれぞれの記述に関する特徴量と前記複数のサンプルプログラムそれぞれの実行性能とに基づいて、2以上のクラスタに分類するクラスタリングにより、クラスタ数が異なる複数のクラスタリング結果を取得し、
前記複数のクラスタリング結果それぞれにおける前記2以上のクラスタそれぞれに対して、当該クラスタに含まれる2以上のサンプルプログラムの再利用性に関する指標値と、前記2以上のサンプルプログラムの前記実行性能とに基づいて、第1の評価値を算出し、
前記複数のクラスタリング結果それぞれに対して、前記2以上のクラスタに対応する2以上の第1の評価値に基づいて、第2の評価値を算出し、
前記複数のクラスタリング結果に対応する複数の第2の評価値に基づいて、前記複数のクラスタリング結果のうちの何れかのクラスタリング結果を選択する、
処理をコンピュータが実行する情報処理方法。
【請求項9】
複数のサンプルプログラムと、前記複数のサンプルプログラムそれぞれの実行性能とを記憶する記憶部と、
前記複数のサンプルプログラムを、前記複数のサンプルプログラムそれぞれの記述に関する特徴量と前記実行性能とに基づいて、2以上のクラスタに分類するクラスタリングにより、クラスタ数が異なる複数のクラスタリング結果を取得し、前記複数のクラスタリング結果それぞれにおける前記2以上のクラスタそれぞれに対して、当該クラスタに含まれる2以上のサンプルプログラムの再利用性に関する指標値と、前記2以上のサンプルプログラムの前記実行性能とに基づいて、第1の評価値を算出し、前記複数のクラスタリング結果それぞれに対して、前記2以上のクラスタに対応する2以上の第1の評価値に基づいて、第2の評価値を算出し、前記複数のクラスタリング結果に対応する複数の第2の評価値に基づいて、前記複数のクラスタリング結果のうちの何れかのクラスタリング結果を選択する処理部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理プログラム、情報処理方法および情報処理装置に関する。
【背景技術】
【0002】
情報処理装置は、再利用可能なプログラムをソフトウェア部品として保存しておくことがある。ソフトウェア開発の開発者は、保存されたソフトウェア部品を利用することでプログラミングを効率的に行うことができる。ソフトウェア部品は、様々な既存プログラムをサンプルプログラムとして収集し、収集されたサンプルプログラムを分析することによって作成されることがある。情報処理装置は、このようなサンプルプログラムからのソフトウェア部品の作成を支援することがある。
【0003】
例えば、複数のクラスを含むソースコードを分析して、他のクラスから比較的独立したクラス群をコンポーネントとして識別するコンポーネント識別方法が提案されている。提案のコンポーネント識別方法は、他のクラスの呼び出しの有無を示す特徴量を各クラスに対して付与し、特徴量に基づいてクラス間の距離を定義する。コンポーネント識別方法は、1以上のクラスをそれぞれ含む複数のクラスタを、距離に基づいて段階的に統合していく階層的クラスタリングを実行する。これにより、複数のクラスについてツリー型の階層構造を示す樹形図(デンドログラム)が生成される。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】Jian Feng Cui and Heung Seok Chae, "Applying agglomerative hierarchical clustering algorithms to component identification for legacy systems", Information and Software Technology, Volume 53, Issue 6, pages 601-614, June 2011
【発明の概要】
【発明が解決しようとする課題】
【0005】
上記の非特許文献1に記載されたクラスタリング方法のように、情報処理装置は、サンプルプログラムの集合から、クラスタ数が異なる複数の分類結果を生成することがある。ある分類結果の1つのクラスタから1つのソフトウェア部品が作成され得る。
【0006】
しかし、収集されるサンプルプログラムが多いと、クラスタ数が異なる多数の分類結果が生成され得る。例えば、階層的クラスタリングでは、階層の深い樹形図が生成される。この場合、何れの分類結果のクラスタがソフトウェア部品に適しているか判定することは、負荷が高いことがある。そこで、1つの側面では、本発明は、サンプルプログラムからのソフトウェア部品の作成を効率化することを目的とする。
【課題を解決するための手段】
【0007】
1つの態様では、以下の処理をコンピュータに実行させる情報処理プログラムが提供される。複数のサンプルプログラムを、複数のサンプルプログラムそれぞれの記述に関する特徴量と複数のサンプルプログラムそれぞれの実行性能とに基づいて、2以上のクラスタに分類するクラスタリングにより、クラスタ数が異なる複数のクラスタリング結果を取得する。複数のクラスタリング結果それぞれにおける2以上のクラスタそれぞれに対して、当該クラスタに含まれる2以上のサンプルプログラムの再利用性に関する指標値と、2以上のサンプルプログラムの実行性能とに基づいて、第1の評価値を算出する。複数のクラスタリング結果それぞれに対して、2以上のクラスタに対応する2以上の第1の評価値に基づいて、第2の評価値を算出する。複数のクラスタリング結果に対応する複数の第2の評価値に基づいて、複数のクラスタリング結果のうちの何れかのクラスタリング結果を選択する。
【0008】
また、1つの態様では、コンピュータが実行する情報処理方法が提供される。また、1つの態様では、記憶部と処理部とを有する情報処理装置が提供される。
【発明の効果】
【0009】
1つの側面では、サンプルプログラムからのソフトウェア部品の作成を効率化できる。
【図面の簡単な説明】
【0010】
【
図1】第1の実施の形態の情報処理装置を説明するための図である。
【
図2】第2の実施の形態の情報処理装置のハードウェア例を示す図である。
【
図3】機械学習スクリプトとモデル精度の例を示す図である。
【
図4】機械学習スクリプトの分割例を示す図である。
【
図5】サンプルプログラムの特徴量の例を示す図である。
【
図6】階層的クラスタリングとクラスタ評価値の例を示す図である。
【
図7】モデル精度を用いた距離の修正例を示す図である。
【
図8】階層と階層評価値の関係例を示すグラフである。
【
図9】情報処理装置の機能例を示すブロック図である。
【
図10】クラスタリングの手順例を示すフローチャートである。
【発明を実施するための形態】
【0011】
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0012】
図1は、第1の実施の形態の情報処理装置を説明するための図である。
第1の実施の形態の情報処理装置10は、サンプルプログラムの集合から再利用可能なソフトウェア部品を作成することを支援する。ソフトウェア部品は、コード事例、コードパターン、プログラム部品、コードスニペット、プログラミングイディオムなどと呼ばれてもよい。情報処理装置10は、クライアント装置でもよいしサーバ装置でもよい。情報処理装置10が、コンピュータ、分析装置またはクラスタリング装置と呼ばれてもよい。
【0013】
情報処理装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。
【0014】
処理部12は、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12が、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの電子回路を含んでもよい。プロセッサは、例えば、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラムを実行する。プロセッサの集合が、マルチプロセッサまたは単に「プロセッサ」と呼ばれてもよい。
【0015】
記憶部11は、複数のサンプルプログラムと、それら複数のサンプルプログラムに対応する複数の実行性能とを記憶する。複数のサンプルプログラムは、例えば、サンプルプログラム13a,13b,13c,13d,13e,13fを含む。複数の実行性能は、例えば、実行性能14a,14b,14c,14d,14e,14fを含む。
【0016】
各サンプルプログラムは、既存プログラムの一部分または全体である。サンプルプログラムはソースコードでもよい。サンプルプログラムは、関数やクラスなどのプログラムモジュールでもよいし、ソースコードの連続するn行(n=1,2,3,…)でもよい。サンプルプログラムは、機械学習モデルを訓練するための機械学習スクリプトでもよい。
【0017】
各実行性能は、サンプルプログラムを実行することで測定されてもよい。実行性能は、情報処理装置10によって測定されてもよいし、他の情報処理装置によって測定されてもよい。サンプルプログラムが機械学習スクリプトである場合、実行性能は、例えば、その機械学習スクリプトによって訓練される機械学習モデルの予測精度である。その場合、実行性能は、例えば、0以上1以下の数値で表される。
【0018】
処理部12は、複数のサンプルプログラムを2以上のクラスタに分類するクラスタリングを、クラスタ数が異なる複数のパターンで行う。クラスタリングでは、階層的クラスタリングやk平均法などのクラスタリングアルゴリズムが実行される。
【0019】
階層的クラスタリングの場合、例えば、処理部12は、まず複数のサンプルプログラムを互いに異なるクラスタに分類する。処理部12は、ある階層においてクラスタ間の距離を算出し、距離が最も小さいクラスタのペアを、1つ上の階層では1つのクラスタに統合する。処理部12は、クラスタの統合を、最終的にクラスタ数が1になるまで繰り返す。階層的クラスタリングで生成される複数の階層は、上記の複数のパターンに相当する。
【0020】
複数のパターンは、例えば、パターン15a,15bを含む。パターン15aでは、処理部12は、サンプルプログラム13a,13b,13c,13d,13e,13fを、クラスタ16a,16b,16cに分類する。クラスタ16aは、サンプルプログラム13a,13bを含む。クラスタ16bは、サンプルプログラム13c,13dを含む。クラスタ16cは、サンプルプログラム13e,13fを含む。
【0021】
パターン15bでは、処理部12は、サンプルプログラム13a,13b,13c,13d,13e,13fを、クラスタ16d,16eに分類する。クラスタ16dは、サンプルプログラム13a,13b,13c,13dを含む。クラスタ16eは、サンプルプログラム13e,13fを含む。上述した複数のパターンに基づいて、処理部12は、クラスタリングによって生成されるクラスタ数が異なる複数のクラスタリング結果を取得する。
【0022】
クラスタリングは、複数のサンプルプログラムそれぞれの記述に関する特徴量と、複数のサンプルプログラムそれぞれの実行性能とに基づいて行われる。特徴量は、サンプルプログラムに含まれる文字列や単語から算出されてもよいし、実行時のメモリ状態などサンプルプログラムが扱うデータを考慮して算出されてもよい。処理部12は、原則として、特徴量が近いサンプルプログラムを同じクラスタに分類し、特徴量が遠いサンプルプログラムを異なるクラスタに分類する。例えば、処理部12は、上記の特徴量に基づいてサンプルプログラム間の距離を規定し、この距離を用いてクラスタリングを行う。
【0023】
ただし、第1の実施の形態では、処理部12は、特徴量に加えて実行性能を用いてクラスタリングを行う。特徴量の類似度が同程度である場合、実行性能が共に高いサンプルプログラムは同じクラスタに分類されやすく、少なくも一方の実行性能が低いサンプルプログラムは異なるクラスタに分類されやすいことが好ましい。例えば、処理部12は、2つのサンプルプログラムの間の特徴量の距離を、当該2つのサンプルプログラムそれぞれの実行性能で修正する。修正された距離は、実行性能に反比例してもよい。処理部12は、修正された距離に基づいてクラスタリングを行う。
【0024】
例えば、処理部12は、サンプルプログラム13a,13bに含まれる単語に基づいて、サンプルプログラム13a,13bそれぞれに対して特徴ベクトルを生成する。処理部12は、2つの特徴ベクトルの間のユークリッド距離を算出する。処理部12は、ユークリッド距離の3乗を実行性能14a,14bで割ることで、修正された距離を算出する。クラスタリングにおいて、処理部12は、修正された距離を用いて、サンプルプログラム13a,13bを同一クラスタに分類するか否か判定する。
【0025】
なお、処理部12は、クラスタ数が異なる複数のパターン候補の全てについてクラスタリングを実行しなくても、以下に説明するように好ましいパターンを選択できることがある。その場合、処理部12は、複数のパターン候補のうちの一部のパターンについてクラスタリングをスキップしてもよい。スキップされるパターンは、複数のパターン候補のうちクラスタ数が少ないパターンであってもよい。例えば、処理部12は、階層的クラスタリングを、クラスタ数が1になる前に停止してもよい。
【0026】
処理部12は、複数のパターン(クラスタリング結果)それぞれにおける2以上のクラスタそれぞれに対して、第1の評価値を算出する。第1の評価値はクラスタ評価値と呼ばれてもよい。例えば、第1の評価値が高いクラスタほど、部品化に好適であることを示す。
【0027】
処理部12は、クラスタに含まれる2以上のサンプルプログラムの特徴量の分散に応じた凝集度を用いて、第1の評価値を算出する。クラスタ内での特徴量の分散が小さいほど凝集度が高くなる。他のクラスタとの距離が大きいほど凝集度が高くなってもよい。凝集度の指標として、Calinski-Harabasz指標またはDavies-Bouldin指標が用いられてもよい。例えば、凝集度が高いほど第1の評価値が高くなる。
【0028】
処理部12は、クラスタに含まれるサンプルプログラムの個数を更に用いて、第1の評価値を算出してもよい。サンプルプログラムの個数は、クラスタサイズと呼ばれてもよい。例えば、クラスタサイズが大きいほど第1の評価値が高くなる。クラスタサイズおよび凝集度は、サンプルプログラムの再利用性に関する指標値と解釈されてもよい。
【0029】
また、処理部12は、クラスタに含まれる2以上のサンプルプログラムの実行性能を更に用いて、第1の評価値を算出する。例えば、処理部12は、クラスタ内での実行性能の平均および分散を用いて第1の評価値を算出する。例えば、実行性能の平均が高いほど第1の評価値が高くなり、実行性能の分散が小さいほど第1の評価値が高くなる。
【0030】
処理部12は、複数のパターン(クラスタリング結果)それぞれに対して、当該パターンの2以上のクラスタに対応する2以上の第1の評価値に基づいて、第2の評価値を算出する。第2の評価値は、パターン評価値または階層評価値と呼ばれてもよい。例えば、処理部12は、2以上の第1の評価値の合計を第2の評価値として算出する。
【0031】
例えば、処理部12は、パターン15aについて、クラスタ16a,16b,16cの評価値17a,17b,17cを算出し、評価値17a,17b,17cを合成して、パターン15aの評価値18aを算出する。また、処理部12は、パターン15bについて、クラスタ16d,16eの評価値17d,17eを算出し、評価値17d,17eを合成して、パターン15bの評価値18bを算出する。
【0032】
処理部12は、複数のパターン(クラスタリング結果)に対応する複数の第2の評価値に基づいて、部品化に好適なパターンのクラスタリング結果を選択する。例えば、処理部12は、階層的クラスタリングによって生成された木構造から、何れかの階層のクラスタリング結果を選択する。処理部12は、複数のパターンの間で第2の評価値を比較し、最も高い第2の評価値をもつパターンを選択してもよい。例えば、評価値18aよりも評価値18bの方が高い場合、パターン15bのクラスタリング結果が選択され得る。この場合、クラスタ16d,16eから1つずつソフトウェア部品が作成され得る。
【0033】
処理部12は、選択したパターンのクラスタリング結果を出力する。処理部12は、クラスタリング結果を不揮発性ストレージに保存してもよいし、表示装置に表示してもよいし、他の情報処理装置に送信してもよい。また、処理部12は、選択したパターンに含まれるクラスタからソフトウェア部品を作成するようユーザに促してもよい。ユーザは、クラスタに含まれる2以上のサンプルプログラムから共通のプログラム記述を抽出してもよく、抽出したプログラム記述を示すソフトウェア部品を作成してもよい。
【0034】
また、処理部12は、ソフトウェア部品の候補として、クラスタに含まれる1つまたは少数のサンプルプログラムをユーザに提示してもよい。提示されるサンプルプログラムは、クラスタの中で平均に近い特徴量をもつ中心のサンプルプログラムでもよい。また、処理部12は、クラスタに含まれる2以上のサンプルプログラムを何らかの基準でランク付けし、ランキング情報をユーザに対して提示してもよい。
【0035】
ここで、クラスタリングにおいて実行性能が参照されることにより、上記の第2の評価値は、クラスタ数に対して一定の変動傾向をもつことになる。例えば、第2の評価値をクラスタ数の降順に並べた場合、クラスタ数が多いうちは第2の評価値が増加し、クラスタ数が十分に少なくなると第2の評価値が減少に転じることがある。よって、クラスタ数と第2の評価値との関係では、第2の評価値のピークが存在する。
【0036】
そこで、処理部12は、クラスタリングを実行し得る複数のパターン候補の全てに対して第2の評価値を算出しなくてもよく、一部のパターンに対して第2の評価値の算出をスキップすることが可能である。例えば、処理部12は、クラスタ数の降順に第2の評価値を算出して第2の評価値のピークを検出し、ピークが検出されると、それよりクラスタ数が少ないクラスタリング結果に対しては第2の評価値の算出をスキップしてもよい。
【0037】
ピークとは、例えば、クラスタ数の降順に第2の評価値が算出された場合に、第2の評価値の変動が増加から減少に転じる変化点である。処理部12は、例えば、クラスタ数の降順に第2の評価値を算出した場合に、第2の評価値が直前に算出した第2の評価値よりも所定の基準以上小さい値となった場合に、第2の評価値のピークを検出することとしてもよい。なお、第2の評価値のピークの検出の具体的な手法や基準は、後述する手法を含め、上記の例示以外のものを採用してもよい。
【0038】
例えば、処理部12は、階層的クラスタリングによって生成された木構造の下側の階層から優先的に第2の評価値を算出し、上側の階層に対しては第2の評価値の算出をスキップする。言い換えれば、処理部12は、クラスタ数の降順においてピーク以降の順となるクラスタリング結果について、第2の評価値の算出をスキップする。なお、上記の説明では、第2の評価値をクラスタ数の降順に並べた場合について説明したが、第2の評価値をクラスタ数の昇順に並べた場合においても、処理部12は、第2の評価値のピークを算出することができる。
【0039】
以上説明したように、第1の実施の形態の情報処理装置10は、複数のサンプルプログラムを、各サンプルプログラムの記述に関する特徴量と実行性能とに基づいて、2以上のクラスタに分類するクラスタリングを、クラスタ数が異なる複数のパターンで行う。情報処理装置10は、各パターンの2以上のクラスタそれぞれに対して、サンプルプログラムの特徴量の分散に応じた凝集度と実行性能とに基づいて、第1の評価値を算出する。情報処理装置10は、各パターンに対して、2以上のクラスタに対応する2以上の第1の評価値に基づいて、第2の評価値を算出する。情報処理装置10は、複数のパターンに対応する複数の第2の評価値に基づいて、何れかのパターンのクラスタリング結果を選択する。
【0040】
これにより、クラスタ数が異なる複数のクラスタリング結果の中から、ソフトウェア部品の作成に好適なクラスタを含むクラスタリング結果が特定される。例えば、階層的クラスタリングの結果の中から、好適なクラスタを含む階層が特定される。よって、多数のサンプルプログラムが収集された場合でも、ソフトウェア部品の作成が効率化される。
【0041】
また、第1の評価値の算出に用いられる情報のうち、凝集度は、類似するサンプルプログラムが高頻度で出現するという再利用性に関連する。また、実行性能は、ソフトウェア部品がソフトウェアの品質改善に寄与するという有用性に関連する。よって、第1の評価値が高いクラスタから作成されるソフトウェア部品は、高い再利用性および高い有用性をもつことが期待される。その結果、ソフトウェア部品の品質が向上する。
【0042】
また、情報処理装置10は、サンプルプログラムの記述に関する特徴量に加えて実行性能を考慮して、クラスタリングを実行する。これにより、クラスタ数に対して第2の評価値がランダムに変動せず、一定の変動傾向をもつ。よって、情報処理装置10は、全てのクラスタ数のパターンに対して第2の評価値を算出しなくても、好適なパターンを選択することができ、情報処理装置10の負荷が低減する。
【0043】
なお、情報処理装置10は、クラスタリングにおいて、特徴量の距離を実行性能で修正し、修正された距離に基づいてサンプルプログラムを分類してもよい。また、修正された距離は、実行性能に反比例するものであってもよい。これにより、高い実行性能をもつサンプルプログラム同士が、優先的に同一クラスタに分類されやすくなる。その結果、クラスタ数に対して第2の評価値がピークをもつこととなり、情報処理装置10は、第2の評価値が最も高いパターンを効率的に探索することができる。
【0044】
また、情報処理装置10は、クラスタ数と第2の評価値との関係に基づいて、複数のパターン候補のうち、既に第2の評価値を算出したパターン以外の他のパターンに対して、第2の評価値の算出をスキップしてもよい。これにより、情報処理装置10の負荷が低減する。また、情報処理装置10は、第2の評価値をクラスタ数の降順で算出してもよく、第2の評価値のピークの検出に応じて、他のパターンに対して第2の評価値の算出をスキップしてもよい。これにより、最良パターンの探索が効率化される。
【0045】
また、クラスタリングは、複数の階層を含む木構造を生成する階層的クラスタリングであってもよく、情報処理装置10は、木構造から何れかの階層を選択してもよい。これにより、ソフトウェア部品の作成に好適な粒度のクラスタが選択される。また、第1の評価値は、サンプルプログラムの個数と、凝集度と、実行性能の平均と、実行性能の分散とに基づいて算出されてもよい。これにより、ソフトウェア部品の再利用性および有用性の観点からクラスタが評価され、ソフトウェア部品の品質が向上する。
【0046】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
第2の実施の形態の情報処理装置100は、既存の機械学習スクリプトを収集して分析し、再利用可能かつ有用なソフトウェア部品の作成を支援する。情報処理装置100は、クライアント装置でもよいしサーバ装置でもよい。情報処理装置100が、コンピュータ、分析装置またはクラスタリング装置と呼ばれてもよい。情報処理装置100は、第1の実施の形態の情報処理装置10に対応する。
【0047】
図2は、第2の実施の形態の情報処理装置のハードウェア例を示す図である。
情報処理装置100は、バスに接続されたCPU101、RAM102、HDD103、GPU104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。
【0048】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムおよびデータをRAM102にロードし、プログラムを実行する。情報処理装置100は、複数のプロセッサを有してもよい。
【0049】
RAM102は、CPU101で実行されるプログラムおよびCPU101で演算に使用されるデータを一時的に記憶する揮発性半導体メモリである。情報処理装置100は、RAM以外の種類の揮発性メモリを有してもよい。
【0050】
HDD103は、オペレーティングシステム(OS:Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラムと、データとを記憶する不揮発性ストレージである。情報処理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の不揮発性ストレージを有してもよい。
【0051】
GPU104は、CPU101と連携して画像処理を行い、情報処理装置100に接続された表示装置111に画像を出力する。表示装置111は、例えば、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ、有機EL(Electro Luminescence)ディスプレイまたはプロジェクタである。情報処理装置100に、プリンタなどの他の種類の出力デバイスが接続されてもよい。また、GPU104は、GPGPU(General Purpose Computing on Graphics Processing Unit)として使用されてもよい。GPU104は、CPU101からの指示に応じてプログラムを実行し得る。情報処理装置100は、RAM102以外の揮発性半導体メモリをGPUメモリとして有してもよい。
【0052】
入力インタフェース105は、情報処理装置100に接続された入力デバイス112から入力信号を受け付ける。入力デバイス112は、例えば、マウス、タッチパネルまたはキーボードである。情報処理装置100に複数の入力デバイスが接続されてもよい。
【0053】
媒体リーダ106は、記録媒体113に記録されたプログラムおよびデータを読み取る読み取り装置である。記録媒体113は、例えば、磁気ディスク、光ディスクまたは半導体メモリである。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)およびHDDが含まれる。光ディスクには、CD(Compact Disc)およびDVD(Digital Versatile Disc)が含まれる。媒体リーダ106は、記録媒体113から読み取られたプログラムおよびデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、CPU101によって実行されることがある。
【0054】
記録媒体113は、可搬型記録媒体であってもよい。記録媒体113は、プログラムおよびデータの配布に用いられることがある。また、記録媒体113およびHDD103が、コンピュータ読み取り可能な記録媒体と呼ばれてもよい。
【0055】
通信インタフェース107は、ネットワーク114を介して他の情報処理装置と通信する。通信インタフェース107は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースでもよい。
【0056】
次に、分析対象となるサンプルプログラム群について説明する。
図3は、機械学習スクリプトとモデル精度の例を示す図である。
情報処理装置100は、機械学習スクリプト131,132を含む複数の機械学習スクリプトを記憶する。機械学習スクリプトは、機械学習の手順を規定したソースコードである。機械学習は、訓練データを用いて機械学習モデルを訓練し、テストデータを用いて機械学習モデルのモデル精度を測定することを含む。
【0057】
機械学習スクリプトは、クラスやメソッドを含む機械学習ライブラリを利用することがある。機械学習モデルは、例えば、ランダムフォレスト、サポートベクタマシン、ニューラルネットワークなどである。モデル精度は、例えば、正答率(Accuracy)である。正答率は、0以上1以下の数値であり、高いほど機械学習モデルが良好であることを示す。
【0058】
訓練データおよびテストデータは、例えば、CSV(Comma Separated Value)などのテーブルデータである。テーブルデータは、複数のカラムおよび複数のレコードを含む。複数のカラムのうちの一部のカラムが説明変数として使用され、他のカラムが目的変数として使用される。説明変数の値は、機械学習モデルに入力される入力データである。目的変数の値は、機械学習モデルの出力に対する正解を示すラベルである。機械学習スクリプトは、テーブルデータに対して前処理を実行することがある。前処理は、例えば、テーブルデータの中の特定のカラムの値を一定範囲の数値に変換する正規化を含む。
【0059】
機械学習スクリプト131は、空行を除いて14行のコードを含む。コードは、命令または命令文と呼ばれてもよい。機械学習スクリプト131は、訓練データテーブルに対して前処理を行い、訓練データテーブルの中から説明変数を示すカラムおよび目的変数を示すカラムを指定し、機械学習モデルとしてランダムフォレストを訓練する。機械学習スクリプト131は、テストデータテーブルの中から説明変数を示すカラムおよび目的変数を示すカラムを指定し、ランダムフォレストに説明変数の値を入力して予測値を算出し、予測値とラベルとを比較してモデル精度として正答率を算出する。
【0060】
機械学習スクリプト132は、空行を除いて12行のコードを含む。機械学習スクリプト132は、機械学習スクリプト131の4行目および5行目に相当する前処理のコードを含まない。その他の点は機械学習スクリプト131と同じである。
【0061】
情報処理装置100は、機械学習スクリプトと対応付けて、当該機械学習スクリプトで使用される訓練データおよびテストデータを記憶する。情報処理装置100は、記憶された訓練データおよびテストデータを用いて機械学習スクリプトを実行することで、当該機械学習スクリプトによって訓練された機械学習モデルのモデル精度を測定する。情報処理装置100は、測定されたモデル精度を、機械学習スクリプトと対応付けて記憶する。ただし、他の情報処理装置がモデル精度を測定してもよい。
【0062】
例えば、情報処理装置100は、機械学習スクリプト131を実行することでモデル精度133を測定する。また、情報処理装置100は、機械学習スクリプト132を実行することでモデル精度134を測定する。なお、後述するように、情報処理装置100は、実行時のメモリ状態に基づいてサンプルプログラムの特徴量を規定してもよい。その場合、情報処理装置100は、機械学習スクリプトの実行時に、1ステップ毎(例えば、1行毎)に、メモリイメージを実行履歴として保存しておく。
【0063】
図4は、機械学習スクリプトの分割例を示す図である。
情報処理装置100は、複数の機械学習スクリプトそれぞれを分割することで、再利用可能なソフトウェア部品の候補である複数のサンプルプログラムを抽出する。機械学習スクリプトは、大規模な業務システムプログラムと異なり、十分に構造化されていないことが多い。このため、情報処理装置100は、クラスや関数のように機能的まとまりを示すプログラム単位を機械学習スクリプトの中から識別することが難しい。そこで、情報処理装置100は、機械学習スクリプトに含まれる連続するn行(n=1,2,3,…)のコードを、サンプルプログラムとして網羅的に抽出する。
【0064】
例えば、情報処理装置100は、機械学習スクリプト131から、1行目のコードを示すサンプルプログラム141と、2行目のコードを示すサンプルプログラム142と、3行目のコードを示すサンプルプログラム143とを抽出する。このように、情報処理装置100は、1行のコードをそれぞれ示す14個のサンプルプログラムを抽出する。
【0065】
また、情報処理装置100は、1~2行目のコードを示すサンプルプログラム144と、2~3行目のコードを示すサンプルプログラム145と、3~4行目のコードを示すサンプルプログラム146とを抽出する。このように、情報処理装置100は、連続する2行のコードをそれぞれ示す13個のサンプルプログラムを抽出する。また、情報処理装置100は、1~3行目のコードを示すサンプルプログラム147と、2~4行目のコードを示すサンプルプログラム148と、3~5行目のコードを示すサンプルプログラム149とを抽出する。このように、情報処理装置100は、連続する3行のコードをそれぞれ示す12個のサンプルプログラムを抽出する。
【0066】
1つのサンプルプログラムに含まれ得る行数については、事前に上限が決められていてもよいし、上限が存在しなくてもよい。情報処理装置100は、機械学習スクリプト132からも、機械学習スクリプト131と同様に複数のサンプルプログラムを抽出する。情報処理装置100は、抽出された各サンプルプログラムに対して、元の機械学習スクリプトから測定されたモデル精度を付与する。例えば、情報処理装置100は、サンプルプログラム141~149に、機械学習スクリプト131のモデル精度133を付与する。
【0067】
なお、基準となる機械学習スクリプトが存在する場合、情報処理装置100は、基準の機械学習スクリプトと他の機械学習スクリプトとの差分をサンプルとして抽出してもよい。例えば、機械学習スクリプト132を基準とすると、情報処理装置100は、機械学習スクリプト131から4~5行目のコードをサンプルプログラムとして抽出する。差分を抽出することで、モデル精度の向上に寄与するコードが識別されやすくなる。
【0068】
この場合、情報処理装置100は、抽出された差分のサンプルプログラムに対して、基準の機械学習スクリプトのモデル精度との差を示す相対モデル精度を付与してもよい。相対モデル精度は負数であることもある。例えば、情報処理装置100は、機械学習スクリプト131の4~5行目に対し、+0.1という相対モデル精度を付与する。
【0069】
図5は、サンプルプログラムの特徴量の例を示す図である。
情報処理装置100は、サンプルプログラム間の類似度を示す「距離」を規定するため、各サンプルプログラムの特徴量を算出する。特徴量は、2以上の次元に対応する2以上の数値を列挙したベクトルである。以降の第2の実施の形態の説明では、サンプルプログラムに含まれる文字列自体から特徴量を算出する場合を想定する。ただし、後述するように、情報処理装置100は、他の方法によって特徴量を算出してもよい。
【0070】
情報処理装置100は、複数のサンプルプログラムそれぞれから1以上のトークンを抽出する。トークンは、変数名や関数名のようにプログラミング言語上で意味をもつ文字列であり、単語と呼ばれてもよい。情報処理装置100は、例えば、空白やドットやカンマなどの区切り文字を検出して、サンプルプログラムをトークンに分割する。
【0071】
ただし、サンプルプログラム間の類似度を判断する上で、ユーザ定義の変数名の重要度は低い。ユーザ定義の変数名が異なっても、2つのサンプルプログラムが実質的に同じデータ処理を実行していることがあるためである。そこで、情報処理装置100は、ライブラリ名、ライブラリに含まれるクラスのクラス名、ライブラリに含まれるメソッドのメソッド名など、既知の名称のみをトークンとして抽出してもよい。
【0072】
情報処理装置100は、複数のサンプルプログラムの中に1回以上出現するトークンを列挙したトークンセット151を生成する。情報処理装置100は、トークンセット151を参照して、サンプルプログラム毎に1つの特徴量を算出する。特徴量は、トークンベクトルと呼ばれてもよく、トークンセット151と同じ次元数をもつ。サンプルプログラムに1回以上出現するトークンに対応する次元の値が「1」であり、サンプルプログラムに1回も出現しないトークンに対応する次元の値が「0」である。
【0073】
例えば、トークンセット151の第1次元はトークン「pd」を示し、第2次元はトークン「read_csv」を示し、第3次元はトークン「df」を示し、第4次元はトークン「replace」を示す。情報処理装置100は、サンプルプログラム152から特徴量154を生成し、サンプルプログラム153から特徴量155を算出する。
【0074】
サンプルプログラム152は、トークン「pd」、「read_csv」および「df」を含み、トークン「replace」を含まない。よって、特徴量154の第1~3次元の値は「1」であり、特徴量154の第4次元の値は「0」である。サンプルプログラム153は、トークン「pd」および「read_csv」を含まず、トークン「df」および「replace」を含む。よって、特徴量155の第1~2次元の値は「0」であり、特徴量155の第3~4次元の値は「1」である。
【0075】
なお、情報処理装置100は、機械学習スクリプトの実行履歴から特徴量を算出してもよい。例えば、情報処理装置100は、サンプルプログラムの始点または終点において保存されたメモリイメージから、その時点のテーブルデータを抽出する。情報処理装置100は、テーブルデータに含まれる各カラムの平均値、最大値、最小値などの統計量を特徴量として算出してもよい。サンプルプログラムによって異なる構造のテーブルデータが使用される場合や、テーブルデータに対して前処理が行われる場合、テーブルデータの統計量は、サンプルプログラムの特徴を示す有用な特徴量となり得る。
【0076】
図6は、階層的クラスタリングとクラスタ評価値の例を示す図である。
情報処理装置100は、上記で算出された特徴量を用いて、上記で抽出された複数のサンプルプログラムに対して階層的クラスタリングを行う。階層的クラスタリングでは、情報処理装置100は、まずサンプルプログラムと同数のクラスタを生成し、複数のサンプルプログラムを互いに異なるクラスタに分類する。情報処理装置100は、クラスタに含まれるサンプルプログラムの特徴量に基づいてクラスタ間距離を算出し、クラスタ間距離が最小であるクラスタのペアを1つのクラスタに統合する。情報処理装置100は、クラスタ間距離の算出とクラスタのペアの統合とを、クラスタ数が1になるまで繰り返す。
【0077】
2つのサンプルプログラムの間の距離には、2つの特徴量の間のユークリッド距離が使用される。クラスタ間距離は、例えば、異なるクラスタに含まれるサンプルプログラムの間の距離のうちの最小値または最大値である。最小値を用いる方法は最短距離法と呼ばれることがあり、最大値を用いる方法は最長距離法と呼ばれることがある。また、異なるクラスタに含まれるサンプルプログラムの間の距離の平均値が用いられてもよい。
【0078】
これにより、
図6に示すような樹形図が生成される。樹形図は、全てのサンプルプログラムを含む1つのクラスタを示すルートノードと、互いに異なるクラスタに含まれる複数のサンプルプログラムを示す葉ノードとを含む。樹形図では、階層的クラスタリングの進行度を示す階層tが規定される。葉ノードの階層ではt=0であり、ルートノードの階層ではt=1である。階層tは、0以上1以下の数値をとる。
【0079】
樹形図から1つの階層を選択すると、選択された階層において形成されている1以上のクラスタが特定される。通常、t=0,t=1以外の階層が選択される。ユーザは、特定された1つのクラスタから1つのソフトウェア部品を作成する。同一のクラスタに含まれる2以上のサンプルプログラムは、共通する特徴をもつことが期待される。そこで、例えば、ユーザは、それら2以上のサンプルプログラムから共通する特徴のコードを抽出し、再利用可能な形式に書き換えることでソフトウェア部品を作成する。
【0080】
例えば、t=0.8の階層では、複数のサンプルプログラムがクラスタ161,162,163に分類されている。ユーザは、クラスタ161から1つのソフトウェア部品を作成する。また、ユーザは、クラスタ162から1つのソフトウェア部品を作成する。また、ユーザは、クラスタ163から1つのソフトウェア部品を作成する。なお、ソフトウェア部品は再利用可能なプログラムであり、コード事例、コードパターン、プログラム部品、コードスニペットまたはプログラミングイディオムと呼ばれてもよい。
【0081】
しかし、前述した機械学習スクリプトの性質上、機械学習スクリプトからはソフトウェア部品の候補となる多数のサンプルプログラムが抽出される。多数のサンプルプログラムに対して階層的クラスタリングを行うと、階層の深い樹形図が生成される。そのため、ソフトウェア部品に適した階層をユーザが樹形図から選択することが難しいことがある。そこで、情報処理装置100は、複数の階層それぞれに対して、ソフトウェア部品に適しているか否かを示す階層評価値を算出し、階層評価値に基づいて適切な階層を選択する。
【0082】
階層tの階層評価値Ptは、数式(1)のように算出される。階層評価値Ptは、階層tで形成されたクラスタCt,i(i=1,2,3,…)に対して算出されるクラスタ評価値Pt,iの合計である。クラスタ評価値Pt,iは、下記の第1項から第4項の積である。
【0083】
【0084】
第1項は、クラスタに含まれるサンプルプログラムの個数を示すクラスタサイズである。数式(1)において、|Ct,i|はクラスタCt,iのクラスタサイズを表す。クラスタサイズは、ソフトウェア部品の再利用性と関連する。類似するコードが頻繁に出現することは、ソフトウェア部品の再利用性が高いことを示す。そこで、クラスタサイズが大きいほどクラスタ評価値Pt,iが大きくなる。
【0085】
第2項は、クラスタに含まれる2以上のサンプルプログラムの凝集度である。数式(1)において、1/Dt,iはクラスタCt,iの凝集度を表す。クラスタ内でのサンプルプログラム相互の距離が小さいほど凝集度が高く、他のクラスタに属するサンプルプログラムとの距離が大きいほど凝集度が高くなる。凝集度の計算に使用する特徴量と階層的クラスタリングに使用する特徴量とは、同じでもよいし異なってもよい。凝集度は、ソフトウェア部品の再利用性と関連する。凝集度が高いクラスタは、他のクラスタとは異なる特有のコードの特徴を表す。そこで、凝集度が高いほどクラスタ評価値Pt,iが大きくなる。
【0086】
凝集度には、例えば、Calinski-Harabasz指標またはDavies-Bouldin指標が利用される。Calinski-Harabasz指標は、クラスタ内の特徴量の分散に反比例し、クラスタ間の特徴量の分散に比例する。クラスタ間の特徴量の分散は、全サンプルプログラムの特徴量の中心と複数のクラスタそれぞれの特徴量の中心との間の距離についての分散である。特徴量の中心は、例えば、特徴量の平均値である。
【0087】
Davies-Bouldin指標は、クラスタ内の特徴量の分散と、最も類似する相手クラスタ内の特徴量の分散との和を、クラスタ間距離で割ったものである。相手クラスタは、クラスタ間距離が最も小さい他のクラスタである。このクラスタ間距離は、一方のクラスタの特徴量の中心と他方のクラスタの特徴量の中心との間の距離である。
【0088】
なお、凝集度は、クラスタ毎に算出されてもよいし、同一の階層にある複数のクラスタ全体にとって共通に算出されてもよい。全クラスタ共通のCalinski-Harabasz指標は、複数のクラスタのクラスタ内分散の平均値を用いて算出される。全クラスタ共通のDavies-Bouldin指標は、個々のクラスタのDavies-Bouldin指標の平均値である。
【0089】
Calinski-Harabasz指標は、例えば、下記の非特許文献に記載されている。T. Calinski and J. Harabasz, "A Dendrite Method for Cluster Analysis", Communications in Statistics, Volume 3, Issue 1, pages 1-27, January 1974。Davies-Bouldin指標は、例えば、下記の非特許文献に記載されている。David Davies and Donald Bouldin, "A Cluster Separation Measure", IEEE Transactions on Pattern Analysis and Machine Intelligence, Volume 1, Issue 2, pages 224-227, April 1979。
【0090】
第3項は、クラスタに含まれるサンプルプログラムのモデル精度の平均である。数式(1)において、ut,iはクラスタCt,iに含まれるサンプルプログラムのモデル精度を表す。平均モデル精度は、ソフトウェア部品の有用性と関連する。ソフトウェア部品を用いて訓練される機械学習モデルのモデル精度が高いことは、ソフトウェア部品の有用性が高いことを示す。そこで、平均モデル精度が高いほどクラスタ評価値Pt,iが大きくなる。
【0091】
第4項は、クラスタに含まれるサンプルプログラムのモデル精度の分散の逆数である。数式(1)において、βは分散がゼロになることを回避するための微小な定数である。例えば、β=0.01である。モデル精度の分散の逆数は、ソフトウェア部品の有用性と関連する。ソフトウェア部品を用いて訓練される機械学習モデルのモデル精度が不安定であることは、ソフトウェア部品が十分に細分化されていないことを示す。そこで、モデル精度の分散が小さいほどクラスタ評価値Pt,iが大きくなる。
【0092】
例えば、前述のクラスタ161について、クラスタサイズが100、凝集度が13、モデル精度の平均が0.7、モデル精度の分散が1.25と算出される。この場合、クラスタ161のクラスタ評価値は728である。また、クラスタ162について、クラスタサイズが150、凝集度が8、平均モデル精度が0.55、モデル精度の分散が1.0と算出される。この場合、クラスタ162のクラスタ評価値は660である。また、クラスタ163について、クラスタサイズが1、凝集度が1、平均モデル精度が0.92、モデル精度の分散が0.01と算出される。この場合、クラスタ163のクラスタ評価値は92である。よって、t=0.8の階層の階層評価値は1480である。
【0093】
情報処理装置100は、複数の階層の中から階層評価値が最大の階層を選択する。しかし、一般的に、サンプルプログラムの特徴量(プログラムの記述に関する特徴)とモデル精度との間には相関があるわけではない。このため、特徴量のユークリッド距離のみを基準にして階層的クラスタリングを行うと、モデル精度の高いサンプルプログラムが様々なクラスタに分散する。
【0094】
その結果、階層tの増大に対して階層評価値はランダムに変動することになり、情報処理装置100は、階層評価値が最大の階層を特定するために全ての階層の階層評価値を算出することになる。サンプルプログラム数をNとすると、全ての階層の階層評価値を算出する計算量はlog(N)のオーダーとなる。
【0095】
そこで、第2の実施の形態では、情報処理装置100は、階層的クラスタリングで使用する距離を、数式(2)に示すようにモデル精度を用いて修正する。数式(2)において、d0(ci,cj)は、サンプルプログラムci,cjの間の特徴量のユークリッド距離である。uci,ucjは、サンプルプログラムci,cjのモデル精度である。dr(ci,cj)は、サンプルプログラムci,cjの間の修正距離である。
【0096】
【0097】
よって、修正距離は、修正前のユークリッド距離の3乗に比例し、2つのサンプルプログラムのモデル精度の積に反比例する。数式(2)に示すdr(ci,cj)は、万有引力の方程式を参考にして規定されている。万有引力の方程式は、万有引力が、2つの物体の質量の積に比例し、距離の2乗に反比例することを示す。この点、dr(ci,cj)は、特徴量のユークリッド距離を、モデル精度に応じた引力で割ることで算出される。
【0098】
数式(2)に示す修正距離を用いて階層的クラスタリングを行うと、モデル精度の高い2つのサンプルプログラムの間の距離が小さく見え、低い階層においても同一クラスタに分類されやすくなる。低い階層では、特徴量のユークリッド距離が小さく、かつ、両方ともモデル精度の高いサンプルプログラムが優先的に同一クラスタに統合される。階層tを大きくすると、そのようなサンプルプログラムを中心としてクラスタが成長する。高い階層では、特徴量のユークリッド距離が大きいサンプルプログラムが同一クラスタに合流することがあり、モデル精度の低いサンプルプログラムがクラスタに混在することがある。
【0099】
従って、上記の修正距離を用いて階層的クラスタリングを行うと、階層tの増大に対して、階層評価値は一定の変動傾向を示す。階層が低いうちは、階層tの増大に対して階層評価値が概ね単調に増加する。階層が十分に高くなると、階層tの増大に対して階層評価値が概ね単調に減少する。階層評価値は、短期的にはランダムに変動するものの、移動平均をとると単調増加または単調減少を示す。この性質は「準単調性」と呼ばれてもよい。
【0100】
階層評価値を階層tの昇順に並べると、階層評価値のピークが存在し、ピークを越えると階層評価値が減少に転じる。情報処理装置100は、階層評価値のピークを検出し、ピークに相当する階層を選択すればよい。ピークが検出されると、情報処理装置100は、階層評価値がもつ準単調性から、更に高い階層に対して階層評価値を算出しなくてよい。このように、一部の階層に対して階層評価値の算出が省略される。
【0101】
図7は、モデル精度を用いた距離の修正例を示す図である。
ここでは、情報処理装置100は、サンプルプログラム171,172,173の間の距離に基づいて、サンプルプログラム171,172,173のうちの2つを同一クラスタに分類することを考える。サンプルプログラム171,172の間のユークリッド距離は0.9、サンプルプログラム172,173の間のユークリッド距離は0.6、サンプルプログラム171,173の間のユークリッド距離は0.9である。サンプルプログラム171のモデル精度は1.0、サンプルプログラム172のモデル精度は1.0、サンプルプログラム173のモデル精度は0.2である。
【0102】
ユークリッド距離のみに基づいて階層的クラスタリングを行う場合、サンプルプログラム172,173の間のユークリッド距離が最小であるため、情報処理装置100は、サンプルプログラム172,173を同一クラスタに分類する。しかし、サンプルプログラム172,173のモデル精度は大きく異なる。
【0103】
一方、前述の修正距離を使用する場合、情報処理装置100は、サンプルプログラム171,172の間の修正距離を0.729、サンプルプログラム172,173の間の修正距離を1.08、サンプルプログラム171,173の間の修正距離を3.645と算出する。修正距離に基づいて階層的クラスタリングを行う場合、サンプルプログラム171,172の間の修正距離が最小であるため、情報処理装置100は、サンプルプログラム171,172を同一クラスタに分類する。
【0104】
図8は、階層と階層評価値の関係例を示すグラフである。
曲線174は、階層tに対する階層評価値の移動平均を表す。
図8において、横軸は階層を表し、縦軸は階層評価値を表す。横軸については、左側ほど階層が低く、右側ほど階層が高い。縦軸については、上側ほど階層評価値が高い。
【0105】
前述の数式(1)によって算出される階層評価値は、階層に対して厳密な単調性をもたない。ただし、階層評価値は、階層が低いうちは移動平均が単調に増加し、階層が十分に高くなると移動平均が単調に減少するという準単調性をもつ。曲線174は、途中の階層において階層評価値が最大になるピークをもつ。
【0106】
情報処理装置100は、階層的クラスタリングによって生成される樹形図に対して、低い階層から高い階層に向かって順に階層評価値を算出する。情報処理装置100は、階層評価値の移動平均を監視し、移動平均が既にピークを超えたことを検出する。すると、情報処理装置100は、階層評価値が算出済みである階層の中から、階層評価値が最大の階層を選択する。移動平均がピークを越えた後は、準単調性により、既出の階層評価値よりも高い階層評価値が算出される可能性は低い。そのため、情報処理装置100は、更に高い階層に対しては階層評価値の算出を省略する。
【0107】
なお、上記とは逆に、階層評価値は、階層が高いうちは移動平均が単調に増加し、階層が十分に低くなると移動平均が単調に減少するという準単調性をもつということもいえる。したがって、高い階層から低い階層に向かって順に階層評価値を算出する態様でも、情報処理装置100は、階層評価値のピークを検出することが可能である。
【0108】
移動平均の監視について、例えば、情報処理装置100は、直近W個の階層評価値の平均を移動平均として算出する。Wはウィンドウ幅であり、例えば、5~7程度である。情報処理装置100は、最新の移動平均を1つ前の階層の移動平均と比較し、移動平均が減少しているか判定する。情報処理装置100は、移動平均がM回連続で減少した場合、移動平均が既にピークを越えたと判断する。Mは、例えば、3~5程度である。
【0109】
なお、ある階層の階層評価値は他の階層のクラスタリング結果に依存せず、情報処理装置100は、複数の階層の階層評価値を互いに独立に算出することができる。そこで、情報処理装置100は、階層的クラスタリングと階層の評価とを別フェーズとして分離してもよいし、階層的クラスタリングと階層の評価とを統合的に行ってもよい。
【0110】
前者の場合、情報処理装置100は、まず階層的クラスタリングを最後まで実行して、樹形図の全体を生成する。その後、情報処理装置100は、樹形図の低い階層から高い階層(または、高い階層から低い階層)に向かって、ピークが検出されるまで階層評価値を順に算出する。
【0111】
後者の場合、情報処理装置100は、階層的クラスタリングを、階層の評価と同期して1階層ずつ進める。情報処理装置100は、ある階層のクラスタリング結果が得られると、その階層の階層評価値を算出する。情報処理装置100は、階層的クラスタリングを1つ上の階層に進め、当該1つ上の階層の階層評価値を算出する。情報処理装置100は、ピークが検出されるまで、1つの階層のクラスタリングと当該1つの階層の評価とを繰り返す。これにより、階層的クラスタリングの負荷も低減する。ただし、以下では、前者のアルゴリズムを中心に説明する。
【0112】
次に、情報処理装置100の機能および処理手順について説明する。
図9は、情報処理装置の機能例を示すブロック図である。
情報処理装置100は、スクリプト記憶部121、スクリプト実行部122、スクリプト分割部123、特徴量算出部124、クラスタリング部125およびクラスタ評価部126を有する。スクリプト記憶部121は、例えば、RAM102またはHDD103を用いて実装される。スクリプト実行部122、スクリプト分割部123、特徴量算出部124、クラスタリング部125およびクラスタ評価部126は、例えば、CPU101またはGPU104とプログラムとを用いて実装される。
【0113】
スクリプト記憶部121は、収集された既存の機械学習スクリプトを記憶する。また、スクリプト記憶部121は、機械学習スクリプトを実行するための訓練データおよびテストデータを記憶する。また、スクリプト記憶部121は、機械学習スクリプトに対応するモデル精度を記憶する。モデル精度は、スクリプト実行部122によって測定される。
【0114】
スクリプト実行部122は、スクリプト記憶部121に記憶された機械学習スクリプトを、訓練データおよびテストデータを用いて実行する。機械学習スクリプトの実行には、GPU104が使用されてもよい。スクリプト実行部122は、機械学習スクリプトによって測定されたモデル精度をスクリプト記憶部121に保存する。
【0115】
なお、モデル精度を測定するコードが機械学習スクリプトに含まれていない場合、スクリプト実行部122は、訓練された機械学習モデルのモデル精度を機械学習スクリプトの外部で測定してもよい。また、サンプルプログラムの特徴量がメモリ状態から算出される場合、スクリプト実行部122は、機械学習スクリプトの実行中、ステップ毎にメモリイメージをスクリプト記憶部121に保存する。
【0116】
スクリプト分割部123は、スクリプト記憶部121に記憶された機械学習スクリプトを複数のサンプルプログラムに分割する。例えば、スクリプト分割部123は、機械学習スクリプトに含まれる連続するn行(n=1,2,3,…)のコードを、サンプルプログラムとして抽出する。ここで生成されるサンプルプログラムの集合には、異なる機械学習スクリプトから抽出されたサンプルプログラムが混在していてよい。スクリプト分割部123は、サンプルプログラムに対し、元の機械学習スクリプトのモデル精度を付与する。
【0117】
特徴量算出部124は、スクリプト分割部123で抽出されたサンプルプログラムの特徴量を算出する。例えば、特徴量算出部124は、サンプルプログラムからトークンを抽出し、トークンの出現の有無を示すトークンベクトルを特徴量として算出する。
【0118】
クラスタリング部125は、特徴量算出部124で算出された特徴量と、スクリプト実行部122で測定されたモデル精度とに基づいて、前述の数式(2)に従って、サンプルプログラムの間の修正距離を規定する。クラスタリング部125は、修正距離に基づいて、スクリプト分割部123で抽出された複数のサンプルプログラムに対して階層的クラスタリングを実行する。これにより、クラスタ数が異なる複数の階層それぞれにおけるサンプルプログラムのクラスタリング結果を示す樹形図(デンドログラム)が生成される。
【0119】
クラスタ評価部126は、クラスタリング部125による階層的クラスタリングの結果と各サンプルプログラムに付与されたモデル精度とから、前述の数式(1)に従ってクラスタのクラスタ評価値を算出する。クラスタ評価部126は、少なくとも一部の階層それぞれに対して、その階層に含まれるクラスタのクラスタ評価値を合計して階層評価値を算出する。クラスタ評価部126は、階層の昇順に階層評価値の移動平均を算出して、階層評価値のピークを検出し、階層評価値が最も大きい階層を選択する。
【0120】
クラスタ評価部126は、選択した階層のクラスタリング結果を不揮発性ストレージに保存してもよいし、表示装置111に表示してもよいし、他の情報処理装置に送信してもよい。また、クラスタ評価部126は、選択した階層のクラスタからソフトウェア部品を作成するようユーザに促してもよい。また、クラスタ評価部126は、選択した階層のクラスタ毎に、サンプルプログラムを一定の基準でランク付けし、ランクが上位のサンプルプログラムをソフトウェア部品の有力候補としてユーザに提示してもよい。
【0121】
また、クラスタ評価部126は、クラスタ内で特徴量が中心に最も近いサンプルプログラムを、ソフトウェア部品の有力候補として選択してもよい。また、クラスタ評価部126は、選択した階層に現れる2以上のクラスタのうち、クラスタ評価値が閾値を超えるクラスタまたはクラスタ評価値が上位のクラスタのみをユーザに提示してもよい。
【0122】
情報処理装置100は、サンプルプログラムに基づいて編集されたソフトウェア部品をユーザから受け付け、受け付けたソフトウェア部品を保存してもよい。また、情報処理装置100は、受け付けたソフトウェア部品を他の情報処理装置に送信してもよい。
【0123】
図10は、クラスタリングの手順例を示すフローチャートである。
(S10)スクリプト実行部122は、機械学習スクリプトを実行することで、その機械学習スクリプトを用いて訓練された機械学習モデルのモデル精度を測定する。
【0124】
(S11)スクリプト分割部123は、機械学習スクリプトを分割して複数のサンプルプログラムを生成し、各サンプルプログラムに対してモデル精度を付与する。
(S12)特徴量算出部124は、複数のサンプルプログラムからトークンを抽出し、各サンプルプログラムに対してトークンの出現の有無を示す特徴量を算出する。
【0125】
(S13)クラスタリング部125は、サンプルプログラムのペア毎に、ステップS12で算出された特徴量のユークリッド距離を算出する。クラスタリング部125は、ステップS10で測定されたモデル精度のうち、サンプルプログラムのペアに対応するモデル精度のペアを用いて、ユークリッド距離を修正して修正距離を算出する。
【0126】
(S14)クラスタリング部125は、ステップS13で算出された修正距離を用いて、クラスタ数を段階的に減少させながら複数のサンプルプログラムをクラスタに分類する階層的クラスタリングを実行する。これにより、クラスタリング部125は、階層的クラスタリングの結果を示す樹形図(デンドログラム)を生成する。
【0127】
(S15)クラスタ評価部126は、ステップS14で生成された樹形図の中から、下位階層から優先的に未評価の階層を1つ選択する。
(S16)クラスタ評価部126は、ステップS15で選択された階層に含まれる1つのクラスタを選択する。クラスタ評価部126は、選択されたクラスタのクラスタ評価値を算出する。クラスタ評価値は、クラスタサイズを示す第1項と、凝集度を示す第2項と、モデル精度の平均を示す第3項と、モデル精度の分散の逆数を示す第4項の積である。
【0128】
(S17)クラスタ評価部126は、選択された階層に含まれる全てのクラスタを評価したか判断する。全てのクラスタが評価済みである場合、ステップS18に処理が進む。未評価のクラスタがある場合、ステップS16に処理が戻る。
【0129】
(S18)クラスタ評価部126は、選択された階層に含まれる全てのクラスタのクラスタ評価値を合算することで、選択された階層の階層評価値を算出する。
(S19)クラスタ評価部126は、W個以上の階層の階層評価値を算出済みである場合、ウィンドウ幅Wで階層評価値の移動平均を算出する。
【0130】
(S20)クラスタ評価部126は、1つ前の階層で算出された移動平均と現在の階層で算出された移動平均とを比較する。クラスタ評価部126は、W個以上の階層の階層評価値を算出済みであり、階層評価値の移動平均をM+1回以上算出済みであり、かつ、移動平均がM回連続で低下したというピーク条件を満たすか判断する。
【0131】
ピーク条件を満たす場合、ステップS21に処理が進む。ピーク条件を満たさない場合、ステップS15に処理が戻る。ピーク条件を満たさない場合には、まだW個未満の階層の階層評価値しか算出していない場合と、まだ移動平均をM回以下しか算出していない場合と、移動平均がM回連続で低下しているわけではない場合とが含まれる。
【0132】
(S21)クラスタ評価部126は、樹形図から階層評価値が最大の階層を選択する。クラスタ評価部126は、選択した階層のクラスタリング結果を出力する。
以上説明したように、第2の実施の形態の情報処理装置100は、既存の機械学習スクリプトからサンプルプログラムの集合を抽出し、階層的クラスタリングによってサンプルプログラムの集合を2以上のクラスタに分類する。これにより、1つのソフトウェア部品にすることが好適なクラスタがユーザに提示され、機械学習スクリプトに関するソフトウェア部品を作成する作業が効率化される。
【0133】
また、情報処理装置100は、クラスタに対してクラスタ評価値を算出し、階層に対してクラスタ評価値から階層評価値を算出する。そして、情報処理装置100は、クラスタ数の異なる複数の階層のクラスタリング結果のうち、階層評価値が最も高い階層のクラスタリング結果を選択する。これにより、好適な階層を人手で判断しなくてよく、ソフトウェア部品を作成する作業が効率化される。特に、多数のサンプルプログラムから階層の深い樹形図が生成された場合、部品化に好適な階層が自動的に判定される。
【0134】
また、情報処理装置100は、クラスタサイズを示す第1項と、クラスタ内の特徴量の凝集度を示す第2項と、クラスタ内のモデル精度の平均を示す第3項と、クラスタ内のモデル精度の分散の逆数を示す第4項の積を、クラスタ評価値として算出する。これにより、ソフトウェア部品の再利用性および有用性の観点からクラスタが評価され、クラスタ評価値の高いクラスタから高品質なソフトウェア部品が作成される。
【0135】
また、情報処理装置100は、2つのサンプルプログラムの間の特徴量のユークリッド距離を、当該2つのサンプルプログラムのモデル精度を用いて修正する。修正距離は、2つのサンプルプログラムのモデル精度にそれぞれ反比例する。これにより、階層に対して階層評価値がランダムに変動せずに準単調性をもち、階層評価値のピークが存在する。よって、情報処理装置100は、全ての階層に対して階層評価値を算出しなくても、階層評価値が最大の階層を推定することができ、情報処理装置100の負荷が低減する。
【0136】
また、修正距離を用いた階層的クラスタリングでは、特徴量のユークリッド距離が小さく、かつ、両方ともモデル精度が高いサンプルプログラムのペアから優先的に、同一のクラスタに分類される。そして、階層が低いうちは、そのようなサンプルプログラムを中心として、特徴量のユークリッド距離が比較的小さく、かつ、モデル精度が比較的高い周辺のサンプルプログラムがクラスタに取り込まれ、クラスタが成長する。よって、ソフトウェア部品に好適なクラスタが生成されやすくなる。
【0137】
また、情報処理装置100は、階層的クラスタリングを一度に最後まで実行せず、階層の評価と1つ上の階層のクラスタリングとを交互に行うことも可能である。これにより、情報処理装置100の負荷が更に低減する。
【符号の説明】
【0138】
10 情報処理装置
11 記憶部
12 処理部
13a,13b,13c,13d,13e,13f サンプルプログラム
14a,14b,14c,14d,14e,14f 実行性能
15a,15b パターン
16a,16b,16c,16d,16e クラスタ
17a,17b,17c,17d,17e,18a,18b 評価値