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

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

▶ 富士通株式会社の特許一覧

特開2023-183447書換プログラム、書換方法および情報処理装置
<>
  • 特開-書換プログラム、書換方法および情報処理装置 図1
  • 特開-書換プログラム、書換方法および情報処理装置 図2
  • 特開-書換プログラム、書換方法および情報処理装置 図3
  • 特開-書換プログラム、書換方法および情報処理装置 図4
  • 特開-書換プログラム、書換方法および情報処理装置 図5
  • 特開-書換プログラム、書換方法および情報処理装置 図6
  • 特開-書換プログラム、書換方法および情報処理装置 図7
  • 特開-書換プログラム、書換方法および情報処理装置 図8
  • 特開-書換プログラム、書換方法および情報処理装置 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023183447
(43)【公開日】2023-12-28
(54)【発明の名称】書換プログラム、書換方法および情報処理装置
(51)【国際特許分類】
   G06N 20/00 20190101AFI20231221BHJP
   G06F 8/65 20180101ALI20231221BHJP
【FI】
G06N20/00 130
G06F8/65
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2022096965
(22)【出願日】2022-06-16
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】木村 功作
(72)【発明者】
【氏名】ルアンワン シェード
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376CA40
5B376CA46
5B376CA60
(57)【要約】      (修正有)
【課題】既存の機械学習プログラムに対するスコアを算出する書換プログラム、方法及び装置を提供する。
【解決手段】情報処理装置10は、機械学習ライブラリ13を使用する機械学習プログラム14を記憶する記憶部11と、機械学習ライブラリに含まれるモジュールのモジュール名に基づいて、機械学習プログラムの中から、機械学習モデルを訓練する訓練関数を呼び出す第1のコード14-1を検出し、第1のコードの前に、第1のコードで訓練関数に渡される第1の訓練データを、第2の訓練データとテストデータとに分割する第2のコード15-2を挿入し、第1のコードを、訓練関数に第2の訓練データを渡すように書き換え、第1のコードの後に、訓練された機械学習モデルとテストデータに含まれる入力データとから生成される予測データと、テストデータに含まれる正解データとに基づいてスコアを算出する第3のコード15-3を挿入する処理部12と、を有する。
【選択図】図1
【特許請求の範囲】
【請求項1】
機械学習ライブラリに含まれるモジュールのモジュール名に基づいて、前記機械学習ライブラリを使用する機械学習プログラムの中から、機械学習モデルを訓練する訓練関数を呼び出す第1のコードを検出し、
前記第1のコードの前に、前記第1のコードで前記訓練関数に渡される第1の訓練データを、第2の訓練データとテストデータとに分割する第2のコードを挿入し、
前記第1のコードを、前記訓練関数に前記第2の訓練データを渡すように書き換え、
前記第1のコードの後に、訓練された前記機械学習モデルと前記テストデータに含まれる入力データとから生成される予測データと、前記テストデータに含まれる正解データとに基づいてスコアを算出する第3のコードを挿入する、
処理をコンピュータに実行させる書換プログラム。
【請求項2】
前記機械学習ライブラリの使用方法を示すドキュメントから前記モジュール名を抽出する処理を前記コンピュータに更に実行させ、
前記第1のコードの検出は、前記ドキュメントから抽出された前記モジュール名を前記機械学習プログラムの中から検索する処理を含む、
請求項1記載の書換プログラム。
【請求項3】
前記第1のコードの検出は、前記機械学習プログラムの構文解析を行って抽象構文木を生成し、前記抽象構文木を用いて前記第1のコードを検出する処理を含む、
請求項1記載の書換プログラム。
【請求項4】
前記第3のコードの挿入は、前記機械学習プログラムの中から、前記機械学習モデルを用いて前記予測データを生成する予測関数を呼び出す第4のコードを検出し、前記第4のコードを、前記予測関数に前記入力データを渡すように書き換える処理を含む、
請求項1記載の書換プログラム。
【請求項5】
前記モジュールは、前記機械学習モデルを表すクラスであり、前記訓練関数は、前記クラスに含まれるメソッドである、
請求項1記載の書換プログラム。
【請求項6】
書き換えられた前記機械学習プログラムを前記第1の訓練データを用いて実行し、算出された前記スコアを書き換え前の前記機械学習プログラムと対応付けて保存する処理を前記コンピュータに更に実行させる、
請求項1記載の書換プログラム。
【請求項7】
機械学習ライブラリに含まれるモジュールのモジュール名に基づいて、前記機械学習ライブラリを使用する機械学習プログラムの中から、機械学習モデルを訓練する訓練関数を呼び出す第1のコードを検出し、
前記第1のコードの前に、前記第1のコードで前記訓練関数に渡される第1の訓練データを、第2の訓練データとテストデータとに分割する第2のコードを挿入し、
前記第1のコードを、前記訓練関数に前記第2の訓練データを渡すように書き換え、
前記第1のコードの後に、訓練された前記機械学習モデルと前記テストデータに含まれる入力データとから生成される予測データと、前記テストデータに含まれる正解データとに基づいてスコアを算出する第3のコードを挿入する、
処理をコンピュータが実行する書換方法。
【請求項8】
機械学習ライブラリを使用する機械学習プログラムを記憶する記憶部と、
前記機械学習ライブラリに含まれるモジュールのモジュール名に基づいて、前記機械学習プログラムの中から、機械学習モデルを訓練する訓練関数を呼び出す第1のコードを検出し、前記第1のコードの前に、前記第1のコードで前記訓練関数に渡される第1の訓練データを、第2の訓練データとテストデータとに分割する第2のコードを挿入し、前記第1のコードを、前記訓練関数に前記第2の訓練データを渡すように書き換え、前記第1のコードの後に、訓練された前記機械学習モデルと前記テストデータに含まれる入力データとから生成される予測データと、前記テストデータに含まれる正解データとに基づいてスコアを算出する第3のコードを挿入する処理部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は書換プログラム、書換方法および情報処理装置に関する。
【背景技術】
【0002】
コンピュータは、訓練データを用いて機械学習モデルを訓練する機械学習を行うことがある。訓練データは、機械学習モデルに入力される入力データと、機械学習モデルが出力する予測データに対応する正解データとを含むことがある。コンピュータは、入力データから生成される予測データと正解データとの間の誤差が小さくなるように、機械学習モデルに含まれるパラメータ値を最適化する。
【0003】
コンピュータに機械学習を実行させるユーザは、機械学習の手順を規定した機械学習プログラムを作成することがある。機械学習プログラムでは、訓練データの前処理の方法、機械学習モデルの構造、機械学習アルゴリズムの挙動を制御するためのハイパーパラメータなどの各種の調整項目の値が選択される。これらの調整項目は、機械学習モデルの予測精度に影響を与える。そのため、機械学習モデルのタスクおよび使用する訓練データが同一であっても、機械学習プログラムによって予測精度が異なることがある。
【0004】
なお、階層化されたプログラムを複数のプログラム要素に分割し、各プログラム要素の属性および階層に基づいて機械学習を行い、それら複数のプログラム要素を複数のグループに分類する情報処理装置が提案されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】国際公開第2018/066074号
【発明の概要】
【発明が解決しようとする課題】
【0006】
コンピュータは、既存の機械学習プログラムに対するスコアを算出したいことがある。スコアとしては、その機械学習プログラムによって訓練される機械学習モデルの予測精度を用いることが考えられる。例えば、ユーザが機械学習モデルのタスクおよび訓練データを指定すると、そのタスクを実現するための機械学習プログラムを生成することでユーザの負担を軽減するAutoML(Auto Machine Learning)がある。コンピュータは、AutoMLが高品質な機械学習プログラムを生成するように、スコアの高い既存の機械学習プログラムを用いてAutoMLをチューニングしたいことがある。
【0007】
ここで、既存の機械学習プログラムは、スコアを自動的に算出するように記載されているとは限らない。この点、実行時にスコアが算出されるように、ユーザが既存の機械学習プログラムを手作業で編集することも考えられる。しかし、既存の機械学習プログラムを理解して手作業で編集することは、ユーザの負担が大きい。例えば、AutoMLのチューニングのために多数の既存の機械学習プログラムを収集する場合、これら多数の機械学習プログラムを手作業で編集することはユーザの負担が大きい。そこで、1つの側面では、本発明は、既存の機械学習プログラムに対するスコアを算出することを目的とする。
【課題を解決するための手段】
【0008】
1つの態様では、コンピュータに以下の処理を実行させる書換プログラムが提供される。機械学習ライブラリに含まれるモジュールのモジュール名に基づいて、機械学習ライブラリを使用する機械学習プログラムの中から、機械学習モデルを訓練する訓練関数を呼び出す第1のコードを検出する。第1のコードの前に、第1のコードで訓練関数に渡される第1の訓練データを、第2の訓練データとテストデータとに分割する第2のコードを挿入する。第1のコードを、訓練関数に第2の訓練データを渡すように書き換える。第1のコードの後に、訓練された機械学習モデルとテストデータに含まれる入力データとから生成される予測データと、テストデータに含まれる正解データとに基づいてスコアを算出する第3のコードを挿入する。
【0009】
また、1つの態様では、コンピュータが実行する書換方法が提供される。また、1つの態様では、記憶部と処理部とを有する情報処理装置が提供される。
【発明の効果】
【0010】
1つの側面では、既存の機械学習プログラムに対するスコアを算出できる。
【図面の簡単な説明】
【0011】
図1】第1の実施の形態の情報処理装置を説明するための図である。
図2】第2の実施の形態の情報処理装置のハードウェア例を示す図である。
図3】AutoMLを用いた機械学習の流れの例を示す図である。
図4】APIドキュメントとクラス名リストの例を示す図である。
図5】機械学習プログラムの書き換え例を示す図である。
図6】書き換え前の抽象構文木の例を示す図である。
図7】書き換え後の抽象構文木の例を示す図である。
図8】情報処理装置の機能例を示すブロック図である。
図9】スコア算出の手順例を示すフローチャートである。
【発明を実施するための形態】
【0012】
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0013】
図1は、第1の実施の形態の情報処理装置を説明するための図である。
第1の実施の形態の情報処理装置10は、実行時にスコアが算出されるように機械学習プログラムを書き換える。情報処理装置10は、複数の機械学習プログラムをそれぞれ書き換えてもよい。また、情報処理装置10は、書き換えられた機械学習プログラムを実行することで、機械学習プログラムに対するスコアを算出してもよい。情報処理装置10は、スコアが付与された機械学習プログラムを用いて、AutoMLをチューニングしてもよい。AutoMLは、機械学習モデルのタスクおよび訓練データが指定されると、そのタスクを実現するための機械学習プログラムを生成する。情報処理装置10は、クライアント装置でもよいしサーバ装置でもよい。情報処理装置10が、コンピュータ、書換装置または機械学習装置と呼ばれてもよい。
【0014】
情報処理装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。処理部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は、機械学習プログラム14を記憶する。機械学習プログラム14は、高水準言語で記載されたソースコードを含んでもよく、コンパイル済みのオブジェクトコードを含んでもよい。機械学習プログラム14は、機械学習ライブラリ13を使用する。機械学習ライブラリ13は、機械学習における典型的な処理を規定した再利用可能な1以上のモジュールを含むライブラリプログラムである。機械学習ライブラリ13を使用することで、ユーザは効率的に機械学習プログラム14を作成することができる。
【0016】
機械学習ライブラリ13は、機械学習モデルの種類または機械学習アルゴリズムの種類に対応するモジュールを含んでもよい。例えば、機械学習ライブラリ13は、ニューラルネットワーク、決定木、サポートベクタマシーンなどの機械学習モデルに対応するモジュールを含む。モジュールは関数を含むことがあり、機械学習プログラム14はモジュールの関数を呼び出すことがある。モジュールはオブジェクト指向言語のクラスに相当してもよく、関数はオブジェクト指向言語のメソッドに相当してもよい。関数には、機械学習モデルを訓練する訓練関数が含まれてもよく、入力データに対応する予測データを機械学習モデルに出力させる予測関数が含まれてもよい。
【0017】
なお、機械学習モデルは、画像データから物体クラスを判定する画像認識モデルであってもよい。また、機械学習モデルは、テキストデータに対して固有表現抽出や機械翻訳や類義語検索や応答文生成などの自然言語処理を行う自然言語処理モデルであってもよい。
【0018】
処理部12は、機械学習プログラム14を分析する。処理部12は、機械学習プログラム14がスコアを算出するコードを含まない場合、スコアを算出するコードを含むように機械学習プログラム14を書き換える。これによって、機械学習プログラム14が機械学習プログラム15に書き換えられる。機械学習プログラム15は、ソースコードを含んでもよくオブジェクトコードを含んでよい。なお、機械学習ライブラリ13や機械学習プログラム15が、記憶部11に記憶されてもよい。
【0019】
処理部12は、機械学習ライブラリ13に含まれるモジュールのモジュール名に基づいて、機械学習プログラム14の中から、機械学習モデルを訓練する訓練関数を呼び出すコード14-1を検出する。例えば、処理部12は、機械学習プログラム14からモジュール名を含む命令文を検索することで、そのモジュールのインスタンスを示す変数を特定する。モジュール名は、機械学習モデルの種類に対応するモデルモジュールの名称であってもよく、変数は、モデルモジュールのインスタンスを示すモデル変数であってもよい。
【0020】
そして、例えば、処理部12は、変数が示すインスタンスの訓練関数を呼び出すコード14-1を検出する。訓練関数は、入力データから生成される予測データと正解データとの間の誤差が小さくなるように、機械学習モデルに含まれるパラメータ値を最適化する。訓練関数の関数名は、事前に特定されてもよく、機械学習ライブラリ13に基づいて特定されてもよい。訓練関数は、fit関数であってもよい。
【0021】
コード14-1を検出するために、処理部12は、機械学習ライブラリ13の使用方法を示すドキュメントを分析し、このドキュメントからモジュール名を抽出してもよい。処理部12は、ドキュメントから抽出されたモジュール名に基づいてコード14-1を検出してもよい。ドキュメントは、API(Application Programming Interface)ドキュメントと呼ばれてもよい。ドキュメントには、機械学習ライブラリ13に含まれるモジュールのモジュール名や、モジュールに含まれる関数の関数名が記載されていてもよい。なお、「コード」は、1以上の命令または1行以上の命令文を含んでもよい。
【0022】
処理部12は、コード14-1の前にコード15-2を挿入する。例えば、処理部12は、コード14-1の直前にコード15-2を挿入する。コード15-2は、コード14-1において訓練関数に渡される第1の訓練データを、第2の訓練データとテストデータとに分割する。コード15-2は、機械学習ライブラリ13に規定された分割関数を呼び出してもよい。例えば、第1の訓練データは、入力データと正解データとをそれぞれ含む複数のレコードを含む。正解データは、Ground Truth、教師ラベルまたは教師データと呼ばれてもよい。その場合、コード15-2は、第1の訓練データのうちの一部のレコードを第2の訓練データとし、残りのレコードをテストデータとする。例えば、コード15-2は、第1の訓練データに含まれるレコードの10%をテストデータとする。
【0023】
処理部12は、コード14-1を、第1の訓練データに代えて第2の訓練データを訓練関数に渡すように書き換える。これにより、コード14-1がコード15-1に書き換えられる。なお、コード15-2では、入力データおよび正解データが、訓練データ用の入力データ、テストデータ用の入力データ、訓練データ用の正解データおよびテストデータ用の正解データに分割されてもよい。コード15-1では、訓練データ用の入力データと訓練データ用の正解データとが、訓練関数に入力されてもよい。
【0024】
処理部12は、コード14-1の後にコード15-3を挿入する。例えば、処理部12は、コード14-1の直後にコード15-3を挿入する。コード15-3は、訓練された機械学習モデルが出力する予測データとテストデータに含まれる正解データとに基づいてスコアを算出する。スコアは、正答率のように機械学習モデルの予測精度を示してもよい。コード15-3は、機械学習ライブラリ13に規定されたスコア関数を呼び出してもよい。例えば、コード15-3では、機械学習モデルが出力する予測データとテストデータ用の正解データとが、スコア関数に入力される。
【0025】
予測データを生成するため、処理部12は、機械学習プログラム14の中から予測関数を呼び出すコードを検索してもよい。例えば、処理部12は、コード14-1と同じ変数が示すインスタンスの予測関数を呼び出すコードを検索する。予測関数は、predict関数であってもよい。該当するコードが検出された場合、処理部12は、検出されたコードを書き換えてもよい。該当するコードが検出されない場合、処理部12は、予測関数を呼び出すコードを挿入してもよい。書き換えられたコードまたは挿入されたコードでは、テストデータ用の入力データが予測関数に入力されてもよく、予測関数が出力する予測データが変数に格納されてもよい。
【0026】
これにより、コード15-1,15-2,15-3を含む機械学習プログラム15が生成される。処理部12は、生成された機械学習プログラム15を不揮発性ストレージに保存してもよいし、表示装置に表示してもよいし、他の情報処理装置に送信してもよい。また、処理部12は、機械学習プログラム15を実行してスコアを算出してもよい。その場合、処理部12は、算出されたスコアを機械学習プログラム14または機械学習プログラム15と対応付けて保存してもよい。また、処理部12は、算出されたスコアを表示装置に表示してもよいし、他の情報処理装置に送信してもよい。
【0027】
なお、処理部12は、機械学習プログラム14の構文解析を行って抽象構文木(AST:Abstract Syntax Tree)を生成してもよい。抽象構文木は、モジュール名や関数名や変数名などのトークンの関係を木構造で表現する。処理部12は、生成された抽象構文木を用いて、コード14-1の検出、コード15-2の挿入、コード14-1の書き換え、コード15-3の挿入の一部または全部を行ってもよい。処理部12は、抽象構文木を書き換えてもよく、書き換えられた抽象構文木を機械学習プログラム15に変換してもよい。
【0028】
以上説明したように第1の実施の形態の情報処理装置10は、機械学習ライブラリ13に含まれるモジュールのモジュール名に基づいて、訓練関数を呼び出すコード14-1を機械学習プログラム14の中から検出する。情報処理装置10は、コード14-1の前に、訓練関数に渡される第1の訓練データを第2の訓練データとテストデータとに分割するコード15-2を挿入する。情報処理装置10は、コード14-1を、訓練関数に第2の訓練データを渡すように書き換える。情報処理装置10は、コード14-1の後に、機械学習モデルとテストデータに含まれる入力データとから生成される予測データと、テストデータに含まれる正解データとに基づいてスコアを算出するコード15-3を挿入する。
【0029】
これにより、機械学習プログラム14がスコアを算出するように記載されていない場合であっても、生成された機械学習プログラム15を実行することで、機械学習プログラム14に対するスコアが自動的に算出される。よって、機械学習プログラム14を人手で編集する負担が削減される。例えば、機械学習モデルのタスクおよび訓練データから機械学習プログラムを生成するAutoMLをチューニングするために、スコアが付与された複数の機械学習プログラムのサンプルが使用されることがある。その場合、複数の機械学習プログラムを人手で編集する負担が軽減される。また、機械学習プログラム14に対して、機械学習モデルの予測精度を示す適切なスコアが算出される。
【0030】
なお、情報処理装置10は、機械学習ライブラリ13の使用方法を示すドキュメントからモジュール名を抽出してもよく、抽出されたモジュール名を機械学習プログラム14から検索してもよい。これにより、訓練関数を呼び出すコード14-1が高精度に検出される。また、情報処理装置10は、機械学習プログラム14の構文解析を行って抽象構文木を生成してもよく、抽象構文木を用いてコード14-1の検出や書き換えなどの処理を行ってもよい。これにより、情報処理装置10は、機械学習プログラム14の書き方に依存せずに、高精度に上記の処理を行うことができる。
【0031】
また、情報処理装置10は、機械学習プログラム14の中から予測関数を呼び出すコードを検出してもよく、テストデータに含まれる入力データを予測関数に渡すように当該コードを書き換えてもよい。このとき、予測関数に入力されるハイパーパラメータ値は変更されなくてもよい。これにより、機械学習プログラム14に含まれる他のコードと整合するように、入力データに対応する予測データが生成される。
【0032】
また、モジュールは機械学習モデルを表すクラスであってもよく、訓練関数はクラスに含まれるメソッドであってもよい。これにより、機械学習モデルを訓練するコード14-1が高精度に検出される。また、情報処理装置10は、第1の訓練データを用いて機械学習プログラム15を実行してもよく、算出されたスコアを機械学習プログラム14と対応付けて保存してもよい。これにより、機械学習プログラム14に対してスコアが付与され、AutoMLのチューニングなどの他のタスクが促進される。
【0033】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
第2の実施の形態の情報処理装置100は、複数の機械学習プログラムのサンプルを収集し、各機械学習プログラムにスコアを付与する。情報処理装置100は、スコアが付与された複数の機械学習プログラムを用いて、タスクに応じた機械学習プログラムを生成するAutoMLを訓練する。情報処理装置100は、訓練されたAutoMLを用いて、所望のタスクに応じた機械学習プログラムを生成する。そして、情報処理装置100は、生成された機械学習プログラムを実行して機械学習モデルを生成する。ただし、上記の処理が異なる情報処理装置によって実行されてもよい。
【0034】
情報処理装置100は、クライアント装置でもよいしサーバ装置でもよい。情報処理装置100が、コンピュータまたは機械学習装置と呼ばれてもよい。情報処理装置100は、第1の実施の形態の情報処理装置10に対応する。
【0035】
図2は、第2の実施の形態の情報処理装置のハードウェア例を示す図である。
情報処理装置100は、バスに接続されたCPU101、RAM102、HDD103、GPU104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。
【0036】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムおよびデータをRAM102にロードし、プログラムを実行する。情報処理装置100は、複数のプロセッサを有してもよい。
【0037】
RAM102は、CPU101で実行されるプログラムおよびCPU101で演算に使用されるデータを一時的に記憶する揮発性半導体メモリである。情報処理装置100は、RAM以外の種類の揮発性メモリを有してもよい。
【0038】
HDD103は、オペレーティングシステム(OS:Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラムと、データとを記憶する不揮発性ストレージである。情報処理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の不揮発性ストレージを有してもよい。
【0039】
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メモリとして有してもよい。
【0040】
入力インタフェース105は、情報処理装置100に接続された入力デバイス112から入力信号を受け付ける。入力デバイス112は、例えば、マウス、タッチパネルまたはキーボードである。情報処理装置100に複数の入力デバイスが接続されてもよい。
【0041】
媒体リーダ106は、記録媒体113に記録されたプログラムおよびデータを読み取る読み取り装置である。記録媒体113は、例えば、磁気ディスク、光ディスクまたは半導体メモリである。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)およびHDDが含まれる。光ディスクには、CD(Compact Disc)およびDVD(Digital Versatile Disc)が含まれる。媒体リーダ106は、記録媒体113から読み取られたプログラムおよびデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、CPU101によって実行されることがある。
【0042】
記録媒体113は、可搬型記録媒体であってもよい。記録媒体113は、プログラムおよびデータの配布に用いられることがある。また、記録媒体113およびHDD103が、コンピュータ読み取り可能な記録媒体と呼ばれてもよい。
【0043】
通信インタフェース107は、ネットワーク114を介して他の情報処理装置と通信する。通信インタフェース107は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースでもよい。
【0044】
次に、AutoMLについて説明する。
図3は、AutoMLを用いた機械学習の流れの例を示す図である。
情報処理装置100は、AutoMLを訓練するためのサンプルデータを収集する。サンプルデータは、複数の機械学習プログラムそれぞれについて、データセットと問題定義と機械学習プログラムとスコアとを対応付ける。
【0045】
データセットは、機械学習プログラムに入力される訓練データである。データセットは複数のレコードを含み、各レコードは2以上のカラムの値を含む。データセットは、テーブルデータであってもよい。2以上のカラムのうちの一部のカラムが説明変数として使用され、説明変数の値が入力データとして使用される。また、2以上のカラムのうちの他の一部のカラムが目的変数として使用され、目的変数の値が正解データとして使用される。
【0046】
問題定義は、機械学習モデルによる予測のタスクを示す。問題定義は、例えば、データセットに含まれる2以上のカラムのうち、機械学習モデルが予測する目的変数に相当するカラムを指定する。機械学習プログラムは、機械学習の手順を規定したスクリプトプログラムである。機械学習プログラムは、高水準言語で記載されたソースコードである。機械学習プログラムは、機械学習ライブラリを使用することがある。機械学習プログラムは、訓練データの前処理方法の指定、機械学習モデルの構造の指定、機械学習アルゴリズムのハイパーパラメータ値の指定などを含むことがある。
【0047】
スコアは、機械学習プログラムによって生成される機械学習モデルの予測精度の測定値である。スコアの指標としては、正答率(Accuracy)、適合率(Precision)、再現率(Recall)、F値、平均二乗誤差(MSE:Mean Squared Error)、二乗平均平方根誤差(RMSE:Root Mean Squared Error)、決定係数などが挙げられる。訓練された機械学習モデルのスコアが算出されるように機械学習プログラムが記載されている場合、その機械学習プログラムによって算出されるスコアが保存される。一方、訓練された機械学習モデルのスコアが算出されるように機械学習プログラムが記載されていない場合、後述するように、その機械学習プログラムを書き換えることで算出されるスコアが保存される。
【0048】
サンプルデータは、機械学習プログラム33aについて、データセット31aと問題定義32aと機械学習プログラム33aとスコア34aとを対応付けて保持する。また、サンプルデータは、機械学習プログラム33bについて、データセット31bと問題定義32bと機械学習プログラム33bとスコア34bとを対応付けて保持する。サンプルデータは、例えば、数百件から数万件程度の機械学習プログラムを含む。
【0049】
情報処理装置100は、このサンプルデータを用いてAutoML35を訓練する。AutoML35は、データセット31および問題定義32から、その問題を解くための機械学習モデル36を訓練する機械学習プログラム33を生成するプログラム生成器である。AutoML35は、プログラムを含むソフトウェアとして実装される。AutoML35は、データセット31から機械学習モデル36の入力データを生成するための前処理方法を選択することがある。データセット31に対する前処理は、説明変数として使用するカラムの選択や、カラム値の正規化などを含むことがある。
【0050】
また、AutoML35は、問題定義32に適した機械学習モデルの構造を選択することがある。また、AutoML35は、機械学習モデル36の予測精度が高くなるように機械学習アルゴリズムのハイパーパラメータ値を選択することがある。AutoML35は、ハイパーパラメータ探索を行うように機械学習プログラム33を生成してもよい。
【0051】
AutoML35を訓練するにあたり、情報処理装置100は、サンプルデータの各機械学習プログラムに付与されたスコアを参照する。例えば、情報処理装置100は、機械学習プログラムに含まれるコードとスコアとの相関関係を分析し、スコアが高くなるコードの書き方を学習する。また、例えば、情報処理装置100は、スコアが閾値を超える機械学習プログラムなどスコアが高い機械学習プログラムを用いて、好ましい機械学習プログラムの記載を学習する。これにより、AutoML35は、機械学習モデル36の予測精度が高くなるように機械学習プログラム33を生成する。
【0052】
機械学習プログラム33は、データセット31を用いて機械学習モデル36を訓練するモデル生成器である。機械学習プログラム33は、データセット31および問題定義32にとって好適な機械学習の手順を規定したスクリプトプログラムである。情報処理装置100は、機械学習プログラム33を実行する。情報処理装置100は、機械学習プログラム33をコンパイルしてオブジェクトコードに変換してもよい。
【0053】
機械学習プログラム33は、機械学習モデル36に入力データを入力し、機械学習モデル36が出力する予測データと正解データとの間の誤差を算出し、誤差が小さくなるように機械学習モデル36のパラメータ値を最適化する。訓練された機械学習モデル36は、入力データから予測データを生成して出力する。
【0054】
ここで、機械学習プログラム33a,33bなどの既存の機械学習プログラムは、スコアを算出するように記載されていないことがある。一方、AutoML35を訓練するにあたり、既存の機械学習アルゴリズムのスコアが参照される。そこで、情報処理装置100は、スコアが自動的に算出されない機械学習プログラムについては、スコアが自動的に算出されるように機械学習プログラムを書き換えて実行する。情報処理装置100は、算出されたスコアと元の機械学習プログラムとを対応付けて保存する。これにより、収集された機械学習プログラムは、スコアが付与されてAutoML35の訓練に使用される。
【0055】
図4は、APIドキュメントとクラス名リストの例を示す図である。
機械学習プログラムを書き換えるために、情報処理装置100は、機械学習ライブラリのAPIドキュメント131を取得し、APIドキュメント131からクラス名リスト132を生成する。複数の機械学習ライブラリが存在する場合、情報処理装置100は、複数のAPIドキュメントからクラス名リスト132を生成する。
【0056】
機械学習ライブラリは、オブジェクト指向言語によって規定される複数のクラスを含む。それら複数のクラスの中には、機械学習モデルの種類に対応するモデルクラスが含まれる。例えば、機械学習ライブラリは、クラス分類型のニューラルネットワーク、回帰型のニューラルネットワーク、クラス分類型の決定木、回帰型の決定木、サポートベクタマシンなどの機械学習モデルを表すモデルクラスを含む。
【0057】
クラスは、1以上のメソッドを含む。例えば、モデルクラスは、入力データおよび正解データを引数として受け付け、機械学習モデルのインスタンスを訓練するfit関数を含む。また、例えば、モデルクラスは、入力データを引数として受け付け、機械学習モデルのインスタンスによって生成される予測データを出力するpredict関数を含む。
【0058】
APIドキュメント131は、機械学習ライブラリのインタフェースを示す文書である。APIドキュメント131には、複数のクラスそれぞれのクラス名や種類が記載されている。また、APIドキュメント131には、各クラスが有するメソッドのメソッド名が記載されている。情報処理装置100は、APIドキュメント131からモデルクラスのクラス名を抽出し、抽出したクラス名をクラス名リスト132に追加する。情報処理装置100は、モデルクラス以外のクラスのクラス名を抽出しなくてもよい。複数のAPIドキュメントがある場合、クラス名リスト132には、異なるAPIドキュメントから抽出されたクラス名が混在していてもよい。
【0059】
図5は、機械学習プログラムの書き換え例を示す図である。
情報処理装置100は、前述のクラス名リスト132を参照して、機械学習プログラム133を機械学習プログラム134に書き換える。機械学習プログラム133ではスコアが算出されない一方、機械学習プログラム134ではスコアが算出される。
【0060】
機械学習プログラム133の1行目には、モデルクラスのインスタンスを生成してモデル変数に代入する命令文が記載されている。機械学習プログラム133の3行目には、モデル変数が示すインスタンスのfit関数を呼び出す命令文が記載されている。このとき、fit関数には、入力データXと正解データyが引数として渡される。機械学習プログラム133の5行目には、モデル変数が示すインスタンスのpredict関数を呼び出し、予測データをデータ変数に代入する命令文が記載されている。このとき、predict関数には、ある入力データとハイパーパラメータ値が引数として渡される。
【0061】
まず、情報処理装置100は、機械学習プログラム133の中からクラス名リスト132に含まれるクラス名を検索する。クラス名リスト132の何れかのクラス名が検出されると、情報処理装置100は、検出されたクラス名についてモデルクラスのインスタンスを生成するコードを特定し、インスタンスが代入されるモデル変数を特定する。ここでは、機械学習プログラム133の1行目からモデル変数が特定される。
【0062】
次に、情報処理装置100は、機械学習プログラム133の中から、モデル変数が示すインスタンスのfit関数を呼び出すコードを検出し、fit関数に渡される入力データおよび正解データを特定する。ここでは、機械学習プログラム133の3行目から、入力データXおよび正解データyが特定される。
【0063】
次に、情報処理装置100は、入力データのレコード群を訓練用とテスト用とに分割すると共に、正解データのレコード群を訓練用とテスト用とに分割するコードを生成し、fit関数の呼び出しの直前に挿入する。データ分割には、例えば、機械学習ライブラリに規定されたsplit関数が用いられる。訓練データのレコード数とテストデータのレコード数との比は、例えば、9対1である。次に、情報処理装置100は、fit関数に渡される入力データを、上記で分割された訓練用の入力データに変更し、fit関数に渡される正解データを、上記で分割された訓練用の正解データに変更する。これにより、機械学習プログラム134の3行目および4行目が生成される。
【0064】
次に、情報処理装置100は、機械学習プログラム133の中から、モデル変数が示すインスタンスのpredict関数を呼び出すコードを検索する。predict関数を呼び出すコードが検出された場合、情報処理装置100は、検出されたコードをコピーして、検出されたコードの直後に挿入する。情報処理装置100は、コピーされたコードについて、predict関数に渡される入力データを、上記で分割されたテスト用の入力データに変更し、予測データが代入されるデータ変数を新しいデータ変数に変更する。このとき、ハイパーパラメータ値などの他の引数は、変更されずに引き継がれる。
【0065】
一方、predict関数を呼び出すコードが検出されない場合、情報処理装置100は、モデル変数が示すインスタンスのpredict関数を呼び出すコードを生成し、fit関数の呼び出しの直後に挿入する。生成されるコードは、上記で分割されたテスト用の入力データをpredict関数に引数として渡し、機械学習プログラム133に含まれない新しいデータ変数に予測データを代入する。predict関数が他の引数をもつ場合、他の引数には特定の初期値が代入される。ここでは、機械学習プログラム133の5行目がコピーされ、機械学習プログラム134の7行目が生成される。
【0066】
次に、情報処理装置100は、データ変数に代入された予測データと上記で分割されたテスト用の正解データとを比較してスコアを算出するコードを生成し、predict関数の呼び出しの直後に挿入する。スコアは、例えば、正答率である。スコア算出には、例えば、機械学習ライブラリに規定されたスコア関数が用いられる。その場合、生成されるコードは、予測データと正解データをスコア関数に引数として渡す。これにより、機械学習プログラム134の9行目が生成される。
【0067】
ところで、実質的に同じ機械学習の手順を示していても、機械学習プログラムによって記載方法が異なることがある。このような記載方法の揺れに柔軟に対応するため、情報処理装置100は、上記のコードの検出や書き換えを、ソースコードのテキストに対して直接行う代わりに抽象構文木に対して行う。機械学習プログラム133を機械学習プログラム134に書き換える場合、情報処理装置100は、機械学習プログラム133に対して構文解析を行って抽象構文木を生成する。抽象構文木は、式、変数、クラス、メソッド、演算子などの構文要素の間の関係を示す木構造データである。
【0068】
情報処理装置100は、抽象構文木の上でパターンマッチングを行って、特定のコードに相当する部分木を検出する。情報処理装置100は、検出した部分木を書き換えることでコードの書き換えを行う。また、情報処理装置100は、検出した部分木の位置を基準にして、新たな部分木を抽象構文木に挿入することでコードの挿入を行う。そして、情報処理装置100は、書き換えられた抽象構文木をソースコードに変換する。
【0069】
図6は、書き換え前の抽象構文木の例を示す図である。
抽象構文木140は、機械学習プログラム133に対応する。図6は、抽象構文木140の全体のうち、機械学習プログラム133の3行目に相当する部分を示している。ノード141は、fit関数の第1引数である入力データXを示す。ノード142は、fit関数の第2引数である正解データyを示す。
【0070】
図7は、書き換え後の抽象構文木の例を示す図である。
抽象構文木150は、機械学習プログラム134に対応する。図7は、抽象構文木150の全体のうち、機械学習プログラム134の3行目および4行目に相当する部分を示している。抽象構文木140を書き換えることで、抽象構文木150が生成される。
【0071】
ノード151は、入力データXのうち訓練用に分割されたレコードを格納するデータ変数を示す。ノード152は、入力データXのうちテスト用に分割されたレコードを格納するデータ変数を示す。ノード153は、正解データyのうち訓練用に分割されたレコードを格納するデータ変数を示す。ノード154は、正解データyのうちテスト用に分割されたレコードを格納するデータ変数を示す。ノード151,152,153,154を含む部分木は、抽象構文木150に新規に追加されている。
【0072】
ノード155は、split関数の第1引数である入力データXを示す。ノード156は、split関数の第2引数である正解データyを示す。ノード155,156を含む部分木は、抽象構文木150に新規に追加されている。
【0073】
ノード157は、fit関数の第1引数である訓練用の入力データを示す。ノード157は、ノード151と同じデータ変数を示す。ノード158は、fit関数の第2引数である訓練用の正解データを示す。ノード158は、ノード153と同じデータ変数を示す。ノード157,158を含む部分木は、抽象構文木140に含まれる部分木を書き換えたものである。ノード157は、抽象構文木140のノード141に対応する。ノード158は、抽象構文木140のノード142に対応する。情報処理装置100は、ノード141,142をノード157,158に書き換えている。
【0074】
次に、情報処理装置100の機能および処理手順について説明する。
図8は、情報処理装置の機能例を示すブロック図である。
情報処理装置100は、APIドキュメント記憶部121、プログラム記憶部122およびAutoML記憶部123を有する。これらの記憶部は、例えば、RAM102またはHDD103を用いて実装される。また、情報処理装置100は、クラス名リスト生成部124、プログラム書換部125、スコア算出部126、AutoML訓練部127、プログラム生成部128およびモデル生成部129を有する。これらの処理部は、例えば、CPU101またはGPU104とプログラムとを用いて実装される。
【0075】
APIドキュメント記憶部121は、1以上の機械学習ライブラリのインタフェースを示す1以上のAPIドキュメントを記憶する。また、APIドキュメント記憶部121は、それら1以上のAPIドキュメントから抽出されたクラス名を列挙したクラス名リストを記憶する。プログラム記憶部122は、サンプルとして収集された複数の機械学習プログラムを記憶する。また、プログラム記憶部122は、各機械学習プログラムと対応付けて、その機械学習プログラムに入力されるデータセットと、機械学習のタスクを示す問題定義と、訓練された機械学習モデルのスコアとを記憶する。
【0076】
AutoML記憶部123は、AutoMLのプログラムやデータを記憶する。AutoMLは、データセットと問題定義から機械学習プログラムを生成する。クラス名リスト生成部124は、APIドキュメント記憶部121に記憶されたAPIドキュメントから機械学習モデルの種類に対応するモデルクラスを検索し、モデルクラスのクラス名を抽出する。クラス名リスト生成部124は、抽出したクラス名をクラス名リストに追加する。
【0077】
プログラム書換部125は、プログラム記憶部122に記憶された機械学習プログラムのうち、スコアを出力するコードを含まない機械学習プログラムを抽出する。プログラム書換部125は、APIドキュメント記憶部121に記憶されたクラス名リストを参照して、抽出された機械学習プログラムを書き換えてスコア算出部126に渡す。プログラム書換部125は、書き換えられた機械学習プログラムを不揮発性ストレージに保存してもよいし、表示装置111に表示してもよいし、他の情報処理装置に送信してもよい。
【0078】
スコア算出部126は、プログラム記憶部122に記憶された機械学習プログラムに、対応するデータセットを入力して機械学習プログラムを実行し、スコアを算出する。スコア算出部126は、算出されたスコアを機械学習プログラムと対応付けて保存する。
【0079】
ただし、スコアを出力するコードを含まない機械学習プログラムについては、スコア算出部126は、書き換えられた機械学習プログラムをプログラム書換部125から受け取る。スコア算出部126は、元の機械学習プログラムに代えて書き換えられた機械学習プログラムを実行し、元の機械学習プログラムに対応するスコアを算出する。スコア算出部126は、算出されたスコアを不揮発性ストレージに保存してもよいし、表示装置111に表示してもよいし、他の情報処理装置に送信してもよい。
【0080】
AutoML訓練部127は、プログラム記憶部122に記憶されたデータセット、問題定義、機械学習プログラムおよびスコアを用いて、AutoML記憶部123に記憶されたAutoMLを訓練する。このとき、AutoML訓練部127は、機械学習プログラムに含まれるコードとスコアとの関係を分析して、スコアの向上に寄与するコードのパターンを検出する。これにより、AutoMLは、スコアの高い機械学習モデルを生成する高品質な機械学習プログラムが生成されるように訓練される。
【0081】
プログラム生成部128は、データセットおよび問題定義を受け付ける。プログラム生成部128は、AutoML記憶部123に記憶されたAutoMLにデータセットおよび問題定義を入力することで、機械学習プログラムを生成する。プログラム生成部128は、生成された機械学習プログラムをモデル生成部129に渡す。プログラム生成部128は、生成された機械学習プログラムを不揮発性ストレージに保存してもよいし、表示装置111に表示してもよいし、他の情報処理装置に送信してもよい。
【0082】
モデル生成部129は、機械学習プログラムにデータセットを入力して機械学習プログラムを実行し、訓練された機械学習モデルを生成する。モデル生成部129は、訓練された機械学習モデルを不揮発性ストレージに保存してもよいし、表示装置111に表示してもよいし、他の情報処理装置に送信してもよい。
【0083】
図9は、スコア算出の手順例を示すフローチャートである。
(S10)クラス名リスト生成部124は、機械学習ライブラリのAPIドキュメントから、機械学習モデルの種類に対応するモデルクラスのクラス名を抽出する。クラス名リスト生成部124は、抽出されたクラス名を列挙したクラス名リストを生成する。
【0084】
(S11)プログラム書換部125は、機械学習プログラムの構文解析により抽象構文木を生成する。以下のステップS12~S20は、抽象構文木の上で行われる。なお、ステップS11~S21は、複数の機械学習プログラムそれぞれに対して実行される。
【0085】
(S12)プログラム書換部125は、クラス名リストに記載された何れか1つのクラス名を機械学習プログラムから検索する。プログラム書換部125は、モデルクラスのインスタンスが代入されるモデル変数を特定する。
【0086】
(S13)プログラム書換部125は、ステップS12で特定されたモデル変数に対してfit関数を呼び出すコードFを機械学習プログラムから検索する。
(S14)プログラム書換部125は、コードFにおいてfit関数に渡されるデータセットを特定する。プログラム書換部125は、コードFの前に、データセットを訓練データとテストデータとに分割するコードを挿入する。
【0087】
(S15)プログラム書換部125は、コードFの引数を、ステップS14で分割される訓練データを示すデータ変数に書き換える。
(S16)プログラム書換部125は、ステップS12で特定されたモデル変数に対してpredict関数を呼び出すコードPを機械学習プログラムから検索する。
【0088】
(S17)プログラム書換部125は、機械学習プログラムにコードPが存在するか判断する。コードPが存在する場合、ステップS18に処理が進む。コードPが存在しない場合、ステップS19に処理が進む。
【0089】
(S18)プログラム書換部125は、コードPをコピーしてコードPの後に挿入する。プログラム書換部125は、コピーしたコードの引数を、ステップS14で分割されるテストデータに含まれる入力データを示すデータ変数に書き換える。また、プログラム書換部125は、予測データが代入される出力変数を、他の変数と異なる新しいデータ変数に書き換える。そして、ステップS20に処理が進む。
【0090】
(S19)プログラム書換部125は、ステップS12で特定されたモデル変数に対してpredict関数を呼び出すコードを生成し、コードFの後に挿入する。生成されるコードでは、テストデータに含まれる入力データがpredict関数に引数として渡され、predict関数が出力する予測データが新しいデータ変数に代入される。
【0091】
(S20)プログラム書換部125は、predict関数が出力する予測データとステップS14で分割されるテストデータに含まれる正解データとを比較してスコアを算出するコードを生成する。プログラム書換部125は、生成されたコードを、ステップS18またはステップS19のコードの後に挿入する。
【0092】
(S21)プログラム書換部125は、書き換えられた抽象構文木を機械学習プログラムのソースコードに変換する。スコア算出部126は、保存されているデータセットを用いて、書き換えられた機械学習プログラムを実行することでスコアを算出する。スコア算出部126は、算出されたスコアを、元の機械学習プログラムと対応付けて保存する。
【0093】
以上説明したように、第2の実施の形態の情報処理装置100は、AutoMLを用いて、データセットと問題定義に応じた適切なデータ前処理やモデル構造やハイパーパラメータ値を選択して、機械学習プログラムを生成する。これにより、機械学習をコンピュータに実行させるユーザの試行錯誤が削減されてユーザの負担が軽減される。
【0094】
また、情報処理装置100は、スコアが付与された機械学習プログラムのサンプルを用いてAutoMLを訓練する。これにより、AutoMLが、スコアの高い機械学習モデルが生成される高品質な機械学習プログラムを生成するように訓練される。また、情報処理装置100は、訓練された機械学習モデルのスコアが算出されるように記載されていない機械学習プログラムを、スコアが算出されるように書き換え、書き換えられた機械学習プログラムを実行する。これにより、機械学習プログラムを人手で編集する負担が削減されると共に、適切なスコアが機械学習プログラムに付与される。
【0095】
また、情報処理装置100は、APIドキュメントからモデルクラスのクラス名を抽出し、抽出されたクラス名を機械学習プログラムから検索することで、モデル変数を特定する。これにより、モデル変数が効率的かつ高精度に特定される。また、情報処理装置100は、機械学習プログラムの構文解析を行って抽象構文木を生成し、抽象構文木の上でコードの検索や書き換えを行う。これにより、機械学習プログラムの書き方に依存せずに、効率的かつ高精度にコードの検索や書き換えが行われる。
【0096】
また、情報処理装置100は、入力されるデータセットの一部分をテストデータとして分割してスコアを算出するように、機械学習プログラムを書き換える。これにより、テストデータを別途用意しなくてよく、機械学習プログラムに付随して収集されたデータセットの範囲内で機械学習モデルのスコアが算出される。また、情報処理装置100は、機械学習プログラムがpredict関数を呼び出すコードを含む場合、そのコードをコピーして所望の予測データを生成するコードに書き換える。これにより、他の引数が引き継がれて周辺のコードとの整合性が維持される。
【符号の説明】
【0097】
10 情報処理装置
11 記憶部
12 処理部
13 機械学習ライブラリ
14,15 機械学習プログラム
14-1,15-1,15-2,15-3 コード
図1
図2
図3
図4
図5
図6
図7
図8
図9