以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の探索装置の例を説明する図である。探索装置10は、入力データおよび出力データの例を取得して、入力データから出力データに変換するためのプログラムを生成する。探索装置10は、記憶部11および処理部12を有する。
記憶部11は、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。処理部12は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。処理部12はプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る。
記憶部11は、処理部12の処理に用いられるデータを記憶する。例えば、記憶部11は、データに対する複数のデータ変換方法をグループ化するための基準データを記憶する。また、記憶部11は、処理部12により取得された入力データおよび出力データを記憶する。更に、処理部12によりデータ変換方法を用いて入力データから生成される中間データを記憶する。
処理部12は、入力データXおよび出力データYの例を取得する。例えば、入力データXおよび出力データYは、文字列、数値、単位または時刻などの情報を含む。入力データXは、関係データベース(RDB:Relational DataBase)のテーブルの例でもよい。また、出力データYは、変換後のテーブルの例でもよい。
処理部12は、複数のデータ変換方法を複数のグループに分類する。ここで、データ変換方法の一例として、文字列変換、文字列抽出、数値変換、単位変換および時刻変換などがある。文字列変換は、例えば、null置換や表記統一などである。文字列抽出は、例えば、カンマなどの区切り文字で区切られる単語を抽出する処理などである。数値変換は、例えば、数値を四則演算などの計算により変換する処理などである。時刻変換は、例えば、絶対時間を基準時刻に対する相対時間へ変換する処理などである。ただし、データ変換方法の例はこれらに限られない。例えば、データ変換方法は、RDBのテーブルにおけるスキーマ変換(列移動、列削除および列コピーなど)やテーブル結合(補助テーブルとの結合など)でもよい。
例えば、処理部12は、記憶部11に記憶された基準データに基づいて、上記に例示したデータ変換方法の各例を、複数のグループに分類できる。例えば、グループ数は予め記憶部11に設定されてもよいし、処理部12により所定の演算により決定されてもよい。ここで、例えば、探索空間の削減率は、入力データから出力データまでの距離(ホップ数)とデータ変換方法の数(既知)とグループ数との関数で表すことができる。このため、処理部12は、入力データXと出力データYとの間の距離を示す指標値を推定し、当該指標値を用いて、グループ数を決定することが考えられる。例えば、処理部12は、当該指標値を指定したときの探索空間の削減率を示す関数を用いて、探索空間の削減率が比較的小さくなるグループ数を選択することが考えられる。
また、基準データは、グループ数に対して、データ変換方法の組み合わせ毎に予め定められた分類先のグループを示す情報でもよい。この場合、各データ変換方法は、種類別に、分類先のグループが予め定められる。例えば、複数のデータ変換方法それぞれに対して後述する中間データの評価関数が対応付けられる。そして、評価関数に共通性のあるデータ変換方法同士が優先的に同じグループになるように、基準データに予め定められてもよい。この場合、処理部12は、評価関数の共通性に基づいて複数のデータ変換方法を分類すると言える。
あるいは、基準データは、複数のデータ変換方法の間の類似度(または非類似度)を示す類似度情報でもよい。この場合、処理部12は、利用するデータ変換方法の数に基づいてグループ数を決定する。そして、処理部12は、類似度情報を参照して、決定したグループ数のグループを生成する。より具体的には、処理部12は、類似度の高い(非類似度の低い)データ変換方法同士が優先的に同じグループに所属するように、各データ変換方法の分類先のグループを決定してもよい。
処理部12は、複数のグループそれぞれについて、当該グループに属するデータ変換方法を用いて入力データから中間データを生成する。例えば、処理部12は、複数のデータ変換方法を2つのグループに分類したとする。1つ目のグループのグループ名を「グループA」とする。2つ目のグループのグループ名を「グループB」とする。一例として、グループAには、3つのデータ変換方法(第1,第2,第3のデータ変換方法)が属する。また、グループBには、3つのデータ変換方法(第4,第5,第6のデータ変換方法)が属する。
処理部12は、グループAについて、グループAに属するデータ変換方法を用いて入力データXから中間データA11,A12,A13を生成する。すなわち、処理部12は、第1のデータ変換方法を用いて、入力データXから中間データA11を生成する。また、処理部12は、第2のデータ変換方法を用いて、入力データXから中間データA12を生成する。更に、処理部12は、第3のデータ変換方法を用いて、入力データXから中間データA13を生成する。
処理部12は、当該グループに応じた評価関数を用いて中間データを評価することで、当該グループ内でデータ変換方法の組み合わせを探索する。評価関数は、入力データから該当の中間データを介して出力データに至る場合の評価値を与える。評価値は、例えば、距離、数値差、時間差およびステップ数などのコストを示す指標である。評価値が小さいほど、出力データを得るための処理コストが小さい(すなわち、評価が高い)と考えられる。
例えば、文字列変換や文字列抽出に対する評価関数の評価値として、編集距離(レーベンシュタイン距離)が考えられる。数値変換に対する評価関数の評価値として、数値差が考えられる。単位変換に対する評価関数の評価値として、変換前後の数値の商(例えば、変換後の値÷変換前の値)が考えられる。時刻変換に対する評価関数の評価値として、時間差(基準時刻との差など)が考えられる。スキーマ変換やテーブル変換に対する評価関数の評価値として、テーブル編集距離(列操作の所要ステップ数など)が考えられる。
ここで、処理部12は、グループに属するデータ変換方法に応じて、グループ毎の評価関数を予め決定する。データ変換方法には評価関数が対応付けられている。記憶部11は、データ変換方法と評価関数との対応を示す情報を記憶してもよい。あるグループに評価関数が共通するデータ変換方法のみが所属する場合、処理部12は、当該共通する評価関数を当該グループに対応する評価関数と決定する。あるいは、第1の評価関数が対応付けられた第1のデータ変換方法と第2の評価関数が対応付けられた第2のデータ変換方法とを同一グループに分類した場合、処理部12は、第1の評価関数と第2の評価関数とから当該同一グループに応じた評価関数を算出する。例えば、処理部12は、第1の評価関数と第2の評価関数と(あるいは3以上の異なる評価関数に対して各評価関数)の線形結合(重み付き和)を、当該同一グループに対応する評価関数とすることが考えられる。こうして、処理部12は、例えば、グループAに対応する評価関数fAおよびグループBに対応する評価関数fBを決定する。
処理部12は、グループAに応じた評価関数fAを用いて中間データを評価する。例えば、グループAに属するデータ変換方法は、文字列変換や文字列抽出であるとする。この場合、評価関数fAは、該当の中間データの評価値として、編集距離を求める関数である。編集距離は、入力データXと中間データとの第1の編集距離、および、当該中間データと出力データYとの第2の編集距離の和である。
処理部12は、入力データXと中間データA11との編集距離、および、中間データA11と出力データYとの編集距離の和を中間データA11の評価値として求める。同様に、処理部12は、中間データA12の評価値、および、中間データA13の評価値を求める。例えば、これらの評価値のうち、中間データA13に対する評価値が最小であるとする。この場合、処理部12は、入力データXから中間データA13を得るために用いた第3のデータ変換方法を選択する。
そして、処理部12は、第1,第2,第3のデータ変換方法を中間データA13に適用して、それぞれ中間データA14,A15,A16を生成する。処理部12は、入力データXと中間データA14との編集距離、および、中間データA14と出力データYとの編集距離の和を中間データA14の評価値として求める。同様に、処理部12は、中間データA15の評価値、および、中間データA16の評価値を求める。例えば、これらの評価値のうち、中間データA14に対する評価値が最小であるとする。この場合、処理部12は、中間データA13から中間データA14を得るために用いた第1のデータ変換方法を選択する。
このように、処理部12は、グループAに関して、データ変換方法を繰り返し選択することで、グループAに関するデータ変換方法の組み合わせを探索する。選択の繰り返し数の上限は、記憶部11に予め保存される。当該上限を超過しても出力データYを得られない場合、処理部12は、グループAに関するデータ変換方法の組み合わせの探索を終了する。図1の例では、繰り返し数の上限は「2」である。処理部12は、入力データXを起点とした上記2回の探索で出力データYを得られなかったので、中間データA14を選択した後、グループAに関するデータ変換方法の組み合わせの探索を終了する。
一方、処理部12は、グループBについても、入力データXを起点としたデータ変換方法の組み合わせの探索を行う。まず、処理部12は、グループBについて、グループBに属するデータ変換方法を用いて入力データXから中間データB11,B12,B13を生成する。
処理部12は、グループBに応じた評価関数fBを用いて中間データを評価する。例えば、グループBに属するデータ変換方法は、数値変換であるとする。この場合、評価関数fBは、該当の中間データの評価値として、数値差を求める。数値差は、例えば、入力データXに含まれる数値と中間データに含まれる数値との第1の差、および、中間データに含まれる数値と出力データYに含まれる数値との第2の差の和(第1の差+第2の差)である。
処理部12は、評価関数fBを用いて、中間データB11,B12,B13の評価値を求める。例えば、これらの評価値のうち、中間データB12に対する評価値が最小であるとする。この場合、処理部12は、入力データXから中間データB12を得るために用いた第5のデータ変換方法を選択する。
更に、処理部12は、第4,第5,第6のデータ変換方法を中間データB12に適用して、それぞれ中間データB14,B15,B16を生成する。中間データB14,B15,B16の評価関数fBによる評価値に応じて、中間データB12から中間データB16を得るために用いた第6のデータ変換方法を選択する。
そして、処理部12は、入力データを起点とした上記2回の探索で出力データYを得られなかったので、中間データB16を選択した後、グループBに関するデータ変換方法の組み合わせの探索を終了する。
処理部12は、複数のグループそれぞれの探索の結果に基づいて、入力データを出力データに変換することができるデータ変換方法の組み合わせを決定する。
例えば、処理部12は、グループA,Bそれぞれについて、探索を終了すると、グループAに属する中間データA11~A16のうち、評価関数fAによる評価値が最小である中間データA14を選択する。同様に、処理部12は、グループBに属する中間データB11~B16のうち、評価関数fBによる評価値が最小である中間データB16を選択する。
処理部12は、選択された中間データA14,B16のうち、所定の評価値が小さい方を選択して、次段の探索の起点とする。所定の評価値は、例えば、グループA,Bの評価関数fA,fBから計算される評価関数Fを用いて求められる。一例では、評価関数Fは、評価関数fA,fBの線形結合(F=a×fA+b×fB)(a,bは実数の定数で重みを示す)である。
例えば、中間データA14,B16のうち、評価関数Fによる評価値が小さい方は、中間データB16である。この場合、処理部12は、中間データB16を、次段の探索の起点とする。処理部12は、中間データB16までの探索で、入力データXに対する第5のデータ変換方法および第6のデータ変換方法の組み合わせを特定している。中間データB16を基点(次段の探索の起点)とした探索では、既に特定済の組み合わせに続くデータ変換方法を探索することになる。
処理部12は、中間データB16を起点として、グループAについての探索、および、グループBについての探索を、入力データXを起点とした探索と同様の手順で、繰り返し実行する。その過程で、中間データに何れかのデータ変換方法を適用した結果、出力データYが得られた場合、当該データ変換方法が最終のデータ変換方法となる。最終のデータ変換方法が得られるまでに選択されたデータ変換方法の組み合わせが、入力データを出力データに変換することができるデータ変換方法の組み合わせである。
このように、探索装置10によれば、入力データおよび出力データが取得され、複数のデータ変換方法が複数のグループに分類される。複数のグループそれぞれについて、当該グループに属するデータ変換方法を用いて入力データから中間データが作成され、当該グループに応じた評価関数を用いて中間データを評価することで、当該グループ内でデータ変換方法の組み合わせが探索される。そして、複数のグループそれぞれの探索の結果に基づいて、入力データを出力データに変換することができるデータ変換方法の組み合わせが決定される。
これにより、探索時間を短縮できる。すなわち、探索装置10は、探索対象のデータ変換方法をグループに属するデータ変換方法に限定することで、全てのデータ変換方法を対象として探索を行うよりも、探索空間を減少させることができる。
また、全てのデータ変換方法を対象として探索を行う場合、全データ変換方法に対応した評価関数を定義することになるが、データ変換方法の種類が増すほどこのような評価関数を適切に定義することは難しくなる。一方、探索対象のデータ変換方法をグループに属するデータ変換方法に限定することで、評価関数に対応させるデータ変換方法の種類を減らせる。このため、評価関数が単純化して評価関数の精度が向上し、当該グループにおいて適切な経路を選択できる可能性が高まる。その結果、探索経路を縮小させ、探索時間を短縮できる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の探索装置のハードウェア例を示すブロック図である。
CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。なお、CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを含んでもよい。また、探索装置100は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、探索装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、探索装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部104は、CPU101からの命令に従って、探索装置100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
入力信号処理部105は、探索装置100に接続された入力デバイス112から入力信号を取得し、CPU101に出力する。入力デバイス112としては、マウス・タッチパネル・タッチパッド・トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、探索装置100に、複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
通信インタフェース107は、ネットワーク20に接続され、ネットワーク20を介して他のコンピュータと通信を行うインタフェースである。通信インタフェース107は、例えば、スイッチやルータなどの通信装置とケーブルで接続される。
探索装置100は、PBEの機能を提供する。PBEは、ユーザにプログラミングを課さずに、プログラムを生成可能にする技術である。探索装置100は、PBEの機能により、ユーザが与えた、入力/出力条件を満たすプログラムを生成する。例えば、探索装置100は、少数の目的の加工例を基に、データ整形を自動化するためのプログラムを生成する。次に、プログラム生成の1つの方法(探索装置100に対する比較例)を説明する。
図3は、プログラム生成の例を示す図である。
加工例に対し、プログラムを生成する方法として、次の方法が考えられる。まず、加工例が、プログラム生成を行う装置(生成装置と呼ぶ)に入力される。加工例は、加工前データ31および加工後データ32を含む。
例えば、加工前データ31は、RDBのテーブルであり、ID(IDentifier)、日時および乗車駅の列を含む。ここで、IDは、ユーザの識別情報である。日時は、当該ユーザが電車に乗った日時(月日時分)である。乗車駅は、当該ユーザが電車に乗った駅である。乗車駅を未取得の場合、乗車駅の列には「0000」が設定される。
また、加工後データ32は、RDBのテーブルであり、日付、駅名、性別および年齢の列を含む。ここで、日付は、乗車日(月日)である。駅名は、乗車駅である。性別は、ユーザの性別である。年齢は、ユーザの年齢である。
なお、加工前データ31および加工後データ32は、RDB以外のデータでもよい(例えば、CSV(Comma-Separated Values)やキーバリューなどの他の形式のデータでもよい)。
生成装置は、例えば、A*アルゴリズム(または、A*探索アルゴリズム)により、加工前データを加工後データに変換するためのデータ変換方法(単に、変換方法と言うことがある)の組み合わせを決定する。A*アルゴリズムは、グラフ探索を効率化するアルゴリズムの1つである。
具体的には、生成装置は、データをノード、データに対する変換方法をエッジとしたグラフを生成する。生成装置には、複数の変換方法が予め登録されている。生成装置は、起点となる加工前データ31に、複数の変換方法それぞれを適用して、各変換方法に対応する中間データを生成する。このとき、変換方法の数がT(Tは2以上の整数)個であれば、T個の中間データが生成される。例えば、変換方法a,b,cの3つの変換方法がある場合、加工前データに対して、変換方法aを適用した中間データ、変換方法bを適用した中間データ、変換方法cを適用した中間データの3つの中間データが生成される。すなわち、加工前データ31のノード(加工前ノード)と3つの中間データのノード(中間ノード)それぞれとを、各変換方法に対応するエッジで接続したグラフが生成される。
生成装置は、生成した各中間データそれぞれを所定の評価関数により評価することで、加工前データ31に対して適用する変換方法を選択する。評価関数は、中間データに対する評価値を与える。評価値は、例えば、加工前データ31から、該当の中間データを経由して、加工後データ32に到達するまでに要する推定距離または推定コストである。変換方法a,b,cそれぞれに対応する3つの中間データのうち、変換方法cに対応する中間データの評価値が最小であるとすると、生成装置は、変換方法cに対応する中間データ(ノード)を選択する。生成装置は、選択した中間データに対して、更に変換方法a,b,cそれぞれを適用して、3つの中間データを生成し、当該3つの中間データを評価関数により評価し、今回生成した3つの中間データの中から中間データを選択する。
生成装置は、この手順を繰り返す。加工後データ32が得られると、手順は終了となり、加工前ノードから加工後データ32に対応するノード(加工後ノード)に到達するまでの経路を表すグラフ33が得られる。すると、生成装置は、グラフ33において、加工前ノードから加工後ノードに辿り着いた経路に属するエッジの組み合わせに対応する変換方法の組み合わせを取得する。生成装置は、当該変換方法の組み合わせに対応するプログラム34を生成する。
例えば、プログラム34は、「補助データ結合」、「null置換」、「列分割」、「列削除」および「列移動」の変換方法を含む。補助データ結合は、加工前データ31と、ID、ユーザの性別および年齢の関連を示す補助データとの結合である。null置換は、加工前データ31の「0000」をnullに置換する処理である。列分割は、加工前データ31の日時の列の日付(月日)および時間(時分)への分割である。列削除は、IDおよび時間の列の削除である。列移動は、加工後データ32の列の並びとなるよう列を移動する処理である。
生成装置は、その後、加工前データ35が入力されると、プログラム34を用いて、加工前データ35から加工後データ36を生成する。
ここで、ノード間の距離について説明する。
図4は、距離の例を示す図である。
開始ノード41は、加工前データ31に対応するノードである。ノード42は、中間データに対応するノード(中間ノード)である。ここで、ノード42または中間データの識別子をiとする。識別子がiのノード(中間データ)を、ノードi(中間データi)と言うことがある。終了ノード43は、加工後データ32に対応するノードである。
このとき、ノードi(すなわち、中間データi)に対する評価関数は「k(i)+h(i)」と表される。k(i)は、開始ノードからノードiまでの推定最短距離である。h(i)は、ノードiから終了ノードまでの推定距離である。例えば、k(i)+h(i)が最小になるノードを選択することで、探索を効率化し得る。
しかし、図3で例示した探索方法では、使用する変換方法の数Tが増すほど、変換方法の組み合わせの数が増し、探索の処理コストが増す。具体的には、探索空間は、Tのべき(累乗)で増大する。また、探索空間が大きいと、評価関数の値に従って探索しても、膨大な手戻り処理が発生する可能性もある。このため、探索時間が長引く可能性がある。そこで、探索装置100は、探索時間を短縮する機能を提供する。
図5は、探索装置の機能例を示すブロック図である。
探索装置100は、パラメータ記憶部120、グルーピング定義記憶部130、データ記憶部140、プログラム記憶部150、UI(User Interface)部160および制御部170を有する。パラメータ記憶部120、グルーピング定義記憶部130、データ記憶部140およびプログラム記憶部150は、例えば、RAM102またはHDD103に確保した記憶領域を用いて実装される。UI部160および制御部170は、例えば、プログラムを用いて実装される。
パラメータ記憶部120は、探索処理における所定のパラメータを記憶する。パラメータは、過去の探索処理の結果に基づいて計算される値αである。パラメータαは、変換方法のグループ数を求める際に用いられる。
グルーピング定義記憶部130は、複数の変換方法をグルーピングするための基準となるグループ分けパターンテーブルを記憶する。グループ分けパターンテーブルは、変換方法のグループ分けのパターンを示す情報である。
データ記憶部140は、ユーザにより入力されたデータの加工例を記憶する。加工例は、加工前データと加工後データとを含む。加工前データは、入力データの例である。加工後データは、出力データの例である。データ記憶部140は、制御部170により加工前データに基づいて生成される中間データを記憶する。
プログラム記憶部150は、制御部170により生成された変換プログラムを記憶する。プログラム記憶部150に記憶された変換プログラムは、他の加工前データに対して、当該他の加工前データを変換し、他の加工後データを生成するために用いられる。
UI部160は、ユーザによる加工前データおよび加工後データの入力を受け付け、データ記憶部140に格納する。例えば、UI部160は、入力デバイス112を用いてユーザにより入力された加工前データおよび加工後データの入力を受け付けてもよい。また、UI部160は、ネットワーク20を介して、他のコンピュータにより送信された加工前データおよび加工後データを受信してもよい。
UI部160は、加工前データおよび変換プログラムの指定の入力を受け付け、指定された変換プログラムの探索装置100による実行開始/終了や、変換プログラムにより加工前データから生成された加工後データのディスプレイ111による表示を行う。
制御部170は、探索装置100におけるPBEを制御する。制御部170は、パラメータ算出部171、グルーピング処理部172、探索処理部173およびプログラム生成部174を有する。
パラメータ算出部171は、パラメータ記憶部120に記憶されたパラメータαの実績値の履歴から、αの代表値を取得し、グルーピング処理部172に通知する。代表値としては、例えば、直近のM(Mは2以上の整数)件のパラメータαの平均値や中間値などが考えられる。
グルーピング処理部172は、パラメータ算出部171により通知されたパラメータαに基づいて、変換方法のグループ数を計算し、複数の変換方法を複数のグループに分類する。
探索処理部173は、グルーピング処理部172により分類された複数のグループそれぞれについて、当該グループに属する変換方法を用い加工前データから中間データを生成する。探索処理部173は、当該グループの分類結果を用いて、加工前データを加工後データに変換できる変換方法の組み合わせを特定する。
プログラム生成部174は、探索処理部173による変換方法の組み合わせの特定結果に基づいて、加工前データを加工後データに変換できる変換プログラムを生成する。プログラム生成部174は、生成したプログラムをプログラム記憶部150に格納する。
図6は、探索装置による探索の例を示す図である。
グルーピング処理部172は、例えば、複数の変換方法を、グループG1,G2,G3の3つに分類したとする。探索処理部173は、A*アルゴリズムによるグラフの経路探索をグループ毎に行う。このとき、探索処理部173は、評価関数として、グループ毎のローカル評価関数を用いる。ローカル評価関数f1は、グループG1に対する評価関数である。ローカル評価関数f2は、グループG2に対する評価関数である。ローカル評価関数f3は、グループG3に対する評価関数である。
ここで、加工前データに対応するノードを加工前ノード、加工後データに対応するノードを加工後ノード、中間データに対応するノードを中間ノードとそれぞれ呼ぶことにする。
例えば、探索処理部173は、加工前ノードを起点として、グループG1に属する変換方法により、ローカル評価関数f1を用いて、経路の探索を行う。経路に含まれるエッジの組み合わせは、変換方法の組み合わせに対応する。また、探索処理部173は、加工前ノードを起点として、グループG2に属する変換方法により、ローカル評価関数f2を用いて、経路の探索を行う。更に、探索処理部173は、加工前ノードを起点として、グループG3に属する変換方法により、ローカル評価関数f3を用いて、経路の探索を行う。
グループ毎に所定回数の探索を行った結果、何れのグループでも加工後データが出現しなかった場合、探索処理部173は、グループ毎の今回の探索で生成された中間ノードのうちローカル評価値が最小の中間ノードを、最終ノードとしてグループ毎に取得する。探索処理部173は、グループ毎の最終ノードを、グローバル評価関数Fにより評価する。グローバル評価関数Fは、加工前ノードから、該当の中間ノードを経由して加工後ノードに至るまでの推定距離を評価値として与える関数である。グローバル評価関数Fは、複数の変換方法の全てに対応する評価関数である点が、ローカル評価関数f1,f2,f3と異なる。例えば、ノードiに対するグローバル評価関数F(i)は、グループの識別番号をn(nは0以上の整数)として、式(1)で表される。
ここで、jは、グループの識別番号の最大値である(グループ数はj+1)。fnは、ローカル評価関数である。λnは、グループ毎のローカル評価値の重みである。すなわち、グローバル評価関数Fは、グループ毎の評価値の重み付き和として表すことができる(各ローカル評価関数の重みは予め設定される)。例えば、探索処理部173は、グループ毎の最終ノードのうち、グローバル評価値Fが最小の最終ノードigを選択し、当該最終ノードigを次段の探索の起点のノードとする。
探索処理部173は、上記の手順を繰り返し実行し、加工後データが得られると、探索を終了する。
ここで、探索処理部173の探索に用いられるグループの数は、パラメータ算出部171およびグルーピング処理部172により予め決定される。
図7は、パラメータの例を示す図である。
グラフ50は、加工前データから加工後データまで到達したときの探索装置100による探索経路を例示している。
パラメータ算出部171は、探索空間削減率R(g)を最小にするグループ数goptを求め、当該グループ数goptにより変換方法をグループ分けする。探索空間削減率R(g)は、式(2)で表される。
ここで、gはグループ数である。tは変換方法の数である。dは加工前ノードから加工後ノードまでのホップ数である。
図8は、探索空間削減率のグラフを示す図である。
一例として、t=100、d=20のときの探索空間削減率R(g)のグラフ60を示す。グルーピング処理部172は、例えば、ニュートン法によりR(g)の極小値を算出し、そのときのg=goptを算出して、グループ数とする。あるいは、グルーピング処理部172は、1<g<tを満たす全てのgに関して、R(g)を算出し、算出したR(g)のうちの最小値を与えるgを、goptとしてもよい。
図8の例では、gopt=5である。R(g)を最小にするグループ数goptを選択することで、以下に示す探索処理において探索空間を大幅に削減することができる。
なお、tは予め用意された変換方法の数なので既知の値である。ホップ数dは今回の探索では未知なので、推定値を用いる。具体的には、ホップ数dの推定値destは、加工前ノードと加工後ノードとの間の推定距離に比例すると考えられる。このため、グルーピング処理部172は、以下の式(3)によりdestを求める。
ここで、i0は、加工前ノードを示す。前述のように、パラメータαは、直近のM件の探索におけるホップ数dの実績値drealに対する代表値(例えば、平均値や中間値など)である。探索処理部173は、今回の探索の結果、実績値drealを得ると、α=dreal/h(i0)(今回のαの値)を、パラメータ記憶部120に格納する。
図9は、パラメータ情報の例を示す図である。
パラメータ情報121は、直近のM件の探索における加工前ノードから加工後ノードに至るホップ数の実績値drealに対して計算されたパラメータαの値(α=α1,α2,α3,・・・,αM)である。αの値は、新たな加工例に対して探索が行われると、当該探索結果に基づいて計算され、パラメータ情報121に追加される。新たにαの値が追加されると、パラメータ情報121から最古のαの値が削除されてもよい。
図10は、グループ分けパターンテーブルの例を示す図である。グループ分けパターンテーブル131は、グループ数goptに対する各変換方法のグループ分けのパターンを示す。グループ分けパターンテーブル131は、変換方法、gopt=1、gopt=2、gopt=3、gopt=4、・・・の列を含む。
変換方法の列には、変換方法の識別名が登録される。gopt=1の列には、グループ数を1とするときに、各変換方法が属するグループのグループ番号が登録される。gopt=2の列には、グループ数を2とするときに、各変換方法が属するグループのグループ番号が登録される。gopt=3以降の列についても同様である。
例えば、グループ分けパターンテーブル131には、変換方法が「文字列変換」、gopt=1の場合にグループ番号「1」、gopt=2の場合にグループ番号「1」、・・・というレコードが登録されている。このレコードは、グループ数「1」の場合、変換方法「文字列変換」がグループ番号「1」のグループに所属することを示す。また、グループ数「2」の場合、変換方法「文字列変換」がグループ番号「1」のグループに所属することを示す。
また、グループ分けパターンテーブル131には、変換方法が「スキーマ変換」、gopt=1の場合にグループ番号「1」、gopt=2の場合にグループ番号「2」、・・・というレコードが登録されている。このレコードは、グループ数「1」の場合、変換方法「スキーマ変換」がグループ番号「1」のグループに所属することを示す。また、グループ数「2」の場合、変換方法「スキーマ変換」がグループ番号「2」のグループに所属することを示す。
このように、グループ分けパターンテーブル131には、各変換方法に対し、グループ数goptに応じたグループ番号が登録される。グループ分けパターンテーブル131には、評価関数が共通する変換方法を同じグループに優先的に分類するように予めグループ分けパターンが登録される。すなわち、グループに対応するローカル評価関数を単純化することで、当該ローカル評価関数による評価の精度を向上し、探索時間を短縮できる。
ただし、グループ分けパターンテーブル131によるグループ分けでは、評価関数が相違する第1のデータ変換方法と第2のデータ変換方法とが同じグループに属することもある。この場合、探索処理部173は、第1のデータ変換方法に対応する第1の評価関数と、第2のデータ変換方法に対応する第2の評価関数とに基づいて当該グループに対応するローカル評価関数が算出される。例えば、第1の評価関数と第2の評価関数との重み付き和を、当該グループのローカル評価関数とする。3以上の評価関数に対しても同様に、重み付き和によってローカル評価関数が算出される。
次に、探索装置100の処理手順について説明する。
図11は、プログラム生成の手順例を示すフローチャートである。
(S10)UI部160は、ユーザによる加工例の入力を受け付ける。加工例は、加工前データおよび加工後データを含む。
(S11)パラメータ算出部171は、パラメータ記憶部120に記憶されたパラメータ情報121を参照して、過去のα値の代表値を算出する。
(S12)パラメータ算出部171は、式(3)により、d推定値(dest)を算出する。
(S13)グルーピング処理部172は、g最適値(gopt)を算出する。具体的には、グルーピング処理部172は、式(2)に、tおよびd=destを代入して、R(g)を求め、R(g)が最小値をとるときのg=goptを求める。
(S14)グルーピング処理部172は、goptを基に変換方法をグルーピングする。グルーピング処理部172は、グルーピング定義記憶部130に記憶されたグループ分けパターンテーブル131を参照して、goptの値に応じた各変換方法の分類先のグループを特定し、各変換方法を特定したグループに分類する。
(S15)探索処理部173は、グラフ探索を行う。グラフ探索の詳細は後述される。
(S16)探索処理部173は、ステップS15の結果から、d実績値(dreal)を算出する。具体的には、探索処理部173は、加工前ノードから加工後ノードまでのホップ数(エッジ数)をカウントし、drealとする。
(S17)探索処理部173は、α=dreal/h(i0)をパラメータ情報121に保存する。このとき、探索処理部173は、パラメータ情報121から最古のα値を削除してよい。
(S18)プログラム生成部174は、ステップS15のグラフ探索の結果に基づいて、加工前データを加工後データに変換するプログラムを生成する。
(S19)プログラム生成部174は、生成したプログラムを出力する。プログラム生成部174は、生成したプログラムをプログラム記憶部150に格納する。プログラム記憶部150に記憶されたプログラムは、他の加工前データの変換に用いることができる。そして、プログラム生成が終了する。
ステップS11~S13で示されるように、グルーピング処理部172は、加工前データ(入力データ)と加工後データ(出力データ)との間の距離を示す指標値(dest)を用いてグループ数goptを決定する。具体的には、パラメータ算出部171は、他の加工前データ(他の入力データ)から他の加工後データ(他の出力データ)への変換に使用されたデータ変換方法の数と、他の加工前データと他の加工後データとの間の距離を示す他の指標値(過去の実績値)と、の間の関係を示す係数αを算出する。グルーピング処理部172は、加工前データと加工後データとの間の距離を示す指標値と当該係数とを用いてグループ数goptを決定する。グループ数goptは、関数R(g)を最小にするグループ数として求められる。
図12は、グラフ探索の手順例を示すフローチャートである。グラフ探索は、ステップS15で実行される。
(S20)探索処理部173は、探索ホップ数Hを0に設定する。
(S21)探索処理部173は、グループローカルの1ホップの探索をグループ毎に実行する。探索処理部173は、Hに1を加算する。グループローカルの探索に用いられる変換方法は、該当のグループに属する変換方法である。該当のグループに属さない変換方法は、グループローカルの探索では用いられない。あるグループにn(nは2以上の整数)個の変換方法が属する場合、現ノードに対応するデータに各変換方法を適用したn個の中間データが、当該グループにおいて生成される。また、探索処理部173は、n個の中間データを当該グループのローカル評価関数を用いて評価し、評価に応じた変換方法を選択する。
なお、ステップS14におけるグルーピングの結果、評価関数の異なる変換方法が同一グループに分類されることもある。この場合、探索処理部173は、各変換方法の評価関数の重み付き和を当該グループのローカル評価関数とする(重みは予め設定される)。
(S22)探索処理部173は、グループローカルの起点ノードからのホップ数Hを記録する。
(S23)探索処理部173は、変換方法により、加工後データが出現したか否かを判定する。加工後データが出現した場合、グラフ探索が終了する。加工後ノードが出現しない場合、ステップS24に処理が進む。
(S24)探索処理部173は、ホップ数Hが閾値Hmax
より大きいか否か(H>Hmaxであるか否か)を判定する。H>Hmaxの場合、ステップS25に処理が進む。H≦Hmaxの場合、ステップS21に処理が進む。
(S25)探索処理部173は、ローカル評価値f(il)が最小の中間ノードilを、グループの最終ノードとして、グループ毎に選択する。
(S26)探索処理部173は、各グループのノードilの中から、グローバル評価値F(ig)が最小のノードigを選択し、ノードigを次段の探索の起点ノードとする。そして、ステップS20に処理が進む。
このように、探索処理部173は、グループ単位に、当該グループに属する変換方法を用いて中間データを生成し、当該グループに応じたローカル評価関数を用いて、中間データを評価することで、変換方法の組み合わせを探索する。
このとき、探索処理部173は、複数のグループの何れの探索によっても加工前データ(入力データ)から加工後データ(出力データ)に到達しない場合もある。この場合、探索処理部173は、複数のグループそれぞれについて探索によって生成された中間データの中から代表中間データを抽出する。そして、探索処理部173は、複数のグループそれぞれの評価関数(ローカル評価関数)とは異なる共通評価関数(グローバル評価関数)を用いて、複数のグループそれぞれの代表中間データを評価して、1つのグループの代表中間データを選択する。探索処理部173は、加工前データに代えて、選択した代表中間データを基点(すなわち、次段の探索の起点)として、複数のグループそれぞれの探索を再度実行する。
ここで、複数のグループそれぞれの代表中間データは、グループ内で生成された中間データのうち当該グループに応じたローカル評価関数による評価が最も高い中間データである。本例の場合、「評価が最も高い」とは、距離を示す評価値が最小であることに相当する。こうして、グローバル評価関数による評価対象を絞り込むことができ、グローバル評価関数による評価を効率的に実行できる。
図13は、グラフ探索の手順の具体例を示す図である。
図13の例では、図12のステップS20~S26の1サイクルの手順を示す。ここで、各変換方法は、N個のグループG1,G2,・・・,GNに分類されている。
探索処理部173は、グループローカルの探索を各グループで実行する(ステップST1)。グループ毎の探索は、加工後データが出現するか、または、ホップ数H>閾値Hmaxになるまで繰り返し実行され、加工後データが出現しないまま、H>Hmaxになると終了される。
グループG1,G2,・・・,GNのそれぞれで、加工後データが出現しないまま、H>Hmaxになったとする。すると、探索処理部173は、グループの最終ノードとして、ローカル評価値f(il)が最小の中間ノードilをグループ毎に選択する(ステップST2)。図13では、グループG1,G2,・・・,GNのそれぞれの中間ノードのうち、最終ノードとして選択された中間ノードを網掛けで示している。各グループにおいて最終ノードが選択されるので、N個の最終ノードが存在することになる。
探索処理部173は、最終ノードilの中からグローバル評価値F(ig)が最小のノードigを選択し、次段の探索の起点ノードとする(ステップST3)。
探索処理部173は、ステップST1の探索において加工後データが出現するまで、ステップST1~ST3を繰り返し行い、加工後データに一致するノードがステップST1で出現したら探索を終了する(ステップST4)。
このように、探索装置100は、複数の変換方法を複数のグループに分類して、グループ毎に探索を行う。こうして、あるグループにおける探索対象の変換方法を当該グループに属する変換方法に限定することで、全てのデータ変換方法を対象として探索を行うよりも、探索空間を減少させることができる。これにより、探索時間を短縮することができる。特に、式(2)により、探索空間削減率が最小になるグループ数を選択することで、探索空間を大幅に減少させることができる。
また、全ての変換方法を対象として探索を行う場合、全変換方法に対応した評価関数を定義することになるが、変換方法の種類が増すほど、評価関数を適切に定義することは難しくなる。一方、探索対象の変換方法をグループに属する変換方法に限定することで、評価関数に対応させる変換方法の種類を減らせる。このため、評価関数が単純化して評価関数の精度が向上し、当該グループにおいて適切な経路を選択できる可能性が高まる。その結果、探索経路を縮小させ、探索時間を短縮することができる。
なお、上記の説明では、図10のグループ分けパターンテーブル131に基づいて、グループ数goptに応じたグループ分けを行うものとしたが、他の方法も考えられる。例えば、グルーピング処理部172は、2つの変換方法の非類似度(または類似度)に基づいて、グループ分けを行ってもよい。その場合、次のような非類似度テーブルを用いることが考えられる。
図14は、非類似度テーブルの例を示す図である。
非類似度テーブル132は、グルーピング定義記憶部130に予め格納される。非類似度テーブル132には、2つの変換方法の組毎に、当該2つの変換方法の非類似度が登録される。非類似度の値が大きいほど非類似である度合いが高い。すなわち、非類似度の値が小さいほど類似である度合いが高い。
例えば、文字列抽出および文字列変換の組に対する非類似度は「10」であり、相対的に非類似度は低い。すなわち、文字列抽出および文字列変換の組は、両者が比較的類似する組み合わせであると言える。一方、文字列変換およびテーブル結合の組に対する非類似度は「150」であり、相対的に非類似度は高い。すなわち、文字列変換およびテーブル結合の組は、両者が比較的類似していない組み合わせであると言える。
前述のように、非類似度の値が小さいほど類似である度合いが高いので、非類似度テーブル132は、変換方法の間の類似度を表す情報であるとも言える。
図15は、非類似度テーブルに基づくグルーピングの例を示す図である。
グルーピング処理部172は、非類似度テーブル132に基づいて、階層的クラスタリングを実行することで、求めたグループ数goptで分割される変換方法のグループを求める。グルーピング処理部172は、グルーピング定義記憶部130に基づいて、類似する変換方法から順にグルーピングして、グループ数goptのグループに分類する。このような階層的クラスタリングの方法として、例えば、ウォード法(Ward method)を用いることができる。例えば、グループ数gopt=3の場合、グルーピング処理部172は、文字列変換、文字列抽出、数値変換および単位変換をクラスタC1に、時刻変換をクラスタC2に、スキーマ変換およびテーブル結合をクラスタC3に、それぞれ分類する。クラスタC1,C2,C3それぞれは1つのグループに対応する。
このように、図11のステップS14では、グルーピング処理部172は、複数の変換方法に含まれる変換方法と他の変換方法との類似度(または非類似度)に基づいて、複数のデータ変換方法を分類してもよい。
次に、ローカル評価関数によるローカル評価値や、グローバル評価関数によるグローバル評価値の計算例を説明する。
図16は、加工前データおよび加工後データの例を示す図である。
図16(A)は、加工前データ141を示す。加工前データ141は、RDBのテーブルであり、Item、PriceおよびQuantityの列を含む。Itemは、品目の名称である。Priceは、品目の単価である。Quantityは、品目の数量である。
例えば、加工前データ141は、Item「apple(China)」、Price「100」、Quantity「50」を示すレコードを含む。また、加工前データ141は、Item「orange Brazil」、Price「200」、Quantity「100」を示すレコードを含む。
図16(B)は、加工後データ142を示す。加工後データ142は、RDBのテーブルであり、Item、RegionおよびSale(incl.tax)の列を含む(「incl.」は、includingの略)。Itemは、品目の名称である。Regionは、品目の産地である。Sale(incl.tax)は、品目の数量分の価格(消費税込みの価格)である。
例えば、加工後データ142は、Item「apple」、Region「China」、Sale(incl.tax)「5400」を示すレコードを含む。また、加工後データ142は、Item「orange」、Region「Brazil」、Sale(incl.tax)「21600」を示すレコードを含む。
ここで、以下の説明では異なる2つのグループG1,G2に分類される複数の変換方法を考える。
グループG1に分類される変換方法の一例として、以下の文字列抽出を考える。
第1には、P(Pは整数)番目の区切り文字(スペース、タブまたはカンマなど)で区切られる単語を抽出する方法である。例えば、P=1(区切り文字で区切られる最初の単語を抽出)のとき、探索処理部173は、データ「made in Japan」から「in」を抽出し、新たな列に追加する。
第2には、P番目の非アルファベットで始まる単語を抽出する方法である。例えば、P=1(非アルファベットで始まる最初の単語を抽出)のとき、探索処理部173は、データ「Sugar(100g)」から「(100g)」を抽出し、新たな列に追加する。
グループG2に分類される変換方法の一例として、和による数値変換、および、積による数値変換を考える。例えば、和による数値変換では、数値「100」と数値「200」とがある場合に、その和「300」を計算し、新たな列に追加する。例えば、積による数値変換では、数値「100」と数値「200」とがある場合に、その積「20000」を計算し、新たな列に追加する。
ただし、文字列抽出として、P番目の数値列を抽出する方法や、P番目の大文字のアルファベットで始まる単語を抽出する方法なども考えられる。前者では。例えば、P=1(最初の数値列を抽出)のとき、データ「Sugar(100g)」から「100」を抽出し、新たな列に追加する。後者では、例えば、P=1(大文字のアルファベットで始まる最初の単語を抽出)のとき、データ「made in Japan」から「Japan」を抽出し、新たな列に追加する。また、数値変換として、差や商などによる数値変換も考えられる。
次に、グループG1,G2それぞれの中間データの例およびローカル評価値の計算例を説明する。なお、テーブルに含まれる各行について、上側から下側へ向かって、順に、1,2,・・・番目の行とする。また、テーブルに含まれる各列について、左端の列から右へ向かって、順に、1,2,・・・番目の列とする。更に、Hmax=1とする。まず、グループG1の探索で生成される中間データを説明する。
図17は、中間データの例(その1)を示す図である。
図17(A)は、中間データA1を示す。中間データA1は、加工前データ141の1番目の列に関して、区切り文字で区切られる最初の単語を抽出して生成される。ここで、「最初」は、該当列に設定されている文字列を左端から順に1文字ずつ走査していったときの最初であることを示す。
1行目のレコードでは、1番目の列に設定された文字列「apple(China)」は区切り文字を含まない。このため、探索処理部173は、当該レコードに関して単語を抽出しない。
2行目のレコードでは、1番目の列に設定された文字列「orange Brazil」は区切り文字“ ”(スペース)を含む。このため、探索処理部173は、当該区切り文字で区切られる最初の単語“Brazil”を抽出する。
探索処理部173は、加工前データ141の複製に新たな列を追加し、抽出した単語を設定する。例えば、探索処理部173は、「apple(China)」に対して単語を抽出しなかったので、1行目のレコードについて、新たな列には何も設定しない。また、探索処理部173は、「orange Brazil」に対して単語「Brazil」を抽出したので、2行目のレコードについて、新たな列に「Brazil」を設定する。こうして、探索処理部173は、加工前データ141から中間データA1を生成する。探索処理部173は、中間データA1をデータ記憶部140に格納する。
図17(B)は、中間データA2を示す。中間データA2は、加工前データ141の1番目の列に関して、非アルファベットで始まる最初の単語を抽出して生成される。
1行目のレコードでは、1番目の列に設定された文字列「apple(China)」の非アルファベットで始まる最初の単語は、「(China)」である。このため、探索処理部173は、「(China)」を抽出する。
2行目のレコードでは、1番目の列に設定された文字列「orange Brazil」の非アルファベットで始まる最初の単語は、「Brazil」である。このため、探索処理部173は、「Brazil」を抽出する。
探索処理部173は、加工前データ141の複製に新たな列を追加し、抽出した単語を設定する。例えば、探索処理部173は、1行目のレコードについて、新たな列に単語「(China)」を設定する。また、探索処理部173は、2行目のレコードについて、新たな列に単語「Brazil」を設定する。こうして、探索処理部173は、加工前データ141から中間データA2を生成する。探索処理部173は、中間データA2をデータ記憶部140に格納する。
ここで、探索処理部173は、グループG1に対するローカル評価関数f1を用いて、中間データ毎のローカル評価値を計算する。ここでは、簡単のために、加工前データ141の直後の中間データA1,A2に対するローカル評価値の計算方法を例示する。この場合、文字列抽出を1回行っただけなので、加工前データ141から中間データA1,A2それぞれに対する編集距離を無視してよい(ただし、加工前データ141から中間データA1,A2それぞれに対する編集距離を考慮してもよい)。
まず、探索処理部173は、中間データのセルを1つ選択する。セルは、レコードにおける1つのデータ項目(中間データA1の例では、「apple(China)」、「100」、「50」など)である。
探索処理部173は、加工後データの同じ行の全セルとのL1=編集距離/max(中間データの文字列長,加工後データの文字列長)を計算する。ここで、max演算は、括弧内の数値のうち、最大の値を選択する演算である。探索処理部173は、当該L1の最小値を、当該セルの距離評価値とする。
探索処理部173は、セル毎に距離評価値を計算し、該当の中間データの全セルの距離評価値の平均を計算する。すなわち、探索処理部173は、全セルの距離評価値の和をセル数で割る。
次に、中間データA1に対するローカル評価値f11の計算例を説明する。
図18は、ローカル評価値の計算例(その1)を示す図である。
探索処理部173は、中間データA1の1行目の1つ目のセル(文字列「apple(China)」が設定されたセル)を選択する。探索処理部173は、当該文字列と加工後データ142の同じ行の「apple」との編集距離を、両者の差分である文字列部分「(China)」の文字数“7”として求める。また、max(中間データの文字列長,加工後データの文字列長)=max(12,5)=12である。したがって、中間データA1の1つ目のセルについて、L1=7/12である。
同様に、中間データA1の1行目の1つ目のセルおよび加工後データ142の2つ目のセル(「China」が設定されたセル)について、L1=7/12である。中間データA1の1つ目のセルおよび加工後データ142の3つ目のセル(「5400」が設定されたセル)について、L1=12/12である。したがって、中間データA1の1つ目のセルについての距離評価値は、{7/12、7/12、12/12}のうちの最小値である7/12である。
探索処理部173は、1つ目のセルと同様にして、中間データA1の1行目の2つ目以降のセルについても距離評価値を計算する。2つ目のセル(設定なしのセル)の距離評価値は4/4である。3つ目のセル(数値「100」が設定された1行目のセル)の距離評価値は2/4である。4つ目のセル(数値「50」が設定されたセル)の距離評価値は2/4である。
次に、探索処理部173は、中間データA1の2行目の各セルについても距離評価値を計算する。2行目の1つ目のセル(文字列「orange Brazil」が設定されたセル)の距離評価値は7/13である。2行目の2つ目のセル(文字列「Brazil」が設置されたセル)の距離評価値は0である。2行目の3つ目のセル(数値「200」が設定されたセル)の距離評価値は2/5である。2行目の4つ目のセル(数値「100」が設定された2行目のセル)の距離評価値は2/5である。
この場合、中間データA1の全セルの距離評価値の和は、7/12+7/13+4/4+0+2/4+2/5+2/4+2/5=約3.92である。したがって、中間データA1のローカル評価値f11は、約3.92/8=約0.49である。
次に、中間データA2に対するローカル評価値f12の計算例を説明する。
図19は、ローカル評価値の計算例(その2)を示す図である。
探索処理部173は、中間データA2についても、図18で説明した手順により、各セルの距離評価値を計算する。中間データA2の1行目のセルについて、各セルの距離評価値は次の通りである。1つ目のセルの距離評価値は7/12である。2つ目のセルの距離評価値は2/7である。3つ目のセルの距離評価値は2/4である。4つ目のセルの距離評価値は2/4である。
中間データA2の2行目のセルについて、各セルの距離評価値は次の通りである。1つ目のセルの距離評価値は7/13である。2つ目のセルの距離評価値は0である。3つ目のセルの距離評価値は2/5である。4つ目のセルの距離評価値は2/5である。
この場合、中間データA2の全セルの距離評価値の和は、7/12+7/13+2/7+0+2/4+2/5+2/4+2/5=約3.21である。したがって、中間データA2のローカル評価値f12は、約3.21/8=約0.40である。
次に、グループG2の探索で生成される中間データを説明する。
図20は、中間データの例(その2)を示す図である。
図20(A)は、中間データB1を示す。中間データB1は、加工前データ141の2,3番目の列に対して、積を計算することで生成される。
1行目について、探索処理部173は、数値「100」と数値「50」との積「5000」を計算する。2行目について、探索処理部173は、数値「200」と数値「100」との積「20000」を計算する。
探索処理部173は、計算された数値「5000」(1行目)および数値「20000」(2行目)を、新たな列に設定する。こうして、探索処理部173は、加工前データ141から中間データB1を生成する。探索処理部173は、中間データB1をデータ記憶部140に格納する。
図20(B)は、中間データB2を示す。中間データB2は、加工前データ141の2,3番目の列に対して、和を計算することで生成される。
1行目について、探索処理部173は、数値「100」と数値「50」との和「150」を計算する。2行目について、探索処理部173は、数値「200」と数値「100」との和「300」を計算する。
探索処理部173は、計算された数値「150」(1行目)および数値「300」(2行目)を、新たな列に設定する。こうして、探索処理部173は、加工前データ141から中間データB2を生成する。探索処理部173は、中間データB2をデータ記憶部140に格納する。
ここで、探索処理部173は、グループG2に対するローカル評価関数f2を用いて、中間データ毎のローカル評価値を計算する。ここでは、簡単のために、加工前データ141の直後の中間データB1,B2に対するローカル評価値の計算方法を例示する。この場合、数値変換を1回行っただけなので、加工前データ141から中間データB1,B2それぞれに対する数値差を無視してよい(ただし、加工前データ141から中間データB1,B2それぞれに対する数値差を考慮してもよい)。
ここで、数値変換における数値差の計算については、数値セル(数値が設定されたセル)のみを対象とする。まず、探索処理部173は、中間データの数値セルの中からセルを1つ選択する。
探索処理部173は、加工後データの同じ行の全数値セルとの間でL2=abs(数値差)/max(abs(中間データの数値),abs(加工後データの数値))を計算する。abs演算は、括弧内の数値の絶対値を取る演算である。探索処理部173は、当該L2の最小値を、当該セルの距離評価値とする。
探索処理部173は、セル毎に距離評価値を計算し、該当の中間データの全セルの距離評価値の平均を計算する。すなわち、探索処理部173は、全セルの距離評価値の和をセル数で割る。
次に、中間データB1に対するローカル評価値f21の計算例を説明する。
図21は、ローカル評価値の計算例(その3)を示す図である。
探索処理部173は、中間データB1の1行目の1つ目の数値セル(数値「100」が設定された1行目のセル)を選択する。探索処理部173は、当該数値と加工後データ142の同じ行の数値セルの数値「5400」との数値差5400-100=5300を求める。また、max(abs(中間データの数値),abs(加工後データの数値))=max(100,5400)=5400である。したがって、中間データB1の1つ目の数値セルについて、L2=5300/5400である。加工後データ142の1行には、数値セルが1つなので、当該L2の値はそのまま距離評価値となる。よって、探索処理部173は、中間データB1の1行目の1つ目の数値セルの距離評価値を「5300/5400」とする。
探索処理部173は、1つ目の数値セルと同様にして、中間データB1の1行目の2つ目以降の数値セルについても距離評価値を計算する。2つ目の数値セル(数値「50」が設定されたセル)の距離評価値は5350/5400である。3つ目の数値セル(数値「5000」が設定されたセル)の距離評価値は400/5400である。
次に、探索処理部173は、中間データB1の2行目の各数値セルについても距離評価値を計算する。2行目の1つ目の数値セル(数値「200」が設定されたセル)の距離評価値は、21400/21600である。2行目の2つ目の数値セル(数値「100」が設定された2行目のセル)の距離評価値は21500/21600である。2行目の3つ目の数値セル(数値「20000」が設定されたセル)の距離評価値は1600/21600である。
この場合、中間データB1の全数値セルの距離評価値の和は、5300/5400+21400/21600+5350/5400+21500/21600+400/5400+1600/21600=約4.11である。したがって、中間データB1のローカル評価値f21は、約4.11/6=約0.685である。
次に、中間データB2に対するローカル評価値f22の計算例を説明する。
図22は、ローカル評価値の計算例(その4)を示す図である。
探索処理部173は、中間データB2についても、図21で説明した手順により、各数値セルの距離評価値を計算する。中間データB2の1行目の数値セルについて、各数値セルの距離評価値は次の通りである。1つ目の数値セルの距離評価値は5300/5400である。2つ目の数値セルの距離評価値は5350/5400である。3つ目の数値セルの距離評価値は5250/5400である。
中間データB2の2行目の数値セルについて、各数値セルの距離評価値は次の通りである。1つ目の数値セルの距離評価値は21400/21600である。2つ目の数値セルの距離評価値は21500/21600である。3つ目の数値セルの距離評価値は21300/21600である。
この場合、中間データB2の全数値セルの距離評価値の和は、5300/5400+21400/21600+5350/5400+21500/21600+5250/5400+21300/21600=約5.92である。したがって、中間データB2のローカル評価値f22は、約5.92/6=約0.986である。
前述のように、Hmax=1である。この場合、1ホップの探索が終了すると、グループG1,G2それぞれにおける最終ノードを決定し、最終ノードのグローバル評価値に基づいて、最終ノードの中から次の起点のノードを選択する。
図23は、グローバル評価値の計算例を示す図である。
グループG1では、中間データA1に対するローカル評価値f11は0.49である。また、中間データA2に対するローカル評価値f12は0.40である。ローカル評価値f12<ローカル評価値f11なので、探索処理部173は、グループG1の最終ノードを中間データA2に対応する中間ノードとする。
グループG2では、中間データB1に対するローカル評価値f21は0.685である。また、中間データB2に対するローカル評価値f22は0.986である。ローカル評価値f21<ローカル評価値f22なので、探索処理部173は、グループG2の最終ノードを中間データB1に対応する中間ノードとする。
探索処理部173は、グループG1の最終ノード(中間データA2に相当)を、グローバル評価関数Fによって評価する。前述のように、グローバル評価関数Fは、全ローカル評価関数の線形結合であり、式(1)によって表される。グループG1,G2の例の場合、ローカル評価関数f1,f2の線形結合となる。ここで、一例として、ローカル評価関数f1の重みをλ1=0.7とし、ローカル評価関数f2の重みをλ2=0.3とする。
すると、中間データA2のグローバル評価値F1は、次の式(4)で表される。
グローバル評価値F1=0.7×ローカル評価値f12+0.3×ローカル評価値f2(中間データA2~加工後データ142)・・・(4)
ここで、ローカル評価値f2(中間データA2~加工後データ142)は、(5300/5400+5350/5400+21400/21600+21500/21600)/4=1.99である。
よって、探索処理部173は、この値を式(4)に代入して、グローバル評価値F1を、0.7×0.40+0.3×1.99=0.877と計算する。
また、中間データB1のグローバル評価値F2は、次の式(5)で表される。
グローバル評価値F2=0.7×ローカル評価値f1(中間データB1~加工後データ142)+0.3×ローカル評価値f21・・・(5)
ここで、ローカル評価値f1(中間データB1~加工後データ142)は、(7/12+3/4+2/4+1/4+7/13+2/5+2/5+2/5)/8=0.415である。
よって、探索処理部173は、この値を式(5)に代入して、グローバル評価値F2を、0.7×0.415+0.3×0.685=0.496と計算する。
そして、グローバル評価値F2<グローバル評価値F1なので、探索処理部173は、中間データA2,B1のうち、中間データB1に対応する中間ノードを、次段の探索の起点のノードと決定する。
このように、探索装置100は、グループ単位での探索では、ローカル評価関数を使用し、次の起点のノードの選択にはグローバル評価関数を使用するというように、ローカル評価関数とグローバル評価関数とを使い分ける。これにより、グループ単位での探索の効率化を図るとともに、グループ単位で行われた複数の探索結果の中から、その後の探索コストが比較的小さいと推定されるノードを起点のノードとして適切に選択できる。
図24は、探索の比較例を示す図である。
グラフ70は、A*アルゴリズムを利用して、変換方法のグルーピングを行わずに探索を行う場合の探索経路の例を示す。この場合、使用する変換方法の数Tが増すほど、変換方法の組み合わせの数が増し、探索の処理コストが増す。具体的には、探索空間は、Tのべき(累乗)で増大する。探索空間が大きいと、評価関数の値に従って探索しても、膨大な手戻り処理が発生する可能性もある。このように、探索空間が増大すると、探索処理に時間がかかる。
そこで、探索装置100は、探索対象の変換方法を、グループに属する変換方法に限定することで、全ての変換方法を対象として探索を行うよりも、探索空間を減少させることができる。
すなわち、探索装置100は、グループに属する特定の種類の変換方法に限定して連続的に使用して中間データを生成し、当該中間データにより変換方法の組み合わせを探索することで、種類の異なる変換方法を交互に試すような探索経路の枝刈りを行う。これにより、探索空間を効率的に削減し、探索時間を短縮できる。
また、全ての変換方法を対象として探索を行う場合、全ての変換方法に対応した評価関数を定義することになるが、変換方法の種類が増すほどこのような評価関数を適切に定義することは難しくなる。一方、探索対象の変換方法をグループに属する変換方法に限定することで、評価関数に対応させる変換方法の種類を減らせる。このため、評価関数が単純化して評価関数の精度が向上し、当該グループにおいて適切な経路を選択できる可能性が高まる。その結果、探索経路を縮小させ、探索時間を短縮できる。
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、CPU101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体113に記録できる。
例えば、プログラムを記録した記録媒体113を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体113に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。