JP7112003B2 - 探索制御プログラム、探索制御方法および探索制御装置 - Google Patents
探索制御プログラム、探索制御方法および探索制御装置 Download PDFInfo
- Publication number
- JP7112003B2 JP7112003B2 JP2020565130A JP2020565130A JP7112003B2 JP 7112003 B2 JP7112003 B2 JP 7112003B2 JP 2020565130 A JP2020565130 A JP 2020565130A JP 2020565130 A JP2020565130 A JP 2020565130A JP 7112003 B2 JP7112003 B2 JP 7112003B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- node
- search
- intermediate data
- conversion
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N99/00—Subject matter not provided for in other groups of this subclass
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
- G06F16/285—Clustering or classification
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Description
本発明は探索制御プログラム、探索制御方法および探索制御装置に関する。
プログラミング言語を用いてプログラムを直接記述することなしにプログラムを生成できるエンドユーザプログラミング技術の1つに、「例」からプログラムを生成するProgramming by Example(PBE)がある。Programming by Exampleは、データ変換プログラムの生成に用いられることがある。例えば、データ変換例として入力データと出力データがユーザにより与えられる。すると、入力データを出力データに変換することができる変換ルールが探索され、探索された変換ルールを実現する変換プログラムが生成される。なお、実行軌跡の例から表計算プログラムを合成するプログラム合成装置が提案されている。
入力データを出力データに変換する変換プログラムは、文字列の分割やデータ項目の削除など、複数の小さなデータ変換方法を組み合わせることで実現され得る。そのようなデータ変換方法の組み合わせは、グラフ探索のように、入力データから1以上の中間データを経由して出力データに到達するデータ変換経路の探索によって発見できる。
ただし、データ変換方法の組み合わせの候補は多数存在するため、探索空間が膨大であり、多数の候補を網羅的に試行することは非効率である。そこで、入力データから異なるデータ変換方法によって複数の中間データを生成し、これら複数の中間データを評価して探索先の中間データを絞り込み、絞り込んだ中間データから他の中間データに変換するというように、段階的に探索を進めることが考えられる。例えば、出力データに効率的に近付いているかを評価する評価関数を用いて探索先の中間データを絞り込む。
しかし、探索処理では多様なデータ変換方法の組み合わせが試行されるため、探索先の中間データの絞り込み方法が問題となる。絞り込み方法が適切でない場合には無駄な探索が多く発生してしまう。この点、どのようなデータ変換例に対しても効率的にデータ変換経路を探索できるように絞り込み方法をチューニングしておくことは容易でない。
1つの側面では、本発明は、データ変換経路の探索を効率化する探索制御プログラム、探索制御方法および探索制御装置を提供することを目的とする。
1つの態様では、コンピュータに以下の処理を実行させる探索制御プログラムが提供される。入力データおよび出力データを取得する。入力データが中間データを経由して出力データに変換されるデータ変換経路を探索する探索処理であって、異なるデータ変換方法により入力データから複数の中間データを生成し、複数の中間データのうち探索先の中間データを絞り込んで探索先の中間データから他の中間データを生成することを含む探索処理を開始させる。探索処理の途中で生成された2以上の中間データを出力し、2以上の中間データのうちの一部の中間データの選択を示す選択情報を受け付ける。選択情報に基づいて、探索先の中間データの絞り込み方法を制御する。
また、1つの態様では、コンピュータが実行する探索制御方法が提供される。また、1つの態様では、記憶部と処理部とを有する探索制御装置が提供される。
1つの側面では、データ変換経路の探索を効率化できる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の探索制御装置の例を説明する図である。
第1の実施の形態の探索制御装置10は、Programming by Exampleによるデータ変換プログラムの生成を制御する。以下に説明する探索処理は、探索制御装置10が実行してもよいし他の装置に実行させてもよい。探索制御装置10は、情報処理装置やコンピュータと言うこともできる。探索制御装置10は、ユーザが操作するクライアント装置でもよいし、クライアント装置と連携するサーバ装置でもよい。
第1の実施の形態の探索制御装置10は、Programming by Exampleによるデータ変換プログラムの生成を制御する。以下に説明する探索処理は、探索制御装置10が実行してもよいし他の装置に実行させてもよい。探索制御装置10は、情報処理装置やコンピュータと言うこともできる。探索制御装置10は、ユーザが操作するクライアント装置でもよいし、クライアント装置と連携するサーバ装置でもよい。
探索制御装置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)などの特定用途の電子回路を含んでもよい。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
記憶部11は、入力データ13および出力データ14を記憶する。入力データ13および出力データ14は、互いに関連付けられてデータ変換例を形成する。入力データ13は変換前データを表し、出力データ14は入力データ13に対応する理想的な変換後データを表す。入力データ13および出力データ14は、例えば、ユーザから与えられる。
処理部12は、入力データ13および出力データ14を用いた探索処理を開始させる。処理部12は、自身が探索処理を実行してもよいし他の装置に探索処理を実行させてもよい。探索処理は、入力データ13が1以上の中間データを経由して出力データ14に変換されるデータ変換経路を探索するものである。データ変換経路は、文字列分割や四則演算や項目削除など、予め用意された複数のデータ変換方法のうち2以上のデータ変換方法を組み合わせることで実現される。探索処理によって探索されたデータ変換経路を実現するデータ変換プログラムが生成されることになる。
探索処理には、A*(エースター)アルゴリズムなど、段階的に中間データの生成を進める探索アルゴリズムが使用される。すなわち、探索処理は、異なるデータ変換方法により入力データ13から複数の中間データを生成し、それら複数の中間データのうち探索先の中間データを絞り込んで探索先の中間データから他の中間データを生成することを含む。ある変換元データから複数の中間データを生成し、次に変換元データとする中間データを選択することが繰り返される。このような探索処理は、グラフ探索として表現することもできる。その場合、入力データ13を示す開始ノードと、出力データ14を示す終了ノードと、中間データを示す複数の中間ノードとを含む有向グラフが形成される。ノード間のエッジは、1回のデータ変換方法の適用を表す。探索処理は、開始ノードから2以上のエッジを経由して終了ノードに到達する経路を探索することに相当する。
一例として、異なるデータ変換方法により入力データ13から中間データ15a,15b,15cが生成される。これら中間データ15a,15b,15cの中から探索先の中間データが絞り込まれる。中間データ15bが選択された場合、あるデータ変換方法により中間データ15bから中間データ15dが生成される。他のデータ変換方法に中間データ15bから更に他の中間データを生成することもできる。
入力データ13から中間データ15aへのデータ変換方法は、入力データ13の第1項目の文字列を空白で分割し、前半の部分文字列を別項目として追加するものである。入力データ13から中間データ15bへのデータ変換方法は、入力データ13の第2項目の数値と第3項目の数値の積を計算し、計算した積を別項目として追加するものである。入力データ13から中間データ15cへのデータ変換方法は、入力データ13の第2項目の数値と第3項目の数値の和を計算し、計算した和を別項目として追加するものである。中間データ15bから中間データ15dへのデータ変換方法は、入力データ13の第2項目に相当する中間データ15bの第2項目を削除するものである。出力データ14に一致する変換後データが出現するまで、このような探索処理が実行される。
探索処理の途中において、処理部12は、これまでに生成された中間データの中から2以上の中間データを抽出し、抽出した2以上の中間データを出力する。そして、処理部12は、出力した2以上の中間データのうちの一部の中間データ(例えば、何れか1つの中間データ)の選択を示す選択情報16を受け付ける。例えば、処理部12は、抽出した2以上の中間データを表示装置に表示し、一部の中間データをユーザに選択させ、ユーザが選択した中間データを示す選択情報16を受け付ける。選択される中間データは、例えば、提示された中間データのうち出力データ14に近いとユーザが考えるものである。
出力する中間データは、探索処理の途中で生成された中間データのうち、まだ変換元として使用されていない末端の中間データであることが好ましい。また、出力する中間データには、類似しない多様な中間データが含まれていることが好ましい。例えば、処理部12は、末端の中間データを、データ自体の類似度や入力データ13からの変換経路の共通度などの所定基準に基づいて、複数のクラスタに分類する。処理部12は、各クラスタから少なくとも1つの中間データを抽出することで、出力する中間データを決定する。
また、2以上の中間データを出力する契機は、探索処理が停滞していることであることが好ましい。例えば、処理部12は、生成した中間データの量または実行したデータ変換方法の回数が閾値を超えてもまだ出力データ14に到達しないとき、中間データの出力を決定する。また、例えば、処理部12は、直近に生成された中間データと出力データ14との間の類似度が向上していないとき、中間データの出力を決定する。一例として、処理部12は、中間データ15a,15dを出力することを決定する。
選択情報16を受け付けると、処理部12は、探索処理の途中において、選択情報16に基づいて探索先の中間データの絞り込み方法を制御する。例えば、処理部12は、出力した2以上の中間データの中から次の探索先を決定することを仮定した場合に、選択情報16で選択された中間データの優先度が高くなり、選択されなかった中間データの優先度が低くなるように、絞り込み方法をチューニングする。探索先の中間データの絞り込みに評価関数が使用されている場合、処理部12は、探索処理の途中で評価関数を更新してもよい。評価関数は、ある中間データと出力データ14との類似度を評価するものであってもよい。例えば、処理部12は、選択情報16で選択された中間データの評価が高くなり、選択されなかった中間データの評価が低くなるように、評価関数に含まれるパラメータを更新する。評価関数に含まれるパラメータは、異なる観点から出力データ14との類似度を評価する複数の距離関数を重み付けする重み値であってもよい。
なお、処理部12は、2以上の中間データを出力してから探索先の絞り込み方法をチューニングするまでの間、探索処理を停止させずに継続させてよい。すなわち、絞り込み方法のチューニングと探索処理とは非同期に実行することができる。探索先の絞り込み方法が変更されても、探索処理を始めからやり直さなくてよく、それ以降の中間データの生成において変更後の絞り込み方法が適用されることになる。
第1の実施の形態の探索制御装置10によれば、Programming by Exampleとして、入力データ13が1以上の中間データを経由して出力データ14に変換されるデータ変換経路が探索される。よって、ユーザはプログラミング言語を用いて明示的にデータ変換プログラムを記述しなくてもよく、データ変換の負担を軽減することができる。
また、探索処理の途中で2以上の中間データが出力され、その出力に応答して受け付けた選択情報16に基づいて、それ以降の探索における探索先の絞り込み方法が制御される。よって、入力データ13および出力データ14の特性に合わせて、探索先の絞り込み方法を動的にチューニングすることが可能となる。その結果、無駄な中間データの生成や遠回りな探索が抑制され、探索処理が効率化される。
また、好ましい中間データをユーザに選択させることで、ユーザにとって直感的な操作が可能となり、探索先の絞り込み方法のパラメータを直接変更する場合よりもユーザの負担が軽減される。また、探索先の絞り込み方法を探索開始前に事前にチューニングしておく負担を軽減できる。また、探索先の絞り込み方法のパラメータを教師無しで学習する場合には探索処理自体を反復実行することになるおそれがあるのに対し、第1の実施の形態では探索処理の途中でパラメータを変更すればよく処理時間を短縮できる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理システムの例を示す図である。
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理システムの例を示す図である。
第2の実施の形態の情報処理システムは、クライアント装置100およびサーバ装置200を含む。クライアント装置100は、第1の実施の形態の探索制御装置10に対応する。クライアント装置100とサーバ装置200とは、ネットワーク30を介して通信することができる。ネットワーク30は、LAN(Local Area Network)でもよいしインターネットなどの広域ネットワークでもよい。
クライアント装置100は、ユーザが操作するクライアントコンピュータである。クライアント装置100は、サーバ装置200と連携してProgramming by Exampleによるデータ変換を実現する。クライアント装置100は、入力データと出力データを対応付けた変換例をユーザから受け付け、変換例をサーバ装置200に送信し、変換例から生成された変換プログラムをサーバ装置200から受信する。クライアント装置100は、変換例に含まれていない他の入力データをユーザから受け付け、他の入力データに対して変換プログラムを実行し、他の入力データに対応する他の出力データを生成する。これにより、ユーザがプログラミングを行わなくてもデータ変換を実現できる。
サーバ装置200は、クライアント装置100や他のクライアント装置から利用可能なサーバコンピュータである。サーバ装置200は、Programming by Exampleにより変換プログラムを自動生成する。サーバ装置200は、入力データと出力データを対応付けた変換例をクライアント装置100から受信する。サーバ装置200は、変換例の入力データを変換例の出力データに変換できるような一般化された変換ルールを探索し、探索された変換ルールを実現する変換プログラムを生成する。サーバ装置200は、生成した変換プログラムをクライアント装置100に送信する。なお、第2の実施の形態ではクライアント装置100とサーバ装置200とを分離しているが、クライアント装置100とサーバ装置200を統合して両者の処理を同一装置上で実行することも可能である。
図3は、クライアント装置のハードウェア例を示す図である。
クライアント装置100は、バスに接続されたCPU101、RAM102、HDD103、画像インタフェース104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。サーバ装置200も、クライアント装置100と同様のハードウェアを有する。
クライアント装置100は、バスに接続されたCPU101、RAM102、HDD103、画像インタフェース104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。サーバ装置200も、クライアント装置100と同様のハードウェアを有する。
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から入力信号を受信する。入力デバイス112として、マウス、タッチパネル、タッチパッド、キーボードなど、任意の種類の入力デバイスを使用することができる。また、クライアント装置100に複数の種類の入力デバイスが接続されてもよい。
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
通信インタフェース107は、ネットワーク30に接続され、ネットワーク30を介してサーバ装置200と通信する。通信インタフェース107は、スイッチやルータなどの有線通信装置に接続される有線インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線インタフェースでもよい。
次に、Programming by Exampleによるデータ変換について説明する。
図4は、Programming by Exampleの実行例を示す図である。
クライアント装置100は、入力テーブル41および出力テーブル42を含む変換例をユーザから受け付ける。入力テーブル41は、変換したいデータの集合の中からユーザがサンプルとして抽出した入力データの例である。出力テーブル42は、入力テーブル41に基づいてユーザが手作業で作成した出力データの例であり、入力テーブル41に対応する理想的な出力データである。すると、クライアント装置100は、入力テーブル41および出力テーブル42をサーバ装置200に送信する。
図4は、Programming by Exampleの実行例を示す図である。
クライアント装置100は、入力テーブル41および出力テーブル42を含む変換例をユーザから受け付ける。入力テーブル41は、変換したいデータの集合の中からユーザがサンプルとして抽出した入力データの例である。出力テーブル42は、入力テーブル41に基づいてユーザが手作業で作成した出力データの例であり、入力テーブル41に対応する理想的な出力データである。すると、クライアント装置100は、入力テーブル41および出力テーブル42をサーバ装置200に送信する。
サーバ装置200は、入力テーブル41を出力テーブル42に変換することができる変換プログラム44を生成する。入力テーブル41を出力テーブル42に変換するにあたり、変換プログラム44は、補助テーブル43のような入力テーブル41以外の外部データを参照する場合がある。ここで変換プログラム44は、入力テーブル41以外の入力テーブルにも適用可能な一般化された変換ルールを示していればよい。変換プログラム44は、実行可能な命令を含んでもよいし、実行可能形式でない変換ルールの記述を含んでもよい。サーバ装置200は、変換プログラム44をクライアント装置100に送信する。
クライアント装置100は、変換プログラム44をサーバ装置200から受信する。また、クライアント装置100は、入力テーブル45をユーザから受け付ける。入力テーブル45は、変換したいデータの集合のうち入力テーブル41として抽出された入力データ以外の他の入力データである。クライアント装置100は、入力テーブル45に変換プログラム44を適用して出力テーブル46を生成する。変換プログラム44が実行可能形式である場合、クライアント装置100は、変換プログラム44を起動して入力テーブル45を変換プログラム44の引数として与えればよい。変換プログラム44が実行可能形式でない場合、クライアント装置100は、変換プログラム44が示す変換ルールを解釈して、入力テーブル45を出力テーブル46に変換すればよい。
一例として、入力テーブル41は、IDと日時と乗車駅の列(カラム)を含む。出力テーブル42は、日付と駅名と性別と年齢の列を含む。補助テーブル43は、IDと性別と年齢の列を含む。出力テーブル42の日付は、入力テーブル41の日時の列に記載された文字列の一部分である。出力テーブル42の駅名は、入力テーブル41の乗車駅に対応する。ただし、データ不存在の表現方法が、入力テーブル41では「0000」であるのに対して出力テーブル42では「null」である。出力テーブル42の性別は、入力テーブル41と同じIDに関連付けられている補助テーブル43の性別である。出力テーブル42の年齢は、入力テーブル41と同じIDに関連付けられている補助テーブル43の年齢である。ただし、補助テーブル43では年齢を表す数値に「歳」や「才」など付加的文字が付されていることがあるのに対し、出力テーブル42では付加的文字は付されない。
入力テーブル45は入力テーブル41に対応し、出力テーブル46は出力テーブル42に対応する。すなわち、入力テーブル45は、IDと日時と乗車駅の列を含む。出力テーブル46は、日付と駅名と性別と年齢の列を含む。出力テーブル46の日付は、入力テーブル45の日時の列に記載された文字列の一部分である。出力テーブル46の駅名は、入力テーブル45の乗車駅に対応する。ただし、上記のように駅名については文字列変換を要することがある。出力テーブル46の性別は、入力テーブル45と同じIDに関連付けられている補助テーブル43の性別である。出力テーブル46の年齢は、入力テーブル45と同じIDに関連付けられている補助テーブル43の年齢である。ただし、上記のように年齢については文字列変換を要することがある。
このような変換プログラム44は、文字列変換や列分割などの2以上の小さなデータ変換方法を組み合わせることで生成することができる。
図5は、データ変換方法の組み合わせ例を示す図である。
図5は、データ変換方法の組み合わせ例を示す図である。
上記の変換プログラム44は、データ変換方法51~56の組み合わせによって実現される。入力テーブル41に対してデータ変換方法51~56を順に実行することで、出力テーブル42を生成することができる。また、入力テーブル45に対してデータ変換方法51~56を順に実行することで、出力テーブル46を生成することができる。
データ変換方法51は、与えられた入力テーブルに補助テーブル43を結合する補助テーブル結合である。データ変換方法52は、乗車駅の列に記載された「0000」を「null」に置換するnull置換である。データ変換方法53は、日時の列を日付の列と時刻の列に分割する列分割である。データ変換方法54は、IDの列と時刻の列を削除する列削除である。データ変換方法55は、年齢の列から数値を抽出する数値抽出である。データ変換方法56は、元の年齢の列を削除する列削除である。
データ変換方法51は、IDと日時と乗車駅の列をもつ入力テーブルから、IDと日時と乗車駅と性別と年齢の列をもつ中間テーブルを生成する。性別と年齢は、IDに基づいて補助テーブル43から検索されたものである。データ変換方法52は、データ変換方法51が生成した中間テーブルから、IDと日時と駅名と性別と年齢の列をもつ中間テーブルを生成する。駅名は、データ不存在を「null」で表現したものである。
データ変換方法53は、データ変換方法52が生成した中間テーブルから、IDと日付と時刻と駅名と性別と年齢の列をもつ中間テーブルを生成する。日付は、日時を表す文字列のうち空白より前の部分である。時刻は、日時を表す文字列のうち空白より後ろの部分である。データ変換方法54は、データ変換方法53が生成した中間テーブルから、日付と駅名と性別と年齢の列をもつ中間テーブルを生成する。
データ変換方法55は、データ変換方法54が生成した中間テーブルから、日付と駅名と性別と年齢(旧列)と年齢(新列)の列をもつ中間テーブルを生成する。年齢(新列)は、年齢(旧列)から数値のみを抽出したものである。データ変換方法56は、データ変換方法55が生成した中間テーブルから、日付と駅名と性別と年齢の列をもつ中間テーブルを生成する。数値抽出前の年齢(旧列)は削除されている。
このように、データ変換方法51~56を順に実行することで、入力テーブル41を出力テーブル42に変換することができる。ただし、変換例を実現するデータ変換方法の組み合わせは複数通り存在することもある。例えば、データ変換方法55の数値抽出を、データ変換方法51の補助テーブル結合より先に実行することも可能である。
サーバ装置200は、入力テーブル41と出力テーブル42を受信すると、予め用意された複数の小さなデータ変換方法のうち2以上のデータ変換方法を組み合わせることを試行し、入力テーブル41を出力テーブル42に変換できる組み合わせを探索する。
複数のデータ変換方法は、構造的変換と構文的変換と意味的変換に分類される。構造的変換は、列削除や列移動などテーブル構造を変換するものである。構文的変換は、文字列抽出や文字列分割など、変換対象テーブルに含まれるデータの範囲内でデータ表現を変換するものである。意味的変換は、補助テーブル結合など、変換対象テーブルの外部の情報を利用して変換対象テーブルに含まれるデータの意味を解釈するものである。
1つの入力テーブルまたは中間テーブルに対して、適用可能な様々なデータ変換方法の候補が存在する。適用するデータ変換方法を選択することは、変換対象テーブルの中から演算対象の列を選択することも含む。例えば、特定の1つの列に記載された文字列をスペースで分割するもの、特定の1つの列を削除するもの、特定の2つの列に記載された数値を加算するものなど、様々なデータ変換方法の候補が存在する。
入力テーブル41を出力テーブル42に変換するデータ変換方法の組み合わせの探索は、開始ノードから終了ノードに到達するパスを探索するグラフ探索として表現できる。グラフは、入力テーブルに対応する1つの開始ノードと、出力テーブルに対応する1つの終了ノードと、中間テーブルに対応する多数の中間ノードとを含む。このグラフは有向グラフであり、ノード間を接続するエッジとしてデータ変換方法に対応する方向付きエッジを含む。あるノードから別のノードへのエッジは、1つのデータ変換方法によって、あるノードに対応するテーブルが別のノードに対応するテーブルに変換されることを表す。
グラフ探索の開始時点では、中間ノードは潜在的に存在するノードであり、ノード間のエッジは未知である。あるデータ変換方法によって新たな中間テーブルが生成されると、その中間テーブルを表す中間ノードが顕在化し、変換前テーブルに対応するノードから顕在化した中間ノードへのエッジが生成される。開始ノードから終了ノードに到達するエッジの列が発見されるとグラフ探索が終了する。開始ノードから終了ノードに到達するエッジの列は、採用するデータ変換方法の組み合わせを表す。
変換プログラム44の実行効率の観点からは、開始ノードから終了ノードに到達する最短パスを検出することが好ましい。ただし、グラフ探索自体の効率の観点から、過度に冗長なパスでなければ最短パス以外のパスを検出してもよい。第2の実施の形態では、サーバ装置200は、グラフ探索にA*アルゴリズムを使用する。
図6は、グラフ探索の例を示す図である。
A*アルゴリズムでは、サーバ装置200は、開始ノードが示す入力テーブルに対して複数のデータ変換方法それぞれを試行して、開始ノードから1ホップの距離にある複数の中間ノードを生成する。サーバ装置200は、所定の評価関数により複数の中間ノードそれぞれの評価値を算出する。この評価関数は、開始ノードから当該中間ノードを経由して終了ノードに到達するパスの距離を推定する関数であり、終了ノードに効率的に近付いているか否かを評価する。評価値の算出では、当該中間ノードが示す中間テーブルと終了ノードが示す出力テーブルとが比較される。評価値が小さいほど距離が短く評価が高いことを表し、評価値が大きいほど距離が長く評価が低いことを表す。
A*アルゴリズムでは、サーバ装置200は、開始ノードが示す入力テーブルに対して複数のデータ変換方法それぞれを試行して、開始ノードから1ホップの距離にある複数の中間ノードを生成する。サーバ装置200は、所定の評価関数により複数の中間ノードそれぞれの評価値を算出する。この評価関数は、開始ノードから当該中間ノードを経由して終了ノードに到達するパスの距離を推定する関数であり、終了ノードに効率的に近付いているか否かを評価する。評価値の算出では、当該中間ノードが示す中間テーブルと終了ノードが示す出力テーブルとが比較される。評価値が小さいほど距離が短く評価が高いことを表し、評価値が大きいほど距離が長く評価が低いことを表す。
サーバ装置200は、末端の中間ノード(そこから1ホップ先の中間ノードをまだ生成していない中間ノード)の中から評価値が最小の中間ノードを選択する。サーバ装置200は、選択した中間ノードが示す中間テーブルに対して複数のデータ変換方法それぞれを試行して、選択した中間ノードから1ホップの距離にある複数の中間ノードを生成する。サーバ装置200は、所定の評価関数により複数の中間ノードそれぞれの評価値を算出する。サーバ装置200は、終了ノードに到達するまで、すなわち、変換後のテーブルが出力テーブルに一致するまで、上記の処理を繰り返す。
例えば、図6に示すグラフ60において、サーバ装置200は、開始ノード61が示す入力テーブルに対して3つのデータ変換方法それぞれを試行し、中間ノード62,63,64に対応する3つの中間テーブルを生成する。これにより、開始ノード61から中間ノード62,63,64それぞれへのエッジが生成される。サーバ装置200は、中間テーブル62,63,64が示す3つの中間テーブルそれぞれと終了ノード68が示す出力テーブルとを比較し、中間ノード62,63,64それぞれの評価値を算出する。
サーバ装置200は、末端の中間ノードである中間ノード62,63,64の中から評価値が最小の中間ノードを選択する。ここでは、中間ノード64の評価値が最小であるとする。すると、サーバ装置200は、中間ノード64を選択し、中間ノード64が示す中間テーブルに対して3つのデータ変換方法それぞれを試行し、中間ノード65,66,67に対応する3つの中間テーブルを生成する。これにより、中間ノード64から中間ノード65,66,67それぞれへのエッジが生成される。サーバ装置200は、中間テーブル65,66,67が示す3つの中間テーブルそれぞれと終了ノード68が示す出力テーブルとを比較し、中間ノード65,66,67それぞれの評価値を算出する。
サーバ装置200は、末端の中間ノードである中間ノード62,63,65,66,67の中から評価値が最小の中間ノードを選択する。ここでは、中間ノード66の評価値が最小であるとする。すると、サーバ装置200は、中間ノード66を選択する。中間ノード66を選択した時点で、中間ノード66から終了ノード68に到達する区間にある中間ノードやエッジは未探索である。サーバ装置200は、終了ノード68に到達するまで以上を繰り返す。ある中間ノードが示す中間テーブルに対して1つのデータ変換方法を試行して生成されたテーブルが終了テーブルに一致したとき、グラフ探索が終了する。
ここで、評価関数について説明する。数式(1)に示す評価関数の通り、ノードnの評価値f(n)は、ノードnの距離g(n)とノードnの推定距離h(n)の和である。距離g(n)は、開始ノード61からノードnまでの最短距離である。距離g(n)は、開始ノード61からノードnまでに経由するエッジそれぞれのコストの合計である。コストは、エッジが示すデータ変換方法に依存しない固定値でもよいし、エッジが示すデータ変換方法の種類に応じて決まる値であってもよい。コスト=1に固定すると、距離g(n)は、開始ノード61からノードnまでに経由するエッジの数(ホップ数)になる。
推定距離h(n)は、ノードnから終了ノード68までの最短距離の推定値である。ノードnから終了ノード68までに経由するエッジは未知であることから、推定距離h(n)は、ノードnが示す中間テーブルと終了ノード68が示す出力テーブルとの差分に基づいて推定される。推定距離h(n)は、ノードnが終了ノード68にどの程度近いかを表す。推定距離h(n)が小さいほどノードnが終了ノード68に近いと推定され、推定距離h(n)が大きいほどノードnが終了ノード68から遠いと推定される。推定距離h(n)を算出する距離関数を、ヒューリスティック関数と言うことがある。
例えば、中間ノード66に着目すると、距離g(n)は、開始ノード61から中間ノード64に遷移するコストと、中間ノード64から中間ノード66に遷移するコストの合計である。コスト=1に固定した場合、距離g(n)は開始ノード61から中間ノード66までのホップ数であり、距離g(n)=2になる。推定距離h(n)は、中間ノード66が示す中間テーブルと終了ノード68が示す出力テーブルとの差分から推定される。
ノードnに対して1つのデータ変換方法を適用してノードmが得られた場合、ノードmの評価値f(m)は数式(2)のように定義される。評価値f(m)は、ノードnの距離g(n)と、ノードnとノードmとの間のエッジのコストcost(n,m)と、ノードnの推定距離h(n)の合計である。距離g(n)とコストcost(n,m)の和は、ノードmの距離g(m)に相当する。例えば、中間ノード64から中間ノード66に遷移した場合、中間ノード66の評価値f(m)は、中間ノード64の距離g(n)と、中間ノード64と中間ノード66との間のエッジのコストcost(n,m)と、中間ノード66の推定距離h(n)の合計と定義される。
上記のように、推定距離は2つのテーブルの差分から算出される。しかし、2つのテーブルの差分は、テーブルに含まれる列の個数(テーブル構造)の違い、特定の列に記載される文字列の違い、特定の列に記載される数値の違い、特定の列に記載される時刻の違いなど、様々な種類の差分を包含している。差分から推定距離を算出する好適な算出方法は、差分の種類によって異なる。そこで、着目するデータ型毎にそのデータ型に対して好適な距離関数を定義し、複数の距離関数により算出された複数の推定距離の重み付き和を全体の推定距離と定義することが考えられる。
数式(3)に示すように、全体の距離関数D(λ,n,m)が定義される。数式(3)において、di(n,m)は、異なるN個(Nは2以上の整数)の距離関数のうちのi番目(i=0,…,N-1)の距離関数である。nは距離を推定する区間の一端にあるノードを示し、mは距離を推定する区間の他端にあるノードを示す。λiは、i番目の距離関数di(n,m)により算出される推定距離の重みを示すパラメータである。λは、N個の重みλiを列挙した重みベクトルである。距離関数D(λ,n,m)が算出する推定距離は、ノードnとノードmと重みベクトルλに依存する。
ノードnの評価値f(n)の算出に使用する推定距離h(n)は、ノードnと終了ノードGとの間の推定距離である。そこで、数式(4)に示すように、全体の距離関数H(λ,n)が定義される。距離関数H(λ,n)は、距離関数D(λ,n,m)のノードmを終了ノードGに固定したものである。数式(4)において、距離関数hi(n)は、距離関数di(n,m)のノードmを終了ノードGに固定したものである。特定の重みベクトルλを用いて距離関数H(λ,n)が算出する推定距離は、推定距離h(n)である。
N個の距離関数hi(n)の中には、特定の列に記載される文字列の違いとして、2つの文字列の間の編集距離(レーベンシュタイン距離)を評価するものが含まれてもよい。また、N個の距離関数hi(n)の中には、特定の列に記載される数値の違いとして、2つの数値の差または比を評価するものが含まれてもよい。また、N個の距離関数hi(n)の中には、特定の列に記載される時刻の違いとして、2つの時刻の差を評価するものが含まれてもよい。また、N個の距離関数hi(n)の中には、テーブ構造の違いとして、2つのテーブルの列数の差を評価するものが含まれてもよい。
一例として、文字列に関する距離関数は以下の演算を行ってもよい。距離関数は、ノードnが示すテーブルから、データ型が文字列である第1の列を抽出し、終了ノードGが示す出力テーブルから、全体として第1の列とデータが最も類似する第2の列を抽出する。距離関数は、対応するレコード同士で第1の列の文字列と第2の列の文字列とを比較して編集距離を算出し、複数のレコードの編集距離の平均を、文字列に関する推定距離とする。また、数値に関する距離関数は以下の演算を行ってもよい。距離関数は、ノードnが示すテーブルから、データ型が数値である第1の列を抽出し、終了ノードGが示す出力テーブルから、全体として第1の列とデータが最も類似する第2の列を抽出する。距離関数は、対応するレコード同士で第1の列の数値と第2の列の数値との差または比を算出し、複数のレコードの差または比の平均を、数値に関する推定距離とする。
このように距離関数H(λ,n)を定義することで、推定距離h(n)を算出することができ、終了ノード68に近いと推定される中間ノードから優先的に隣接する中間ノードを探索することができる。これにより、開始ノード61から終了ノード68に到達するパスであって距離が短いパスを効率的に探索することができる。
しかし、グラフ探索の効率性は、距離関数H(λ,n)に設定される重みベクトルλに依存する。中間ノード間の推定距離h(n)のばらつきが極端に小さいと、幅優先探索のように、終了ノード68に近付く速度が遅くなり無駄な探索が多くなるおそれがある。また、中間ノード間の推定距離h(n)のばらつきが極端に大きと、終了ノード68に近付かない誤った方向に探索が進んだ場合の軌道修正が難しくなるおそれがある。
一方で、どの様な入力データに対してもグラフ探索が効率化されるような適切な重みベクトルλを事前にチューニングしておくことは容易でない。また、ある入力データに対して、グラフ探索を繰り返し試行して適切な重みベクトルλを学習することは、探索時間が長くなり非効率である。そこで、第2の実施の形態では、グラフ探索の途中でユーザの判断を仰ぎ、ユーザの判断を距離関数H(λ,n)に反映させる。
具体的には、クライアント装置100は、探索途中で生成された少数の中間テーブルをサーバ装置200から取得してユーザに提示し、出力テーブルに最も近い中間テーブルをユーザに選択させる。クライアント装置100は、ユーザが選択した中間テーブルの推定距離h(n)が、選択しなかった中間テーブルの推定距離h(n)よりも小さくなるように重みベクトルλを調整し、サーバ装置200に対して重みベクトルλを指定する。
図7は、探索途中のグラフの例を示す図である。
ユーザへの中間テーブルの提示を説明するにあたり、図7に示すグラフ70を考える。グラフ70は探索途中のグラフである。グラフ70は、ノード71-1~71-5,72-1~72-13を含む。ノード71-1は開始ノードである。ノード71-2はノード71-1に隣接する。ノード71-3はノード71-1に隣接する。ノード71-4はノード71-3に隣接する。ノード71-5はノード71-4に隣接する。ノード72-1~72-13は、1ホップ先の中間ノードが未探索である末端の中間ノードである。末端の中間ノードは、探索中ノードや検討中ノードと言うこともできる。末端の中間ノード以外のノードは、探索済みノードや検討済みノードと言うこともできる。
ユーザへの中間テーブルの提示を説明するにあたり、図7に示すグラフ70を考える。グラフ70は探索途中のグラフである。グラフ70は、ノード71-1~71-5,72-1~72-13を含む。ノード71-1は開始ノードである。ノード71-2はノード71-1に隣接する。ノード71-3はノード71-1に隣接する。ノード71-4はノード71-3に隣接する。ノード71-5はノード71-4に隣接する。ノード72-1~72-13は、1ホップ先の中間ノードが未探索である末端の中間ノードである。末端の中間ノードは、探索中ノードや検討中ノードと言うこともできる。末端の中間ノード以外のノードは、探索済みノードや検討済みノードと言うこともできる。
図8は、探索途中のテーブルの例を示す図である。
入力テーブル73-1は、開始ノードであるノード71-1に対応する。入力テーブル73-1は、ItemとPriceとQuantityの列を含む。Itemの列には、商品名を示す文字列と原産国を示す文字列とが連結されたものが記載される。商品名と原産国を区切る区切り文字は統一されていない。Priceの列には、商品の単価を示す数値が記載される。Quantityの列には、商品の個数を示す数値が記載される。
入力テーブル73-1は、開始ノードであるノード71-1に対応する。入力テーブル73-1は、ItemとPriceとQuantityの列を含む。Itemの列には、商品名を示す文字列と原産国を示す文字列とが連結されたものが記載される。商品名と原産国を区切る区切り文字は統一されていない。Priceの列には、商品の単価を示す数値が記載される。Quantityの列には、商品の個数を示す数値が記載される。
中間テーブル73-2は、中間ノードであるノード71-2に対応する。中間テーブル73-2は、ノード71-1が示す入力テーブル73-1に対して1つのデータ変換方法を適用することで生成される。中間テーブル73-2は、入力テーブル73-1のPriceの列とQuantityの列とを統合して、両者の数値の積を記載する列を設けたものである。中間テーブル73-3は、中間ノードであるノード71-3に対応する。中間テーブル73-3は、ノード71-1が示す入力テーブル73-1に対して1つのデータ変換方法を適用することで生成される。中間テーブル73-3は、入力テーブル73-1のItemの列から括弧によって区切られる文字列を抽出したものである。
中間テーブル73-4は、中間ノードであるノード71-4に対応する。中間テーブル73-4は、ノード71-3が示す中間テーブル73-3に対して1つのデータ変換方法を適用することで生成される。中間テーブル73-4は、中間テーブル73-3のPriceの列とQuantityの列とを統合して、両者の数値の和を記載する列を設けたものである。中間テーブル73-5は、中間ノードであるノード71-5に対応する。中間テーブル73-5は、ノード71-4が示す中間テーブル73-4に対して1つのデータ変換方法を適用することで生成される。中間テーブル73-5は、中間テーブル73-4から元のItemの列を削除したものである。
図9は、探索途中のグラフにおけるノード選択例を示す図である。
サーバ装置200は、グラフ探索中に所定の条件が満たされると、末端の中間ノードのうちM個(Mは2以上の整数)の中間ノードを選択し、選択したM個の中間ノードが示すM個の中間テーブルをクライアント装置100に送信する。選択する中間ノードの個数Mは、ユーザが中間テーブルを検討しやすいように10個以下であることが好ましい。
サーバ装置200は、グラフ探索中に所定の条件が満たされると、末端の中間ノードのうちM個(Mは2以上の整数)の中間ノードを選択し、選択したM個の中間ノードが示すM個の中間テーブルをクライアント装置100に送信する。選択する中間ノードの個数Mは、ユーザが中間テーブルを検討しやすいように10個以下であることが好ましい。
所定の条件は、直近に探索された幾つかの中間ノードについて推定距離h(n)の減少率が閾値を下回ったことである。通常はグラフ探索の進行に伴って推定距離h(n)が徐々に減少していくことが期待されるところ、終了ノードに到達する前に推定距離h(n)が収束することはグラフ探索が停滞していることを意味する。そこで、グラフ探索が停滞している場合には距離関数H(λ,n)の重みベクトルλが適切でない可能性があることから、サーバ装置200はユーザの判断を仰ぐこととする。
ただし、所定の条件は、グラフ探索の実行量が閾値を超えたことなど、グラフ探索の停滞が検出されたこと以外であってもよい。例えば、開始ノードからの深さが閾値を超えたことを条件としてもよい。開始ノードから深さは、例えば、開始ノードから末端の中間ノードまでのホップ数の最大値や距離g(n)の最大値などである。また、探索済みのエッジの数が閾値を超えたことを条件としてもよい。
M個の中間ノードを選択するにあたり、サーバ装置200は、末端の中間ノードをM個のクラスタに分類する。サーバ装置200は、M個のクラスタから代表の中間ノードを1つずつ選択することでM個の中間ノードを選択する。
M個のクラスタは、推定距離h(n)の類似度に基づいて形成する。サーバ装置200は、k-means法(k平均法)などのクラスタリングアルゴリズムを用いて、類似する推定距離h(n)をもつ中間ノードが同じクラスタに属するように中間ノードを分類する。M個のクラスタに属する中間ノードの個数は均等でなくてよい。k-means法によれば、サーバ装置200は、最初に末端の中間ノードをランダムにM個のクラスタに割り振る。サーバ装置200は、クラスタ毎に推定距離h(n)の平均値を算出する。サーバ装置200は、各中間ノードの推定距離h(n)と各クラスタの平均値とを比較し、各中間ノードをその推定距離h(n)に最も近い平均値をもつクラスタに移動させる。以上を中間ノードの移動が収束するまで繰り返すことでクラスタリングが完了する。
ただし、推定距離h(n)の類似度以外の観点からM個のクラスタを形成することも可能である。例えば、グラフ構造(トポロジ)に基づいて、近い位置の中間ノードが同じクラスタに属するように中間ノードを分類してもよい。一例として、サーバ装置200は、末端の中間ノードから開始して、開始ノードに向かって1レベルずつエッジを逆方向に辿る。特定のレベルでグラフを分割すると、末端の中間ノード側に複数の部分木が形成される。部分木の数は、末端の中間ノードに近いレベルで切断するほど多くなり、開始ノードに近いレベルで切断するほど少なくなる。サーバ装置200は、部分木の数がM個になるレベルでグラフを分割することで、M個のクラスタを形成する。
M個のクラスタそれぞれから選択する代表の中間ノードは、そのクラスタの中で最も推定距離h(n)が小さい中間ノードである。ただし、他の方法で代表の中間ノードを選択することも可能である。例えば、サーバ装置200は、各クラスタから、そのクラスタの中で最も推定距離h(n)が大きい中間ノードを選択してもよいし、そのクラスタの中で中央の推定距離h(n)をもつ中間ノードを選択してもよい。また、サーバ装置200は、各クラスタからランダムに代表の中間ノードを選択してもよい。
グラフ70の例において、サーバ装置200は、ノード72-1~72-13をクラスタ74-1~74-4に分類する。クラスタ74-1は、ノード72-1~72-5を含む。クラスタ74-2は、ノード72-6~72-10を含む。クラスタ74-3は、ノード72-11,72-12を含む。クラスタ74-4は、ノード72-13を含む。サーバ装置200は、クラスタ74-1からノード72-5を選択し、クラスタ74-2からノード72-7を選択し、クラスタ74-3からノード72-12を選択し、クラスタ74-4からノード72-13を選択する。サーバ装置200は、ノード72-5,72-7,72-12,72-13が示す4個の中間テーブルを送信する。
図10は、中間テーブルの選択画面の例を示す図である。
クライアント装置100は、サーバ装置200からM個の中間テーブルを受信すると、クライアント装置100が保持している出力テーブルとM個の中間テーブルとを含む選択画面80を生成して表示装置111に表示する。
クライアント装置100は、サーバ装置200からM個の中間テーブルを受信すると、クライアント装置100が保持している出力テーブルとM個の中間テーブルとを含む選択画面80を生成して表示装置111に表示する。
一例として、選択画面80は、出力テーブル75-1と中間テーブル75-2~75-5とを含む。中間テーブル75-2~75-5は、前述のノード72-5,72-7,72-12,72-13に対応する。選択画面80は、中間テーブル75-2~75-5の中から1つを選択するための入力フォームを含む。ユーザは、中間テーブル75-2~75-5それぞれと出力テーブル75-1とを比較し、中間テーブル75-2~75-5のうち出力テーブル75-1に最も近いと思うものを1つ選択する。ユーザの選択は、入力デバイス112によってクライアント装置100に入力される。
クライアント装置100は、M個の中間テーブルの中から1つを選択する選択操作をユーザから受け付ける。すると、クライアント装置100は、ユーザの選択に適合する推定距離h(n)が算出されるように距離関数H(λ,n)の重みベクトルλを更新する。重みベクトルλは、ユーザに提示したM個の中間テーブルのうち、ユーザが選択した1つの中間テーブルの推定距離h(n)が小さく算出され、ユーザが選択しなかったM-1個の中間テーブルの推定距離h(n)が大きく算出されるようにチューニングされる。
具体的には、N次元の重みベクトルλ=(λ0,…,λN-1)は、数式(5)の正規化条件を満たすように決定されるものである。ユーザが、M個の中間テーブルのうちノードn0の中間テーブルを選択し、ノードn1,…,nM-1の中間テーブルを選択しなかったとする。すると、好ましい重みベクトルλは、正規化条件を満たす範囲で数式(6)の目的関数E(λ)の値を最小化するものである。目的関数E(λ)の値は、ノードn0の推定距離h(n0)から、ノードn1,…,nM-1の推定距離h(n1),…,h(nM-1)の平均を引いた値である。よって、目的関数E(λ)の値を最小化することは、ノードn0の推定距離h(n0)を小さくし、ノードn1,…,nM-1の推定距離h(n1),…,h(nM-1)の平均を大きくすることを意味する。
目的関数E(λ)は重みベクトルλの一次関数であるため、数式(7)のように変形することができる。数式(7)の係数a0,a1,…,aN-1は、N個の距離関数h0(n),…,hN-1(n)を用いてM個のノードn0,…,nM-1について算出されるN×M個の推定距離に基づく既知係数である。よって、目的関数E(λ)の値は、重みベクトルλが数式(8)のときに最小となる。数式(8)の係数ベクトルaは、係数a0,a1,…,aN-1を列挙したN次元ベクトルである。
クライアント装置100は、上記のように算出した重みベクトルλをサーバ装置200に送信する。サーバ装置200は、クライアント装置100から受信した重みベクトルλを距離関数H(λ,n)に設定し、グラフ探索の続きにおいて更新後の距離関数H(λ,n)を使用する。このとき、サーバ装置200はグラフ探索を最初からやり直さなくてよい。よって、グラフ探索の途中で、各ノードの評価値f(n)の算出方法が変更されることになる。また、サーバ装置200は、距離関数H(λ,n)の更新をグラフ探索と非同期に行う。すなわち、クライアント装置100がユーザに中間テーブルを選択させて重みベクトルλを算出している間も、サーバ装置200はグラフ探索を停止せず、更新前の距離関数H(λ,n)を用いてグラフ探索を進める。
次に、クライアント装置とサーバ装置の機能について説明する。
図11は、クライアント装置とサーバ装置の機能例を示すブロック図である。
クライアント装置100は、データ記憶部121、関数記憶部122、クライアント通信部123、探索要求部124、中間テーブル選択部125、重み計算部126および変換プログラム実行部127を有する。データ記憶部121および関数記憶部122は、例えば、RAM102またはHDD103の記憶領域を用いて実現される。クライアント通信部123は、例えば、CPU101が実行するプログラムおよび通信インタフェース107を用いて実現される。探索要求部124、中間テーブル選択部125、重み計算部126および変換プログラム実行部127は、例えば、プログラムを用いて実現される。
図11は、クライアント装置とサーバ装置の機能例を示すブロック図である。
クライアント装置100は、データ記憶部121、関数記憶部122、クライアント通信部123、探索要求部124、中間テーブル選択部125、重み計算部126および変換プログラム実行部127を有する。データ記憶部121および関数記憶部122は、例えば、RAM102またはHDD103の記憶領域を用いて実現される。クライアント通信部123は、例えば、CPU101が実行するプログラムおよび通信インタフェース107を用いて実現される。探索要求部124、中間テーブル選択部125、重み計算部126および変換プログラム実行部127は、例えば、プログラムを用いて実現される。
データ記憶部121は、変換例としてユーザから与えられた入力テーブルおよび出力テーブルを記憶する。また、データ記憶部121は、変換例以外の変換対象の入力テーブルを記憶する。関数記憶部122は、データ型に応じて予め定義されたN個の距離関数h0(n),…,hN-1(n)を記憶する。異なる距離関数は、文字列や数値やテーブル構造など異なるデータ型の観点から2つのテーブルの差分を評価するものである。なお、クライアント装置100は、サーバ装置200からN個の距離関数を受信してもよい。
クライアント通信部123は、サーバ装置200との間でソケット通信を行う。
探索要求部124は、ユーザから、変換例および変換例以外の入力テーブルを指定したデータ変換要求を受け付ける。すると、探索要求部124は、クライアント通信部123にソケットを生成させてサーバ装置200と接続を確立させる。そして、探索要求部124は、変換例である入力テーブルおよび出力テーブルをデータ記憶部121から読み出し、クライアント通信部123を介してサーバ装置200に送信する。
探索要求部124は、ユーザから、変換例および変換例以外の入力テーブルを指定したデータ変換要求を受け付ける。すると、探索要求部124は、クライアント通信部123にソケットを生成させてサーバ装置200と接続を確立させる。そして、探索要求部124は、変換例である入力テーブルおよび出力テーブルをデータ記憶部121から読み出し、クライアント通信部123を介してサーバ装置200に送信する。
中間テーブル選択部125は、探索要求部124が変換例を送信した後、クライアント通信部123に生成されたソケットを監視する。ソケットの監視により、中間テーブル選択部125は、サーバ装置200からM個の中間テーブルが受信されたことを検出する場合がある。M個の中間テーブルが受信されると、中間テーブル選択部125は、データ記憶部121から変換例の出力テーブルを読み出す。中間テーブル選択部125は、出力テーブルとM個の中間テーブルとを含む選択画面80を生成して表示装置111に表示する。そして、中間テーブル選択部125は、ユーザから選択画面80上での選択操作を受け付け、M個の中間テーブルおよびユーザの選択結果(例えば、ユーザが選択した中間テーブルの識別情報)を重み計算部126に通知する。
重み計算部126は、中間テーブル選択部125からM個の中間テーブルおよびユーザの選択結果を受け付ける。すると、重み計算部126は、関数記憶部122からN個の距離関数を読み出し、データ記憶部121から変換例の出力テーブルを読み出す。重み計算部126は、M個の中間テーブルそれぞれと出力テーブルとを比較し、N個の距離関数を用いてM×N個の推定距離を算出する。そして、重み計算部126は、前述の算出方法により、M×N個の推定距離とユーザの選択結果から重みベクトルλを算出する。重み計算部126は、クライアント通信部123を介してサーバ装置200に重みベクトルλを送信する。なお、第2の実施の形態ではM×N個の推定距離をクライアント装置100が再計算しているが、サーバ装置200が計算したM×N個の推定距離をサーバ装置200からクライアント装置100に送信するようにしてもよい。
変換プログラム実行部127は、探索要求部124が変換例を送信した後、サーバ装置200からクライアント通信部123を介して変換プログラムを受信する。すると、変換プログラム実行部127は、クライアント通信部123にソケットをクローズさせてサーバ装置200との接続を切断させる。また、変換プログラム実行部127は、データ記憶部121から変換例以外の入力テーブルを読み出し、変換例以外の入力テーブルに対して変換プログラムを実行して変換例以外の出力テーブルを生成する。そして、変換プログラム実行部127は、変換例以外の出力テーブルを表示装置111に表示する。
サーバ装置200は、関数記憶部221、グラフ記憶部222、キュー223、サーバ通信部224、グラフ探索部225および重み更新部226を有する。関数記憶部221およびグラフ記憶部222は、例えば、サーバ装置200が有するRAMまたはHDDの記憶領域を用いて実現される。サーバ通信部224は、例えば、サーバ装置200が有するCPUが実行するプログラムおよび通信インタフェースを用いて実現される。グラフ探索部225および重み更新部226は、例えば、プログラムを用いて実現される。
関数記憶部221は、データ型に応じて予め定義されたN個の距離関数h0(n),…,hN-1(n)を記憶する。関数記憶部221に記憶される距離関数は、クライアント装置100の関数記憶部122に記憶されるものと同じである。また、関数記憶部221は、N個の距離関数に適用するN個の重みλ0,…,λN-1を列挙した重みベクトルλを記憶する。距離関数h0(n),…,hN-1(n)の重み付き和が全体の距離関数H(λ,n)である。グラフ探索の開始時には、重みベクトルλの初期値が関数記憶部221に記憶されている。重みベクトルλは重み更新部226により更新されることがある。
グラフ記憶部222は、探索中のグラフのグラフ情報を記憶する。グラフ情報は、ノード間の接続関係を示すトポロジ情報を含む。また、グラフ情報は、末端の中間ノード(検討中の中間ノード)とそれ以外の中間ノード(検討済みの中間ノード)を区別する情報を含む。また、グラフ情報は、各ノードの評価値f(n)を含む。
キュー223は、最大で所定個までレコードを格納可能なFIFO(First In First Out)型バッファである。キュー223は、例えば、リングバッファを用いて実現できる。キュー223は、直近に算出された高々所定個の推定距離h(n)を記憶する。グラフ探索が開始されてから所定個に達するまでは、算出された推定距離h(n)がキュー223の末尾に順次挿入される。所定個に達すると、キュー223の先頭から最も古い推定距離h(n)が削除され、新しい推定距離h(n)がキュー223の末尾に挿入される。
サーバ通信部224は、クライアント装置100との間でソケット通信を行う。サーバ通信部224は、クライアント装置100から接続要求を受信するためのソケットを生成して待機する。サーバ通信部224は、クライアント装置100から接続要求があるとクライアント装置100と接続を確立し、個別通信のための接続ソケットを生成する。
グラフ探索部225は、クライアント装置100からサーバ通信部224を介して、変換例である入力テーブルおよび出力テーブルを受信する。すると、グラフ探索部225は、関数記憶部221に記憶されたN個の距離関数および重みベクトルλを用いて、入力テーブルが出力テーブルに変換されるデータ変換方法の組み合わせを探索するグラフ探索を開始する。グラフ探索の間、グラフ探索部225は、グラフ記憶部222に記憶されたグラフ情報を適宜更新する。また、グラフ探索部225は、新たな推定距離h(n)を算出する毎に、算出した推定距離h(n)をキュー223に格納する。
また、グラフ探索部225は、グラフ探索の間にキュー223を監視し、グラフ探索が停滞しているか判定する。直近の推定距離h(n)の減少率が閾値を下回る場合、推定距離h(n)が収束しておりグラフ探索が停滞していると判定される。グラフ探索が停滞している場合、グラフ探索部225は、グラフに含まれる末端の中間ノード(検討中の中間ノード)からM個の中間ノードを選択する。そして、グラフ探索部225は、選択した中間ノードが示すM個の中間テーブルを、サーバ通信部224を介してクライアント装置100に送信する。M個の中間テーブルを送信した後、グラフ探索部225は、クライアント装置100からの応答を待たずにグラフ探索を進めてよい。
重み更新部226は、グラフ探索部225がM個の中間テーブルを送信した後、サーバ通信部224に生成された接続ソケットを監視する。接続ソケットの監視により、重み更新部226は、クライアント装置100から重みベクトルλが受信されたことを検出する。重みベクトルλが受信されると、重み更新部226は、受信された新たな重みベクトルλを関数記憶部221に格納する。また、重み更新部226は、新たな重みベクトルλによって更新された距離関数H(λ,n)を用いて、各中間ノードの評価値f(n)を再計算してグラフ記憶部222のグラフ情報を更新する。ただし、評価値f(n)が更新されても、開始ノードに戻ってグラフ探索をやり直すなどの手戻りは発生しない。
図12は、関数テーブルの例を示す図である。
サーバ装置200の関数記憶部221は、関数テーブル231を記憶する。関数テーブル231は、関数IDと距離関数と重みの項目を含む。関数IDの項目には、N個の距離関数を識別する識別子が記載される。距離関数の項目には、距離関数h0(n),h1(n),…,hN-1(n)の内容が記載される。重みの項目には、距離関数h0(n),h1(n),…,hN-1(n)に対応する重みλ0,λ1,…,λN-1が記載される。クライアント装置100の関数記憶部122も、関数テーブル231と同様のテーブルを記憶する。ただし、関数記憶部122は重みを記憶しなくてよい。
サーバ装置200の関数記憶部221は、関数テーブル231を記憶する。関数テーブル231は、関数IDと距離関数と重みの項目を含む。関数IDの項目には、N個の距離関数を識別する識別子が記載される。距離関数の項目には、距離関数h0(n),h1(n),…,hN-1(n)の内容が記載される。重みの項目には、距離関数h0(n),h1(n),…,hN-1(n)に対応する重みλ0,λ1,…,λN-1が記載される。クライアント装置100の関数記憶部122も、関数テーブル231と同様のテーブルを記憶する。ただし、関数記憶部122は重みを記憶しなくてよい。
図13は、OPENリストおよびCLOSEリストの例を示す図である。
サーバ装置200のグラフ記憶部222は、OPENリスト232およびCLOSEリスト233を記憶する。OPENリスト232は、グラフの末端のノード、すなわち、検討中のノードの情報を含む。CLOSEリスト233は、グラフの末端以外のノード、すなわち、検討済みのノードの情報を含む。グラフ探索中、OPENリスト232とCLOSEリスト233の間でノード情報が移動することがある。
サーバ装置200のグラフ記憶部222は、OPENリスト232およびCLOSEリスト233を記憶する。OPENリスト232は、グラフの末端のノード、すなわち、検討中のノードの情報を含む。CLOSEリスト233は、グラフの末端以外のノード、すなわち、検討済みのノードの情報を含む。グラフ探索中、OPENリスト232とCLOSEリスト233の間でノード情報が移動することがある。
OPENリスト232およびCLOSEリスト233はそれぞれ、ノードID、テーブル、親ノードおよび評価値の項目を含む。ノードIDの項目には、各ノードを識別する識別子が記載される。テーブルの項目には、テーブルのデータ内容が記載される。親ノードの項目には、各ノードについて1つ手前のノード(開始ノード側のノード)の識別子が登録される。評価値の項目には、各ノードの評価値f(n)が登録される。なお、第2の実施の形態ではOPENリスト232およびCLOSEリスト233は各ノードの評価値f(n)を含んでいるが、距離g(n)や推定距離h(n)を更に含んでもよい。
図14は、キューの例を示す図である。
キュー223は、ノードIDと推定距離の項目を含む。ノードIDの項目には、直近に推定距離h(n)が算出されたノードの識別子が記載される。推定距離の項目には、直近の所定個の推定距離h(n)が記載される。図14では、7個の推定距離h(n10),h(n11),…,h(n16)がキュー223に格納されている。図14において、下側がキュー223の先頭であり、上側がキュー223の末尾である。新しい推定距離は上側から挿入され、既存の推定距離は下方にシフトする。キュー223の容量を超えると、最も古い推定距離が下側から溢れて削除される。
キュー223は、ノードIDと推定距離の項目を含む。ノードIDの項目には、直近に推定距離h(n)が算出されたノードの識別子が記載される。推定距離の項目には、直近の所定個の推定距離h(n)が記載される。図14では、7個の推定距離h(n10),h(n11),…,h(n16)がキュー223に格納されている。図14において、下側がキュー223の先頭であり、上側がキュー223の末尾である。新しい推定距離は上側から挿入され、既存の推定距離は下方にシフトする。キュー223の容量を超えると、最も古い推定距離が下側から溢れて削除される。
次に、クライアント装置100とサーバ装置200の処理手順について説明する。
図15は、クライアント装置とサーバ装置の通信例を示すシーケンス図である。
サーバ装置200は、システムコールsocketを発行し、接続要求を受信できるようにソケットを生成しておく(S20)。サーバ装置200は、システムコールlistenを発行し、接続要求を検出できるように接続準備を行って待機する(S21)。
図15は、クライアント装置とサーバ装置の通信例を示すシーケンス図である。
サーバ装置200は、システムコールsocketを発行し、接続要求を受信できるようにソケットを生成しておく(S20)。サーバ装置200は、システムコールlistenを発行し、接続要求を検出できるように接続準備を行って待機する(S21)。
クライアント装置100は、ユーザからデータ変換要求を受け付けると、システムコールsocketを発行し、ソケットを生成する(S10)。クライアント装置100は、システムコールconnectを発行し、生成されたソケットを用いてサーバ装置200に接続する(S11)。サーバ装置200は、システムコールacceptを発行し、接続ソケットを生成してクライアント装置100との接続を確立する(S22)。クライアント装置100は、システムコールsendを発行し、入力テーブルと出力テーブルとを含む変換例をサーバ装置200に送信する(S12)。サーバ装置200は、システムコールrecvを発行し、変換例をクライアント装置100から受信する(S23)。
以上の通信を通じて、サーバ装置200のグラフ探索が開始する。以下に説明するステップS14,S15,S24~S26は、グラフ探索の進行状況から要否が判断されるオプションである。ステップS14,S15,S24~S26は、1回も実行されないこともあるし、1回だけ実行されることもあるし、2回以上繰り返し実行されることもある。
クライアント装置100は、システムコールselectを発行し、定期的にソケットを確認してデータ到着を待つ(S13)。重みベクトルλの更新を試みる場合、サーバ装置200は、システムコールsendを発行し、中間テーブルをクライアント装置100に送信する(S24)。中間テーブルの送信後、サーバ装置200は、システムコールselectを発行し、定期的に接続ソケットを確認してデータ到着を待つ(S25)。
クライアント装置100は、受信チェックでデータ到着が検出されると、システムコールrecvを発行し、サーバ装置200からの中間テーブルを受信する(S14)。重みベクトルλを算出すると、クライアント装置100は、システムコールsendを発行し、重みベクトルλをサーバ装置200に送信する(S15)。サーバ装置200は、受信チェックでデータ到着が検出されると、システムコールrecvを発行し、クライアント装置100からの重みベクトルλを受信する(S26)。
サーバ装置200のグラフ探索が終了すると、サーバ装置200は、システムコールsendを発行し、変換プログラムをクライアント装置100に送信する(S27)。そして、サーバ装置200は、システムコールcloseを発行し、接続ソケットを閉じる(S28)。クライアント装置100は、システムコールrecvを発行し、変換プログラムをサーバ装置200から受信する(S16)。そして、クライアント装置100は、システムコールcloseを発行し、ソケットを閉じる(S17)。
図16は、グラフ探索の手順例を示すフローチャートである。
(S30)グラフ探索部225は、入力テーブルおよび出力テーブルを受信する。入力テーブルに対応する開始ノードSと出力ノードに対応する終了ノードGが形成される。
(S30)グラフ探索部225は、入力テーブルおよび出力テーブルを受信する。入力テーブルに対応する開始ノードSと出力ノードに対応する終了ノードGが形成される。
(S31)グラフ探索部225は、OPENリスト232を開始ノードSのみ含むよう初期化し、CLOSEリスト233を空集合に初期化する。
(S32)グラフ探索部225は、開始ノードSの評価値f(n0)を算出する。開始ノードSの距離g(n0)は0であるため、開始ノードSの評価値f(n0)は推定距離h(n0)=H(λ,n0)である。重みベクトルλ=(λ0,…,λN-1)は初期値を使用する。グラフ探索部225は、入力テーブルと出力テーブルを比較し、関数テーブル231に登録されたN個の距離関数h0(n),…,hN-1(n)を用いてN個の推定距離を算出し、重みベクトルλで重み付けして全体の推定距離h(n0)を算出する。N個の距離関数には、文字列の編集距離を算出するもの、数値の差または比を算出するもの、時刻の差を算出するもの、テーブルの列数の差を算出するものなどが含まれ得る。
(S32)グラフ探索部225は、開始ノードSの評価値f(n0)を算出する。開始ノードSの距離g(n0)は0であるため、開始ノードSの評価値f(n0)は推定距離h(n0)=H(λ,n0)である。重みベクトルλ=(λ0,…,λN-1)は初期値を使用する。グラフ探索部225は、入力テーブルと出力テーブルを比較し、関数テーブル231に登録されたN個の距離関数h0(n),…,hN-1(n)を用いてN個の推定距離を算出し、重みベクトルλで重み付けして全体の推定距離h(n0)を算出する。N個の距離関数には、文字列の編集距離を算出するもの、数値の差または比を算出するもの、時刻の差を算出するもの、テーブルの列数の差を算出するものなどが含まれ得る。
(S33)グラフ探索部225は、OPENリスト232が空であるか(空集合φであるか)判断する。OPENリスト232が空の場合はステップS48に進み、OPENリスト232が空でない場合はステップS34に進む。
(S34)グラフ探索部225は、OPENリスト232の中から評価値f(n)が最小のノードを抽出する。評価値f(n)が最小のノードが2以上ある場合は何れか1つのノードを抽出する。ここで抽出したノードをノードnと表記する。
(S35)グラフ探索部225は、ノードnが終了ノードGであるか、すなわち、ノードnが示すテーブルが出力テーブルと一致するか判断する。ノードnが終了ノードGである場合はステップS47に進み、終了ノードGでない場合はステップS36に進む。
(S36)グラフ探索部225は、ノードnをCLOSEリスト233に移動する。
(S37)グラフ探索部225は、中間テーブル送信を検討する。中間テーブル送信については後述する。そして、ステップS38に進む。
(S37)グラフ探索部225は、中間テーブル送信を検討する。中間テーブル送信については後述する。そして、ステップS38に進む。
(S47)グラフ探索部225は、開始ノードSから終了ノードGに到達するパス上のデータ変換方法を列挙し、列挙したデータ変換方法を順に実行する変換プログラムを生成する。変換プログラムは、プログラミング言語で記載されたソースコードでもよいし、実行可能な命令を含むオブジェクトコードでもよい。また、変換プログラムは、プログラミング言語でない記載方法で記載された変換ルールでもよい。グラフ探索部225は、クライアント装置100に変換プログラムを送信する。そして、グラフ探索が終了する。
(S48)グラフ探索部225は、グラフ探索に失敗したことを示すエラーメッセージをクライアント装置100に送信する。そして、グラフ探索が終了する。
図17は、グラフ探索の手順例を示すフローチャート(続き)である。
図17は、グラフ探索の手順例を示すフローチャート(続き)である。
(S38)グラフ探索部225は、ノードnが示すテーブルに対して、予め用意された複数のデータ変換方法それぞれを試行して複数の中間テーブルを生成する。複数のデータ変換方法には、テーブルの列を削除するもの、補助テーブルを結合するもの、1つの列から文字または数値を抽出するもの、2つの列の文字または数値を合成するものなどが含まれ得る。生成された複数の中間テーブルを示す複数の中間ノードが形成される。複数の中間ノードそれぞれについて以下のステップS39~S46が実行される。ここで生成した複数の中間ノードそれぞれをノードmと表記する。
(S39)グラフ探索部225は、ノードmの評価値f’(m)を算出する。ノードmの評価値f’(m)は、距離g(m)と推定距離h(m)=H(λ,m)の和である。ノードmの距離g(m)は、ノードnの距離g(n)よりコストcost(n,m)だけ大きい。cost(n,m)=1であってもよく、距離g(m)は開始ノードSからノードmまでのホップ数であってもよい。また、グラフ探索部225は、ノードmが示す中間テーブルと出力テーブルとを比較し、関数テーブル231に登録されたN個の距離関数を用いてN個の推定距離を算出し、重みベクトルλで重み付けして全体の推定距離h(m)を算出する。重みベクトルλは最新のものを使用する。
(S40)グラフ探索部225は、ノードmがOPENリスト232に含まれているか判断する。すなわち、グラフ探索部225は、ノードmが示す中間テーブルが、OPENリスト232に含まれる何れかのノードが示す中間テーブルと一致するか判断する。ノードmがOPENリスト232に含まれる場合はステップS41に進み、ノードmがOPENリスト232に含まれない場合はステップS43に進む。
(S41)グラフ探索部225は、ステップS39で算出した評価値f’(m)とOPENリスト232に登録されている前回の評価値f(m)とを比較し、評価値f’(m)が評価値f(m)より小さいか判断する。f’(m)<f(m)の場合はステップS42に進み、f’(m)≧f(m)の場合はステップS33に進む。
(S42)グラフ探索部225は、ノードmの親ノードをノードnに変更する。すなわち、ノードmに到達するパスが変更される。そして、ステップS33に進む。
(S43)グラフ探索部225は、ノードmがCLOSEリスト233に含まれているか判断する。すなわち、グラフ探索部225は、ノードmが示す中間テーブルが、CLOSEリスト233に含まれる何れかのノードが示す中間テーブルと一致するか判断する。ノードmがCLOSEリスト233に含まれる場合はステップS44に進み、ノードmがCLOSEリスト233に含まれない場合はステップS46に進む。後者の場合、ノードmが示す中間テーブルは初めて生成されたものである。
(S43)グラフ探索部225は、ノードmがCLOSEリスト233に含まれているか判断する。すなわち、グラフ探索部225は、ノードmが示す中間テーブルが、CLOSEリスト233に含まれる何れかのノードが示す中間テーブルと一致するか判断する。ノードmがCLOSEリスト233に含まれる場合はステップS44に進み、ノードmがCLOSEリスト233に含まれない場合はステップS46に進む。後者の場合、ノードmが示す中間テーブルは初めて生成されたものである。
(S44)グラフ探索部225は、ステップS39で算出した評価値f’(m)とCLOSEリスト233に登録されている前回の評価値f(m)とを比較し、評価値f’(m)が評価値f(m)より小さいか判断する。f’(m)<f(m)の場合はステップS45に進み、f’(m)≧f(m)の場合はステップS33に進む。
(S45)グラフ探索部225は、ノードmをCLOSEリスト233からOPENリスト232に移動する。また、グラフ探索部225は、ノードmの親ノードをノードnに変更する。これにより、ノードmに到達するパスが変更され、ノードmが再び検討中のノード(探索中のノード)になる。そして、ステップS33に進む。
(S46)グラフ探索部225は、新たに生成されたノードであるノードmをOPENリスト232に追加する。そして、ステップS33に進む。
図18は、中間テーブル送信の手順例を示すフローチャートである。
図18は、中間テーブル送信の手順例を示すフローチャートである。
中間テーブル送信は、前述のステップS37で実行される。
(S50)グラフ探索部225は、SENTフラグがTrueであるか判断する。SENTフラグがTrueの場合は中間テーブル送信が終了し、SENTフラグがFalseの場合はステップS51に進む。なお、SENTフラグの初期値はFalseである。
(S50)グラフ探索部225は、SENTフラグがTrueであるか判断する。SENTフラグがTrueの場合は中間テーブル送信が終了し、SENTフラグがFalseの場合はステップS51に進む。なお、SENTフラグの初期値はFalseである。
(S51)グラフ探索部225は、ノードnについて算出された推定距離h(n)=H(λ,n)をキュー223の末尾に挿入する。ノードnの推定距離h(n)はステップS32またはステップS39で算出されている。
(S52)グラフ探索部225は、キュー223が満杯か判断する。キュー223が満杯の場合はステップS53に進み、満杯でない場合は中間テーブル送信が終了する。
(S53)グラフ探索部225は、キュー223に格納された推定距離h(n)の変化率を算出する。具体的には、グラフ探索部225は、キュー223に格納された推定距離h(n)の最大値と最小値を特定し、(最大値-最小値)÷最大値を変化率とする。
(S53)グラフ探索部225は、キュー223に格納された推定距離h(n)の変化率を算出する。具体的には、グラフ探索部225は、キュー223に格納された推定距離h(n)の最大値と最小値を特定し、(最大値-最小値)÷最大値を変化率とする。
(S54)グラフ探索部225は、ステップS53で算出した変化率が所定の閾値diff未満であるか判断する。変化率が閾値diff未満の場合はステップS55に進み、変化率が閾値diff以上の場合は中間テーブル送信が終了する。
(S55)グラフ探索部225は、OPENリスト232に含まれる中間ノードをM個のクラスタに分類する。例えば、グラフ探索部225は、k-means法などのクラスタリングアルゴリズムを用いて、推定距離h(n)が近い中間ノードが同じクラスタに属するように推定距離h(n)の分布をM個に分割する。
(S56)グラフ探索部225は、ステップS55で分割されたM個のクラスタそれぞれから1つの中間ノードを代表ノードとして選択する。例えば、グラフ探索部225は、各クラスタから最小の推定距離h(n)をもつ中間ノードを選択する。
(S57)グラフ探索部225は、ステップS56で選択したM個の代表ノードが示すM個の中間テーブルをクライアント装置100に送信する。
(S58)グラフ探索部225は、SENTフラグをTrueに更新する。
(S58)グラフ探索部225は、SENTフラグをTrueに更新する。
図19は、重み更新の手順例を示すフローチャートである。
以下に説明する重み更新は、上記のステップS57でM個の中間テーブルが送信された後、図16~18の処理とは非同期に実行される。すなわち、グラフ探索部225は、クライアント装置100からの応答を待たずにグラフ探索を進行する。
以下に説明する重み更新は、上記のステップS57でM個の中間テーブルが送信された後、図16~18の処理とは非同期に実行される。すなわち、グラフ探索部225は、クライアント装置100からの応答を待たずにグラフ探索を進行する。
(S60)重み更新部226は、クライアント装置100からの接続要求に応じて生成された接続ソケットを監視し、クライアント装置100からのデータの到着を待つ。
(S61)重み更新部226は、重みベクトルλを受信したか判断する。重みベクトルλを受信した場合、ステップS62に進む。重みベクトルλを受信していない場合、ステップS61を繰り返し実行して重みベクトルλの受信を待つ。
(S61)重み更新部226は、重みベクトルλを受信したか判断する。重みベクトルλを受信した場合、ステップS62に進む。重みベクトルλを受信していない場合、ステップS61を繰り返し実行して重みベクトルλの受信を待つ。
(S62)重み更新部226は、OPENリスト232およびCLOSEリスト233のノード集合の中から1つのノードを選択する。選択対象のノード集合は、開始ノードSおよび現時点で顕在化している全ての中間ノードであり、検討中ノード(探索中ノード)と検討済みノード(探索済みノード)の両方を含む。CLOSEリスト233のノードについて以下のステップS63,S64の処理を実行するのは、ステップS44で前回の評価値が参照され、所定の条件を満たす場合にCLOSEリスト233からOPENリスト232にノードが移動するためである。ここで選択したノードをノードnと表記する。
(S63)重み更新部226は、ノードnが示すテーブルと終了ノードGが示す出力テーブルとを比較し、N個の距離関数hi(n)と更新前の重みベクトルλoldを用いて全体の推定距離h(n)=H(λold,n)を算出する。ただし、ノードnについて、過去に算出したN個の距離関数hi(n)それぞれの推定距離または全体の推定距離h(n)が保存されている場合、保存されている推定距離を流用してもよい。そして、重み更新部226は、ノードnの距離g(n)を、ノードnの現在の評価値f(n)から上記の推定距離h(n)を引くことで算出する。ただし、ノードnについて、過去に算出した距離g(n)が保存されている場合、距離g(n)を再計算しなくてもよい。
(S64)重み更新部226は、ステップS63で算出したN個の距離関数hi(n)の推定距離と、ステップS61で受信した更新後の重みベクトルλnewを用いて、全体の推定距離h(n)=H(λnew,n)を算出する。そして、重み更新部226は、更新された推定距離h(n)に距離g(n)を加えて、更新された評価値f(n)を算出する。
(S65)重み更新部226は、OPENリスト232およびCLOSEリスト233に含まれる全てのノードを選択したか判断する。全てのノードを選択した場合はステップS66に進み、未選択のノードがある場合はステップS62に進む。
(S66)重み更新部226は、SENTフラグをFalseに更新する。
図20は、クライアント制御の手順例を示すフローチャートである。
(S70)探索要求部124は、変換例である入力テーブルおよび出力テーブルと他の入力テーブルとを指定したデータ変換要求をユーザから受け付ける。探索要求部124は、サーバ装置200に接続して入力テーブルおよび出力テーブルを送信する。
図20は、クライアント制御の手順例を示すフローチャートである。
(S70)探索要求部124は、変換例である入力テーブルおよび出力テーブルと他の入力テーブルとを指定したデータ変換要求をユーザから受け付ける。探索要求部124は、サーバ装置200に接続して入力テーブルおよび出力テーブルを送信する。
(S71)中間テーブル選択部125および変換プログラム実行部127は、サーバ装置200への接続用のソケットを監視し、サーバ装置200からのデータの到着を待つ。
(S72)中間テーブル選択部125は、M個の中間テーブルを受信したか判断する。M個の中間テーブルを受信した場合はステップS73に進み、M個の中間テーブルを受信していない場合はステップS77に進む。なお、サーバ装置200からクライアント装置100へのM個の中間テーブルの送信は、1回も行われないこともあるし、1回だけ行われることもあるし、2回以上行われることもある。
(S72)中間テーブル選択部125は、M個の中間テーブルを受信したか判断する。M個の中間テーブルを受信した場合はステップS73に進み、M個の中間テーブルを受信していない場合はステップS77に進む。なお、サーバ装置200からクライアント装置100へのM個の中間テーブルの送信は、1回も行われないこともあるし、1回だけ行われることもあるし、2回以上行われることもある。
(S73)中間テーブル選択部125は、サーバ装置200から受信したM個の中間テーブルと保持している出力テーブルとを含む選択画面80を生成する。中間テーブル選択部125は、生成した選択画面80を表示装置111に表示する。
(S74)中間テーブル選択部125は、選択画面80に対するユーザの選択操作を受け付ける。ユーザの選択操作によりM個の中間テーブルのうちの1つが選択される。
(S75)重み計算部126は、M個の中間テーブル、出力テーブル、保持しているN個の距離関数hi(n)およびステップS74のユーザ選択結果から、新たな重みベクトルλを算出する。具体的には、重み計算部126は、M個の中間テーブルそれぞれと出力テーブルとを比較し、N個の距離関数hi(n)を用いてM×N個の推定距離を算出する。重み計算部126は、ユーザが選択した1個の中間テーブルに対する1個の推定距離h(n)が小さくなり、ユーザが選択しなかったM-1個の中間テーブルに対するM-1個の推定距離h(n)が大きくなるように、重みベクトルλをチューニングする。
(S75)重み計算部126は、M個の中間テーブル、出力テーブル、保持しているN個の距離関数hi(n)およびステップS74のユーザ選択結果から、新たな重みベクトルλを算出する。具体的には、重み計算部126は、M個の中間テーブルそれぞれと出力テーブルとを比較し、N個の距離関数hi(n)を用いてM×N個の推定距離を算出する。重み計算部126は、ユーザが選択した1個の中間テーブルに対する1個の推定距離h(n)が小さくなり、ユーザが選択しなかったM-1個の中間テーブルに対するM-1個の推定距離h(n)が大きくなるように、重みベクトルλをチューニングする。
(S76)重み計算部126は、ステップS75で算出した重みベクトルλをサーバ装置200に送信する。そして、ステップS72に進む。
(S77)変換プログラム実行部127は、変換例に対する応答として変換プログラムを受信したか判断する。変換プログラムを受信した場合はステップS78に進み、変換プログラムを受信していない場合はステップS72に進む。
(S77)変換プログラム実行部127は、変換例に対する応答として変換プログラムを受信したか判断する。変換プログラムを受信した場合はステップS78に進み、変換プログラムを受信していない場合はステップS72に進む。
(S78)変換プログラム実行部127は、ユーザから指定された他の入力テーブル(変換例以外の入力データを含むテーブル)に対して変換プログラムを実行する。これにより、他の入力テーブルに対応する他の出力テーブルが生成される。
(S79)変換プログラム実行部127は、ステップS78で生成された他の出力テーブルを表示装置111に表示する。ただし、変換プログラム実行部127は、他の出力テーブルをHDD103などのストレージ装置に保存してもよいし、他の出力デバイスに出力してもよいし、他の情報処理装置に送信してもよい。
第2の実施の形態の情報処理システムによれば、Programming by Exampleにより少量のデータ変換例から変換プログラムが生成され、変換プログラムにより他のデータが変換される。よって、ユーザはプログラミング言語を用いて明示的に変換プログラムを記述しなくてよく、データ変換の負担を軽減することができる。
また、データ変換例を実現するデータ変換方法の組み合わせは、グラフ探索によって発見される。グラフ探索では、A*アルゴリズムにより、距離関数を用いて各中間ノードと終了ノードとの間の距離が推定され、終了ノードに効率的に近付く方向に優先的に探索が進められる。よって、データ変換例を実現するデータ変換方法の組み合わせを効率的に探索できる。また、推定距離の算出では、中間テーブルと出力テーブルの差分が複数のデータ型の観点から評価され、データ型毎の推定距離の重み付き和が全体の推定距離となる。よって、異なる種類のデータ変換方法の組み合わせを適切に評価できる。
また、グラフ探索の途中で幾つかの中間テーブルがユーザに提示され、出力テーブルに最も近い中間テーブルがユーザにより選択され、ユーザ選択に基づいて距離関数の重みベクトルが更新される。よって、変換対象のデータの特性に合わせて、グラフ探索が効率化されるように距離関数をチューニングすることができる。また、重みベクトルの更新とグラフ探索は非同期に行われ、中間テーブルを提示してから新しい重みベクトルが与えられるまでの間もグラフ探索が進行する。よって、重みベクトルの更新手続きがグラフ探索を阻害することを抑制できる。また、ユーザに重みベクトル自体を指定させる代わりに、好ましい中間テーブルを選択させ、ユーザの選択結果から新しい重みベクトルが算出される。よって、ユーザ操作が直感的となりユーザの負担が軽減される。
上記については単に本発明の原理を示すものである。更に、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
10 探索制御装置
11 記憶部
12 処理部
13 入力データ
14 出力データ
15a,15b,15c,15d 中間データ
16 選択情報
11 記憶部
12 処理部
13 入力データ
14 出力データ
15a,15b,15c,15d 中間データ
16 選択情報
Claims (9)
- コンピュータに、
入力データおよび出力データを取得し、
前記入力データが中間データを経由して前記出力データに変換されるデータ変換経路を探索する探索処理であって、異なるデータ変換方法により前記入力データから複数の中間データを生成し、前記複数の中間データのうち探索先の中間データを絞り込んで前記探索先の中間データから他の中間データを生成することを含む探索処理を開始させ、
前記探索処理の途中で生成された2以上の中間データを出力し、前記2以上の中間データのうちの一部の中間データの選択を示す選択情報を受け付け、
前記選択情報に基づいて、前記探索先の中間データの絞り込み方法を制御する、
処理を実行させる探索制御プログラム。 - 前記探索処理は、評価関数を用いて各中間データの評価値を算出し、前記評価値に基づいて前記探索先の中間データを絞り込むことを含み、
前記絞り込み方法の制御では、前記選択情報に基づいて前記評価関数を更新する、
請求項1記載の探索制御プログラム。 - 前記評価関数は、複数の距離関数を用いて算出された複数の推定距離を、前記複数の距離関数に対応付けた重み値で重み付けして前記評価値を算出する関数であり、
前記評価関数の更新では、前記選択情報に基づいて前記重み値を更新する、
請求項2記載の探索制御プログラム。 - 前記評価関数の更新では、前記選択情報で選択された中間データが、前記選択情報で選択されなかった中間データよりも高い評価になるよう前記評価関数を更新する、
請求項2記載の探索制御プログラム。 - 前記選択情報の受け付けでは、他の中間データへの変換元になっていない末端の中間データを2以上のクラスタに分類し、前記2以上のクラスタそれぞれから少なくとも1つの中間データを抽出することで前記2以上の中間データを出力する、
請求項1記載の探索制御プログラム。 - 前記選択情報の受け付けは、前記探索処理を停止させずに実行し、
前記絞り込み方法は、前記探索処理の進行途中で変更される、
請求項1記載の探索制御プログラム。 - 前記選択情報の受け付けでは、前記2以上の中間データを表示装置に表示し、前記2以上の中間データのうちの一部の中間データをユーザに選択させる、
請求項1記載の探索制御プログラム。 - コンピュータが、
入力データおよび出力データを取得し、
前記入力データが中間データを経由して前記出力データに変換されるデータ変換経路を探索する探索処理であって、異なるデータ変換方法により前記入力データから複数の中間データを生成し、前記複数の中間データのうち探索先の中間データを絞り込んで前記探索先の中間データから他の中間データを生成することを含む探索処理を開始させ、
前記探索処理の途中で生成された2以上の中間データを出力し、前記2以上の中間データのうちの一部の中間データの選択を示す選択情報を受け付け、
前記選択情報に基づいて、前記探索先の中間データの絞り込み方法を制御する、
探索制御方法。 - 入力データおよび出力データを記憶する記憶部と、
前記入力データが中間データを経由して前記出力データに変換されるデータ変換経路を探索する探索処理であって、異なるデータ変換方法により前記入力データから複数の中間データを生成し、前記複数の中間データのうち探索先の中間データを絞り込んで前記探索先の中間データから他の中間データを生成することを含む探索処理を開始させ、前記探索処理の途中で生成された2以上の中間データを出力し、前記2以上の中間データのうちの一部の中間データの選択を示す選択情報を受け付け、前記選択情報に基づいて、前記探索先の中間データの絞り込み方法を制御する処理部と、
を有する探索制御装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2019/000659 WO2020144842A1 (ja) | 2019-01-11 | 2019-01-11 | 探索制御プログラム、探索制御方法および探索制御装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2020144842A1 JPWO2020144842A1 (ja) | 2021-10-21 |
JP7112003B2 true JP7112003B2 (ja) | 2022-08-03 |
Family
ID=71521074
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020565130A Active JP7112003B2 (ja) | 2019-01-11 | 2019-01-11 | 探索制御プログラム、探索制御方法および探索制御装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11797562B2 (ja) |
JP (1) | JP7112003B2 (ja) |
WO (1) | WO2020144842A1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022157970A1 (ja) * | 2021-01-25 | 2022-07-28 | 日本電気株式会社 | 情報処理装置、制御方法及び記憶媒体 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009017158A1 (ja) | 2007-08-01 | 2009-02-05 | Nec Corporation | 変換プログラム探索システムおよび変換プログラム探索方法 |
US20180113923A1 (en) | 2016-10-21 | 2018-04-26 | Microsoft Technology Licensing, Llc | Efficient transformation program generation |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3287738B2 (ja) | 1995-08-02 | 2002-06-04 | 株式会社野村総合研究所 | 関係関数探索装置 |
JPH10171643A (ja) | 1996-12-11 | 1998-06-26 | Fuji Xerox Co Ltd | プログラム合成装置及びプログラム合成方法 |
JP2003529814A (ja) | 1999-07-20 | 2003-10-07 | インメンティア インク | データ整理のための方法及びシステム |
US8799234B2 (en) * | 2010-07-12 | 2014-08-05 | Microsoft Corporation | Semantic entity manipulation using input-output examples |
JP4804836B2 (ja) * | 2005-08-31 | 2011-11-02 | 三菱電機株式会社 | データ生成装置及びデータ生成プログラム |
US10936744B1 (en) | 2010-04-21 | 2021-03-02 | Stanley Trepetin | Mathematical method for performing homomorphic operations |
US9946810B1 (en) | 2010-04-21 | 2018-04-17 | Stan Trepetin | Mathematical method for performing homomorphic operations |
US9442980B1 (en) | 2010-04-21 | 2016-09-13 | Stan Trepetin | Mathematical method for performing homomorphic operations |
JP5846006B2 (ja) | 2012-03-29 | 2016-01-20 | 富士通株式会社 | プログラム、コード生成方法および情報処理装置 |
GB2506122A (en) * | 2012-09-20 | 2014-03-26 | Ibm | Integrating data transform test with data transform tool |
JP6223713B2 (ja) | 2013-05-27 | 2017-11-01 | 株式会社東芝 | 電子機器、方法及びプログラム |
JP2014229276A (ja) | 2013-05-27 | 2014-12-08 | 日本電信電話株式会社 | グラフデータベース統合検索装置及び方法及びプログラム |
-
2019
- 2019-01-11 WO PCT/JP2019/000659 patent/WO2020144842A1/ja active Application Filing
- 2019-01-11 JP JP2020565130A patent/JP7112003B2/ja active Active
-
2021
- 2021-06-10 US US17/344,371 patent/US11797562B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009017158A1 (ja) | 2007-08-01 | 2009-02-05 | Nec Corporation | 変換プログラム探索システムおよび変換プログラム探索方法 |
US20180113923A1 (en) | 2016-10-21 | 2018-04-26 | Microsoft Technology Licensing, Llc | Efficient transformation program generation |
Also Published As
Publication number | Publication date |
---|---|
WO2020144842A1 (ja) | 2020-07-16 |
JPWO2020144842A1 (ja) | 2021-10-21 |
US11797562B2 (en) | 2023-10-24 |
US20210311961A1 (en) | 2021-10-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100561480C (zh) | 结构化文档管理***和管理在所述***中的索引的方法 | |
CN112765477B (zh) | 信息处理、信息推荐的方法和装置、电子设备和存储介质 | |
US8041729B2 (en) | Categorizing queries and expanding keywords with a coreference graph | |
JP3225912B2 (ja) | 情報検索装置、方法及び記録媒体 | |
US9378266B2 (en) | System and method for supporting cluster analysis and apparatus supporting the same | |
CN101398810A (zh) | 自适应服务选择设备及其方法,查询***及其方法 | |
JP2022024102A (ja) | 検索モデルのトレーニング方法、目標対象の検索方法及びその装置 | |
US20090157634A1 (en) | Information processing device, information processing method, and program | |
EP4174727A1 (en) | Methods and systems for approximating embeddings of out-of-knowledge-graph entities for link prediction in knowledge graph | |
JP7112003B2 (ja) | 探索制御プログラム、探索制御方法および探索制御装置 | |
JP2022502744A (ja) | コード分類のためのハイブリッド機械学習モデル | |
KR20210031094A (ko) | 트리 기반 이상치 탐지 장치 및 방법, 컴퓨터 프로그램 | |
US11645312B2 (en) | Attribute extraction apparatus and attribute extraction method | |
CN115329753A (zh) | 一种基于自然语言处理的智能数据分析方法和*** | |
EP3157209B1 (en) | Route search apparatus and route search method | |
JP5379812B2 (ja) | データ抽出装置、データ抽出方法、及びプログラム | |
CN114279457A (zh) | 路径规划方法、装置、设备及可读存储介质 | |
JP2022136506A (ja) | 検索システム、検索方法、及びプログラム | |
CN114118078A (zh) | 制作辅助装置、制作辅助方法及记录介质 | |
JP7037048B2 (ja) | 探索プログラムおよび探索方法 | |
JP6512050B2 (ja) | 探索方法、探索プログラム及び探索装置 | |
JP2020187644A (ja) | 情報処理装置、情報処理方法、及び情報処理プログラム | |
JP4498342B2 (ja) | 情報推薦システム及び情報推薦プログラム | |
JP2012198709A (ja) | 検索制御プログラム、検索方法、検索システム | |
JP2020004057A (ja) | 選定プログラム、選定方法および選定装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20210603 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20220621 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20220704 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7112003 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |