(57)【要約】  データ変換経路の探索を効率化する。  入力データおよび出力データを取得する。入力データが中間データを経由して出力データに変換されるデータ変換経路を探索する探索処理であって、異なるデータ変換方法により入力データから複数の中間データを生成し、複数の中間データのうち探索先の中間データを絞り込んで探索先の中間データから他の中間データを生成することを含む探索処理を開始させる。探索処理の途中で生成された２以上の中間データを出力し、２以上の中間データのうちの一部の中間データの選択を示す選択情報を受け付ける。選択情報に基づいて、探索先の中間データの絞り込み方法を制御する。
2020144842.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
入力データおよび出力データを取得し、
前記入力データが中間データを経由して前記出力データに変換されるデータ変換経路を探索する探索処理であって、異なるデータ変換方法により前記入力データから複数の中間データを生成し、前記複数の中間データのうち探索先の中間データを絞り込んで前記探索先の中間データから他の中間データを生成することを含む探索処理を開始させ、
前記探索処理の途中で生成された２以上の中間データを出力し、前記２以上の中間データのうちの一部の中間データの選択を示す選択情報を受け付け、
前記選択情報に基づいて、前記探索先の中間データの絞り込み方法を制御する、
処理を実行させる探索制御プログラム。
【請求項２】
前記探索処理は、評価関数を用いて各中間データの評価値を算出し、前記評価値に基づいて前記探索先の中間データを絞り込むことを含み、
前記絞り込み方法の制御では、前記選択情報に基づいて前記評価関数を更新する、
請求項１記載の探索制御プログラム。
【請求項３】
前記評価関数は、複数の距離関数を用いて算出された複数の推定距離を、前記複数の距離関数に対応付けた重み値で重み付けして前記評価値を算出する関数であり、
前記評価関数の更新では、前記選択情報に基づいて前記重み値を更新する、
請求項２記載の探索制御プログラム。
【請求項４】
前記評価関数の更新では、前記選択情報で選択された中間データが、前記選択情報で選択されなかった中間データよりも高い評価になるよう前記評価関数を更新する、
請求項２記載の探索制御プログラム。
【請求項５】
前記選択情報の受け付けでは、他の中間データへの変換元になっていない末端の中間データを２以上のクラスタに分類し、前記２以上のクラスタそれぞれから少なくとも１つの中間データを抽出することで前記２以上の中間データを出力する、
請求項１記載の探索制御プログラム。
【請求項６】
前記選択情報の受け付けは、前記探索処理を停止させずに実行し、
前記絞り込み方法は、前記探索処理の進行途中で変更される、
請求項１記載の探索制御プログラム。
【請求項７】
前記選択情報の受け付けでは、前記２以上の中間データを表示装置に表示し、前記２以上の中間データのうちの一部の中間データをユーザに選択させる、
請求項１記載の探索制御プログラム。
【請求項８】
コンピュータが、
入力データおよび出力データを取得し、
前記入力データが中間データを経由して前記出力データに変換されるデータ変換経路を探索する探索処理であって、異なるデータ変換方法により前記入力データから複数の中間データを生成し、前記複数の中間データのうち探索先の中間データを絞り込んで前記探索先の中間データから他の中間データを生成することを含む探索処理を開始させ、
前記探索処理の途中で生成された２以上の中間データを出力し、前記２以上の中間データのうちの一部の中間データの選択を示す選択情報を受け付け、
前記選択情報に基づいて、前記探索先の中間データの絞り込み方法を制御する、
探索制御方法。
【請求項９】
入力データおよび出力データを記憶する記憶部と、
前記入力データが中間データを経由して前記出力データに変換されるデータ変換経路を探索する探索処理であって、異なるデータ変換方法により前記入力データから複数の中間データを生成し、前記複数の中間データのうち探索先の中間データを絞り込んで前記探索先の中間データから他の中間データを生成することを含む探索処理を開始させ、前記探索処理の途中で生成された２以上の中間データを出力し、前記２以上の中間データのうちの一部の中間データの選択を示す選択情報を受け付け、前記選択情報に基づいて、前記探索先の中間データの絞り込み方法を制御する処理部と、
を有する探索制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は探索制御プログラム、探索制御方法および探索制御装置に関する。
【背景技術】
【０００２】
プログラミング言語を用いてプログラムを直接記述することなしにプログラムを生成できるエンドユーザプログラミング技術の１つに、「例」からプログラムを生成するProgramming by Example（ＰＢＥ）がある。Programming by Exampleは、データ変換プログラムの生成に用いられることがある。例えば、データ変換例として入力データと出力データがユーザにより与えられる。すると、入力データを出力データに変換することができる変換ルールが探索され、探索された変換ルールを実現する変換プログラムが生成される。なお、実行軌跡の例から表計算プログラムを合成するプログラム合成装置が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１０−１７１６４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
入力データを出力データに変換する変換プログラムは、文字列の分割やデータ項目の削除など、複数の小さなデータ変換方法を組み合わせることで実現され得る。そのようなデータ変換方法の組み合わせは、グラフ探索のように、入力データから１以上の中間データを経由して出力データに到達するデータ変換経路の探索によって発見できる。【０００５】
ただし、データ変換方法の組み合わせの候補は多数存在するため、探索空間が膨大であり、多数の候補を網羅的に試行することは非効率である。そこで、入力データから異なるデータ変換方法によって複数の中間データを生成し、これら複数の中間データを評価して探索先の中間データを絞り込み、絞り込んだ中間データから他の中間データに変換するというように、段階的に探索を進めることが考えられる。例えば、出力データに効率的に近付いているかを評価する評価関数を用いて探索先の中間データを絞り込む。【０００６】
しかし、探索処理では多様なデータ変換方法の組み合わせが試行されるため、探索先の中間データの絞り込み方法が問題となる。絞り込み方法が適切でない場合には無駄な探索が多く発生してしまう。この点、どのようなデータ変換例に対しても効率的にデータ変換経路を探索できるように絞り込み方法をチューニングしておくことは容易でない。【０００７】
１つの側面では、本発明は、データ変換経路の探索を効率化する探索制御プログラム、探索制御方法および探索制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
１つの態様では、コンピュータに以下の処理を実行させる探索制御プログラムが提供される。入力データおよび出力データを取得する。入力データが中間データを経由して出力データに変換されるデータ変換経路を探索する探索処理であって、異なるデータ変換方法により入力データから複数の中間データを生成し、複数の中間データのうち探索先の中間データを絞り込んで探索先の中間データから他の中間データを生成することを含む探索処理を開始させる。探索処理の途中で生成された２以上の中間データを出力し、２以上の中間データのうちの一部の中間データの選択を示す選択情報を受け付ける。選択情報に基づいて、探索先の中間データの絞り込み方法を制御する。【０００９】
また、１つの態様では、コンピュータが実行する探索制御方法が提供される。また、１つの態様では、記憶部と処理部とを有する探索制御装置が提供される。
【発明の効果】
【００１０】
１つの側面では、データ変換経路の探索を効率化できる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態の探索制御装置の例を説明する図である。
【図２】第２の実施の形態の情報処理システムの例を示す図である。
【図３】クライアント装置のハードウェア例を示す図である。
【図４】Programming by Exampleの実行例を示す図である。
【図５】データ変換方法の組み合わせ例を示す図である。
【図６】グラフ探索の例を示す図である。
【図７】探索途中のグラフの例を示す図である。
【図８】探索途中のテーブルの例を示す図である。
【図９】探索途中のグラフにおけるノード選択例を示す図である。
【図１０】中間テーブルの選択画面の例を示す図である。
【図１１】クライアント装置とサーバ装置の機能例を示すブロック図である。
【図１２】関数テーブルの例を示す図である。
【図１３】ＯＰＥＮリストおよびＣＬＯＳＥリストの例を示す図である。
【図１４】キューの例を示す図である。
【図１５】クライアント装置とサーバ装置の通信例を示すシーケンス図である。
【図１６】グラフ探索の手順例を示すフローチャートである。
【図１７】グラフ探索の手順例を示すフローチャート（続き）である。
【図１８】中間テーブル送信の手順例を示すフローチャートである。
【図１９】重み更新の手順例を示すフローチャートである。
【図２０】クライアント制御の手順例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１３】
図１は、第１の実施の形態の探索制御装置の例を説明する図である。
第１の実施の形態の探索制御装置１０は、Programming by Exampleによるデータ変換プログラムの生成を制御する。以下に説明する探索処理は、探索制御装置１０が実行してもよいし他の装置に実行させてもよい。探索制御装置１０は、情報処理装置やコンピュータと言うこともできる。探索制御装置１０は、ユーザが操作するクライアント装置でもよいし、クライアント装置と連携するサーバ装置でもよい。
【００１４】
探索制御装置１０は、記憶部１１および処理部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性の半導体メモリでもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性ストレージでもよい。処理部１２は、例えば、ＣＰＵ（Central Processing Unit）、ＧＰＵ（Graphics Processing Unit）、ＤＳＰ（Digital Signal Processor）などのプロセッサである。ただし、処理部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００１５】
記憶部１１は、入力データ１３および出力データ１４を記憶する。入力データ１３および出力データ１４は、互いに関連付けられてデータ変換例を形成する。入力データ１３は変換前データを表し、出力データ１４は入力データ１３に対応する理想的な変換後データを表す。入力データ１３および出力データ１４は、例えば、ユーザから与えられる。
【００１６】
処理部１２は、入力データ１３および出力データ１４を用いた探索処理を開始させる。処理部１２は、自身が探索処理を実行してもよいし他の装置に探索処理を実行させてもよい。探索処理は、入力データ１３が１以上の中間データを経由して出力データ１４に変換されるデータ変換経路を探索するものである。データ変換経路は、文字列分割や四則演算や項目削除など、予め用意された複数のデータ変換方法のうち２以上のデータ変換方法を組み合わせることで実現される。探索処理によって探索されたデータ変換経路を実現するデータ変換プログラムが生成されることになる。
【００１７】
探索処理には、Ａ＊（エースター）アルゴリズムなど、段階的に中間データの生成を進める探索アルゴリズムが使用される。すなわち、探索処理は、異なるデータ変換方法により入力データ１３から複数の中間データを生成し、それら複数の中間データのうち探索先の中間データを絞り込んで探索先の中間データから他の中間データを生成することを含む。ある変換元データから複数の中間データを生成し、次に変換元データとする中間データを選択することが繰り返される。このような探索処理は、グラフ探索として表現することもできる。その場合、入力データ１３を示す開始ノードと、出力データ１４を示す終了ノードと、中間データを示す複数の中間ノードとを含む有向グラフが形成される。ノード間のエッジは、１回のデータ変換方法の適用を表す。探索処理は、開始ノードから２以上のエッジを経由して終了ノードに到達する経路を探索することに相当する。
【００１８】
一例として、異なるデータ変換方法により入力データ１３から中間データ１５ａ，１５ｂ，１５ｃが生成される。これら中間データ１５ａ，１５ｂ，１５ｃの中から探索先の中間データが絞り込まれる。中間データ１５ｂが選択された場合、あるデータ変換方法により中間データ１５ｂから中間データ１５ｄが生成される。他のデータ変換方法に中間データ１５ｂから更に他の中間データを生成することもできる。
【００１９】
入力データ１３から中間データ１５ａへのデータ変換方法は、入力データ１３の第１項目の文字列を空白で分割し、前半の部分文字列を別項目として追加するものである。入力データ１３から中間データ１５ｂへのデータ変換方法は、入力データ１３の第２項目の数値と第３項目の数値の積を計算し、計算した積を別項目として追加するものである。入力データ１３から中間データ１５ｃへのデータ変換方法は、入力データ１３の第２項目の数値と第３項目の数値の和を計算し、計算した和を別項目として追加するものである。中間データ１５ｂから中間データ１５ｄへのデータ変換方法は、入力データ１３の第２項目に相当する中間データ１５ｂの第２項目を削除するものである。出力データ１４に一致する変換後データが出現するまで、このような探索処理が実行される。
【００２０】
探索処理の途中において、処理部１２は、これまでに生成された中間データの中から２以上の中間データを抽出し、抽出した２以上の中間データを出力する。そして、処理部１２は、出力した２以上の中間データのうちの一部の中間データ（例えば、何れか１つの中間データ）の選択を示す選択情報１６を受け付ける。例えば、処理部１２は、抽出した２以上の中間データを表示装置に表示し、一部の中間データをユーザに選択させ、ユーザが選択した中間データを示す選択情報１６を受け付ける。選択される中間データは、例えば、提示された中間データのうち出力データ１４に近いとユーザが考えるものである。
【００２１】
出力する中間データは、探索処理の途中で生成された中間データのうち、まだ変換元として使用されていない末端の中間データであることが好ましい。また、出力する中間データには、類似しない多様な中間データが含まれていることが好ましい。例えば、処理部１２は、末端の中間データを、データ自体の類似度や入力データ１３からの変換経路の共通度などの所定基準に基づいて、複数のクラスタに分類する。処理部１２は、各クラスタから少なくとも１つの中間データを抽出することで、出力する中間データを決定する。
【００２２】
また、２以上の中間データを出力する契機は、探索処理が停滞していることであることが好ましい。例えば、処理部１２は、生成した中間データの量または実行したデータ変換方法の回数が閾値を超えてもまだ出力データ１４に到達しないとき、中間データの出力を決定する。また、例えば、処理部１２は、直近に生成された中間データと出力データ１４との間の類似度が向上していないとき、中間データの出力を決定する。一例として、処理部１２は、中間データ１５ａ，１５ｄを出力することを決定する。
【００２３】
選択情報１６を受け付けると、処理部１２は、探索処理の途中において、選択情報１６に基づいて探索先の中間データの絞り込み方法を制御する。例えば、処理部１２は、出力した２以上の中間データの中から次の探索先を決定することを仮定した場合に、選択情報１６で選択された中間データの優先度が高くなり、選択されなかった中間データの優先度が低くなるように、絞り込み方法をチューニングする。探索先の中間データの絞り込みに評価関数が使用されている場合、処理部１２は、探索処理の途中で評価関数を更新してもよい。評価関数は、ある中間データと出力データ１４との類似度を評価するものであってもよい。例えば、処理部１２は、選択情報１６で選択された中間データの評価が高くなり、選択されなかった中間データの評価が低くなるように、評価関数に含まれるパラメータを更新する。評価関数に含まれるパラメータは、異なる観点から出力データ１４との類似度を評価する複数の距離関数を重み付けする重み値であってもよい。
【００２４】
なお、処理部１２は、２以上の中間データを出力してから探索先の絞り込み方法をチューニングするまでの間、探索処理を停止させずに継続させてよい。すなわち、絞り込み方法のチューニングと探索処理とは非同期に実行することができる。探索先の絞り込み方法が変更されても、探索処理を始めからやり直さなくてよく、それ以降の中間データの生成において変更後の絞り込み方法が適用されることになる。
【００２５】
第１の実施の形態の探索制御装置１０によれば、Programming by Exampleとして、入力データ１３が１以上の中間データを経由して出力データ１４に変換されるデータ変換経路が探索される。よって、ユーザはプログラミング言語を用いて明示的にデータ変換プログラムを記述しなくてもよく、データ変換の負担を軽減することができる。
【００２６】
また、探索処理の途中で２以上の中間データが出力され、その出力に応答して受け付けた選択情報１６に基づいて、それ以降の探索における探索先の絞り込み方法が制御される。よって、入力データ１３および出力データ１４の特性に合わせて、探索先の絞り込み方法を動的にチューニングすることが可能となる。その結果、無駄な中間データの生成や遠回りな探索が抑制され、探索処理が効率化される。
【００２７】
また、好ましい中間データをユーザに選択させることで、ユーザにとって直感的な操作が可能となり、探索先の絞り込み方法のパラメータを直接変更する場合よりもユーザの負担が軽減される。また、探索先の絞り込み方法を探索開始前に事前にチューニングしておく負担を軽減できる。また、探索先の絞り込み方法のパラメータを教師無しで学習する場合には探索処理自体を反復実行することになるおそれがあるのに対し、第１の実施の形態では探索処理の途中でパラメータを変更すればよく処理時間を短縮できる。
【００２８】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態の情報処理システムの例を示す図である。
【００２９】
第２の実施の形態の情報処理システムは、クライアント装置１００およびサーバ装置２００を含む。クライアント装置１００は、第１の実施の形態の探索制御装置１０に対応する。クライアント装置１００とサーバ装置２００とは、ネットワーク３０を介して通信することができる。ネットワーク３０は、ＬＡＮ（Local Area Network）でもよいしインターネットなどの広域ネットワークでもよい。
【００３０】
クライアント装置１００は、ユーザが操作するクライアントコンピュータである。クライアント装置１００は、サーバ装置２００と連携してProgramming by Exampleによるデータ変換を実現する。クライアント装置１００は、入力データと出力データを対応付けた変換例をユーザから受け付け、変換例をサーバ装置２００に送信し、変換例から生成された変換プログラムをサーバ装置２００から受信する。クライアント装置１００は、変換例に含まれていない他の入力データをユーザから受け付け、他の入力データに対して変換プログラムを実行し、他の入力データに対応する他の出力データを生成する。これにより、ユーザがプログラミングを行わなくてもデータ変換を実現できる。
【００３１】
サーバ装置２００は、クライアント装置１００や他のクライアント装置から利用可能なサーバコンピュータである。サーバ装置２００は、Programming by Exampleにより変換プログラムを自動生成する。サーバ装置２００は、入力データと出力データを対応付けた変換例をクライアント装置１００から受信する。サーバ装置２００は、変換例の入力データを変換例の出力データに変換できるような一般化された変換ルールを探索し、探索された変換ルールを実現する変換プログラムを生成する。サーバ装置２００は、生成した変換プログラムをクライアント装置１００に送信する。なお、第２の実施の形態ではクライアント装置１００とサーバ装置２００とを分離しているが、クライアント装置１００とサーバ装置２００を統合して両者の処理を同一装置上で実行することも可能である。
【００３２】
図３は、クライアント装置のハードウェア例を示す図である。
クライアント装置１００は、バスに接続されたＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像インタフェース１０４、入力インタフェース１０５、媒体リーダ１０６および通信インタフェース１０７を有する。ＣＰＵ１０１は、第１の実施の形態の処理部１２に対応する。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１に対応する。サーバ装置２００も、クライアント装置１００と同様のハードウェアを有する。
【００３３】
ＣＰＵ１０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、クライアント装置１００は複数のプロセッサを備えてもよい。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００３４】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に使用するデータを一時的に記憶する揮発性の半導体メモリである。なお、クライアント装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数のメモリを備えてもよい。
【００３５】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性ストレージである。なお、クライアント装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）など他の種類のストレージを備えてもよく、複数のストレージを備えてもよい。
【００３６】
画像インタフェース１０４は、ＣＰＵ１０１からの命令に従って、クライアント装置１００に接続された表示装置１１１に画像を出力する。表示装置１１１として、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイ、プロジェクタなど、任意の種類の表示装置を使用することができる。
【００３７】
入力インタフェース１０５は、クライアント装置１００に接続された入力デバイス１１２から入力信号を受信する。入力デバイス１１２として、マウス、タッチパネル、タッチパッド、キーボードなど、任意の種類の入力デバイスを使用することができる。また、クライアント装置１００に複数の種類の入力デバイスが接続されてもよい。
【００３８】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００３９】
通信インタフェース１０７は、ネットワーク３０に接続され、ネットワーク３０を介してサーバ装置２００と通信する。通信インタフェース１０７は、スイッチやルータなどの有線通信装置に接続される有線インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線インタフェースでもよい。
【００４０】
次に、Programming by Exampleによるデータ変換について説明する。
図４は、Programming by Exampleの実行例を示す図である。
クライアント装置１００は、入力テーブル４１および出力テーブル４２を含む変換例をユーザから受け付ける。入力テーブル４１は、変換したいデータの集合の中からユーザがサンプルとして抽出した入力データの例である。出力テーブル４２は、入力テーブル４１に基づいてユーザが手作業で作成した出力データの例であり、入力テーブル４１に対応する理想的な出力データである。すると、クライアント装置１００は、入力テーブル４１および出力テーブル４２をサーバ装置２００に送信する。
【００４１】
サーバ装置２００は、入力テーブル４１を出力テーブル４２に変換することができる変換プログラム４４を生成する。入力テーブル４１を出力テーブル４２に変換するにあたり、変換プログラム４４は、補助テーブル４３のような入力テーブル４１以外の外部データを参照する場合がある。ここで変換プログラム４４は、入力テーブル４１以外の入力テーブルにも適用可能な一般化された変換ルールを示していればよい。変換プログラム４４は、実行可能な命令を含んでもよいし、実行可能形式でない変換ルールの記述を含んでもよい。サーバ装置２００は、変換プログラム４４をクライアント装置１００に送信する。
【００４２】
クライアント装置１００は、変換プログラム４４をサーバ装置２００から受信する。また、クライアント装置１００は、入力テーブル４５をユーザから受け付ける。入力テーブル４５は、変換したいデータの集合のうち入力テーブル４１として抽出された入力データ以外の他の入力データである。クライアント装置１００は、入力テーブル４５に変換プログラム４４を適用して出力テーブル４６を生成する。変換プログラム４４が実行可能形式である場合、クライアント装置１００は、変換プログラム４４を起動して入力テーブル４５を変換プログラム４４の引数として与えればよい。変換プログラム４４が実行可能形式でない場合、クライアント装置１００は、変換プログラム４４が示す変換ルールを解釈して、入力テーブル４５を出力テーブル４６に変換すればよい。
【００４３】
一例として、入力テーブル４１は、ＩＤと日時と乗車駅の列（カラム）を含む。出力テーブル４２は、日付と駅名と性別と年齢の列を含む。補助テーブル４３は、ＩＤと性別と年齢の列を含む。出力テーブル４２の日付は、入力テーブル４１の日時の列に記載された文字列の一部分である。出力テーブル４２の駅名は、入力テーブル４１の乗車駅に対応する。ただし、データ不存在の表現方法が、入力テーブル４１では「００００」であるのに対して出力テーブル４２では「ｎｕｌｌ」である。出力テーブル４２の性別は、入力テーブル４１と同じＩＤに関連付けられている補助テーブル４３の性別である。出力テーブル４２の年齢は、入力テーブル４１と同じＩＤに関連付けられている補助テーブル４３の年齢である。ただし、補助テーブル４３では年齢を表す数値に「歳」や「才」など付加的文字が付されていることがあるのに対し、出力テーブル４２では付加的文字は付されない。
【００４４】
入力テーブル４５は入力テーブル４１に対応し、出力テーブル４６は出力テーブル４２に対応する。すなわち、入力テーブル４５は、ＩＤと日時と乗車駅の列を含む。出力テーブル４６は、日付と駅名と性別と年齢の列を含む。出力テーブル４６の日付は、入力テーブル４５の日時の列に記載された文字列の一部分である。出力テーブル４６の駅名は、入力テーブル４５の乗車駅に対応する。ただし、上記のように駅名については文字列変換を要することがある。出力テーブル４６の性別は、入力テーブル４５と同じＩＤに関連付けられている補助テーブル４３の性別である。出力テーブル４６の年齢は、入力テーブル４５と同じＩＤに関連付けられている補助テーブル４３の年齢である。ただし、上記のように年齢については文字列変換を要することがある。
【００４５】
このような変換プログラム４４は、文字列変換や列分割などの２以上の小さなデータ変換方法を組み合わせることで生成することができる。
図５は、データ変換方法の組み合わせ例を示す図である。
【００４６】
上記の変換プログラム４４は、データ変換方法５１〜５６の組み合わせによって実現される。入力テーブル４１に対してデータ変換方法５１〜５６を順に実行することで、出力テーブル４２を生成することができる。また、入力テーブル４５に対してデータ変換方法５１〜５６を順に実行することで、出力テーブル４６を生成することができる。
【００４７】
データ変換方法５１は、与えられた入力テーブルに補助テーブル４３を結合する補助テーブル結合である。データ変換方法５２は、乗車駅の列に記載された「００００」を「ｎｕｌｌ」に置換するｎｕｌｌ置換である。データ変換方法５３は、日時の列を日付の列と時刻の列に分割する列分割である。データ変換方法５４は、ＩＤの列と時刻の列を削除する列削除である。データ変換方法５５は、年齢の列から数値を抽出する数値抽出である。データ変換方法５６は、元の年齢の列を削除する列削除である。
【００４８】
データ変換方法５１は、ＩＤと日時と乗車駅の列をもつ入力テーブルから、ＩＤと日時と乗車駅と性別と年齢の列をもつ中間テーブルを生成する。性別と年齢は、ＩＤに基づいて補助テーブル４３から検索されたものである。データ変換方法５２は、データ変換方法５１が生成した中間テーブルから、ＩＤと日時と駅名と性別と年齢の列をもつ中間テーブルを生成する。駅名は、データ不存在を「ｎｕｌｌ」で表現したものである。
【００４９】
データ変換方法５３は、データ変換方法５２が生成した中間テーブルから、ＩＤと日付と時刻と駅名と性別と年齢の列をもつ中間テーブルを生成する。日付は、日時を表す文字列のうち空白より前の部分である。時刻は、日時を表す文字列のうち空白より後ろの部分である。データ変換方法５４は、データ変換方法５３が生成した中間テーブルから、日付と駅名と性別と年齢の列をもつ中間テーブルを生成する。
【００５０】
データ変換方法５５は、データ変換方法５４が生成した中間テーブルから、日付と駅名と性別と年齢（旧列）と年齢（新列）の列をもつ中間テーブルを生成する。年齢（新列）は、年齢（旧列）から数値のみを抽出したものである。データ変換方法５６は、データ変換方法５５が生成した中間テーブルから、日付と駅名と性別と年齢の列をもつ中間テーブルを生成する。数値抽出前の年齢（旧列）は削除されている。
【００５１】
このように、データ変換方法５１〜５６を順に実行することで、入力テーブル４１を出力テーブル４２に変換することができる。ただし、変換例を実現するデータ変換方法の組み合わせは複数通り存在することもある。例えば、データ変換方法５５の数値抽出を、データ変換方法５１の補助テーブル結合より先に実行することも可能である。
【００５２】
サーバ装置２００は、入力テーブル４１と出力テーブル４２を受信すると、予め用意された複数の小さなデータ変換方法のうち２以上のデータ変換方法を組み合わせることを試行し、入力テーブル４１を出力テーブル４２に変換できる組み合わせを探索する。
【００５３】
複数のデータ変換方法は、構造的変換と構文的変換と意味的変換に分類される。構造的変換は、列削除や列移動などテーブル構造を変換するものである。構文的変換は、文字列抽出や文字列分割など、変換対象テーブルに含まれるデータの範囲内でデータ表現を変換するものである。意味的変換は、補助テーブル結合など、変換対象テーブルの外部の情報を利用して変換対象テーブルに含まれるデータの意味を解釈するものである。
【００５４】
１つの入力テーブルまたは中間テーブルに対して、適用可能な様々なデータ変換方法の候補が存在する。適用するデータ変換方法を選択することは、変換対象テーブルの中から演算対象の列を選択することも含む。例えば、特定の１つの列に記載された文字列をスペースで分割するもの、特定の１つの列を削除するもの、特定の２つの列に記載された数値を加算するものなど、様々なデータ変換方法の候補が存在する。
【００５５】
入力テーブル４１を出力テーブル４２に変換するデータ変換方法の組み合わせの探索は、開始ノードから終了ノードに到達するパスを探索するグラフ探索として表現できる。グラフは、入力テーブルに対応する１つの開始ノードと、出力テーブルに対応する１つの終了ノードと、中間テーブルに対応する多数の中間ノードとを含む。このグラフは有向グラフであり、ノード間を接続するエッジとしてデータ変換方法に対応する方向付きエッジを含む。あるノードから別のノードへのエッジは、１つのデータ変換方法によって、あるノードに対応するテーブルが別のノードに対応するテーブルに変換されることを表す。
【００５６】
グラフ探索の開始時点では、中間ノードは潜在的に存在するノードであり、ノード間のエッジは未知である。あるデータ変換方法によって新たな中間テーブルが生成されると、その中間テーブルを表す中間ノードが顕在化し、変換前テーブルに対応するノードから顕在化した中間ノードへのエッジが生成される。開始ノードから終了ノードに到達するエッジの列が発見されるとグラフ探索が終了する。開始ノードから終了ノードに到達するエッジの列は、採用するデータ変換方法の組み合わせを表す。
【００５７】
変換プログラム４４の実行効率の観点からは、開始ノードから終了ノードに到達する最短パスを検出することが好ましい。ただし、グラフ探索自体の効率の観点から、過度に冗長なパスでなければ最短パス以外のパスを検出してもよい。第２の実施の形態では、サーバ装置２００は、グラフ探索にＡ＊アルゴリズムを使用する。
【００５８】
図６は、グラフ探索の例を示す図である。
Ａ＊アルゴリズムでは、サーバ装置２００は、開始ノードが示す入力テーブルに対して複数のデータ変換方法それぞれを試行して、開始ノードから１ホップの距離にある複数の中間ノードを生成する。サーバ装置２００は、所定の評価関数により複数の中間ノードそれぞれの評価値を算出する。この評価関数は、開始ノードから当該中間ノードを経由して終了ノードに到達するパスの距離を推定する関数であり、終了ノードに効率的に近付いているか否かを評価する。評価値の算出では、当該中間ノードが示す中間テーブルと終了ノードが示す出力テーブルとが比較される。評価値が小さいほど距離が短く評価が高いことを表し、評価値が大きいほど距離が長く評価が低いことを表す。
【００５９】
サーバ装置２００は、末端の中間ノード（そこから１ホップ先の中間ノードをまだ生成していない中間ノード）の中から評価値が最小の中間ノードを選択する。サーバ装置２００は、選択した中間ノードが示す中間テーブルに対して複数のデータ変換方法それぞれを試行して、選択した中間ノードから１ホップの距離にある複数の中間ノードを生成する。サーバ装置２００は、所定の評価関数により複数の中間ノードそれぞれの評価値を算出する。サーバ装置２００は、終了ノードに到達するまで、すなわち、変換後のテーブルが出力テーブルに一致するまで、上記の処理を繰り返す。
【００６０】
例えば、図６に示すグラフ６０において、サーバ装置２００は、開始ノード６１が示す入力テーブルに対して３つのデータ変換方法それぞれを試行し、中間ノード６２，６３，６４に対応する３つの中間テーブルを生成する。これにより、開始ノード６１から中間ノード６２，６３，６４それぞれへのエッジが生成される。サーバ装置２００は、中間テーブル６２，６３，６４が示す３つの中間テーブルそれぞれと終了ノード６８が示す出力テーブルとを比較し、中間ノード６２，６３，６４それぞれの評価値を算出する。
【００６１】
サーバ装置２００は、末端の中間ノードである中間ノード６２，６３，６４の中から評価値が最小の中間ノードを選択する。ここでは、中間ノード６４の評価値が最小であるとする。すると、サーバ装置２００は、中間ノード６４を選択し、中間ノード６４が示す中間テーブルに対して３つのデータ変換方法それぞれを試行し、中間ノード６５，６６，６７に対応する３つの中間テーブルを生成する。これにより、中間ノード６４から中間ノード６５，６６，６７それぞれへのエッジが生成される。サーバ装置２００は、中間テーブル６５，６６，６７が示す３つの中間テーブルそれぞれと終了ノード６８が示す出力テーブルとを比較し、中間ノード６５，６６，６７それぞれの評価値を算出する。
【００６２】
サーバ装置２００は、末端の中間ノードである中間ノード６２，６３，６５，６６，６７の中から評価値が最小の中間ノードを選択する。ここでは、中間ノード６６の評価値が最小であるとする。すると、サーバ装置２００は、中間ノード６６を選択する。中間ノード６６を選択した時点で、中間ノード６６から終了ノード６８に到達する区間にある中間ノードやエッジは未探索である。サーバ装置２００は、終了ノード６８に到達するまで以上を繰り返す。ある中間ノードが示す中間テーブルに対して１つのデータ変換方法を試行して生成されたテーブルが終了テーブルに一致したとき、グラフ探索が終了する。
【００６３】
ここで、評価関数について説明する。数式（１）に示す評価関数の通り、ノードｎの評価値ｆ（ｎ）は、ノードｎの距離ｇ（ｎ）とノードｎの推定距離ｈ（ｎ）の和である。距離ｇ（ｎ）は、開始ノード６１からノードｎまでの最短距離である。距離ｇ（ｎ）は、開始ノード６１からノードｎまでに経由するエッジそれぞれのコストの合計である。コストは、エッジが示すデータ変換方法に依存しない固定値でもよいし、エッジが示すデータ変換方法の種類に応じて決まる値であってもよい。コスト＝１に固定すると、距離ｇ（ｎ）は、開始ノード６１からノードｎまでに経由するエッジの数（ホップ数）になる。
【００６４】
【数１】
2020144842.tif 000003
【００６５】
推定距離ｈ（ｎ）は、ノードｎから終了ノード６８までの最短距離の推定値である。ノードｎから終了ノード６８までに経由するエッジは未知であることから、推定距離ｈ（ｎ）は、ノードｎが示す中間テーブルと終了ノード６８が示す出力テーブルとの差分に基づいて推定される。推定距離ｈ（ｎ）は、ノードｎが終了ノード６８にどの程度近いかを表す。推定距離ｈ（ｎ）が小さいほどノードｎが終了ノード６８に近いと推定され、推定距離ｈ（ｎ）が大きいほどノードｎが終了ノード６８から遠いと推定される。推定距離ｈ（ｎ）を算出する距離関数を、ヒューリスティック関数と言うことがある。
【００６６】
例えば、中間ノード６６に着目すると、距離ｇ（ｎ）は、開始ノード６１から中間ノード６４に遷移するコストと、中間ノード６４から中間ノード６６に遷移するコストの合計である。コスト＝１に固定した場合、距離ｇ（ｎ）は開始ノード６１から中間ノード６６までのホップ数であり、距離ｇ（ｎ）＝２になる。推定距離ｈ（ｎ）は、中間ノード６６が示す中間テーブルと終了ノード６８が示す出力テーブルとの差分から推定される。
【００６７】
ノードｎに対して１つのデータ変換方法を適用してノードｍが得られた場合、ノードｍの評価値ｆ（ｍ）は数式（２）のように定義される。評価値ｆ（ｍ）は、ノードｎの距離ｇ（ｎ）と、ノードｎとノードｍとの間のエッジのコストｃｏｓｔ（ｎ，ｍ）と、ノードｎの推定距離ｈ（ｎ）の合計である。距離ｇ（ｎ）とコストｃｏｓｔ（ｎ，ｍ）の和は、ノードｍの距離ｇ（ｍ）に相当する。例えば、中間ノード６４から中間ノード６６に遷移した場合、中間ノード６６の評価値ｆ（ｍ）は、中間ノード６４の距離ｇ（ｎ）と、中間ノード６４と中間ノード６６との間のエッジのコストｃｏｓｔ（ｎ，ｍ）と、中間ノード６６の推定距離ｈ（ｎ）の合計と定義される。
【００６８】
【数２】
2020144842.tif 000004
【００６９】
上記のように、推定距離は２つのテーブルの差分から算出される。しかし、２つのテーブルの差分は、テーブルに含まれる列の個数（テーブル構造）の違い、特定の列に記載される文字列の違い、特定の列に記載される数値の違い、特定の列に記載される時刻の違いなど、様々な種類の差分を包含している。差分から推定距離を算出する好適な算出方法は、差分の種類によって異なる。そこで、着目するデータ型毎にそのデータ型に対して好適な距離関数を定義し、複数の距離関数により算出された複数の推定距離の重み付き和を全体の推定距離と定義することが考えられる。
【００７０】
数式（３）に示すように、全体の距離関数Ｄ（λ，ｎ，ｍ）が定義される。数式（３）において、ｄｉ（ｎ，ｍ）は、異なるＮ個（Ｎは２以上の整数）の距離関数のうちのｉ番目（ｉ＝０，…，Ｎ−１）の距離関数である。ｎは距離を推定する区間の一端にあるノードを示し、ｍは距離を推定する区間の他端にあるノードを示す。λｉは、ｉ番目の距離関数ｄｉ（ｎ，ｍ）により算出される推定距離の重みを示すパラメータである。λは、Ｎ個の重みλｉを列挙した重みベクトルである。距離関数Ｄ（λ，ｎ，ｍ）が算出する推定距離は、ノードｎとノードｍと重みベクトルλに依存する。
【００７１】
【数３】
2020144842.tif 000005
【００７２】
ノードｎの評価値ｆ（ｎ）の算出に使用する推定距離ｈ（ｎ）は、ノードｎと終了ノードＧとの間の推定距離である。そこで、数式（４）に示すように、全体の距離関数Ｈ（λ，ｎ）が定義される。距離関数Ｈ（λ，ｎ）は、距離関数Ｄ（λ，ｎ，ｍ）のノードｍを終了ノードＧに固定したものである。数式（４）において、距離関数ｈｉ（ｎ）は、距離関数ｄｉ（ｎ，ｍ）のノードｍを終了ノードＧに固定したものである。特定の重みベクトルλを用いて距離関数Ｈ（λ，ｎ）が算出する推定距離は、推定距離ｈ（ｎ）である。
【００７３】
【数４】
2020144842.tif 000006
【００７４】
Ｎ個の距離関数ｈｉ（ｎ）の中には、特定の列に記載される文字列の違いとして、２つの文字列の間の編集距離（レーベンシュタイン距離）を評価するものが含まれてもよい。また、Ｎ個の距離関数ｈｉ（ｎ）の中には、特定の列に記載される数値の違いとして、２つの数値の差または比を評価するものが含まれてもよい。また、Ｎ個の距離関数ｈｉ（ｎ）の中には、特定の列に記載される時刻の違いとして、２つの時刻の差を評価するものが含まれてもよい。また、Ｎ個の距離関数ｈｉ（ｎ）の中には、テーブ構造の違いとして、２つのテーブルの列数の差を評価するものが含まれてもよい。
【００７５】
一例として、文字列に関する距離関数は以下の演算を行ってもよい。距離関数は、ノードｎが示すテーブルから、データ型が文字列である第１の列を抽出し、終了ノードＧが示す出力テーブルから、全体として第１の列とデータが最も類似する第２の列を抽出する。距離関数は、対応するレコード同士で第１の列の文字列と第２の列の文字列とを比較して編集距離を算出し、複数のレコードの編集距離の平均を、文字列に関する推定距離とする。また、数値に関する距離関数は以下の演算を行ってもよい。距離関数は、ノードｎが示すテーブルから、データ型が数値である第１の列を抽出し、終了ノードＧが示す出力テーブルから、全体として第１の列とデータが最も類似する第２の列を抽出する。距離関数は、対応するレコード同士で第１の列の数値と第２の列の数値との差または比を算出し、複数のレコードの差または比の平均を、数値に関する推定距離とする。
【００７６】
このように距離関数Ｈ（λ，ｎ）を定義することで、推定距離ｈ（ｎ）を算出することができ、終了ノード６８に近いと推定される中間ノードから優先的に隣接する中間ノードを探索することができる。これにより、開始ノード６１から終了ノード６８に到達するパスであって距離が短いパスを効率的に探索することができる。
【００７７】
しかし、グラフ探索の効率性は、距離関数Ｈ（λ，ｎ）に設定される重みベクトルλに依存する。中間ノード間の推定距離ｈ（ｎ）のばらつきが極端に小さいと、幅優先探索のように、終了ノード６８に近付く速度が遅くなり無駄な探索が多くなるおそれがある。また、中間ノード間の推定距離ｈ（ｎ）のばらつきが極端に大きと、終了ノード６８に近付かない誤った方向に探索が進んだ場合の軌道修正が難しくなるおそれがある。
【００７８】
一方で、どの様な入力データに対してもグラフ探索が効率化されるような適切な重みベクトルλを事前にチューニングしておくことは容易でない。また、ある入力データに対して、グラフ探索を繰り返し試行して適切な重みベクトルλを学習することは、探索時間が長くなり非効率である。そこで、第２の実施の形態では、グラフ探索の途中でユーザの判断を仰ぎ、ユーザの判断を距離関数Ｈ（λ，ｎ）に反映させる。
【００７９】
具体的には、クライアント装置１００は、探索途中で生成された少数の中間テーブルをサーバ装置２００から取得してユーザに提示し、出力テーブルに最も近い中間テーブルをユーザに選択させる。クライアント装置１００は、ユーザが選択した中間テーブルの推定距離ｈ（ｎ）が、選択しなかった中間テーブルの推定距離ｈ（ｎ）よりも小さくなるように重みベクトルλを調整し、サーバ装置２００に対して重みベクトルλを指定する。
【００８０】
図７は、探索途中のグラフの例を示す図である。
ユーザへの中間テーブルの提示を説明するにあたり、図７に示すグラフ７０を考える。グラフ７０は探索途中のグラフである。グラフ７０は、ノード７１−１〜７１−５，７２−１〜７２−１３を含む。ノード７１−１は開始ノードである。ノード７１−２はノード７１−１に隣接する。ノード７１−３はノード７１−１に隣接する。ノード７１−４はノード７１−３に隣接する。ノード７１−５はノード７１−４に隣接する。ノード７２−１〜７２−１３は、１ホップ先の中間ノードが未探索である末端の中間ノードである。末端の中間ノードは、探索中ノードや検討中ノードと言うこともできる。末端の中間ノード以外のノードは、探索済みノードや検討済みノードと言うこともできる。
【００８１】
図８は、探索途中のテーブルの例を示す図である。
入力テーブル７３−１は、開始ノードであるノード７１−１に対応する。入力テーブル７３−１は、ＩｔｅｍとＰｒｉｃｅとＱｕａｎｔｉｔｙの列を含む。Ｉｔｅｍの列には、商品名を示す文字列と原産国を示す文字列とが連結されたものが記載される。商品名と原産国を区切る区切り文字は統一されていない。Ｐｒｉｃｅの列には、商品の単価を示す数値が記載される。Ｑｕａｎｔｉｔｙの列には、商品の個数を示す数値が記載される。
【００８２】
中間テーブル７３−２は、中間ノードであるノード７１−２に対応する。中間テーブル７３−２は、ノード７１−１が示す入力テーブル７３−１に対して１つのデータ変換方法を適用することで生成される。中間テーブル７３−２は、入力テーブル７３−１のＰｒｉｃｅの列とＱｕａｎｔｉｔｙの列とを統合して、両者の数値の積を記載する列を設けたものである。中間テーブル７３−３は、中間ノードであるノード７１−３に対応する。中間テーブル７３−３は、ノード７１−１が示す入力テーブル７３−１に対して１つのデータ変換方法を適用することで生成される。中間テーブル７３−３は、入力テーブル７３−１のＩｔｅｍの列から括弧によって区切られる文字列を抽出したものである。
【００８３】
中間テーブル７３−４は、中間ノードであるノード７１−４に対応する。中間テーブル７３−４は、ノード７１−３が示す中間テーブル７３−３に対して１つのデータ変換方法を適用することで生成される。中間テーブル７３−４は、中間テーブル７３−３のＰｒｉｃｅの列とＱｕａｎｔｉｔｙの列とを統合して、両者の数値の和を記載する列を設けたものである。中間テーブル７３−５は、中間ノードであるノード７１−５に対応する。中間テーブル７３−５は、ノード７１−４が示す中間テーブル７３−４に対して１つのデータ変換方法を適用することで生成される。中間テーブル７３−５は、中間テーブル７３−４から元のＩｔｅｍの列を削除したものである。
【００８４】
図９は、探索途中のグラフにおけるノード選択例を示す図である。
サーバ装置２００は、グラフ探索中に所定の条件が満たされると、末端の中間ノードのうちＭ個（Ｍは２以上の整数）の中間ノードを選択し、選択したＭ個の中間ノードが示すＭ個の中間テーブルをクライアント装置１００に送信する。選択する中間ノードの個数Ｍは、ユーザが中間テーブルを検討しやすいように１０個以下であることが好ましい。
【００８５】
所定の条件は、直近に探索された幾つかの中間ノードについて推定距離ｈ（ｎ）の減少率が閾値を下回ったことである。通常はグラフ探索の進行に伴って推定距離ｈ（ｎ）が徐々に減少していくことが期待されるところ、終了ノードに到達する前に推定距離ｈ（ｎ）が収束することはグラフ探索が停滞していることを意味する。そこで、グラフ探索が停滞している場合には距離関数Ｈ（λ，ｎ）の重みベクトルλが適切でない可能性があることから、サーバ装置２００はユーザの判断を仰ぐこととする。
【００８６】
ただし、所定の条件は、グラフ探索の実行量が閾値を超えたことなど、グラフ探索の停滞が検出されたこと以外であってもよい。例えば、開始ノードからの深さが閾値を超えたことを条件としてもよい。開始ノードから深さは、例えば、開始ノードから末端の中間ノードまでのホップ数の最大値や距離ｇ（ｎ）の最大値などである。また、探索済みのエッジの数が閾値を超えたことを条件としてもよい。
【００８７】
Ｍ個の中間ノードを選択するにあたり、サーバ装置２００は、末端の中間ノードをＭ個のクラスタに分類する。サーバ装置２００は、Ｍ個のクラスタから代表の中間ノードを１つずつ選択することでＭ個の中間ノードを選択する。
【００８８】
Ｍ個のクラスタは、推定距離ｈ（ｎ）の類似度に基づいて形成する。サーバ装置２００は、ｋ−ｍｅａｎｓ法（ｋ平均法）などのクラスタリングアルゴリズムを用いて、類似する推定距離ｈ（ｎ）をもつ中間ノードが同じクラスタに属するように中間ノードを分類する。Ｍ個のクラスタに属する中間ノードの個数は均等でなくてよい。ｋ−ｍｅａｎｓ法によれば、サーバ装置２００は、最初に末端の中間ノードをランダムにＭ個のクラスタに割り振る。サーバ装置２００は、クラスタ毎に推定距離ｈ（ｎ）の平均値を算出する。サーバ装置２００は、各中間ノードの推定距離ｈ（ｎ）と各クラスタの平均値とを比較し、各中間ノードをその推定距離ｈ（ｎ）に最も近い平均値をもつクラスタに移動させる。以上を中間ノードの移動が収束するまで繰り返すことでクラスタリングが完了する。
【００８９】
ただし、推定距離ｈ（ｎ）の類似度以外の観点からＭ個のクラスタを形成することも可能である。例えば、グラフ構造（トポロジ）に基づいて、近い位置の中間ノードが同じクラスタに属するように中間ノードを分類してもよい。一例として、サーバ装置２００は、末端の中間ノードから開始して、開始ノードに向かって１レベルずつエッジを逆方向に辿る。特定のレベルでグラフを分割すると、末端の中間ノード側に複数の部分木が形成される。部分木の数は、末端の中間ノードに近いレベルで切断するほど多くなり、開始ノードに近いレベルで切断するほど少なくなる。サーバ装置２００は、部分木の数がＭ個になるレベルでグラフを分割することで、Ｍ個のクラスタを形成する。
【００９０】
Ｍ個のクラスタそれぞれから選択する代表の中間ノードは、そのクラスタの中で最も推定距離ｈ（ｎ）が小さい中間ノードである。ただし、他の方法で代表の中間ノードを選択することも可能である。例えば、サーバ装置２００は、各クラスタから、そのクラスタの中で最も推定距離ｈ（ｎ）が大きい中間ノードを選択してもよいし、そのクラスタの中で中央の推定距離ｈ（ｎ）をもつ中間ノードを選択してもよい。また、サーバ装置２００は、各クラスタからランダムに代表の中間ノードを選択してもよい。
【００９１】
グラフ７０の例において、サーバ装置２００は、ノード７２−１〜７２−１３をクラスタ７４−１〜７４−４に分類する。クラスタ７４−１は、ノード７２−１〜７２−５を含む。クラスタ７４−２は、ノード７２−６〜７２−１０を含む。クラスタ７４−３は、ノード７２−１１，７２−１２を含む。クラスタ７４−４は、ノード７２−１３を含む。サーバ装置２００は、クラスタ７４−１からノード７２−５を選択し、クラスタ７４−２からノード７２−７を選択し、クラスタ７４−３からノード７２−１２を選択し、クラスタ７４−４からノード７２−１３を選択する。サーバ装置２００は、ノード７２−５，７２−７，７２−１２，７２−１３が示す４個の中間テーブルを送信する。
【００９２】
図１０は、中間テーブルの選択画面の例を示す図である。
クライアント装置１００は、サーバ装置２００からＭ個の中間テーブルを受信すると、クライアント装置１００が保持している出力テーブルとＭ個の中間テーブルとを含む選択画面８０を生成して表示装置１１１に表示する。
【００９３】
一例として、選択画面８０は、出力テーブル７５−１と中間テーブル７５−２〜７５−５とを含む。中間テーブル７５−２〜７５−５は、前述のノード７２−５，７２−７，７２−１２，７２−１３に対応する。選択画面８０は、中間テーブル７５−２〜７５−５の中から１つを選択するための入力フォームを含む。ユーザは、中間テーブル７５−２〜７５−５それぞれと出力テーブル７５−１とを比較し、中間テーブル７５−２〜７５−５のうち出力テーブル７５−１に最も近いと思うものを１つ選択する。ユーザの選択は、入力デバイス１１２によってクライアント装置１００に入力される。
【００９４】
クライアント装置１００は、Ｍ個の中間テーブルの中から１つを選択する選択操作をユーザから受け付ける。すると、クライアント装置１００は、ユーザの選択に適合する推定距離ｈ（ｎ）が算出されるように距離関数Ｈ（λ，ｎ）の重みベクトルλを更新する。重みベクトルλは、ユーザに提示したＭ個の中間テーブルのうち、ユーザが選択した１つの中間テーブルの推定距離ｈ（ｎ）が小さく算出され、ユーザが選択しなかったＭ−１個の中間テーブルの推定距離ｈ（ｎ）が大きく算出されるようにチューニングされる。
【００９５】
具体的には、Ｎ次元の重みベクトルλ＝（λ０，…，λＮ−１）は、数式（５）の正規化条件を満たすように決定されるものである。ユーザが、Ｍ個の中間テーブルのうちノードｎ０の中間テーブルを選択し、ノードｎ１，…，ｎＭ−１の中間テーブルを選択しなかったとする。すると、好ましい重みベクトルλは、正規化条件を満たす範囲で数式（６）の目的関数Ｅ（λ）の値を最小化するものである。目的関数Ｅ（λ）の値は、ノードｎ０の推定距離ｈ（ｎ０）から、ノードｎ１，…，ｎＭ−１の推定距離ｈ（ｎ１），…，ｈ（ｎＭ−１）の平均を引いた値である。よって、目的関数Ｅ（λ）の値を最小化することは、ノードｎ０の推定距離ｈ（ｎ０）を小さくし、ノードｎ１，…，ｎＭ−１の推定距離ｈ（ｎ１），…，ｈ（ｎＭ−１）の平均を大きくすることを意味する。
【００９６】
【数５】
2020144842.tif 000007
【００９７】
【数６】
2020144842.tif 000008
【００９８】
目的関数Ｅ（λ）は重みベクトルλの一次関数であるため、数式（７）のように変形することができる。数式（７）の係数ａ０，ａ１，…，ａＮ−１は、Ｎ個の距離関数ｈ０（ｎ），…，ｈＮ−１（ｎ）を用いてＭ個のノードｎ０，…，ｎＭ−１について算出されるＮ×Ｍ個の推定距離に基づく既知係数である。よって、目的関数Ｅ（λ）の値は、重みベクトルλが数式（８）のときに最小となる。数式（８）の係数ベクトルａは、係数ａ０，ａ１，…，ａＮ−１を列挙したＮ次元ベクトルである。
【００９９】
【数７】
2020144842.tif 000009
【０１００】
【数８】
2020144842.tif 000010
【０１０１】
クライアント装置１００は、上記のように算出した重みベクトルλをサーバ装置２００に送信する。サーバ装置２００は、クライアント装置１００から受信した重みベクトルλを距離関数Ｈ（λ，ｎ）に設定し、グラフ探索の続きにおいて更新後の距離関数Ｈ（λ，ｎ）を使用する。このとき、サーバ装置２００はグラフ探索を最初からやり直さなくてよい。よって、グラフ探索の途中で、各ノードの評価値ｆ（ｎ）の算出方法が変更されることになる。また、サーバ装置２００は、距離関数Ｈ（λ，ｎ）の更新をグラフ探索と非同期に行う。すなわち、クライアント装置１００がユーザに中間テーブルを選択させて重みベクトルλを算出している間も、サーバ装置２００はグラフ探索を停止せず、更新前の距離関数Ｈ（λ，ｎ）を用いてグラフ探索を進める。
【０１０２】
次に、クライアント装置とサーバ装置の機能について説明する。
図１１は、クライアント装置とサーバ装置の機能例を示すブロック図である。
クライアント装置１００は、データ記憶部１２１、関数記憶部１２２、クライアント通信部１２３、探索要求部１２４、中間テーブル選択部１２５、重み計算部１２６および変換プログラム実行部１２７を有する。データ記憶部１２１および関数記憶部１２２は、例えば、ＲＡＭ１０２またはＨＤＤ１０３の記憶領域を用いて実現される。クライアント通信部１２３は、例えば、ＣＰＵ１０１が実行するプログラムおよび通信インタフェース１０７を用いて実現される。探索要求部１２４、中間テーブル選択部１２５、重み計算部１２６および変換プログラム実行部１２７は、例えば、プログラムを用いて実現される。
【０１０３】
データ記憶部１２１は、変換例としてユーザから与えられた入力テーブルおよび出力テーブルを記憶する。また、データ記憶部１２１は、変換例以外の変換対象の入力テーブルを記憶する。関数記憶部１２２は、データ型に応じて予め定義されたＮ個の距離関数ｈ０（ｎ），…，ｈＮ−１（ｎ）を記憶する。異なる距離関数は、文字列や数値やテーブル構造など異なるデータ型の観点から２つのテーブルの差分を評価するものである。なお、クライアント装置１００は、サーバ装置２００からＮ個の距離関数を受信してもよい。
【０１０４】
クライアント通信部１２３は、サーバ装置２００との間でソケット通信を行う。
探索要求部１２４は、ユーザから、変換例および変換例以外の入力テーブルを指定したデータ変換要求を受け付ける。すると、探索要求部１２４は、クライアント通信部１２３にソケットを生成させてサーバ装置２００と接続を確立させる。そして、探索要求部１２４は、変換例である入力テーブルおよび出力テーブルをデータ記憶部１２１から読み出し、クライアント通信部１２３を介してサーバ装置２００に送信する。
【０１０５】
中間テーブル選択部１２５は、探索要求部１２４が変換例を送信した後、クライアント通信部１２３に生成されたソケットを監視する。ソケットの監視により、中間テーブル選択部１２５は、サーバ装置２００からＭ個の中間テーブルが受信されたことを検出する場合がある。Ｍ個の中間テーブルが受信されると、中間テーブル選択部１２５は、データ記憶部１２１から変換例の出力テーブルを読み出す。中間テーブル選択部１２５は、出力テーブルとＭ個の中間テーブルとを含む選択画面８０を生成して表示装置１１１に表示する。そして、中間テーブル選択部１２５は、ユーザから選択画面８０上での選択操作を受け付け、Ｍ個の中間テーブルおよびユーザの選択結果（例えば、ユーザが選択した中間テーブルの識別情報）を重み計算部１２６に通知する。
【０１０６】
重み計算部１２６は、中間テーブル選択部１２５からＭ個の中間テーブルおよびユーザの選択結果を受け付ける。すると、重み計算部１２６は、関数記憶部１２２からＮ個の距離関数を読み出し、データ記憶部１２１から変換例の出力テーブルを読み出す。重み計算部１２６は、Ｍ個の中間テーブルそれぞれと出力テーブルとを比較し、Ｎ個の距離関数を用いてＭ×Ｎ個の推定距離を算出する。そして、重み計算部１２６は、前述の算出方法により、Ｍ×Ｎ個の推定距離とユーザの選択結果から重みベクトルλを算出する。重み計算部１２６は、クライアント通信部１２３を介してサーバ装置２００に重みベクトルλを送信する。なお、第２の実施の形態ではＭ×Ｎ個の推定距離をクライアント装置１００が再計算しているが、サーバ装置２００が計算したＭ×Ｎ個の推定距離をサーバ装置２００からクライアント装置１００に送信するようにしてもよい。
【０１０７】
変換プログラム実行部１２７は、探索要求部１２４が変換例を送信した後、サーバ装置２００からクライアント通信部１２３を介して変換プログラムを受信する。すると、変換プログラム実行部１２７は、クライアント通信部１２３にソケットをクローズさせてサーバ装置２００との接続を切断させる。また、変換プログラム実行部１２７は、データ記憶部１２１から変換例以外の入力テーブルを読み出し、変換例以外の入力テーブルに対して変換プログラムを実行して変換例以外の出力テーブルを生成する。そして、変換プログラム実行部１２７は、変換例以外の出力テーブルを表示装置１１１に表示する。
【０１０８】
サーバ装置２００は、関数記憶部２２１、グラフ記憶部２２２、キュー２２３、サーバ通信部２２４、グラフ探索部２２５および重み更新部２２６を有する。関数記憶部２２１およびグラフ記憶部２２２は、例えば、サーバ装置２００が有するＲＡＭまたはＨＤＤの記憶領域を用いて実現される。サーバ通信部２２４は、例えば、サーバ装置２００が有するＣＰＵが実行するプログラムおよび通信インタフェースを用いて実現される。グラフ探索部２２５および重み更新部２２６は、例えば、プログラムを用いて実現される。
【０１０９】
関数記憶部２２１は、データ型に応じて予め定義されたＮ個の距離関数ｈ０（ｎ），…，ｈＮ−１（ｎ）を記憶する。関数記憶部２２１に記憶される距離関数は、クライアント装置１００の関数記憶部１２２に記憶されるものと同じである。また、関数記憶部２２１は、Ｎ個の距離関数に適用するＮ個の重みλ０，…，λＮ−１を列挙した重みベクトルλを記憶する。距離関数ｈ０（ｎ），…，ｈＮ−１（ｎ）の重み付き和が全体の距離関数Ｈ（λ，ｎ）である。グラフ探索の開始時には、重みベクトルλの初期値が関数記憶部２２１に記憶されている。重みベクトルλは重み更新部２２６により更新されることがある。
【０１１０】
グラフ記憶部２２２は、探索中のグラフのグラフ情報を記憶する。グラフ情報は、ノード間の接続関係を示すトポロジ情報を含む。また、グラフ情報は、末端の中間ノード（検討中の中間ノード）とそれ以外の中間ノード（検討済みの中間ノード）を区別する情報を含む。また、グラフ情報は、各ノードの評価値ｆ（ｎ）を含む。
【０１１１】
キュー２２３は、最大で所定個までレコードを格納可能なＦＩＦＯ（First In First Out）型バッファである。キュー２２３は、例えば、リングバッファを用いて実現できる。キュー２２３は、直近に算出された高々所定個の推定距離ｈ（ｎ）を記憶する。グラフ探索が開始されてから所定個に達するまでは、算出された推定距離ｈ（ｎ）がキュー２２３の末尾に順次挿入される。所定個に達すると、キュー２２３の先頭から最も古い推定距離ｈ（ｎ）が削除され、新しい推定距離ｈ（ｎ）がキュー２２３の末尾に挿入される。
【０１１２】
サーバ通信部２２４は、クライアント装置１００との間でソケット通信を行う。サーバ通信部２２４は、クライアント装置１００から接続要求を受信するためのソケットを生成して待機する。サーバ通信部２２４は、クライアント装置１００から接続要求があるとクライアント装置１００と接続を確立し、個別通信のための接続ソケットを生成する。
【０１１３】
グラフ探索部２２５は、クライアント装置１００からサーバ通信部２２４を介して、変換例である入力テーブルおよび出力テーブルを受信する。すると、グラフ探索部２２５は、関数記憶部２２１に記憶されたＮ個の距離関数および重みベクトルλを用いて、入力テーブルが出力テーブルに変換されるデータ変換方法の組み合わせを探索するグラフ探索を開始する。グラフ探索の間、グラフ探索部２２５は、グラフ記憶部２２２に記憶されたグラフ情報を適宜更新する。また、グラフ探索部２２５は、新たな推定距離ｈ（ｎ）を算出する毎に、算出した推定距離ｈ（ｎ）をキュー２２３に格納する。
【０１１４】
また、グラフ探索部２２５は、グラフ探索の間にキュー２２３を監視し、グラフ探索が停滞しているか判定する。直近の推定距離ｈ（ｎ）の減少率が閾値を下回る場合、推定距離ｈ（ｎ）が収束しておりグラフ探索が停滞していると判定される。グラフ探索が停滞している場合、グラフ探索部２２５は、グラフに含まれる末端の中間ノード（検討中の中間ノード）からＭ個の中間ノードを選択する。そして、グラフ探索部２２５は、選択した中間ノードが示すＭ個の中間テーブルを、サーバ通信部２２４を介してクライアント装置１００に送信する。Ｍ個の中間テーブルを送信した後、グラフ探索部２２５は、クライアント装置１００からの応答を待たずにグラフ探索を進めてよい。
【０１１５】
重み更新部２２６は、グラフ探索部２２５がＭ個の中間テーブルを送信した後、サーバ通信部２２４に生成された接続ソケットを監視する。接続ソケットの監視により、重み更新部２２６は、クライアント装置１００から重みベクトルλが受信されたことを検出する。重みベクトルλが受信されると、重み更新部２２６は、受信された新たな重みベクトルλを関数記憶部２２１に格納する。また、重み更新部２２６は、新たな重みベクトルλによって更新された距離関数Ｈ（λ，ｎ）を用いて、各中間ノードの評価値ｆ（ｎ）を再計算してグラフ記憶部２２２のグラフ情報を更新する。ただし、評価値ｆ（ｎ）が更新されても、開始ノードに戻ってグラフ探索をやり直すなどの手戻りは発生しない。
【０１１６】
図１２は、関数テーブルの例を示す図である。
サーバ装置２００の関数記憶部２２１は、関数テーブル２３１を記憶する。関数テーブル２３１は、関数ＩＤと距離関数と重みの項目を含む。関数ＩＤの項目には、Ｎ個の距離関数を識別する識別子が記載される。距離関数の項目には、距離関数ｈ０（ｎ），ｈ１（ｎ），…，ｈＮ−１（ｎ）の内容が記載される。重みの項目には、距離関数ｈ０（ｎ），ｈ１（ｎ），…，ｈＮ−１（ｎ）に対応する重みλ０，λ１，…，λＮ−１が記載される。クライアント装置１００の関数記憶部１２２も、関数テーブル２３１と同様のテーブルを記憶する。ただし、関数記憶部１２２は重みを記憶しなくてよい。
【０１１７】
図１３は、ＯＰＥＮリストおよびＣＬＯＳＥリストの例を示す図である。
サーバ装置２００のグラフ記憶部２２２は、ＯＰＥＮリスト２３２およびＣＬＯＳＥリスト２３３を記憶する。ＯＰＥＮリスト２３２は、グラフの末端のノード、すなわち、検討中のノードの情報を含む。ＣＬＯＳＥリスト２３３は、グラフの末端以外のノード、すなわち、検討済みのノードの情報を含む。グラフ探索中、ＯＰＥＮリスト２３２とＣＬＯＳＥリスト２３３の間でノード情報が移動することがある。
【０１１８】
ＯＰＥＮリスト２３２およびＣＬＯＳＥリスト２３３はそれぞれ、ノードＩＤ、テーブル、親ノードおよび評価値の項目を含む。ノードＩＤの項目には、各ノードを識別する識別子が記載される。テーブルの項目には、テーブルのデータ内容が記載される。親ノードの項目には、各ノードについて１つ手前のノード（開始ノード側のノード）の識別子が登録される。評価値の項目には、各ノードの評価値ｆ（ｎ）が登録される。なお、第２の実施の形態ではＯＰＥＮリスト２３２およびＣＬＯＳＥリスト２３３は各ノードの評価値ｆ（ｎ）を含んでいるが、距離ｇ（ｎ）や推定距離ｈ（ｎ）を更に含んでもよい。
【０１１９】
図１４は、キューの例を示す図である。
キュー２２３は、ノードＩＤと推定距離の項目を含む。ノードＩＤの項目には、直近に推定距離ｈ（ｎ）が算出されたノードの識別子が記載される。推定距離の項目には、直近の所定個の推定距離ｈ（ｎ）が記載される。図１４では、７個の推定距離ｈ（ｎ１０），ｈ（ｎ１１），…，ｈ（ｎ１６）がキュー２２３に格納されている。図１４において、下側がキュー２２３の先頭であり、上側がキュー２２３の末尾である。新しい推定距離は上側から挿入され、既存の推定距離は下方にシフトする。キュー２２３の容量を超えると、最も古い推定距離が下側から溢れて削除される。
【０１２０】
次に、クライアント装置１００とサーバ装置２００の処理手順について説明する。
図１５は、クライアント装置とサーバ装置の通信例を示すシーケンス図である。
サーバ装置２００は、システムコールｓｏｃｋｅｔを発行し、接続要求を受信できるようにソケットを生成しておく（Ｓ２０）。サーバ装置２００は、システムコールｌｉｓｔｅｎを発行し、接続要求を検出できるように接続準備を行って待機する（Ｓ２１）。
【０１２１】
クライアント装置１００は、ユーザからデータ変換要求を受け付けると、システムコールｓｏｃｋｅｔを発行し、ソケットを生成する（Ｓ１０）。クライアント装置１００は、システムコールｃｏｎｎｅｃｔを発行し、生成されたソケットを用いてサーバ装置２００に接続する（Ｓ１１）。サーバ装置２００は、システムコールａｃｃｅｐｔを発行し、接続ソケットを生成してクライアント装置１００との接続を確立する（Ｓ２２）。クライアント装置１００は、システムコールｓｅｎｄを発行し、入力テーブルと出力テーブルとを含む変換例をサーバ装置２００に送信する（Ｓ１２）。サーバ装置２００は、システムコールｒｅｃｖを発行し、変換例をクライアント装置１００から受信する（Ｓ２３）。
【０１２２】
以上の通信を通じて、サーバ装置２００のグラフ探索が開始する。以下に説明するステップＳ１４，Ｓ１５，Ｓ２４〜Ｓ２６は、グラフ探索の進行状況から要否が判断されるオプションである。ステップＳ１４，Ｓ１５，Ｓ２４〜Ｓ２６は、１回も実行されないこともあるし、１回だけ実行されることもあるし、２回以上繰り返し実行されることもある。
【０１２３】
クライアント装置１００は、システムコールｓｅｌｅｃｔを発行し、定期的にソケットを確認してデータ到着を待つ（Ｓ１３）。重みベクトルλの更新を試みる場合、サーバ装置２００は、システムコールｓｅｎｄを発行し、中間テーブルをクライアント装置１００に送信する（Ｓ２４）。中間テーブルの送信後、サーバ装置２００は、システムコールｓｅｌｅｃｔを発行し、定期的に接続ソケットを確認してデータ到着を待つ（Ｓ２５）。
【０１２４】
クライアント装置１００は、受信チェックでデータ到着が検出されると、システムコールｒｅｃｖを発行し、サーバ装置２００からの中間テーブルを受信する（Ｓ１４）。重みベクトルλを算出すると、クライアント装置１００は、システムコールｓｅｎｄを発行し、重みベクトルλをサーバ装置２００に送信する（Ｓ１５）。サーバ装置２００は、受信チェックでデータ到着が検出されると、システムコールｒｅｃｖを発行し、クライアント装置１００からの重みベクトルλを受信する（Ｓ２６）。
【０１２５】
サーバ装置２００のグラフ探索が終了すると、サーバ装置２００は、システムコールｓｅｎｄを発行し、変換プログラムをクライアント装置１００に送信する（Ｓ２７）。そして、サーバ装置２００は、システムコールｃｌｏｓｅを発行し、接続ソケットを閉じる（Ｓ２８）。クライアント装置１００は、システムコールｒｅｃｖを発行し、変換プログラムをサーバ装置２００から受信する（Ｓ１６）。そして、クライアント装置１００は、システムコールｃｌｏｓｅを発行し、ソケットを閉じる（Ｓ１７）。
【０１２６】
図１６は、グラフ探索の手順例を示すフローチャートである。
（Ｓ３０）グラフ探索部２２５は、入力テーブルおよび出力テーブルを受信する。入力テーブルに対応する開始ノードＳと出力ノードに対応する終了ノードＧが形成される。
【０１２７】
（Ｓ３１）グラフ探索部２２５は、ＯＰＥＮリスト２３２を開始ノードＳのみ含むよう初期化し、ＣＬＯＳＥリスト２３３を空集合に初期化する。
（Ｓ３２）グラフ探索部２２５は、開始ノードＳの評価値ｆ（ｎ０）を算出する。開始ノードＳの距離ｇ（ｎ０）は０であるため、開始ノードＳの評価値ｆ（ｎ０）は推定距離ｈ（ｎ０）＝Ｈ（λ，ｎ０）である。重みベクトルλ＝（λ０，…，λＮ−１）は初期値を使用する。グラフ探索部２２５は、入力テーブルと出力テーブルを比較し、関数テーブル２３１に登録されたＮ個の距離関数ｈ０（ｎ），…，ｈＮ−１（ｎ）を用いてＮ個の推定距離を算出し、重みベクトルλで重み付けして全体の推定距離ｈ（ｎ０）を算出する。Ｎ個の距離関数には、文字列の編集距離を算出するもの、数値の差または比を算出するもの、時刻の差を算出するもの、テーブルの列数の差を算出するものなどが含まれ得る。
【０１２８】
（Ｓ３３）グラフ探索部２２５は、ＯＰＥＮリスト２３２が空であるか（空集合φであるか）判断する。ＯＰＥＮリスト２３２が空の場合はステップＳ４８に進み、ＯＰＥＮリスト２３２が空でない場合はステップＳ３４に進む。
【０１２９】
（Ｓ３４）グラフ探索部２２５は、ＯＰＥＮリスト２３２の中から評価値ｆ（ｎ）が最小のノードを抽出する。評価値ｆ（ｎ）が最小のノードが２以上ある場合は何れか１つのノードを抽出する。ここで抽出したノードをノードｎと表記する。
【０１３０】
（Ｓ３５）グラフ探索部２２５は、ノードｎが終了ノードＧであるか、すなわち、ノードｎが示すテーブルが出力テーブルと一致するか判断する。ノードｎが終了ノードＧである場合はステップＳ４７に進み、終了ノードＧでない場合はステップＳ３６に進む。
【０１３１】
（Ｓ３６）グラフ探索部２２５は、ノードｎをＣＬＯＳＥリスト２３３に移動する。
（Ｓ３７）グラフ探索部２２５は、中間テーブル送信を検討する。中間テーブル送信については後述する。そして、ステップＳ３８に進む。
【０１３２】
（Ｓ４７）グラフ探索部２２５は、開始ノードＳから終了ノードＧに到達するパス上のデータ変換方法を列挙し、列挙したデータ変換方法を順に実行する変換プログラムを生成する。変換プログラムは、プログラミング言語で記載されたソースコードでもよいし、実行可能な命令を含むオブジェクトコードでもよい。また、変換プログラムは、プログラミング言語でない記載方法で記載された変換ルールでもよい。グラフ探索部２２５は、クライアント装置１００に変換プログラムを送信する。そして、グラフ探索が終了する。
【０１３３】
（Ｓ４８）グラフ探索部２２５は、グラフ探索に失敗したことを示すエラーメッセージをクライアント装置１００に送信する。そして、グラフ探索が終了する。
図１７は、グラフ探索の手順例を示すフローチャート（続き）である。
【０１３４】
（Ｓ３８）グラフ探索部２２５は、ノードｎが示すテーブルに対して、予め用意された複数のデータ変換方法それぞれを試行して複数の中間テーブルを生成する。複数のデータ変換方法には、テーブルの列を削除するもの、補助テーブルを結合するもの、１つの列から文字または数値を抽出するもの、２つの列の文字または数値を合成するものなどが含まれ得る。生成された複数の中間テーブルを示す複数の中間ノードが形成される。複数の中間ノードそれぞれについて以下のステップＳ３９〜Ｓ４６が実行される。ここで生成した複数の中間ノードそれぞれをノードｍと表記する。
【０１３５】
（Ｓ３９）グラフ探索部２２５は、ノードｍの評価値ｆ’（ｍ）を算出する。ノードｍの評価値ｆ’（ｍ）は、距離ｇ（ｍ）と推定距離ｈ（ｍ）＝Ｈ（λ，ｍ）の和である。ノードｍの距離ｇ（ｍ）は、ノードｎの距離ｇ（ｎ）よりコストｃｏｓｔ（ｎ，ｍ）だけ大きい。ｃｏｓｔ（ｎ，ｍ）＝１であってもよく、距離ｇ（ｍ）は開始ノードＳからノードｍまでのホップ数であってもよい。また、グラフ探索部２２５は、ノードｍが示す中間テーブルと出力テーブルとを比較し、関数テーブル２３１に登録されたＮ個の距離関数を用いてＮ個の推定距離を算出し、重みベクトルλで重み付けして全体の推定距離ｈ（ｍ）を算出する。重みベクトルλは最新のものを使用する。
【０１３６】
（Ｓ４０）グラフ探索部２２５は、ノードｍがＯＰＥＮリスト２３２に含まれているか判断する。すなわち、グラフ探索部２２５は、ノードｍが示す中間テーブルが、ＯＰＥＮリスト２３２に含まれる何れかのノードが示す中間テーブルと一致するか判断する。ノードｍがＯＰＥＮリスト２３２に含まれる場合はステップＳ４１に進み、ノードｍがＯＰＥＮリスト２３２に含まれない場合はステップＳ４３に進む。
【０１３７】
（Ｓ４１）グラフ探索部２２５は、ステップＳ３９で算出した評価値ｆ’（ｍ）とＯＰＥＮリスト２３２に登録されている前回の評価値ｆ（ｍ）とを比較し、評価値ｆ’（ｍ）が評価値ｆ（ｍ）より小さいか判断する。ｆ’（ｍ）＜ｆ（ｍ）の場合はステップＳ４２に進み、ｆ’（ｍ）≧ｆ（ｍ）の場合はステップＳ３３に進む。
【０１３８】
（Ｓ４２）グラフ探索部２２５は、ノードｍの親ノードをノードｎに変更する。すなわち、ノードｍに到達するパスが変更される。そして、ステップＳ３３に進む。
（Ｓ４３）グラフ探索部２２５は、ノードｍがＣＬＯＳＥリスト２３３に含まれているか判断する。すなわち、グラフ探索部２２５は、ノードｍが示す中間テーブルが、ＣＬＯＳＥリスト２３３に含まれる何れかのノードが示す中間テーブルと一致するか判断する。ノードｍがＣＬＯＳＥリスト２３３に含まれる場合はステップＳ４４に進み、ノードｍがＣＬＯＳＥリスト２３３に含まれない場合はステップＳ４６に進む。後者の場合、ノードｍが示す中間テーブルは初めて生成されたものである。
【０１３９】
（Ｓ４４）グラフ探索部２２５は、ステップＳ３９で算出した評価値ｆ’（ｍ）とＣＬＯＳＥリスト２３３に登録されている前回の評価値ｆ（ｍ）とを比較し、評価値ｆ’（ｍ）が評価値ｆ（ｍ）より小さいか判断する。ｆ’（ｍ）＜ｆ（ｍ）の場合はステップＳ４５に進み、ｆ’（ｍ）≧ｆ（ｍ）の場合はステップＳ３３に進む。
【０１４０】
（Ｓ４５）グラフ探索部２２５は、ノードｍをＣＬＯＳＥリスト２３３からＯＰＥＮリスト２３２に移動する。また、グラフ探索部２２５は、ノードｍの親ノードをノードｎに変更する。これにより、ノードｍに到達するパスが変更され、ノードｍが再び検討中のノード（探索中のノード）になる。そして、ステップＳ３３に進む。
【０１４１】
（Ｓ４６）グラフ探索部２２５は、新たに生成されたノードであるノードｍをＯＰＥＮリスト２３２に追加する。そして、ステップＳ３３に進む。
図１８は、中間テーブル送信の手順例を示すフローチャートである。
【０１４２】
中間テーブル送信は、前述のステップＳ３７で実行される。
（Ｓ５０）グラフ探索部２２５は、ＳＥＮＴフラグがＴｒｕｅであるか判断する。ＳＥＮＴフラグがＴｒｕｅの場合は中間テーブル送信が終了し、ＳＥＮＴフラグがＦａｌｓｅの場合はステップＳ５１に進む。なお、ＳＥＮＴフラグの初期値はＦａｌｓｅである。
【０１４３】
（Ｓ５１）グラフ探索部２２５は、ノードｎについて算出された推定距離ｈ（ｎ）＝Ｈ（λ，ｎ）をキュー２２３の末尾に挿入する。ノードｎの推定距離ｈ（ｎ）はステップＳ３２またはステップＳ３９で算出されている。
【０１４４】
（Ｓ５２）グラフ探索部２２５は、キュー２２３が満杯か判断する。キュー２２３が満杯の場合はステップＳ５３に進み、満杯でない場合は中間テーブル送信が終了する。
（Ｓ５３）グラフ探索部２２５は、キュー２２３に格納された推定距離ｈ（ｎ）の変化率を算出する。具体的には、グラフ探索部２２５は、キュー２２３に格納された推定距離ｈ（ｎ）の最大値と最小値を特定し、（最大値−最小値）÷最大値を変化率とする。
【０１４５】
（Ｓ５４）グラフ探索部２２５は、ステップＳ５３で算出した変化率が所定の閾値ｄｉｆｆ未満であるか判断する。変化率が閾値ｄｉｆｆ未満の場合はステップＳ５５に進み、変化率が閾値ｄｉｆｆ以上の場合は中間テーブル送信が終了する。
【０１４６】
（Ｓ５５）グラフ探索部２２５は、ＯＰＥＮリスト２３２に含まれる中間ノードをＭ個のクラスタに分類する。例えば、グラフ探索部２２５は、ｋ−ｍｅａｎｓ法などのクラスタリングアルゴリズムを用いて、推定距離ｈ（ｎ）が近い中間ノードが同じクラスタに属するように推定距離ｈ（ｎ）の分布をＭ個に分割する。
【０１４７】
（Ｓ５６）グラフ探索部２２５は、ステップＳ５５で分割されたＭ個のクラスタそれぞれから１つの中間ノードを代表ノードとして選択する。例えば、グラフ探索部２２５は、各クラスタから最小の推定距離ｈ（ｎ）をもつ中間ノードを選択する。
【０１４８】
（Ｓ５７）グラフ探索部２２５は、ステップＳ５６で選択したＭ個の代表ノードが示すＭ個の中間テーブルをクライアント装置１００に送信する。
（Ｓ５８）グラフ探索部２２５は、ＳＥＮＴフラグをＴｒｕｅに更新する。
【０１４９】
図１９は、重み更新の手順例を示すフローチャートである。
以下に説明する重み更新は、上記のステップＳ５７でＭ個の中間テーブルが送信された後、図１６〜１８の処理とは非同期に実行される。すなわち、グラフ探索部２２５は、クライアント装置１００からの応答を待たずにグラフ探索を進行する。
【０１５０】
（Ｓ６０）重み更新部２２６は、クライアント装置１００からの接続要求に応じて生成された接続ソケットを監視し、クライアント装置１００からのデータの到着を待つ。
（Ｓ６１）重み更新部２２６は、重みベクトルλを受信したか判断する。重みベクトルλを受信した場合、ステップＳ６２に進む。重みベクトルλを受信していない場合、ステップＳ６１を繰り返し実行して重みベクトルλの受信を待つ。
【０１５１】
（Ｓ６２）重み更新部２２６は、ＯＰＥＮリスト２３２およびＣＬＯＳＥリスト２３３のノード集合の中から１つのノードを選択する。選択対象のノード集合は、開始ノードＳおよび現時点で顕在化している全ての中間ノードであり、検討中ノード（探索中ノード）と検討済みノード（探索済みノード）の両方を含む。ＣＬＯＳＥリスト２３３のノードについて以下のステップＳ６３，Ｓ６４の処理を実行するのは、ステップＳ４４で前回の評価値が参照され、所定の条件を満たす場合にＣＬＯＳＥリスト２３３からＯＰＥＮリスト２３２にノードが移動するためである。ここで選択したノードをノードｎと表記する。
【０１５２】
（Ｓ６３）重み更新部２２６は、ノードｎが示すテーブルと終了ノードＧが示す出力テーブルとを比較し、Ｎ個の距離関数ｈｉ（ｎ）と更新前の重みベクトルλｏｌｄを用いて全体の推定距離ｈ（ｎ）＝Ｈ（λｏｌｄ，ｎ）を算出する。ただし、ノードｎについて、過去に算出したＮ個の距離関数ｈｉ（ｎ）それぞれの推定距離または全体の推定距離ｈ（ｎ）が保存されている場合、保存されている推定距離を流用してもよい。そして、重み更新部２２６は、ノードｎの距離ｇ（ｎ）を、ノードｎの現在の評価値ｆ（ｎ）から上記の推定距離ｈ（ｎ）を引くことで算出する。ただし、ノードｎについて、過去に算出した距離ｇ（ｎ）が保存されている場合、距離ｇ（ｎ）を再計算しなくてもよい。
【０１５３】
（Ｓ６４）重み更新部２２６は、ステップＳ６３で算出したＮ個の距離関数ｈｉ（ｎ）の推定距離と、ステップＳ６１で受信した更新後の重みベクトルλｎｅｗを用いて、全体の推定距離ｈ（ｎ）＝Ｈ（λｎｅｗ，ｎ）を算出する。そして、重み更新部２２６は、更新された推定距離ｈ（ｎ）に距離ｇ（ｎ）を加えて、更新された評価値ｆ（ｎ）を算出する。
【０１５４】
（Ｓ６５）重み更新部２２６は、ＯＰＥＮリスト２３２およびＣＬＯＳＥリスト２３３に含まれる全てのノードを選択したか判断する。全てのノードを選択した場合はステップＳ６６に進み、未選択のノードがある場合はステップＳ６２に進む。
【０１５５】
（Ｓ６６）重み更新部２２６は、ＳＥＮＴフラグをＦａｌｓｅに更新する。
図２０は、クライアント制御の手順例を示すフローチャートである。
（Ｓ７０）探索要求部１２４は、変換例である入力テーブルおよび出力テーブルと他の入力テーブルとを指定したデータ変換要求をユーザから受け付ける。探索要求部１２４は、サーバ装置２００に接続して入力テーブルおよび出力テーブルを送信する。
【０１５６】
（Ｓ７１）中間テーブル選択部１２５および変換プログラム実行部１２７は、サーバ装置２００への接続用のソケットを監視し、サーバ装置２００からのデータの到着を待つ。
（Ｓ７２）中間テーブル選択部１２５は、Ｍ個の中間テーブルを受信したか判断する。Ｍ個の中間テーブルを受信した場合はステップＳ７３に進み、Ｍ個の中間テーブルを受信していない場合はステップＳ７７に進む。なお、サーバ装置２００からクライアント装置１００へのＭ個の中間テーブルの送信は、１回も行われないこともあるし、１回だけ行われることもあるし、２回以上行われることもある。
【０１５７】
（Ｓ７３）中間テーブル選択部１２５は、サーバ装置２００から受信したＭ個の中間テーブルと保持している出力テーブルとを含む選択画面８０を生成する。中間テーブル選択部１２５は、生成した選択画面８０を表示装置１１１に表示する。
【０１５８】
（Ｓ７４）中間テーブル選択部１２５は、選択画面８０に対するユーザの選択操作を受け付ける。ユーザの選択操作によりＭ個の中間テーブルのうちの１つが選択される。
（Ｓ７５）重み計算部１２６は、Ｍ個の中間テーブル、出力テーブル、保持しているＮ個の距離関数ｈｉ（ｎ）およびステップＳ７４のユーザ選択結果から、新たな重みベクトルλを算出する。具体的には、重み計算部１２６は、Ｍ個の中間テーブルそれぞれと出力テーブルとを比較し、Ｎ個の距離関数ｈｉ（ｎ）を用いてＭ×Ｎ個の推定距離を算出する。重み計算部１２６は、ユーザが選択した１個の中間テーブルに対する１個の推定距離ｈ（ｎ）が小さくなり、ユーザが選択しなかったＭ−１個の中間テーブルに対するＭ−１個の推定距離ｈ（ｎ）が大きくなるように、重みベクトルλをチューニングする。
【０１５９】
（Ｓ７６）重み計算部１２６は、ステップＳ７５で算出した重みベクトルλをサーバ装置２００に送信する。そして、ステップＳ７２に進む。
（Ｓ７７）変換プログラム実行部１２７は、変換例に対する応答として変換プログラムを受信したか判断する。変換プログラムを受信した場合はステップＳ７８に進み、変換プログラムを受信していない場合はステップＳ７２に進む。
【０１６０】
（Ｓ７８）変換プログラム実行部１２７は、ユーザから指定された他の入力テーブル（変換例以外の入力データを含むテーブル）に対して変換プログラムを実行する。これにより、他の入力テーブルに対応する他の出力テーブルが生成される。
【０１６１】
（Ｓ７９）変換プログラム実行部１２７は、ステップＳ７８で生成された他の出力テーブルを表示装置１１１に表示する。ただし、変換プログラム実行部１２７は、他の出力テーブルをＨＤＤ１０３などのストレージ装置に保存してもよいし、他の出力デバイスに出力してもよいし、他の情報処理装置に送信してもよい。
【０１６２】
第２の実施の形態の情報処理システムによれば、Programming by Exampleにより少量のデータ変換例から変換プログラムが生成され、変換プログラムにより他のデータが変換される。よって、ユーザはプログラミング言語を用いて明示的に変換プログラムを記述しなくてよく、データ変換の負担を軽減することができる。
【０１６３】
また、データ変換例を実現するデータ変換方法の組み合わせは、グラフ探索によって発見される。グラフ探索では、Ａ＊アルゴリズムにより、距離関数を用いて各中間ノードと終了ノードとの間の距離が推定され、終了ノードに効率的に近付く方向に優先的に探索が進められる。よって、データ変換例を実現するデータ変換方法の組み合わせを効率的に探索できる。また、推定距離の算出では、中間テーブルと出力テーブルの差分が複数のデータ型の観点から評価され、データ型毎の推定距離の重み付き和が全体の推定距離となる。よって、異なる種類のデータ変換方法の組み合わせを適切に評価できる。
【０１６４】
また、グラフ探索の途中で幾つかの中間テーブルがユーザに提示され、出力テーブルに最も近い中間テーブルがユーザにより選択され、ユーザ選択に基づいて距離関数の重みベクトルが更新される。よって、変換対象のデータの特性に合わせて、グラフ探索が効率化されるように距離関数をチューニングすることができる。また、重みベクトルの更新とグラフ探索は非同期に行われ、中間テーブルを提示してから新しい重みベクトルが与えられるまでの間もグラフ探索が進行する。よって、重みベクトルの更新手続きがグラフ探索を阻害することを抑制できる。また、ユーザに重みベクトル自体を指定させる代わりに、好ましい中間テーブルを選択させ、ユーザの選択結果から新しい重みベクトルが算出される。よって、ユーザ操作が直感的となりユーザの負担が軽減される。
【０１６５】
上記については単に本発明の原理を示すものである。更に、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１６６】
１０  探索制御装置
１１  記憶部
１２  処理部
１３  入力データ
１４  出力データ
１５ａ，１５ｂ，１５ｃ，１５ｄ  中間データ
１６  選択情報
【図１】
2020144842.tif 000011
【図２】
2020144842.tif 000012
【図３】
2020144842.tif 000013
【図４】
2020144842.tif 000014
【図５】
2020144842.tif 000015
【図６】
2020144842.tif 000016
【図７】
2020144842.tif 000017
【図８】
2020144842.tif 000018
【図９】
2020144842.tif 000019
【図１０】
2020144842.tif 000020
【図１１】
2020144842.tif 000021
【図１２】
2020144842.tif 000022
【図１３】
2020144842.tif 000023
【図１４】
2020144842.tif 000024
【図１５】
2020144842.tif 000025
【図１６】
2020144842.tif 000026
【図１７】
2020144842.tif 000027
【図１８】
2020144842.tif 000028
【図１９】
2020144842.tif 000029
【図２０】
2020144842.tif 000030
【国際調査報告】
2020144842.tif 000031
2020144842.tif 000032